From 13b0bad30ef1df53492cbab1c1b99dfc02dee63f Mon Sep 17 00:00:00 2001
From: haoyahui <2032914783@qq.com>
Date: 星期二, 21 十一月 2023 17:51:16 +0800
Subject: [PATCH] 台账管理,盘点任务开发

---
 admin-web/src/views/stock/ledger/inventoryAlert/edit.vue |  283 ++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 193 insertions(+), 90 deletions(-)

diff --git a/admin-web/src/views/stock/ledger/inventoryAlert/edit.vue b/admin-web/src/views/stock/ledger/inventoryAlert/edit.vue
index 93fcd42..18be030 100644
--- a/admin-web/src/views/stock/ledger/inventoryAlert/edit.vue
+++ b/admin-web/src/views/stock/ledger/inventoryAlert/edit.vue
@@ -3,54 +3,108 @@
     <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="鐗╁搧鍒嗙被">
+          <el-form-item label="鍏ュ簱浠撳簱" prop="baseWarehouseId">
+            <el-select
+              v-model="formData.baseWarehouseId"
+              placeholder="璇烽�夋嫨"
+              style="width: 100%"
+              :disabled="type == 'edit'"
+            >
+              <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-cascader
               v-model="formData.baseCategoryIds"
               :options="categoryOptions"
               :props="{ value: 'id' }"
+              @change="categoryChange"
               style="width: 100%"
+              :disabled="type == 'edit'"
             ></el-cascader>
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="鐗╁搧鍚嶇О">
-            <el-select
-              :value="formData.baseGoodsTemplateId"
-              placeholder="璇峰厛鎷╃墿鍝佸垎绫�"
-              filterable
-              style="width: 100%"
-            >
-              <el-option v-for="item in goodsTemplatelAll" :key="item.id" :label="item.goodsName" :value="item.id" />
-            </el-select>
           </el-form-item>
         </el-col>
       </el-row>
       <el-row :gutter="24">
         <el-col :span="12">
-          <el-form-item label="瑙勬牸鍨嬪彿">
+          <el-form-item label="鐗╁搧鍚嶇О" prop="baseGoodsTemplateId">
+            <el-select
+              :value="formData.baseGoodsTemplateId"
+              placeholder="璇峰厛鎷╃墿鍝佸垎绫�"
+              filterable
+              :disabled="!formData.baseCategoryId || type == 'edit'"
+              @change="goodsTemplateChange"
+              style="width: 100%"
+            >
+              <el-option
+                v-for="item in goodsTemplatelOptions"
+                :key="item.id"
+                :label="item.goodsName"
+                :value="item.id"
+              />
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="瑙勬牸鍨嬪彿" prop="modelsIds">
             <el-select
               v-model="formData.modelsIds"
               multiple
+              :disabled="!formData.baseGoodsTemplateId || type == 'edit'"
               placeholder="璇峰厛鎷╃墿鍝佸悕绉�"
-              @change="modelChange($event)"
-              @remove-tag="modelRemoveTag($event)"
+              @change="modelChange"
+              @remove-tag="modelRemoveTag"
               style="width: 100%"
             >
-              <el-option v-for="item in goodsModelAll" :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-table :data="formData.models" :stripe="true">
-        <el-table-column prop="baseGoodsModelsId" label="瑙勬牸鍨嬪彿" align="center"> </el-table-column>
-        <el-table-column prop="bdcount" label="淇濆簳搴撳瓨" align="center">
+      <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>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="灏侀《搴撳瓨" prop="upperLimit">
+            <el-input placeholder="璇疯緭鍏�" v-model.number="formData.upperLimit"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-table v-if="type != 'edit'" :data="formData.models" :stripe="true">
+        <el-table-column prop="baseGoodsModelsId" label="瑙勬牸鍨嬪彿" align="center">
           <template slot-scope="scope">
-            <el-input v-model="scope.row.bdcount"></el-input>
+            {{ getGoodsModelsName(scope.row.baseGoodsModelsId) }}
           </template>
         </el-table-column>
-        <el-table-column prop="count" label="灏侀《搴撳瓨" align="center">
+        <el-table-column prop="lowerLimit" label="淇濆簳搴撳瓨" align="center">
           <template slot-scope="scope">
-            <el-input v-model="scope.row.count"></el-input>
+            <el-form-item
+              v-if="scope.row.lowerLimit || scope.row.upperLimit"
+              label-width="0"
+              :prop="`models[${scope.$index}].lowerLimit`"
+              :rules="rules.lowerLimit"
+            >
+              <el-input v-model.number="scope.row.lowerLimit"></el-input>
+            </el-form-item>
+            <el-input v-else v-model.number="scope.row.lowerLimit"></el-input>
+          </template>
+        </el-table-column>
+        <el-table-column prop="upperLimit" label="灏侀《搴撳瓨" align="center">
+          <template slot-scope="scope">
+            <el-form-item
+              v-if="scope.row.lowerLimit || scope.row.upperLimit"
+              label-width="0"
+              :prop="`models[${scope.$index}].upperLimit`"
+              :rules="rules.upperLimit"
+            >
+              <el-input v-model.number="scope.row.upperLimit"></el-input>
+            </el-form-item>
+            <el-input v-else v-model.number="scope.row.upperLimit"></el-input>
           </template>
         </el-table-column>
       </el-table>
@@ -65,13 +119,22 @@
 <script>
 import winMd from '@/components/win/win-md';
 import myButton from '@/components/myButton/myButton';
-import * as finsystenant from '@/api/baseSetting/finsystenant';
 import {
   getCategorySelectTree,
   goodsModel,
   warehouseSelectNumber,
   goodsTemplate,
+  selectTenantWarehouse,
+  queryGoodsModelInfo,
 } from '@/api/baseSetting/finsystenant';
+import {
+  warningConfigAdd,
+  warningConfigUpd,
+  warningConfigGetById,
+  warningConfigGetConfigList,
+} from '@/api/stock/ledger';
+import { mapGetters } from 'vuex';
+import { findParentIds } from '@/utils/index';
 
 export default {
   components: { winMd, myButton },
@@ -83,92 +146,133 @@
   },
   data() {
     return {
+      type: '',
+      warehouses: [], // 鍏ュ簱浠撳簱鍒楄〃
       agencyOptions: [], // 璋冩嫧鏈烘瀯
       categoryOptions: [], // 鐗╁搧鍒嗙被鍒楄〃
-      modelList: [], //鍨嬪彿鍒楄〃
+      goodsTemplatelOptions: [], //鐗╁搧鍚嶇О
+      modelsOptions: [], //鍨嬪彿鍒楄〃
       formData: {
+        warehouseType: 0, //浠撳簱绫诲瀷0鏈烘瀯1閮ㄩ棬
+        baseWarehouseId: '', //浠撳簱缂栧彿
         baseCategoryIds: '', // 鍒嗙被缂栧彿鏁扮粍
         baseCategoryId: '', // 鍒嗙被缂栧彿
-        baseGoodsTemplateId: '', // 鐗╁搧妯$増缂栧彿
+        baseGoodsTemplateId: '', // 鐗╁搧鍚嶇О妯$増缂栧彿
         modelsIds: [], //瑙勬牸鍨嬪彿
         models: [],
       },
-      modelsItem: {
-        baseGoodsModelsId: '', // 瑙勬牸鍨嬪彿缂栧彿
-        worehouseCount: 0,
-        counts: 0, // 鎿嶄綔鏁伴噺
-      },
       rules: {
-        code: [{ required: true, message: '璇疯緭鍏ユ満鏋勭紪鍙�', trigger: 'blur' }],
-        name: [{ required: true, message: '璇疯緭鍏ユ満鏋勫悕绉�', trigger: 'blur' }],
-        status: [{ required: true, message: '璇烽�夋嫨鐘舵��', trigger: 'blur' }],
+        baseCategoryIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
+        baseGoodsTemplateId: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
+        modelsIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
+        lowerLimit: [
+          { required: true, message: '璇疯緭鍏�', trigger: 'blur' },
+          { type: 'number', message: '璇疯緭鍏ユ暟瀛楀��', trigger: 'blur' },
+        ],
+        upperLimit: [
+          { required: true, message: '璇疯緭鍏�', trigger: 'blur' },
+          { type: 'number', message: '璇疯緭鍏ユ暟瀛楀��', trigger: 'blur' },
+        ],
       },
     };
   },
+  computed: {
+    ...mapGetters(['userInfo']),
+  },
   created() {
-    if (this.setting.info) {
-      this.formData = Object.assign({}, JSON.parse(this.setting.info));
-    }
     this.init();
   },
   methods: {
     async init() {
-      this.getCategoryTree();
-      this.getgoodsTemplate();
-      this.getgoodsModel();
+      if (this.setting.id) {
+        this.type = 'edit';
+        const detail = await warningConfigGetById({ id: this.setting.id });
+        await this.getCategoryTree();
+        this.formData = Object.assign({}, detail);
+        // 鍒嗙被鍙嶆樉
+        let res = await queryGoodsModelInfo({ baseGoodsModelsId: this.formData.baseGoodsModelsId });
+        this.formData.baseCategoryId = res[0].categoryId;
+        this.formData.baseCategoryIds = findParentIds(this.categoryOptions, this.formData.baseCategoryId);
+        // 鐗╁搧鍚嶇О鍙嶆樉
+        this.getgoodsTemplate(this.formData.baseCategoryId);
+        // 瑙勬牸鍨嬪彿鍙嶆樉
+        this.getgoodsModel(this.formData.baseGoodsTemplateId);
+        this.formData.modelsIds = [this.formData.baseGoodsModelsId];
+        this.getWarehouseList();
+      } else {
+        this.getWarehouseList();
+        this.getCategoryTree();
+      }
+    },
+    // 鑾峰彇鍏ュ簱浠撳簱鍒楄〃
+    getWarehouseList() {
+      selectTenantWarehouse({ agencyId: this.userInfo.tenantId })
+        .then((res) => {
+          this.warehouses = res;
+          if (this.warehouses.length && !this.formData.baseWarehouseId) {
+            // 榛樿閫変腑绗竴涓粨搴�
+            this.formData.baseWarehouseId = this.warehouses[0].id;
+          }
+        })
+        .catch((err) => {
+          console.log('err', err);
+        });
     },
 
-    async getCategoryTree() {
+    getCategoryTree() {
       // 鑾峰彇鐗╁搧鍒嗙被鍒楄〃
-      const treeRes = await getCategorySelectTree();
-      this.categoryOptions = this.removeEmptyChildren(treeRes);
-      console.log('categoryOptions', this.categoryOptions);
+      return new Promise(async (resolve) => {
+        const treeRes = await getCategorySelectTree();
+        this.categoryOptions = this.removeEmptyChildren(treeRes);
+        resolve();
+      });
     },
 
     // 鑾峰彇鐗╁搧鍚嶇О鍒楄〃
     getgoodsTemplate(id) {
-      goodsTemplate({ categoryId: id || '', agencyId: this.formData.outAgencyId }).then((res) => {
-        this.goodsTemplatelAll = res;
+      goodsTemplate({ categoryId: id || '', agencyId: this.userInfo.tenantId }).then((res) => {
+        this.goodsTemplatelOptions = res;
       });
     },
 
     // 瑙勬牸鍨嬪彿
     getgoodsModel(id) {
       goodsModel({ goodsTemplatesId: id || '' }).then((res) => {
-        this.goodsModelAll = res;
+        this.modelsOptions = res;
       });
+    },
+
+    // 鏍规嵁瑙勬牸鍨嬪彿id鑾峰彇鍚嶅瓧
+    getGoodsModelsName(id) {
+      let item = this.modelsOptions.find((v) => v.id == id);
+      if (item) {
+        return item.modelName;
+      }
+      return;
     },
 
     // 鐗╁搧鍒嗙被閫夋嫨
     categoryChange(e) {
-      this.formData.goodsOptions = [];
+      if (!e) return;
+      this.goodsTemplatelOptions = [];
+      this.modelsOptions = [];
       this.formData.baseGoodsTemplateId = '';
-      this.formData.goodsTemplateName = '';
-      this.formData.modelsOptions = [];
       this.formData.modelsIds = [];
       this.formData.models = [];
 
-      this.formData.transferGoods.baseCategoryId = e[e.length - 1];
+      this.formData.baseCategoryId = e[e.length - 1];
       // 鏍规嵁閫変腑鍒嗙被璇锋眰鐗╁搧鍚嶇О鍒楄〃
-      this.getgoodsTemplate(e[e.length - 1]);
+      this.getgoodsTemplate(this.formData.baseCategoryId);
     },
 
     // 鐗╁搧鍚嶇О鍒楄〃閫夋嫨
-    goodsTemplateChange(e, index) {
-      let temp = this.formData.transferGoods.find((v) => v.baseGoodsTemplateId == e);
-      if (temp) {
-        this.$message.warning('宸查�夎繃姝ょ墿鍝�');
-        return;
-      } else {
-        this.formData.transferGoods[index].baseGoodsTemplateId = e;
-      }
-      this.formData.transferGoods[index].modelsOptions = [];
-      this.formData.transferGoods[index].modelsIds = [];
-      this.formData.transferGoods[index].models = [];
+    goodsTemplateChange(e) {
+      this.formData.modelsIds = [];
+      this.formData.models = [];
 
-      this.formData.transferGoods[index].goodsTemplateName = this.getGoodsTemplateName(e);
+      this.formData.baseGoodsTemplateId = e;
       // 鏍规嵁閫変腑鐗╁搧鍚嶇Оid鑾峰彇瑙勬牸鍨嬪彿鍒楄〃
-      this.getgoodsModel(e, index);
+      this.getgoodsModel(e);
     },
 
     removeEmptyChildren(arr) {
@@ -184,20 +288,18 @@
 
     // 瑙勬牸鍨嬪彿閫夋嫨
     modelChange(e) {
-      let arr = [...this.formData.models];
+      let arr = this.formData.models;
       let str = JSON.stringify(arr);
-      e.forEach((item) => {
-        if (str.indexOf(item) == -1) {
-          arr.push({ baseGoodsModelsId: item, bdcount: null,count:null });
+      e.forEach((item, index) => {
+        if (str && !str.includes(item)) {
+          arr.push({ baseGoodsModelsId: item, lowerLimit: null, upperLimit: null });
         }
       });
-      this.formData.models = arr;
     },
 
     // 瑙勬牸鍨嬪彿绉婚櫎
     modelRemoveTag(e) {
-      let arr = this.formData.models;
-      let delIndex = arr.findIndex((v) => v.baseGoodsModelsId == e);
+      let delIndex = this.formData.models.findIndex((v) => v.baseGoodsModelsId == e);
       this.formData.models.splice(delIndex, 1);
     },
 
@@ -208,28 +310,29 @@
     save() {
       this.$refs.ruleForm.validate((valid) => {
         if (valid) {
-          const params = Object.assign({}, this.formData);
           if (this.setting.id) {
             // 缂栬緫鎺ュ彛
-            finsystenant.edit(params).then((res) => {
-              if (res) {
-                this.$message.success('淇濆瓨鎴愬姛锛�');
-                this.close();
-                this.$emit('search');
-              } else {
-                this.$message.error('淇濆瓨澶辫触');
-              }
+            const params = {
+              id: this.setting.id,
+              lowerLimit: this.formData.lowerLimit,
+              upperLimit: this.formData.upperLimit,
+            };
+            warningConfigUpd(params).then((res) => {
+              this.$message.success('淇濆瓨鎴愬姛锛�');
+              this.close();
+              this.$emit('search');
             });
           } else {
-            params.orgId = this.setting.orgId;
-            finsystenant.add(params).then((res) => {
-              if (res) {
-                this.$message.success('淇濆瓨鎴愬姛锛�');
-                this.close();
-                this.$emit('search');
-              } else {
-                this.$message.error('淇濆瓨澶辫触');
-              }
+            const params = {
+              warehouseType: this.formData.warehouseType,
+              baseWarehouseId: this.formData.baseWarehouseId,
+              baseGoodsTemplateId: this.formData.baseGoodsTemplateId,
+              modelConfigStr: JSON.stringify(this.formData.models),
+            };
+            warningConfigAdd(params).then((res) => {
+              this.$message.success('淇濆瓨鎴愬姛锛�');
+              this.close();
+              this.$emit('search');
             });
           }
         } else {

--
Gitblit v1.9.1