rk
2026-04-28 a59ff44b2eaa7020f0529632d9ec064c4dc38e27
small-program/pages/store-apply/store-apply.vue
@@ -4,12 +4,18 @@
      <view class="process-wrap">
         <view class="process-step" :class="{ active: currentStep === 1 }" @tap="currentStep = 1">
            <view class="step-dot"></view>
            <view class="step-dot" :class="{ 'step-dot--done': currentStep > 1 }">
               <view v-if="currentStep === 1" class="step-dot__inner"></view>
               <u-icon v-else name="checkmark" color="#ffffff" size="14"></u-icon>
            </view>
            <text>门店信息</text>
         </view>
         <view class="process-line"></view>
         <view class="process-step" :class="{ active: currentStep === 2 }" @tap="currentStep = 2">
            <view class="step-dot step-index">2</view>
            <view class="step-dot" :class="{ 'step-dot--inactive': currentStep !== 2 }">
               <view v-if="currentStep === 2" class="step-dot__inner"></view>
               <text v-else class="step-dot__index">2</text>
            </view>
            <text>主体资质</text>
         </view>
      </view>
@@ -91,7 +97,7 @@
         <view class="upload-section">
            <view class="upload-title-row between-row">
               <view class="label-row"><text class="label">门店内部招牌</text><text class="required">*</text></view>
               <view class="label-row"><text class="label">门店内部照片</text><text class="required">*</text></view>
               <text class="upload-tip">最多上传3张照片</text>
            </view>
            <view class="upload-grid">
@@ -232,14 +238,14 @@
               </view>
               <view class="upload-grid double-upload-grid">
                  <view class="upload-box id-upload-box" @click="chooseLegalPersonCardFront">
                     <image v-if="!form.legalPersonCardFront" class="camera-icon" src="/static/icon/ic_camera@2x.png" mode="widthFix"></image>
                     <image v-else class="preview-image" :src=" legalPersonCardFrontUrl" mode="aspectFill"></image>
                     <text v-if="!form.legalPersonCardFront" class="upload-text">上传人像面</text>
                     <image v-if="!form.idcardImg" class="camera-icon" src="/static/icon/ic_camera@2x.png" mode="widthFix"></image>
                     <image v-else class="preview-image" :src="idcardImgUrl" mode="aspectFill"></image>
                     <text v-if="!form.idcardImg" class="upload-text">上传人像面</text>
                  </view>
                  <view class="upload-box id-upload-box" @click="chooseLegalPersonCardBack">
                     <image v-if="!form.legalPersonCardBack" class="camera-icon" src="/static/icon/ic_camera@2x.png" mode="widthFix"></image>
                     <image v-else class="preview-image" :src="legalPersonCardBackUrl" mode="aspectFill"></image>
                     <text v-if="!form.legalPersonCardBack" class="upload-text">上传国徽面</text>
                     <image v-if="!form.idcardImgBack" class="camera-icon" src="/static/icon/ic_camera@2x.png" mode="widthFix"></image>
                     <image v-else class="preview-image" :src="idcardImgBackUrl" mode="aspectFill"></image>
                     <text v-if="!form.idcardImgBack" class="upload-text">上传国徽面</text>
                  </view>
               </view>
            </view>
@@ -317,8 +323,6 @@
               laborContractImgs: [],
               socialSecurityImgs: [],
               legalPersonCard: '',
               legalPersonCardFront: '',
               legalPersonCardBack: '',
               legalPersonName: '',
               legalPersonPhone: '',
               aliAccount: '',
@@ -328,8 +332,6 @@
            businessImgUrl:'',
            idcardImgUrl: '',
            idcardImgBackUrl: '',
            legalPersonCardFrontUrl: '',
            legalPersonCardBackUrl: '',
            previewMode: 'filled',
            imgPrefix: '',
            currentStep: 1,
@@ -376,8 +378,17 @@
               uni.showToast({ title: '请输入联系人电话', icon: 'none' })
               return
            }
            const mobileRegex = /^1\d{10}$/
            if (!mobileRegex.test(this.form.linkPhone)) {
               uni.showToast({ title: '请输入正确的手机号', icon: 'none' })
               return
            }
            if (!this.form.idcard) {
               uni.showToast({ title: '请输入联系人身份证号', icon: 'none' })
               return
            }
            if (!/^\d{18}$/.test(this.form.idcard)) {
               uni.showToast({ title: '请输入18位身份证号', icon: 'none' })
               return
            }
            if (!this.form.storeFrontImgs || this.form.storeFrontImgs.length === 0) {
@@ -385,7 +396,7 @@
               return
            }
            if (!this.form.storeInteriorImgs || this.form.storeInteriorImgs.length === 0) {
               uni.showToast({ title: '请上传门店内部招牌', icon: 'none' })
               uni.showToast({ title: '请上传门店内部照片', icon: 'none' })
               return
            }
            this.currentStep = 2
@@ -430,6 +441,12 @@
                  uni.showToast({ title: '请输入法人手机号', icon: 'none' })
                  return
               }
               const mobileRegex = /^1\d{10}$/
               const landlineRegex = /^\d{3,4}-?\d{7,8}$/
               if (!mobileRegex.test(this.form.legalPersonPhone) && !landlineRegex.test(this.form.legalPersonPhone)) {
                  uni.showToast({ title: '请输入正确的手机号或固定电话', icon: 'none' })
                  return
               }
               if (!this.form.aliAccount) {
                  uni.showToast({ title: '请输入企业支付宝账号', icon: 'none' })
                  return
@@ -442,11 +459,15 @@
                  uni.showToast({ title: '请输入法人身份证号', icon: 'none' })
                  return
               }
               if (!this.form.legalPersonCardFront) {
               if (!/^\d{18}$/.test(this.form.legalPersonCard)) {
                  uni.showToast({ title: '请输入18位身份证号', icon: 'none' })
                  return
               }
               if (!this.form.idcardImg) {
                  uni.showToast({ title: '请上传法人身份证人像面', icon: 'none' })
                  return
               }
               if (!this.form.legalPersonCardBack) {
               if (!this.form.idcardImgBack) {
                  uni.showToast({ title: '请上传法人身份证国徽面', icon: 'none' })
                  return
               }
@@ -454,8 +475,6 @@
                  uni.showToast({ title: '请上传营业执照', icon: 'none' })
                  return
               }
               this.form.idcardImgBack = this.form.legalPersonCardBack
               this.form.idcardImg = this.form.legalPersonCardFront
            }
            if (!this.agreed) {
               uni.showToast({ title: '请先阅读并同意协议', icon: 'none' })
@@ -505,9 +524,7 @@
                  this.businessImgUrl=data.businessImgUrl||''
                  this.idcardImgUrl=data.idcardImgUrl||''
                  this.idcardImgBackUrl=data.idcardImgBackUrl||''
                  this.legalPersonCardFrontUrl=data.idcardImgUrl||''
                  this.legalPersonCardBackUrl=data.idcardImgBackUrl||''
                  this.qualificationType = data.companyType === 0 ? 'personal' : 'company'
                  this.qualificationType = data.companyType === 'personal' ? 'personal' : 'company'
                  if (data.storeFrontImgs) {
                     this.storeFrontImages = data.storeFrontImgUrls
                     this.uploadedImagesStoreFront = data.storeFrontImgUrls.map(url => ({ url }))
@@ -536,7 +553,6 @@
                     this.form.socialSecurityImgs = data.socialSecurityImgs
                  }
                  this.form.legalPersonCard = data.legalPersonCard || ''
                  this.form.legalPersonCardBack = data.legalPersonCardBack || ''
                  this.form.businessImg = data.businessImg || ''
               }
            } catch (error) {
@@ -704,7 +720,7 @@
            this.form.storeInteriorImgs = this.idCardImages.map(url => this.getShortPath(url))
         },
         async chooseIdCardImage() {
            const maxCount = 2
            const maxCount = 3
            const currentCount = this.idCardImages.length
            const remainingCount = maxCount - currentCount
            if (remainingCount <= 0) {
@@ -866,8 +882,8 @@
                  uni.showLoading({ title: '上传中...', mask: true })
                  try {
                     const uploadResults = await this.uploadFiles(tempFilePaths, 1)
                     this.form.legalPersonCardFront = uploadResults[0].imgaddr || uploadResults[0].path || uploadResults[0]
                     this.legalPersonCardFrontUrl = uploadResults[0].url || uploadResults[0].path || uploadResults[0]
                     this.form.idcardImg = uploadResults[0].imgaddr || uploadResults[0].path || uploadResults[0]
                     this.idcardImgUrl = uploadResults[0].url || uploadResults[0].path || uploadResults[0]
                     uni.hideLoading()
                     uni.showToast({ title: '上传成功', icon: 'success' })
                  } catch (error) {
@@ -886,8 +902,8 @@
                  uni.showLoading({ title: '上传中...', mask: true })
                  try {
                     const uploadResults = await this.uploadFiles(tempFilePaths, 1)
                     this.form.legalPersonCardBack = uploadResults[0].imgaddr || uploadResults[0].path || uploadResults[0]
                     this.legalPersonCardBackUrl = uploadResults[0].url || uploadResults[0].path || uploadResults[0]
                     this.form.idcardImgBack = uploadResults[0].imgaddr || uploadResults[0].path || uploadResults[0]
                     this.idcardImgBackUrl = uploadResults[0].url || uploadResults[0].path || uploadResults[0]
                     uni.hideLoading()
                     uni.showToast({ title: '上传成功', icon: 'success' })
                  } catch (error) {
@@ -1027,21 +1043,38 @@
   }
   .step-dot {
      width: 26rpx;
      height: 26rpx;
      width: 50rpx;
      height: 50rpx;
      border-radius: 50%;
      background: #16b0fa;
      background: #afe4fe;
      margin-bottom: 14rpx;
      border: 5rpx solid #a2e2ff;
   }
   .step-index {
      background: #b9bdc6;
      font-size: 18rpx;
      color: #ffffff;
      display: flex;
      align-items: center;
      justify-content: center;
      box-sizing: border-box;
      &__inner {
         width: 26rpx;
         height: 26rpx;
         border-radius: 50%;
         background: #13b2fc;
         box-sizing: border-box;
      }
      &__index {
         font-size: 30rpx;
         font-weight: 400;
         color: #ffffff;
         line-height: 1;
      }
      &--inactive {
         background: #8C939F;
      }
      &--done {
         background: #10B2FA;
      }
   }
   .process-line {
@@ -1129,7 +1162,6 @@
   .text-input,
   .select-row {
      height: 54rpx;
      margin-top: 14rpx;
      font-weight: 400;
      font-size: 30rpx;