From 24fc98301c0b38a76b7d5aa704fe79a2e385e584 Mon Sep 17 00:00:00 2001 From: 石广澎 <shiguangpeng@163.com> Date: 星期三, 29 十一月 2023 14:20:41 +0800 Subject: [PATCH] feat: 1、物品分发部门查询 2、分发新增数量校验 --- admin-web/src/api/stock/ledger.js | 8 ++ admin-web/src/views/departmentitem/itemdis/distribution/edit.vue | 98 +++++++++++++++--------- admin-web/src/views/departmentitem/itemdis/distribution/index.vue | 61 ++++++++------ admin-web/src/views/dashboard/index.vue | 50 +++++++----- admin-web/src/views/systemSetting/department/index.vue | 12 +- 5 files changed, 139 insertions(+), 90 deletions(-) diff --git a/admin-web/src/api/stock/ledger.js b/admin-web/src/api/stock/ledger.js index 07081e4..ed3947d 100644 --- a/admin-web/src/api/stock/ledger.js +++ b/admin-web/src/api/stock/ledger.js @@ -72,3 +72,11 @@ params, }); } +// 鏌ヨ棰勮淇℃伅鏁伴噺 +export function getWarningTypeNum(params) { + return request({ + url: '/pc/warehouse/warning/getWarningTypeNum', + method: 'get', + params, + }); +} diff --git a/admin-web/src/views/dashboard/index.vue b/admin-web/src/views/dashboard/index.vue index a82a8cc..e210eb0 100644 --- a/admin-web/src/views/dashboard/index.vue +++ b/admin-web/src/views/dashboard/index.vue @@ -13,7 +13,8 @@ </el-radio-group> <div class="to-more" @click="nav('/stock/transfer/transferissue')">鏌ョ湅鏇村 ></div> </div> - <el-table v-loading="waitLoading" :data="waitWorkData" class="top-tb" height="265" :show-header="false" size="medium"> + <el-table v-loading="waitLoading" :data="waitWorkData" class="top-tb" height="265" :show-header="false" + size="medium"> <el-table-column prop="businessFormCode" align="center" width="130"></el-table-column> <el-table-column prop="inWarehouseName" align="left" min-width="130"> <template slot-scope="{row}"> @@ -48,12 +49,13 @@ <div class="f-r f-r-between m-b-10"> <el-radio-group size="mini" v-model="earlyWarningType" @change="changeEarlyWarning"> <el-radio-button label="">鍏ㄩ儴</el-radio-button> - <el-radio-button label="2">缂鸿揣锛�12锛�</el-radio-button> - <el-radio-button label="1">瓒呭嚭锛�3锛�</el-radio-button> + <el-radio-button label="2">缂鸿揣 <span v-if="warningTypeNum.lowNum">锛坽{warningTypeNum.lowNum}}锛�</span></el-radio-button> + <el-radio-button label="1">瓒呭嚭 <span v-if="warningTypeNum.upNum">锛坽{warningTypeNum.upNum}}锛�</span></el-radio-button> </el-radio-group> <div class="to-more" @click="nav('/stock/ledger/alertQuery')">鏌ョ湅鏇村 ></div> </div> - <el-table v-loading="earlyLoading" :data="earlyWarningData" class="top-tb" height="265" :show-header="false" size="medium"> + <el-table v-loading="earlyLoading" :data="earlyWarningData" class="top-tb" height="265" :show-header="false" + size="medium"> <el-table-column prop="baseGoodsTemplateName" align="left" min-width="130"> <template slot-scope="{row}"> <el-tooltip class="item" effect="dark" :content="row.baseGoodsTemplateName " placement="top-start"> @@ -138,8 +140,7 @@ // 鍒涘缓Context import {LongToDateTime} from "@/utils/DateFormatter"; import {transfeIncome, transferList, transferOutput} from "@/api/stock/transfer"; -import {geWarningList} from '@/api/stock/ledger' -import transfer from "@/views/mixins/transfer"; +import {getWarningTypeNum, geWarningList} from '@/api/stock/ledger' const ComponentContext = require.context('./components', false, /\.vue$/i); let res_components = {}; @@ -172,6 +173,11 @@ waitType: '0', waitWorkData: [], // 寰呭姙宸ヤ綔 earlyWarningType: '', + warningTypeNum: { + lowNum: 0, + totalNum: 0, + upNum: 0, + }, earlyWarningData: [] // 棰勮閫氱煡 }; }, @@ -215,9 +221,9 @@ this.waitLoading = false }); }, - aduitThis(row){ + aduitThis(row) { if (this.waitType === '0') { - this.handleOutput(row) + this.handleOutput(row) } else { this.handleIncome(row) } @@ -229,7 +235,7 @@ if (action == 'confirm') { instance.confirmButtonLoading = true; instance.confirmButtonText = '鎵ц涓�...'; - transfeIncome({ id: row.id }) + transfeIncome({id: row.id}) .then((res) => { this.$message.success('鎺ユ敹鍏ュ簱鎴愬姛锛�'); done(); @@ -252,7 +258,7 @@ if (action == 'confirm') { instance.confirmButtonLoading = true; instance.confirmButtonText = '鎵ц涓�...'; - transferOutput({ id: row.id }) + transferOutput({id: row.id}) .then((res) => { this.$message.success('璋冩嫧鍑哄簱鎴愬姛锛�'); done(); @@ -279,16 +285,20 @@ getWarningList() { this.earlyLoading = true this.earlyWarningData = [] - geWarningList({ - warningType: this.earlyWarningType, - pageNum: 1, - pageSize: 5, - }).then(res => { - this.earlyLoading = false - this.earlyWarningData = res.datas; - }).catch(() => { - this.waitLoading = false - }); + getWarningTypeNum().then(res => { + this.warningTypeNum = res + geWarningList({ + warningType: this.earlyWarningType, + pageNum: 1, + pageSize: 5, + }).then(res => { + this.earlyLoading = false + this.earlyWarningData = res.datas; + }).catch(() => { + this.waitLoading = false + }); + }) + }, // 璺宠浆 nav(url) { diff --git a/admin-web/src/views/departmentitem/itemdis/distribution/edit.vue b/admin-web/src/views/departmentitem/itemdis/distribution/edit.vue index 1a44026..d94d5c4 100644 --- a/admin-web/src/views/departmentitem/itemdis/distribution/edit.vue +++ b/admin-web/src/views/departmentitem/itemdis/distribution/edit.vue @@ -118,12 +118,12 @@ </el-col> </el-row> <el-row class="card3" v-for="(mItem, mIndex) in goodsItem.models" :key="mIndex"> - <el-col style="padding: 10px 0" :span="10"> + <el-col style="padding: 15px 0" :span="10"> <el-form-item label="瑙勬牸鍨嬪彿:" style="margin-bottom: 0"> {{ getGoodsModelsName(mItem.baseGoodsModelsId) }} </el-form-item> </el-col> - <el-col style="padding: 10px 0" :span="4"> + <el-col style="padding: 15px 0" :span="4"> <el-form-item label="鍓╀綑鏁伴噺:" style="margin-bottom: 0" label-width="80"> {{ mItem.worehouseCount }} </el-form-item> @@ -135,9 +135,12 @@ <template slot-scope="{$index,row}"> <el-form-item :prop="`transferGoods.${goodsIndex}.models.${mIndex}.procureModelUserList.${$index}.goodsNum`" + :rules="[ + {validator: checkCounts,type: 1, userList: mItem.procureModelUserList,worehouseCount: mItem.worehouseCount, trigger: ['blur', 'change']} + ]" label-width="0" > - <el-input v-model="row.goodsNum" style="width: 100%"></el-input> + <el-input v-model.number="row.goodsNum" style="width: 100%"></el-input> </el-form-item> </template> </el-table-column> @@ -145,6 +148,7 @@ <template slot-scope="{$index,row}"> <el-form-item :prop="`transferGoods.${goodsIndex}.models.${mIndex}.procureModelUserList.${$index}.nowUserName`" + :rules="[{required: true, message: '璇疯緭鍏ヤ娇鐢ㄤ汉濮撳悕', trigger: ['blur', 'change']}]" label-width="0" > <el-input v-model="row.nowUserName" style="width: 100%"></el-input> @@ -154,7 +158,8 @@ <el-table-column prop="nowUserPhone" label="鑱旂郴鐢佃瘽" align="center"> <template slot-scope="{$index,row}"> <el-form-item - :prop="`transferGoods.${goodsIndex}.models.${mIndex}].procureModelUserList.${$index}.nowUserPhone`" + :prop="`transferGoods.${goodsIndex}.models.${mIndex}.procureModelUserList.${$index}.nowUserPhone`" + :rules="[{required: true, message: '璇疯緭鍏ヨ仈绯荤數璇�', trigger: ['blur', 'change']}]" label-width="0" > <el-input v-model="row.nowUserPhone" style="width: 100%"></el-input> @@ -180,12 +185,15 @@ </el-table> </el-col> <!--BC绫诲晢鍝� --> - <el-col style="padding: 10px 0" :span="10" v-else> + <el-col style="padding: 15px 0" :span="10" v-else> <el-form-item label="鍒嗗彂鏁伴噺:" :prop="`transferGoods.${goodsIndex}.models.${mIndex}.counts`" + :rules="[ + {validator: checkCounts, type: 2,worehouseCount: mItem.worehouseCount, trigger: ['blur', 'change']} + ]" style="margin-bottom: 0" label-width="80"> - <el-input v-model.number="goodsItem.models[mIndex].counts" style="width: 160px;"></el-input> + <el-input v-model.number="mItem.counts" style="width: 160px;"></el-input> </el-form-item> </el-col> </el-row> @@ -258,23 +266,35 @@ } callback(); }; - // 鏁伴噺鏍¢獙 - var checkCounts = (rule, value, callback) => { - console.log(value); - if (!value) { - return callback(new Error('璇疯緭鍏�')); - } - if (!Number.isInteger(value)) { - this.$message.warning('璇疯緭鍏ユ暟瀛楀��'); - return callback(new Error('璇疯緭鍏ユ暟瀛楀��')); - } - if (value == 0) { - this.$message.warning('鏁板瓧鍊间笉鑳戒负0'); - return callback(new Error('鏁板瓧鍊间笉鑳戒负0')); - } - callback(); - }; return { + checkCounts: (rule, value, callback) => { + if (!value) { + return callback(new Error('璇疯緭鍏ュ垎鍙戞暟閲�')); + } + if (!Number.isInteger(value)) { + // this.$message.warning('璇疯緭鍏ユ暟瀛楀��'); + return callback(new Error('璇疯緭鍏ユ暟瀛楀��')); + } + if (value < 1) { + // this.$message.warning('鏁板瓧鍊间笉鑳戒负0'); + return callback(new Error('鏁板瓧鍊煎繀椤诲ぇ浜�0')); + } + if (value > rule.worehouseCount) { + // this.$message.warning('鍒嗗彂鏁伴噺涓嶈兘澶т簬鍓╀綑鏁伴噺'); + return callback(new Error('鍒嗗彂鏁伴噺涓嶈兘澶т簬鍓╀綑鏁伴噺')); + } + if(rule.type===1){ + let sum = 0 + rule.userList.map(item=>{ + sum+=(item.goodsNum||0) + }) + if (sum > rule.worehouseCount) { + // this.$message.warning('鍒嗗彂鏁伴噺鎬诲拰涓嶈兘澶т簬鍓╀綑鏁伴噺'); + return callback(new Error('鍒嗗彂鏁伴噺鎬诲拰涓嶈兘澶т簬鍓╀綑鏁伴噺')); + } + } + callback(); + }, loading: false, buyTypeOptions: [ { @@ -329,21 +349,25 @@ baseCategoryIds: [{required: true, message: '璇烽�夋嫨', trigger: 'change'}], baseGoodsTemplateId: [{validator: checkGoodsTemplateId, trigger: ['blur', 'change']}], modelsIds: [{required: true, message: '璇烽�夋嫨', trigger: 'change'}], - transferGoods:{ - models:{ - counts: [ - { required: true, message: '璇疯緭鍏�', trigger: 'change' }, - { type: 'number', message: '鏁伴噺蹇呴』涓烘暣鏁�' }, - ], - procureModelUserList:{ - goodsNum: [ { required: true, message: '璇疯緭鍏�', trigger: 'blur' }], - nowUserName: [ { required: true, message: '璇疯緭鍏�', trigger: 'blur' }], - nowUserPhone: [ { required: true, message: '璇疯緭鍏�', trigger: 'blur' }], - } + transferGoods: [ + { + models: [ + { + counts: [ + {required: true, message: '璇疯緭鍏�', trigger: 'change'}, + {type: 'number', message: '鏁伴噺蹇呴』涓烘暣鏁�'}, + ], + procureModelUserList: [ + { + goodsNum: [{required: true, message: '璇疯緭鍏�', trigger: 'blur'}], + nowUserName: [{required: true, message: '璇疯緭鍏�', trigger: 'blur'}], + nowUserPhone: [{required: true, message: '璇疯緭鍏�', trigger: 'blur'}], + } + ] + } + ] } - } - - + ] }, uploadSettings: { @@ -399,7 +423,7 @@ // 鑾峰彇鍏ュ簱浠撳簱鍒楄〃 getdeptmentList() { - departmentListAll({agencyId: this.userInfo.tenantId}) + departmentListAll({tenantId: this.userInfo.tenantId}) .then((res) => { this.departmentOptions = res; if (!this.setting.id && res.length) { diff --git a/admin-web/src/views/departmentitem/itemdis/distribution/index.vue b/admin-web/src/views/departmentitem/itemdis/distribution/index.vue index 4f55539..681e679 100644 --- a/admin-web/src/views/departmentitem/itemdis/distribution/index.vue +++ b/admin-web/src/views/departmentitem/itemdis/distribution/index.vue @@ -10,7 +10,7 @@ <el-col> <!--鍒楄〃--> <div class="table-tool-bar" style="margin-bottom: 15px"> - <my-button name="鏂板" @click="handleAdd" site="tools" size="medium" /> + <my-button name="鏂板" @click="handleAdd" site="tools" size="medium"/> </div> <div :style="{ 'overflow-y': 'auto', height: `calc(100vh - 320px)` }" v-loading="loading"> <el-row v-if="list.length" class="card" :gutter="5"> @@ -23,7 +23,9 @@ <span class="value">{{ item.businessFormCode }}</span> </div> <div class="card-header-right"> - <el-button name="鏌ョ湅璇︽儏" site="form" type="primary" size="mini" @click="handleDetail(item)">鏌ョ湅璇︽儏</el-button> + <el-button name="鏌ョ湅璇︽儏" site="form" type="primary" size="mini" @click="handleDetail(item)"> + 鏌ョ湅璇︽儏 + </el-button> </div> </div> <div class="one-hed"> @@ -52,14 +54,14 @@ <el-empty v-else description="鏆傛棤鏁版嵁"></el-empty> </div> <el-pagination - :small="false" - :current-page="pageNum" - :page-sizes="[5, 10, 20, 50, 100, 200, 300, 400, 500]" - :page-size="pageSize" - layout="total, sizes, prev, pager, next, jumper" - :total="total" - @size-change="handleSizeChange" - @current-change="handleCurrentChange" + :small="false" + :current-page="pageNum" + :page-sizes="[5, 10, 20, 50, 100, 200, 300, 400, 500]" + :page-size="pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" /> </el-col> </el-row> @@ -67,35 +69,36 @@ </el-container> <!--娣诲姞/缂栬緫寮圭獥--> <edit - v-if="editSetting.show" - :setting="editSetting" - ref="editRef" - @close="editSetting.show = false" - @search="refreshData" + v-if="editSetting.show" + :setting="editSetting" + ref="editRef" + @close="editSetting.show = false" + @search="refreshData" ></edit> <detail - v-if="detailSetting.show" - :setting="detailSetting" - @close="detailSetting.show = false" - ref="detailRef" + v-if="detailSetting.show" + :setting="detailSetting" + @close="detailSetting.show = false" + ref="detailRef" ></detail> </div> </template> <script> -import { transferList} from '@/api/stock/transfer'; +import {transferList} from '@/api/stock/transfer'; import MyButton from '@/components/myButton/myButton'; import SettingIplatform from '@/utils/settingIplatform'; import myImport from '@/views/components/myImport'; import edit from './edit'; import detail from './detail'; -import { getBaseUrl } from '@/utils/base'; +import {getBaseUrl} from '@/utils/base'; import listPage from '../../../mixins/listPage'; +import {getUserDetail} from "@/utils/auth"; export default { name: 'index', mixins: [listPage], - components: { MyButton, myImport, edit, detail }, + components: {MyButton, myImport, edit, detail}, data() { return { loading: false, @@ -111,11 +114,15 @@ defaultValue: '', }, { - type: 'cascader', - dataIndex: 'agencyId', + type: 'select', + dataIndex: 'inWarehouseId', label: '鍒嗗彂閮ㄩ棬', placeholder: '璇烽�夋嫨', - optionsConfig: { url: '/pc/fin/sys/tenant/select/tree_fin_tenant', props: null }, + optionsConfig: { + url: `/pc/fin/sys/tenant/department/list/all?tenantId=${getUserDetail().tenantId}`, + label: 'name', + value: 'id', + }, defaultValue: '', options: [], }, @@ -156,7 +163,7 @@ treeDataList: [] }; }, - created(){ + created() { this.fetchData() }, methods: { @@ -182,5 +189,5 @@ </script> <style scoped lang="scss"> - //@import url(../../../../styles/index.scss); +//@import url(../../../../styles/index.scss); </style> diff --git a/admin-web/src/views/systemSetting/department/index.vue b/admin-web/src/views/systemSetting/department/index.vue index 9544286..41c30b7 100644 --- a/admin-web/src/views/systemSetting/department/index.vue +++ b/admin-web/src/views/systemSetting/department/index.vue @@ -129,15 +129,15 @@ }, // 鍒椾俊鎭� columns: [ - { title: '缂栧彿', field: 'code', align: 'center', width: '100px' }, - { title: '閮ㄩ棬', field: 'name', align: 'left' }, - { title: '椤哄簭鍙�', field: 'orderNum', align: 'left' }, - { title: '澶囨敞', field: 'remark', align: 'left', width: '200px' }, + { title: '缂栧彿', field: 'code', align: 'center', width: 80 }, + { title: '閮ㄩ棬', field: 'name', align: 'left', minWidth: 200 }, + { title: '椤哄簭鍙�', field: 'orderNum', align: 'center', width: 100 }, + { title: '澶囨敞', field: 'remark', align: 'left', minWidth: 200 }, { title: '鐘舵��', field: 'status', align: 'center', - width: '180px', + width: 100, formatter: (row) => { return { value: row.status === 0 ? '鍚敤' : '绂佺敤' }; }, @@ -145,7 +145,7 @@ ], // 鎿嶄綔淇℃伅 operation: { - width: 150, + width: 100, align: 'center', show: true, // 鏄剧ず鎿嶄綔鍒� attr: [ -- Gitblit v1.9.1