From 9497f101126c9f03dbd7917a3396696bdac6998c Mon Sep 17 00:00:00 2001
From: 石广澎 <shiguangpeng@163.com>
Date: 星期五, 01 十二月 2023 10:56:43 +0800
Subject: [PATCH] feat: 部门物品 报废

---
 admin-web/src/views/stock/procure/purchaseOrder/edit.vue |  301 ++++++++++++++++++++++++++-----------------------
 1 files changed, 158 insertions(+), 143 deletions(-)

diff --git a/admin-web/src/views/stock/procure/purchaseOrder/edit.vue b/admin-web/src/views/stock/procure/purchaseOrder/edit.vue
index e5afac4..2726c9a 100644
--- a/admin-web/src/views/stock/procure/purchaseOrder/edit.vue
+++ b/admin-web/src/views/stock/procure/purchaseOrder/edit.vue
@@ -1,24 +1,25 @@
 <template>
   <win-md class="stock-edit" :title="`${setting.title}閲囪喘鍏ュ簱`" @close="close" :width="'800px'" :loading="loading">
-    <el-form class="form" ref="ruleForm" :model="formData" :rules="rules" label-width="120px">
+    <el-form v-loading="loading" class="form" ref="ruleForm" :model="formData" :rules="rules" label-width="120px">
       <div class="main-w">
         <el-row :gutter="24" class="headerHeight">
           <el-col :span="12">
             <el-form-item label="鍏ュ簱浠撳簱" prop="warehouseId">
-              <el-select v-model="formData.warehouseId" placeholder="璇烽�夋嫨" style="width: 100%">
-                <el-option v-for="item in warehouses" :key="item.id" :label="item.warehouseName" :value="item.id" />
+              <el-select v-model="formData.warehouseId" placeholder="璇烽�夋嫨" clearable style="width: 100%">
+                <el-option v-for="item in warehouses" :key="item.id" :label="item.warehouseName" :value="item.id"/>
               </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="閲囪喘鏃堕棿" prop="procureTime">
               <el-date-picker
-                v-model="formData.procureTime"
-                type="datetime"
-                value="yyyy-MM-dd HH:mm:ss"
-                value-format="yyyyMMddHHmmss"
-                placeholder="璇烽�夋嫨鏃ユ湡"
-                style="width: 100%"
+                  v-model="formData.procureTime"
+                  type="datetime"
+                  clearable
+                  value="yyyy-MM-dd HH:mm:ss"
+                  value-format="yyyyMMddHHmmss"
+                  placeholder="璇烽�夋嫨鏃ユ湡"
+                  style="width: 100%"
               >
               </el-date-picker>
             </el-form-item>
@@ -28,7 +29,7 @@
           <el-col :span="12">
             <el-form-item label="閲囪喘绫诲瀷" prop="buyType">
               <el-select v-model="formData.buyType" placeholder="璇烽�夋嫨" style="width: 100%">
-                <el-option v-for="item in buyTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
+                <el-option v-for="item in buyTypeOptions" :key="item.value" :label="item.label" :value="item.value"/>
               </el-select>
             </el-form-item>
           </el-col>
@@ -44,42 +45,46 @@
           <el-row :gutter="24">
             <el-col :span="12">
               <el-form-item
-                label="鐗╁搧鍒嗙被"
-                :prop="`procureGoods[${goodsIndex}].baseCategoryIds`"
-                :rules="{
+                  label="鐗╁搧鍒嗙被"
+                  :prop="`procureGoods.${goodsIndex}.baseCategoryId`"
+                  :rules="{
                   required: true,
-                  message: '璇烽�夋嫨',
+                  message: '璇烽�夋嫨鐗╁搧鍒嗙被',
                   trigger: 'change',
                 }"
               >
                 <el-cascader
-                  v-model="goodsItem.baseCategoryIds"
-                  :options="categoryOptions"
-                  :props="{ value: 'id' }"
-                  @change="categoryChange($event, goodsIndex)"
-                  style="width: 100%"
+                    v-model="goodsItem.baseCategoryId"
+                    :options="categoryOptions"
+                    :props="{ value: 'id',emitPath: false }"
+                    :show-all-levels="false"
+                    filterable
+                    clearable
+                    @change="categoryChange($event, goodsIndex)"
+                    style="width: 100%"
                 ></el-cascader>
               </el-form-item>
             </el-col>
             <el-col :span="12">
               <el-form-item
-                label="鐗╁搧鍚嶇О"
-                :prop="`procureGoods[${goodsIndex}].baseGoodsTemplateId`"
-                :rules="rules.baseGoodsTemplateId"
+                  label="鐗╁搧鍚嶇О"
+                  :prop="`procureGoods.${goodsIndex}.baseGoodsTemplateId`"
+                  :rules="rules.baseGoodsTemplateId"
               >
                 <el-select
-                  v-model="goodsItem.baseGoodsTemplateId"
-                  placeholder="璇峰厛鎷╃墿鍝佸垎绫�"
-                  filterable
-                  :disabled="!goodsItem.baseCategoryId"
-                  style="width: 100%"
-                  @change="goodsTemplateChange($event, goodsIndex)"
+                    v-model="goodsItem.baseGoodsTemplateId"
+                    :placeholder="goodsItem.baseCategoryId?'璇烽�夋嫨鐗╁搧':'璇峰厛閫夋嫨鐗╁搧鍒嗙被'"
+                    filterable
+                    clearable
+                    :disabled="!goodsItem.baseCategoryId"
+                    style="width: 100%"
+                    @change="goodsTemplateChange($event, goodsIndex)"
                 >
                   <el-option
-                    v-for="item in goodsItem.goodsOptions"
-                    :key="item.id"
-                    :label="item.goodsName"
-                    :value="item.id"
+                      v-for="item in goodsItem.goodsOptions"
+                      :key="item.id"
+                      :label="item.goodsName"
+                      :value="item.id"
                   />
                 </el-select>
               </el-form-item>
@@ -88,35 +93,37 @@
           <el-row :gutter="24">
             <el-col :span="12">
               <el-form-item
-                label="瑙勬牸鍨嬪彿"
-                :prop="`procureGoods[${goodsIndex}].modelsIds`"
-                :rules="{
+                  label="瑙勬牸鍨嬪彿"
+                  :prop="`procureGoods.${goodsIndex}.modelsIds`"
+                  :rules="{
                   required: true,
-                  message: '璇烽�夋嫨',
+                  message: '璇烽�夋嫨瑙勬牸鍨嬪彿',
                   trigger: 'change',
                 }"
               >
                 <el-select
-                  v-model="goodsItem.modelsIds"
-                  multiple
-                  placeholder="璇峰厛鎷╃墿鍝佸悕绉�"
-                  :disabled="!goodsItem.baseCategoryId"
-                  @change="modelChange($event, goodsIndex)"
-                  @remove-tag="modelRemoveTag($event, goodsIndex)"
-                  style="width: 100%"
+                    v-model="goodsItem.modelsIds"
+                    multiple
+                    clearable
+                    :placeholder="goodsItem.baseGoodsTemplateId?'璇烽�夋嫨瑙勬牸鍨嬪彿':'璇峰厛閫夋嫨鐗╁搧鍚嶇О'"
+                    :disabled="!goodsItem.baseGoodsTemplateId"
+                    @change="modelChange($event, goodsIndex)"
+                    @remove-tag="modelRemoveTag($event, goodsIndex)"
+                    @clear="modelRemoveTag(-1, goodsIndex)"
+                    style="width: 100%"
                 >
                   <el-option
-                    v-for="item in goodsItem.modelsOptions"
-                    :key="item.id"
-                    :label="item.modelName"
-                    :value="item.id"
+                      v-for="item in goodsItem.modelsOptions"
+                      :key="item.id"
+                      :label="item.modelName"
+                      :value="item.id"
                   />
                 </el-select>
               </el-form-item>
             </el-col>
             <el-col :span="12">
               <el-form-item label="渚涜揣鍟�" prop="supplier">
-                <el-input v-model="goodsItem.supplier" clearable maxlength="20" show-word-limit />
+                <el-input v-model="goodsItem.supplier" clearable maxlength="20" show-word-limit/>
               </el-form-item>
             </el-col>
           </el-row>
@@ -134,15 +141,15 @@
             <el-table-column prop="priceYuan" label="鍗曚环锛堝厓锛�" align="center">
               <template slot-scope="scope">
                 <el-form-item
-                  label-width="0"
-                  style="margin-bottom: 0"
-                  :prop="`procureGoods[${goodsIndex}].models[${scope.$index}].priceYuan`"
-                  :rules="rules.priceYuan"
+                    label-width="0"
+                    style="margin-bottom: 0"
+                    :prop="`procureGoods[${goodsIndex}].models[${scope.$index}].priceYuan`"
+                    :rules="rules.priceYuan"
                 >
                   <el-input
-                    type="number"
-                    v-model.number="scope.row.priceYuan"
-                    @change="priceChange($event, goodsIndex, scope.$index)"
+                      type="number"
+                      v-model.number="scope.row.priceYuan"
+                      @change="priceChange($event, goodsIndex, scope.$index)"
                   ></el-input>
                 </el-form-item>
               </template>
@@ -150,10 +157,10 @@
             <el-table-column prop="counts" label="閲囪喘鏁伴噺" align="center">
               <template slot-scope="scope">
                 <el-form-item
-                  label-width="0"
-                  style="margin-bottom: 0"
-                  :prop="`procureGoods[${goodsIndex}].models[${scope.$index}].counts`"
-                  :rules="rules.counts"
+                    label-width="0"
+                    style="margin-bottom: 0"
+                    :prop="`procureGoods[${goodsIndex}].models[${scope.$index}].counts`"
+                    :rules="rules.counts"
                 >
                   <el-input v-model.number="scope.row.counts"></el-input>
                 </el-form-item>
@@ -162,56 +169,59 @@
           </el-table>
           <div class="btn-group">
             <el-button
-              v-if="formData.procureGoods.length > 1"
-              name="绉婚櫎"
-              type="danger"
-              plain
-              size="mini"
-              @click="removeGoods(goodsIndex)"
-              >绉婚櫎</el-button
+                v-if="formData.procureGoods.length > 1"
+                name="绉婚櫎"
+                type="danger"
+                plain
+                size="mini"
+                @click="removeGoods(goodsIndex)"
+            >绉婚櫎
+            </el-button
             >
             <el-button
-              v-if="formData.procureGoods.length - 1 == goodsIndex"
-              name="鏂板鐗╁搧"
-              type="primary"
-              plain
-              size="mini"
-              @click="addGoods"
-              >鏂板鐗╁搧</el-button
+                v-if="formData.procureGoods.length - 1 == goodsIndex"
+                name="鏂板鐗╁搧"
+                type="primary"
+                plain
+                size="mini"
+                @click="addGoods"
+            >鏂板鐗╁搧
+            </el-button
             >
           </div>
         </div>
       </div>
     </el-form>
     <div slot="footer" align="center" class="dialog-footer">
-      <my-button name="鍙栨秷" site="form" @click="close" />
-      <my-button name="淇濆瓨" site="form" @click="handleSubmit" />
+      <my-button name="鍙栨秷" site="form" @click="close"/>
+      <my-button name="淇濆瓨" site="form" @click="handleSubmit"/>
     </div>
   </win-md>
 </template>
 <script>
 import {
+  goodsModel,
   goodsTemplate,
   procureAdd,
+  procureDetail,
   procureEdit,
   selectTenantWarehouse,
-  goodsModel,
-  procureDetail,
 } from '@/api/stock/procure/purchaseOrder';
-import { getTree } from '@/api/foudation/classification';
+import {getTree} from '@/api/foudation/classification';
 import MyButton from '@/components/myButton/myButton';
 import winMd from '@/components/win/win-md';
 import upload from '@/components/upload/index';
-import { getUploadUrl, getDownUrl } from '@/utils/base';
-import { findParentIds } from '@/utils/index';
-import { mapGetters } from 'vuex';
+import {getUploadUrl} from '@/utils/base';
+import {findParentIds} from '@/utils/index';
+import {mapGetters} from 'vuex';
 
 export default {
-  components: { MyButton, winMd, upload },
+  components: {MyButton, winMd, upload},
   props: {
     setting: {
       type: Object,
-      default: () => {},
+      default: () => {
+      },
     },
   },
   data() {
@@ -296,16 +306,16 @@
         unit: null, //鍗曚綅
       },
       rules: {
-        warehouseId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
-        procureTime: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
-        buyType: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
+        warehouseId: [{required: true, message: '璇烽�夋嫨', trigger: 'change'}],
+        procureTime: [{required: true, message: '璇烽�夋嫨', trigger: 'change'}],
+        buyType: [{required: true, message: '璇烽�夋嫨', trigger: 'change'}],
 
-        procureDoc: [{ required: true, message: '璇蜂笂浼�', trigger: 'change' }],
-        baseCategoryIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
-        baseGoodsTemplateId: [{ validator: checkGoodsTemplateId, trigger: ['blur', 'change'] }],
-        modelsIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
-        priceYuan: [{ validator: checkPrice, trigger: 'blur' }],
-        counts: [{ validator: checkCounts, trigger: 'blur' }],
+        procureDoc: [{required: true, message: '璇蜂笂浼�', trigger: 'change'}],
+        baseCategoryIds: [{required: true, message: '璇烽�夋嫨', trigger: 'change'}],
+        baseGoodsTemplateId: [{required: true, message: '璇烽�夋嫨', trigger: 'change'},{validator: checkGoodsTemplateId, trigger: ['blur', 'change']}],
+        modelsIds: [{required: true, message: '璇烽�夋嫨', trigger: 'change'}],
+        priceYuan: [{validator: checkPrice, trigger: 'blur'}],
+        counts: [{validator: checkCounts, trigger: 'blur'}],
       },
 
       uploadSettings: {
@@ -328,31 +338,32 @@
   },
   methods: {
     async init() {
-      this.getWarehouseList();
-      this.getgoodsTemplate();
-      this.getgoodsModel();
+      await this.getWarehouseList();
+      await this.getgoodsTemplate();
+      await this.getgoodsModel();
+
       // 鑾峰彇鐗╁搧鍒嗙被鍒楄〃
       const treeRes = await getTree();
       this.categoryOptions = this.removeEmptyChildren(treeRes);
       if (this.setting.id) {
-        const detail = await procureDetail({ id: this.setting.id });
+        const detail = await procureDetail({id: this.setting.id});
         this.formData = Object.assign(this.formData, detail);
         if (this.formData.procureDoc) {
           this.fileList = JSON.parse(this.formData.procureDoc);
         }
         this.$set(this.formData, 'buyType', this.formData.buyType.toString());
         this.formData.procureTime = this.formData.procureTime.toString();
-        this.formData.procureGoods.map((item, index) => {
+        this.formData.procureGoods.map(async (item, index) => {
           // 鏍规嵁瀛愰泦ID鎷兼帴鐗╁搧鍒嗙被鍒楄〃
           item.baseCategoryIds = findParentIds(this.categoryOptions, item.baseCategoryId);
           this.$set(
-            this.formData.procureGoods[index],
-            'modelsIds',
-            item.models.map((v) => v.baseGoodsModelsId),
+              this.formData.procureGoods[index],
+              'modelsIds',
+              item.models.map((v) => v.baseGoodsModelsId),
           );
-          this.getgoodsTemplate(item.baseCategoryId, index);
-          this.getgoodsModel(item.baseGoodsTemplateId, index);
-          item.models.forEach((child, childIndex) => {
+          await this.getgoodsTemplate(item.baseCategoryId, index);
+          await this.getgoodsModel(item.baseGoodsTemplateId, index);
+          await item.models.forEach((child, childIndex) => {
             this.$set(this.formData.procureGoods[index].models[childIndex], 'priceYuan', child.price / 100);
           });
           return item;
@@ -362,21 +373,21 @@
     },
 
     // 鑾峰彇鍏ュ簱浠撳簱鍒楄〃
-    getWarehouseList() {
-      selectTenantWarehouse({ agencyId: this.userInfo.tenantId })
-        .then((res) => {
-          this.warehouses = res;
-          if (!this.setting.id && res.length) {
-            this.formData.procureGoods.push(JSON.parse(JSON.stringify(this.goodsItem)));
-          }
-          if (this.warehouses.length && !this.formData.warehouseId) {
-            // 榛樿閫変腑绗竴涓粨搴�
-            this.formData.warehouseId = this.warehouses[0].id;
-          }
-        })
-        .catch((err) => {
-          console.log('err', err);
-        });
+    async getWarehouseList() {
+      await selectTenantWarehouse({agencyId: this.userInfo.tenantId})
+          .then((res) => {
+            this.warehouses = res;
+            if (!this.setting.id && res.length) {
+              this.formData.procureGoods.push(JSON.parse(JSON.stringify(this.goodsItem)));
+            }
+            if (this.warehouses.length && !this.formData.warehouseId) {
+              // 榛樿閫変腑绗竴涓粨搴�
+              this.formData.warehouseId = this.warehouses[0].id;
+            }
+          })
+          .catch((err) => {
+            console.log('err', err);
+          });
     },
 
     removeEmptyChildren(arr) {
@@ -391,8 +402,8 @@
     },
 
     // 鑾峰彇鐗╁搧鍚嶇О鍒楄〃
-    getgoodsTemplate(id, index) {
-      goodsTemplate({ categoryId: id || '' }).then((res) => {
+    async getgoodsTemplate(id, index) {
+      await goodsTemplate({agencyId: this.userInfo.tenantId, categoryId: id || ''}).then((res) => {
         if (index || index == 0) {
           this.$set(this.formData.procureGoods[index], 'goodsOptions', res);
         } else {
@@ -402,8 +413,8 @@
     },
 
     // 瑙勬牸鍨嬪彿
-    getgoodsModel(id, index) {
-      goodsModel({ goodsTemplatesId: id || '' }).then((res) => {
+    async getgoodsModel(id, index) {
+      await goodsModel({goodsTemplatesId: id || ''}).then((res) => {
         if (index || index == 0) {
           this.$set(this.formData.procureGoods[index], 'modelsOptions', res);
         } else {
@@ -439,9 +450,8 @@
       this.formData.procureGoods[index].modelsIds = [];
       this.formData.procureGoods[index].models = [];
 
-      this.formData.procureGoods[index].baseCategoryId = e[e.length - 1];
       // 鏍规嵁閫変腑鍒嗙被璇锋眰鐗╁搧鍚嶇О鍒楄〃
-      this.getgoodsTemplate(e[e.length - 1], index);
+      this.getgoodsTemplate(e, index);
     },
 
     // 鐗╁搧鍚嶇О鍒楄〃
@@ -462,7 +472,7 @@
       e.forEach((item) => {
         if (str.indexOf(item) == -1) {
           let temp = this.goodsModelAll.find((v) => v.id == item);
-          arr.push({ ...this.modelsItem, baseGoodsModelsId: item, unit: temp.unit });
+          arr.push({...this.modelsItem, baseGoodsModelsId: item, unit: temp.unit});
         }
       });
       this.formData.procureGoods[index].models = arr;
@@ -470,6 +480,10 @@
 
     // 瑙勬牸鍨嬪彿绉婚櫎
     modelRemoveTag(e, index) {
+      if(e===-1){
+        this.formData.procureGoods[index].models = []
+        return
+      }
       let arr = this.formData.procureGoods[index].models;
       let delIndex = arr.findIndex((v) => v.baseGoodsModelsId == e);
       this.formData.procureGoods[index].models.splice(delIndex, 1);
@@ -500,29 +514,30 @@
     handleSubmit() {
       this.$refs['ruleForm'].validate((valid) => {
         if (valid) {
+          if (this.loading) return
           this.loading = true;
           if (!this.setting.id) {
             procureAdd(this.formData)
-              .then((res) => {
-                this.$message.success('淇濆瓨鎴愬姛锛�');
-                this.close();
-                this.$emit('search');
-              })
-              .catch((err) => {
-                this.loading = false;
-                this.$message.error('淇濆瓨澶辫触');
-              });
+                .then((res) => {
+                  this.$message.success('淇濆瓨鎴愬姛锛�');
+                  this.close();
+                  this.$emit('search');
+                })
+                .catch((err) => {
+                  this.loading = false;
+                  this.$message.error('淇濆瓨澶辫触');
+                });
           } else {
             procureEdit(this.formData)
-              .then((res) => {
-                this.$message.success('淇濆瓨鎴愬姛锛�');
-                this.close();
-                this.$emit('search');
-              })
-              .catch((err) => {
-                this.loading = false;
-                this.$message.error('淇濆瓨澶辫触');
-              });
+                .then((res) => {
+                  this.$message.success('淇濆瓨鎴愬姛锛�');
+                  this.close();
+                  this.$emit('search');
+                })
+                .catch((err) => {
+                  this.loading = false;
+                  this.$message.error('淇濆瓨澶辫触');
+                });
           }
         } else {
           this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��');

--
Gitblit v1.9.1