Browse Source

更新保存物料基础接口

002390 2 năm trước cách đây
mục cha
commit
28d4318273

+ 34 - 4
src/api/material/basic.js

@@ -33,12 +33,30 @@ const materialDetails = (id, templateCode) => {
   })
 }
 
-// 获取医药行业信息详细信息+表单属性
-const medcineDetails = (id, templateCode) => {
+// 医药id 获取医药行业信息详细信息
+const medcineDetails = (id) => {
   return request({
     url: `/system/medcine/details/${id}`,
     method: 'get',
-    params: { templateCode }
+    params: {}
+  })
+}
+
+// 根据物料id获取医药行业信息详细信息  
+const medcineDetailsInfo = (id) => {
+  return request({
+    url: `/system/medcine/detailsInfo/${id}`,
+    method: 'get',
+    params: {}
+  })
+}
+
+// 根据物料id查询医药行业信息子列表 /dev-api/drp-admin/system/medcineitem/list
+const medcineitemList = (data) => {
+  return request({
+    url: `/system/medcineitem/list`,
+    method: 'post',
+    data: data
   })
 }
 
@@ -241,15 +259,26 @@ const insertMaterialInfo = (data) => {
   })
 }
 
+//  批量保存医药行业信息子表  dev-api/drp-admin/system/medcineitem/batchSave
+const medcineitemBatchSave = (data) => {
+  return request({
+    url: `/system/medcineitem/batchSave `,
+    method: 'post',
+    data: data
+  })
+}
+
 export default {
   // 查询
   materialList,
   tagList,
   materialDetails,
   medcineDetails,
+  medcineDetailsInfo,
   costList,
   costDetails,
   financeList,
+  medcineitemList,
   financeDetails,
   propertyDetails,
   propertyList,
@@ -269,5 +298,6 @@ export default {
   medcineEdit,
   saveMaterial,
   insertMaterialInfo,
-  
+  medcineitemBatchSave,
+
 }

+ 162 - 23
src/views/material/basicFile/details.vue

@@ -38,6 +38,7 @@
         <!-- 启用 -->
         <el-col :span="1.5">
           <el-button-group>
+            <el-button size="small" @click="handleMaterialType">维护物料类别</el-button>
             <el-dropdown split-button size="small" @click="handleIsInvoke(true)" @command="handleIsInvoke">
               启用
               <el-dropdown-menu slot="dropdown">
@@ -137,7 +138,7 @@
         <dr-tabs :tabList="detailsTabs" :handleTabClick="handleMainTabClick">
           <template #tabContent>
 
-            <div class="md-basic">
+            <div class="md-basic" :key="count">
 
               <!-- 主信息 -->
               <div class="md-main">
@@ -310,6 +311,51 @@
 
     </el-card>
 
+    <!-- 维护物料类别弹窗 -->
+    <el-dialog title="物料类别维护" :visible.sync="materialType.show" :before-close="handleCloseOtherDetails"
+      :close-on-press-escape="false" :close-on-click-modal="false" width="80%" center class="materialType">
+
+      <!-- 操作按钮 -->
+      <el-row :gutter="10" class="mb10">
+        <el-col :span="1.5">
+          <el-button-group>
+            <el-button size="small" @click="handleMaterialTypeRow('add')">增行</el-button>
+            <el-button size="small" @click="handleMaterialTypeRow('del')">删行</el-button>
+          </el-button-group>
+          <el-button-group>
+            <el-button size="small" @click="handleMaterialTypeRow('save')">保存</el-button>
+            <el-button size="small" @click="handleMaterialTypeRow">刷新</el-button>
+          </el-button-group>
+        </el-col>
+      </el-row>
+      <!-- 表格数据 -->
+      <el-table :data="materialType.value" stripe style="width: 100%" max-height="350" v-loading="materialType.loading">
+        <el-table-column type="index" width="50" label="序号"></el-table-column>
+        <el-table-column v-for="mt in materialType.form" v-if="mt.show" :label="mt.name" width="180">
+          <!-- :prop="mt.prop" -->
+
+          <!-- 多选框 -->
+          <el-checkbox size="small" v-if="mt.attribute == 'checkbox'" :disabled="!mt.edit"
+            v-model="materialType.value[mt.prop]" />
+
+          <!-- 下拉框 / 参照弹窗 -->
+          <el-select size="small" v-else-if="mt.attribute == 'select'" :disabled="!mt.edit"
+            v-model="materialType.value[`${mt.prop}Label`]" :key="materialType.value[mt.prop]" :placeholder="mt.name"
+            @focus="mt.apiUrl && handleQueryMore(mt, '', { name: 'materialType', prop: 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>
+            <div slot="empty"></div>
+          </el-select>
+
+          <!-- 其他类型 -->
+          <el-input v-else size="small" v-model="materialType.value[mt.prop]" :readonly="!mt.edit"
+            :placeholder="mt.name" />
+        </el-table-column>
+      </el-table>
+
+    </el-dialog>
+
     <!-- 操作提示弹窗 -->
     <el-dialog title="操作提示" :visible.sync="optionDialog.show" width="30%" center>
       <span>是否确认{{ optionDialog.op }}?</span>
@@ -349,7 +395,7 @@
             <el-form :inline="true" label-position="right" :model="basicData.value">
             <!-- <el-form-item label="所属组织">
                   <el-input v-model="basicData.value.orgName" placeholder="所属组织"></el-input>
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       </el-form-item> -->
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       </el-form-item> -->
               <el-form-item label="物料编码">
                 <el-input v-model="basicData.value.code" size="small" readonly placeholder="物料编码"></el-input>
               </el-form-item>
@@ -361,7 +407,7 @@
               </el-form-item>
             <!-- <el-form-item label="版本号">
                 <el-input v-model="basicData.value.version"  placeholder="版本号"></el-input>
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       </el-form-item> -->
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       </el-form-item> -->
 
             </el-form>
           </el-collapse-item>
@@ -482,6 +528,7 @@ import drTabs from '../components/dr-tabs.vue';
 import detailsTabs from '../config/detailsTabs';
 import materialApi from '@/api/material/basic';
 import { getDicts as getDicts } from '@/api/system/dict/data'
+import arrayUtils from '../tools/arrayUtils';
 
 export default {
   name: 'material-details',
@@ -528,6 +575,13 @@ export default {
         value: {},
         form: []
       },
+      // 物料类别
+      materialType: {
+        show: false,
+        value: [],
+        form: [],
+        loading: false,
+      },
       // 医药行业
       medcineData: {
         value: {},
@@ -750,14 +804,30 @@ export default {
       this.MoreDataDialog.msg = msg;
       this.MoreDataDialog.target = target;
 
-      this.getExecuteMethods(msg.apiUrl, { param: this.MoreDataDialog.key }, (data) => {
+      let par = { param: this.MoreDataDialog.key };
+
+      this[target.name].form.map(t => {
+
+        if (t.relevance && t.relevance != '') {
+
+          let reList = t.relevance.split(',');
+          console.log(reList, 'reList-------------------');
+          reList.forEach(i => {
+            par[i] = this.basicData.value[i]
+          })
+          console.log(par, 'par/////////////////////////');
+        }
+      })
+
+      this.getExecuteMethods(msg.apiUrl, par, (data) => {
 
         console.log(data, '编辑状态下,弹窗显示查询数据');
         _this.MoreDataDialog.type = data.type;
-        _this.MoreDataDialog.list = data.tableBody;
         if (data.type == 'tree') {
 
+          _this.MoreDataDialog.list = arrayUtils.filterTreeData(data.tableBody);
         } else {
+          _this.MoreDataDialog.list = data.tableBody;
           _this.MoreDataDialog.form = data.tableHeader;
         }
 
@@ -802,19 +872,43 @@ export default {
         // 查参照
         if (item.apiUrl && item.apiUrl != '') {
 
-          _this.getExecuteMethods(item.apiUrl, {}, (data) => {
+          let param = {};
 
+          if (item.relevance && item.relevance != '') {
+            let reList = item.relevance.split(',');
+            console.log(reList, 'reList-------------------');
+            reList.forEach(i => {
+              param[i] = this.basicData.value[i]
+            })
+            console.log(param, 'param/////////////////////////');
+          }
+
+          _this.getExecuteMethods(item.apiUrl, param, (data) => {
             let { tableBody } = data;
+            if (dataName == 'materialType') {
+
+              _this[dataName].value.length && (_this[dataName].value = _this[dataName].value.map(d => {
 
-            let Blabel = tableBody.filter((t) => t.id == _this[dataName].value[item.prop])[0];
+                let Blabel = tableBody.filter((t) => t.id == d[item.prop])[0];
+                console.log(Blabel, 'Blabel``````````````````````````');
+                d[`${item.prop}Label`] = (Blabel && Blabel.name) || Blabel || '11111';
+                return d;
+              }))
 
-            _this[dataName].value[`${item.prop}Label`] = Blabel || '';
+            } else {
 
+              let Blabel = tableBody.filter((t) => t.id == _this[dataName].value[item.prop])[0];
+              console.log(Blabel, 'Blabel``````````````````````````');
+              _this[dataName].value[`${item.prop}Label`] = (Blabel && Blabel.name) || Blabel || '';
+            }
+
+            this.count++;
+            console.log(_this[dataName].value, `${dataName}//////////////////////`);
           })
         }
       })
+      this.materialType.loading = false;
 
-      console.log(_this[dataName].value, '_this[dataName].value//////////////////////');
     },
 
 
@@ -979,20 +1073,18 @@ export default {
 
 
     /* 二级标签页 */
-    // 获取医药行业信息详细信息+表单属性
-    getMedcineDetails(id, templateCode) {
-
-      console.log(id, templateCode);
-      materialApi.medcineDetails(
-        id,
-        templateCode,
-      ).then((res) => {
+    // 根据物料id获取医药行业信息详细信息
+    getMedcineDetails(id) {
+      let _this = this;
+      console.log(id);
+      materialApi.medcineDetailsInfo(id).then((res) => {
 
         console.log(res, '医药行业');
         let { code, data } = res;
         if (code == 200) {
-          this.medcineData.value = data.data || {};
+          _this.medcineData.value = data.data || {};
           // this.medcineData.form = data.form;
+          _this.handleAddReferLabel('medcineData');
         }
       })
     },
@@ -1070,7 +1162,17 @@ export default {
         }
       })
     },
-
+    // 根据物料id获取物料类别维护列表
+    getMedcineitemList(materialId) {
+      let _this = this;
+      materialApi.medcineitemList({ materialId }).then(res => {
+        console.log(res, '根据物料id获取物料类别维护列表');
+        if (res.code == 200) {
+          _this.materialType.value = res.data.tableBody.rows;
+          _this.handleAddReferLabel('materialType');
+        }
+      })
+    },
 
 
 
@@ -1142,6 +1244,17 @@ export default {
         type
       }
     },
+    // 维护物料类别 
+    handleMaterialType() {
+      console.log('维护物料类别');
+      this.materialType.show = true;
+
+      this.materialType.loading = true;
+      this.getTagList('material_medcine_item', (form) => {
+        this.materialType.form = form;
+        this.getMedcineitemList(this.materialId);
+      });
+    },
     // 启用
     handleIsInvoke(e) {
       console.log('启用', e);
@@ -1175,6 +1288,31 @@ export default {
         this.$router.go(0)
       });
     },
+    // 物料类别增删行
+    handleMaterialTypeRow(op) {
+      switch (op) {
+
+        // 增行
+        case 'add':
+          console.log('物料类别增行');
+          break;
+
+        // 删行
+        case 'del':
+          console.log('物料类别删行');
+          break;
+
+        // 保存
+        case 'save':
+          console.log('物料类别保存', this.materialType.value);
+          break;
+        // 刷新
+        default:
+          console.log('物料类别刷新');
+          break;
+
+      }
+    },
     // 保存修改并新增
     handleSaveAdd() {
       console.log('保存修改并新增');
@@ -1309,7 +1447,7 @@ export default {
       console.log(param, '保存物料以及相关页签param');
       materialApi.insertMaterialInfo(param).then(res => {
         console.log(res, '保存物料以及相关页签');
-        if(res.code) cb();
+        if (res.code == 200) cb();
       })
     },
 
@@ -1404,6 +1542,9 @@ export default {
     }
   }
 
+  .el-dialog__header {
+    background-color: rgb(244, 244, 244);
+  }
 
   .MoreDataDialog {
 
@@ -1428,9 +1569,7 @@ export default {
       }
     }
 
-    .el-dialog__header {
-      background-color: rgb(244, 244, 244);
-    }
+
 
     .more-button {
       margin-top: 10px;

+ 2 - 1
src/views/material/basicFile/index.vue

@@ -297,7 +297,8 @@ export default {
 
       .el-table__body-wrapper {
         height: calc(100% - 137px);
-
+        overflow-y: auto;
+        overflow-x: auto;
         // .el-table__body {
         //   height: 100%;
         // }

+ 19 - 0
src/views/material/tools/arrayUtils.js

@@ -0,0 +1,19 @@
+/** 过滤树形数组,包含children的选项均禁用 */
+const filterTreeData = (treeData) => {
+
+  return treeData.map(item => {
+    if (isNotEmpty(item.childrens)) {
+      item.disabled = true;
+      item.childrens = filterTreeData(item.childrens)
+    }
+    return item
+  })
+
+}
+
+const isNotEmpty = (arr) => {
+  return arr && Array.isArray(arr) && arr.length > 0;
+}
+export default {
+  filterTreeData
+}