From 8d3b1c06ed0ef0803c31085cb3e90aa6d3d622f0 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 11 六月 2026 14:51:13 +0800
Subject: [PATCH] refactor(workOrder): 重构工单管理页面为父子表格结构
---
src/api/productionManagement/workOrder.js | 8
docs/生产工单模块前端联调文档.md | 505 +++++++++++++++++++++++++++++
vite.config.js | 2
src/views/productionManagement/workOrderManagement/index.vue | 495 ++++++++++++++++++----------
4 files changed, 828 insertions(+), 182 deletions(-)
diff --git "a/docs/\347\224\237\344\272\247\345\267\245\345\215\225\346\250\241\345\235\227\345\211\215\347\253\257\350\201\224\350\260\203\346\226\207\346\241\243.md" "b/docs/\347\224\237\344\272\247\345\267\245\345\215\225\346\250\241\345\235\227\345\211\215\347\253\257\350\201\224\350\260\203\346\226\207\346\241\243.md"
new file mode 100644
index 0000000..02b36ac
--- /dev/null
+++ "b/docs/\347\224\237\344\272\247\345\267\245\345\215\225\346\250\241\345\235\227\345\211\215\347\253\257\350\201\224\350\260\203\346\226\207\346\241\243.md"
@@ -0,0 +1,505 @@
+# 鐢熶骇宸ュ崟妯″潡鍓嶇鑱旇皟鏂囨。
+
+> 鏂囨。鐢熸垚鏃ユ湡锛�2026-06-11
+> 閫傜敤鍒嗘敮锛歞ev_澶╂触_涓叴瀹炲己
+
+---
+
+## 鍙樻洿璁板綍
+
+| 鏃ユ湡 | 鍙樻洿鍐呭 | 褰卞搷鑼冨洿 |
+|------|----------|----------|
+| 2026-06-11 | /page鎺ュ彛鏀逛负鎸夎鍗曞垎缁勮仛鍚� | 鍒楄〃椤靛睍绀洪�昏緫璋冩暣 |
+| 2026-06-11 | 鏂板/byOrder/{orderId}鎺ュ彛 | 璁㈠崟璇︽儏椤靛伐鍗曞垪琛� |
+
+---
+
+## 涓�銆佹帴鍙e垪琛�
+
+| 鎺ュ彛鍚嶇О | 鎺ュ彛璺緞 | 璇锋眰鏂瑰紡 | 璇存槑 |
+|----------|----------|----------|------|
+| 宸ュ崟鍒嗛〉鏌ヨ | `/productionOperationTask/page` | GET | 鎸夌敓浜ц鍗曠淮搴﹀垎缁勫睍绀� |
+| 璁㈠崟宸ュ崟鍒楄〃 | `/productionOperationTask/byOrder/{orderId}` | GET | 鏍规嵁璁㈠崟ID鏌ヨ宸ュ崟鏄庣粏 |
+
+---
+
+## 浜屻�佹帴鍙h鎯�
+
+### 2.1 宸ュ崟鍒嗛〉鏌ヨ
+
+#### 鍩烘湰淇℃伅
+
+```
+GET /productionOperationTask/page
+```
+
+#### 璇锋眰鍙傛暟锛圦uery锛�
+
+| 鍙傛暟鍚� | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+|--------|------|------|------|
+| current | Number | 鍚� | 褰撳墠椤电爜锛岄粯璁�1 |
+| size | Number | 鍚� | 姣忛〉鏉℃暟锛岄粯璁�10 |
+| npsNo | String | 鍚� | 鐢熶骇璁㈠崟鍙凤紝妯$硦鏌ヨ |
+| productionOrderId | Number | 鍚� | 鐢熶骇璁㈠崟ID锛岀簿纭尮閰� |
+
+#### 璇锋眰绀轰緥
+
+```javascript
+// 鍩虹鍒嗛〉鏌ヨ
+axios.get('/productionOperationTask/page', {
+ params: {
+ current: 1,
+ size: 10
+ }
+})
+
+// 鎸夎鍗曞彿绛涢��
+axios.get('/productionOperationTask/page', {
+ params: {
+ current: 1,
+ size: 10,
+ npsNo: 'SC202606'
+ }
+})
+```
+
+#### 鍝嶅簲缁撴瀯
+
+```json
+{
+ "code": 200,
+ "msg": "鎿嶄綔鎴愬姛",
+ "data": {
+ "records": [
+ {
+ "productionOrderId": 123,
+ "npsNo": "SC20260611001",
+ "endOrder": false,
+ "productName": "鐢电嚎鐢电紗",
+ "model": "RVV 3*2.5",
+ "unit": "绫�",
+ "operationName": "缁炵嚎,缁濈紭,鎴愮紗",
+ "productionTaskCount": 3,
+ "planQuantity": 1000.00,
+ "completeQuantity": 500.00,
+ "goodQuantity": 500.00,
+ "scrapQty": 10.00,
+ "completionStatus": 50.00,
+ "type": 1,
+ "workOrderType": "姝e父",
+ "workOrderNo": "GD20260611001,GD20260611002,GD20260611003",
+ "planStartTime": "2026-06-10",
+ "planEndTime": "2026-06-15",
+ "actualStartTime": "2026-06-11",
+ "actualEndTime": null,
+ "status": 3
+ }
+ ],
+ "total": 100,
+ "current": 1,
+ "size": 10
+ }
+}
+```
+
+#### 鍝嶅簲瀛楁璇存槑
+
+| 瀛楁鍚� | 绫诲瀷 | 璇存槑 | 鍓嶇灞曠ず寤鸿 |
+|--------|------|------|--------------|
+| productionOrderId | Number | 鐢熶骇璁㈠崟ID | 鐢ㄤ簬璺宠浆璁㈠崟璇︽儏 |
+| npsNo | String | 鐢熶骇璁㈠崟鍙� | 鍒楄〃涓绘爣棰� |
+| endOrder | Boolean | 鏄惁缁撴潫 | 宸茬粨鏉熸椂鏄剧ず"宸茬粨鏉�"鏍囩 |
+| productName | String | 浜у搧鍚嶇О | 鍒楄〃鍓爣棰� |
+| model | String | 瑙勬牸鍨嬪彿 | 浜у搧瑙勬牸灞曠ず |
+| unit | String | 鍗曚綅 | 鏁伴噺鍗曚綅 |
+| operationName | String | 宸ュ簭鍚嶇О锛堥�楀彿鍒嗛殧锛� | 宸ュ簭鍒楄〃灞曠ず |
+| productionTaskCount | Number | 宸ュ崟浠诲姟鏁伴噺 | 鏄剧ず"鍏盭涓伐鍗�" |
+| planQuantity | Number | 璁″垝鏁伴噺锛堣鍗曠骇锛� | 杩涘害鏉℃�绘暟 |
+| completeQuantity | Number | 瀹屾垚鏁伴噺锛堣鍗曠骇锛� | 杩涘害鏉″凡瀹屾垚 |
+| goodQuantity | Number | 鑹搧鏁伴噺 | 鑹搧缁熻 |
+| scrapQty | Number | 鎶ュ簾鏁伴噺 | 鎶ュ簾缁熻锛堢孩鑹叉爣璁帮級 |
+| completionStatus | Number | 瀹屾垚杩涘害鐧惧垎姣� | 杩涘害鏉℃暟鍊� |
+| type | Number | 宸ュ簭绫诲瀷 | 0=璁℃椂锛�1=璁′欢 |
+| workOrderType | String | 宸ュ崟绫诲瀷 | "姝e父"鎴�"杩斿伐杩斾慨" |
+| workOrderNo | String | 宸ュ崟缂栧彿锛堥�楀彿鍒嗛殧锛� | 鐐瑰嚮鍙睍寮�鏌ョ湅 |
+| planStartTime | String | 璁″垝寮�濮嬫椂闂� | 鏍煎紡锛歒YYY-MM-DD |
+| planEndTime | String | 璁″垝缁撴潫鏃堕棿 | 鏍煎紡锛歒YYY-MM-DD |
+| actualStartTime | String | 瀹為檯寮�濮嬫椂闂� | 鏍煎紡锛歒YYY-MM-DD |
+| actualEndTime | String | 瀹為檯缁撴潫鏃堕棿 | 鏍煎紡锛歒YYY-MM-DD |
+| status | Number | 鐘舵�� | 瑙佺姸鎬佹灇涓捐〃 |
+
+---
+
+### 2.2 璁㈠崟宸ュ崟鍒楄〃
+
+#### 鍩烘湰淇℃伅
+
+```
+GET /productionOperationTask/byOrder/{orderId}
+```
+
+#### 璇锋眰鍙傛暟锛圥ath锛�
+
+| 鍙傛暟鍚� | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+|--------|------|------|------|
+| orderId | Number | 鏄� | 鐢熶骇璁㈠崟ID |
+
+#### 璇锋眰绀轰緥
+
+```javascript
+// 鏌ヨ璁㈠崟ID涓�123鐨勬墍鏈夊伐鍗�
+axios.get('/productionOperationTask/byOrder/123')
+```
+
+#### 鍝嶅簲缁撴瀯
+
+```json
+{
+ "code": 200,
+ "msg": "鎿嶄綔鎴愬姛",
+ "data": [
+ {
+ "id": 1,
+ "workOrderNo": "GD20260611001",
+ "planStartTime": "2026-06-10",
+ "planEndTime": "2026-06-12",
+ "actualStartTime": "2026-06-11",
+ "actualEndTime": null,
+ "status": 3,
+ "productionOrderId": 123,
+ "planQuantity": 500.00,
+ "completeQuantity": 300.00,
+ "npsNo": "SC20260611001",
+ "endOrder": false,
+ "productName": "鐢电嚎鐢电紗",
+ "model": "RVV 3*2.5",
+ "unit": "绫�",
+ "operationName": "缁炵嚎",
+ "type": 1,
+ "workOrderType": "姝e父",
+ "scrapQty": 5.00,
+ "completionStatus": 60.00,
+ "userNames": "寮犱笁,鏉庡洓"
+ },
+ {
+ "id": 2,
+ "workOrderNo": "FG20260611001",
+ "planStartTime": "2026-06-12",
+ "planEndTime": "2026-06-15",
+ "actualStartTime": "2026-06-13",
+ "actualEndTime": null,
+ "status": 3,
+ "productionOrderId": 123,
+ "planQuantity": 100.00,
+ "completeQuantity": 50.00,
+ "npsNo": "SC20260611001",
+ "endOrder": false,
+ "productName": "鐢电嚎鐢电紗",
+ "model": "RVV 3*2.5",
+ "unit": "绫�",
+ "operationName": "缁濈紭",
+ "type": 0,
+ "workOrderType": "杩斿伐杩斾慨",
+ "scrapQty": 2.00,
+ "completionStatus": 50.00,
+ "userNames": "鐜嬩簲"
+ }
+ ]
+}
+```
+
+#### 鍝嶅簲瀛楁璇存槑
+
+| 瀛楁鍚� | 绫诲瀷 | 璇存槑 | 鍓嶇灞曠ず寤鸿 |
+|--------|------|------|--------------|
+| id | Number | 宸ュ崟ID | 鐢ㄤ簬鎶ュ伐銆佽鎯呰烦杞� |
+| workOrderNo | String | 宸ュ崟缂栧彿 | 鍒楄〃涓绘爣棰� |
+| planStartTime | String | 璁″垝寮�濮嬫椂闂� | 鏃堕棿鑼冨洿灞曠ず |
+| planEndTime | String | 璁″垝缁撴潫鏃堕棿 | 鏃堕棿鑼冨洿灞曠ず |
+| actualStartTime | String | 瀹為檯寮�濮嬫椂闂� | 瀹為檯鏃堕棿灞曠ず |
+| actualEndTime | String | 瀹為檯缁撴潫鏃堕棿 | 瀹為檯鏃堕棿灞曠ず |
+| status | Number | 宸ュ崟鐘舵�� | 鐘舵�佹爣绛� |
+| productionOrderId | Number | 鐢熶骇璁㈠崟ID | 鍏宠仈璁㈠崟 |
+| planQuantity | Number | 璁″垝鏁伴噺锛堝伐鍗曠骇锛� | 杩涘害鏉℃�绘暟 |
+| completeQuantity | Number | 瀹屾垚鏁伴噺锛堝伐鍗曠骇锛� | 杩涘害鏉″凡瀹屾垚 |
+| npsNo | String | 鐢熶骇璁㈠崟鍙� | 璁㈠崟鍙峰睍绀� |
+| endOrder | Boolean | 鏄惁缁撴潫 | 缁撴潫鏍囩 |
+| productName | String | 浜у搧鍚嶇О | 浜у搧淇℃伅 |
+| model | String | 瑙勬牸鍨嬪彿 | 瑙勬牸灞曠ず |
+| unit | String | 鍗曚綅 | 鏁伴噺鍗曚綅 |
+| operationName | String | 宸ュ簭鍚嶇О | 鍗曚釜宸ュ簭 |
+| type | Number | 宸ュ簭绫诲瀷 | 0=璁℃椂锛�1=璁′欢 |
+| workOrderType | String | 宸ュ崟绫诲瀷 | 杩斿伐杩斾慨鐢ㄧ孩鑹叉爣璁� |
+| scrapQty | Number | 鎶ュ簾鏁伴噺 | 鎶ュ簾缁熻 |
+| completionStatus | Number | 瀹屾垚杩涘害鐧惧垎姣� | 杩涘害鏉℃暟鍊� |
+| userNames | String | 鎶ュ伐浜哄憳锛堥�楀彿鍒嗛殧锛� | 浜哄憳鍒楄〃 |
+
+---
+
+## 涓夈�佹灇涓惧�兼槧灏�
+
+### 3.1 宸ュ崟鐘舵��
+
+| 鐘舵�佸�� | 鏂囨 | 鏍囩棰滆壊寤鸿 |
+|--------|------|--------------|
+| 1 | 寰呯‘璁� | 鐏拌壊/榛樿 |
+| 2 | 寰呯敓浜� | 钃濊壊/info |
+| 3 | 鐢熶骇涓� | 缁胯壊/success |
+| 4 | 宸茬敓浜� | 娣辩豢鑹�/success-dark |
+
+#### 鍓嶇鐘舵�佹槧灏勭ず渚�
+
+```javascript
+const statusMap = {
+ 1: { text: '寰呯‘璁�', color: 'default' },
+ 2: { text: '寰呯敓浜�', color: 'info' },
+ 3: { text: '鐢熶骇涓�', color: 'success' },
+ 4: { text: '宸茬敓浜�', color: 'success-dark' }
+}
+
+function getStatusTag(status) {
+ return statusMap[status] || { text: '鏈煡', color: 'default' }
+}
+```
+
+### 3.2 宸ュ簭绫诲瀷
+
+| 绫诲瀷鍊� | 鏂囨 | 璇存槑 |
+|--------|------|------|
+| 0 | 璁℃椂 | 鎸夊伐鏃惰绠楀伐璧� |
+| 1 | 璁′欢 | 鎸変骇閲忚绠楀伐璧� |
+
+```javascript
+const typeMap = {
+ 0: '璁℃椂',
+ 1: '璁′欢'
+}
+```
+
+### 3.3 宸ュ崟绫诲瀷鍒ゆ柇
+
+| 绫诲瀷 | 鍒ゆ柇瑙勫垯 | 鏍囩棰滆壊寤鸿 |
+|------|----------|--------------|
+| 姝e父 | workOrderNo 涓嶄互 'FG' 寮�澶� | 榛樿鑹� |
+| 杩斿伐杩斾慨 | workOrderNo 浠� 'FG' 寮�澶� | 绾㈣壊/error |
+
+```javascript
+function getWorkOrderType(workOrderNo) {
+ return workOrderNo?.startsWith('FG') ? '杩斿伐杩斾慨' : '姝e父'
+}
+```
+
+---
+
+## 鍥涖�侀〉闈㈣璁″缓璁�
+
+### 4.1 宸ュ崟鍒楄〃椤碉紙浣跨敤 /page 鎺ュ彛锛�
+
+#### 琛ㄦ牸鍒楄璁�
+
+| 鍒楀悕 | 瀛楁 | 瀹藉害 | 璇存槑 |
+|------|------|------|------|
+| 鐢熶骇璁㈠崟鍙� | npsNo | 150px | 鍙偣鍑昏烦杞鎯� |
+| 浜у搧鍚嶇О | productName | 120px | - |
+| 瑙勬牸鍨嬪彿 | model | 150px | - |
+| 宸ュ簭 | operationName | 200px | 澶氫釜宸ュ簭閫楀彿鍒嗛殧 |
+| 宸ュ崟绫诲瀷 | workOrderType | 100px | 姝e父/杩斿伐杩斾慨 |
+| 璁″垝鏁伴噺 | planQuantity | 100px | 璁㈠崟绾у埆 |
+| 瀹屾垚鏁伴噺 | completeQuantity | 100px | 璁㈠崟绾у埆 |
+| 瀹屾垚杩涘害 | completionStatus | 120px | 杩涘害鏉�+鐧惧垎姣� |
+| 鎶ュ簾鏁伴噺 | scrapQty | 80px | 绾㈣壊鏍囪 |
+| 宸ュ崟鏁� | productionTaskCount | 80px | 鍏盭涓伐鍗� |
+| 鐘舵�� | status | 80px | 鐘舵�佹爣绛� |
+| 鎿嶄綔 | - | 150px | 鏌ョ湅璇︽儏銆佹姤宸ョ瓑 |
+
+#### 杩涘害鏉″睍绀�
+
+```javascript
+// 浣跨敤杩涘害鏉$粍浠�
+<Progress
+ percent={item.completionStatus}
+ strokeColor="#52c41a"
+ format={percent => `${percent}%`}
+/>
+```
+
+### 4.2 璁㈠崟璇︽儏椤靛伐鍗曞垪琛紙浣跨敤 /byOrder/{orderId} 鎺ュ彛锛�
+
+#### 琛ㄦ牸鍒楄璁�
+
+| 鍒楀悕 | 瀛楁 | 瀹藉害 | 璇存槑 |
+|------|------|------|------|
+| 宸ュ崟缂栧彿 | workOrderNo | 150px | 涓绘爣璇� |
+| 宸ュ簭鍚嶇О | operationName | 120px | 鍗曚釜宸ュ簭 |
+| 宸ュ崟绫诲瀷 | workOrderType | 100px | 姝e父/杩斿伐杩斾慨 |
+| 宸ュ簭绫诲瀷 | type | 80px | 璁℃椂/璁′欢 |
+| 璁″垝鏁伴噺 | planQuantity | 100px | 宸ュ崟绾у埆 |
+| 瀹屾垚鏁伴噺 | completeQuantity | 100px | 宸ュ崟绾у埆 |
+| 瀹屾垚杩涘害 | completionStatus | 120px | 杩涘害鏉� |
+| 鎶ュ簾鏁伴噺 | scrapQty | 80px | 绾㈣壊鏍囪 |
+| 鎶ュ伐浜哄憳 | userNames | 150px | 澶氫汉閫楀彿鍒嗛殧 |
+| 璁″垝鏃堕棿 | planStartTime ~ planEndTime | 180px | 鏃堕棿鑼冨洿 |
+| 瀹為檯鏃堕棿 | actualStartTime ~ actualEndTime | 180px | 鏃堕棿鑼冨洿 |
+| 鐘舵�� | status | 80px | 鐘舵�佹爣绛� |
+| 鎿嶄綔 | - | 150px | 鎶ュ伐銆佹祦杞崱绛� |
+
+---
+
+## 浜斻�佷袱涓帴鍙f暟鎹樊寮傚姣�
+
+| 瀵规瘮椤� | /page 鎺ュ彛 | /byOrder/{orderId} 鎺ュ彛 |
+|--------|------------|-------------------------|
+| 鏁版嵁缁村害 | 璁㈠崟姹囨�� | 宸ュ崟鏄庣粏 |
+| planQuantity | 璁㈠崟璁″垝鏁� | 宸ュ崟璁″垝鏁� |
+| completeQuantity | 璁㈠崟瀹屾垚鏁� | 宸ュ崟瀹屾垚鏁� |
+| completionStatus | 璁㈠崟杩涘害 | 宸ュ崟杩涘害 |
+| operationName | 澶氬伐搴忚仛鍚� | 鍗曚釜宸ュ簭 |
+| workOrderNo | 澶氬伐鍗曡仛鍚� | 鍗曚釜宸ュ崟 |
+| userNames | 鏃� | 鏈夋姤宸ヤ汉鍛� |
+| 鐢ㄩ�� | 鍒楄〃姹囨�婚〉 | 璇︽儏鏄庣粏椤� |
+
+---
+
+## 鍏�佸墠绔皟鐢ㄦ敞鎰忎簨椤�
+
+### 6.1 鍒嗛〉鍙傛暟
+
+- `/page` 鎺ュ彛鏀寔鍒嗛〉锛岄渶浼� `current` 鍜� `size`
+- `/byOrder/{orderId}` 鎺ュ彛涓嶅垎椤碉紝杩斿洖鍏ㄩ儴宸ュ崟鍒楄〃
+
+### 6.2 鏁伴噺瀛楁绮惧害
+
+- 鎵�鏈夋暟閲忓瓧娈典负 `BigDecimal` 绫诲瀷锛屽墠绔睍绀烘椂淇濈暀2浣嶅皬鏁�
+- 瀹屾垚杩涘害 `completionStatus` 宸蹭负鐧惧垎姣旀暟鍊硷紙濡�50.00琛ㄧず50%锛�
+
+### 6.3 鏃堕棿瀛楁鏍煎紡
+
+- 鎵�鏈夋椂闂村瓧娈典负 `LocalDate` 鏍煎紡锛歚YYYY-MM-DD`
+- 鏃犳椂闂村�兼椂杩斿洖 `null`锛屽墠绔渶鍋氱┖鍊煎鐞�
+
+### 6.4 宸ュ崟绫诲瀷鍒ゆ柇
+
+- 鎺ュ彛宸茶繑鍥� `workOrderType` 瀛楁锛屾棤闇�鍓嶇鍒ゆ柇
+- 杩斿伐杩斾慨宸ュ崟寤鸿浣跨敤绾㈣壊鏍囩绐佸嚭鏄剧ず
+
+### 6.5 鎶ュ伐浜哄憳瀛楁
+
+- `userNames` 涓洪�楀彿鍒嗛殧瀛楃涓诧紝鍙兘涓虹┖
+- 澶氫汉鏃跺缓璁娇鐢ㄦ爣绛炬垨澶村儚鍒楄〃灞曠ず
+
+---
+
+## 涓冦�佸父瑙侀棶棰樺鐞�
+
+### 7.1 杩涘害涓虹┖鎴栭櫎闆�
+
+- `completionStatus` 宸插湪SQL涓鐞嗛櫎闆舵儏鍐�
+- 鑻ヨ鍒掓暟閲忎负0锛岃繘搴︽樉绀轰负0
+
+### 7.2 宸ュ崟鍙蜂负绌�
+
+- `workOrderNo` 涓哄繀濉瓧娈碉紝涓嶄細涓虹┖
+- 鑻ヨ仛鍚堝睍绀烘椂澶氫釜宸ュ崟鍙风敤閫楀彿鍒嗛殧
+
+### 7.3 鎶ュ簾鏁伴噺灞曠ず
+
+- `scrapQty` 涓虹疮璁℃姤搴熸暟閲�
+- 寤鸿浣跨敤绾㈣壊瀛椾綋鎴栬鍛婂浘鏍囨爣璇�
+
+---
+
+## 鍏�丮ock鏁版嵁绀轰緥
+
+### 8.1 /page 鎺ュ彛Mock
+
+```json
+{
+ "code": 200,
+ "data": {
+ "records": [
+ {
+ "productionOrderId": 1,
+ "npsNo": "SC20260611001",
+ "endOrder": false,
+ "productName": "鐢电嚎鐢电紗",
+ "model": "RVV 3*2.5",
+ "unit": "绫�",
+ "operationName": "缁炵嚎,缁濈紭,鎴愮紗",
+ "productionTaskCount": 3,
+ "planQuantity": 1000.00,
+ "completeQuantity": 500.00,
+ "goodQuantity": 500.00,
+ "scrapQty": 10.00,
+ "completionStatus": 50.00,
+ "type": 1,
+ "workOrderType": "姝e父",
+ "workOrderNo": "GD20260611001,GD20260611002,GD20260611003",
+ "planStartTime": "2026-06-10",
+ "planEndTime": "2026-06-15",
+ "actualStartTime": "2026-06-11",
+ "actualEndTime": null,
+ "status": 3
+ }
+ ],
+ "total": 1,
+ "current": 1,
+ "size": 10
+ }
+}
+```
+
+### 8.2 /byOrder/{orderId} 鎺ュ彛Mock
+
+```json
+{
+ "code": 200,
+ "data": [
+ {
+ "id": 1,
+ "workOrderNo": "GD20260611001",
+ "planStartTime": "2026-06-10",
+ "planEndTime": "2026-06-12",
+ "actualStartTime": "2026-06-11",
+ "actualEndTime": null,
+ "status": 3,
+ "productionOrderId": 1,
+ "planQuantity": 500.00,
+ "completeQuantity": 300.00,
+ "npsNo": "SC20260611001",
+ "endOrder": false,
+ "productName": "鐢电嚎鐢电紗",
+ "model": "RVV 3*2.5",
+ "unit": "绫�",
+ "operationName": "缁炵嚎",
+ "type": 1,
+ "workOrderType": "姝e父",
+ "scrapQty": 5.00,
+ "completionStatus": 60.00,
+ "userNames": "寮犱笁,鏉庡洓"
+ },
+ {
+ "id": 2,
+ "workOrderNo": "FG20260611001",
+ "planStartTime": "2026-06-12",
+ "planEndTime": "2026-06-15",
+ "actualStartTime": "2026-06-13",
+ "actualEndTime": null,
+ "status": 3,
+ "productionOrderId": 1,
+ "planQuantity": 100.00,
+ "completeQuantity": 50.00,
+ "npsNo": "SC20260611001",
+ "endOrder": false,
+ "productName": "鐢电嚎鐢电紗",
+ "model": "RVV 3*2.5",
+ "unit": "绫�",
+ "operationName": "缁濈紭",
+ "type": 0,
+ "workOrderType": "杩斿伐杩斾慨",
+ "scrapQty": 2.00,
+ "completionStatus": 50.00,
+ "userNames": "鐜嬩簲"
+ }
+ ]
+}
+```
\ No newline at end of file
diff --git a/src/api/productionManagement/workOrder.js b/src/api/productionManagement/workOrder.js
index b3050c9..3b4052a 100644
--- a/src/api/productionManagement/workOrder.js
+++ b/src/api/productionManagement/workOrder.js
@@ -95,3 +95,11 @@
params: query,
});
}
+
+// 鏍规嵁璁㈠崟ID鑾峰彇宸ュ崟鏄庣粏鍒楄〃
+export function getWorkOrderListByOrderId(orderId) {
+ return request({
+ url: `/productionOperationTask/byOrder/${orderId}`,
+ method: "get",
+ });
+}
diff --git a/src/views/productionManagement/workOrderManagement/index.vue b/src/views/productionManagement/workOrderManagement/index.vue
index 60fe511..d8433b0 100644
--- a/src/views/productionManagement/workOrderManagement/index.vue
+++ b/src/views/productionManagement/workOrderManagement/index.vue
@@ -3,15 +3,6 @@
<div class="search_form mb20">
<div class="search-row">
<div class="search-item">
- <span class="search_title">宸ュ崟缂栧彿锛�</span>
- <el-input v-model="searchForm.workOrderNo"
- style="width: 240px"
- placeholder="璇疯緭鍏�"
- @change="handleQuery"
- clearable
- prefix-icon="Search" />
- </div>
- <div class="search-item">
<span class="search_title">鐢熶骇璁㈠崟鍙凤細</span>
<el-input v-model="searchForm.npsNo"
style="width: 240px"
@@ -27,18 +18,199 @@
</div>
</div>
<div class="table_list">
- <PIMTable rowKey="id"
- :column="tableColumn"
- :tableData="tableData"
- :page="page"
- :tableLoading="tableLoading"
- @pagination="pagination">
- <template #completionStatus="{ row }">
- <el-progress :percentage="toProgressPercentage(row?.completionStatus)"
- :color="progressColor(toProgressPercentage(row?.completionStatus))"
- :status="toProgressPercentage(row?.completionStatus) >= 100 ? 'success' : ''" />
- </template>
- </PIMTable>
+ <el-table :data="tableData"
+ border
+ v-loading="tableLoading"
+ :expand-row-keys="expandedRowKeys"
+ :row-key="(row) => row.productionOrderId"
+ @expand-change="expandChange"
+ height="calc(100vh - 22em)">
+ <!-- 灞曞紑琛屽垪 -->
+ <el-table-column type="expand"
+ width="60"
+ fixed="left">
+ <template #default="props">
+ <el-table :data="props.row.children || []"
+ border
+ :row-class-name="({ row }) => getChildRowClassName(row)"
+ v-loading="childLoading[props.row.productionOrderId]"
+ style="margin: 10px 0;">
+ <el-table-column align="center"
+ label="搴忓彿"
+ type="index"
+ width="60" />
+ <el-table-column label="宸ュ崟缂栧彿"
+ prop="workOrderNo"
+ width="140">
+ <template #default="scope">
+ <span :class="{ 'rework-text': scope.row.workOrderNo?.startsWith('FG') }">
+ {{ scope.row.workOrderNo }}
+ </span>
+ </template>
+ </el-table-column>
+ <el-table-column label="宸ュ簭鍚嶇О"
+ prop="operationName"
+ width="100" />
+ <el-table-column label="宸ュ簭绫诲瀷"
+ width="80"
+ align="center">
+ <template #default="scope">
+ <span>{{ scope.row.type === 0 ? '璁℃椂' : '璁′欢' }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="璁″垝鏁伴噺"
+ prop="planQuantity"
+ width="100" />
+ <el-table-column label="瀹屾垚鏁伴噺"
+ prop="completeQuantity"
+ width="100" />
+ <el-table-column label="瀹屾垚杩涘害"
+ width="140">
+ <template #default="scope">
+ <el-progress :percentage="toProgressPercentage(scope.row?.completionStatus)"
+ :color="progressColor(toProgressPercentage(scope.row?.completionStatus))"
+ :status="toProgressPercentage(scope.row?.completionStatus) >= 100 ? 'success' : ''" />
+ </template>
+ </el-table-column>
+ <el-table-column label="鎶ュ簾鏁伴噺"
+ prop="scrapQty"
+ width="80">
+ <template #default="scope">
+ <span :class="{ 'scrap-text': scope.row.scrapQty > 0 }">
+ {{ scope.row.scrapQty || 0 }}
+ </span>
+ </template>
+ </el-table-column>
+ <el-table-column label="鎶ュ伐浜哄憳"
+ prop="userNames"
+ width="150"
+ show-overflow-tooltip />
+ <el-table-column label="璁″垝寮�濮嬫椂闂�"
+ prop="planStartTime"
+ width="120" />
+ <el-table-column label="璁″垝缁撴潫鏃堕棿"
+ prop="planEndTime"
+ width="120" />
+ <el-table-column label="瀹為檯寮�濮嬫椂闂�"
+ prop="actualStartTime"
+ width="120" />
+ <el-table-column label="瀹為檯缁撴潫鏃堕棿"
+ prop="actualEndTime"
+ width="120" />
+ <el-table-column label="鐘舵��"
+ width="100"
+ align="center">
+ <template #default="scope">
+ <el-tag :type="getStatusTagType(scope.row.status)">
+ {{ getStatusText(scope.row.status) }}
+ </el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔"
+ width="200"
+ align="center"
+ fixed="right">
+ <template #default="scope">
+ <el-button link
+ type="primary"
+ @click="downloadAndPrintWorkOrder(scope.row)">
+ 娴佽浆鍗�
+ </el-button>
+ <el-button link
+ type="primary"
+ @click="openWorkOrderFiles(scope.row)">
+ 闄勪欢
+ </el-button>
+ <el-button link
+ type="primary"
+ v-if="!scope.row.endOrder"
+ :disabled="isReportDisabled(scope.row)"
+ @click="showReportDialog(scope.row)">
+ 鎶ュ伐
+ </el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ </template>
+ </el-table-column>
+ <!-- 涓昏〃鍒� -->
+ <el-table-column align="center"
+ label="搴忓彿"
+ type="index"
+ width="60" />
+ <el-table-column label="鐢熶骇璁㈠崟鍙�"
+ prop="npsNo"
+ width="150" />
+ <el-table-column label="浜у搧鍚嶇О"
+ prop="productName"
+ width="140" />
+ <el-table-column label="瑙勬牸"
+ prop="model"
+ width="150" />
+ <el-table-column label="鍗曚綅"
+ prop="unit"
+ width="80" />
+ <el-table-column label="宸ュ簭鍚嶇О"
+ prop="operationName"
+ width="200"
+ show-overflow-tooltip />
+ <el-table-column label="宸ュ崟鏁伴噺"
+ prop="productionTaskCount"
+ width="80">
+ <template #default="scope">
+ <span>鍏眥{ scope.row.productionTaskCount || 0 }}涓�</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="璁″垝鏁伴噺"
+ prop="planQuantity"
+ width="100" />
+ <el-table-column label="瀹屾垚鏁伴噺"
+ prop="completeQuantity"
+ width="100" />
+ <el-table-column label="瀹屾垚杩涘害"
+ width="140">
+ <template #default="scope">
+ <el-progress :percentage="toProgressPercentage(scope.row?.completionStatus)"
+ :color="progressColor(toProgressPercentage(scope.row?.completionStatus))"
+ :status="toProgressPercentage(scope.row?.completionStatus) >= 100 ? 'success' : ''" />
+ </template>
+ </el-table-column>
+ <el-table-column label="鎶ュ簾鏁伴噺"
+ prop="scrapQty"
+ width="80">
+ <template #default="scope">
+ <span :class="{ 'scrap-text': scope.row.scrapQty > 0 }">
+ {{ scope.row.scrapQty || 0 }}
+ </span>
+ </template>
+ </el-table-column>
+ <el-table-column label="鐘舵��"
+ width="100"
+ align="center">
+ <template #default="scope">
+ <el-tag :type="getStatusTagType(scope.row.status)">
+ {{ getStatusText(scope.row.status) }}
+ </el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column label="璁″垝寮�濮嬫椂闂�"
+ prop="planStartTime"
+ width="120" />
+ <el-table-column label="璁″垝缁撴潫鏃堕棿"
+ prop="planEndTime"
+ width="120" />
+ <el-table-column label="瀹為檯寮�濮嬫椂闂�"
+ prop="actualStartTime"
+ width="120" />
+ <el-table-column label="瀹為檯缁撴潫鏃堕棿"
+ prop="actualEndTime"
+ width="120" />
+ </el-table>
+ <PaginationComp v-show="page.total > 0"
+ :total="page.total"
+ :page="page.current"
+ :limit="page.size"
+ @pagination="pagination" />
</div>
<!-- 娴佽浆鍗″脊绐� -->
<el-dialog v-model="transferCardVisible"
@@ -262,11 +434,12 @@
</template>
<script setup>
- import { onMounted, ref, nextTick } from "vue";
+ import { onMounted, ref, nextTick, reactive, toRefs, getCurrentInstance } from "vue";
import { ElMessageBox } from "element-plus";
import dayjs from "dayjs";
import {
productWorkOrderPage,
+ getWorkOrderListByOrderId,
addProductMain,
downProductWorkOrder,
} from "@/api/productionManagement/workOrder.js";
@@ -275,7 +448,7 @@
import { getUserProfile, userListNoPageByTenantId } from "@/api/system/user.js";
import { getDicts } from "@/api/system/dict/data";
import QRCode from "qrcode";
- import { getCurrentInstance, reactive, toRefs } from "vue";
+ import PaginationComp from "@/components/PIMTable/Pagination.vue";
import MaterialDialog from "./components/MaterialDialog.vue";
const FileList = defineAsyncComponent(() =>
import("@/components/Dialog/FileList.vue")
@@ -285,130 +458,31 @@
const { proxy } = getCurrentInstance();
const userStore = useUserStore();
- const tableColumn = ref([
- {
- label: "宸ュ崟绫诲瀷",
- prop: "workOrderType",
- width: "80",
- },
- {
- label: "宸ュ崟缂栧彿",
- prop: "workOrderNo",
- width: "140",
- },
- {
- label: "鐢熶骇璁㈠崟鍙�",
- prop: "npsNo",
- width: "140",
- },
- {
- label: "浜у搧鍚嶇О",
- prop: "productName",
- width: "140",
- },
- {
- label: "瑙勬牸",
- prop: "model",
- },
- {
- label: "鍗曚綅",
- prop: "unit",
- },
- {
- label: "宸ュ簭鍚嶇О",
- prop: "operationName",
- width: "100",
- },
- {
- label: "闇�姹傛暟閲�",
- prop: "planQuantity",
- width: "140",
- },
- {
- label: "瀹屾垚鏁伴噺",
- prop: "completeQuantity",
- width: "140",
- },
- {
- label: "瀹屾垚杩涘害",
- prop: "completionStatus",
- dataType: "slot",
- slot: "completionStatus",
- width: "140",
- },
- {
- label: "璁″垝寮�濮嬫椂闂�",
- prop: "planStartTime",
- width: "140",
- },
- {
- label: "璁″垝缁撴潫鏃堕棿",
- prop: "planEndTime",
- width: "140",
- },
- {
- label: "瀹為檯寮�濮嬫椂闂�",
- prop: "actualStartTime",
- width: "140",
- },
- {
- label: "瀹為檯缁撴潫鏃堕棿",
- prop: "actualEndTime",
- width: "140",
- },
- {
- label: "鎿嶄綔",
- width: "260",
- align: "center",
- dataType: "action",
- fixed: "right",
- operation: [
- {
- name: "娴佽浆鍗�",
- clickFun: row => {
- downloadAndPrintWorkOrder(row);
- },
- },
- {
- name: "闄勪欢",
- clickFun: row => {
- openWorkOrderFiles(row);
- },
- },
- // {
- // name: "鐗╂枡",
- // clickFun: row => {
- // openMaterialDialog(row);
- // },
- // },
- {
- name: "鎶ュ伐",
- clickFun: row => {
- showReportDialog(row);
- },
- showHide: row => !row.endOrder,
- disabled: row => {
- if (row.planQuantity <= 0) return true;
- if (!row.userIds) return false;
- try {
- const userIds =
- typeof row.userIds === "string"
- ? JSON.parse(row.userIds)
- : row.userIds;
- if (Array.isArray(userIds)) {
- return !userIds.some(id => String(id) === String(userStore.id));
- }
- return true;
- } catch (e) {
- return true;
- }
- },
- },
- ],
- },
- ]);
+ // 鐘舵�佹灇涓炬槧灏�
+ const statusMap = {
+ 1: '寰呯‘璁�',
+ 2: '寰呯敓浜�',
+ 3: '鐢熶骇涓�',
+ 4: '宸茬敓浜�',
+ };
+
+ const getStatusText = (status) => statusMap[status] || '鏈煡';
+
+ const getStatusTagType = (status) => {
+ switch (status) {
+ case 1: return 'info';
+ case 2: return 'warning';
+ case 3: return 'primary';
+ case 4: return 'success';
+ default: return 'info';
+ }
+ };
+
const tableData = ref([]);
const tableLoading = ref(false);
+ const expandedRowKeys = ref([]);
+ const childLoading = ref({});
+
const transferCardVisible = ref(false);
const transferCardData = ref([]);
const transferCardQrUrl = ref("");
@@ -434,7 +508,7 @@
paramGroups: {},
});
- const params = ref({});
+ const params = ref([]);
const dictOptions = ref({});
const paramLoading = ref(false);
@@ -445,7 +519,6 @@
return;
}
const num = Number(value);
- // 鏁存暟涓斿ぇ浜庣瓑浜�1
if (isNaN(num) || !Number.isInteger(num) || num < 0) {
callback(new Error("鐢熶骇鍚堟牸鏁伴噺蹇呴』澶т簬绛変簬0"));
return;
@@ -460,7 +533,6 @@
return;
}
const num = Number(value);
- // 鏁存暟涓斿ぇ浜庣瓑浜�0
if (isNaN(num) || !Number.isInteger(num) || num < 0) {
callback(new Error("鎶ュ簾鏁伴噺蹇呴』澶т簬绛変簬0"));
return;
@@ -474,7 +546,7 @@
scrapQty: [{ validator: validateScrapQty, trigger: "blur" }],
};
- // 澶勭悊鐢熶骇鍚堟牸鏁伴噺杈撳叆锛岄檺鍒跺繀椤诲ぇ浜庣瓑浜�0
+ // 澶勭悊鐢熶骇鍚堟牸鏁伴噺杈撳叆
const handleQuantityInput = value => {
if (value === "" || value === null || value === undefined) {
reportForm.quantity = null;
@@ -484,15 +556,12 @@
if (isNaN(num)) {
return;
}
- // 濡傛灉灏忎簬1锛屾竻闄�
if (num < 0) {
reportForm.quantity = null;
return;
}
- // 濡傛灉鏄皬鏁板彇鏁存暟閮ㄥ垎
if (!Number.isInteger(num)) {
const intValue = Math.floor(num);
- // 濡傛灉鍙栨暣鍚庡皬浜�1锛屾竻闄�
if (intValue < 0) {
reportForm.quantity = null;
return;
@@ -510,21 +579,17 @@
return;
}
const num = Number(value);
- // 濡傛灉鏄疦aN锛屼繚鎸佸師鍊�
if (isNaN(num)) {
return;
}
- // 濡傛灉鏄礋鏁帮紝娓呴櫎杈撳叆
if (num < 0) {
reportForm.scrapQty = null;
return;
}
- // 濡傛灉鏄皬鏁帮紝鍙栨暣鏁伴儴鍒�
if (!Number.isInteger(num)) {
reportForm.scrapQty = Math.floor(num);
return;
}
- // 鏈夋晥鐨勯潪璐熸暣鏁帮紙鍖呮嫭0锛�
reportForm.scrapQty = num;
};
@@ -539,11 +604,11 @@
const data = reactive({
searchForm: {
- workOrderNo: "",
npsNo: "",
},
});
const { searchForm } = toRefs(data);
+
const toProgressPercentage = val => {
const n = Number(val);
if (!Number.isFinite(n)) return 0;
@@ -551,6 +616,7 @@
if (n >= 100) return 100;
return Math.round(n);
};
+
const progressColor = percentage => {
const p = toProgressPercentage(percentage);
if (p < 30) return "#f56c6c";
@@ -560,7 +626,6 @@
};
// 鏌ヨ鍒楄〃
- /** 鎼滅储鎸夐挳鎿嶄綔 */
const handleQuery = () => {
page.current = 1;
getList();
@@ -574,11 +639,15 @@
const getList = () => {
tableLoading.value = true;
+ expandedRowKeys.value = [];
const params = { ...searchForm.value, ...page };
productWorkOrderPage(params)
.then(res => {
tableLoading.value = false;
- tableData.value = res.data.records;
+ tableData.value = res.data.records.map(item => ({
+ ...item,
+ children: [],
+ }));
page.total = res.data.total;
})
.catch(() => {
@@ -586,7 +655,67 @@
});
};
- // 涓嬭浇骞舵墦鍗板伐鍗曟祦杞崱锛堟枃浠舵祦锛�
+ // 灞曞紑琛屾噿鍔犺浇
+ const expandChange = (row, expandedRows) => {
+ if (expandedRows.length > 0) {
+ expandedRowKeys.value = [];
+ const orderId = row.productionOrderId;
+
+ // 妫�鏌ユ槸鍚﹀凡鏈夋暟鎹�
+ if (row.children && row.children.length > 0) {
+ expandedRowKeys.value.push(orderId);
+ return;
+ }
+
+ childLoading.value[orderId] = true;
+
+ getWorkOrderListByOrderId(orderId)
+ .then(res => {
+ childLoading.value[orderId] = false;
+ const index = tableData.value.findIndex(
+ item => item.productionOrderId === orderId
+ );
+ if (index > -1) {
+ tableData.value[index].children = res.data || [];
+ }
+ expandedRowKeys.value.push(orderId);
+ })
+ .catch(error => {
+ childLoading.value[orderId] = false;
+ console.error('鍔犺浇宸ュ崟鏄庣粏澶辫触:', error);
+ });
+ } else {
+ expandedRowKeys.value = [];
+ }
+ };
+
+ // 瀛愯〃琛屾牱寮忥紙杩斿伐杩斾慨绾㈣壊鏍囪锛�
+ const getChildRowClassName = (row) => {
+ if (row.workOrderNo?.startsWith('FG')) {
+ return 'row-rework';
+ }
+ return '';
+ };
+
+ // 鎶ュ伐鎸夐挳绂佺敤閫昏緫
+ const isReportDisabled = (row) => {
+ if (row.planQuantity <= 0) return true;
+ if (!row.userIds) return false;
+ try {
+ const userIds =
+ typeof row.userIds === "string"
+ ? JSON.parse(row.userIds)
+ : row.userIds;
+ if (Array.isArray(userIds)) {
+ return !userIds.some(id => String(id) === String(userStore.id));
+ }
+ return true;
+ } catch (e) {
+ return true;
+ }
+ };
+
+ // 涓嬭浇骞舵墦鍗板伐鍗曟祦杞崱
const downloadAndPrintWorkOrder = async row => {
if (!row || !row.id) {
proxy.$modal.msgError("缂哄皯宸ュ崟ID锛屾棤娉曚笅杞芥祦杞崱");
@@ -596,7 +725,6 @@
? `宸ュ崟娴佽浆鍗${row.workOrderNo}.xlsx`
: "宸ュ崟娴佽浆鍗�.xlsx";
try {
- // 璋冪敤鎺ュ彛锛屼互 responseType: 'blob' 鑾峰彇鏂囦欢娴�
const blob = await downProductWorkOrder(row.id);
if (!blob) {
@@ -604,14 +732,12 @@
return;
}
- // 鍒涘缓 Blob URL
const fileBlob =
blob instanceof Blob
? blob
: new Blob([blob], { type: blob.type || "application/octet-stream" });
const url = window.URL.createObjectURL(fileBlob);
- // 鍒涘缓闅愯棌 iframe锛岀敤浜庤Е鍙戞祻瑙堝櫒鎵撳嵃
const iframe = document.createElement("iframe");
iframe.style.position = "fixed";
iframe.style.right = "0";
@@ -628,7 +754,6 @@
iframe.contentWindow?.print();
} catch (e) {
console.error("鑷姩璋冪敤鎵撳嵃澶辫触", e);
- // 閫�鑰屾眰鍏舵锛屾墦寮�鏂扮獥鍙g敱鐢ㄦ埛鎵嬪姩鎵撳嵃
window.open(url);
}
};
@@ -731,7 +856,6 @@
return;
}
- // 楠岃瘉鐢熶骇鍚堟牸鏁伴噺
if (
reportForm.quantity === null ||
reportForm.quantity === undefined ||
@@ -752,14 +876,6 @@
return;
}
- // if (quantity > reportForm.planQuantity) {
- // ElMessageBox.alert("鏈鐢熶骇鏁伴噺涓嶈兘瓒呰繃寰呯敓浜ф暟閲�", "鎻愮ず", {
- // confirmButtonText: "纭畾",
- // });
- // return;
- // }
-
- // 楠岃瘉鎶ュ簾鏁伴噺
const scrapQty = Number(reportForm.scrapQty);
if (!isNaN(scrapQty) && scrapQty < 0) {
ElMessageBox.alert("鎶ュ簾鏁伴噺涓嶈兘灏忎簬0", "鎻愮ず", {
@@ -767,13 +883,6 @@
});
return;
}
-
- // if (!isNaN(scrapQty) && scrapQty > quantity) {
- // ElMessageBox.alert("鎶ュ簾鏁伴噺涓嶈兘澶т簬鏈鐢熶骇鏁伴噺", "鎻愮ず", {
- // confirmButtonText: "纭畾",
- // });
- // return;
- // }
const productionOperationParamList = params.value.map(param => ({
...param,
@@ -863,7 +972,6 @@
onMounted(() => {
userStore.getInfo();
getList();
- // 鑾峰彇鐢ㄦ埛鍒楄〃
userListNoPageByTenantId().then(res => {
if (res.code === 200) {
userOptions.value = res.data;
@@ -955,6 +1063,31 @@
font-size: 12px;
min-width: 30px;
}
+
+ // 杩斿伐杩斾慨宸ュ崟绾㈣壊鏍囪
+ .row-rework {
+ background-color: #fef0f0 !important;
+
+ :deep(.el-table__cell) {
+ background-color: #fef0f0 !important;
+ }
+ }
+
+ .rework-text {
+ color: #f56c6c;
+ font-weight: bold;
+ }
+
+ // 鎶ュ簾鏁伴噺绾㈣壊鏍囪
+ .scrap-text {
+ color: #f56c6c;
+ }
+
+ // 瀛愯〃鏍兼牱寮�
+ :deep(.el-table__expanded-cell) {
+ padding: 10px 30px !important;
+ background-color: #fafafa;
+ }
</style>
<style lang="scss">
diff --git a/vite.config.js b/vite.config.js
index fcc019d..474f7ac 100644
--- a/vite.config.js
+++ b/vite.config.js
@@ -8,7 +8,7 @@
const { VITE_APP_ENV } = env;
const baseUrl =
env.VITE_APP_ENV === "development"
- ? "http://1.15.17.182:9048"
+ ? "http://localhost:7005"
: env.VITE_BASE_API;
const javaUrl =
env.VITE_APP_ENV === "development"
--
Gitblit v1.9.3