Przeglądaj źródła

按照要求处方药时候,不对功能主治、成分、用法用量、不良反应、禁忌、注意事项,做必填校验。同时优化商品分类与商品类型的页面布局。

Guos 1 tydzień temu
rodzic
commit
335658a583
1 zmienionych plików z 126 dodań i 150 usunięć
  1. 126 150
      src/views/hisStore/storeProduct/index.vue

+ 126 - 150
src/views/hisStore/storeProduct/index.vue

@@ -48,16 +48,6 @@
           />
         </el-select>
       </el-form-item>
-      <!-- <el-form-item label="所属公司">
-        <el-select style="width: 240px" v-model="companyId" multiple placeholder="请选择企业" clearable size="small" >
-          <el-option
-            v-for="item in companyOptions"
-            :key="item.companyId"
-            :label="item.companyName"
-            :value="item.companyId"
-          />
-        </el-select>
-      </el-form-item> -->
       <el-form-item label="所属店铺" v-if="medicalMallConfig.isStores">
         <el-select style="width: 240px" v-model="queryParams.storeIds" placeholder="请选择店铺" clearable size="small">
           <el-option
@@ -69,12 +59,6 @@
         </el-select>
       </el-form-item>
       <div v-if="medicalMallConfig.isAudit">
-<!--        <el-form-item label="审核状态">-->
-<!--          <el-select style="width: 240px" v-model="queryParams.isAudit" placeholder="请选择审核状态" size="small">-->
-<!--            <el-option value="0" label="待审核" key="isAudit0">待审核</el-option>-->
-<!--            <el-option value="1" label="审核通过" key="isAudit1">审核通过</el-option>-->
-<!--          </el-select>-->
-<!--        </el-form-item>-->
         <el-form-item label="药品注册证书编号" prop="drugRegCertNo">
           <el-input
             v-model="queryParams.drugRegCertNo"
@@ -248,16 +232,6 @@
           />
         </el-form-item>
       </div>
-      <!-- <el-form-item label="状态" prop="isShow">
-         <el-select style="width: 240px" v-model="queryParams.isShow" placeholder="请选择状态" clearable size="small" >
-         <el-option
-                v-for="item in isShowOptions"
-                :key="item.dictValue"
-                :label="item.dictLabel"
-                :value="item.dictValue"
-              />
-        </el-select>
-      </el-form-item> -->
 
       <el-form-item>
         <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
@@ -445,14 +419,6 @@
             v-hasPermi="['his:storeProduct:copyProduct']"
           >一键复制
           </el-button>
-          <!--          <el-button-->
-          <!--            size="mini"-->
-          <!--            type="text"-->
-          <!--            icon="el-icon-download"-->
-          <!--            @click="handleDrugExport(scope.row)"-->
-          <!--            v-if="scope.row.cateId==224"-->
-          <!--          >导出-->
-          <!--          </el-button>-->
         </template>
       </el-table-column>
     </el-table>
@@ -477,16 +443,6 @@
             <el-radio :label="item.dictValue" v-for="item in isDisplayOptions">{{ item.dictLabel }}</el-radio>
           </el-radio-group>
         </el-form-item>
-        <!--        <el-form-item label="所属公司" prop="companyId">-->
-        <!--          <el-select style="width: 220px" filterable multiple v-model="form1.companyId" placeholder="请选择公司名" clearable size="small">-->
-        <!--            <el-option-->
-        <!--              v-for="item in companyOptions"-->
-        <!--              :key="item.companyId"-->
-        <!--              :label="item.companyName"-->
-        <!--              :value="item.companyId"-->
-        <!--            />-->
-        <!--          </el-select>-->
-        <!--        </el-form-item>-->
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm1">确 定</el-button>
@@ -527,6 +483,34 @@
             </el-form-item>
           </el-col>
         </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="商品类型" prop="productType">
+              <el-select style="width: 240px" v-model="form.productType" placeholder="请选择商品类型" clearable
+                         size="small">
+                <el-option
+                  v-for="item in productTypeOptions"
+                  :key="item.dictValue"
+                  :label="item.dictLabel"
+                  :value="item.dictValue"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="所属店铺" prop="storeId" v-if="medicalMallConfig.isStores">
+              <el-select style="width: 240px" v-model="form.storeId" placeholder="请选择店铺" clearable size="small">
+                <el-option
+                  v-for="item in storeOptions"
+                  :key="item.storeId"
+                  :label="item.storeName"
+                  :value="item.storeId"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
         <el-row>
           <el-col :span="12">
             <el-form-item label="关键字" prop="keyword">
@@ -672,22 +656,7 @@
         <el-form-item label="商品图片" prop="image">
           <Material v-model="imageArr" type="image" :num="1" :width="150" :height="150"/>
         </el-form-item>
-        <!--        <el-form-item label="商品视频" prop="video">
-                  <div>
-                    <el-upload
-                      ref="upload"
-                      class="upload-demo"
-                      :action="uploadUrl"
-                      :on-success="handleSuccess"
-                      :before-upload="beforeUpload"
-                      :limit="1"
-                      :accept="videoAccept"
-                    >
-                      <el-button size="small" type="primary">点击上传视频</el-button>
-                    </el-upload>
-                    <video v-if="form.video" :src="form.video" controls style="max-width: 300px; max-height: 300px; margin-top: 10px"></video>
-                  </div>
-                </el-form-item>-->
+
         <el-form-item label="轮播图" prop="sliderImage">
           <Material v-model="photoArr" type="image" :num="10" :width="150" :height="150"/>
         </el-form-item>
@@ -962,37 +931,7 @@
             />
           </el-select>
         </el-form-item>
-        <el-form-item label="商品类型" prop="productType">
-          <el-select style="width: 240px" v-model="form.productType" placeholder="请选择商品类型" clearable
-                     size="small">
-            <el-option
-              v-for="item in productTypeOptions"
-              :key="item.dictValue"
-              :label="item.dictLabel"
-              :value="item.dictValue"
-            />
-          </el-select>
-        </el-form-item>
-        <!--        <el-form-item label="所属公司">-->
-        <!--          <el-select style="width: 240px" v-model="form.companyIds" multiple placeholder="请选择企业" clearable size="small" >-->
-        <!--            <el-option-->
-        <!--              v-for="item in companyOptions"-->
-        <!--              :key="item.companyId"-->
-        <!--              :label="item.companyName"-->
-        <!--              :value="item.companyId"-->
-        <!--            />-->
-        <!--          </el-select>-->
-        <!--        </el-form-item>-->
-        <el-form-item label="所属店铺" prop="storeId" v-if="medicalMallConfig.isStores">
-          <el-select style="width: 240px" v-model="form.storeId" placeholder="请选择店铺" clearable size="small">
-            <el-option
-              v-for="item in storeOptions"
-              :key="item.storeId"
-              :label="item.storeName"
-              :value="item.storeId"
-            />
-          </el-select>
-        </el-form-item>
+
         <div v-if="form.isDrug === '1'">
         <el-form-item v-if="form.isShow==='1'" label="审核说明" prop="reviewAudit">
           <el-select style="width: 240px" v-model="form.reviewAudit" placeholder="请选择审核说明" clearable
@@ -1068,25 +1007,6 @@
             <i class="el-icon-warning"></i> {{ certificateExpireError }}
           </div>
         </el-form-item>
-
-        <!--        <el-form-item v-if="form.isShow === '1' && displayDemo" label="Ⅰ类Ⅱ类备案凭证" prop="voucher">-->
-        <!--          <Material v-model="voucherArr" type="image" :num="1" :width="150" :height="150"/>-->
-        <!--        </el-form-item>-->
-        <!--        <el-form-item v-if="form.isShow === '1' && voucherArr.length > 0 && displayDemo" prop="voucherExpire">-->
-        <!--          <el-date-picker-->
-        <!--            v-model="form.voucherExpire"-->
-        <!--            type="daterange"-->
-        <!--            value-format="yyyy-MM-dd"-->
-        <!--            range-separator="至"-->
-        <!--            start-placeholder="开始日期"-->
-        <!--            end-placeholder="结束日期">-->
-        <!--          </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>-->
         </div>
         <el-form-item label="国药准字" v-if="form.productType==2" prop="prescribeCode">
           <el-input v-model="form.prescribeCode" placeholder="请输入国药准字"/>
@@ -1322,21 +1242,70 @@ export default {
     'form.cateId': {
       handler(newVal, oldVal) {
         // 分类变化时动态修改验证规则
-        if (newVal == 224) {
-          this.rules.indications = [];
-          this.rules.dosage = [];
-        }
         const cateName = this.cateIdToNameMap[newVal];
+
+        // 判断是否包含"器械"
         if(cateName !== undefined && cateName.includes('器械')){
-          this.displayDemo=true;
-        }else {
-          this.displayDemo=false;
+          this.displayDemo = true;
+        } else {
+          this.displayDemo = false;
+        }
+
+        // 判断是否包含"处方药"
+        const isPrescriptionDrug = cateName !== undefined && cateName.includes('处方药');
+
+        // 如果是处方药,则移除相关字段的必填校验
+        if (isPrescriptionDrug) {
+          // 移除必填校验规则
+          const fieldsToRemoveRequired = ['indications', 'ingredient', 'dosage', 'adverseReactions', 'contraindications', 'precautions'];
+          fieldsToRemoveRequired.forEach(field => {
+            if (this.rules[field]) {
+              // 过滤掉 required 规则
+              this.rules[field] = this.rules[field].filter(rule => rule.required !== true);
+            }
+          });
+        } else {
+          // 如果不是处方药,恢复默认的必填校验规则
+          // 恢复 ingredient 字段的必填规则
+          if (!this.rules.ingredient) {
+            this.rules.ingredient = [];
+          }
+          if (!this.rules.ingredient.some(rule => rule.required)) {
+            this.rules.ingredient.unshift({ required: true, message: "成分不能为空", trigger: "blur" });
+          }
+
+          // 恢复其他字段的必填规则
+          const requiredRules = {
+            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" }]
+          };
+
+          Object.keys(requiredRules).forEach(field => {
+            if (!this.rules[field]) {
+              this.rules[field] = [];
+            }
+            // 检查是否已有 required 规则,如果没有就添加
+            if (!this.rules[field].some(rule => rule.required)) {
+              this.rules[field] = [...requiredRules[field], ...this.rules[field]];
+            }
+          });
         }
+
         this.ingredientError = '';
         // 清除验证状态
         this.$nextTick(() => {
           if (this.$refs.form) {
-            this.$refs.form.clearValidate(['indications', 'dosage']);
+            this.$refs.form.clearValidate([
+              'indications',
+              'ingredient',
+              'dosage',
+              'adverseReactions',
+              'contraindications',
+              'precautions'
+            ]);
           }
         });
 
@@ -1681,35 +1650,6 @@ export default {
       },
     };
   },
-  // computed: {
-  //   // 动态验证规则 - 返回完整的规则对象
-  //   dynamicRules() {
-  //     // 复制基础规则
-  //     const rules = { ...this.rules };
-  //
-  //     // 判断是否为处方药 (cateId = 224)
-  //     const isPrescriptionDrug = this.form.cateId == 224;
-  //     console.log("分类id"+this.form.cateId);
-  //     // 修改触发时机,只在失去焦点时验证
-  //     Object.keys(rules).forEach(key => {
-  //       if (rules[key] && rules[key].length > 0) {
-  //         rules[key].forEach(rule => {
-  //           rule.trigger = 'blur'; // 只在失去焦点时验证
-  //         });
-  //       }
-  //     });
-  //     // 如果是处方药,取消功能主治和用法用量的校验
-  //     if (isPrescriptionDrug) {
-  //       rules.indications = []; // 空数组表示取消校验
-  //       rules.dosage = []; // 空数组表示取消校验
-  //     }else {
-  //       rules.indications = this.rules.indications
-  //       rules.dosage = this.rules.dosage
-  //     }
-  //
-  //     return rules;
-  //   }
-  // },
   methods: {
     // 防抖检查店铺许可证权限
     debounceCheckStoreLicense() {
@@ -2069,6 +2009,7 @@ export default {
     },
     // 表单重置
     reset() {
+      this.initPrescriptionDrugRules(); // 重置处方药相关的校验规则
       this.isFormInitialized = false; // 重置初始化标志
       this.ingredientError = '';
       this.form = {
@@ -2274,8 +2215,6 @@ export default {
           this.qualificationArr = this.form.qualificationCertificate.split(",");
         }
 
-
-
         const expireFieldMap = [
           { expireKey: 'businessExpire', startKey: 'businessStart', endKey: 'businessEnd' },
           { expireKey: 'licenseExpire', startKey: 'licenseStart', endKey: 'licenseEnd' },
@@ -2600,7 +2539,44 @@ export default {
     validateCertificateExpire(dates) {
       const error = this.checkCertificateExpire(dates, '注册证');
       this.certificateExpireError = error ? error + '!' : '';
-    }
+    },
+    // 添加一个新的方法用于初始化处方药相关规则
+    initPrescriptionDrugRules() {
+      // 初始化处方药相关字段的校验规则
+      this.$set(this.rules, 'indications', [
+        { required: true, message: "功能主治不能为空", trigger: "blur" }
+      ]);
+
+      this.$set(this.rules, 'ingredient', [
+        { required: true, message: "成分不能为空", trigger: "blur" },
+        {
+          validator: (rule, value, callback) => {
+            if (this.ingredientError) {
+              callback(new Error(this.ingredientError));
+            } else {
+              callback();
+            }
+          },
+          trigger: "blur"
+        }
+      ]);
+
+      this.$set(this.rules, 'dosage', [
+        { required: true, message: "用法用量不能为空", trigger: "blur" }
+      ]);
+
+      this.$set(this.rules, 'adverseReactions', [
+        { required: true, message: "不良反应不能为空", trigger: "blur" }
+      ]);
+
+      this.$set(this.rules, 'contraindications', [
+        { required: true, message: "禁忌不能为空", trigger: "blur" }
+      ]);
+
+      this.$set(this.rules, 'precautions', [
+        { required: true, message: "注意事项不能为空", trigger: "blur" }
+      ]);
+    },
   }
 };
 </script>