| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761 |
- <template>
- <!-- <page-meta :page-style="pageStyle"></page-meta> -->
- <view class="content">
-
- <es-nav-bg-black title="中康未来会员" right="管理订阅"></es-nav-bg-black>
-
- <view class="es-fx es-pc es-h-168 es-ml-44 es-mr-44 es-mt-20">
- <image class="topBg" src="../../static/image/course/vipBuy/topbg.png"></image>
- <view class="topItem es es-fx x-f">
- <image class="es-w-104 es-h-56" style="position: absolute;left:-32rpx;top:0" src="../../static/image/course/xiangyun.png"></image>
- <view class="es-fs-40 es-h-156 es-fw-bold x-c" style="color: #FFDAA3;">
- <view class="es x-bc " style="margin-left: 90rpx;">
- <image class="es-w-120 es-h-120 es-br-ban" :src="!$isEmpty(user.avatar)?user.avatar:avatar" ></image>
- <view class="y-b es-ml-20">
- <view class="es-fw-bold es-fs-32 es es-ac" :class="user.isVip==1?'vipC':'es-c-white'" >
- {{ $isEmpty(user.nickName)?"暂无昵称":user.nickName }}
- <image v-if="user.isVip==1" @tap="loginNavTo('../course/vipBuy')" class="es-w-40 es-h-40 es-ml-10" src="../../static/image/mine/vip.png"></image>
- </view>
- <view v-if="user.isVip==1" class="es-fs-22 es-mt-10 es-c-white" style="color: #929A9D">有效期至:{{ $formatDate(user.vipEndDate) }}</view>
- <view v-else class="es-fs-26 es-c-white">开通VIP享<span class="es-fw-bold es-fs-44" style="color: #929A9D;">6</span>大特权</view>
- </view>
- </view>
- </view>
- <image class="es-w-104 es-h-56" style="position: absolute;right:-32rpx;bottom:30rpx" src="../../static/image/course/xiangyun2.png"></image>
- </view>
- </view>
-
- <!-- Vip选项 -->
- <scroll-view class="payBox es x-f es-ml-44 es-mt-40" scroll-x="true" >
- <view v-for="(item, index) in dataList" :key="index" @tap="changePackage(index)" class="payItem es-ac es-pc" :class="pickIndex==index?'ac':''">
- <image v-if="pickIndex==index" class="san" src="../../static/image/course/vipBuy/item_san.png"></image>
- <view class="es-fs-28 es-c-white es-fw-400 x-c" style="margin-top: 54rpx;">{{item.packageName}}</view>
- <view class="es-c-white es-fs-44 es-fw-500 es-mt-2 x-c-28 price x-c">¥{{item.sellPrice}}</view>
- <view class="es-fs-24 es-fw-400 oriPriceBox x-c">
- <view>原价</view>
- <view class="oriPrice">¥{{item.price}}
- <view class="zkline"></view>
- </view>
- </view>
- <view class="es es-h-44 es-bc-theme es-c-white es-br-9 es-fs-28 x-c es-fx es-ml-33 es-mr-33 es-mt-10" >限时优惠</view>
- </view>
- </scroll-view>
-
- <!-- 支付方式 -->
- <view class="es-mr-44 es-ml-44 es-mt-40" v-if="!isIos">
- <view class="es-c-white es-fs-40 es-fw-700">支付方式</view>
- <view class="es-mt-30 x-bc">
- <view v-for="(item, index) in payTypes" :key="index" @tap="changePayType(index)" class="payTypeItem es x-bc " :class="payType==index+1?'pt_ac':''">
- <view class="x-bc es-ml-14">
- <image class="es-w-59 es-h-52" :src="index==0?'../../static/image/course/vipBuy/wx.png':'../../static/image/course/vipBuy/zfb.png'"></image>
- <view class="es-fs-33 es-c-white es-fw-500 es-ml-14">{{item}}</view>
- </view>
- <image v-if="payType==index+1" src="../../static/image/course/vipBuy/check.png" class="es-w-40 es-h-40 es-br-ban es-mr-14"></image>
- <view v-else class="es-w-40 es-h-40 es-br-ban es-mr-14 circle"></view>
- </view>
- </view>
- </view>
-
- <view class="checkbox">
- <view class="checkbox-icon" @tap="handleAgree">
- <image src="../../static/image/login/radio_default.png" v-show="!agree"></image>
- <image src="../../static/image/login/radio_choose.png" v-show="agree"></image>
- </view>
- <view>开通前请阅读并同意<text @tap="openH5(0)">《会员服务协议》</text><text @tap="openH5(1)">《自动续费协议》</text></view>
- </view>
-
-
- <!-- 购买须知 -->
- <view class="es-mr-44 es-ml-44 es-mt-40">
- <view class="es-c-white es-fs-40 es-fw-700">购买须知</view>
- <view class="es-mt-24 es-c-white es-fs-28" style="line-height: 40rpx;">1.有效期内,会员内容都可使用 <br/> 2.中康未来会员为虛拟服务,开通后不支持退款<br/> 3.支付成功会员权益自动生效<br/></view>
- </view>
-
-
- <!-- 底部bottom -->
- <view class="es payBot x-bc">
- <view class="es-fs-56 es-fw-bold x-bc es-ml-44" style="color: #FDD8A1;">¥{{checkPrice}} <view class="tehui">(限时优惠)</view></view>
- <view class="es btnPay x-c" @tap="doBuy">立即开通</view>
- </view>
-
- <uni-popup ref="popTip" type="dialog">
- <uni-popup-dialog cancelText="支付失败" confirmText="支付成功" mode="base" content="是否已支付成功?" title="提示" :duration="2000" :before-close="true" @close="confirmTip" @confirm="confirmTip"></uni-popup-dialog>
- </uni-popup>
-
-
- </view>
- </template>
- <script>
- import {getIOSPayStatus} from '@/api/common.js';
- import {getUserInfo} from '@/api/user'
- import { getPackageList,createVipOrder,vipZfbPayment,getVipOrderById,applePayment,setIapCertificate } from '@/api/course'
- export default {
- data() {
- return {
- dataList:[],
- pickIndex:0,
- packageItem:{sellPrice:0,price:0},
- checkPrice:0.0,
- payTypes:["微信支付","支付宝支付"],
- payType:1,//微信支付:1 支付宝支付:2
- user:{
- avatar:"/static/images/detault_head.png",
- userName:"",
- phone:"",
- nickName:"",
- },
- order:null,
- showPayTips:false,
- agree: false,
- isAgreePrivacy:false,
- isIos: false,
- showIOSPay: 0,
- isCanPay: true,
- iapChannel: null,
- restoreFlag: false,
- appleProductId: ''
- }
- },
- // onBackPress() {
- // // 手动调用返回方法
- // uni.navigateBack({ delta: 1});
- // // 阻止默认的返回行为
- // return true;
- // },
- onLoad(options) {
- // #ifdef APP-PLUS
- this.isIos = plus.os.name == "iOS"
- if (this.isIos) {
- this.getIOSPayStatusFun()
- } else {
- this.isAgreePrivacy=plus.runtime.isAgreePrivacy();
- }
- // #endif
- this.initData();
- },
- onShow() {
- if(this.showPayTips){
- this.$refs.popTip.open();
- this.showPayTips=false;
- }
- this.restoreComplateRequest()
- },
- onUnload() {
- const subNVue = uni.getSubNVueById('privilege');
- if(subNVue){
- setTimeout(e => {
- subNVue.show();
- }, 200);
- }
- },
- methods: {
- getIOSPayStatusFun() {
- getIOSPayStatus().then(res => {
- if (res.code == 200) {
- this.showIOSPay = res.iosPayStatus
- }
- })
- },
- initData(){
- this.getPackageList();
- this.getUserInfo();
- },
- getPackageList(){
- getPackageList().then(res => {
- if(res.code==200){
- this.dataList=res.data;
- this.packageItem=this.dataList[0];
- this.checkPrice=this.packageItem.sellPrice;
- this.appleProductId = this.packageItem.appleProductId
- }
- },
- rej => {}
- );
- },
- doBuy(){
- this.createVipOrder();
- },
- createVipOrder(){
- if (!this.agree) {
- uni.showToast({
- title: "请同意相关协议",
- icon: 'none'
- });
- return
- }
- if(!this.$isLogin()){
- this.$showLoginPage();
- return;
- }
- if(this.isIos&&this.showIOSPay != 1) {
- uni.showToast({
- title: '请开通苹果支付',
- icon: 'none'
- });
- return
- }
- if(this.isIos&&this.showIOSPay==1) {
- this.payType = 2
- }
- uni.showLoading({title:""});
- let params={"packageId":this.packageItem.packageId,"payType":this.payType};
- createVipOrder(params).then(res => {
- console.log("qxj createVipOrder res:"+JSON.stringify(res));
- uni.hideLoading();
- if(res.code==200){
- this.order=res.order;
- if(this.payType==1){ //微信支付
- this.doWxPay();
- } else if (this.payType == 2) { //苹果
- this.doApplePay()
- } else{ //支付宝
- this.doAlipay();
- }
- }else{
- uni.showToast({title: res.msg,icon: 'none'});
- }
- },
- rej => {}
- );
- },
- changePackage(index){
- this.pickIndex=index;
- this.packageItem=this.dataList[index];
- this.checkPrice=this.packageItem.sellPrice;
- this.appleProductId = this.packageItem.appleProductId
- },
- changePayType(index){
- this.payType=index+1;
- },
- getUserInfo(){
- let that=this;
- getUserInfo().then(res => {
- if(res.code==200){
- if(res.user!=null){
- uni.setStorageSync('userInfo',JSON.stringify(res.user));
- this.user=res.user;
- }
- else{
- uni.showToast({
- icon:'none',
- title: res.msg,
- });
- }
- }
- },
- rej => {}
- );
- },
- doAlipay(){
- var data = {orderId:this.order.orderId};
- let that=this;
- // #ifdef APP-PLUS
- const tzCashier=uni.requireNativePlugin("TZBank-Cashier");
- uni.showLoading();
- vipZfbPayment(data).then(res => {
- uni.hideLoading();
- if(res.code==200){
- if(res.type=="tz"){
- //console.log("qxj res:"+JSON.stringify(res));
- //console.log("qxj orderFlowNo:"+res.data.body.orderFlowNo+" businessCstNo:"+res.data.body.orderNo+" platMerCstNo:"+res.data.body.platMerCstNo);
- const match = res.data.body.url.match(/[\?&]businessCstNo=([^&]+)/);
- const businessCstNo = match ? match[1] : null;
- console.log("qxj tzCashier:"+tzCashier+" businessCstNo:"+businessCstNo);
- tzCashier.pay({
- env:0,
- wxMiniProgramType:0,
- wxAppId:'wx703c4bd07bbd1695',
- wxUniversalLink:"https://yjf.runtzh.com/",
- orderFlowNo:res.data.body.orderFlowNo,
- businessCstNo:businessCstNo,
- platMerCstNo:res.data.body.platMerCstNo
- },(res)=>{
- // uni.showToast({
- // title:'收银台回调:'+JSON.stringify(res),
- // icon:'none'
- // });
- uni.$emit('closePrivilege', {});
- that.showPayTips=true;
- });
- }
- else if(res.type=='hf'){
- if (uni.getSystemInfoSync().platform == 'android') {
- var alipayScheme ='alipays://platformapi/startApp?&saId=10000007&qrcode=' + res.data.qr_code;
- }else{
- var alipayScheme ='alipay://platformapi/startApp?&saId=10000007&qrcode=' + res.data.qr_code;
- }
- // 在uni-app中使用plus.runtime.openURL打开URL
- plus.runtime.openURL(alipayScheme, function(error) {
-
- });
- uni.$emit('closePrivilege', {});
- that.showPayTips=true;
- }
- }
- else{
- uni.showToast({title:res.msg,icon:'none'})
- }
-
- },
- rej => {}
- );
- // #endif
- },
- doWxPay(){
- var that=this;
- plus.share.getServices(function(res){
- var sweixin = null;
- for(var i=0;i<res.length;i++){
- var t = res[i];
- if(t.id == 'weixin'){
- sweixin = t;
- }
- }
- if(sweixin){
- let path='/pages_order/userVipOrderPayment?orderId='+that.order.orderId+"&payMethod=app";
- console.log('调起小程序 path:'+path);
- //唤起微信跳转小程序
- sweixin.launchMiniProgram({
- id:getApp().globalData.miniprogamId,
- path:'/pages_order/userVipOrderPayment?orderId='+that.order.orderId+"&payMethod=app",
- type:0 // 微信小程序版本类型,可取值: 0-正式版; 1-测试版; 2-体验版。 默认值为0。
- },function(){
- console.log("微信唤起成功");
- return true;
- },function(e){
- console.log("微信唤起失败",e);
- uni.showToast({
- title:'微信唤起失败,请检查是否有微信应用',
- icon:'none'
- });
- return false;
- });
- that.showPayTips=true;
- uni.$emit('closePrivilege', {});
- }else{
- uni.showToast({
- title:'微信唤起失败,请检查是否有微信应用',
- icon:'none',
- duration:3000
- });
- return false;
- }
-
- },function(res){
- console.log(JSON.stringify(res));
- });
- },
- getVipOrderById(){
- getVipOrderById(this.order.orderId).then(res => {
- this.$refs.popTip.close();
- if(res.code==200){
- if(res.data.status==1 || res.data.payTime!=null){
- // #ifdef APP-PLUS
- if(plus.runtime.channel=="baidu"){ //获取渠道标识
- let bdCmdType=uni.getStorageSync("bdCmdType");
- if(bdCmdType!=null && parseInt(bdCmdType)<=2){
- //this.$registerIdCode("orders",2,res.data.payMoney.toString()); //已下单
- }
- }
- // #endif
- this.getUserInfo();
- uni.showToast({title:"支付成功",icon:'success'});
- }else{
- uni.showToast({title:"支付失败",icon:'error'});
- }
- }
- setTimeout(()=>{
- this.$navBack();
- },2000);
-
- },
- rej => {}
- );
- },
- openH5(index){
- uni.setStorageSync('url',index==0?"https://userapp.zkhj6.com/web/userAgreement":"https://userapp.zkhj6.com/web/vipAutomaticService");
- uni.navigateTo({
- url:"/pages/index/h5"
- })
- },
- closeTip(){
- this.$refs.popTip.close();
- this.getVipOrderById();
- },
- confirmTip() {
- uni.showLoading({title:"请稍侯...",mask:true});
- setTimeout(()=>{
- uni.hideLoading();
- this.getVipOrderById();
- uni.$emit('refreshUser', {});
- },2000);
- // setTimeout(()=>{
- // this.$navBack();
- // },2000);
- },
- handleAgree() { // 同意
- this.agree = !this.agree
- if(this.isIos) {
- if(this.agree) {
- plus.runtime.agreePrivacy()
- } else {
- plus.runtime.disagreePrivacy();
- }
- }
- },
- doApplePay(){
- var data = {
- orderId: this.order.orderId
- };
- let that = this;
- uni.showLoading({
- title: ""
- });
- applePayment(data).then(res => {
- uni.hideLoading();
- console.log("applePayment===",res)
- if (res.code == 200) {
- this.checkApplePay(res.payCode)
- } else {
- uni.showLoading({
- title: res.msg,
- icon: none
- })
- }
- }).catch(err => {
- uni.hideLoading();
- })
- },
- checkApplePay(payCode) {
- const that = this
- uni.showLoading({
- title: '检测支付环境...',
- mask: true
- })
- uni.getProvider({
- service: 'payment',
- success: (res) => {
- let iapChannel = res.providers.find((channel) => channel.id === 'appleiap');
- that.iapChannel = iapChannel
- if (!iapChannel) {
- console.log('Apple IAP channel not found. Check device & configuration.');
- uni.hideLoading()
- uni.showToast({
- title: "不支持苹果支付",
- icon: 'none'
- })
- return;
- }
- console.log("that.appleProductId=====",that.appleProductId)
- // 获取订单信息,必须调用此方法才能进行 iap 支付
- iapChannel.requestOrder([that.appleProductId], function(orderList) {
- console.log('requestOrder success666: ', orderList)
- that.applePay(payCode)
- }, function(e) {
- uni.showToast({
- title: "获取产品信息失败",
- icon: 'none'
- })
- console.log('requestOrder failed: ' + JSON.stringify(e));
- })
- },
- fail: (err) => {
- console.log('Failed to get payment provider:', err);
- uni.hideLoading()
- uni.showToast({
- title: "获取支付通道失败",
- icon: 'none'
- })
- }
- });
- },
- // 请求是否有已完成未关闭的订单
- restoreComplateRequest() {
- const that = this
- if (this.iapChannel) {
- this.iapChannel.restoreComplateRequest({
- manualFinishTransaction: true, // 3.5.1+ 支持,设置此参数后需要开发者主动关闭订单,参见下面的关闭订单方法 finishTransaction()
- username: "USERID_"+ that.user.userId
- }, function(res) {
- // res 格式为数组存放恢复的IAP商品交易信息对象 IAPTransaction,需要将返回的支付凭证传给后端进行二次认证
- //如果有并且状态为已支付则请求关闭并回调给后端
- console.log("已完成未关闭的订单信息:", res)
- if (res.length > 0) {
- //轮询关闭订单
- res.map(item => {
- that.finishTransaction(item, that.iapChannel)
- })
- }
- });
- }
- },
- // 关闭订单
- finishTransaction(transaction, iapChannel) {
- console.log("==finishTransaction===")
- return new Promise((resolve, reject) => {
- this.iapChannel.finishTransaction(transaction, (res) => {
- console.log("==fresolve inishTransaction===",res)
- resolve(res);
- }, (err) => {
- console.log("==err inishTransaction===",err)
- reject(err);
- });
- });
- },
- //苹果支付
- applePay(payCode) {
- console.log("苹果支付", this.order.orderId,payCode)
- let that = this
- uni.showLoading({
- title: '支付中...',
- mask: true
- })
- this.restoreFlag = true
- uni.requestPayment({
- provider: 'appleiap',
- orderInfo: {
- productid: that.appleProductId,
- username: 'USERID_' + this.user.userId, // 透传参数,一般用于标记订单和用户的关系,向苹果服务器二次验证票据时返回此字段
- quantity: 1, // 购买数量,至少大于等于 1
- manualFinishTransaction: true,
- optimize: true // 设置 optimize: true 解决丢单问题
- },
- async success(res) {
- console.log("苹果支付===", res)
- that.restoreFlag = false
- // {
- // "payment": {
- // "productid": "001",
- // "quantity": "1",
- // "username": "ORDERID562"
- // },
- // "transactionDate": "2025-07-02 18:20:37",
- // "transactionIdentifier": "2000000953130653",
- // "transactionReceipt": "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",
- // "transactionState": "1",
- // "errMsg": "requestPayment:ok"
- // }
- if(res.transactionState == '1'){
- //调用后端接口验签
- let data = {
- payCode: payCode,
- transactionId: res.transactionIdentifier,
- receipt: res.transactionReceipt,
- chooseEnv: false, // 是否选择正式环境
- payclassifyId: that.appleProductId,
- classify: 5, // 5:appvip,course
- }
- that.submitMisson(data,res)
- }
- },
- fail(e) {
- console.log('调起苹果支付失败:', e)
- that.isCanPay = true
- uni.showLoading({
- title: '支付失败',
- icon: "error"
- })
- },
- complete() {
- that.isCanPay = true
- uni.hideLoading()
- }
- })
- },
- // 苹果内购二次校验
- submitMisson(data,transaction) {
- const that = this
- uni.showLoading({
- title: '正在处理支付结果...',
- mask: true
- })
- setIapCertificate(data).then( async res => {
- uni.hideLoading()
- if (res.code == 200) {
- //给支付按钮解锁
- that.isCanPay = true
- console.log("submitMisson===",res)
- if (res.status == 1 || res.payTime != null) {
- // #ifdef APP-PLUS
- if (plus.runtime.channel == "baidu") { //获取渠道标识
- let bdCmdType = uni.getStorageSync("bdCmdType");
- if (bdCmdType != null && parseInt(bdCmdType) <= 2) {
- //this.$registerIdCode("orders",2,res.data.payMoney.toString()); //已下单
- }
- }
- // #endif
- that.getUserInfo();
- await that.finishTransaction(transaction)
- uni.showToast({
- title: "支付成功",
- icon: 'success'
- });
- } else {
- uni.showToast({
- title: "支付失败",
- icon: 'error'
- });
- }
- }
- }).catch(()=>{
- uni.hideLoading()
- })
- }
- }
- }
- </script>
- <style >
-
- page {
- background-color: #1B1F22;
- }
- .topBg{
- position: absolute;
- width:calc(100% - 88rpx) ;
- height:168rpx;
- z-index: 5;
- }
-
- .topItem{
- width: 100%;
- height: 100%;
- z-index: 10;
- }
-
- .payBox{
- display:flex;
- white-space:nowrap;
- overflow-x: scroll;
- }
-
- .payItem{
- position: relative;
- display: inline-block;
- width: 209rpx;
- height: 286rpx;
- background-image: url(../../static/image/course/vipBuy/item.png);
- background-repeat: no-repeat;
- background-size: cover;
- background-position: center;
- /* background-attachment: fixed; */
- margin-right: 12rpx;
- }
-
- .ac{
- background-image: url(../../static/image/course/vipBuy/item_ac.png);
- .price{
- color: #C4AA83;
- }
- }
-
- .san{
- position: absolute;
- left: calc(50% - 25rpx);
- top:-10rpx;
- width: 50rpx;
- height: 42rpx;
- }
-
- .price{
- color: #fff;
- }
-
- .oriPriceBox{
- color: #797A7D;
- .oriPrice{
- position: relative;
- }
- .zkline{
- position: absolute;
- left: 0;
- top:18rpx;
- height: 1px;
- width: 100%;
- background-color:#797A7D ;
- }
- }
-
- .payTypeItem{
- background-color:#1B1F22;
- border:1px solid #fff;
- border-radius: 10rpx;
- width: calc(50% - 15rpx);
- height: 94rpx;
- }
-
- .circle{
- border:1px solid #fff;
- }
-
- .pt_ac{
- border:1px solid #FDD8A1;
- }
-
- .payBot{
- position: fixed;
- bottom: 0;
- left: 0;
- right: 0;
- width: 100%;
- height: 170rpx;
- }
-
- .tehui{
- color: #8B8F92;
- font-size: 26rpx;
- font-weight: 400;
- }
-
- .btnPay{
- width: 246rpx;
- height: 84rpx;
- background: linear-gradient(90deg, #FFE0B2, #F8BA8B);
- border-radius: 41rpx;
- margin-right: 44rpx;
- font-weight: 700;
- font-size: 40rpx;
- color: #1B1F22;
- line-height: 61rpx;
- }
-
- .vipC{
- color: #FDD8A1;
- }
-
-
- .checkbox {
- margin: 20rpx;
- margin-left: 20px;
- margin-top: 36rpx;
- display: flex;
- flex-direction:row;
- align-items: flex-start;
- justify-content: flex-start;
- font-family: PingFang SC, PingFang SC;
- font-weight: 400;
- font-size: 26rpx;
- color: #999999;
- line-height: 38rpx;
- text-align: left;
- }
-
- .checkbox text{
- color:#2583EB;
- }
-
- .checkbox-icon{
- flex-shrink: 0;
- margin-right: 12rpx;
-
- }
-
- .checkbox-icon image{
- height: 30rpx;
- width: 30rpx;
- margin-top: 2px;
- }
-
-
- </style>
|