From 81e02c8d5dbd5128ad71a8615fb30a841dd3f7d8 Mon Sep 17 00:00:00 2001 From: "zangch@mesnac.com" Date: Mon, 19 Jan 2026 14:38:57 +0800 Subject: [PATCH] =?UTF-8?q?feat(monitoring):=20=E6=B7=BB=E5=8A=A0=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E5=8F=82=E6=95=B0=E8=BF=BD=E6=BA=AF=E5=92=8C=E5=B7=A5?= =?UTF-8?q?=E8=89=BA=E5=BF=AB=E7=85=A7=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在路由配置中新增设备监控参数追溯和工艺快照页面路由 - 在设备参数监控页面添加功能导航下拉菜单,支持跳转到参数追溯和工艺快照 - 新增参数追溯页面,实现设备参数历史数据查询和SPC分析功能 - 新增工艺快照页面,支持创建、查看、对比和删除工艺快照 - 添加相关的API接口用于获取追溯列表和SPC分析数据 - 将预警检查间隔从30秒调整为60秒以优化性能 --- src/api/base/processSnapshot.js | 61 ++ src/api/baseDeviceParamVal/val.js | 18 + src/router/index.js | 28 + src/views/base/processSnapshot/index.vue | 607 +++++++++++++++++++ src/views/baseDeviceParamVal/trace/index.vue | 455 ++++++++++++++ src/views/baseDeviceParamVal/val/index.vue | 43 +- 6 files changed, 1208 insertions(+), 4 deletions(-) create mode 100644 src/api/base/processSnapshot.js create mode 100644 src/views/base/processSnapshot/index.vue create mode 100644 src/views/baseDeviceParamVal/trace/index.vue diff --git a/src/api/base/processSnapshot.js b/src/api/base/processSnapshot.js new file mode 100644 index 0000000..c13c1af --- /dev/null +++ b/src/api/base/processSnapshot.js @@ -0,0 +1,61 @@ +import request from '@/utils/request' + +// 查询工艺快照列表 +export function listProcessSnapshot(query) { + return request({ + url: '/base/processSnapshot/list', + method: 'get', + params: query + }) +} + +// 查询工艺快照详情(含参数) +export function getProcessSnapshotDetail(snapshotId) { + return request({ + url: '/base/processSnapshot/detail/' + snapshotId, + method: 'get' + }) +} + +// 查询工艺快照基本信息 +export function getProcessSnapshot(snapshotId) { + return request({ + url: '/base/processSnapshot/' + snapshotId, + method: 'get' + }) +} + +// 新增工艺快照 +export function addProcessSnapshot(data) { + return request({ + url: '/base/processSnapshot', + method: 'post', + data: data + }) +} + +// 修改工艺快照 +export function updateProcessSnapshot(data) { + return request({ + url: '/base/processSnapshot', + method: 'put', + data: data + }) +} + +// 删除工艺快照 +export function delProcessSnapshot(snapshotIds) { + return request({ + url: '/base/processSnapshot/' + snapshotIds, + method: 'delete' + }) +} + +// 对比两个快照 +export function compareSnapshots(snapshotId1, snapshotId2) { + return request({ + url: '/base/processSnapshot/compare', + method: 'get', + params: { snapshotId1, snapshotId2 } + }) +} diff --git a/src/api/baseDeviceParamVal/val.js b/src/api/baseDeviceParamVal/val.js index 9ba1f63..0a89ace 100644 --- a/src/api/baseDeviceParamVal/val.js +++ b/src/api/baseDeviceParamVal/val.js @@ -85,3 +85,21 @@ export function getDeviceStartTimeList() { method: 'get' }) } + +// 参数追溯列表(分页) +export function getTraceList(query) { + return request({ + url: '/baseDeviceParamVal/val/trace/list', + method: 'get', + params: query + }) +} + +// 获取SPC分析数据 +export function getSPCData(query) { + return request({ + url: '/baseDeviceParamVal/val/spcData', + method: 'get', + params: query + }) +} diff --git a/src/router/index.js b/src/router/index.js index 73f5812..0e9538b 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -535,6 +535,34 @@ export const dynamicRoutes = [ }, ], }, + { + path: "/device/Monitor", + component: Layout, + hidden: true, + permissions: ["baseDeviceParamVal:val:list"], + children: [ + { + path: "trace", + component: () => import("@/views/baseDeviceParamVal/trace/index"), + name: "DeviceParamValTrace", + meta: {title: "参数追溯", activeMenu: "/device/Monitor/val"}, + }, + ], + }, + { + path: "/base/processSnapshot", + component: Layout, + hidden: true, + permissions: ["base:processSnapshot:list"], + children: [ + { + path: "index", + component: () => import("@/views/base/processSnapshot/index"), + name: "ProcessSnapshot", + meta: {title: "工艺快照", activeMenu: "/device/Monitor/val"}, + }, + ], + }, ] // 防止连续点击多次路由报错 diff --git a/src/views/base/processSnapshot/index.vue b/src/views/base/processSnapshot/index.vue new file mode 100644 index 0000000..317d777 --- /dev/null +++ b/src/views/base/processSnapshot/index.vue @@ -0,0 +1,607 @@ + + + + + diff --git a/src/views/baseDeviceParamVal/trace/index.vue b/src/views/baseDeviceParamVal/trace/index.vue new file mode 100644 index 0000000..efdb1f6 --- /dev/null +++ b/src/views/baseDeviceParamVal/trace/index.vue @@ -0,0 +1,455 @@ + + + + + diff --git a/src/views/baseDeviceParamVal/val/index.vue b/src/views/baseDeviceParamVal/val/index.vue index ad4a16b..ca9aa04 100644 --- a/src/views/baseDeviceParamVal/val/index.vue +++ b/src/views/baseDeviceParamVal/val/index.vue @@ -54,6 +54,20 @@ @change="onAutoRefreshChange" /> 刷新 + + + + 功能导航 + + + + 参数追溯 + + + 工艺快照 + + + @@ -211,7 +225,7 @@ export default { clockTimer: null, // 自动刷新 autoRefresh: true, - refreshIntervalMs: 10000, + refreshIntervalMs: 10000, // 10000毫秒 = 10秒 refreshTimer: null, // 设备列表 deviceList: [], @@ -229,7 +243,7 @@ export default { alertLoading: false, showAlertPanel: false, alertTimer: null, - alertCheckIntervalMs: 30000, // 30秒检查一次预警 + alertCheckIntervalMs: 60000, // 60秒检查一次预警 lastAlertIds: [], // 记录上次的预警ID,用于判断是否有新预警 }; }, @@ -398,8 +412,8 @@ export default { /** 加载预警列表 */ loadAlerts() { this.alertLoading = true; - listProcessAlert({ - pageNum: 1, + listProcessAlert({ + pageNum: 1, pageSize: 20, alertStatus: '0' // 只查询未处理的预警 }).then(response => { @@ -497,6 +511,27 @@ export default { this.loadAlerts(); }); }).catch(() => {}); + }, + /** 功能导航菜单 */ + handleMenuCommand(command) { + if (command === 'trace') { + // 跳转到参数追溯页面,携带当前选中的设备信息 + this.$router.push({ + path: '/device/Monitor/trace', + query: this.selectedDevice ? { + deviceCode: this.selectedDevice.deviceCode, + deviceName: this.selectedDevice.deviceName + } : {} + }); + } else if (command === 'snapshot') { + // 跳转到工艺快照页面 + this.$router.push({ + path: '/base/processSnapshot/index', + query: this.selectedDevice ? { + deviceCode: this.selectedDevice.deviceCode + } : {} + }); + } } } };