From 35d6ace96aac27cb6c81bc361503378f6acbd24f Mon Sep 17 00:00:00 2001 From: gaoluyang <2820782392@qq.com> Date: 星期一, 09 六月 2025 17:48:21 +0800 Subject: [PATCH] 1.库存管理页面联调 --- src/views/warehouseManagement/index.vue | 268 +++++++++++++++++++++----------------------- src/api/warehouseManagement/index.js | 43 +++++++ 2 files changed, 170 insertions(+), 141 deletions(-) diff --git a/src/api/warehouseManagement/index.js b/src/api/warehouseManagement/index.js new file mode 100644 index 0000000..c3bcaf8 --- /dev/null +++ b/src/api/warehouseManagement/index.js @@ -0,0 +1,43 @@ +// 搴撳瓨绠$悊 +import request from '@/utils/request' + +// 鏌ヨ寰呭叆搴撶鐞嗗垪琛� +export function pendingInventoryList(query) { + return request({ + url: '/pendingInventory/list', + method: 'get', + params: query + }) +} +// 鏌ヨ姝e紡鍏ュ簱绠$悊鍒楄〃 +export function officialInventoryList(query) { + return request({ + url: '/officialInventory/list', + method: 'get', + params: query + }) +} +// All鐓よ川鏂规鏌ヨ +export function coalPlanList(query) { + return request({ + url: '/coalPlan/coalPlanList', + method: 'get', + params: query + }) +} +// All鐓よ川缁存姢瀛楁鏌ヨ +export function coalFieldList(query) { + return request({ + url: '/coalField/coalFieldList', + method: 'get', + params: query + }) +} +// 瀹℃牳鍏ュ簱 +export function addOrEditCoalValue(query) { + return request({ + url: '/basic/coalValue/addOrEditCoalValue', + method: 'post', + data: query + }) +} \ No newline at end of file diff --git a/src/views/warehouseManagement/index.vue b/src/views/warehouseManagement/index.vue index dd3d5f2..cac372d 100644 --- a/src/views/warehouseManagement/index.vue +++ b/src/views/warehouseManagement/index.vue @@ -1,14 +1,6 @@ <template> <div class="app-container"> <el-form :inline="true" :model="queryParams" class="search-form"> - <el-form-item label="鎼滅储"> - <el-input - v-model="queryParams.searchText" - placeholder="璇疯緭鍏ュ叧閿瘝" - clearable - :style="{ width: '100%' }" - /> - </el-form-item> <el-form-item label="渚涘簲鍟嗗悕绉�"> <el-input v-model="queryParams.supplierName" @@ -17,17 +9,9 @@ :style="{ width: '100%' }" /> </el-form-item> - <el-form-item label="缁熶竴浜鸿瘑鍒彿"> + <el-form-item label="鐓ょ"> <el-input - v-model="queryParams.identifyNumber" - placeholder="璇疯緭鍏�" - clearable - :style="{ width: '100%' }" - /> - </el-form-item> - <el-form-item label="缁忚惀鍦板潃"> - <el-input - v-model="queryParams.address" + v-model="queryParams.coal" placeholder="璇疯緭鍏�" clearable :style="{ width: '100%' }" @@ -62,18 +46,18 @@ <el-table :data="tableData" border @selection-change="selectionChange" style="width: 100%"> <el-table-column type="selection" width="55" align="center" /> <el-table-column label="搴忓彿" type="index" width="60" align="center" /> - <el-table-column prop="name" label="渚涜揣鍟嗗悕绉�" width="180" sortable/> - <el-table-column prop="type" label="鐓ょ" sortable/> + <el-table-column prop="supplierName" label="渚涜揣鍟嗗悕绉�" width="180" sortable/> + <el-table-column prop="coal" label="鐓ょ" sortable/> <el-table-column prop="unit" label="鍗曚綅" width="70"/> - <el-table-column prop="number" label="搴撳瓨鏁伴噺" sortable min-width="110"/> - <el-table-column prop="money" label="鍗曚环锛堝惈绋庯級" sortable width="130"/> - <el-table-column prop="money1" label="鎬讳环锛堝惈绋庯級" width="130" /> - <el-table-column prop="money2" label="鎴愭湰鍗曚环" /> + <el-table-column prop="inventoryQuantity" label="搴撳瓨鏁伴噺" sortable min-width="110"/> + <el-table-column prop="priceIncludingTax" label="鍗曚环锛堝惈绋庯級" sortable width="130"/> + <el-table-column prop="totalPriceIncludingTax" label="鎬讳环锛堝惈绋庯級" width="130" /> + <el-table-column prop="costPerUnit" label="鎴愭湰鍗曚环" /> <el-table-column label="鐓よ川" align="center" v-if="activeTab=== 'officialInventory'" width="600"> <el-table-column v-for="col in columnTitle" :key="col.prop" :prop="col.prop" :label="col.label" align="center" sortable min-width="200"/> </el-table-column> - <el-table-column prop="createUser" label="鐧昏浜�" width="180"/> - <el-table-column prop="createTime" label="鐧昏鏃ユ湡" width="180"/> + <el-table-column prop="registrant" label="鐧昏浜�" width="180"/> + <el-table-column prop="registrationTime" label="鐧昏鏃ユ湡" width="180"/> <el-table-column fixed="right" label="鎿嶄綔" min-width="60" align="center" v-if="activeTab !== 'officialInventory'"> <template #default="scope"> <el-button link type="primary" size="small" @click="reviewDia(scope.row)">瀹℃牳</el-button> @@ -92,77 +76,67 @@ </el-card> <!-- 瀹℃牳寰呭叆搴撳脊妗� --> <el-dialog title="瀹℃牳鍏ュ簱" v-model="reviewVisible" width="1000px"> - <el-form :model="form" :rules="rules" ref="userRef" label-width="180px"> + <el-form :model="form" :rules="rules" ref="formRef" label-width="180px"> <el-row> <el-col :span="12"> - <el-form-item label="渚涜揣鍟嗗悕绉�" prop="userName"> - <el-input v-model="form.name" placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" maxlength="30" /> + <el-form-item label="渚涜揣鍟嗗悕绉�" prop="supplierName"> + <el-input v-model="form.supplierName" placeholder="璇疯緭鍏ヤ緵璐у晢鍚嶇О" maxlength="30" /> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="鐓ょ" prop="nickName"> - <el-input v-model="form.type" placeholder="璇疯緭鍏ュ鍚�" maxlength="30" /> + <el-form-item label="鐓ょ" prop="coal"> + <el-input v-model="form.coal" placeholder="璇疯緭鍏ョ叅绉�" maxlength="30" /> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="12"> - <el-form-item label="鍗曚綅" prop="userName"> - <el-input v-model="form.unit" placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" maxlength="30" /> + <el-form-item label="鍗曚綅" prop="unit"> + <el-input v-model="form.unit" placeholder="璇疯緭鍏ュ崟浣�" maxlength="30" /> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="搴撳瓨鏁伴噺" prop="nickName"> - <el-input v-model="form.num" placeholder="璇疯緭鍏ュ鍚�" maxlength="30" /> + <el-form-item label="搴撳瓨鏁伴噺" prop="inventoryQuantity"> + <el-input v-model="form.inventoryQuantity" placeholder="璇疯緭鍏ュ簱瀛樻暟閲�" maxlength="30" /> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="12"> - <el-form-item label="鍗曚环(鍚◣)" prop="userName"> - <el-input v-model="form.priceOne" placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" maxlength="30" /> + <el-form-item label="鍗曚环(鍚◣)" prop="priceIncludingTax"> + <el-input v-model="form.priceIncludingTax" placeholder="璇疯緭鍏ュ崟浠�(鍚◣)" maxlength="30" /> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="鎬讳环(鍚◣)" prop="nickName"> - <el-input v-model="form.priceAll" placeholder="璇疯緭鍏ュ鍚�" maxlength="30" /> + <el-form-item label="鎬讳环(鍚◣)" prop="totalPriceIncludingTax"> + <el-input v-model="form.totalPriceIncludingTax" placeholder="璇疯緭鍏ユ�讳环(鍚◣)" maxlength="30" /> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="12"> - <el-form-item label="鎴愭湰鍗曚环" prop="userName"> - <el-input v-model="form.price" placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" maxlength="30" /> + <el-form-item label="鎴愭湰鍗曚环" prop="costPerUnit"> + <el-input v-model="form.costPerUnit" placeholder="璇疯緭鍏ユ垚鏈崟浠�" maxlength="30" /> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="鐓よ川" prop="userName"> - <el-input v-model="form.type2" placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" maxlength="30" /> + <el-form-item label="鐓よ川鏂规" prop="qualityPlan"> + <el-select v-model="form.qualityPlan" placeholder="璇烽�夋嫨" @change="coalFieldListOption" clearable> + <el-option + v-for="dict in qualityPlanOption" + :key="dict.id" + :label="dict.plan" + :value="dict.id" + ></el-option> + </el-select> </el-form-item> </el-col> </el-row> <el-divider></el-divider> <el-row> - <el-col :span="12"> - <el-form-item label="鍏ㄦ按鍚噺鐧惧垎姣� (%)" prop="userName"> - <el-input v-model="form.value1" placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" maxlength="30" /> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="鍥哄畾纰崇櫨鍒嗘瘮 (%)" prop="nickName"> - <el-input v-model="form.value2" placeholder="璇疯緭鍏ュ鍚�" maxlength="30" /> - </el-form-item> - </el-col> - </el-row> - <el-row> - <el-col :span="12"> - <el-form-item label="浣庝綅鍙戠儹閲忥紙鍗曚綅锛氬崈鍗�/鍗冨厠锛�" prop="userName"> - <el-input v-model="form.value3" placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" maxlength="30" /> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="鐏板垎鐧惧垎姣� (%)" prop="nickName"> - <el-input v-model="form.value4" placeholder="璇疯緭鍏ュ鍚�" maxlength="30" /> + <el-col :span="12" v-for="item in filteredList" :key="item.id"> + <el-form-item :label="item.fieldName"> + <el-input v-model="form[item.fields]" /> </el-form-item> </el-col> </el-row> @@ -179,29 +153,34 @@ <el-form :model="form" :rules="rules" ref="userRef" label-width="100px"> <el-row> <el-col :span="12"> - <el-form-item label="渚涜揣鍟嗗悕绉�" prop="userName"> - <el-input v-model="form.userName" placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" maxlength="30" /> + <el-form-item label="渚涜揣鍟嗗悕绉�" prop="supplierName"> + <el-input v-model="form.supplierName" placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" maxlength="30" /> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="鐓ょ" prop="nickName"> - <el-input v-model="form.nickName" placeholder="璇疯緭鍏ュ鍚�" maxlength="30" /> + <el-form-item label="鐓ょ" prop="coal"> + <el-input v-model="form.coal" placeholder="璇疯緭鍏ュ鍚�" maxlength="30" /> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="12"> - <el-form-item label="鍗曚环(鍚◣)" prop="userName"> - <el-input v-model="form.userName" placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" maxlength="30" /> + <el-form-item label="鍗曚环(鍚◣)" prop="priceIncludingTax"> + <el-input v-model="form.priceIncludingTax" placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" maxlength="30" /> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="鎴愭湰鍗曚环" prop="nickName"> - <el-input v-model="form.nickName" placeholder="璇疯緭鍏ュ鍚�" maxlength="30" /> + <el-form-item label="鎬讳环(鍚◣)" prop="totalPriceIncludingTax"> + <el-input v-model="form.totalPriceIncludingTax" placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" maxlength="30" /> </el-form-item> </el-col> </el-row> <el-row> + <el-col :span="12"> + <el-form-item label="鎴愭湰鍗曚环" prop="costPerUnit"> + <el-input v-model="form.costPerUnit" placeholder="璇疯緭鍏ュ鍚�" maxlength="30" /> + </el-form-item> + </el-col> <el-col :span="12"> <el-form-item label="鐓よ川" prop="userName"> <el-input v-model="form.userName" placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" maxlength="30" /> @@ -221,13 +200,22 @@ <script setup> import {onMounted, ref} from "vue"; -import {Delete, Download, Plus, Refresh} from "@element-plus/icons-vue"; +import {Delete, Download, Refresh} from "@element-plus/icons-vue"; import Pagination from "@/components/Pagination/index.vue"; +import { + addOrEditCoalValue, + coalFieldList, + coalPlanList, officialInventoryList, + pendingInventoryList +} from "@/api/warehouseManagement/index.js"; + const { proxy } = getCurrentInstance() const tableData = ref([]) const selectedRows = ref([]) const columns = ref([]) +const qualityPlanOption = ref([]) +const filteredList = ref([]) const tableLoading = ref(false); const total = ref(0); const pageNum = ref(1); @@ -237,13 +225,22 @@ // 鍚堝苟寮规 const mergeVisible = ref(false) const data = reactive({ - form: {}, + form: { + supplierName: '', + coal: '', + unit: '', + inventoryQuantity: '', + priceIncludingTax: '', + totalPriceIncludingTax: '', + costPerUnit: '', + qualityPlan: '', + planId: '', + }, rules: { - // userName: [{ required: true, message: "鐧诲綍璐﹀彿涓嶈兘涓虹┖", trigger: "blur" }], - // nickName: [{ required: true, message: "鐢ㄦ埛濮撳悕涓嶈兘涓虹┖", trigger: "blur" }], - // roleIds: [{ required: true, message: "瑙掕壊涓嶈兘涓虹┖", trigger: "change" }], - // deptId: [{ required: true, message: "閮ㄩ棬涓嶈兘涓虹┖", trigger: "change" }], - // password: [{ required: true, message: "鐢ㄦ埛瀵嗙爜涓嶈兘涓虹┖", trigger: "blur" }], + supplierName: [{ required: true, message: "璇疯緭鍏ヤ緵搴斿晢鍚嶇О", trigger: "blur" }], + coal: [{ required: true, message: "璇疯緭鍏ョ叅绉�", trigger: "blur" }], + unit: [{ required: true, message: "璇疯緭鍏ュ崟浣�", trigger: "blur" }], + qualityPlan: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }], } }) @@ -258,10 +255,8 @@ ]); // 鏌ヨ鍙傛暟 const queryParams = reactive({ - searchText: "", supplierName: "", - identifyNumber: "", - address: "", + coal: "", }) const columnTitle = ref([]) onMounted(() => { @@ -269,29 +264,15 @@ }); // 鏍囩椤电偣鍑� const handleTabClick = (tab) => { - getList(); - tableLoading.value = true; tabName.value = tab.props.name; tableData.value = []; getList(); - // switch (tabName.value) { - // case "pendingInbound": - // columns.value = pendingColumns; - // break; - // case "officialInventory": - // columns.value = officialColumns; - // break; - // } - setTimeout(() => { - tableLoading.value = false; - }, 500); }; // 鐐瑰嚮鏌ヨ const handleQuery = () => { - tableLoading.value = true; - setTimeout(() => { - tableLoading.value = false; - }, 500); + pageNum.value = 1 + pageSize.value = 10 + getList() } const getList = () => { tableLoading.value = true; @@ -301,18 +282,19 @@ {prop: 'value2', label: '鐧惧垎姣�2'}, {prop: 'value3', label: '鐧惧垎姣�3'}, ] - setTimeout(() => { - // 鏆傛椂寮曞叆娴嬭瘯鏁版嵁 - tableData.value = [ - { name: "渚涘簲鍟咥", type: "鍔ㄥ姏鐓�", unit: "鍚�", number: 120, money: 500, money1: 200, money2: 200, money3: 300, money4: '楂樹綅', createUser: 'admin', createTime: '2025-06-01', value1: 12, value2: 23, value3: 14 }, - { name: "渚涘簲鍟咥", type: "鍔ㄥ姏鐓�", unit: "鍚�", number: 100, money: 600, money1: 300, money2: 300, money3: 300, money4: '浣庝綅', createUser: 'admin', createTime: '2025-06-01', value1: 14, value2: 23, value3: 14 }, - { name: "渚涘簲鍟咮", type: "鐒︾叅", unit: "鍚�", number: 300, money: 789,money1: 400, money2: 400, money3: 400, money4: '楂樹綅', createUser: 'admin', createTime: '2025-06-01', value1: 12, value2: 13, value3: 23 }, - { name: "渚涘簲鍟咮", type: "鐒︾叅", unit: "鍚�", number: 256, money: 800, money1: 420, money2: 420, money3: 420, money4: '浣庝綅', createUser: 'admin', createTime: '2025-06-01', value1: 14, value2: 23, value3: 14 }, - { name: "渚涘簲鍟咰", type: "鏃犵儫鐓�", unit: "鍚�", number: 256, money: 700, money1: 300, money2: 300, money3: 300, money4: '楂樹綅', createUser: 'admin', createTime: '2025-06-01', value1: 12, value2: 13, value3: 32 } - ]; - total.value = tableData.value.length; - tableLoading.value = false; - }, 500); + if (tabName.value === "pendingInbound") { + pendingInventoryList({ ...queryParams }).then(res => { + tableLoading.value = false; + tableData.value = res.data.records; + total.value = res.data.total; + }) + } else { + officialInventoryList({ ...queryParams }).then(res => { + tableLoading.value = false; + tableData.value = res.data.records; + total.value = res.data.total; + }) + } }; // 閲嶇疆鏌ヨ const resetQuery = () => { @@ -323,36 +305,6 @@ }); handleQuery(); }; -// 鍚堝苟鐩稿悓琛岀殑鏂规硶 -const mergeSameRows = ({ row, column, rowIndex, columnIndex }) => { - const fieldsToMerge = ['number', 'money', 'money1', 'money2', 'money3', 'money4', 'type', 'unit', 'name']; - - if (fieldsToMerge.includes(column.property)) { - const prevRow = tableData.value[rowIndex - 1] - const nextRow = tableData.value[rowIndex + 1] - // 鍒ゆ柇褰撳墠琛屽拰涓嬩竴琛屾槸鍚︾浉绛� - if ( - (!prevRow || prevRow[column.property] !== row[column.property]) && - (!nextRow || nextRow[column.property] === row[column.property]) - ) { - let count = 1 - while ( - tableData.value[rowIndex + count] && - tableData.value[rowIndex + count][column.property] === row[column.property] - ) { - count++ - } - return { rowspan: count, colspan: 1 } - } else if (prevRow && prevRow[column.property] === row[column.property]) { - // 闅愯棌琚悎骞剁殑鍗曞厓鏍� - return { rowspan: 0, colspan: 0 } - } - return { rowspan: 1, colspan: 1 } - } - - // 鍏朵粬鍒椾笉鍚堝苟 - return { rowspan: 1, colspan: 1 } -} // 琛ㄦ牸閫夋嫨鏁版嵁 const selectionChange = (rows) => { selectedRows.value = rows @@ -360,6 +312,24 @@ // 鎵撳紑瀹℃牳寮规 const reviewDia = (row) => { reviewVisible.value = true + form.value = {...row} + form.value.planId = form.value.id + coalPlanListOptions() +} +// 鏌ヨ鐓よ川鏂规涓嬫媺妗� +const coalPlanListOptions = () => { + coalPlanList().then(res => { + qualityPlanOption.value = res.data + }) +} +// 鏌ヨ鐓よ川鏂规瀛楁 +const coalFieldListOption = (id) => { + coalFieldList({id: id}).then(res => { + filteredList.value = res.data + if (!id) { + filteredList.value = [] + } + }) } // 鍚堝苟搴撳瓨鏁版嵁鏂规硶 const mergeRows = () => { @@ -379,10 +349,26 @@ } // 鎻愪氦瀹℃牳琛ㄥ崟 const submitReviewForm = () => { - + proxy.$refs.formRef.validate((valid) => { + if (valid) { + delete form.value.registrationTime + delete form.value.createTime + delete form.value.updateTime + delete form.value.id + form.value.fieldValue = filteredList.value.map(item => ({ + [item.fields]: form.value[item.fields] + })) + addOrEditCoalValue(form.value).then(() => { + cancelReview() + proxy.$modal.msgSuccess('鎻愪氦鎴愬姛') + handleQuery() + }) + } + }) } // 鍏抽棴瀹℃牳寮规 const cancelReview = () => { + proxy.$refs.formRef.resetFields() reviewVisible.value = false } </script> -- Gitblit v1.9.3