lin
2026-05-26 7b1e4d3539ad229b5766bd93093e5a32f4d65d8c
feat:星享购 绑卡+权收
4 files modified
256 ■■■■ changed files
pages.json 7 ●●●●● patch | view | raw | blame | history
pages/quanshou/index.vue 6 ●●●● patch | view | raw | blame | history
pages/quanyi/add.vue 166 ●●●● patch | view | raw | blame | history
pages/quanyi/index.vue 77 ●●●●● patch | view | raw | blame | history
pages.json
@@ -244,6 +244,13 @@
            }
        },
        {
            "path": "pages/web/toUrl",
            "style": {
                "navigationStyle":"custom",
                "navigationBarTitleText": ""
            }
        },
        {
            "path": "pages/vip/index",
            "style": {
                "navigationBarTitleText": "会员"
pages/quanshou/index.vue
@@ -199,8 +199,8 @@
      <!--   尊享会员年卡   -->
      <view style="background: url('/static/img/qyBg2.png') no-repeat top center; background-size: 100%;width: 100%;height: 390rpx;padding: 80rpx;margin-top: 30rpx;">
        <view style="font-size: 48rpx;font-weight: bold;background: -webkit-linear-gradient(#2A261A, #141316);-webkit-background-clip: text;-webkit-text-fill-color: transparent;">黑卡VIP卡</view>
        <view style="font-size: 28rpx;font-weight: 400;color: #2A261A;">扣款日期:2026-05-01</view>
        <view style="display: flex;margin-top: 50rpx;align-items: self-end;">
        <view v-if="lst.length" style="font-size: 28rpx;font-weight: 400;color: #2A261A;">扣款日期:{{lst[0].buyDate}}</view>
        <view v-if="lst.length" style="display: flex;margin-top: 50rpx;align-items: self-end;">
          <view v-if="lst.length" style="font-size: 28rpx;width: 70%;">
            <p style="background: -webkit-linear-gradient(#2A261A, #141316);-webkit-background-clip: text;-webkit-text-fill-color: transparent;font-size: 48rpx;font-weight: 500;">¥{{lst[0].amount.toFixed(2)}} <span style="font-size: 24rpx;">{{lst[0].isBuy?'已扣款' : ''}}</span></p>
          </view>
@@ -238,7 +238,7 @@
              <image style="width: 100%;height: 538rpx;" mode="aspectFit" src="/static/img/quanshou/xn1.png"></image>
              <image style="width: 100%;height: 538rpx;" mode="aspectFit" src="/static/img/quanshou/xn2.png"></image>
              <image style="width: 100%;height: 342rpx;" mode="aspectFit" src="/static/img/quanshou/xn3.png"></image>
              <image style="width: 100%;height: 712rpx;" mode="aspectFit" src="/static/img/quanshou/xn4.png"></image>
              <image style="width: 100%;height: 712rpx;margin-top: 20rpx;" mode="aspectFit" src="/static/img/quanshou/xn4.png"></image>
              <button class="exchange-btn" @click="toHuiyuan">我要领取</button>
              <view class="note" style="padding-bottom: 50rpx;text-align: center;">* 虚拟权益以实际兑换为准</view>
          </view>
pages/quanyi/add.vue
@@ -194,43 +194,15 @@
    kk(){
      const _this = this;
      if(this.addressStr.length < 8){
        uni.showToast({
          title: '请输入详细地址',
          icon: 'none'
        });
        return
      }
      uni.request({
        url: _this.$webHost + "/api/v2/customer/appAddCstAddress",
        method: "POST",
        data: {
          ..._this.addressDetail,
            customerId: uni.getStorageSync('ygxLogin').customerId,
          sourceId: uni.getStorageSync('ygxLogin').appId
        },
        success(){
          uni.request({
            url: _this.$webHost+'/api/v2/sign/signed/'+uni.getStorageSync('ygxLogin').customerId,
            method:'POST',
          })
          uni.request({
            url: _this.$webHost+'/api/v2/pay/memberPurchaseBenefitsPays',
            method:'POST',
            data:{
              customerId: uni.getStorageSync('ygxLogin').customerId,
              memberPeriodConfigId: uni.getStorageSync('memberPeriodConfigInfo').id
            },
            success(){
              _this.getUserInfo()
            }
          })
        }
      })
      // if(this.addressStr.length < 8){
      //   uni.showToast({
      //     title: '请输入详细地址',
      //     icon: 'none'
      //   });
      //   return
      // }
        // 移到上面了,先保存地址再走下面的接口
      // uni.request({
@@ -324,6 +296,15 @@
        },
      });*/
    },
    isValidIDCard(IDCard) {
      // 正则:15位纯数字 或 18位(前17位数字 + 最后一位数字/X)
      const idCardReg = /(^\d{15}$)|(^\d{17}([0-9]|X)$)/;
      return idCardReg.test(IDCard)
    },
    isValidChineseBankCard(cardNumber) {
      const length = cardNumber.length;
      return length === 16 || length === 19;
    },
    submit() {
      const _this = this;
      if(!this.protocolChecked[0]){uni.showToast({title: '请阅读并同意相关协议', icon: 'none'});return;}
@@ -340,6 +321,14 @@
          icon: "none",
        });
        return;
      } else {
        if (!_this.isValidIDCard(_this.idCardNo)) {
          uni.showToast({
            title: "请输入正确的身份证号",
            icon: "none",
          });
          return;
        }
      }
      if(!_this.cardNumber){
        uni.showToast({
@@ -347,6 +336,14 @@
          icon: "none",
        });
        return;
      } else {
        if (!_this.isValidChineseBankCard(_this.cardNumber)) {
          uni.showToast({
            title: "请输入正确的银行卡号",
            icon: "none",
          });
          return;
        }
      }
      if(!_this.cardPhone){
        uni.showToast({
@@ -386,6 +383,10 @@
        });
        return;
      }
      if (!/^1(3|4|5|7|8|9|6)\d{9}$/i.test(_this.addressDetail.contactPhone)) return uni.showToast({
        title: '请输入正确的收件人联系电话',
        icon: 'none'
      });
      if (!_this.addressDetail.provinceCode) {
        uni.showToast({
          title: "请输入收件人所在地",
@@ -433,7 +434,17 @@
        }
      })
      // 保存地址:地址保存成功后再走提交接口
      uni.request({
        url: _this.$webHost + "/api/v2/customer/appAddCstAddress",
        method: "POST",
        data: {
          ..._this.addressDetail,
            customerId: uni.getStorageSync('ygxLogin').customerId,
          sourceId: uni.getStorageSync('ygxLogin').appId
        },
        success: function (res) {
            if(res.data.code==200){
      uni.request({
        url: _this.$webHost+'/api/v2/pay/verifySMSCodes',
        method:'POST',
@@ -454,9 +465,6 @@
        },
        success(e){
          if(e.data.code!==200){
            // _this.$util.Tips({
            //   title: e.data.data
            // });
            uni.showToast({
              title: e.data.data,
              icon: 'none'
@@ -498,6 +506,80 @@
          })
        }
      })
            } else {
                uni.showToast({
                  title: res.data.msg,
                  icon: 'none'
                });
            }
        }
      })
   //    uni.request({
   //      url: _this.$webHost+'/api/v2/pay/verifySMSCodes',
   //      method:'POST',
   //      data:{
   //        ..._this.bindCardId,
   //        "customerId": uni.getStorageSync('ygxLogin').customerId,
   //        "cardPhone" : _this.cardPhone,  //手机号
   //        "cardNumber": _this.cardNumber, //卡号
   //        "cardName" : _this.cardName, // 名字
   //        "cardIdNo" : _this.cardIdNo,
   //        "bankName" : _this.bankName,
   //        "cardNo" :  _this.cardNumber,
   //        "verificationCode": _this.verificationCode,
   //      },
   //      success(e){
   //        if(e.data.code!==200){
   //          // _this.$util.Tips({
   //          //   title: e.data.data
   //          // });
            // uni.showToast({
            //   title: e.data.data,
            //   icon: 'none'
            // });
            // 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 || !ls.some(item => item.bindStatus == 0)) {_this.kk();return;}
   //            if(ls.length && !ls[1].bindStatus){
   //              _this.$refs.codeUi.open()
   //              _this.isCounting = false;
   //              _this.countText = '';
   //              return;
   //            }
   //            if(ls.length && !ls[2].bindStatus){
   //              _this.$refs.setUi.open();
   //              _this.isCounting = false;
   //              _this.countText = '';
   //              return;
   //            }
   //            if(!ls || !ls.some(item => item.bindStatus == 0)) {_this.kk();return;}
   //            _this.kk()
   //          }
   //        })
   //      }
   //    })
    },
@@ -1006,7 +1088,7 @@
                  <text>银行卡号</text>
                </view>
                <view class="inp_box">
                  <input  maxlength="30"  @blur="validateAndCacheCardInfo" v-model="cardNumber" class="inp" placeholder="请输入银行卡号" />
                  <input type="number" maxlength="30"  @blur="validateAndCacheCardInfo" v-model="cardNumber" class="inp" placeholder="请输入银行卡号" />
                  <image @click="cardNumber=''" v-show="!bindStatus && cardNumber" :src="offIcon" style="width: 40rpx;height: 40rpx;position: absolute;right: 0rpx;top: 30rpx;"></image>
                </view>
@@ -1254,6 +1336,7 @@
                  v-model="verificationCodeT"
                  border="none"
                  placeholder="请输入验证码"
                  type="number"
                  style="height: 100rpx;border: 1px solid #EEEEEE;border-radius: 30rpx;padding: 0 50rpx;"
              >
                <template #suffix>
@@ -1361,6 +1444,7 @@
                  v-model="verificationCodeS"
                  border="none"
                  placeholder="请输入验证码"
                  type="number"
                  style="height: 100rpx;border: 1px solid #EEEEEE;border-radius: 30rpx;padding: 0 50rpx;"
              >
                <template #suffix>
pages/quanyi/index.vue
@@ -63,6 +63,7 @@
  data() {
    return  {
      active: 0,
      ygxLogin:{},
      protocolChecked: [0],
      showTextBox: false,
@@ -236,6 +237,34 @@
        <text style="display: inline;font-size: 24rpx;color: #4766FE" @click="link(`/pages/web/xieyi?code=${memberPeriodConfigInfo.protocolCode}&title=${memberPeriodConfigInfo.protocolName}`)">{{memberPeriodConfigInfo.protocolName}}</text>
      </view>
      <view style="background-color: #ffffff;border-radius: 50rpx 50rpx 0 0;margin-top: 40rpx;">
                <view class="tab-wrap" style="padding-top: 60rpx;">
                  <text @click="active=0" :class="active==0?'active':''">实物权益</text>
                  <text @click="active=1" :class="active==1?'active':''">虚拟权益</text>
                </view>
                <view v-if="active === 0" class="sw-container">
                    <image style="width: 100%;height: 220rpx;" mode="aspectFit" src="/static/img/quanshou/sw1.png"></image>
                    <image style="width: 100%;height: 220rpx;" mode="aspectFit" src="/static/img/quanshou/sw2.png"></image>
                    <image style="width: 100%;height: 220rpx;" mode="aspectFit" src="/static/img/quanshou/sw3.png"></image>
                    <image style="width: 100%;height: 220rpx;" mode="aspectFit" src="/static/img/quanshou/sw4.png"></image>
                    <image style="width: 100%;height: 220rpx;" mode="aspectFit" src="/static/img/quanshou/sw5.png"></image>
                    <image style="width: 100%;height: 220rpx;" mode="aspectFit" src="/static/img/quanshou/sw6.png"></image>
                    <image style="width: 100%;height: 220rpx;" mode="aspectFit" src="/static/img/quanshou/sw7.png"></image>
                    <image style="width: 100%;height: 220rpx;" mode="aspectFit" src="/static/img/quanshou/sw8.png"></image>
                    <!-- <button class="exchange-btn" v-if="active==0" @click="getTips">我要查询</button> -->
                    <view class="note" style="padding-bottom: 50rpx;text-align: center;">页面展示为实物样例,实际以用户收到的商品为准</view>
                </view>
                <view v-if="active === 1">
                    <image style="width: 100%;height: 538rpx;" mode="aspectFit" src="/static/img/quanshou/xn1.png"></image>
                    <image style="width: 100%;height: 538rpx;" mode="aspectFit" src="/static/img/quanshou/xn2.png"></image>
                    <image style="width: 100%;height: 342rpx;" mode="aspectFit" src="/static/img/quanshou/xn3.png"></image>
                    <image style="width: 100%;height: 712rpx;" mode="aspectFit" src="/static/img/quanshou/xn4.png"></image>
                    <!-- <button class="exchange-btn" @click="toHuiyuan">我要领取</button> -->
                    <view class="note" style="padding-bottom: 50rpx;text-align: center;">* 虚拟权益以实际兑换为准</view>
                </view>
      </view>
<!--      <view  class="tips" style="color: #666666;margin-top: 24rpx;margin-bottom: 20rpx;font-size: 26rpx">*会员服务一经开通不支持取消、退款,会员服务到期前,用户可以选择续订或取消续费。</view>-->
      
@@ -329,4 +358,52 @@
  flex-direction: row;
}
/* tab */
.tab-wrap {
  display: flex;
  justify-content: space-evenly;
  margin-bottom: 50rpx;
}
.tab-wrap text {
  font-weight: 600;
  font-size: 36rpx;
  color: #666;
}
.active {
  color: #333 !important;
  position: relative;
  &::after {
    content: "";
    display: block;
    width: 50rpx;
    height: 8rpx;
    background: linear-gradient(271deg, #FFE4A1 0%, #FFC57A 51%, #FFE1B9 100%);
    border-radius: 32rpx;
    position: absolute;
    bottom: -20rpx;
    left: calc(50% - 25rpx);
  }
}
/* 按钮 */
.exchange-btn {
  font-weight: 600;
  font-size: 36rpx;
  color: #FFD39A;
  padding: 26rpx;
  background: linear-gradient(271deg, #2A1601 0%, #3B2106 51%);
  border-radius: 200rpx;
  margin-top: 60rpx;
}
.note {
  font-size: 24rpx;
  color: #999;
  margin-top: 20rpx;
}
.sw-container {
  image {
    margin-top: 20rpx;
  }
}
</style>