Эх сурвалжийг харах

添加主表正则校验,是医药物料,生产许可证字段要必填,反之不必填

002390 2 жил өмнө
parent
commit
736f497ef5

+ 99 - 41
src/views/material/basicFile/details.vue

@@ -10,7 +10,7 @@
         <el-col :span="1.5">
           <el-button-group>
             <el-button size="small" @click="handleSave"
-                       v-hasPermi="['system:material:add', `${maintainNewVersion ? '' : 'system:material:versions'}`]">
+              v-hasPermi="['system:material:add', `${maintainNewVersion ? '' : 'system:material:versions'}`]">
               保存
             </el-button>
           </el-button-group>
@@ -108,13 +108,13 @@
         <el-form :inline="true" label-position="right" :model="basicData.value">
           <!-- <el-form-item label="所属组织"></el-form-item> -->
           <el-form-item label="物料编码">
-            <el-input v-model="basicData.value.code" readonly size="small"></el-input>
+            <el-input v-model="basicData.value.code" readonly size="mini"></el-input>
           </el-form-item>
           <el-form-item label="物料名称">
-            <el-input v-model="basicData.value.name" readonly size="small"></el-input>
+            <el-input v-model="basicData.value.name" readonly size="mini"></el-input>
           </el-form-item>
           <el-form-item label="英文名称">
-            <el-input v-model="basicData.value.enName" readonly size="small"></el-input>
+            <el-input v-model="basicData.value.enName" readonly size="mini"></el-input>
           </el-form-item>
           <!-- <el-form-item label="版本号"></el-form-item> -->
         </el-form>
@@ -128,8 +128,14 @@
               <div class="md-main">
 
                 <!-- 基本信息展示表单 -->
-                <el-form v-if="activeMainTab == 'material'" :inline="true" label-position="right"
-                         :hide-required-asterisk="true" :model="basicData.value">
+                <el-form 
+                  v-if="activeMainTab == 'material'" 
+                  :inline="true" 
+                  label-position="right"
+                  :hide-required-asterisk="true" 
+                  :model="basicData.value" 
+                  ref="basicMessageRef"
+                >
 
                   <el-row :gutter="10">
                     <el-col :span="8" v-for="f in basicData.form" style="text-align: right;">
@@ -137,18 +143,27 @@
                         <!--  :disabled="!(headerParam.isEdit && f.edit)" -->
 
                         <!-- 多选框 -->
-                        <el-form-item v-if="f.attribute == 'checkbox'" style="text-align: left;" :prop="f.prop">
+                        <el-form-item v-if="f.attribute == 'checkbox'" style="text-align: left;" :prop="f.prop"
+                        :rules="[{ required: f.required, message: `请选择${f.name}`, trigger: 'change' }]" >
                           <!-- :rules="[{ required: f.required, message: `请选择${f.name}`, trigger: 'change' }]" -->
 
-                          <el-checkbox :label="f.name" name="type" v-model="basicData.value[f.prop]" true-label="0"
-                                       false-label="2" :disabled="handleJudge(f)">
+                          <el-checkbox 
+                            :label="f.name" name="type" 
+                            v-model="basicData.value[f.prop]" 
+                            true-label="0"
+                            false-label="2" 
+                            :disabled="handleJudge(f)"
+                            size="mini"
+                            @change="handleMainCheckChange(f.prop)"
+                          >
                           </el-checkbox>
                         </el-form-item>
 
                         <!-- 下拉框   -->
                         <el-form-item v-else-if="f.attribute == 'select'"
                                       :id="(updateButtonGroup && f.apiUrl) ? 'selected' : ''"
-                                      :prop="f.apiUrl ? `${f.prop}Name` : f.prop">
+                                      :prop="f.apiUrl ? `${f.prop}Name` : f.prop"
+                                      :rules="[{ required: f.required, message: `请选择${f.name}`, trigger: 'change' }]">
                           <!-- :rules="[{ required: f.required, message: `请选择${f.name}`, trigger: 'change' }]" -->
 
                           <template slot="label">
@@ -162,14 +177,16 @@
 
                           <!-- 参照 -->
                           <el-select v-if="f.apiUrl" v-model="basicData.value[`${f.prop}Name`]" placeholder="请选择"
+                              size="mini" :rules="[{ required: f.required, message: `请选择${f.name}`, trigger: 'change' }]"
                                      :key="basicData.value[f.prop]" :disabled="handleJudge(f)"
                                      @focus="f.apiUrl && handleQueryMore(f, '', { name: 'basicData', prop: f.prop })">
                             <div slot="empty"></div>
                           </el-select>
 
                           <!-- 字典 -->
-                          <el-select v-if="f.dictId" v-model="basicData.value[f.prop]" placeholder="请选择"
-                                     :key="basicData.value[f.prop]" :disabled="handleJudge(f)">
+                          <el-select v-if="f.dictId" v-model="basicData.value[f.prop]" placeholder="请选择" size="mini"
+                                     :key="basicData.value[f.prop]" :disabled="handleJudge(f)"
+                                     :rules="[{ required: f.required, message: `请选择${f.name}`, trigger: 'change' }]">
                             <el-option v-if="f.dictId" v-for="d in f.dictValue" :key="d.dictValue" :label="d.dictLabel"
                                        :value="d.dictValue">
                             </el-option>
@@ -186,7 +203,7 @@
                         </el-form-item>
 
                         <!--attribute 文本 数字 文本域 为null -->
-                        <el-form-item v-else :prop="f.prop">
+                        <el-form-item v-else :prop="f.prop" :rules="[{ required: f.required, message: `请选择${f.name}`, trigger: 'change' }]">
                           <!-- :rules="[{ required: f.required, message: `请输入${f.name}`, trigger: 'blur' }]" -->
 
                           <template slot="label">
@@ -198,8 +215,10 @@
                             </el-tooltip>
                           </template>
 
-                          <el-input size="small" v-model="basicData.value[f.prop]" :type="f.attribute || 'text'"
-                                    :readonly="handleJudge(f)">
+                          <el-input size="mini" v-model="basicData.value[f.prop]" :type="f.attribute || 'text'"
+                                    :readonly="handleJudge(f)"
+                                    :rules="[{ required: f.required, message: `请选择${f.name}`, trigger: 'change' }]"
+                                    >
                           </el-input>
                         </el-form-item>
 
@@ -247,7 +266,7 @@
 
                             <!-- 多选框 -->
                             <el-form-item v-if="m.attribute == 'checkbox'">
-                              <el-checkbox :label="m.name" name="type" v-model="medcineData.value[m.prop]"
+                              <el-checkbox :label="m.name" name="type" v-model="medcineData.value[m.prop]" size="mini"
                                            :disabled="!(updateButtonGroup && m.edit && basicData.value.isMedicine == '0')"
                                            true-label="0" false-label="2">
                               </el-checkbox>
@@ -258,7 +277,7 @@
 
                               <!-- 参照弹窗 -->
                               <el-select v-if="m.apiUrl" v-model="medcineData.value[`${m.prop}Name`]" placeholder="请选择"
-                                         :key="medcineData.value[m.prop]"
+                                         :key="medcineData.value[m.prop]" size="mini"
                                          :disabled="!(updateButtonGroup && m.edit && basicData.value.isMedicine == '0')"
                                          @focus="m.apiUrl && handleQueryMore(m, '', { name: 'medcineData', prop: m.prop })">
 
@@ -269,7 +288,7 @@
 
                               <!-- 下拉选择 -->
                               <el-select v-else v-model="medcineData.value[m.prop]" placeholder="请选择"
-                                         :key="medcineData.value[m.prop]"
+                                         :key="medcineData.value[m.prop]" size="mini"
                                          :disabled="!(updateButtonGroup && m.edit && basicData.value.isMedicine == '0')"
                                          @focus="m.apiUrl && handleQueryMore(m, '', { name: 'medcineData', prop: m.prop })">
 
@@ -288,7 +307,7 @@
 
                             <!-- 文本、数字、textarae -->
                             <el-form-item v-else :label="m.name">
-                              <el-input size="small" v-model="medcineData.value[m.prop]" :type="m.attribute || 'text'"
+                              <el-input size="mini" v-model="medcineData.value[m.prop]" :type="m.attribute || 'text'"
                                         :readonly="!(updateButtonGroup && m.edit && basicData.value.isMedicine == '0')">
                               </el-input>
                             </el-form-item>
@@ -345,16 +364,16 @@
                 <el-divider content-position="left">审计信息</el-divider>
                 <el-form :inline="true" label-position="right" :model="basicData.value">
                   <el-form-item label="创建人">
-                    <el-input v-model="basicData.value.createByName" size="small" readonly></el-input>
+                    <el-input v-model="basicData.value.createByName" size="mini" readonly></el-input>
                   </el-form-item>
                   <el-form-item label="创建时间">
-                    <el-input v-model="basicData.value.createTime" size="small" readonly></el-input>
+                    <el-input v-model="basicData.value.createTime" size="mini" readonly></el-input>
                   </el-form-item>
                   <el-form-item label="最后修改人">
-                    <el-input v-model="basicData.value.updateByName" size="small" readonly></el-input>
+                    <el-input v-model="basicData.value.updateByName" size="mini" readonly></el-input>
                   </el-form-item>
                   <el-form-item label="最后修改时间">
-                    <el-input v-model="basicData.value.updateTime" size="small" readonly></el-input>
+                    <el-input v-model="basicData.value.updateTime" size="mini" readonly></el-input>
                   </el-form-item>
 
                 </el-form>
@@ -402,24 +421,24 @@
           <template slot-scope="scope">
             <!-- :prop="mt.prop" -->
             <!-- 多选框 -->
-            <el-checkbox size="small" v-if="mt.attribute == 'checkbox'" :disabled="!(materialType.isEdit && mt.edit)"
+            <el-checkbox size="mini" v-if="mt.attribute == 'checkbox'" :disabled="!(materialType.isEdit && mt.edit)"
                          true-label="0" false-label="2" v-model="scope.row[mt.prop]"/>
 
             <!-- 下拉框 / 参照弹窗---- 药品类别编码 scope.row[`${mt.prop}Name`] -->
-            <el-select size="small" v-else-if="mt.attribute == 'select' && mt.apiUrl" placeholder="请选择"
+            <el-select size="mini" v-else-if="mt.attribute == 'select' && mt.apiUrl" placeholder="请选择"
                        :disabled="!(materialType.isEdit && mt.edit)" v-model="scope.row[mt.prop]"
                        :key="scope.row[mt.prop]"
                        @focus="mt.apiUrl && handleQueryMore(mt, '', { name: 'materialType', prop: scope.row })">
               <div slot="empty"></div>
             </el-select>
 
-            <!-- <el-select size="small" v-else-if="mt.attribute == 'select' && mt.dictId"  placeholder="请选择"
+            <!-- <el-select size="mini" v-else-if="mt.attribute == 'select' && mt.dictId"  placeholder="请选择"
               :disabled="!(materialType.isEdit && mt.edit)" v-model="scope.row[mt.prop]" :key="scope.row[mt.prop]">
               <el-option v-if="mt.dictId" v-for="d in mt.dictId" :key="d.dictValue" :label="d.dictLabel"
                 :value="d.dictValue"></el-option></el-select> -->
 
             <!-- 其他类型 -->
-            <el-input v-else size="small" v-model="scope.row[mt.prop]" :readonly="!(materialType.isEdit && mt.edit)"/>
+            <el-input v-else size="mini" v-model="scope.row[mt.prop]" :readonly="!(materialType.isEdit && mt.edit)"/>
           </template>
 
         </el-table-column>
@@ -438,9 +457,15 @@
 
 
     <!-- 其他页签的操作 -->
-    <el-dialog :title="otherDeatils.title" :visible.sync="otherDeatils.show" show-close width="70%"
-               :before-close="handleCloseOtherDetails" :close-on-press-escape="false" :close-on-click-modal="false"
-               class="otherDialog">
+    <el-dialog 
+      :title="otherDeatils.title" 
+      :visible.sync="otherDeatils.show" 
+      show-close width="70%"
+      :before-close="handleCloseOtherDetails" 
+      :close-on-press-escape="false" 
+      :close-on-click-modal="false"
+      class="otherDialog"
+    >
       <div v-loading="otherDeatils.loading">
         <!-- 其他标签页操作  修改、删除 -->
         <el-row :gutter="10" class="mb10">
@@ -567,7 +592,7 @@
       <div>
         <el-row>
           <el-col :span="1.5">
-            <el-input v-model="MoreDataDialog.key" placeholder="过滤" size="small" @change="handleFilterRefer"/>
+            <el-input v-model="MoreDataDialog.key" placeholder="过滤" size="mini" @change="handleFilterRefer"/>
           </el-col>
         </el-row>
         <!-- 树形 -->
@@ -1557,18 +1582,36 @@
       // 保存修改
       handleSave() {
         console.log('保存修改');
-        this.loading = true;
-        // 普通保存修改
-        this.updateButtonGroup && this.handleSaveMaterial(() => {
-          this.updateButtonGroup = false;
-          this.handleRefresh();
-        });
+        this.$refs['basicMessageRef'].validate(async (valid) => {
+          
+          if(valid){
+            this.loading = true;
+            // 普通保存修改
+            this.updateButtonGroup && this.handleSaveMaterial(() => {
+              this.updateButtonGroup = false;
+              this.handleRefresh();
+            });
 
-        // 维护新版本保存修改
-        this.maintainNewVersion && this.handleSaveNewVersion(() => {
-          this.maintainNewVersion = false;
-          this.handleRefresh();
+            // 维护新版本保存修改
+            this.maintainNewVersion && this.handleSaveNewVersion(() => {
+              this.maintainNewVersion = false;
+              this.handleRefresh();
+            })
+          }else {
+            this.$message.error('存在必填项未填写');
+            console.log('error submit!!');
+            return false;
+          }
         })
+        
+      },
+      // 主信息多选框改变
+      handleMainCheckChange(prop){
+
+        if(prop === 'isMedicine'){
+          console.log('是否医药物料改变');
+        }
+
       },
       // 物料类别列表选中
       handleSelectionType(list) {
@@ -2069,6 +2112,21 @@
           return item;
         })
       },
+      "basicData.value.isMedicine": {
+        handler(nVal, oVal) {
+          console.log(nVal, oVal,'11111111111');
+          this.basicData.form = this.basicData.form.map(formItem =>{
+
+            if(formItem.prop === 'productionPermit'){
+
+              formItem.required = nVal == '0' ? true :false;
+
+            }
+            return formItem;
+          })
+        },
+        deep: true,
+      },
 
     },