From 9c3e98d7c6856db73fef42be083d33e2fc05145e Mon Sep 17 00:00:00 2001
From: 快乐的昕的电脑 <快乐的昕的电脑@DESKTOP-C2BQPQU>
Date: 星期二, 14 十月 2025 17:29:47 +0800
Subject: [PATCH] • 预警判断也基于此百分比与预警值

---
 components/mold.vue |   81 ++++++++++++++++++++++++++--------------
 1 files changed, 53 insertions(+), 28 deletions(-)

diff --git a/components/mold.vue b/components/mold.vue
index d09ffed..da28224 100644
--- a/components/mold.vue
+++ b/components/mold.vue
@@ -375,38 +375,63 @@
                         return `${Number(n).toFixed(0)}%`;
 					};
 
-					const mapped = (list || []).map(t => {
-						const upTimeRaw = getField(t, 'uP_TIME', 'UP_TIME', 'uPTime', 'UPTIME', 'UpTime');
-						const downTimeRaw = getField(t, 'dowN_TIME', 'DOWN_TIME', 'downTime', 'DOWNTIME');
-						const lifePercentRaw = getField(t, 'lifE_PERCENT', 'LIFE_PERCENT', 'lifePercent', 'LIFEPERCENT');
-						const lifeWarnRaw = getField(t, 'lifE_WARN', 'LIFE_WARN', 'lifeWarn', 'LIFEWARN');
+                    const mapped = (list || []).map(t => {
+                        const upTimeRaw = getField(t, 'uP_TIME', 'UP_TIME', 'uPTime', 'UPTIME', 'UpTime');
+                        const downTimeRaw = getField(t, 'dowN_TIME', 'DOWN_TIME', 'downTime', 'DOWNTIME');
+                        const lifeWarnRaw = getField(t, 'lifE_WARN', 'LIFE_WARN', 'lifeWarn', 'LIFEWARN');
 
-						const lifePercentNum = parseNumber(lifePercentRaw);
-						const lifeWarnNum = parseNumber(lifeWarnRaw);
+                        // 浣跨敤娆℃暟鍜屼笂闄�
+                        const useCount = getField(t, 'usE_COUNT', 'USE_COUNT', 'useCount');
+                        const useLimit = getField(t, 'usE_LIMIT', 'USE_LIMIT', 'useLimit');
 
-						// 棰勮瑙勫垯锛氬綋瀵垮懡姣� >= 棰勮鍊兼椂鏍囪 棰勮锛堜笌鍚庣 V_WOMDAA_BY_CUTTER 淇濇寔涓�鑷达級
-						let warnStatus = getField(t, 'status', 'STATUS') || '';
-						if (lifeWarnNum !== null && lifePercentNum !== null) {
-							warnStatus = (lifePercentNum >= lifeWarnNum) ? '棰勮' : '姝e父';
-						} else {
-							warnStatus = warnStatus || '鏈煡';
-						}
+                        // 璁$畻瀵垮懡姣旓紙浣跨敤娆℃暟/浣跨敤涓婇檺锛�
+                        let percent = '';
+                        if (
+                            useCount != null && useLimit != null &&
+                            !isNaN(useCount) && !isNaN(useLimit) &&
+                            Number(useLimit) > 0
+                        ) {
+                            percent = ((Number(useCount) / Number(useLimit)) * 100).toFixed(0) + '%';
+                        }
 
-						return {
-							id: getField(t, 'id', 'ID') || `${getField(t, 'cutteR_ID') || getField(t, 'CUTTER_ID') || ''}-${upTimeRaw || ''}`,
-							no: getField(t, 'cutteR_ID', 'CUTTER_ID', 'cutterId', 'no') || '',
-							name: getField(t, 'cutteR_NAME', 'CUTTER_NAME', 'cutterName', 'name') || '',
-							upTime: this.formatDateTime(upTimeRaw),
-							upCount: getField(t, 'uP_COUNT', 'UP_COUNT', 'upCount') ?? '',
-							downTime: this.formatDateTime(downTimeRaw),
-							downCount: getField(t, 'dowN_COUNT', 'DOWN_COUNT', 'downCount') ?? '',
-							useCount: getField(t, 'usE_COUNT', 'USE_COUNT', 'useCount') ?? '',
-							useLimit: getField(t, 'usE_LIMIT', 'USE_LIMIT', 'useLimit') ?? '',
-							lifePercent: formatPercent(lifePercentNum),
+                        // 棰勮鍊兼牸寮忓寲
+                        const parseNumber = v => {
+                            if (v === null || v === undefined || v === '') return null;
+                            const s = String(v).replace(/[,锛�%]/g, '').trim();
+                            const n = parseFloat(s);
+                            return Number.isFinite(n) ? n : null;
+                        };
+                        const formatPercent = n => {
+                            if (n === null || n === undefined || isNaN(n)) return '';
+                            if (n <= 1) return `${(n * 100).toFixed(0)}%`;
+                            return `${Number(n).toFixed(0)}%`;
+                        };
+                        const lifeWarnNum = parseNumber(lifeWarnRaw);
+
+                        // 棰勮瑙勫垯锛氬綋瀵垮懡姣� >= 棰勮鍊兼椂鏍囪 棰勮
+                        let warnStatus = getField(t, 'status', 'STATUS') || '';
+                        if (lifeWarnNum !== null && useCount != null && useLimit != null && !isNaN(useCount) && !isNaN(useLimit) && Number(useLimit) > 0) {
+                            const percentNum = Number(useCount) / Number(useLimit);
+                            warnStatus = (percentNum >= lifeWarnNum) ? '棰勮' : '姝e父';
+                        } else {
+                            warnStatus = warnStatus || '鏈煡';
+                        }
+
+                        return {
+                            id: getField(t, 'id', 'ID') || `${getField(t, 'cutteR_ID') || getField(t, 'CUTTER_ID') || ''}-${upTimeRaw || ''}`,
+                            no: getField(t, 'cutteR_ID', 'CUTTER_ID', 'cutterId', 'no') || '',
+                            name: getField(t, 'cutteR_NAME', 'CUTTER_NAME', 'cutterName', 'name') || '',
+                            upTime: this.formatDateTime(upTimeRaw),
+                            upCount: getField(t, 'uP_COUNT', 'UP_COUNT', 'upCount') ?? '',
+                            downTime: this.formatDateTime(downTimeRaw),
+                            downCount: getField(t, 'dowN_COUNT', 'DOWN_COUNT', 'downCount') ?? '',
+                            useCount: useCount ?? '',
+                            useLimit: useLimit ?? '',
+                            lifePercent: percent,
                             lifeWarn: formatPercent(lifeWarnNum),
-							warnStatus
-						};
-					});
+                            warnStatus
+                        };
+                    });
 
 					this.toolRecords = mapped;
 					const totalFromRes = Number(

--
Gitblit v1.9.3