From 115fcb76642644a59d56ea4a88ce9906c0db3efb Mon Sep 17 00:00:00 2001 From: 石广澎 <shiguangpeng@163.com> Date: 星期六, 02 十二月 2023 17:44:53 +0800 Subject: [PATCH] feat: 部门物品管理 报废、退回新增时数量校验 --- admin-web/src/views/departmentitem/itemscr/scrapping/edit.vue | 234 +++++++++++++++++++++++++++++++--------------------------- 1 files changed, 125 insertions(+), 109 deletions(-) diff --git a/admin-web/src/views/departmentitem/itemscr/scrapping/edit.vue b/admin-web/src/views/departmentitem/itemscr/scrapping/edit.vue index a373d23..7370b1f 100644 --- a/admin-web/src/views/departmentitem/itemscr/scrapping/edit.vue +++ b/admin-web/src/views/departmentitem/itemscr/scrapping/edit.vue @@ -20,12 +20,12 @@ <el-col :span="12"> <el-form-item label="鎶ュ簾鏃堕棿" prop="dealTime"> <el-date-picker - v-model="formData.dealTime" - type="datetime" - value="yyyy-MM-dd HH:mm:ss" - value-format="yyyyMMddHHmmss" - placeholder="璇烽�夋嫨鏃ユ湡" - style="width: 100%" + v-model="formData.dealTime" + type="datetime" + value="yyyy-MM-dd HH:mm:ss" + value-format="yyyyMMddHHmmss" + placeholder="璇烽�夋嫨鏃ユ湡" + style="width: 100%" > </el-date-picker> </el-form-item> @@ -42,64 +42,64 @@ <el-row :gutter="24"> <el-col :span="12"> <el-form-item - label="鐗╁搧鍒嗙被" - :prop="`goods.${goodsIndex}.baseCategoryId`" - :rules="{ + label="鐗╁搧鍒嗙被" + :prop="`goods.${goodsIndex}.baseCategoryId`" + :rules="{ required: true, message: '璇烽�夋嫨鐗╁搧鍒嗙被', trigger: 'change', }" > <el-cascader - v-model="goodsItem.baseCategoryId" - :options="categoryOptions" - :props="{ value: 'id',emitPath: false }" - :show-all-levels="false" - filterable - clearable - @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="`goods.${goodsIndex}.baseGoodsTemplateId`" - :rules="rules.baseGoodsTemplateId" + label="鐗╁搧鍚嶇О" + :prop="`goods.${goodsIndex}.baseGoodsTemplateId`" + :rules="rules.baseGoodsTemplateId" > <el-select - v-model="goodsItem.baseGoodsTemplateId" - :placeholder="goodsItem.baseCategoryId?'璇烽�夋嫨鐗╁搧':'璇峰厛閫夋嫨鐗╁搧鍒嗙被'" - filterable - clearable - :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> </el-col> <el-col :span="12"> <el-form-item - label="閫夋嫨鍒嗗彂鍗�" - :prop="`goods.${goodsIndex}.businessFormCode`" - :rules="rules.businessFormCode"> + label="閫夋嫨鍒嗗彂鍗�" + :prop="`goods.${goodsIndex}.businessFormCode`" + :rules="rules.businessFormCode"> <div @click="showFenFa(goodsIndex)"> <el-input - placeholder="璇烽�夋嫨鍒嗗彂鍗�" - readonly - v-model="goodsItem.businessFormCode" - :placeholder="goodsItem.baseGoodsTemplateId?'璇烽�夋嫨鍒嗗彂鍗�':'璇峰厛閫夋嫨鐗╁搧'" - :disabled="!goodsItem.baseGoodsTemplateId" - suffix-icon="el-icon-arrow-down" - class="cursor-p"></el-input> + placeholder="璇烽�夋嫨鍒嗗彂鍗�" + readonly + v-model="goodsItem.businessFormCode" + :placeholder="goodsItem.baseGoodsTemplateId?'璇烽�夋嫨鍒嗗彂鍗�':'璇峰厛閫夋嫨鐗╁搧'" + :disabled="!goodsItem.baseGoodsTemplateId" + suffix-icon="el-icon-arrow-down" + class="cursor-p"></el-input> </div> </el-form-item> </el-col> @@ -142,35 +142,35 @@ <el-table-column prop="counts" label="鎶ュ簾鏁伴噺" align="center"> <template slot-scope="{row,$index}"> <el-form-item - label-width="0" - :prop="`goods.${goodsIndex}.models.${mIndex}.counts`" - :rules="[ + label-width="0" + :prop="`goods.${goodsIndex}.models.${mIndex}.counts`" + :rules="[ {validator: checkCounts,counts:row.counts,userUseCount: row.userUseCount, trigger: ['blur', 'change']} ]" > <el-input - type="number" - v-model.number="row.counts" + clearable + type="number" + v-model.number="row.counts" ></el-input> </el-form-item> </template> </el-table-column> <el-table-column prop="counts" label="鎶ュ簾鍘熷洜" align="center"> <template slot-scope="{row,$index}"> -<!-- <el-form-item - label-width="0" - :prop="`goods.${goodsIndex}.models.${mIndex}.scrappedCode`" - :rules="[{required: true, message: '璇烽�夋嫨', trigger: 'change'}]" - >--> <el-form-item - label-width="0" + label-width="0" + :prop="`goods.${goodsIndex}.models.${mIndex}.scrappedCode`" + :rules="[ + {validator: checkReason,counts:row.counts,scrappedCode:row.scrappedCode, trigger: ['blur', 'change']} + ]" > - <el-select v-model="row.scrappedCode" placeholder="璇烽�夋嫨"> + <el-select v-model="row.scrappedCode" clearable placeholder="璇烽�夋嫨"> <el-option - v-for="item in scrapReasonOptions" - :key="item.dict_code" - :label="item.dict_label" - :value="item.dict_code" + v-for="item in scrapReasonOptions" + :key="item.dict_code" + :label="item.dict_label" + :value="item.dict_code" /> </el-select> </el-form-item> @@ -180,22 +180,22 @@ </div> <div class="btn-group"> <el-button - v-if="formData.goods.length > 1" - name="绉婚櫎" - type="danger" - plain - size="mini" - @click="removeGoods(goodsIndex)" + v-if="formData.goods.length > 1" + name="绉婚櫎" + type="danger" + plain + size="mini" + @click="removeGoods(goodsIndex)" >绉婚櫎 </el-button > <el-button - v-if="formData.goods.length - 1 == goodsIndex" - name="鏂板鐗╁搧" - type="primary" - plain - size="mini" - @click="addGoods" + v-if="formData.goods.length - 1 == goodsIndex" + name="鏂板鐗╁搧" + type="primary" + plain + size="mini" + @click="addGoods" >鏂板鐗╁搧 </el-button > @@ -230,7 +230,7 @@ <script> import {departmentListAll} from '@/api/system/deptment'; import {goodsTemplate} from '@/api/baseSetting/finsystenant'; -import {outputAdd} from '@/api/stock/accessStock'; +import {scrappedAdd} from '@/api/deptGoods/scrap'; import {getTree} from '@/api/foudation/classification'; import MyButton from '@/components/myButton/myButton'; import winMd from '@/components/win/win-md'; @@ -252,34 +252,24 @@ }, }, data() { - // 鑷畾涔夋牎楠� - // 鐗╁搧閲嶅鏍¢獙 - var checkBusinessFormCode= (rule, value, callback) => { - if (!value) { - return callback(new Error('璇烽�夋嫨')); - } - let temp = this.formData.goods.filter((v) => v.businessFormCode == value); - if (!temp || temp.length != 1) { - return callback(new Error('宸查�夎繃姝ゅ垎鍙戝崟')); - } - callback(); - }; return { checkCounts: (rule, value, callback) => { if (!rule.counts) { - return callback(new Error('璇疯緭鍏ユ姤搴熸暟閲�')); + return callback(); } if (!Number.isInteger(rule.counts)) { // this.$message.warning('璇疯緭鍏ユ暟瀛楀��'); return callback(new Error('璇疯緭鍏ユ暟瀛楀��')); } - if (rule.counts < 1) { - // this.$message.warning('鏁板瓧鍊间笉鑳戒负0'); - return callback(new Error('鏁板瓧鍊煎繀椤诲ぇ浜�0')); - } if (rule.counts > rule.userUseCount) { // this.$message.warning('鍒嗗彂鏁伴噺涓嶈兘澶т簬鍓╀綑鏁伴噺'); return callback(new Error('鎶ュ簾鏁伴噺涓嶈兘澶т簬鍦ㄧ敤鏁伴噺')); + } + callback(); + }, + checkReason: (rule, value, callback) => { + if (rule.counts && !rule.scrappedCode) { + return callback(new Error('璇烽�夋嫨鎶ュ簾鍘熷洜')); } callback(); }, @@ -327,7 +317,7 @@ message: '璇烽�夋嫨鐗╁搧', trigger: 'change' }], - businessFormCode: [{required: true,message: '璇烽�夋嫨鍒嗗彂鍗�',trigger: 'change'}, {validator: checkBusinessFormCode, trigger: ['blur', 'change']}], + businessFormCode: [{required: true, message: '璇烽�夋嫨鍒嗗彂鍗�', trigger: 'change'}], counts: [{required: true, message: '璇疯緭鍏�', trigger: 'change'}], reason: [{required: true, message: '璇烽�夋嫨', trigger: 'change'}], }, @@ -370,13 +360,13 @@ // 鑾峰彇閮ㄩ棬鍒楄〃 async getdeptmentList() { await departmentListAll({tenantId: this.userInfo.tenantId}) - .then((res) => { - this.departmentOptions = res; - this.formData.goods.push(JSON.parse(JSON.stringify(this.goodsItem))); - }) - .catch((err) => { - console.log('err', err); - }); + .then((res) => { + this.departmentOptions = res; + this.formData.goods.push(JSON.parse(JSON.stringify(this.goodsItem))); + }) + .catch((err) => { + console.log('err', err); + }); }, removeEmptyChildren(arr) { @@ -423,6 +413,7 @@ categoryChange(e, index) { this.formData.goods[index].goodsOptions = []; this.formData.goods[index].baseGoodsTemplateId = ''; + this.formData.goods[index].businessFormCode = ''; this.formData.goods[index].goodsTemplateName = ''; this.formData.goods[index].models = []; // 鏍规嵁閫変腑鍒嗙被璇锋眰鐗╁搧鍚嶇О鍒楄〃 @@ -432,9 +423,8 @@ // 鐗╁搧鍚嶇О鍒楄〃閫夋嫨 goodsTemplateChange(e, index) { this.formData.goods[index].models = []; - this.formData.goods[index].goodsTemplateName = this.getGoodsTemplateName(e); - + this.formData.goods[index].businessFormCode = ''; }, showFenFa(index) { this.loading = true @@ -478,6 +468,13 @@ this.$message.error('璇烽�夋嫨鍒嗗彂鍗�'); return } + let bIdx = this.formData.goods.findIndex((v) => v.businessFormCode == this.curFenfa.businessFormCode); + let gIdx = this.formData.goods.findIndex((v) => v.baseGoodsTemplateId == this.fenfaSetting.baseGoodsTemplateId); + + if (gIdx !== -1 && gIdx !== this.fenfaSetting.goodsIdx && bIdx !== -1 && bIdx !== this.fenfaSetting.goodsIdx) { + this.$message.error('鍚屼竴涓墿鍝佷笉鑳介�夋嫨鐩稿悓鐨勫垎鍙戝崟'); + return; + } getGoodsUseInfoByFfOrderAndGoodId({ transBusinessId: this.curFenfa.transBusinessId, baseGoodsTemplateId: this.fenfaSetting.baseGoodsTemplateId @@ -492,29 +489,48 @@ }) arr.push(item) } - console.log(arr) this.formData.goods[this.fenfaSetting.goodsIdx].models = arr this.formData.goods[this.fenfaSetting.goodsIdx].businessFormCode = this.curFenfa.businessFormCode + this.formData.goods[this.fenfaSetting.goodsIdx].transBusinessId = this.curFenfa.transBusinessId } this.fenfaSetting.show = false }) }, // 鎻愪氦 handleSubmit() { - console.log('this.formData', this.formData); this.$refs['ruleForm'].validate((valid) => { if (valid) { - return; - outputAdd(this.formData) - .then((res) => { - this.$message.success('淇濆瓨鎴愬姛锛�'); - this.close(); - this.$emit('search'); + let params = JSON.parse(JSON.stringify(this.formData)) + params.goods.map(g => { + delete g.goodsOptions + let arr = [] + g.models.map(m => { + m.map(item=>{ + if(item.counts&&item.counts>0){ + arr.push(item) + } }) - .catch((err) => { - console.log('edit err', err); - this.$message.error('淇濆瓨澶辫触'); - }); + }) + g.models = arr + }) + params.goods = params.goods.filter(g=>g.models.length>0) + if(params.goods.length===0){ + this.$message.error('璇疯嚦灏戝~鍐欎竴涓姤搴熺墿鍝�'); + return; + } + if (this.loading) return + this.loading = true + scrappedAdd(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('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��'); } -- Gitblit v1.9.1