From 4e6f68433d71c47f58adfc39e5b6d740f05f472a Mon Sep 17 00:00:00 2001 From: yaowanxin <3588231647@qq.com> Date: 星期一, 08 九月 2025 10:13:38 +0800 Subject: [PATCH] 库存预警 --- src/views/inventoryManagement/stockWarning/index.vue | 434 +++++++++++++++--------------------------------------- 1 files changed, 120 insertions(+), 314 deletions(-) diff --git a/src/views/inventoryManagement/stockWarning/index.vue b/src/views/inventoryManagement/stockWarning/index.vue index 3694265..880c29f 100644 --- a/src/views/inventoryManagement/stockWarning/index.vue +++ b/src/views/inventoryManagement/stockWarning/index.vue @@ -41,7 +41,7 @@ <!-- 鎿嶄綔鎸夐挳 --> <div class="table-operations"> <el-button type="primary" @click="handleAdd">鏂板棰勮瑙勫垯</el-button> - <el-button type="success" @click="handleBatchProcess">鎵归噺澶勭悊</el-button> + <!-- <el-button type="success" @click="handleBatchProcess">鎵归噺澶勭悊</el-button> --> <el-button @click="handleExport">瀵煎嚭</el-button> </div> <el-table @@ -382,15 +382,15 @@ import { WarningFilled } from '@element-plus/icons-vue' import pagination from '@/components/PIMTable/Pagination.vue' // 娉ㄩ噴鎺堿PI瀵煎叆锛屼娇鐢ㄥ亣鏁版嵁 -// import { -// getStockWarningPage, -// addStockWarning, -// updateStockWarning, -// deleteStockWarning, -// batchProcessStockWarning, -// exportStockWarning, -// toggleStockWarningStatus -// } from '@/api/inventoryManagement/stockWarning.js' +import { + getStockWarningPage, + addStockWarning, + updateStockWarning, + deleteStockWarning, + batchProcessStockWarning, + exportStockWarning, + toggleStockWarningStatus +} from '@/api/inventoryManagement/stockWarning.js' const { proxy } = getCurrentInstance() @@ -410,7 +410,8 @@ // 鍒嗛〉鍙傛暟 const page = reactive({ current: 1, - size: 10 + size: 10, + total: 0 }) // 鎼滅储琛ㄥ崟 @@ -537,236 +538,20 @@ // 杩欓噷鍙互璋冪敤澶勭悊API } - - -// 鐢熸垚鍋囨暟鎹� -const generateMockData = () => { - const mockData = [ - { - id: 1, - tankCode: 'TANK001', - tankName: '娑插寲姘斿偍缃怉', - tankType: '娑插寲姘斿偍缃�', - specificationModel: 'LPG-5000L', - volume: 5000, - currentGasLevel: 15, - safetyGasLevel: 30, - minGasLevel: 10, - maxGasLevel: 95, - currentPressure: 2.5, - warningType: '姘斾綋涓嶈冻', - warningLevel: '绱ф��', - warningThreshold: 20, - isEnabled: true, - warningTime: '2024-01-15 08:30:00', - warningDuration: 3, - lastUpdateTime: '2024-01-15 10:00:00', - expectedRefillTime: '2024-01-16 14:00:00', - expectedShortageTime: '2024-01-15 18:30:00', // 浠婂ぉ涓嬪崍6:30缂烘皵 - warningRule: '褰撴皵浣撻噺浣庝簬20%鏃惰Е鍙戦璀�' - }, - { - id: 2, - tankCode: 'TANK002', - tankName: '鍘嬬缉姘斿偍缃怋', - tankType: '鍘嬬缉姘斿偍缃�', - specificationModel: 'COMP-3000L', - volume: 3000, - currentGasLevel: 45, - safetyGasLevel: 25, - minGasLevel: 15, - maxGasLevel: 90, - currentPressure: 8.2, - warningType: '鍘嬪姏寮傚父', - warningLevel: '閲嶈', - warningThreshold: 10, - isEnabled: true, - warningTime: '2024-01-14 16:20:00', - warningDuration: 2, - lastUpdateTime: '2024-01-15 09:15:00', - expectedRefillTime: '2024-01-17 09:00:00', - expectedShortageTime: '2024-01-18 12:00:00', // 3澶╁悗缂烘皵 - warningRule: '褰撳帇鍔涜秴杩�8MPa鏃惰Е鍙戦璀�' - }, - { - id: 3, - tankCode: 'TANK003', - tankName: '澶╃劧姘斿偍缃怌', - tankType: '澶╃劧姘斿偍缃�', - specificationModel: 'NG-8000L', - volume: 8000, - currentGasLevel: 75, - safetyGasLevel: 20, - minGasLevel: 10, - maxGasLevel: 95, - currentPressure: 4.8, - warningType: '娓╁害寮傚父', - warningLevel: '涓�鑸�', - warningThreshold: 5, - isEnabled: true, - warningTime: '2024-01-13 11:45:00', - warningDuration: 1, - lastUpdateTime: '2024-01-15 08:45:00', - expectedRefillTime: '2024-01-20 10:00:00', - expectedShortageTime: '2024-01-22 15:30:00', // 7澶╁悗缂烘皵 - warningRule: '褰撴俯搴﹁秴杩�60掳C鏃惰Е鍙戦璀�' - }, - { - id: 4, - tankCode: 'TANK004', - tankName: '姘ф皵鍌ㄧ綈D', - tankType: '姘ф皵鍌ㄧ綈', - specificationModel: 'O2-2000L', - volume: 2000, - currentGasLevel: 8, - safetyGasLevel: 25, - minGasLevel: 5, - maxGasLevel: 90, - currentPressure: 6.5, - warningType: '娉勬紡棰勮', - warningLevel: '绱ф��', - warningThreshold: 15, - isEnabled: true, - warningTime: '2024-01-15 07:15:00', - warningDuration: 4, - lastUpdateTime: '2024-01-15 11:30:00', - expectedRefillTime: '2024-01-15 16:00:00', - expectedShortageTime: '2024-01-15 14:00:00', // 浠婂ぉ涓嬪崍2鐐圭己姘� - warningRule: '褰撴娴嬪埌姘斾綋娉勬紡鏃惰Е鍙戦璀�' - }, - { - id: 5, - tankCode: 'TANK005', - tankName: '娑插寲姘斿偍缃怑', - tankType: '娑插寲姘斿偍缃�', - specificationModel: 'LPG-6000L', - volume: 6000, - currentGasLevel: 35, - safetyGasLevel: 30, - minGasLevel: 15, - maxGasLevel: 95, - currentPressure: 3.2, - warningType: '姘斾綋涓嶈冻', - warningLevel: '閲嶈', - warningThreshold: 20, - isEnabled: false, - warningTime: '2024-01-14 14:30:00', - warningDuration: 2, - lastUpdateTime: '2024-01-15 09:00:00', - expectedRefillTime: '2024-01-19 08:00:00', - expectedShortageTime: '2024-01-21 10:00:00', // 6澶╁悗缂烘皵 - warningRule: '褰撴皵浣撻噺浣庝簬20%鏃惰Е鍙戦璀�' - }, - { - id: 6, - tankCode: 'TANK006', - tankName: '鍘嬬缉姘斿偍缃怓', - tankType: '鍘嬬缉姘斿偍缃�', - specificationModel: 'COMP-4000L', - volume: 4000, - currentGasLevel: 85, - safetyGasLevel: 20, - minGasLevel: 10, - maxGasLevel: 90, - currentPressure: 7.8, - warningType: '鍘嬪姏寮傚父', - warningLevel: '涓�鑸�', - warningThreshold: 8, - isEnabled: true, - warningTime: '2024-01-12 09:20:00', - warningDuration: 1, - lastUpdateTime: '2024-01-15 08:30:00', - expectedRefillTime: '2024-01-25 14:00:00', - expectedShortageTime: '2024-01-28 16:00:00', // 13澶╁悗缂烘皵 - warningRule: '褰撳帇鍔涜秴杩�8MPa鏃惰Е鍙戦璀�' - }, - { - id: 7, - tankCode: 'TANK007', - tankName: '澶╃劧姘斿偍缃怗', - tankType: '澶╃劧姘斿偍缃�', - specificationModel: 'NG-10000L', - volume: 10000, - currentGasLevel: 92, - safetyGasLevel: 15, - minGasLevel: 8, - maxGasLevel: 95, - currentPressure: 5.2, - warningType: '娓╁害寮傚父', - warningLevel: '閲嶈', - warningThreshold: 6, - isEnabled: true, - warningTime: '2024-01-11 16:45:00', - warningDuration: 1, - lastUpdateTime: '2024-01-15 07:45:00', - expectedRefillTime: '2024-01-30 09:00:00', - expectedShortageTime: '2024-02-05 12:00:00', // 21澶╁悗缂烘皵 - warningRule: '褰撴俯搴﹁秴杩�60掳C鏃惰Е鍙戦璀�' - }, - { - id: 8, - tankCode: 'TANK008', - tankName: '姘ф皵鍌ㄧ綈H', - tankType: '姘ф皵鍌ㄧ綈', - specificationModel: 'O2-1500L', - volume: 1500, - currentGasLevel: 12, - safetyGasLevel: 30, - minGasLevel: 8, - maxGasLevel: 90, - currentPressure: 4.5, - warningType: '娉勬紡棰勮', - warningLevel: '绱ф��', - warningThreshold: 12, - isEnabled: true, - warningTime: '2024-01-15 06:30:00', - warningDuration: 5, - lastUpdateTime: '2024-01-15 12:15:00', - expectedRefillTime: '2024-01-15 20:00:00', - expectedShortageTime: '2024-01-15 17:30:00', // 浠婂ぉ涓嬪崍5:30缂烘皵 - warningRule: '褰撴娴嬪埌姘斾綋娉勬紡鏃惰Е鍙戦璀�' - } - ] - - // 鏍规嵁鎼滅储鏉′欢杩囨护鏁版嵁 - let filteredData = mockData.filter(item => { - if (searchForm.tankName && !item.tankName.includes(searchForm.tankName)) return false - if (searchForm.tankType && item.tankType !== searchForm.tankType) return false - if (searchForm.warningType && item.warningType !== searchForm.warningType) return false - if (searchForm.warningLevel && item.warningLevel !== searchForm.warningLevel) return false - return true - }) - - // 鍒嗛〉澶勭悊 - const start = (page.current - 1) * page.size - const end = start + page.size - const paginatedData = filteredData.slice(start, end) - - return { - records: paginatedData, - total: filteredData.length - } -} - // 鑾峰彇鍒楄〃鏁版嵁 const getList = async () => { tableLoading.value = true - try { - // 妯℃嫙缃戠粶寤惰繜 - await new Promise(resolve => setTimeout(resolve, 500)) - - const result = generateMockData() - tableData.value = result.records - total.value = result.total - - // 妫�鏌ョ己姘旈璀� + getStockWarningPage(page, searchForm) + .then(res => { + + tableData.value = res.data.records + page.value.total = res.data.total; + tableLoading.value = false; + // 妫�鏌ョ己姘旈璀� checkShortageWarnings() - } catch (error) { - console.error('鑾峰彇鍒楄〃澶辫触:', error) - ElMessage.error('鑾峰彇鍒楄〃澶辫触') - } finally { - tableLoading.value = false - } + }).catch(err => { + tableLoading.value = false; + }) } // 鎼滅储 @@ -798,7 +583,7 @@ // 鏂板 const handleAdd = () => { operationType.value = 'add' - resetForm() + // resetForm() dialogFormVisible.value = true } @@ -815,7 +600,7 @@ // 妯℃嫙API璋冪敤寤惰繜 await new Promise(resolve => setTimeout(resolve, 300)) ElMessage.success(`姝e湪澶勭悊棰勮锛�${row.tankName}`) - getList() + // getList() } catch (error) { ElMessage.error('澶勭悊棰勮澶辫触') } @@ -829,11 +614,21 @@ cancelButtonText: '鍙栨秷', type: 'warning' }) - - // 妯℃嫙API璋冪敤寤惰繜 - await new Promise(resolve => setTimeout(resolve, 300)) - ElMessage.success('鍒犻櫎鎴愬姛') - getList() + let ids = []; + ids.push(row.id); + deleteStockWarning(ids).then(res => { + if(res.code == 200){ + ElMessage.success("鍒犻櫎鎴愬姛"); + ids.value = []; + getList(); + } + }).catch(err => { + ElMessage.error(err.msg); + }) + // // 妯℃嫙API璋冪敤寤惰繜 + // await new Promise(resolve => setTimeout(resolve, 300)) + // ElMessage.success('鍒犻櫎鎴愬姛') + // getList() } catch (error) { if (error !== 'cancel') { ElMessage.error('鍒犻櫎澶辫触') @@ -860,75 +655,65 @@ // 瀵煎嚭 const handleExport = async () => { - try { - // 妯℃嫙API璋冪敤寤惰繜 - await new Promise(resolve => setTimeout(resolve, 800)) - - // 鐢熸垚瀵煎嚭鏁版嵁 - const exportData = generateMockData().records - const csvContent = generateCSV(exportData) - - // 鍒涘缓涓嬭浇閾炬帴 - const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' }) - const url = window.URL.createObjectURL(blob) - const link = document.createElement('a') - link.href = url - link.download = `鍌ㄦ皵缃愰璀︽暟鎹甠${new Date().getTime()}.csv` - link.click() - window.URL.revokeObjectURL(url) - - ElMessage.success('瀵煎嚭鎴愬姛') - } catch (error) { - ElMessage.error('瀵煎嚭澶辫触') - } + // if (selectedRows.value.length === 0) { + // exportStockWarning().then(res => { + // // // 鍒涘缓涓嬭浇閾炬帴 + // // const blob = new Blob([res.data], { type: 'text/csv;charset=utf-8;' }) + // // const url = window.URL.createObjectURL(blob) + // // const link = document.createElement('a') + // // link.href = url + // // link.download = `鍌ㄦ皵缃愰璀︽暟鎹甠${new Date().getTime()}.csv` + // // link.click() + // // window.URL.revokeObjectURL(url) + // }).catch(err => { + // ElMessage.error(err.msg); + // }) + // }else{ + // let ids = []; + // selectedRows.value.forEach(item => { + // ids.push(item.id); + // }) + // exportStockWarning(ids).then(res => { + // // // 鍒涘缓涓嬭浇閾炬帴 + // // const blob = new Blob([res.data], { type: 'text/csv;charset=utf-8;' }) + // // const url = window.URL.createObjectURL(blob) + // // const link = document.createElement('a') + // // link.href = url + // // link.download = `鍌ㄦ皵缃愰璀︽暟鎹甠${new Date().getTime()}.csv` + // // link.click() + // // window.URL.revokeObjectURL(url) + // }).catch(err => { + // ElMessage.error(err.msg); + // }) + // } + + ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", { + confirmButtonText: "纭", + cancelButtonText: "鍙栨秷", + type: "warning", + }) + .then(() => { + proxy.download("/gasTankWarning/export", {ids: selectedRows.value.map(item => item.id)}, "鍌ㄦ皵缃愰璀�.xlsx"); + }) + .catch(() => { + proxy.$modal.msg("宸插彇娑�"); + }); } -// 鐢熸垚CSV鍐呭 -const generateCSV = (data) => { - const headers = [ - '鍌ㄦ皵缃愮紪鐮�', '鍌ㄦ皵缃愬悕绉�', '鍌ㄦ皵缃愮被鍨�', '瑙勬牸鍨嬪彿', '瀹圭Н(m鲁)', - '褰撳墠姘斾綋閲�(%)', '瀹夊叏姘斾綋閲�(%)', '鏈�浣庢皵浣撻噺(%)', '鏈�楂樻皵浣撻噺(%)', - '褰撳墠鍘嬪姏(MPa)', '棰勮绫诲瀷', '棰勮绾у埆', '棰勮闃堝��', '鏄惁鍚敤', - '棰勮鏃堕棿', '棰勮鎸佺画澶╂暟', '鏈�鍚庢洿鏂版椂闂�', '棰勮鍏呰鏃堕棿', '棰勮缂烘皵鏃堕棿', '棰勮瑙勫垯鎻忚堪' - ] - - const csvRows = [headers.join(',')] - - data.forEach(item => { - const row = [ - item.tankCode, - item.tankName, - item.tankType, - item.specificationModel, - item.volume, - item.currentGasLevel, - item.safetyGasLevel, - item.minGasLevel, - item.maxGasLevel, - item.currentPressure, - item.warningType, - item.warningLevel, - item.warningThreshold, - item.isEnabled ? '鏄�' : '鍚�', - item.warningTime, - item.warningDuration, - item.lastUpdateTime, - item.expectedRefillTime, - item.expectedShortageTime, - item.warningRule - ] - csvRows.push(row.join(',')) - }) - - return csvRows.join('\n') -} -// 鍚敤鐘舵�佸彉鍖� + +// // 鍚敤鐘舵�佸彉鍖� const handleEnableChange = async (row) => { + try { - // 妯℃嫙API璋冪敤寤惰繜 - await new Promise(resolve => setTimeout(resolve, 200)) - ElMessage.success(`${row.tankName} 鐨勫惎鐢ㄧ姸鎬佸凡鏇存柊`) + updateStockWarning(row).then(res => { + if(res.code == 200){ + ElMessage.success(`${row.tankName} 鐨勫惎鐢ㄧ姸鎬佸凡鏇存柊`); + getList(); + } + }).catch(err => { + ElMessage.error(err.msg); + }) } catch (error) { ElMessage.error('鐘舵�佹洿鏂板け璐�') // 鎭㈠鍘熺姸鎬� @@ -942,16 +727,37 @@ await proxy.$refs.formRef.validate() // 妯℃嫙API璋冪敤寤惰繜 - await new Promise(resolve => setTimeout(resolve, 500)) + // await new Promise(resolve => setTimeout(resolve, 500)) if (operationType.value === 'add') { - ElMessage.success('鏂板鎴愬姛') + addStockWarning(form).then(res => { + if(res.code == 200){ + ElMessage.success("娣诲姞鎴愬姛"); + dialogFormVisible.value = false + getList() + resetForm() + } + }).catch(err => { + ElMessage.error(err.msg); + }) + + // ElMessage.success('鏂板鎴愬姛') } else { - ElMessage.success('缂栬緫鎴愬姛') + updateStockWarning(form).then(res => { + if(res.code == 200){ + ElMessage.success("鏇存柊鎴愬姛"); + dialogFormVisible.value = false + getList() + resetForm() + } + }).catch(err => { + ElMessage.error(err.msg); + }) + // ElMessage.success('缂栬緫鎴愬姛') } - closeDialog() - getList() + // closeDialog() + // getList() } catch (error) { if (!error.errors) { ElMessage.error(operationType.value === 'add' ? '鏂板澶辫触' : '缂栬緫澶辫触') @@ -962,7 +768,7 @@ // 鍏抽棴寮圭獥 const closeDialog = () => { dialogFormVisible.value = false - resetForm() + // resetForm() } // 閲嶇疆琛ㄥ崟 -- Gitblit v1.9.3