From 173855b299e89930b5ea2ff9a9295fde9d0f55b5 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期六, 07 十一月 2026 08:51:43 +0800
Subject: [PATCH] feat: 同步质检、生产、销售、财务与人事前端功能

---
 src/components/quality/engine/rule-engine.ts |   23 ++++++++++++++++-------
 1 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/src/components/quality/engine/rule-engine.ts b/src/components/quality/engine/rule-engine.ts
index 9581512..0b871f2 100644
--- a/src/components/quality/engine/rule-engine.ts
+++ b/src/components/quality/engine/rule-engine.ts
@@ -399,6 +399,15 @@
   return leftText === rightText ? 0 : leftText > rightText ? 1 : -1;
 }
 
+function compareNumbers(left: unknown, right: unknown): number {
+  const leftNumber = toNumber(left);
+  const rightNumber = toNumber(right);
+  if (!Number.isFinite(leftNumber) || !Number.isFinite(rightNumber)) {
+    throw new RuleRuntimeError('鏁板�兼瘮杈冪己灏戞湁鏁堝疄娴嬪�兼垨瑙勬牸闄愬��');
+  }
+  return leftNumber === rightNumber ? 0 : leftNumber > rightNumber ? 1 : -1;
+}
+
 /** 鍒ゅ畾缁撴灉绫诲彇鍊肩粺涓�鎴� PASS / FAIL锛氬吋瀹逛腑鏂囥�佸竷灏斾笌鏁板瓧 1/0 */
 const PASS_TOKENS = new Set(['PASS', 'TRUE', '鍚堟牸', 'OK', '1', '鏄�']);
 const FAIL_TOKENS = new Set(['FAIL', 'FALSE', '涓嶅悎鏍�', 'NG', '0', '鍚�']);
@@ -566,8 +575,8 @@
     case 'between': {
       const value = evaluateNode(node.value, context);
       const hit =
-        compare(value, evaluateNode(node.lower, context)) >= 0 &&
-        compare(value, evaluateNode(node.upper, context)) <= 0;
+        compareNumbers(value, evaluateNode(node.lower, context)) >= 0 &&
+        compareNumbers(value, evaluateNode(node.upper, context)) <= 0;
       return node.negated ? !hit : hit;
     }
     case 'in': {
@@ -608,16 +617,16 @@
       return compare(left, right) !== 0;
     }
     case '>': {
-      return compare(left, right) > 0;
+      return compareNumbers(left, right) > 0;
     }
     case '>=': {
-      return compare(left, right) >= 0;
+      return compareNumbers(left, right) >= 0;
     }
     case '<': {
-      return compare(left, right) < 0;
+      return compareNumbers(left, right) < 0;
     }
     case '<=': {
-      return compare(left, right) <= 0;
+      return compareNumbers(left, right) <= 0;
     }
     case '+': {
       const leftNumber = toNumber(left);
@@ -708,4 +717,4 @@
   visit(node);
   // 缁熻鍑芥暟浣滅敤鍦ㄦ暟缁勮矾寰勪笂锛岃繖閲屽幓鎺夋湯绔瓧娈靛彧淇濈暀鏁扮粍鏈韩
   return [...new Set(paths.map((path) => parsePath(path).join('.')))];
-}
\ No newline at end of file
+}

--
Gitblit v1.9.3