Przeglądaj źródła

优化日期校验问题,删除是否长期有效按钮,添加证书校验,已经过期的证书无法使用

Guos 3 dni temu
rodzic
commit
199c7765b3
1 zmienionych plików z 151 dodań i 117 usunięć
  1. 151 117
      src/views/hisStore/storeProduct/index.vue

+ 151 - 117
src/views/hisStore/storeProduct/index.vue

@@ -981,76 +981,65 @@
         <el-form-item label="非首营链接" prop="businessLink" v-if="form.reviewAudit === '1'">
           <el-input :min="0" v-model="form.businessLink" placeholder="请输入非首营链接"/>
         </el-form-item>
+
+        <!--    生产企业营业执照    -->
         <el-form-item v-if="form.isShow === '1'" label="生产企业营业执照" prop="business">
           <Material v-model="businessArr" type="image" :num="1" :width="150" :height="150"/>
         </el-form-item>
 
-        <el-form-item v-if="form.isShow === '1' && businessArr.length > 0" label="生产企业营业执照是否长期有效" prop="isBusinessPermanent">
-          <el-switch
-            @change="switchChange()"
-            v-model="businessValue"
-            active-color="#13ce66"
-            inactive-color="#ff4949">
-          </el-switch>
+        <el-form-item v-if="form.isShow === '1' && businessArr.length > 0" label="营业执照有效期" prop="businessExpire">
+          <el-date-picker
+            v-model="form.businessExpire"
+            type="daterange"
+            value-format="yyyy-MM-dd"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            @change="validateBusinessExpire">
+          </el-date-picker>
+          <div v-if="businessExpireError" style="color: #F56C6C; font-size: 12px; line-height: 1; padding-top: 4px;">
+            <i class="el-icon-warning"></i> {{ businessExpireError }}
+          </div>
         </el-form-item>
 
-          <el-form-item v-if="form.isShow === '1' && businessArr.length > 0 && !businessValue" prop="businessExpire">
-            <el-date-picker
-              v-model="form.businessExpire"
-              type="daterange"
-              value-format="yyyy-MM-dd"
-              range-separator="至"
-              start-placeholder="开始日期"
-              end-placeholder="结束日期">
-            </el-date-picker>
-          </el-form-item>
-
+        <!--生产企业的生产许可证/备案凭证-->
         <el-form-item v-if="form.isShow === '1'" label="生产企业的生产许可证/备案凭证" prop="license">
           <Material v-model="licenseArr" type="image" :num="1" :width="150" :height="150"/>
         </el-form-item>
 
-        <el-form-item v-if="form.isShow === '1' && licenseArr.length > 0" label="生产企业的生产许可证/备案凭证是否长期有效" prop="isLicensePermanent">
-          <el-switch
-            @change="switchChange()"
-            v-model="licenseValue"
-            active-color="#13ce66"
-            inactive-color="#ff4949">
-          </el-switch>
-        </el-form-item>
-
-        <el-form-item v-if="form.isShow === '1' && licenseArr.length > 0 && !licenseValue" prop="licenseExpire">
+        <el-form-item v-if="form.isShow === '1' && licenseArr.length > 0" label="生产许可证有效期" prop="licenseExpire">
           <el-date-picker
             v-model="form.licenseExpire"
             type="daterange"
             value-format="yyyy-MM-dd"
             range-separator="至"
             start-placeholder="开始日期"
-            end-placeholder="结束日期">
+            end-placeholder="结束日期"
+            @change="validateLicenseExpire">
           </el-date-picker>
+          <div v-if="licenseExpireError" style="color: #F56C6C; font-size: 12px; line-height: 1; padding-top: 4px;">
+            <i class="el-icon-warning"></i> {{ licenseExpireError }}
+          </div>
         </el-form-item>
 
+        <!--商品注册证/备案凭证-->
         <el-form-item v-if="form.isShow === '1'" label="商品注册证/备案凭证" prop="certificate">
           <Material v-model="certificateArr" type="image" :num="1" :width="150" :height="150"/>
         </el-form-item>
 
-        <el-form-item v-if="form.isShow === '1' && certificateArr.length > 0" label="商品注册证/备案凭证是否长期有效" prop="isCertificatePermanent">
-          <el-switch
-            @change="switchChange()"
-            v-model="certificateValue"
-            active-color="#13ce66"
-            inactive-color="#ff4949">
-          </el-switch>
-        </el-form-item>
-
-        <el-form-item v-if="form.isShow === '1' && certificateArr.length > 0 && !certificateValue" prop="certificateExpire">
+        <el-form-item v-if="form.isShow === '1' && certificateArr.length > 0" label="注册证有效期" prop="certificateExpire">
           <el-date-picker
             v-model="form.certificateExpire"
             type="daterange"
             value-format="yyyy-MM-dd"
             range-separator="至"
             start-placeholder="开始日期"
-            end-placeholder="结束日期">
+            end-placeholder="结束日期"
+            @change="validateCertificateExpire">
           </el-date-picker>
+          <div v-if="certificateExpireError" style="color: #F56C6C; font-size: 12px; line-height: 1; padding-top: 4px;">
+            <i class="el-icon-warning"></i> {{ certificateExpireError }}
+          </div>
         </el-form-item>
 
 <!--        <el-form-item v-if="form.isShow === '1' && displayDemo" label="Ⅰ类Ⅱ类备案凭证" prop="voucher">-->
@@ -1067,29 +1056,26 @@
 <!--          </el-date-picker>-->
 <!--        </el-form-item>-->
 
+        <!--        GMP/GSP认证证书-->
         <el-form-item v-if="form.isShow === '1'" label="GMP/GSP认证证书" prop="gmpAuth">
           <Material v-model="gmpAuthArr" type="image" :num="1" :width="150" :height="150"/>
         </el-form-item>
 
-        <el-form-item v-if="form.isShow === '1' && gmpAuthArr.length > 0" label="GMP/GSP认证证书是否长期有效" prop="isGmpAuthPermanent">
-          <el-switch
-            @change="switchChange()"
-            v-model="gmpAuthValue"
-            active-color="#13ce66"
-            inactive-color="#ff4949">
-          </el-switch>
-        </el-form-item>
-
-        <el-form-item v-if="form.isShow === '1' && gmpAuthArr.length > 0 && !gmpAuthValue" prop="gmpAuthExpire">
+        <el-form-item v-if="form.isShow === '1' && gmpAuthArr.length > 0" label="GMP/GSP认证有效期" prop="gmpAuthExpire">
           <el-date-picker
             v-model="form.gmpAuthExpire"
             type="daterange"
             value-format="yyyy-MM-dd"
             range-separator="至"
             start-placeholder="开始日期"
-            end-placeholder="结束日期">
+            end-placeholder="结束日期"
+            @change="validateGmpAuthExpire">
           </el-date-picker>
+          <div v-if="gmpAuthExpireError" style="color: #F56C6C; font-size: 12px; line-height: 1; padding-top: 4px;">
+            <i class="el-icon-warning"></i> {{ gmpAuthExpireError }}
+          </div>
         </el-form-item>
+
         <el-form-item label="国药准字" v-if="form.productType==2" prop="prescribeCode">
           <el-input v-model="form.prescribeCode" placeholder="请输入国药准字"/>
         </el-form-item>
@@ -1354,10 +1340,7 @@ export default {
     return {
       auditLogs:[],
       titleValue:null,
-      gmpAuthValue:false,
-      certificateValue:false,
-      licenseValue:false,
-      businessValue:false,
+
       displayDemo: false,
       cateIdToNameMap: {},
       businessArr: [],
@@ -1365,7 +1348,12 @@ export default {
       certificateArr: [],
       voucherArr: [],
       gmpAuthArr: [],
-      activeValue: '0',
+      // 证书过期错误提示
+      businessExpireError: '',
+      licenseExpireError: '',
+      certificateExpireError: '',
+      gmpAuthExpireError: '',
+      activeValue: '1',
       orderOptions: [],
       medicalMallConfig: {},
       promptList: [],
@@ -1626,21 +1614,21 @@ export default {
         businessLink: [
           { required: true, message: "非首营链接不能为空!", trigger: "change" }
         ],
-        // indications: [
-        //   { required: true, message: "功能主治不能为空", trigger: "blur" }
-        // ],
-        // dosage: [
-        //   { required: true, message: "用法用量不能为空", trigger: "blur" }
-        // ],
-        // adverseReactions: [
-        //   { required: true, message: "不良反应不能为空", trigger: "blur" }
-        // ],
-        // contraindications: [
-        //   { required: true, message: "禁忌不能为空", trigger: "blur" }
-        // ],
-        // precautions: [
-        //   { required: true, message: "注意事项不能为空", trigger: "blur" }
-        // ],
+        indications: [
+          { required: true, message: "功能主治不能为空", trigger: "blur" }
+        ],
+        dosage: [
+          { required: true, message: "用法用量不能为空", trigger: "blur" }
+        ],
+        adverseReactions: [
+          { required: true, message: "不良反应不能为空", trigger: "blur" }
+        ],
+        contraindications: [
+          { required: true, message: "禁忌不能为空", trigger: "blur" }
+        ],
+        precautions: [
+          { required: true, message: "注意事项不能为空", trigger: "blur" }
+        ],
         // storeId :[
         //   { required: true, message: "所属店铺不能为空", trigger: "blur"}
         // ],
@@ -2075,6 +2063,7 @@ export default {
     /** 新增按钮操作 */
     handleAdd() {
       this.reset();
+      this.clearExpireErrors(); // 清空过期错误提示
 
       this.open = true;
       this.title = "添加商品";
@@ -2093,6 +2082,7 @@ export default {
       }
       var that = this;
       this.reset();
+      this.clearExpireErrors(); // 清空过期错误提示
       const productId = row.productId || this.ids
       getStoreProduct(productId).then(response => {
         this.form = response.data;
@@ -2134,29 +2124,7 @@ export default {
           this.qualificationArr = this.form.qualificationCertificate.split(",");
         }
 
-        if(this.form.isBusinessPermanent == 1){
-          this.businessValue = true
-        }else {
-          this.businessValue = false
-        }
-
-        if(this.form.isLicensePermanent == 1){
-          this.licenseValue = true
-        }else {
-          this.licenseValue = false
-        }
 
-        if(this.form.isCertificatePermanent == 1){
-          this.certificateValue = true
-        }else {
-          this.certificateValue = false
-        }
-
-        if(this.form.isGmpAuthPermanent == 1){
-          this.gmpAuthValue = true
-        }else {
-          this.gmpAuthValue = false
-        }
 
         const expireFieldMap = [
           { expireKey: 'businessExpire', startKey: 'businessStart', endKey: 'businessEnd' },
@@ -2242,12 +2210,23 @@ export default {
         }
         this.open = true;
         this.title = "修改商品";
+        // 加载数据后立即校验过期状态
+        this.$nextTick(() => {
+          this.validateAllExpires();
+        });
       });
     },
     /** 提交按钮 */
     submitForm() {
       this.$refs["form"].validate(valid => {
         if (valid) {
+          // 统一校验所有证书是否过期
+          const expireError = this.checkAllCertificatesExpire();
+          if (expireError) {
+            this.$message.error(expireError);
+            return;
+          }
+
           let checkBoolean = false
           if (this.form.specType === 0) {
             this.form.items = [];
@@ -2275,29 +2254,11 @@ export default {
             this.form.qualificationCertificateEnd = this.form.qualificationExpire[1];
           }
 
-          if(!!this.businessValue){
-            this.form.isBusinessPermanent=1;
-          }else {
-            this.form.isBusinessPermanent=0;
-          }
-
-          if(!!this.licenseValue){
-            this.form.isLicensePermanent=1;
-          }else {
-            this.form.isLicensePermanent=0;
-          }
-
-          if(!!this.certificateValue){
-            this.form.isCertificatePermanent=1;
-          }else {
-            this.form.isCertificatePermanent=0;
-          }
-
-          if(!!this.gmpAuthValue){
-            this.form.isGmpAuthPermanent=1;
-          }else {
-            this.form.isGmpAuthPermanent=0;
-          }
+          // 删除长期有效标识,所有证书都需要填写有效期
+          this.form.isBusinessPermanent = 0;
+          this.form.isLicensePermanent = 0;
+          this.form.isCertificatePermanent = 0;
+          this.form.isGmpAuthPermanent = 0;
 
           // // 组装companyIds
           // if (this.form.companyIds != null && this.form.companyIds != undefined) {
@@ -2420,7 +2381,80 @@ export default {
       }).catch(() => {
 
       });
+    },
+
+    // 清空所有证书过期错误提示
+    clearExpireErrors() {
+      this.businessExpireError = '';
+      this.licenseExpireError = '';
+      this.certificateExpireError = '';
+      this.gmpAuthExpireError = '';
+    },
+
+    // 统一校验证书有效期(返回错误信息或null)
+    checkCertificateExpire(dates, certName) {
+      if (dates && dates.length === 2) {
+        const endDate = new Date(dates[1]);
+        const today = new Date();
+        today.setHours(0, 0, 0, 0);
+        if (endDate < today) {
+          return `${certName}已过期,请更新证书`;
+        }
+      }
+      return null;
+    },
+
+    // 检查所有证书是否过期(提交时使用)
+    checkAllCertificatesExpire() {
+      // 按顺序检查,返回第一个过期的证书错误信息
+      let error = null;
+      
+      error = this.checkCertificateExpire(this.form.businessExpire, '营业执照');
+      if (error) return error + '后再提交!';
+      
+      error = this.checkCertificateExpire(this.form.licenseExpire, '生产许可证');
+      if (error) return error + '后再提交!';
+      
+      error = this.checkCertificateExpire(this.form.certificateExpire, '注册证');
+      if (error) return error + '后再提交!';
+      
+      error = this.checkCertificateExpire(this.form.gmpAuthExpire, 'GMP/GSP认证');
+      if (error) return error + '后再提交!';
+      
+      return null;
+    },
+
+    // 校验所有证书并更新错误提示(用于实时显示)
+    validateAllExpires() {
+      this.validateBusinessExpire(this.form.businessExpire);
+      this.validateLicenseExpire(this.form.licenseExpire);
+      this.validateCertificateExpire(this.form.certificateExpire);
+      this.validateGmpAuthExpire(this.form.gmpAuthExpire);
+    },
+
+    // 验证营业执照有效期
+    validateBusinessExpire(dates) {
+      const error = this.checkCertificateExpire(dates, '营业执照');
+      this.businessExpireError = error ? error + '!' : '';
+    },
+
+    // 验证生产许可证有效期
+    validateLicenseExpire(dates) {
+      const error = this.checkCertificateExpire(dates, '生产许可证');
+      this.licenseExpireError = error ? error + '!' : '';
+    },
+
+    // 验证注册证有效期
+    validateCertificateExpire(dates) {
+      const error = this.checkCertificateExpire(dates, '注册证');
+      this.certificateExpireError = error ? error + '!' : '';
+    },
+
+    // 验证GMP/GSP认证有效期
+    validateGmpAuthExpire(dates) {
+      const error = this.checkCertificateExpire(dates, 'GMP/GSP认证');
+      this.gmpAuthExpireError = error ? error + '!' : '';
     }
   }
 };
-</script>
+</script>