Przeglądaj źródła

Merge remote-tracking branch 'origin/yjb_storeScrm' into yjb_storeScrm

yjwang 3 tygodni temu
rodzic
commit
0d338bb795

+ 4 - 3
src/api/store/storeProduct.js

@@ -223,11 +223,12 @@ export function checkStoreDrugLicense(data) {
   })
 }
 
-
+//成分检查
 export function selectForbiddenKeywords(keywords) {
   return request({
-    url: '/store/storeProduct/selectForbiddenKeywords/'+keywords,
-    method: 'get',
+    url: '/store/storeProduct/selectForbiddenKeywords',
+    method: 'post',
+    data:{keywords: keywords}
   })
 }
 

+ 49 - 21
src/views/store/storeConfig/userInfo.vue

@@ -198,6 +198,18 @@
               </el-form-item>
             </el-col>
 
+            <!-- 新增的单选框 -->
+            <el-col :span="24">
+              <el-form-item label="药品经营许可证范围是否包含" prop="drugScopeHasFrozen" style="margin-left: 5px">
+                <el-radio-group v-model="form.drugScopeHasFrozen">
+                  <el-radio label="1">冷冻</el-radio>
+                  <el-radio label="2">冷藏</el-radio>
+                  <el-radio label="3">冷冻冷藏</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+            <!-- 结束 -->
+
             <el-col :span="14">
               <el-form-item label="药品经营许可证编号" prop="drugCode" style="margin-left: 5px">
                 <el-input v-model="form.drugCode" placeholder="请输入药品经营许可证编号" />
@@ -310,20 +322,31 @@
                   <span v-if="isViewMode">用户未上传</span>
                   <i v-else class="el-icon-plus avatar-uploader-icon"></i>
                 </div>
-
               </el-upload>
             </el-form-item>
+
+            <el-form-item label="3类器械生产备案编号" prop="medicalDevice3Code" style="margin-left: 5px">
+              <el-input v-model="form.medicalDevice3Code" placeholder="请输入3类器械生产备案编号" />
+            </el-form-item>
+
             <el-col :sapn="24">
               <el-form-item label="3类器械经营范围" prop="medicalDevice3BusinessScope">
                 <el-input v-model="form.medicalDevice3BusinessScope" placeholder="请输入3类器械经营范围" type="textarea"/>
               </el-form-item>
             </el-col>
-            <el-form-item label="3类器械生产备案编号" prop="medicalDevice3Code" style="margin-left: 5px">
-              <el-input v-model="form.medicalDevice3Code" placeholder="请输入3类器械生产备案编号" />
-            </el-form-item>
           </el-col>
+
           <el-col :span="12">
-            <el-form-item label="3类器械经营许可证有效期" prop="medicalDevice3Expiry">
+            <el-form-item label="3类器械经营许可证是否长期有效" prop="isMedicalDevice3ExpiryPermanent">
+              <el-switch
+                @change="switchChange()"
+                v-model="medicalDevice3ExpiryValue"
+                active-color="#13ce66"
+                inactive-color="#ff4949">
+              </el-switch>
+            </el-form-item>
+
+            <el-form-item label="3类器械经营许可证有效期" prop="medicalDevice3Expiry" v-if="!medicalDevice3ExpiryValue">
               <el-date-picker
                 v-model="form.medicalDevice3Expiry"
                 type="daterange"
@@ -371,6 +394,7 @@
                 <el-input v-model="form.foodCode" placeholder="请输入食品经营许可证/备案凭证编号" />
               </el-form-item>
             </el-col>
+
             <el-col :span="12">
               <el-form-item label="食品经营许可证/备案凭证是否长期有效" prop="isFoodLicenseExpiryPermanent">
                 <el-switch
@@ -380,7 +404,7 @@
                   inactive-color="#ff4949">
                 </el-switch>
               </el-form-item>
-              <el-form-item label="食品经营许可证/备案凭证有效期" prop="foodLicenseExpiry">
+              <el-form-item label="食品经营许可证/备案凭证有效期" prop="foodLicenseExpiry" v-if="!foodLicenseExpiryValue">
                 <el-date-picker
                   v-model="form.foodLicenseExpiry"
                   type="daterange"
@@ -391,6 +415,13 @@
                 </el-date-picker>
               </el-form-item>
             </el-col>
+
+            <el-col :sapn="24">
+              <el-form-item label="食品经营许可证/备案凭证经营范围" prop="foodLicenseBusinessScope">
+                <el-input v-model="form.foodLicenseBusinessScope" placeholder="请输入食品经营许可证/备案凭证经营范围" type="textarea"/>
+              </el-form-item>
+            </el-col>
+
           </el-row>
       </div>
       <el-divider content-position="left">店铺配置信息</el-divider>
@@ -530,18 +561,6 @@ export default {
         drugLicenseExpiry: [
           { required: true, message: '药品经营许可证有效期不能为空', trigger: 'blur' }
         ],
-        medicalDevice3: [
-          { required: true, message: '3类器械经营许可证不能为空', trigger: 'blur' }
-        ],
-        medicalDevice3Expiry: [
-          { required: true, message: '3类器械经营许可证有效期不能为空', trigger: 'blur' }
-        ],
-        foodLicense: [
-          { required: true, message: '食品经营许可证不能为空', trigger: 'blur' }
-        ],
-        foodLicenseExpiry: [
-          { required: true, message: '食品经营许可证有效期不能为空', trigger: 'blur' }
-        ],
         storeName: [
           { required: true, message: '店铺名称不能为空', trigger: 'blur' }
         ],
@@ -617,7 +636,11 @@ export default {
         password: [
           { required: true, message: '新密码不能为空', trigger: 'blur' },
           { min: 6, max: 20, message: '长度在 6 到 20 个字符', trigger: 'blur' }
-        ]
+        ],
+        // 添加新的验证规则
+        drugScopeHasFrozen: [
+          { required: true, message: "请选择药品经营许可证范围是否包含冷冻/冷藏", trigger: "change" }
+        ],
       }
     }
   },
@@ -753,16 +776,18 @@ export default {
         businessCode: null,
         drugCode:null,
         drugLicenseBusinessScope: null,
+        drugScopeHasFrozen: null,
         medicalDevice1Code:null,
         medicalDevice2Code:null,
         medicalDevice3Code:null,
         foodCode:null,
         medicalCode:null,
-        medicalDevice2BusinessScope: null,
-        medicalDevice3BusinessScope: null,
         otherSpecialQualificationCode:null,
         qualityAssuranceAgreementCode:null,
         settlementAgreementCode: null,
+        medicalDevice2BusinessScope: null,
+        medicalDevice3BusinessScope: null,
+        foodLicenseBusinessScope: null,
       };
       this.resetForm('form')
     },
@@ -908,6 +933,9 @@ export default {
         if (this.form.isMedicalLicenseExpiryPermanent == 1) {
           this.medicalLicenseExpiryValue = true;
         }
+        if (this.form.drugScopeHasFrozen === undefined) {
+          this.form.drugScopeHasFrozen = null;
+        }
         this.open = true;
         this.title = "修改店铺";
 

+ 81 - 25
src/views/store/storeProduct/index.vue

@@ -528,7 +528,7 @@
           </el-col>
         </el-row>
         <div v-if="form.isDrug === '1' ">
-          <el-form-item label="药品展示图" prop="drugImage">
+          <el-form-item label="头图展示" prop="drugImage">
             <Material v-model="drugImageArr" type="image" :num="1" :width="150" :height="150"/>
           </el-form-item>
           <div v-if="medicalMallConfig.isMedicalMall">
@@ -559,11 +559,11 @@
             </el-row>
 
             <el-row>
-              <el-col :span="12">
-                <el-form-item  :label="isMedicalDeviceCategory ? '生产批号/序列号' : '批号'" prop="batchNumber">
-                  <el-input v-model="form.batchNumber" placeholder="请输入批号"/>
-                </el-form-item>
-              </el-col>
+<!--              <el-col :span="12" v-if="!isMedicalDeviceCategory">-->
+<!--                <el-form-item  :label="isMedicalDeviceCategory ? '生产批号/序列号' : '批号'" prop="batchNumber">-->
+<!--                  <el-input v-model="form.batchNumber" placeholder="请输入批号"/>-->
+<!--                </el-form-item>-->
+<!--              </el-col>-->
               <el-col :span="12">
                 <el-form-item label="规格/型号" prop="prescribeSpec">
                   <el-input v-model="form.prescribeSpec" placeholder="请输入规格"/>
@@ -1273,11 +1273,34 @@ export default {
     businessArr:function(val) {
       this.form.business = val.join(',');
     },
-    //药品成分
+    // 商品名称监听
+    'form.productName': {
+      handler(newVal) {
+        if (newVal) {
+          this.checkForbiddenKeywords('productName', newVal);
+        }
+      },
+      immediate: false
+    },
+    // 成分监听
     'form.ingredient': {
       handler(newVal) {
         if (newVal) {
-          this.checkForbiddenKeywords(newVal);
+          this.checkForbiddenKeywords('ingredient', newVal);
+        }
+      },
+      immediate: false
+    },
+    // 商品分类监听
+    'form.productType': {
+      handler(newVal) {
+        // 检查是否为II类或III类器械分类
+        const cateName = this.cateIdToNameMap[this.form.cateId];
+        const isMedicalDevice = cateName !== undefined && (cateName.includes('III类器械') || cateName.includes('II类器械'));
+
+        // 只有当是II类或III类器械且器械编码不为空时才调用检查接口
+        if (isMedicalDevice && this.form.medicalDeviceCode) {
+          this.checkMedicalDeviceLicense(this.form.cateId, this.form.medicalDeviceCode);
         }
       },
       immediate: false
@@ -1301,9 +1324,9 @@ export default {
           this.rules.drugRegCertNo = [
             { required: true, message: "注册证号/备案凭证编号不能为空", trigger: "blur" }
           ];
-          this.rules.batchNumber = [
-            { required: true, message: "生产批号/序列号不能为空", trigger: "blur" }
-          ];
+          // this.rules.batchNumber = [
+          //   { required: true, message: "生产批号/序列号不能为空", trigger: "blur" }
+          // ];
 
         } else {
           this.rules.indications = [{ required: true, message: "适应范围/适应症不能为空", trigger: "blur" }];
@@ -1372,11 +1395,12 @@ export default {
   },
   data() {
     return {
+      isIngredientValid: true, // 成分是否有效
+      isProductNameValid: true, // 商品名称是否有效
       // 溯源码弹窗相关
       titleVisible:'溯源管理:',
       verifyDialogVisible: false, // 溯源码弹窗显示状态
       currentProductId: null,     // 当前选中的商品ID
-      isIngredientValid: true, // 成分是否有效
       isLicenseValid: true, // 许可证是否有效
       authVisible:false,
       auditLogs:[],
@@ -1422,7 +1446,7 @@ export default {
         {dictValue: "1", dictLabel: "是"}
       ],
 
-      // 药品展示图
+      // 头图展示
       drugImageArr: [],
 
       //首营资质上传图
@@ -1690,23 +1714,50 @@ export default {
       },
     };
   },
-
   methods: {
-    // 检查违禁关键词
-    checkForbiddenKeywords(ingredient) {
-      selectForbiddenKeywords(ingredient).then(response => {
+    // 检查违禁关键词(整合商品名称和成分检查)
+    checkForbiddenKeywords(field, value) {
+      // 根据检查的字段类型设置不同的参数和状态变量
+      const isProductNameCheck = field === 'productName';
+      const isIngredientCheck = field === 'ingredient';
+      if (!isProductNameCheck && !isIngredientCheck) {
+        return; // 只处理商品名称和成分字段
+      }
+      // 构造参数 - API只需要keywords参数
+      selectForbiddenKeywords(value).then(response => {
         if (response.data === false) {
-          this.$message.error(response.msg || '包含违禁词');
-          this.isIngredientValid = false;
+          const errorMsg = isProductNameCheck
+            ? (response.msg || '商品名称包含违禁词')
+            : (response.msg || '成分包含违禁词');
+          this.$message.error(errorMsg);
+          // 更新对应的状态变量
+          if (isProductNameCheck) {
+            this.isProductNameValid = false;
+          } else {
+            this.isIngredientValid = false;
+          }
         } else {
-          this.isIngredientValid = true;
+          // 检查通过,更新状态变量
+          if (isProductNameCheck) {
+            this.isProductNameValid = true;
+          } else {
+            this.isIngredientValid = true;
+          }
         }
       }).catch(error => {
-        this.$message.error('违禁词检查异常');
-        this.isIngredientValid = false;
+        const errorMsg = isProductNameCheck
+          ? '商品名称违禁词检查异常'
+          : '成分违禁词检查异常';
+        this.$message.error(errorMsg);
+        // 出现异常时,标记为无效
+        if (isProductNameCheck) {
+          this.isProductNameValid = false;
+        } else {
+          this.isIngredientValid = false;
+        }
       });
     },
-    // 检查店铺药品许可证
+
     // 检查店铺药品许可证
     checkStoreDrugLicense(cateId) {
       checkStoreDrugLicense({ cateId: cateId }).then(response => {
@@ -1730,7 +1781,7 @@ export default {
 
       // 只有当是II类或III类器械且器械编码不为空时才调用接口
       if (isMedicalDevice && medicalDeviceCode) {
-        checkStoreDrugLicense({ cateId: cateId, medicalDeviceCode: medicalDeviceCode }).then(response => {
+        checkStoreDrugLicense({ cateId: cateId, medicalDeviceCode: medicalDeviceCode, productType: this.form.productType }).then(response => {
           if (response.data.flag === false) {
             this.$message.error(response.data.message || '医疗器械许可证检查失败');
             this.isLicenseValid = false;
@@ -2066,7 +2117,7 @@ export default {
         qualificationExpire: null,
         // companyIds:[],
         isDrug: "1", // 是否药品
-        drugImage: null, // 药品展示图
+        drugImage: null, // 头图展示
         drugRegCertNo: null, // 注册证号/备案凭证编号
         commonName: null, // 通用名称
         dosageForm: null, // 剂型
@@ -2326,6 +2377,11 @@ export default {
     },
     /** 提交按钮 */
     submitForm() {
+      // 检查商品名称是否有效
+      if (!this.isProductNameValid) {
+        this.$message.warning('商品名称包含违禁词,请修改后重新提交');
+        return;
+      }
       // 检查成分是否有效
       if (!this.isIngredientValid) {
         this.$message.warning('成分包含违禁词,请修改后重新提交');