首页 > 小程序教程 > 微信小程序开发在线红包打赏充值金额送礼物页面设计与制作教程

微信小程序开发在线红包打赏充值金额送礼物页面设计与制作教程

上一篇 下一篇
今天带来教程在线打赏充值金额送礼物页面功能制作与设计,制作好以后效果图如下:


一、wxml页面代码如下:
<!--title部分  -->
<view class="title">
    <view class="title-txt">
       <view class="title-top" bindtap="detailed">
             <text>打赏金额</text><image src="/images/yw.png"></image>
       </view>
        <text>开启打赏,律师第一时间回复</text>
    </view>
</view> 
<!--价格列表部分  -->
<view class="money-list">
    <view class="{{index == value?  'block set' : 'block'  }}"  wx:for="{{arr}}" bindtap="thisVal"  id="{{index}}" wx:key  = "{{index}}">
        <text id="{{index}}" >{{item}}</text>
        <text id="{{index}}" >元</text>
    </view>
</view>
<!-- 免费咨询 -->
<view class="gratis"><text>免费咨询</text></view>
<!--提示  -->
<view class="prompt">
    <view class="prompt-title">
        <text>【金额】</text>
        <text>赏金越多,回复的律师越多,回复速度越快</text>
    </view>
     <view class="prompt-title">
        <text>【特权】</text>
        <text>赏金50元以上享有隐私保护、仅律师可阅特权</text>
    </view>
</view>
<!--所在区域  -->
<view class="input-text">
    <text>所在区域</text>
    <view class="val" bindtap='initFn'>
        <text>{{name}}</text>
       <image src="../../images/b.png"></image>
    </view>
</view>
<!-- 业务类型 -->
<view class="input-text">
    <text>业务类型</text>
    <view class="val" bindtap="typeFn">
        <text id="{{typeID}}">{{typeName}}</text>
       <image src="../../images/b.png"></image>
    </view>
</view>
<!--发布  -->
<button class="release"  bindtap="releaseFn" disabled="{{disabled}}">发布</button>
<!--所在区域 遮罩层  -->
<view class='mask' wx:if="{{maskDis != 0 }}" >
        <view class='mask-back'   bindtap="CloseFn"></view>
        <view class='address'>
        <picker-view indicator-style="height: 65px;" style="width: 100%; height: 250rpx;" value="{{valueArr}}" bindchange="bindChange">
                <picker-view-column>
                <view wx:for="{{province}}" wx:key="{{index}}"  class='address-box'>{{item}}</view>
                </picker-view-column>
                <picker-view-column>
                <view wx:for="{{city}}"  wx:key="{{index}}"  class='address-box'  >{{item}}</view>
                </picker-view-column>
                <picker-view-column>
                <view wx:for="{{area}}"  wx:key="{{index}}"  class='address-box'>{{item}}</view>
                </picker-view-column>
        </picker-view>
        </view>
</view>
<!--业务类型 遮罩层  -->
<view class='mask' wx:if="{{maskDis1 != 0 }}">
    <view class='mask-back'  bindtap="CloseFn"></view>
    <view class='address'>
       <picker-view indicator-style="height: 50px;" style="width: 100%; height: 150rpx;" value="{{typeArr}}" bindchange="change">
            <picker-view-column>
                 <view wx:for="{{Dtype}}" wx:key="{{index}}" style="line-height: 50px" id="{{item.id}}" class='address-box'>{{item.name}}</view>
            </picker-view-column>
            <picker-view-column>
                <view wx:for="{{Xtype}}"  wx:key="{{index}}" style="line-height: 50px" id="{{item.id}}" class='address-box'>{{item.name}}</view>
            </picker-view-column>
        </picker-view>
    </view>
</view>

二、样式wxss页面代码如下:
.title{
    text-align: center;
    display: flex;
    flex-wrap:wrap;
    justify-content:center;
     align-items:center;
     padding: 40rpx 0;
}
.title text{
    display: block;
}

.title text:first-child {
    font-size: 36rpx;
    color: #d92a2a;
  
}
.title text:last-child{
    color: #a9a9a9;
    font-size: 28rpx;
}
.money-list  {
    padding: 0 45rpx;
    display: flex;
    flex-wrap:wrap;
    justify-content:space-between;
    align-items:center;
}
.money-list .block{
     display: flex;
     justify-content:center;
     align-items:center;
     height: 200rpx;
     border:2px solid #a9a9a9;
     width: 200rpx; 
      margin-bottom: 30rpx;
      border-radius: 15rpx;
}
.money-list .block text:first-child{
   font-size: 68rpx;
   font-weight: bold;
  color: #a9a9a9;
}
.money-list .block text:last-child{
    font-size:26rpx;
    margin-top: 15rpx;
    margin-left: 5rpx;
     color: #a9a9a9;
}
.money-list .block.set{
    border-color: #d92a2a;
}
.money-list .block.set text{
    color: #d92a2a;
}
.gratis {
    display: flex;
     justify-content:center;
     align-items:center;
     height: 80rpx;
}
.gratis text {
    font-size: 30rpx;
    color: #333;
}
.prompt-title {
    display: flex;
    padding: 0 20rpx;
}
.prompt-title text{
    font-size: 26rpx;
    line-height: 45rpx;
}
.prompt-title text:first-child{
    color: #d92a2a;
}
.input-text {
    display: flex;
    justify-content:space-between;
    align-items:center;
    padding: 30rpx 45rpx 0 45rpx;
    height: 50rpx;
}
.input-text  text {
    font-size: 30rpx;
    color: #333;
}
.input-text  .val {
    display: flex;
    align-items:center;
     justify-content:flex-end;
     flex: 1;
}
.input-text  .val text {
    font-size: 30rpx;
    color: #a9a9a9;
}
.input-text  .val image{
    height: 35rpx;
    width:35rpx;
}
.release{
    position: fixed;
    bottom: 0;
    left: 0;
    width: 100%;
    display: flex;
    height: 100rpx;
    border-top:1px solid #b2b2b2;
    background:#4395FF;
    align-items: center;
    font-size:32rpx;
    color: #fff;
    justify-content: center;
    border-radius: 0rpx;
}
.mask-back {
        position: fixed;
        top: 0;
        left: 0;
        height: 100%;
        width: 100%;
        background: #000;
        opacity: 0.6;
        z-index: 1;
}
.address {
        position: fixed;
        bottom: 0;
        left: 0;
        width: 100%;
        z-index: 2;
        background: #ddd;
}
.address-box {
        line-height: 65px;
        text-align: center;
}
.title-top {
    padding-bottom: 15rpx;
    display: flex;
    align-items: center;
    justify-content: center;
}
.title-top image {
    height: 32rpx;
    width: 32rpx;
}

三、测试数据js页面:
// 函数库
var Utils = require("../../utils/util.js");
// 地图
var map = require("../../map/mappos.js");

var datalist = {
    doJson:{},            // 获取本地存储的login数据
    openid :"",
    arr:[8,18,28,38,58,68],
    citysData: "", // 请求的数据
    province: "",  // 数组省
    city: "", // 数组市
    area: "", // 数组区
    valueArr: [0, 0, 0],  // 默认值
    name: " ", // 赋值
    maskDis:0,   // 控制遮罩层的显示隐藏 => 省市区
    latitude: "",        // 维度
    longitude: "",       // 经度
    pos:0,      // 判断是否在加载中 =>省市区
    Dtype: [],  // 大类
    Xtype: [],   // 小类
    typeArr: [0, 0],    // 默认值
    record: "",   // 存放数据
    typeName: "",   // 显示
    typeID: "",   // 显示ID,
    maskDis1: 0,     // 控制遮罩层的显示隐藏 => 业务类型
    disabled:false,  // 点击发布之后禁用
};

Page({
data:datalist,
onLoad: function (options) {        // 页面加载
    
    this.DefaultMoney();    // 默认加载的金额
    this.getStorage();  // 获取login数据
    this.request(); // 请求省市区的接口
    this.loadCity(); // 获取经纬
    this.typeRequest();      // 加载业务类型       
    this.posFn();       // 获取本地存储位置
},
posFn: function () {
    var pos = wx.getStorageSync("position-type");
    if (pos) {
        this.setData({
            name: pos,
            pos:0
        })
    } else {
        this.setData({
            name: "定位失败",
            pos:1
        })
    }
},
getStorage: function () {// 取得存储的login数据
    var _this = this;
    var getSto = wx.getStorageSync("login");
    _this.setData({   // 存储返回的login的本地数据
            doJson: getSto
    })
    _this.loginFn(_this.data.doJson);  // 调取login的状态
},
request:function(){ // 请求省市区的接口
    var _this = this;
    Utils.requestFn({
            url:'/index.php/getAreas?server=1',
            success: function (res) {
                    var dataJson = res.data.data;
                    _this.setData({
                            citysData: dataJson
                    })
            }
        })
},

loginFn: function (obj){    // 页面加载 请求login状态
    var _this = this;
    var dosdk = obj.sdk;        // sdk
    var douid = obj.uid;    // uid
    wx.login({
    success: function (res) {
        if (res.code) { //  第一步: 获取code
            Utils.requestFn({
                url: '/index.php/getopenid?server=1',
                method: "POST",
                data: {
                code: res.code,
                sdk: dosdk,
                uid: douid
                },
                
                success: function (res) {
                    _this.setData({
                            openid: res.data.data.openid
                    })
                }
        })
        } else {
            console.log('获取用户登录态失败!' + res.errMsg)
        }
    }
    });
},
getLocation: function () {  // 获取地图的坐标
    var page = this
    wx.getLocation({
        type: 'wgs84',  
        success: function (res) {
            // success    
            var longitude = res.longitude
            var latitude = res.latitude
        }
    })
},
loadCity: function (longitude, latitude) {       // 获取经纬
    var _this = this;
    wx.getLocation({
        type: 'gcj02', // 不能选择 wgs84 地图应该是gcj02 用于地图
        success: function (res) {
            _this.setData({
                    latitude: res.latitude,
                    longitude: res.longitude
            })
        }
    })
},
initFn:function(){  // 初始化
    var nPos = this.data.pos;
    if (nPos != 1) return false;    // 如果pos = 0 的话 那么就是还在加载中、不能点击
    this.onloadFn();
},
onloadFn:function(){        // 加载省市区
    var aProvince = [];     // 存储省
    var citys = [];              //存储 市
    var areas = [];          //存储 区

    var citysData = this.data.citysData;
    var oProvince = citysData[this.data.valueArr[0]];

    citysData.forEach(function (province, i) {
            aProvince.push(province.name);
    })
    oProvince.citys.forEach(function (res) {
            citys.push(res.name)
    })
    areas = oProvince.citys[this.data.valueArr[1]].areas;
    var pos = this.data.valueArr;
    this.setData({
            maskDis: 1,
            province: aProvince,
            city: citys,
            area: areas
    })
},
bindChange: function (e) {          // 滑动省市区
    var citysData = this.data.citysData;        // 获取到总数据
    var posValue = this.data.valueArr;          // 获取到默认值的array
    var curentValue = e.detail.value;            // 获取到滚动的array
    var oProvince = {};     // 省份的数据
    var aCitys = [];         // 城市的数组list
    var oCitys = {};        // 城市的数据
    oProvince = citysData[curentValue[0]];          // 获取到省份

    if (posValue[0] != curentValue[0]) {    // 如果省份默认值与省份滚动值不相等,那么就是滚动的省份
            oProvince.citys.forEach(function (data) { // 利用省份获取对应子集的市区数组
                    aCitys.push(data.name);
            })
            oCitys = oProvince.citys[0];    // 显示市区数组第一个
            this.setData({
                    city: aCitys,   // 赋值对应市区数组
                    area: oCitys.areas,             // 区域数组
                    valueArr: [curentValue[0], 0, 0]  // 赋值第一个省份
            })
    } else if (this.data.valueArr[1] != curentValue[1]) {      // 以此判断市
            if (curentValue[1] >= oProvince.citys.length) return;  // 数据不存在
            oCitys = oProvince.citys[curentValue[1]];
            this.setData({
                    area: oCitys.areas,
                    valueArr: [curentValue[0], curentValue[1], 0]
            })
    } else {  // 滚动的是区域
            oCitys = oProvince.citys[curentValue[1]];
            this.setData({
                    valueArr: curentValue
            })
    }
    this.setData({
            name: `${oProvince.name}-${oCitys.name}-${oCitys.areas[this.data.valueArr[2]]}`
    })
},
CloseFn:function(){ // 关闭遮罩层 
    this.setData({
        maskDis:0,
        maskDis1:0
    })
},
typeRequest:function(){ // 加载业务类型的数据请求
var _this = this;
Utils.requestFn({
    url: '/index.php/getCategorys?server=1',
    success: function (res) {
        if (!res.data.status) return false;
        var res = res.data.data.categorys;
        
        _this.setData({
            record: res
        })
        _this.loadTypeFn();
    }
})
},
typeFn:function(){  // 点击业务类型获取数据
    this.loadTypeFn();
    this.setData({
        maskDis1:1
    })
},
loadTypeFn:function(){  // 默认 点击加载业务类型数据
    var _this = this;

    var record = _this.data.record;
    var center = record[this.data.typeArr[0]];
    var valArr = _this.data.typeArr;

    var Dtype = [];     // 存储的大类
    var Xtype = [];     // 存储的小类

    record.forEach(function (obj) {
        Dtype.push(obj)
    })
    center.child.forEach(function (obj) {
        Xtype.push(obj)
    })
    _this.setData({
        Dtype: Dtype,
        Xtype: Xtype,
        typeName: `${Dtype[valArr[0]].name}--${Xtype[valArr[1]].name}`,
        typeID: `${Dtype[valArr[0]].id}-${Xtype[valArr[1]].id}`
    })
},
change: function (e) { // 滚动获取值 ==> 业务类型
    var _this = this;

    var record = _this.data.record;
    var valArr = _this.data.typeArr;
    var curentValue = e.detail.value;

    var Xtype = [];

    var prem = record[curentValue[0]];

    if (valArr[0] != curentValue[0]) {

        prem.child.forEach(function (obj) {
            Xtype.push(obj);
        })
        _this.setData({
            Xtype: Xtype,
            typeArr: [curentValue[0], 0]
        })
    } else {
        var datas = this.data.Xtype;
        this.setData({
            typeArr: curentValue
        })
    }
    this.setData({
        typeName: `${prem.name}--${prem.child[curentValue[1]].name}`,
        typeID: `${prem.id}-${prem.child[curentValue[1]].id}`
    })
},
onReady: function () {
},
onShow: function () {
    // 页面显示
},
onHide: function () {
// 页面隐藏
},
onUnload: function () {
// 页面关闭
},
thisVal:function(ev){  // 点击价格获取当前的价格
    this.setData({
        value: ev.target.id
    });
},
DefaultMoney:function(){    // 默认的金额
    this.setData({
        value: 1
    });
}, 
releaseFn:function(){  // 提交数据
    var _this = this;

    var resData = wx.getStorageSync('login');   // 获取登陆的信息
    var twData = wx.getStorageSync('tw');   // 获取登陆的信息
    var money = _this.data.arr[_this.data.value];  // 点击的时候能获取到打赏金额

    var City = _this.data.name.split("-")[1];               // 城市
    var typeID = {
        catalog_big: _this.data.typeID.split("-")[0],
        catalog_small: _this.data.typeID.split("-")[1]
    };
    
    this.setData({  // 点击发布之后禁用按钮 防止重复点击
        disabled:true
    })
    Utils.requestFn({
        url:  '/index.php/faqprepay?server=1',
        method: "POST",
        data: {
            sdk: resData.sdk,    // 登陆的sdk
            uid: resData.uid,    // 登陆的uid
            title: twData.textareaVal, // 快速咨询的val
            content: twData.textareaVal,// 快速咨询的val
            catalog_big: typeID.catalog_big, // 大类
            catalog_small: typeID.catalog_small, // 小类
            city: City,       // 城市
            pay_type: "1", // 支付方式
            money: money,      // 价格
            img1: twData.url[0] || "",         // 上传的img1
            img2: twData.url[1] || "",        // 上传的img2
            img3: twData.url[2] || "",        // 上传的img3
            img4: twData.url[3] || "",         // 上传的img4
            openid: _this.data.openid  // openid
        },
        success:function(res){
            if (res.data.status) {
                var payModel = res.data.data
    
                //  获取微信支付的数据
                wx.requestPayment({
                        'timeStamp': payModel.timeStamp,
                    'nonceStr': payModel.nonceStr,
                    'package': payModel.package,
                    'signType': 'MD5',
                    'paySign': payModel.paySign,
                    "total_fee":"8",
                    'success': function (res) {   // 成功的状态
                        Utils.reLaunch("支付成功","/pages/Consultation/Consultation")
                            return false;
                    },
                    'fail': function (res) {      // 失败的状态
                        Utils.reLaunch("支付失败", "/pages/Consultation/Consultation")
                            return false;
                    }
                })
            }
        }
    })
    this.setData({  // 点击发布之后禁用按钮 防止重复点击
        disabled: false
    })
},
detailed: function () { // 点击打赏金额的详情
    wx.navigateTo({
        url: '/pages/static/moneyDetailed/moneyDetailed'
    })
}   
})

以上就是微信小程序开发在线打赏充值金额送礼物页面设计与制作教程的文章教程,希望对大家有帮助!

模板简介:该模板名称为【微信小程序开发在线红包打赏充值金额送礼物页面设计与制作教程】,大小是,文档格式为.,推荐使用打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【小程序教程】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 39,737次
  • 使用软件
  • 文件格式
  • 文件大小
  • 上传时间 05-15
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
html5 微信文章 微信模板 微信图片 微信公众平台 企业网站 微信素材 单页式简历模板 响应式 自适应
您可能会喜欢的其他模板