From afb7ee6979f9172f023e418e6da9d4ecba7f3eb2 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 21 九月 2026 16:08:20 +0800
Subject: [PATCH] 徐州-鼎业智能 1.生产订单页面当前工序进度与工序生产进度列展示修改

---
 .gitignore                                               |    1 
 multiple/config.json                                     |  270 --------------------------------------
 src/views/productionManagement/productionOrder/index.vue |  132 +++++++++---------
 3 files changed, 66 insertions(+), 337 deletions(-)

diff --git a/.gitignore b/.gitignore
index 78a752d..20a972d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,6 +13,7 @@
 # Editor directories and files
 .idea
 .vscode
+.claude
 *.suo
 *.ntvs*
 *.njsproj
diff --git a/multiple/config.json b/multiple/config.json
index 509fa8d..5d1ab56 100644
--- a/multiple/config.json
+++ b/multiple/config.json
@@ -15,276 +15,6 @@
     "logo": "logo/Logo.png",
     "favicon": "favicon/favicon.ico"
   },
-  "BTYX": {
-    "env": {
-      "VITE_APP_TITLE": "娌冲崡甯お浼橀�夐鍝佹湁闄愬叕鍙�",
-      "VITE_BASE_API": "http://1.15.17.182:9056",
-      "VITE_JAVA_API": "http://1.15.17.182:9057"
-    },
-    "logo": "logo/BTYXLogo.png",
-    "favicon": "favicon/BTYXfavicon.ico"
-  },
-  "ZXZN": {
-    "env": {
-      "VITE_APP_TITLE": "娌冲崡鏅鸿姱鏅鸿兘鏈哄櫒浜烘湁闄愬叕鍙�",
-      "VITE_BASE_API": "http://192.168.0.200:9001",
-      "VITE_JAVA_API": "http://192.168.0.200:9000"
-    },
-    "logo": "logo/ZXZNLogo.png",
-    "favicon": "favicon/ZXZNfavicon.ico"
-  },
-  "SDTX": {
-    "env": {
-      "VITE_APP_TITLE": "娌冲崡鍠勯紟閫氫俊绉戞妧鏈夐檺鍏徃",
-      "VITE_BASE_API": "http://36.213.156.184:9001",
-      "VITE_JAVA_API": "http://36.213.156.184:9000"
-    },
-    "logo": "logo/SDTXLogo.png",
-    "favicon": "favicon/SDTXfavicon.ico"
-  },
-  "ZQSY": {
-    "env": {
-      "VITE_APP_TITLE": "娉芥穱瀹炰笟",
-      "VITE_BASE_API": "http://36.213.128.159:9000",
-      "VITE_JAVA_API": "http://36.213.128.159:9001"
-    },
-    "logo": "logo/ZQSYLogo.png",
-    "favicon": "favicon/ZQSYfavicon.ico"
-  },
-  "JXJH": {
-    "env": {
-      "VITE_APP_TITLE": "娴氬幙姹熸捣姘存偿鍒跺搧鏈夐檺鍏徃",
-      "VITE_BASE_API": "http://36.139.201.20:9000",
-      "VITE_JAVA_API": "http://36.139.201.20:9001"
-    },
-    "logo": "logo/JXJHLogo.png",
-    "favicon": "favicon/JXJHfavicon.ico"
-  },
-  "YTJZ": {
-    "env": {
-      "VITE_APP_TITLE": "璞嘲寤虹瓚鏉愭枡鏈夐檺鍏徃",
-      "VITE_BASE_API": "http://36.139.201.181:9000",
-      "VITE_JAVA_API": "http://36.139.201.181:9001"
-    },
-    "logo": "logo/YTJZLogo.png",
-    "favicon": "favicon/YTJZfavicon.ico"
-  },
-  "HYLQ": {
-    "env": {
-      "VITE_APP_TITLE": "鑸�歌矾妗ュ伐绋嬫湁闄愬叕鍙�",
-      "VITE_BASE_API": "http://36.139.202.111:9000",
-      "VITE_JAVA_API": "http://36.139.202.111:9001"
-    },
-    "logo": "logo/HYLQLogo.png",
-    "favicon": "favicon/HYLQfavicon.ico"
-  },
-  "QXY": {
-    "env": {
-      "VITE_APP_TITLE": "寮轰俊瀹囩數鍣ㄤ簯涓绘満",
-      "VITE_BASE_API": "http://36.134.154.10:9000",
-      "VITE_JAVA_API": "http://36.134.154.10:9001"
-    },
-    "logo": "logo/QXYLogo.png",
-    "favicon": "favicon/QXYfavicon.ico"
-  },
-  "HYJC": {
-    "env": {
-      "VITE_APP_TITLE": "鎭掓磱寤烘潗",
-      "VITE_BASE_API": "http://36.138.94.178:9000",
-      "VITE_JAVA_API": "http://36.138.94.178:9001"
-    },
-    "logo": "logo/HYJCLogo.png",
-    "favicon": "favicon/HYJCfavicon.ico"
-  },
-  "JHY": {
-    "env": {
-      "VITE_APP_TITLE": "灞辫タ鐪佹绀惧幙鏅嬪拰鍥鍝佹湁闄愬叕鍙�",
-      "VITE_BASE_API": "http://223.15.233.27:9001",
-      "VITE_JAVA_API": "http://223.15.233.27:9002"
-    },
-    "logo": "logo/JHYLogo.png",
-    "favicon": "favicon/JHYfavicon.ico"
-  },
-  "XCDQ": {
-    "env": {
-      "VITE_APP_TITLE": "鏃櫒鐢靛櫒绠$悊绯荤粺",
-      "VITE_BASE_API": "http://36.133.45.183:9001",
-      "VITE_JAVA_API": "http://36.133.45.183:9002"
-    },
-    "logo": "logo/XCDQLogo.png",
-    "favicon": "favicon/XCDQfavicon.ico"
-  },
-  "LMJN": {
-    "env": {
-      "VITE_APP_TITLE": "缁跨編鑺傝兘绠$悊绯荤粺",
-      "VITE_BASE_API": "http://1.15.17.182:9105",
-      "VITE_JAVA_API": "http://1.15.17.182:9106"
-    },
-    "logo": "logo/Logo.png",
-    "favicon": "favicon/favicon.ico"
-  },
-  "XSWH": {
-    "env": {
-      "VITE_APP_TITLE": "鍏寸洓鏃烘捣绠$悊绯荤粺",
-      "VITE_BASE_API": "http://36.138.177.225:9001",
-      "VITE_JAVA_API": "http://36.138.177.225:9002"
-    },
-    "logo": "logo/XSWHLogo.png",
-    "favicon": "favicon/XSWHfavicon.ico"
-  },
-  "TDDQ": {
-    "env": {
-      "VITE_APP_TITLE": "娌冲崡鍚屽痉鐢垫皵鏈夐檺鍏徃",
-      "VITE_BASE_API": "http://36.137.101.88:9001",
-      "VITE_JAVA_API": "http://36.137.101.88:9002"
-    },
-    "logo": "logo/TDDQLogo.png",
-    "favicon": "favicon/TDDQfavicon.ico"
-  },
-  "JHJM": {
-    "env": {
-      "VITE_APP_TITLE": "楣ゅ甯傞敠姹囩簿瀵嗘満姊版湁闄愬叕鍙�",
-      "VITE_BASE_API": "http://103.189.141.42:9001",
-      "VITE_JAVA_API": "http://103.189.141.42:9002"
-    },
-    "logo": "logo/JHJMLogo.png",
-    "favicon": "favicon/JHJMfavicon.ico"
-  },
-  "DDGW": {
-    "env": {
-      "VITE_APP_TITLE": "娌冲崡涓滃ぇ楂樻俯鑺傝兘鏉愭枡鏈夐檺鍏徃",
-      "VITE_BASE_API": "http://36.133.40.190:81",
-      "VITE_JAVA_API": "http://36.133.40.190:82"
-    },
-    "logo": "logo/DDGWLogo.png",
-    "favicon": "favicon/DDGWfavicon.ico"
-  },
-  "DDGW-TEST": {
-    "env": {
-      "VITE_APP_TITLE": "娌冲崡涓滃ぇ楂樻俯鑺傝兘鏉愭枡鏈夐檺鍏徃",
-      "VITE_BASE_API": "http://36.133.40.190:83",
-      "VITE_JAVA_API": "http://36.133.40.190:84"
-    },
-    "logo": "logo/DDGWLogo.png",
-    "favicon": "favicon/DDGWfavicon.ico"
-  },
-  "XHZG": {
-    "env": {
-      "VITE_APP_TITLE": "楣ゅ娆e紭閲嶅伐鏈夐檺鍏徃",
-      "VITE_BASE_API": "http://103.189.141.42:9001",
-      "VITE_JAVA_API": "http://103.189.141.42:9002"
-    },
-    "logo": "logo/XHZGLogo.png",
-    "favicon": "favicon/XHZGfavicon.ico"
-  },
-  "SDKS": {
-    "env": {
-      "VITE_APP_TITLE": "楣ゅ甯傚洓杈剧熆灞辫澶囨湁闄愬叕鍙�",
-      "VITE_BASE_API": "http://36.213.180.217:9520",
-      "VITE_JAVA_API": "http://36.213.180.217:9521"
-    },
-    "logo": "logo/SDKSLogo.png",
-    "favicon": "favicon/SDKSfavicon.ico"
-  },
-  "JMTM": {
-    "env": {
-      "VITE_APP_TITLE": "娌冲崡鎹风編鐗归晛绉戞妧鏈夐檺鍏徃",
-      "VITE_BASE_API": "http://36.133.40.61:81",
-      "VITE_JAVA_API": "http://36.133.40.61:82"
-    },
-    "logo": "logo/JMTMLogo.png",
-    "favicon": "favicon/JMTMfavicon.ico"
-  },
-  "CHMY": {
-    "env": {
-      "VITE_APP_TITLE": "楣ゅ鏄屽畯闀佷笟鏈夐檺鍏徃",
-      "VITE_BASE_API": "http://36.133.39.224:81",
-      "VITE_JAVA_API": "http://36.133.39.224:82"
-    },
-    "logo": "logo/CHMYLogo.png",
-    "favicon": "favicon/CHMYfavicon.ico"
-  },
-  "SJDQ": {
-    "env": {
-      "VITE_APP_TITLE": "楣ゅ甯傚北鍩庡尯鐩涗箙鐢靛櫒鏈夐檺鍏徃",
-      "VITE_BASE_API": "http://36.139.201.235:81",
-      "VITE_JAVA_API": "http://36.139.201.235:82"
-    },
-    "logo": "logo/SJDQLogo.png",
-    "favicon": "favicon/SJDQfavicon.ico"
-  },
-  "TXDQ": {
-    "env": {
-      "VITE_APP_TITLE": "楣ゅ娉颁俊鐢垫皵鏈夐檺鍏徃",
-      "VITE_BASE_API": "http://36.133.46.171:81",
-      "VITE_JAVA_API": "http://36.133.46.171:82"
-    },
-    "logo": "logo/TXDQLogo.png",
-    "favicon": "favicon/TXDQfavicon.ico"
-  },
-  "SMDQ": {
-    "env": {
-      "VITE_APP_TITLE": "楣ゅ甯傛櫉閾數鍣ㄦ湁闄愬叕鍙�",
-      "VITE_BASE_API": "http://36.137.102.125:81",
-      "VITE_JAVA_API": "http://36.137.102.125:82"
-    },
-    "logo": "logo/SMDQLogo.png",
-    "favicon": "favicon/SMDQfavicon.ico"
-  },
-  "BCKJ": {
-    "env": {
-      "VITE_APP_TITLE": "娌冲崡鍐伴┌绉戞妧鏈夐檺鍏徃",
-      "VITE_BASE_API": "http://36.133.209.54:81",
-      "VITE_JAVA_API": "http://36.133.209.54:82"
-    },
-    "logo": "logo/BCKJLogo.png",
-    "favicon": "favicon/BCKJfavicon.ico"
-  },
-  "HMCL": {
-    "env": {
-      "VITE_APP_TITLE": "楣ゅ娴╅晛鏉愭枡鏈夐檺鍏徃",
-      "VITE_BASE_API": "http://36.213.90.123:9522",
-      "VITE_JAVA_API": "http://36.213.90.123:9523"
-    },
-    "logo": "logo/HMCLLogo.png",
-    "favicon": "favicon/HMCLfavicon.ico"
-  },
-  "DTZG": {
-    "env": {
-      "VITE_APP_TITLE": "寰愬窞涓滅壒閲嶅伐绉戞妧鏈夐檺鍏徃",
-      "VITE_BASE_API": "http://36.213.90.123:9510",
-      "VITE_JAVA_API": "http://36.213.90.123:9511"
-    },
-    "logo": "logo/DTZGLogo.png",
-    "favicon": "favicon/DTZGfavicon.ico"
-  },
-  "XLZN": {
-    "env": {
-      "VITE_APP_TITLE": "姹熻嫃鏃緳鏅鸿兘绉戞妧鏈夐檺鍏徃",
-      "VITE_BASE_API": "http://36.213.90.123:9512",
-      "VITE_JAVA_API": "http://36.213.90.123:9513"
-    },
-    "logo": "logo/XLZNLogo.png",
-    "favicon": "favicon/XLZNfavicon.ico"
-  },
-  "SKJS": {
-    "env": {
-      "VITE_APP_TITLE": "寰愬窞浠�鍏嬮噾灞炲埗鍝佹湁闄愬叕鍙�",
-      "VITE_BASE_API": "http://36.213.90.123:9514",
-      "VITE_JAVA_API": "http://36.213.90.123:9515"
-    },
-    "logo": "logo/SKJSLogo.png",
-    "favicon": "favicon/SKJSFavicon.ico"
-  },
-  "YJYY": {
-    "env": {
-      "VITE_APP_TITLE": "寰愬窞姘镐匠娑插帇璁惧鏈夐檺鍏徃",
-      "VITE_BASE_API": "http://36.213.90.123:9516",
-      "VITE_JAVA_API": "http://36.213.90.123:9517"
-    },
-    "logo": "logo/YJYYLogo.png",
-    "favicon": "favicon/YJYYFavicon.ico"
-  },
   "DYZN": {
     "env": {
       "VITE_APP_TITLE": "榧庝笟鏅鸿兘绉戞妧锛堟睙鑻忥級鏈夐檺鍏徃",
diff --git a/src/views/productionManagement/productionOrder/index.vue b/src/views/productionManagement/productionOrder/index.vue
index 6697c09..b0b64f0 100644
--- a/src/views/productionManagement/productionOrder/index.vue
+++ b/src/views/productionManagement/productionOrder/index.vue
@@ -89,18 +89,21 @@
                        :status="toProgressPercentage(row?.completionStatus) >= 100 ? 'success' : ''" />
         </template>
         <template #currentProcess="{ row }">
-          <template v-if="getCurrentProcess(row)">
-            <el-tag v-if="getCurrentProcess(row).done"
-                    type="success"
-                    size="small">鍏ㄩ儴瀹屾垚</el-tag>
-            <div v-else
-                 class="current-process-name"
-                 :title="`${getCurrentProcess(row).name} 路 ${getCurrentProcess(row).pct}%`">
-              <span class="process-color-dot"
-                    :style="{ background: getCurrentProcess(row).color || '#909399' }"></span>
-              <span :style="readableTextColor(getCurrentProcess(row).color) ? { color: readableTextColor(getCurrentProcess(row).color) } : {}">{{ getCurrentProcess(row).name }}</span>
+          <div v-if="currentProcessStage(row)"
+               class="process-progress-container">
+            <div class="process-step">
+              <div class="step-content">
+                <div class="step-boxes"
+                     :title="`${currentProcessStage(row).name} ${currentProcessStage(row).percentage}%`">
+                  <div v-for="(color, i) in currentProcessStage(row).boxes"
+                       :key="i"
+                       class="step-box"
+                       :style="{ background: color }"></div>
+                </div>
+                <div class="step-name">{{ currentProcessStage(row).name }}</div>
+              </div>
             </div>
-          </template>
+          </div>
           <span v-else>-</span>
         </template>
         <template #processRouteStatus="{ row }">
@@ -110,14 +113,18 @@
                  :key="index"
                  class="process-step">
               <div class="step-content">
-                <div class="step-circle"
-                     :title="`${item.name} ${item.percentage}%`"
-                     :style="{ background: item.color || '#409EFF', opacity: item.percentage >= 100 ? 1 : item.percentage > 0 ? 0.6 : 0.25 }"></div>
+                <div class="step-boxes"
+                     :title="`${item.name} ${item.percentage}%`">
+                  <div v-for="(color, i) in processStateBoxes(row.processRouteStatus, index)"
+                       :key="i"
+                       class="step-box"
+                       :style="{ background: color }"></div>
+                </div>
                 <div class="step-name">{{ item.name }}</div>
               </div>
               <div v-if="index < row.processRouteStatus.length - 1"
                    class="step-line"
-                   :style="{ background: item.percentage >= 100 ? '#67c23a' : '#dcdfe6' }"></div>
+                   :style="{ background: processLineColor(item.percentage) }"></div>
             </div>
           </div>
           <span v-else>-</span>
@@ -314,7 +321,7 @@
       dataType: "slot",
       slot: "currentProcess",
       align: "center",
-      width: 160,
+      width: PROCESS_STEP_WIDTH,
     },
     {
       label: "閿�鍞崟鍙�",
@@ -544,40 +551,42 @@
     return "#67c23a";
   };
 
-  // hex 鑹茶浆 rgba锛堢敤浜庡厜鏅�/娣″簳锛夛紝闈� hex 杩斿洖绌轰覆
-  const hexToRgba = (hex, alpha) => {
-    if (typeof hex !== "string") return "";
-    const m = hex.match(/^#([0-9a-f]{3}|[0-9a-f]{6})$/i);
-    if (!m) return "";
-    let n = m[1];
-    if (n.length === 3) n = n.split("").map(c => c + c).join("");
-    const v = parseInt(n, 16);
-    return `rgba(${(v >> 16) & 255}, ${(v >> 8) & 255}, ${v & 255}, ${alpha})`;
+  // 宸ュ簭/闃舵涓夋�侀厤鑹诧細宸插畬鎴愮豢銆佽繘琛屼腑钃濄�佹湭寮�濮嬬伆
+  const STAGE_DONE_COLOR = "#67c23a";
+  const STAGE_DOING_COLOR = "#409eff";
+  const STAGE_IDLE_COLOR = "#dcdfe6";
+
+  // 姣忛亾宸ュ簭涓�涓笁鎬佹缁勶細寰呭紑濮� / 鐢熶骇涓� / 鐢熶骇瀹屾垚銆�
+  // 0% 鏃朵寒銆屽緟寮�濮嬨�嶏紝寮�宸ユ湭瀹屽伐鏃躲�屽緟寮�濮嬨�嶈浆缁裤�併�岀敓浜т腑銆嶄寒钃濓紝瀹屽伐鍚庝笁涓鍏ㄧ豢锛�
+  // 鍓嶄竴閬撳伐搴忔病瀹屽伐锛屽悗闈㈢殑宸ュ簭涓変釜妗嗗叏鐏帮紙涓婁竴姝ヤ笉瀹屾垚涓嬩竴姝ヤ笉浜級
+  const processStateBoxes = (list, index) => {
+    const pct = toProgressPercentage(list?.[index]?.percentage);
+    if (pct >= 100) return [STAGE_DONE_COLOR, STAGE_DONE_COLOR, STAGE_DONE_COLOR];
+    const currentIndex = (list || []).findIndex(
+      item => toProgressPercentage(item.percentage) < 100
+    );
+    if (index > currentIndex) return [STAGE_IDLE_COLOR, STAGE_IDLE_COLOR, STAGE_IDLE_COLOR];
+    return pct > 0
+      ? [STAGE_DONE_COLOR, STAGE_DOING_COLOR, STAGE_IDLE_COLOR]
+      : [STAGE_DOING_COLOR, STAGE_IDLE_COLOR, STAGE_IDLE_COLOR];
   };
 
-  // 杩囨祬鐨勫伐搴忚壊鍦ㄧ櫧搴曚笂鏂囧瓧涓嶅彲璇伙紝鍥為��甯歌鏂囧瓧鑹�
-  const isLightColor = hex => {
-    const rgba = hexToRgba(hex, 1);
-    if (!rgba) return false;
-    const [r, g, b] = rgba.match(/\d+/g).map(Number);
-    return (0.299 * r + 0.587 * g + 0.114 * b) / 255 > 0.72;
-  };
-  const readableTextColor = color =>
-    !color || isLightColor(color) ? "" : color;
-
-  // 褰撳墠宸ュ簭锛氱涓�閬撳畬鎴愬害涓嶈冻100%鐨勫伐搴忥紱鍏ㄩ儴瀹屾垚杩斿洖 done
-  const getCurrentProcess = row => {
-    const list = row.processRouteStatus;
+  // 褰撳墠宸ュ簭锛氱涓�閬撴湭瀹屽伐鐨勫伐搴忥紝鍙粰瀹冧竴缁勪笁鎬佹锛涘叏閮ㄥ畬宸ユ椂钀藉湪鏈�鍚庝竴閬撳伐搴忎笂
+  const currentProcessStage = row => {
+    const list = row?.processRouteStatus;
     if (!Array.isArray(list) || list.length === 0) return null;
-    const current = list.find(item => toProgressPercentage(item.percentage) < 100);
-    if (!current) return { done: true };
+    let index = list.findIndex(item => toProgressPercentage(item.percentage) < 100);
+    if (index === -1) index = list.length - 1;
     return {
-      done: false,
-      name: current.name || "鏈煡宸ュ簭",
-      color: current.color || "",
-      pct: toProgressPercentage(current.percentage),
+      name: list[index].name || "鏈煡宸ュ簭",
+      percentage: toProgressPercentage(list[index].percentage),
+      boxes: processStateBoxes(list, index),
     };
   };
+
+  // 宸ュ簭涔嬮棿鐨勮繛绾匡細鍓嶄竴閬撳畬宸ユ墠鐐逛寒
+  const processLineColor = val =>
+    toProgressPercentage(val) >= 100 ? STAGE_DONE_COLOR : STAGE_IDLE_COLOR;
 
   // 浜ゆ湡棰勮鐨勬枃瀛楁彁绀猴紙棰滆壊涔嬪鐨勬棤闅滅鍐椾綑鎸囩ず锛�
   const deliveryHint = row => {
@@ -949,22 +958,6 @@
     margin-top: unset;
   }
 
-  .current-process-name {
-    display: inline-flex;
-    flex-direction: column;
-    align-items: stretch; // 鑹叉潯瀹藉害鐢辨枃瀛楁拺寮�锛屼袱鑰呯瓑瀹�
-    padding: 4px 0;
-    font-size: 14px;
-    color: #303133;
-
-    .process-color-dot {
-      display: block;
-      height: 16px;
-      border-radius: 4px;
-      margin-bottom: 6px;
-    }
-  }
-
   .process-progress-container {
     display: inline-flex;
     align-items: center;
@@ -984,12 +977,17 @@
         flex-shrink: 0;
         z-index: 1;
 
-        .step-circle {
-          width: 36px;
-          height: 36px;
-          border-radius: 50%;
+        .step-boxes {
+          display: flex;
+          gap: 4px;
+          margin-bottom: 6px;
+        }
+
+        .step-box {
+          width: 20px;
+          height: 20px;
+          border-radius: 4px;
           box-sizing: border-box;
-          margin-bottom: 4px;
         }
 
         .step-name {
@@ -1004,12 +1002,12 @@
       }
 
       .step-line {
-        width: 130px; // 璐┛鐩搁偦涓ゅ渾蹇冿紝涓ょ琚渾鍦堬紙z-index鏇撮珮锛夐伄鎸�
+        width: 130px; // 璐┛鐩搁偦涓ょ粍妗嗭紝涓ょ琚缁勶紙z-index鏇撮珮锛夐伄鎸�
         height: 2px;
         border-radius: 1px;
         background-color: #dcdfe6;
         flex-shrink: 0;
-        margin: 17px -48px 0; // 绾垮湪34px妲戒綅灞呬腑锛�(130-34)/2=48锛涢《杈�17px瀵瑰噯鍦嗗績
+        margin: 9px -48px 0; // 绾垮湪34px妲戒綅灞呬腑锛�(130-34)/2=48锛涢《杈�9px瀵瑰噯20px妗嗙粍鐨勫瀭鐩翠腑蹇�
       }
     }
   }

--
Gitblit v1.9.3