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 | 404 +++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 333 insertions(+), 71 deletions(-) diff --git a/admin-web/src/views/stock/ledger/inventoryAlert/edit.vue b/admin-web/src/views/stock/ledger/inventoryAlert/edit.vue index 37b0db9..623a650 100644 --- a/admin-web/src/views/stock/ledger/inventoryAlert/edit.vue +++ b/admin-web/src/views/stock/ledger/inventoryAlert/edit.vue @@ -1,111 +1,373 @@ <template> - <win-sm :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-form-item label="缂栧彿" prop="code"> - <el-input disabled v-model="formData.code" clearable maxlength="20" show-word-limit style="width: 100%"/> - </el-form-item> - <el-form-item label="浠撳簱鍚嶇О" prop="name"> - <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/> - </el-form-item> - <el-form-item label="鍦板潃" > - <el-input v-model="formData.adss" clearable maxlength="20" show-word-limit style="width: 100%"/> - </el-form-item> - <el-form-item label="鐘舵��" prop="status"> - <el-switch - v-model="formData.status" - active-color="#0d997c" - inactive-color="#C0CCDA"> - </el-switch> - </el-form-item> + <el-row :gutter="24"> + <el-col :span="12"> + <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="baseCategoryId"> + <el-cascader + v-model="formData.baseCategoryId" + :options="categoryOptions" + :props="{ value: 'id',emitPath: false }" + :show-all-levels="false" + filterable + clearable + @change="categoryChange" + style="width: 100%" + :disabled="type == 'edit'" + ></el-cascader> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="24"> + <el-col :span="12"> + <el-form-item label="鐗╁搧鍚嶇О" prop="baseGoodsTemplateId"> + <el-select + :value="formData.baseGoodsTemplateId" + :placeholder="formData.baseCategoryId?'璇烽�夋嫨鐗╁搧':'璇峰厛閫夋嫨鐗╁搧鍒嗙被'" + filterable + clearable + :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 + clearable + :disabled="!formData.baseGoodsTemplateId || type == 'edit'" + :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-select> + </el-form-item> + </el-col> + </el-row> + <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-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="{row,$index}"> + <el-form-item + label-width="0" + :prop="`models.${$index}.lowerLimit`" + :rules="[ + {validator: checkCounts,type: 1, lowerLimit: row.lowerLimit,upperLimit: row.upperLimit, trigger: ['blur', 'change']} + ]" + > + <el-input v-model.number="row.lowerLimit"></el-input> + </el-form-item> + </template> + </el-table-column> + <el-table-column prop="upperLimit" label="灏侀《搴撳瓨" align="center"> + <template slot-scope="{row,$index}"> + <el-form-item + label-width="0" + :prop="`models.${$index}.upperLimit`" + :rules="[ + {validator: checkCounts,type: 2, lowerLimit: row.lowerLimit,upperLimit: row.upperLimit, trigger: ['blur', 'change']} + ]" + > + <el-input v-model.number="row.upperLimit"></el-input> + </el-form-item> + </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"/> </div> - </win-sm> + </win-md> </template> <script> -import winSm from '@/components/win/win-sm' -import myButton from '@/components/myButton/myButton' -import * as finsystenant from '@/api/baseSetting/finsystenant' +import winMd from '@/components/win/win-md'; +import myButton from '@/components/myButton/myButton'; +import { + getCategorySelectTree, + goodsModel, + goodsTemplate, + queryGoodsModelInfo, + selectTenantWarehouse, +} from '@/api/baseSetting/finsystenant'; +import {warningConfigAdd, warningConfigGetById, warningConfigUpd,} from '@/api/stock/ledger'; +import {mapGetters} from 'vuex'; +import {findParentIds} from '@/utils/index'; export default { - components: {winSm, myButton}, + components: {winMd, myButton}, props: { setting: { type: Object, default: () => { - } - } + }, + }, }, data() { return { - checkAll: false, - checkedList: [], + 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: [], // 璋冩嫧鏈烘瀯 + categoryOptions: [], // 鐗╁搧鍒嗙被鍒楄〃 + goodsTemplatelOptions: [], //鐗╁搧鍚嶇О + modelsOptions: [], //鍨嬪彿鍒楄〃 formData: { - code: '', - name: '', - status: true, - summary: '', + warehouseType: 0, //浠撳簱绫诲瀷0鏈烘瀯1閮ㄩ棬 + baseWarehouseId: '', //浠撳簱缂栧彿 + baseCategoryIds: '', // 鍒嗙被缂栧彿鏁扮粍 + baseCategoryId: '', // 鍒嗙被缂栧彿 + baseGoodsTemplateId: '', // 鐗╁搧鍚嶇О妯$増缂栧彿 + modelsIds: [], //瑙勬牸鍨嬪彿 + models: [], }, rules: { - code: [ - {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'}, ], - name: [ - {required: true, message: '璇疯緭鍏ユ満鏋勫悕绉�', trigger: 'blur'} + upperLimit: [ + {required: true, message: '璇疯緭鍏�', trigger: 'blur'}, + {type: 'number', message: '璇疯緭鍏ユ暟瀛楀��', trigger: 'blur'}, ], - status: [ - {required: true, message: '璇烽�夋嫨鐘舵��', trigger: 'blur'} - ] - } - } + }, + }; + }, + computed: { + ...mapGetters(['userInfo']), }, created() { - if(this.setting.info){ - this.formData = Object.assign({},JSON.parse(this.setting.info)) - } + this.init(); }, methods: { - getEditInfo(id){ + async init() { + await this.getWarehouseList(); + await this.getCategoryTree(); + if (this.setting.id) { + this.type = 'edit'; + const detail = await warningConfigGetById({id: this.setting.id}); + // 鍒嗙被鍙嶆樉 + let res = await queryGoodsModelInfo({baseGoodsModelsId: detail.baseGoodsModelsId}); + detail.baseCategoryId = res[0].categoryId + // 鐗╁搧鍚嶇О鍙嶆樉 + this.getgoodsTemplate(detail.baseCategoryId); + // 瑙勬牸鍨嬪彿鍙嶆樉 + this.getgoodsModel(detail.baseGoodsTemplateId); + this.formData = Object.assign({}, detail); + this.formData.modelsIds = [detail.baseGoodsModelsId]; + this.getWarehouseList(); + } + this.loading = false + }, + // 鑾峰彇鍏ュ簱浠撳簱鍒楄〃 + 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); + }); + }, + getCategoryTree() { + // 鑾峰彇鐗╁搧鍒嗙被鍒楄〃 + return new Promise(async (resolve) => { + const treeRes = await getCategorySelectTree(); + this.categoryOptions = this.removeEmptyChildren(treeRes); + resolve(); + }); + }, + + // 鑾峰彇鐗╁搧鍚嶇О鍒楄〃 + getgoodsTemplate(id) { + goodsTemplate({categoryId: id || '', agencyId: this.userInfo.tenantId}).then((res) => { + this.goodsTemplatelOptions = res; + }); + }, + + // 瑙勬牸鍨嬪彿 + getgoodsModel(id) { + goodsModel({goodsTemplatesId: id || ''}).then((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.goodsTemplatelOptions = []; + this.modelsOptions = []; + this.formData.baseGoodsTemplateId = ''; + this.formData.modelsIds = []; + this.formData.models = []; + // 鏍规嵁閫変腑鍒嗙被璇锋眰鐗╁搧鍚嶇О鍒楄〃 + this.getgoodsTemplate(e); + }, + + // 鐗╁搧鍚嶇О鍒楄〃閫夋嫨 + goodsTemplateChange(e) { + this.formData.modelsIds = []; + this.formData.models = []; + this.formData.baseGoodsTemplateId = e; + // 鏍规嵁閫変腑鐗╁搧鍚嶇Оid鑾峰彇瑙勬牸鍨嬪彿鍒楄〃 + this.getgoodsModel(e); + }, + + removeEmptyChildren(arr) { + arr.forEach((item) => { + if (!item.children || !item.children.length) { + delete item.children; + } else { + this.removeEmptyChildren(item.children); + } + }); + return arr; + }, + + // 瑙勬牸鍨嬪彿閫夋嫨 + modelChange(e) { + let arr = this.formData.models; + let str = JSON.stringify(arr); + e.forEach((item, index) => { + if (str && !str.includes(item)) { + 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) { }, close() { - this.$emit('close') + this.$emit('close'); }, save() { this.$refs.ruleForm.validate((valid) => { if (valid) { - const params = Object.assign({}, this.formData) - if(this.setting.id){ + if (this.loading) return + this.loading = true; + if (this.setting.id) { // 缂栬緫鎺ュ彛 - finsystenant.edit(params).then(res => { - if (res) { - this.$message.success('淇濆瓨鎴愬姛锛�') - this.close() - this.$emit('search') - } else { - this.$message.error('淇濆瓨澶辫触') - } - }) - }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 = { + id: this.setting.id, + lowerLimit: this.formData.lowerLimit, + 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 = { + warehouseType: this.formData.warehouseType, + baseWarehouseId: this.formData.baseWarehouseId, + baseGoodsTemplateId: this.formData.baseGoodsTemplateId, + 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 { - this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��') + this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��'); } - }) - } - } -} + }); + }, + }, +}; </script> -- Gitblit v1.9.1