Ver Fonte

Merge branch 'purchaseDev' into 'dev'

Purchase dev

See merge request new-business/drp-web!473
黄梓星 há 1 ano atrás
pai
commit
dd9b36de37

+ 85 - 3
src/components/popover-select/index.vue

@@ -146,6 +146,22 @@ export default {
         });
         if (code === 200) {
           this.data = rows;
+          // 处理新增字段无法映射
+          let that = this;
+
+          this.TableColumnTemp.forEach(({item,attr}) =>{
+
+            that.data = that.data.map(d =>{
+
+              if(!attr.is && attr.formatter){
+                d[item.key] = attr.formatter(d);
+              }
+
+              return d;
+
+            })
+
+          })
           this.page.total = total;
         }
       } catch (err) {
@@ -180,11 +196,18 @@ export default {
     },
     // confirm
     useConfirm(prop) {
+      
       const { multiple } = this.$props;
+
+      this.selectData = [...prop];
+      console.log(this.selectData,'this.selectData');
+   
       this.useUpdate(multiple ? prop : prop[0]);
+
       this.emitChange(this.selectData);
       this.lastSelectData = deepCopy(this.selectData);
       this.hide();
+      
     },
     // delete
     useDelete(prop) {
@@ -232,6 +255,22 @@ export default {
         this.innerValue = "";
       }
     },
+    async useAutocomplete(prop, cb) {
+      if (prop) {
+        this.page.pageSize = 10;
+
+        this.model = {
+          ...this.model,
+          search:prop,
+          type:this.type,
+        }
+        // 
+        await this.fetchList(this.model, this.page);
+        await cb(this.data);
+      } else {
+        cb([]);
+      }
+    },
   },
   created() {
 
@@ -242,7 +281,40 @@ export default {
 </script>
 <template>
   <div class="popover-select">
-    <el-input
+    <el-autocomplete
+      clearable
+      v-bind="$attrs"
+      v-model="innerValue"
+      :value-key="valueKey"
+      :fetch-suggestions="useAutocomplete"
+      @select="useConfirm([$event])"
+      style="width: 100%"
+    >
+      <i class="el-icon-search" slot="suffix" @click="open"> </i>
+      <template slot-scope="{ item }">
+        <p
+          style="
+            text-overflow: ellipsis;
+            overflow: hidden;
+            line-height: 15px;
+            margin: 5px 0;
+          "
+        >
+          {{ item.name }}
+        </p>
+        <p
+          style="
+            font-size: 12px;
+            color: #b4b4b4;
+            line-height: 15px;
+            margin: 5px 0;
+          "
+        >
+          {{ item.code }}
+        </p>
+      </template>
+    </el-autocomplete>
+    <!-- <el-input
       v-model="innerValue"
       :size="size"
       :disabled="disabled"
@@ -257,7 +329,7 @@ export default {
         icon="el-icon-search"
         @click="open"
       ></el-button>
-    </el-input>
+    </el-input> -->
     <el-dialog
       :title="`${title}(${multiple ? '多选' : '单选'})`"
       :width="width"
@@ -383,4 +455,14 @@ export default {
     </div>
   </div>
 </template>
-<style scoped></style>
+<style scoped>
+.popover-select .el-autocomplete {
+  width: inherit;
+}
+.popover-select .el-autocomplete .el-icon-search {
+  cursor: pointer;
+}
+::v-deep .el-table--mini .el-table__cell {
+  height: 50px;
+}
+</style>

+ 37 - 26
src/views/material/basicFile/details.vue

@@ -982,7 +982,9 @@
           // 医药行业
           case 'material_medcine':
             this.getTagList('material_medcine', (form) => {
-              this.medcineData.form = form;
+              this.medcineData.form = [...form];
+              this.medcineData.value = initParams(this.medcineData.form,'prop');
+              this.medcineRules = initRules(form);
               this.getMedcineDetails(this.materialId, 'material_medcine');
             })
             break;
@@ -1122,7 +1124,7 @@
             }
 
             // _this.handleAddReferLabel('basicData');
-
+            this.count++;
           }
         })
       },
@@ -1437,7 +1439,7 @@
       async getMedcineDetails(id) {
         let _this = this;
         console.log(id);
-        materialApi.medcineDetailsInfo(id).then((res) => {
+        await materialApi.medcineDetailsInfo(id).then((res) => {
           this.loading = false;
           console.log(res, '医药行业');
           let {code, data} = res;
@@ -1446,6 +1448,7 @@
             // this.medcineData.form = data.form;
             // _this.handleAddReferLabel('medcineData');
             console.log(' _this.medcineData', _this.medcineData, res);
+            this.count++;
           }
         })
       },
@@ -1486,27 +1489,30 @@
         })
       },
       // 获取物料列表表头
-      getTagList(templateCode, cb) {
-        let _this = this
-        materialApi.tagList({templateCode}).then(res => {
+      async getTagList(templateCode, cb) {
+        let _this = this;
+        await materialApi.tagList({templateCode}).then(async (res) => {
           console.log(res, `获取${templateCode}表头`);
           let dictIdList = [];
           if (res.code == 200) {
 
-            res.data.map(item => {
-
-              // 查字典
-              if (item.dictId && item.dictId != '') {
-                // 通过接口获取有dict的对应的数据
-                getDicts(item.dictId).then(dict => {
-                  if (dict.data) {
-                    item['dictValue'] = dict.data;
-                  }
-                })
-              }
+            res.data.map(async(item) => {
+                // 查字典
+                if (item.dictId && item.dictId != '') {
+                  // 通过接口获取有dict的对应的数据
+                  await getDicts(item.dictId).then(dict => {
+                    if (dict.data) {
+                      item['dictValue'] = dict.data;
+                    }
+                   
+                  })
+                }
 
             })
 
+              return cb(res.data);
+            
+
             // 动态更改dict
             // res.data.forEach(item => {
             //   if (item.dictId) {
@@ -1520,7 +1526,7 @@
 
             // console.log(_this.dict, 'dicts');
 
-            return cb(res.data);
+            // return cb(res.data);
           }
         })
       },
@@ -1630,7 +1636,10 @@
             // 基本信息
             case 'material':
               await this.getTagList('material', async(form) => {
+                // this.basicData.form = [...form];
                 this.basicData.form = [...form];
+                this.rules = initRules(form);
+                this.basicData.value = initParams(this.basicData.form,'prop')
                 await  this.getMaterialDetails(this.materialId, 'material');
               })
               break;
@@ -2462,28 +2471,30 @@
       async handleRest() {
         this.loading = true;
         // 基本信息
-        await this.getTagList('material', (form) => {
+        await this.getTagList('material', async(form) => {
           this.basicData.form = [...form];
           this.rules = initRules(form);
           this.basicData.value = initParams(this.basicData.form,'prop')
-          this.getMaterialDetails(this.materialId, 'material');
+          await this.getMaterialDetails(this.materialId, 'material');
         })
         // 医疗行业
-        await this.getTagList('material_medcine', (form) => {
-          form.forEach((item) => {
-            this.medcineData.value[item.prop] = ''
-          })
-          this.medcineData.form = form;
+        await this.getTagList('material_medcine',async (form) => {
+          // form.forEach((item) => {
+          //   this.medcineData.value[item.prop] = ''
+          // })
+          this.medcineData.form = [...form];
           this.medcineData.value = initParams(this.medcineData.form,'prop');
           this.medcineRules = initRules(form);
-          this.getMedcineDetails(this.materialId, 'material_medcine');
+          await this.getMedcineDetails(this.materialId, 'material_medcine');
         })
 
       },
+
       
     },
 
     watch: {
+
       // 监听主标签修改标识,控制其他标签是否禁止点击
       'updateButtonGroup': function (nVal, oVal) {
         console.log(nVal, 'nVal', oVal, 'oVal');

+ 7 - 3
src/views/material/requisition/add.vue

@@ -359,8 +359,12 @@
               </el-col>
               <el-col :span="6">
                 <el-form-item label="启用状态" prop="isEnable">
-                  <el-input v-show="false" disabled v-model="basicForm.isEnable"></el-input>
-                  <el-input disabled value="启用"></el-input>
+                  <!-- <el-input v-show="false" disabled v-model="basicForm.isEnable"></el-input>
+                  <el-input disabled value="启用"></el-input> -->
+                  <el-select v-model="basicForm.isEnable" placeholder="请选择" clearable :disabled="true">
+                    <el-option v-for="item in dict.type.material_enable" :key="item.value" :label="item.label"
+                               :value="item.value"/>
+                  </el-select>
                 </el-form-item>
               </el-col>
               <!-- <el-col :span="6">
@@ -721,7 +725,7 @@
 
   export default {
     name: 'requisition_add',
-    dicts: ['sys_storage_condition', 'sys_conditions_carriage', 'sys_medicine', 'medical_instruments', 'curing_type', 'period_unit', 'expiry_date', 'abc_type'],
+    dicts: ['sys_storage_condition', 'sys_conditions_carriage', 'sys_medicine', 'medical_instruments', 'curing_type', 'period_unit', 'expiry_date', 'abc_type','material_enable'],
     components: {
       factory,
       fourClass,

+ 12 - 0
src/views/purchase/purchase-order/add/column.js

@@ -1088,6 +1088,18 @@ const CauseTabColumns =[
     key: 'puOrderItemList',
     tableColumns: [
       { 
+        key: "customerName",
+        title: "收货客户", 
+        inputType: "PopoverSelect",
+        valueKey: "id",
+        referName: "CUSTOMER_PARAM",
+        width: 180,
+        dataMapping:{
+          customer:'id',
+          customerName:'name',
+        },
+      },
+      { 
         key: "rowNo", 
         title: "行号", 
         inputType: "Input", 

+ 47 - 43
src/views/purchase/purchase-order/add/index.vue

@@ -222,12 +222,17 @@ export default {
          
 
           "rowno" in rowData &&
-            (rowData["rowno"] = this.params[key].length + 1);
+            (rowData["rowno"] = this.params[key].length ? 
+              this.params[key][this.params[key].length - 1]['rowno'] +1 :
+               this.params[key].length + 1
+            );
 
             // 物料
             if("rowNo" in rowData){
-
-              rowData["rowNo"] = this.params[key].length + 1;
+              
+              rowData["rowNo"] = this.params[key].length ? 
+              this.params[key][this.params[key].length - 1]['rowNo'] +1 :
+               this.params[key].length + 1;
               // 扣税类别
               rowData["taxDeductClassify"] = '1';
               // 折本汇率
@@ -254,6 +259,7 @@ export default {
     // 删行
     async delTableRow(prop, index) {
 
+     
       for (const key in this.params) {
         // if (Array.isArray(this.params[key])) {
         if (key === 'puOrderItemList' || key === 'puOrderExecuteList') {
@@ -394,47 +400,45 @@ export default {
             }
           }
         ]
+        
+        try {
 
-        await relevanceRefer.forEach(async (refer) =>{
-
-          try {
-
-            const { code, rows} = await orderApi.REFER(
-              {
-                ...refer.params,
-                search: "",
-                isPage: true,
-              }, page );
-
-            if (code === 200) {
-
-              source[refer.key] = rows[0]? rows[0].id :'';
-
-              source[`${refer.key}Name`] = rows[0] ? rows[0].name :'';
-
-            }
-            
-          } catch (error) {}
-          
-        })
-
-        // 明细不为空的情况下进行询价
-        let detailList = this.params['puOrderItemList'].filter(item => (
-          item.material && item.material != '' 
-        ))
-
-        if(detailList.length){
-
-        //   this.params['puOrderItemList'] = this.params['puOrderItemList'].map(item => {
-            
-        //     item['whetherCompleteInquiry'] = false
-          
-        //     return item;
-        //   });
+          let promiseArr =  relevanceRefer.map( (refer) =>{
+
+            return new Promise((resolve,reject)=>{
+
+               orderApi.REFER(
+                {
+                  ...refer.params,
+                  search: "",
+                  isPage: true,
+                }, page ).then(res=>{
+
+                  let {code,rows} = res;
+                  if (code === 200) {
+                    
+                    source[refer.key] = rows[0]? rows[0].id :'';
+                    
+                    source[`${refer.key}Name`] = rows[0] ? rows[0].name :'';
+                    
+                    resolve();
+                  }
+              })
+            })
+          })
+
+          Promise.all(promiseArr).then(async()=>{
+            // 明细不为空的情况下进行询价
+            let detailList = this.params['puOrderItemList'].filter(item => (
+                item.material && item.material != '' 
+              ))
+              
+              if(detailList.length){
 
-          await this.handleGetPrice();
-        }
-        
+                await this.handleGetPrice();
+              }
+          })
+        } catch (error) {}
       }
 
       // 组织
@@ -1004,8 +1008,8 @@ export default {
           <el-button size="mini" @click="addTableRow(params[tabName])"
             >增行</el-button>
          
+            <!-- v-if="role === 'procurementManager'" -->
           <BatchImport
-            v-if="role === 'procurementManager'"
             ref="batchImport"
             @import="handelImport"
             @temDownload="handleTemDownload"

+ 67 - 45
src/views/purchase/purchase-order/edit/index.vue

@@ -172,11 +172,16 @@ export default {
           let rowData = initParams(arr, "key", "value");
 
           "rowno" in rowData &&
-            (rowData["rowno"] = this.params[key].length + 1);
+          (rowData["rowno"] = this.params[key].length ? 
+              this.params[key][this.params[key].length - 1]['rowno'] +1 :
+               this.params[key].length + 1
+            );
            // 物料
            if("rowNo" in rowData){
 
-              rowData["rowNo"] = this.params[key].length + 1;
+            rowData["rowNo"] = this.params[key].length ? 
+              this.params[key][this.params[key].length - 1]['rowNo'] +1 :
+               this.params[key].length + 1;
               // 扣税类别
               rowData["taxDeductClassify"] = '1';
               // 折本汇率
@@ -191,6 +196,7 @@ export default {
           // 是否完成询价,新增明细行需默认明细为false
           // rowData['whetherCompleteInquiry'] = false;
           rowData['delFlag'] = '0';
+          rowData['insertId'] = new Date().getTime();
 
           this.params[key].push(rowData);
         }
@@ -202,8 +208,8 @@ export default {
       // prop.push(initParams(arr, "key", "value"));
     },
     // 删除行
-    async delTableRow(prop, index) {
-      console.log(prop,'prop');
+    async delTableRow(prop, row) {
+      console.log(row,'row---------------');
       if(prop.length === 1){
         this.$alert('订单行不允许为空', '提示', {
           confirmButtonText: '确定',
@@ -220,10 +226,28 @@ export default {
         for (const key in this.params) {
   
           // if (Array.isArray(this.params[key])) {
+            // params[column.key].filter(item => item.delFlag === '0')
           if (key === 'puOrderItemList' || key === 'puOrderExecuteList') {
+
+            this.params[key] = this.params[key].map(item =>{
+              if(item.id && item.id === row.id){
+                console.log('删除已有ID的');
+                item['delFlag'] = '2';
+                return item;
+              }else if(item.insertId && item.insertId === row.insertId){
+                console.log('新增的');
+                return ;
+              }else{
+                return item;
+              }
+            }).filter(item2 => item2 !== undefined)
+           
+            // console.log(this.params[key]);
+            // this.params[key][index].id ? 
+            //   (this.params[key][index]['delFlag'] = '2') :
+            //   this.params[key].splice(index, 1);
   
-            this.params[key][index].id ? (this.params[key][index]['delFlag'] = '2') :this.params[key].splice(index, 1);
-  
+             
           }
         }
   
@@ -341,46 +365,44 @@ export default {
           }
         ]
 
-        await relevanceRefer.forEach(async (refer) =>{
-
-          try {
-
-            const { code, rows} = await orderApi.REFER(
-              {
-                ...refer.params,
-                search: "",
-                isPage: true,
-              }, page );
-
-            if (code === 200) {
-
-              source[refer.key] = rows[0]? rows[0].id :'';
+        try {
 
-              source[`${refer.key}Name`] = rows[0] ? rows[0].name :'';
+          let promiseArr =  relevanceRefer.map( (refer) =>{
+
+            return new Promise((resolve,reject)=>{
+
+              orderApi.REFER(
+                {
+                  ...refer.params,
+                  search: "",
+                  isPage: true,
+                }, page ).then(res=>{
+
+                  let {code,rows} = res;
+                  if (code === 200) {
+                    
+                    source[refer.key] = rows[0]? rows[0].id :'';
+                    
+                    source[`${refer.key}Name`] = rows[0] ? rows[0].name :'';
+                    
+                    resolve();
+                  }
+              })
+            })
+          })
+
+          Promise.all(promiseArr).then(async()=>{
+            // 明细不为空的情况下进行询价
+            let detailList = this.params['puOrderItemList'].filter(item => (
+                item.material && item.material != '' 
+              ))
+              
+              if(detailList.length){
 
-            }
-            
+                await this.handleGetPrice();
+              }
+          })
           } catch (error) {}
-          
-        })
-
-        // 明细不为空的情况下进行询价
-        let detailList = this.params['puOrderItemList'].filter(item => (
-          item.material && item.material != '' 
-        ))
-        
-        if(detailList.length){
-
-          // this.params['puOrderItemList'] = this.params['puOrderItemList'].map(item => {
-
-          //   item['whetherCompleteInquiry'] = false
-
-          //   return item;
-          // });
-
-          await this.handleGetPrice();
-        }
-
       
       }
 
@@ -953,7 +975,7 @@ export default {
               >
               <!-- v-if="!handleIsRevise()"  -->
                   <el-button 
-                    @click.native.prevent="delTableRow(params[tabName], scope.$index)" 
+                    @click.native.prevent="delTableRow(params[tabName], scope.row)" 
                     type="text" 
                     size="small"
                     > 删行
@@ -967,7 +989,7 @@ export default {
           <el-button v-if="params.source == '3' && !handleIsRevise()" :size="size"
             @click="addTableRow(params[tabName])">增行</el-button>
           <BatchImport
-            v-if="params.source == '3' && !handleIsRevise() && role === 'procurementManager'"
+            v-if="params.source == '3' && !handleIsRevise()"
             ref="batchImport"
             @import="handelImport"
             @temDownload="handleTemDownload"

+ 0 - 1
src/views/purchase/purchase-order/see/index.vue

@@ -361,7 +361,6 @@ export default {
                     :placeholder="cColumn.placeholder"
                     :data-mapping="cColumn.dataMapping" 
                     :query-params="cColumn.queryParams" 
-                    size="mini"
                   ></dr-popover-select>
 
                   <el-input-number v-if="cColumn.inputType === 'InputNumber'"