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