From 4e6f68433d71c47f58adfc39e5b6d740f05f472a Mon Sep 17 00:00:00 2001
From: yaowanxin <3588231647@qq.com>
Date: 星期一, 08 九月 2025 10:13:38 +0800
Subject: [PATCH] 库存预警
---
src/api/inventoryManagement/stockWarning.js | 15 +
src/views/inventoryManagement/stockWarning/index.vue | 434 +++++++++++++++---------------------------------------
2 files changed, 129 insertions(+), 320 deletions(-)
diff --git a/src/api/inventoryManagement/stockWarning.js b/src/api/inventoryManagement/stockWarning.js
index 092fb80..65e641a 100644
--- a/src/api/inventoryManagement/stockWarning.js
+++ b/src/api/inventoryManagement/stockWarning.js
@@ -1,11 +1,14 @@
import request from "@/utils/request";
// 鏌ヨ鍌ㄦ皵缃愰璀﹀垪琛�
-export const getStockWarningPage = (params) => {
+export const getStockWarningPage = (page, params) => {
return request({
url: "/gasTankWarning/listPage",
method: "get",
- params,
+ params: {
+ ...page,
+ ...params
+ },
});
};
@@ -14,7 +17,7 @@
return request({
url: "/gasTankWarning/add",
method: "post",
- data,
+ data: data,
});
};
@@ -22,8 +25,8 @@
export const updateStockWarning = (data) => {
return request({
url: "/gasTankWarning/update",
- method: "put",
- data,
+ method: "post",
+ data: data,
});
};
@@ -32,7 +35,7 @@
return request({
url: "/gasTankWarning/delete",
method: "delete",
- data: { ids },
+ data: ids,
});
};
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