From 7b4cd6ef04b358e0805846d49e3acf02d7eae5cb Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期三, 30 七月 2025 11:08:33 +0800 Subject: [PATCH] feat(eims): 更新预测性维护功能 - 新增设备数据定时更新功能 - 添加维护建议滚动显示 - 更新设备部件寿命预测数据 - 调整备件库存与预警逻辑 - 优化数据展示和颜色提示 --- eims-ui/apps/web-antd/src/views/eims/predictive-maintenance/index.vue | 83 +++++++++++++++++++++++++++-------------- 1 files changed, 55 insertions(+), 28 deletions(-) diff --git a/eims-ui/apps/web-antd/src/views/eims/predictive-maintenance/index.vue b/eims-ui/apps/web-antd/src/views/eims/predictive-maintenance/index.vue index 7b629cb..026b8c2 100644 --- a/eims-ui/apps/web-antd/src/views/eims/predictive-maintenance/index.vue +++ b/eims-ui/apps/web-antd/src/views/eims/predictive-maintenance/index.vue @@ -63,8 +63,8 @@ <!-- 澶囦欢淇℃伅 --> <div class="grid grid-cols-2 gap-4 mb-6"> <!-- 璁惧閮ㄤ欢瀵垮懡棰勬祴 --> - <Card title="璁惧閮ㄤ欢瀵垮懡棰勬祴"> - <Table :columns="lifePredictionColumns" :data-source="lifePredictionData" :pagination="false" class="w-full"> + <Card title="璁惧閮ㄤ欢瀵垮懡棰勬祴" :style="{ height: '500px' }"> + <Table :columns="lifePredictionColumns" :data-source="lifePredictionData" :pagination="false" :scroll="{ y: 340 }" class="w-full"> <template #bodyCell="{ column, record }"> <template v-if="column.key === 'lifeStatus'"> <a-tag :color="getLifeStatusColor(record.remainingDays)"> @@ -79,8 +79,8 @@ </Card> <!-- 澶囦欢搴撳瓨涓庨璀� --> - <Card title="澶囦欢搴撳瓨涓庨璀�"> - <Table :columns="sparePartColumns" :data-source="sparePartData" :pagination="false" class="w-full"> + <Card title="澶囦欢搴撳瓨涓庨璀�" :style="{ height: '500px' }"> + <Table :columns="sparePartColumns" :data-source="sparePartData" :pagination="false" :scroll="{ y: 340 }" class="w-full"> <template #bodyCell="{ column, record }"> <template v-if="column.key === 'stockStatus'"> <a-tag :color="getStockStatusColor(record.currentStock, record.safetyStock)"> @@ -140,7 +140,7 @@ indicator: '鐪熺┖鍘嬪姏', value: 32, threshold: 35, - status: '涓闄�', + status: '浣庨闄�', maintenanceSuggestion: '鐪熺┖鍘嬪姏鍊间綆浜庤瀹氬�硷紝寤鸿妫�鏌ユ垨鏇存崲鍚稿槾', maintenanceType: '棰勯槻鎬х淮鎶�', }, @@ -152,7 +152,7 @@ indicator: '娓╁害', value: 85, threshold: 80, - status: '涓闄�', + status: '浣庨闄�', maintenanceSuggestion: '寤鸿瀵逛富杞磋繘琛屾鼎婊戜繚鍏诲苟妫�鏌ュ喎鍗寸郴缁�', maintenanceType: '娑︽粦缁存姢', }, @@ -221,12 +221,33 @@ safetyStock: 10, predictedDemand: 2, }, + { + key: '4', + name: '鍠风爜鏈烘补澧�', + currentStock: 1, + safetyStock: 1, + predictedDemand: 1, + }, + { + key: '4', + name: '閽㈢綉娓呮礂娑�', + currentStock: 2, + safetyStock: 1, + predictedDemand: 1, + }, + { + key: '4', + name: '鍗佸绮惧瘑婊よ姱', + currentStock: 20, + safetyStock: 4, + predictedDemand: 0, + }, ]); const getStatusColor = (status) => { switch (status) { case '楂橀闄�': return 'red'; case '涓闄�': return 'orange'; - case '浣庨闄�': return 'yellow'; + case '浣庨闄�': return 'blue'; default: return 'green'; } }; @@ -245,7 +266,7 @@ const lifePredictionColumns = [ { title: '璁惧鍚嶇О', dataIndex: 'deviceName', key: 'deviceName' }, - { title: '閮ㄤ綅鍚嶇О', dataIndex: 'componentName', key: 'componentName' }, + // { title: '閮ㄤ綅鍚嶇О', dataIndex: 'componentName', key: 'componentName' }, { title: '閮ㄤ欢鍚嶇О', dataIndex: 'name', key: 'name' }, { title: '棰勬祴瀵垮懡 (澶�)', dataIndex: 'predictedLife', key: 'predictedLife' }, { title: '鍓╀綑瀵垮懡 (澶�)', dataIndex: 'remainingDays', key: 'remainingDays' }, @@ -254,19 +275,25 @@ ]; const lifePredictionData = ref([ - { key: '4', deviceName: '绌哄帇鏈�', componentName: '鐢垫満', name: '浼犳劅鍣�', predictedLife: 500, remainingDays: 10 }, - { key: '2', deviceName: 'CNC鍔犲伐涓績', componentName: '涓昏酱', name: '榻胯疆', predictedLife: 730, remainingDays: 30 }, - { key: '1', deviceName: 'SMT璐寸墖鏈�', componentName: '浼犻�佸甫', name: '杞存壙', predictedLife: 365, remainingDays: 50 }, + { key: '1', deviceName: 'SMT璐寸墖鏈�', componentName: '浼犻�佸甫', name: '鐪熺┖鍙戠敓鍣�', predictedLife: 700, remainingDays: 83 }, + { key: '1', deviceName: '鍖呰鏈�', componentName: '浼犻�佸甫', name: '鍙戠儹涓�', predictedLife: 260, remainingDays: 61 }, + { key: '1', deviceName: '婵�鍏夋墦鏍囨満', componentName: '浼犻�佸甫', name: '鍐峰嵈姘�', predictedLife: 180, remainingDays: 43 }, + { key: '1', deviceName: '閽㈢綉娓呮礂鏈�', componentName: '浼犻�佸甫', name: '娓呮礂娑�', predictedLife: 180, remainingDays: 95 }, + { key: '1', deviceName: '閽㈢綉娓呮礂鏈�', componentName: '浼犻�佸甫', name: '婊よ姱', predictedLife: 180, remainingDays: 95 }, + { key: '1', deviceName: '绔瓙鏈�', componentName: '浼犻�佸甫', name: '鍒�鐗�', predictedLife: 180, remainingDays: 112 }, + { key: '1', deviceName: '鐢佃剳鍓ョ嚎鏈�', componentName: '浼犻�佸甫', name: '鍒�鐗�', predictedLife: 180, remainingDays: 107 }, - { key: '3', deviceName: '娉ㄥ鏈�', componentName: '娑插帇绯荤粺', name: '婊よ姱', predictedLife: 180, remainingDays: 90 }, - - { key: '5', deviceName: '鐒婃帴鏈哄櫒浜�', componentName: '鐒婃灙', name: '鐒婂槾', predictedLife: 240, remainingDays: 60 } + { key: '2', deviceName: 'CNC鍔犲伐涓績', componentName: '涓昏酱', name: '鍒�绛掑す', predictedLife: 1100, remainingDays: 130 }, + { key: '4', deviceName: '绌哄帇鏈�', componentName: '瀹夊叏闃�', name: '瀹夊叏闃�', predictedLife: 365, remainingDays: 130 }, + { key: '1', deviceName: '鍠风爜鏈�', componentName: '浼犻�佸甫', name: '澧ㄦ按', predictedLife: 365, remainingDays: 184 }, + { key: '3', deviceName: '娉ㄥ鏈�', componentName: '娑插帇绯荤粺', name: '娑插帇娌�', predictedLife: 1100, remainingDays: 395 }, + { key: '5', deviceName: '鐒婃帴鏈哄櫒浜�', componentName: '鐒婃灙', name: '鐑欓搧鑺�', predictedLife: 1000, remainingDays: 512 } ]); const getLifeStatus = (remainingDays) => { - if (remainingDays <= 30) { + if (remainingDays <= 90) { return '鍗冲皢鍒版湡'; - } else if (remainingDays <= 90) { + } else if (remainingDays <= 150) { return '涓湡棰勮'; } else { return '瀵垮懡鍏呰冻'; @@ -274,10 +301,10 @@ }; const getLifeStatusColor = (remainingDays) => { - if (remainingDays <= 30) { - return 'red'; - } else if (remainingDays <= 90) { + if (remainingDays <= 90) { return 'orange'; + } else if (remainingDays <= 150) { + return 'blue'; } else { return 'green'; } @@ -290,7 +317,7 @@ const getStockStatus = (currentStock, safetyStock) => { - if (currentStock <= safetyStock) { + if (currentStock < safetyStock) { return '搴撳瓨棰勮'; } else { return '搴撳瓨鍏呰冻'; @@ -298,8 +325,8 @@ }; const getStockStatusColor = (currentStock, safetyStock) => { - if (currentStock <= safetyStock) { - return 'red'; + if (currentStock < safetyStock) { + return 'orange'; } else { return 'green'; } @@ -340,13 +367,13 @@ // 鏍规嵁璁惧鍚嶇О涓嶅悓璺宠浆涓嶅悓鐨勮鎯呴〉闈� if (record.name === 'SMT璐寸墖鏈�') { console.log('璁惧ID111:', record.name) - router.push({ path: '/predictive/smt-detail', query: { deviceId: record.key } }); + router.push({ path: '/predictive/smt-detail', query: { deviceId: 15 } }); } else if (record.name === 'CNC鍔犲伐涓績') { - router.push({ path: '/predictive/cnc-detail', query: { deviceId: record.key } }); + router.push({ path: '/predictive/cnc-detail', query: { deviceId: 23 } }); } else if (record.name === '娉ㄥ鏈�') { - router.push({ path: '/predictive/injection-detail', query: { deviceId: record.key } }); + router.push({ path: '/predictive/injection-detail', query: { deviceId: 181 } }); } else { - router.push({ path: '/predictive/air-compressor-detail', query: { deviceId: record.key } }); + router.push({ path: '/predictive/air-compressor-detail', query: { deviceId: 46 } }); } }; @@ -363,7 +390,7 @@ xAxis: { type: 'category', data: ['10鍒�', '9鍒�', '8鍒�', '7鍒�', '6鍒�', '5鍒�', '4鍒�', '3鍒�', '2鍒�', '1鍒�'], - + }, yAxis: { type: 'value', @@ -383,7 +410,7 @@ { value: 21, itemStyle: { color: '#52c41a' } }, { value: 8, itemStyle: { color: '#faad14' } }, { value: 5, itemStyle: { color: '#faad14' } }, - + ], label: { show: true, -- Gitblit v1.9.3