From e908aead856e1da187a27ae6b5f48eaf106d2acf Mon Sep 17 00:00:00 2001
From: 石广澎 <shiguangpeng@163.com>
Date: 星期六, 02 十二月 2023 20:30:13 +0800
Subject: [PATCH] fix: 库存预警编辑问题修复

---
 admin-web/src/views/stock/ledger/inventoryAlert/edit.vue |  162 +++++++++++++++++++++++++++++++----------------------
 1 files changed, 95 insertions(+), 67 deletions(-)

diff --git a/admin-web/src/views/stock/ledger/inventoryAlert/edit.vue b/admin-web/src/views/stock/ledger/inventoryAlert/edit.vue
index e23fe53..623a650 100644
--- a/admin-web/src/views/stock/ledger/inventoryAlert/edit.vue
+++ b/admin-web/src/views/stock/ledger/inventoryAlert/edit.vue
@@ -1,25 +1,28 @@
 <template>
-  <win-md :title="`${setting.title}棰勮璁剧疆`" @close="close" :width="'800px'">
+  <win-md :title="`${setting.title}棰勮璁剧疆`" @close="close" :width="'800px'" :loading="loading">
     <el-form ref="ruleForm" :model="formData" :rules="rules" class="demo-ruleForm" label-width="100px">
       <el-row :gutter="24">
         <el-col :span="12">
-          <el-form-item label="鍏ュ簱浠撳簱" prop="baseWarehouseId">
+          <el-form-item label="棰勮浠撳簱" prop="baseWarehouseId">
             <el-select
               v-model="formData.baseWarehouseId"
-              placeholder="璇烽�夋嫨"
+              placeholder="璇烽�夋嫨棰勮浠撳簱"
               style="width: 100%"
               :disabled="type == 'edit'"
             >
-              <el-option v-for="item in warehouses" :key="item.id" :label="item.warehouseName" :value="item.id" />
+              <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="baseCategoryIds">
+          <el-form-item label="鐗╁搧鍒嗙被" prop="baseCategoryId">
             <el-cascader
-              v-model="formData.baseCategoryIds"
+              v-model="formData.baseCategoryId"
               :options="categoryOptions"
-              :props="{ value: 'id' }"
+              :props="{ value: 'id',emitPath: false }"
+              :show-all-levels="false"
+              filterable
+              clearable
               @change="categoryChange"
               style="width: 100%"
               :disabled="type == 'edit'"
@@ -32,8 +35,9 @@
           <el-form-item label="鐗╁搧鍚嶇О" prop="baseGoodsTemplateId">
             <el-select
               :value="formData.baseGoodsTemplateId"
-              placeholder="璇峰厛鎷╃墿鍝佸垎绫�"
+              :placeholder="formData.baseCategoryId?'璇烽�夋嫨鐗╁搧':'璇峰厛閫夋嫨鐗╁搧鍒嗙被'"
               filterable
+              clearable
               :disabled="!formData.baseCategoryId || type == 'edit'"
               @change="goodsTemplateChange"
               style="width: 100%"
@@ -52,18 +56,20 @@
             <el-select
               v-model="formData.modelsIds"
               multiple
+              clearable
               :disabled="!formData.baseGoodsTemplateId || type == 'edit'"
-              placeholder="璇峰厛鎷╃墿鍝佸悕绉�"
+              :placeholder="formData.baseCategoryId?'璇烽�夋嫨瑙勬牸鍨嬪彿':'璇峰厛閫夋嫨鐗╁搧鍚嶇О'"
               @change="modelChange"
               @remove-tag="modelRemoveTag"
+              @clear="modelRemoveTag(-1)"
               style="width: 100%"
             >
-              <el-option v-for="item in modelsOptions" :key="item.id" :label="item.modelName" :value="item.id" />
+              <el-option v-for="item in modelsOptions" :key="item.id" :label="item.modelName" :value="item.id"/>
             </el-select>
           </el-form-item>
         </el-col>
       </el-row>
-      <el-row v-if="type == 'edit'">
+      <el-row v-if="type === 'edit'">
         <el-col :span="12">
           <el-form-item label="淇濆簳搴撳瓨" prop="lowerLimit">
             <el-input placeholder="璇疯緭鍏�" v-model.number="formData.lowerLimit"></el-input>
@@ -75,43 +81,43 @@
           </el-form-item>
         </el-col>
       </el-row>
-      <el-table v-if="type != 'edit'" :data="formData.models" :stripe="true">
+      <el-table v-else :data="formData.models" :stripe="true">
         <el-table-column prop="baseGoodsModelsId" label="瑙勬牸鍨嬪彿" align="center">
           <template slot-scope="scope">
             {{ getGoodsModelsName(scope.row.baseGoodsModelsId) }}
           </template>
         </el-table-column>
         <el-table-column prop="lowerLimit" label="淇濆簳搴撳瓨" align="center">
-          <template slot-scope="scope">
+          <template slot-scope="{row,$index}">
             <el-form-item
-              v-if="scope.row.lowerLimit || scope.row.upperLimit"
               label-width="0"
-              :prop="`models[${scope.$index}].lowerLimit`"
-              :rules="rules.lowerLimit"
+              :prop="`models.${$index}.lowerLimit`"
+              :rules="[
+                  {validator: checkCounts,type: 1, lowerLimit: row.lowerLimit,upperLimit: row.upperLimit, trigger: ['blur', 'change']}
+                ]"
             >
-              <el-input v-model.number="scope.row.lowerLimit"></el-input>
+              <el-input v-model.number="row.lowerLimit"></el-input>
             </el-form-item>
-            <el-input v-else v-model.number="scope.row.lowerLimit" style="margin-bottom: 18px;"></el-input>
           </template>
         </el-table-column>
         <el-table-column prop="upperLimit" label="灏侀《搴撳瓨" align="center">
-          <template slot-scope="scope">
+          <template slot-scope="{row,$index}">
             <el-form-item
-              v-if="scope.row.lowerLimit || scope.row.upperLimit"
               label-width="0"
-              :prop="`models[${scope.$index}].upperLimit`"
-              :rules="rules.upperLimit"
+              :prop="`models.${$index}.upperLimit`"
+              :rules="[
+                  {validator: checkCounts,type: 2, lowerLimit: row.lowerLimit,upperLimit: row.upperLimit, trigger: ['blur', 'change']}
+                ]"
             >
-              <el-input v-model.number="scope.row.upperLimit"></el-input>
+              <el-input v-model.number="row.upperLimit"></el-input>
             </el-form-item>
-            <el-input v-else v-model.number="scope.row.upperLimit" style="margin-bottom: 18px;"></el-input>
           </template>
         </el-table-column>
       </el-table>
     </el-form>
     <div slot="footer" align="center" class="dialog-footer">
-      <my-button name="鍙栨秷" site="form" @click="close" />
-      <my-button name="淇濆瓨" site="form" @click="save" />
+      <my-button name="鍙栨秷" site="form" @click="close"/>
+      <my-button name="淇濆瓨" site="form" @click="save"/>
     </div>
   </win-md>
 </template>
@@ -122,30 +128,42 @@
 import {
   getCategorySelectTree,
   goodsModel,
-  warehouseSelectNumber,
   goodsTemplate,
-  selectTenantWarehouse,
   queryGoodsModelInfo,
+  selectTenantWarehouse,
 } from '@/api/baseSetting/finsystenant';
-import {
-  warningConfigAdd,
-  warningConfigUpd,
-  warningConfigGetById,
-  warningConfigGetConfigList,
-} from '@/api/stock/ledger';
-import { mapGetters } from 'vuex';
-import { findParentIds } from '@/utils/index';
+import {warningConfigAdd, warningConfigGetById, warningConfigUpd,} from '@/api/stock/ledger';
+import {mapGetters} from 'vuex';
+import {findParentIds} from '@/utils/index';
 
 export default {
-  components: { winMd, myButton },
+  components: {winMd, myButton},
   props: {
     setting: {
       type: Object,
-      default: () => {},
+      default: () => {
+      },
     },
   },
   data() {
     return {
+      checkCounts: (rule, value, callback) => {
+        let val = rule.type === 1 ? rule.lowerLimit : rule.upperLimit
+        if (!val) {
+          return callback(new Error(rule.type === 1 ? '璇疯緭鍏ヤ繚搴曟暟閲�' : '璇疯緭鍏ュ皝椤舵暟閲�'));
+        }
+        if (!Number.isInteger(val)) {
+          return callback(new Error('璇疯緭鍏ユ暟瀛楀��'));
+        }
+        if (val < 1) {
+          return callback(new Error('鏁板瓧鍊煎繀椤诲ぇ浜�0'));
+        }
+        if (rule.lowerLimit && rule.upperLimit && rule.lowerLimit >= rule.upperLimit) {
+          return callback(new Error(rule.type === 1 ? '淇濆簳搴撳瓨蹇呴』灏忎簬灏侀《搴撳瓨' : '灏侀《搴撳瓨蹇呴』澶т簬淇濆簳搴撳瓨'));
+        }
+        callback();
+      },
+      loading: true,
       type: '',
       warehouses: [], // 鍏ュ簱浠撳簱鍒楄〃
       agencyOptions: [], // 璋冩嫧鏈烘瀯
@@ -162,16 +180,17 @@
         models: [],
       },
       rules: {
-        baseCategoryIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
-        baseGoodsTemplateId: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
-        modelsIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
+        baseWarehouseId: [{required: true, message: '璇烽�夋嫨棰勮浠撳簱', trigger: 'change'}],
+        baseCategoryId: [{required: true, message: '璇烽�夋嫨鐗╁搧鍒嗙被', trigger: 'change'}],
+        baseGoodsTemplateId: [{required: true, message: '璇烽�夋嫨鐗╁搧', trigger: 'change'}],
+        modelsIds: [{required: true, message: '璇烽�夋嫨瑙勬牸鍨嬪彿', trigger: 'change'}],
         lowerLimit: [
-          { required: true, message: '璇疯緭鍏�', trigger: 'blur' },
-          { type: 'number', message: '璇疯緭鍏ユ暟瀛楀��', trigger: 'blur' },
+          {required: true, message: '璇疯緭鍏�', trigger: 'blur'},
+          {type: 'number', message: '璇疯緭鍏ユ暟瀛楀��', trigger: 'blur'},
         ],
         upperLimit: [
-          { required: true, message: '璇疯緭鍏�', trigger: 'blur' },
-          { type: 'number', message: '璇疯緭鍏ユ暟瀛楀��', trigger: 'blur' },
+          {required: true, message: '璇疯緭鍏�', trigger: 'blur'},
+          {type: 'number', message: '璇疯緭鍏ユ暟瀛楀��', trigger: 'blur'},
         ],
       },
     };
@@ -184,29 +203,27 @@
   },
   methods: {
     async init() {
+      await this.getWarehouseList();
+      await this.getCategoryTree();
       if (this.setting.id) {
         this.type = 'edit';
-        const detail = await warningConfigGetById({ id: this.setting.id });
-        await this.getCategoryTree();
-        this.formData = Object.assign({}, detail);
+        const detail = await warningConfigGetById({id: this.setting.id});
         // 鍒嗙被鍙嶆樉
-        let res = await queryGoodsModelInfo({ baseGoodsModelsId: this.formData.baseGoodsModelsId });
-        this.formData.baseCategoryId = res[0].categoryId;
-        this.formData.baseCategoryIds = findParentIds(this.categoryOptions, this.formData.baseCategoryId);
+        let res = await queryGoodsModelInfo({baseGoodsModelsId: detail.baseGoodsModelsId});
+        detail.baseCategoryId = res[0].categoryId
         // 鐗╁搧鍚嶇О鍙嶆樉
-        this.getgoodsTemplate(this.formData.baseCategoryId);
+        this.getgoodsTemplate(detail.baseCategoryId);
         // 瑙勬牸鍨嬪彿鍙嶆樉
-        this.getgoodsModel(this.formData.baseGoodsTemplateId);
-        this.formData.modelsIds = [this.formData.baseGoodsModelsId];
+        this.getgoodsModel(detail.baseGoodsTemplateId);
+        this.formData = Object.assign({}, detail);
+        this.formData.modelsIds = [detail.baseGoodsModelsId];
         this.getWarehouseList();
-      } else {
-        this.getWarehouseList();
-        this.getCategoryTree();
       }
+      this.loading = false
     },
     // 鑾峰彇鍏ュ簱浠撳簱鍒楄〃
     getWarehouseList() {
-      selectTenantWarehouse({ agencyId: this.userInfo.tenantId })
+      selectTenantWarehouse({agencyId: this.userInfo.tenantId})
         .then((res) => {
           this.warehouses = res;
           if (this.warehouses.length && !this.formData.baseWarehouseId) {
@@ -230,14 +247,14 @@
 
     // 鑾峰彇鐗╁搧鍚嶇О鍒楄〃
     getgoodsTemplate(id) {
-      goodsTemplate({ categoryId: id || '', agencyId: this.userInfo.tenantId }).then((res) => {
+      goodsTemplate({categoryId: id || '', agencyId: this.userInfo.tenantId}).then((res) => {
         this.goodsTemplatelOptions = res;
       });
     },
 
     // 瑙勬牸鍨嬪彿
     getgoodsModel(id) {
-      goodsModel({ goodsTemplatesId: id || '' }).then((res) => {
+      goodsModel({goodsTemplatesId: id || ''}).then((res) => {
         this.modelsOptions = res;
       });
     },
@@ -253,23 +270,19 @@
 
     // 鐗╁搧鍒嗙被閫夋嫨
     categoryChange(e) {
-      if (!e) return;
       this.goodsTemplatelOptions = [];
       this.modelsOptions = [];
       this.formData.baseGoodsTemplateId = '';
       this.formData.modelsIds = [];
       this.formData.models = [];
-
-      this.formData.baseCategoryId = e[e.length - 1];
       // 鏍规嵁閫変腑鍒嗙被璇锋眰鐗╁搧鍚嶇О鍒楄〃
-      this.getgoodsTemplate(this.formData.baseCategoryId);
+      this.getgoodsTemplate(e);
     },
 
     // 鐗╁搧鍚嶇О鍒楄〃閫夋嫨
     goodsTemplateChange(e) {
       this.formData.modelsIds = [];
       this.formData.models = [];
-
       this.formData.baseGoodsTemplateId = e;
       // 鏍规嵁閫変腑鐗╁搧鍚嶇Оid鑾峰彇瑙勬牸鍨嬪彿鍒楄〃
       this.getgoodsModel(e);
@@ -292,24 +305,31 @@
       let str = JSON.stringify(arr);
       e.forEach((item, index) => {
         if (str && !str.includes(item)) {
-          arr.push({ baseGoodsModelsId: item, lowerLimit: null, upperLimit: null });
+          arr.push({baseGoodsModelsId: item, lowerLimit: null, upperLimit: null});
         }
       });
     },
 
     // 瑙勬牸鍨嬪彿绉婚櫎
     modelRemoveTag(e) {
+      if (e === -1) {
+        this.formData.models = []
+        return
+      }
       let delIndex = this.formData.models.findIndex((v) => v.baseGoodsModelsId == e);
       this.formData.models.splice(delIndex, 1);
     },
 
-    getEditInfo(id) {},
+    getEditInfo(id) {
+    },
     close() {
       this.$emit('close');
     },
     save() {
       this.$refs.ruleForm.validate((valid) => {
         if (valid) {
+          if (this.loading) return
+          this.loading = true;
           if (this.setting.id) {
             // 缂栬緫鎺ュ彛
             const params = {
@@ -318,9 +338,13 @@
               upperLimit: this.formData.upperLimit,
             };
             warningConfigUpd(params).then((res) => {
+              this.loading = false;
               this.$message.success('淇濆瓨鎴愬姛锛�');
               this.close();
               this.$emit('search');
+            }).catch((err) => {
+              this.loading = false;
+              this.$message.error('淇濆瓨澶辫触');
             });
           } else {
             const params = {
@@ -330,9 +354,13 @@
               modelConfigStr: JSON.stringify(this.formData.models),
             };
             warningConfigAdd(params).then((res) => {
+              this.loading = false;
               this.$message.success('淇濆瓨鎴愬姛锛�');
               this.close();
               this.$emit('search');
+            }).catch((err) => {
+              this.loading = false;
+              this.$message.error('淇濆瓨澶辫触');
             });
           }
         } else {

--
Gitblit v1.9.1