From 741918a903e17b2ec7522556d2c043b8d35dd8a1 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 15 六月 2026 17:42:58 +0800
Subject: [PATCH] 生产取消bom,不合格管理定制化
---
docs/quality_unqualified_order.md | 693 ++++++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 488 insertions(+), 205 deletions(-)
diff --git a/docs/quality_unqualified_order.md b/docs/quality_unqualified_order.md
index 92ec796..95cc83c 100644
--- a/docs/quality_unqualified_order.md
+++ b/docs/quality_unqualified_order.md
@@ -1,34 +1,49 @@
-# 涓嶅悎鏍煎搧澶勭悊鍗� 鈥� 鍓嶇鑱旇皟鏂囨。
+# 涓嶅悎鏍煎搧澶勭悊鍗曟ā鍧楋紙QualityUnqualifiedOrder锛�
+
+## 姒傝堪
+
+涓嶅悎鏍煎搧澶勭悊鍗曟槸姝e紡鐨勪笉鍚堟牸鍝佸缃祦绋嬫ā鍧楋紝鏇夸唬鏃х殑涓嶅悎鏍肩鐞嗭紙`/quality/qualityUnqualified`锛変腑鐨勫缃姛鑳姐�傛棫妯″潡鐨勪笉鍚堟牸鍝佸彂鐜帮紙鏂板/鍒楄〃/璇︽儏锛夌户缁娇鐢紝浣�**澶勭疆鎿嶄綔缁熶竴浣跨敤鏈ā鍧�**銆�
+
+### 鑷姩鍒涘缓鏈哄埗
+
+褰撴楠屽崟锛堝師鏉愭枡/杩囩▼/鍑哄巶妫�楠岋級鎻愪氦鏃讹紝濡傛灉**涓嶅悎鏍兼暟閲� > 0**锛岀郴缁熷湪鍒涘缓 `QualityUnqualified` 璁板綍鐨勫悓鏃讹紝**鑷姩鍒涘缓涓�鏉′笉鍚堟牸鍝佸鐞嗗崟**锛宍unqualifiedProcess`锛堜笉鍚堟牸宸ュ簭锛夋牴鎹楠岀被鍒嚜鍔ㄦ槧灏勶細
+
+| 妫�楠岀被鍒� | inspectType | unqualifiedProcess |
+|----------|-------------|-------------------|
+| 鍘熸潗鏂欐楠� | 0 | 1锛堟潵鏂欙級 |
+| 杩囩▼妫�楠� | 0 | 2锛堝埗绋嬶級 |
+| 鍑哄巶妫�楠� | 0 | 3锛堟垚鍝侊級 |
+
+澶勭悊鍗曞垵濮嬬姸鎬佷负 `0`锛堣崏绋匡級锛屽悗缁彲缂栬緫澶勭疆鏂瑰紡骞舵彁浜ゅ鎵广��
+
+### 涓庢棫妯″潡鐨勫叧绯�
+
+| | 鏃э細涓嶅悎鏍肩鐞� | 鏂帮細涓嶅悎鏍煎搧澶勭悊鍗� |
+|---|---|---|
+| 璺緞 | `/quality/qualityUnqualified` | `/qualityUnqualifiedOrder` |
+| 鐢ㄩ�� | 涓嶅悎鏍煎搧棣栨璁板綍銆佹煡鐪� | 姝e紡澶勭疆娴佺▼锛堝惈瀹℃壒锛� |
+| 澶勭疆鏂瑰紡 | `dealResult` 鑷敱鏂囨湰 | `disposalMethod` 缁撴瀯鍖栨灇涓� |
+| 鍒涘缓鏂瑰紡 | 妫�楠屽崟鎻愪氦鑷姩鍒涘缓 / 鎵嬪姩鏂板 | 妫�楠屽崟鎻愪氦鑷姩鍒涘缓 / 鎵嬪姩鏂板 |
## 娑夊強椤甸潰
-- **涓嶅悎鏍煎搧澶勭悊鍗曞垪琛�/璇︽儏** 鈥� 鏂板椤甸潰
-
-## 鍙樻洿璇存槑
-
-鏂板 `quality_unqualified_order` 涓嶅悎鏍煎搧澶勭悊鍗曟ā鍧楋紝鏀寔瀵逛笉鍚堟牸鍝佽繘琛屾寮忕殑澶勭疆璁板綍锛屽寘鍚鎵圭姸鎬佹満锛堣崏绋库啋寰呭鎵光啋瀹℃壒涓啋宸插畬鎴�/宸查┏鍥烇級銆傞檮浠朵娇鐢ㄧ郴缁熺粺涓�鐨� `storage_attachment` 琛ㄣ��
+- 涓嶅悎鏍煎搧澶勭悊鍗曞垪琛ㄩ〉
+- 涓嶅悎鏍煎搧澶勭悊鍗曟柊澧�/缂栬緫椤�
+- 涓嶅悎鏍煎搧澶勭悊鍗曡鎯呴〉
## API
-### 涓嶅悎鏍煎搧澶勭悊鍗�
+### 1. 鏂板澶勭悊鍗�
| 鏂规硶 | 璺緞 | 璇存槑 |
|------|------|------|
-| POST | `/qualityUnqualifiedOrder/save` | 鏂板澶勭悊鍗曪紙缂栧彿鑷姩鐢熸垚锛� |
-| PUT | `/qualityUnqualifiedOrder/update` | 淇敼澶勭悊鍗� |
-| DELETE | `/qualityUnqualifiedOrder/delete` | 鎵归噺鍒犻櫎锛堥�昏緫鍒犻櫎锛� |
-| GET | `/qualityUnqualifiedOrder/listPage` | 鍒嗛〉鏌ヨ |
-| GET | `/qualityUnqualifiedOrder/{id}` | 鏌ョ湅璇︽儏 |
+| POST | /qualityUnqualifiedOrder/save | 鏂板涓嶅悎鏍煎搧澶勭悊鍗� |
-### 璇锋眰/鍝嶅簲鍙傛暟
-
-**QualityUnqualifiedOrder 瀵硅薄锛�**
+**璇锋眰鍙傛暟锛�**
| 鍙傛暟 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
|------|------|------|------|
-| id | Long | 鍚� | 涓婚敭锛堜慨鏀规椂蹇呭~锛� |
-| orderNo | String | 鍚� | 澶勭悊鍗曠紪鍙凤紝鑷姩鐢熸垚锛屽墠缂� BHG+鏃ユ湡+搴忓彿 |
-| unqualifiedId | Long | 鍚� | 鍏宠仈涓嶅悎鏍煎搧ID |
+| unqualifiedId | Long | 鏄� | 鍏宠仈涓嶅悎鏍煎搧ID |
| projectName | String | 鍚� | 椤圭洰鍚嶇О |
| projectNo | String | 鍚� | 椤圭洰缂栧彿 |
| equipmentId | Long | 鍚� | 鍏宠仈璁惧ID |
@@ -41,7 +56,7 @@
| materialQuality | String | 鍚� | 鏉愯川 |
| quantity | BigDecimal | 鍚� | 鎬绘暟閲� |
| unqualifiedQuantity | BigDecimal | 鍚� | 涓嶅悎鏍兼暟閲� |
-| unqualifiedProcess | Integer | 鍚� | 涓嶅悎鏍煎伐搴忥細1=鏉ユ枡锛�2=鍒剁▼锛�3=鎴愬搧 |
+| unqualifiedProcess | Integer | 鍚� | 涓嶅悎鏍煎伐搴忥細1=鏉ユ枡, 2=鍒剁▼, 3=鎴愬搧 |
| supplierName | String | 鍚� | 渚涘簲鍟嗗悕绉� |
| inspectorName | String | 鍚� | 妫�楠屽憳 |
| inspectDate | Date | 鍚� | 妫�楠屾棩鏈� (yyyy-MM-dd) |
@@ -50,233 +65,501 @@
| problemDescription | String | 鍚� | 闂鎻忚堪 |
| reasonAnalysis | String | 鍚� | 鍘熷洜鍒嗘瀽鍙婂缓璁� |
| correctionAction | String | 鍚� | 绾犳鎺柦 |
-| disposalMethod | Integer | 鍚� | 澶勭疆鏂瑰紡锛�1=璁╂鎺ユ敹锛�2=鍘傚唴缁翠慨锛�3=杩斿巶缁翠慨锛�4=鎹㈣揣锛�5=閫�璐э紝6=鎶ュ簾 |
+| **disposalMethod** | **Integer** | **鏄�** | **澶勭疆鏂瑰紡锛�1=璁╂鎺ユ敹, 2=鍘傚唴缁翠慨, 3=杩斿巶缁翠慨, 4=鎹㈣揣, 5=閫�璐�, 6=鎶ュ簾** |
| repairEvaluation | String | 鍚� | 鍘傚唴/杩斿巶缁翠慨璇勪及 |
| preventiveAction | String | 鍚� | 棰勯槻鎺柦 |
-| status | Integer | 鍚� | 鐘舵�侊細0=鑽夌锛�1=寰呭鎵癸紝2=瀹℃壒涓紝3=宸插畬鎴愶紝4=宸查┏鍥� |
| remark | String | 鍚� | 澶囨敞 |
-| storageBlobDTOs | List\<StorageBlobDTO\> | 鍚� | 闄勪欢涓婁紶鍒楄〃 |
-| storageBlobVOs | List\<StorageBlobVO\> | 鍚� | 闄勪欢鍥炴樉鍒楄〃锛堟煡璇㈡椂杩斿洖锛� |
+| deptOpinion | String | 鍚� | 璐d换閮ㄩ棬涓荤鎰忚 |
+| companyDecision | String | 鍚� | 鍏徃澶勭悊鍐冲畾 |
+| generalManagerOpinion | String | 鍚� | 鎬荤粡鐞嗘剰瑙� |
+| storageBlobDTOs | List | 鍚� | 闄勪欢鍒楄〃 |
-### 鍒嗛〉鏌ヨ鍙傛暟
+**鑷姩琛屼负锛�**
+- 鑷姩鐢熸垚澶勭悊鍗曠紪鍙凤紙`BHGyyMMdd+娴佹按鍙穈锛�
+- **鎵嬪姩鏂板鏃�**锛氶�変簡澶勭疆鏂瑰紡 鈫� 鐘舵�佽嚜鍔ㄤ负 `3`锛堝凡瀹屾垚锛夛紱娌¢�� 鈫� 鐘舵�佷负 `0`锛堣崏绋匡級
+- **璐ㄦ鑷姩鍒涘缓鏃�**锛氱姸鎬佸垵濮嬩负 `0`锛堣崏绋匡級锛岄渶閫氳繃澶勭悊鎺ュ彛琛ュ厖澶勭疆鏂瑰紡
+- **褰� `disposalMethod` 閫夋嫨 2锛堝巶鍐呯淮淇級鎴� 3锛堣繑鍘傜淮淇級鏃讹紝鑷姩鍒涘缓杩斾慨鐢熶骇璁㈠崟**
+
+**鍝嶅簲锛�** `{ "code": 200, "msg": "鎿嶄綔鎴愬姛", "data": true }`
+
+### 2. 淇敼澶勭悊鍗�
+
+| 鏂规硶 | 璺緞 | 璇存槑 |
+|------|------|------|
+| PUT | /qualityUnqualifiedOrder/update | 淇敼涓嶅悎鏍煎搧澶勭悊鍗� |
+
+**璇锋眰鍙傛暟锛�** 涓庢柊澧炵浉鍚岋紝棰濆闇�瑕� `id` 瀛楁銆�
+
+### 3. 鍒犻櫎澶勭悊鍗�
+
+| 鏂规硶 | 璺緞 | 璇存槑 |
+|------|------|------|
+| DELETE | /qualityUnqualifiedOrder/delete | 鍒犻櫎涓嶅悎鏍煎搧澶勭悊鍗� |
+
+**璇锋眰鍙傛暟锛�** `[id1, id2, ...]` 鈥� ID 鏁扮粍
+
+### 4. 鍒嗛〉鏌ヨ
+
+| 鏂规硶 | 璺緞 | 璇存槑 |
+|------|------|------|
+| GET | /qualityUnqualifiedOrder/listPage | 鍒嗛〉鏌ヨ |
+
+**鏌ヨ鍙傛暟锛�**
| 鍙傛暟 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
|------|------|------|------|
-| pageNum | Integer | 鍚� | 椤电爜锛岄粯璁�1 |
-| pageSize | Integer | 鍚� | 姣忛〉鏉℃暟锛岄粯璁�10 |
-| status | Integer | 鍚� | 鐘舵�佺瓫閫� |
-| projectName | String | 鍚� | 椤圭洰鍚嶇О妯$硦鎼滅储 |
-| orderNo | String | 鍚� | 缂栧彿妯$硦鎼滅储 |
-| entryDateStart | String | 鍚� | 鍒涘缓鏃堕棿璧峰 |
-| entryDateEnd | String | 鍚� | 鍒涘缓鏃堕棿缁撴潫 |
+| page | int | 鍚� | 椤电爜锛堥粯璁�1锛� |
+| size | int | 鍚� | 姣忛〉鏉℃暟锛堥粯璁�10锛� |
+| status | Integer | 鍚� | 鐘舵�侊細0=鑽夌, 1=寰呭鎵�, 2=瀹℃壒涓�, 3=宸插畬鎴�, 4=宸查┏鍥� |
+| projectName | String | 鍚� | 椤圭洰鍚嶇О锛堟ā绯婂尮閰嶏級 |
+| orderNo | String | 鍚� | 澶勭悊鍗曠紪鍙凤紙妯$硦鍖归厤锛� |
+| entryDateStart | String | 鍚� | 鍒涘缓鏃堕棿璧� (yyyy-MM-dd) |
+| entryDateEnd | String | 鍚� | 鍒涘缓鏃堕棿姝� (yyyy-MM-dd) |
-### 鍒犻櫎璇锋眰浣�
+**鍝嶅簲瀛楁锛�** 杩斿洖 `QualityUnqualifiedOrder` 鍏ㄩ儴瀛楁锛屽惈 `storageBlobVOs`锛堥檮浠跺垪琛級銆�
-```json
-[1, 2, 3]
-```
+### 5. 璇︽儏鏌ヨ
-## 鏁版嵁缁撴瀯
+| 鏂规硶 | 璺緞 | 璇存槑 |
+|------|------|------|
+| GET | /qualityUnqualifiedOrder/{id} | 澶勭悊鍗曡鎯� |
-### StorageBlobDTO锛堜笂浼犳椂浼犲叆锛�
+**鍝嶅簲锛�** 杩斿洖鍗曟潯 `QualityUnqualifiedOrder` 鍏ㄩ儴瀛楁锛屽惈闄勪欢銆�
-```json
-{
- "id": "涓存椂鏂囦欢ID锛堝瓧绗︿覆锛�",
- "name": "鏂囦欢鍚�",
- "url": "鏂囦欢璺緞",
- "fileSize": 1024
-}
-```
+### 6. 澶勭悊锛堝缃級
-### StorageBlobVO锛堟煡璇㈡椂杩斿洖锛�
+| 鏂规硶 | 璺緞 | 璇存槑 |
+|------|------|------|
+| POST | /qualityUnqualifiedOrder/deal | 瀵硅崏绋跨姸鎬佺殑澶勭悊鍗曡ˉ鍏呭缃柟寮忓苟瀹屾垚 |
-```json
-{
- "id": 1,
- "name": "妫�楠屾姤鍛�.pdf",
- "url": "/upload/20260613/xxx.pdf",
- "fileSize": 102400,
- "application": "FILE"
+**璇锋眰鍙傛暟锛�**
+
+| 鍙傛暟 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+|------|------|------|------|
+| **id** | **Long** | **鏄�** | 澶勭悊鍗旾D |
+| **disposalMethod** | **Integer** | **鏄�** | **澶勭疆鏂瑰紡锛�1=璁╂鎺ユ敹, 2=鍘傚唴缁翠慨, 3=杩斿巶缁翠慨, 4=鎹㈣揣, 5=閫�璐�, 6=鎶ュ簾** |
+| repairEvaluation | String | 鍚� | 鍘傚唴/杩斿巶缁翠慨璇勪及 |
+| reasonAnalysis | String | 鍚� | 鍘熷洜鍒嗘瀽鍙婂缓璁� |
+| correctionAction | String | 鍚� | 绾犳鎺柦 |
+| preventiveAction | String | 鍚� | 棰勯槻鎺柦 |
+| remark | String | 鍚� | 澶囨敞 |
+| deptOpinion | String | 鍚� | 璐d换閮ㄩ棬涓荤鎰忚 |
+| companyDecision | String | 鍚� | 鍏徃澶勭悊鍐冲畾 |
+| generalManagerOpinion | String | 鍚� | 鎬荤粡鐞嗘剰瑙� |
+
+**鑷姩琛屼负锛�**
+- 鐘舵�佹洿鏂颁负 `3`锛堝凡瀹屾垚锛�
+- 澶勭疆鏂瑰紡涓� 2锛堝巶鍐呯淮淇級鎴� 3锛堣繑鍘傜淮淇級鏃讹紝鑷姩鍒涘缓杩斾慨鐢熶骇璁㈠崟
+
+**鍝嶅簲锛�** `{ "code": 200, "msg": "鎿嶄綔鎴愬姛", "data": true }`
+
+### 7. 瀵煎嚭澶勭悊鍗�
+
+| 鏂规硶 | 璺緞 | 璇存槑 |
+|------|------|------|
+| GET | /qualityUnqualifiedOrder/export/{id} | 瀵煎嚭涓嶅悎鏍煎搧澶勭悊鍗曚负 Excel |
+
+**璇锋眰鍙傛暟锛�** `id` 鈥� 澶勭悊鍗旾D锛堣矾寰勫弬鏁帮級
+
+**鍝嶅簲锛�** 鏂囦欢娴侊紝`Content-Type: application/vnd.ms-excel`锛屾枃浠跺悕 `涓嶅悎鏍煎搧澶勭悊鍗昣{缂栧彿}.xls`
+
+**妯℃澘瀛楁鏄犲皠锛�**
+
+| 妯℃澘浣嶇疆 | 瀛楁 |
+|----------|------|
+| 椤圭洰鍚嶇О | projectName |
+| 椤圭洰缂栧彿 | projectNo |
+| 璁惧鍚嶇О | equipmentName |
+| 璁惧鍥惧彿 | equipmentDrawingNo |
+| 鐗╂枡鍚嶇О | materialName |
+| 鐗╂枡鍥惧彿 | materialDrawingNo |
+| 鍨嬪彿瑙勬牸 | specificationModel |
+| 鏉愯川 | materialQuality |
+| 鎬绘暟閲� | quantity |
+| 涓嶅悎鏍兼暟 | unqualifiedQuantity |
+| 涓嶅悎鏍煎伐搴� | unqualifiedProcess锛堝嬀閫夋潵鏂�/鍒剁▼/鎴愬搧锛� |
+| 渚涜揣鍟嗗悕绉� | supplierName |
+| 妫�楠屽憳 | inspectorName |
+| 妫�楠屾棩鏈� | inspectDate |
+| 璐d换浜� | responsiblePerson |
+| 璐d换閮ㄩ棬 | responsibleDept |
+| 闂鎻忚堪 | problemDescription |
+| 鍘熷洜鍒嗘瀽鍙婂缓璁� | reasonAnalysis |
+| 绾犳鎺柦 | correctionAction |
+| 澶勭疆鏂瑰紡 | disposalMethod锛堝嬀閫夊搴旈�夐」锛� |
+| 鍘傚唴/杩斿巶缁翠慨璇勪及 | repairEvaluation |
+| 棰勯槻鎺柦 | preventiveAction |
+| 璐d换閮ㄩ棬涓荤鎰忚 | deptOpinion |
+| 鍏徃澶勭悊鍐冲畾 | companyDecision |
+| 鎬荤粡鐞嗘剰瑙� | generalManagerOpinion |
+
+**鍓嶇璋冪敤绀轰緥锛�**
+
+```js
+// 鍒楄〃椤垫搷浣滃垪澧炲姞瀵煎嚭鎸夐挳
+<el-button text type="primary" @click="handleExport(row.id)">瀵煎嚭</el-button>
+
+// 璇︽儏椤靛鍔犲鍑烘寜閽�
+<el-button type="primary" @click="handleExport">瀵煎嚭</el-button>
+
+methods: {
+ handleExport(id) {
+ window.open(`/api/qualityUnqualifiedOrder/export/${id}`);
+ },
}
```
## 鍓嶇淇敼鐐�
-### 1. 涓嶅悎鏍煎搧澶勭悊鍗� 鈥� 鏂板/缂栬緫琛ㄥ崟
+### 1. 澶勭悊鍗曞垪琛ㄩ〉
```html
-<el-form :model="form" :rules="rules" ref="formRef">
- <el-form-item label="椤圭洰鍚嶇О" prop="projectName">
- <el-input v-model="form.projectName" />
- </el-form-item>
- <el-form-item label="椤圭洰缂栧彿" prop="projectNo">
- <el-input v-model="form.projectNo" />
- </el-form-item>
- <el-form-item label="璁惧鍚嶇О" prop="equipmentName">
- <el-input v-model="form.equipmentName" />
- </el-form-item>
- <el-form-item label="鐗╂枡/閮ㄤ欢鍚嶇О" prop="materialName">
- <el-input v-model="form.materialName" />
- </el-form-item>
- <el-form-item label="鍨嬪彿瑙勬牸" prop="specificationModel">
- <el-input v-model="form.specificationModel" />
- </el-form-item>
- <el-form-item label="鏉愯川" prop="materialQuality">
- <el-input v-model="form.materialQuality" />
- </el-form-item>
- <el-form-item label="鎬绘暟閲�" prop="quantity">
- <el-input-number v-model="form.quantity" />
- </el-form-item>
- <el-form-item label="涓嶅悎鏍兼暟閲�" prop="unqualifiedQuantity">
- <el-input-number v-model="form.unqualifiedQuantity" />
- </el-form-item>
- <el-form-item label="涓嶅悎鏍煎伐搴�" prop="unqualifiedProcess">
- <el-select v-model="form.unqualifiedProcess">
- <el-option label="鏉ユ枡" :value="1" />
- <el-option label="鍒剁▼" :value="2" />
- <el-option label="鎴愬搧" :value="3" />
- </el-select>
- </el-form-item>
- <el-form-item label="渚涘簲鍟嗗悕绉�" prop="supplierName">
- <el-input v-model="form.supplierName" />
- </el-form-item>
- <el-form-item label="妫�楠屽憳" prop="inspectorName">
- <el-input v-model="form.inspectorName" />
- </el-form-item>
- <el-form-item label="妫�楠屾棩鏈�" prop="inspectDate">
- <el-date-picker v-model="form.inspectDate" type="date" value-format="yyyy-MM-dd" />
- </el-form-item>
- <el-form-item label="璐d换浜�" prop="responsiblePerson">
- <el-input v-model="form.responsiblePerson" />
- </el-form-item>
- <el-form-item label="璐d换閮ㄩ棬" prop="responsibleDept">
- <el-input v-model="form.responsibleDept" />
- </el-form-item>
- <el-form-item label="闂鎻忚堪" prop="problemDescription">
- <el-input type="textarea" v-model="form.problemDescription" />
- </el-form-item>
- <el-form-item label="鍘熷洜鍒嗘瀽" prop="reasonAnalysis">
- <el-input type="textarea" v-model="form.reasonAnalysis" />
- </el-form-item>
- <el-form-item label="绾犳鎺柦" prop="correctionAction">
- <el-input type="textarea" v-model="form.correctionAction" />
- </el-form-item>
- <el-form-item label="澶勭疆鏂瑰紡" prop="disposalMethod">
- <el-select v-model="form.disposalMethod">
- <el-option label="璁╂鎺ユ敹" :value="1" />
- <el-option label="鍘傚唴缁翠慨" :value="2" />
- <el-option label="杩斿巶缁翠慨" :value="3" />
- <el-option label="鎹㈣揣" :value="4" />
- <el-option label="閫�璐�" :value="5" />
- <el-option label="鎶ュ簾" :value="6" />
- </el-select>
- </el-form-item>
- <el-form-item label="缁翠慨璇勪及" prop="repairEvaluation">
- <el-input type="textarea" v-model="form.repairEvaluation" />
- </el-form-item>
- <el-form-item label="棰勯槻鎺柦" prop="preventiveAction">
- <el-input type="textarea" v-model="form.preventiveAction" />
- </el-form-item>
- <el-form-item label="澶囨敞" prop="remark">
- <el-input type="textarea" v-model="form.remark" />
- </el-form-item>
- <el-form-item label="闄勪欢">
- <file-upload
- v-model="form.storageBlobDTOs"
- :file-list="form.storageBlobVOs"
- />
- </el-form-item>
-</el-form>
+<template>
+ <div class="app-container">
+ <!-- 鎼滅储鏍� -->
+ <el-form :model="queryParams" :inline="true">
+ <el-form-item label="澶勭悊鍗曠紪鍙�">
+ <el-input v-model="queryParams.orderNo" placeholder="杈撳叆缂栧彿" />
+ </el-form-item>
+ <el-form-item label="椤圭洰鍚嶇О">
+ <el-input v-model="queryParams.projectName" placeholder="杈撳叆椤圭洰" />
+ </el-form-item>
+ <el-form-item label="鐘舵��">
+ <el-select v-model="queryParams.status" placeholder="鍏ㄩ儴" clearable>
+ <el-option label="鑽夌" :value="0" />
+ <el-option label="寰呭鎵�" :value="1" />
+ <el-option label="瀹℃壒涓�" :value="2" />
+ <el-option label="宸插畬鎴�" :value="3" />
+ <el-option label="宸查┏鍥�" :value="4" />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍒涘缓鏃堕棿">
+ <el-date-picker v-model="dateRange" type="daterange" value-format="yyyy-MM-dd"
+ start-placeholder="寮�濮�" end-placeholder="缁撴潫" />
+ </el-form-item>
+ <el-form-item>
+ <el-button type="primary" @click="handleQuery">鏌ヨ</el-button>
+ <el-button @click="resetQuery">閲嶇疆</el-button>
+ </el-form-item>
+ </el-form>
+
+ <!-- 鎿嶄綔鎸夐挳 -->
+ <el-row :gutter="10" class="mb8">
+ <el-button type="primary" @click="handleAdd">鏂板澶勭悊鍗�</el-button>
+ <el-button type="danger" :disabled="!selectedIds.length" @click="handleDelete">鍒犻櫎</el-button>
+ </el-row>
+
+ <!-- 琛ㄦ牸 -->
+ <el-table :data="list" @selection-change="handleSelectionChange">
+ <el-table-column type="selection" width="55" />
+ <el-table-column label="澶勭悊鍗曠紪鍙�" prop="orderNo" width="160" />
+ <el-table-column label="椤圭洰鍚嶇О" prop="projectName" />
+ <el-table-column label="鍨嬪彿瑙勬牸" prop="specificationModel" width="120" />
+ <el-table-column label="涓嶅悎鏍兼暟閲�" prop="unqualifiedQuantity" width="100" />
+ <el-table-column label="澶勭疆鏂瑰紡" width="110">
+ <template #default="{ row }">
+ {{ disposalMethodMap[row.disposalMethod] }}
+ </template>
+ </el-table-column>
+ <el-table-column label="鐘舵��" width="80">
+ <template #default="{ row }">
+ <el-tag :type="statusTagType(row.status)">{{ statusMap[row.status] }}</el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column label="妫�楠屽憳" prop="inspectorName" width="100" />
+ <el-table-column label="妫�楠屾棩鏈�" prop="inspectDate" width="110" />
+ <el-table-column label="鍒涘缓鏃堕棿" prop="createTime" width="160" />
+ <el-table-column label="鎿嶄綔" width="120" fixed="right">
+ <template #default="{ row }">
+ <el-button text type="primary" @click="handleDetail(row.id)">璇︽儏</el-button>
+ <el-button text type="primary" @click="handleEdit(row)">缂栬緫</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+
+ <pagination :total="total" v-model:page="page" v-model:limit="size"
+ @pagination="loadList" />
+ </div>
+</template>
```
-### 2. 涓嶅悎鏍煎搧澶勭悊鍗� 鈥� 鍒楄〃椤�
+```js
+data() {
+ return {
+ list: [],
+ total: 0,
+ page: 1,
+ size: 10,
+ selectedIds: [],
+ dateRange: [],
+ queryParams: {
+ orderNo: '',
+ projectName: '',
+ status: null,
+ },
+ disposalMethodMap: { 1: '璁╂鎺ユ敹', 2: '鍘傚唴缁翠慨', 3: '杩斿巶缁翠慨', 4: '鎹㈣揣', 5: '閫�璐�', 6: '鎶ュ簾' },
+ statusMap: { 0: '鑽夌', 1: '寰呭鎵�', 2: '瀹℃壒涓�', 3: '宸插畬鎴�', 4: '宸查┏鍥�' },
+ }
+},
+methods: {
+ statusTagType(status) {
+ const map = { 0: 'info', 1: 'warning', 2: '', 3: 'success', 4: 'danger' };
+ return map[status] || 'info';
+ },
+ loadList() {
+ const params = { ...this.queryParams, page: this.page, size: this.size };
+ if (this.dateRange && this.dateRange.length === 2) {
+ params.entryDateStart = this.dateRange[0];
+ params.entryDateEnd = this.dateRange[1];
+ }
+ listPage(params).then(res => {
+ this.list = res.rows;
+ this.total = res.total;
+ });
+ },
+ handleQuery() { this.page = 1; this.loadList(); },
+ resetQuery() {
+ this.queryParams = { orderNo: '', projectName: '', status: null };
+ this.dateRange = [];
+ this.handleQuery();
+ },
+ handleSelectionChange(selection) { this.selectedIds = selection.map(i => i.id); },
+ handleAdd() { this.$router.push('/quality/unqualified-order/add'); },
+ handleEdit(row) { this.$router.push({ path: '/quality/unqualified-order/edit', query: { id: row.id } }); },
+ handleDetail(id) { this.$router.push({ path: '/quality/unqualified-order/detail', query: { id } }); },
+ handleDelete() {
+ this.$confirm('纭鍒犻櫎閫変腑鐨勫鐞嗗崟锛�').then(() => {
+ deleteOrders(this.selectedIds).then(() => {
+ this.$message.success('鍒犻櫎鎴愬姛');
+ this.loadList();
+ });
+ });
+ },
+}
+```
+
+### 2. 鏂板/缂栬緫澶勭悊鍗曢〉
```html
-<el-table :data="tableData" border>
- <el-table-column prop="orderNo" label="澶勭悊鍗曠紪鍙�" />
- <el-table-column prop="projectName" label="椤圭洰鍚嶇О" />
- <el-table-column prop="materialName" label="鐗╂枡鍚嶇О" />
- <el-table-column prop="specificationModel" label="鍨嬪彿瑙勬牸" />
- <el-table-column prop="unqualifiedQuantity" label="涓嶅悎鏍兼暟閲�" />
- <el-table-column prop="disposalMethod" label="澶勭疆鏂瑰紡">
- <template #default="{ row }">
- {{ disposalMethodMap[row.disposalMethod] }}
- </template>
- </el-table-column>
- <el-table-column prop="status" label="鐘舵��">
- <template #default="{ row }">
- <el-tag :type="statusTagType(row.status)">{{ statusMap[row.status] }}</el-tag>
- </template>
- </el-table-column>
- <el-table-column label="鎿嶄綔">
- <template #default="{ row }">
- <el-button type="text" @click="handleDetail(row.id)">璇︽儏</el-button>
- <el-button type="text" @click="handleEdit(row)">缂栬緫</el-button>
- <el-button type="text" @click="handleDelete(row.id)">鍒犻櫎</el-button>
- </template>
- </el-table-column>
-</el-table>
-```
+<template>
+ <div class="app-container">
+ <el-form ref="form" :model="form" :rules="rules" label-width="120px">
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鍏宠仈涓嶅悎鏍煎搧" prop="unqualifiedId">
+ <el-select v-model="form.unqualifiedId" placeholder="閫夋嫨涓嶅悎鏍煎搧" filterable>
+ <el-option v-for="item in unqualifiedList" :key="item.id"
+ :label="item.productName + ' ' + item.model + ' (' + item.quantity + ')'"
+ :value="item.id" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="涓嶅悎鏍煎伐搴�" prop="unqualifiedProcess">
+ <el-select v-model="form.unqualifiedProcess">
+ <el-option label="鏉ユ枡" :value="1" />
+ <el-option label="鍒剁▼" :value="2" />
+ <el-option label="鎴愬搧" :value="3" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
-### 3. data 鏁版嵁
+ <el-divider>鍩烘湰淇℃伅</el-divider>
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="椤圭洰鍚嶇О" prop="projectName">
+ <el-input v-model="form.projectName" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="椤圭洰缂栧彿" prop="projectNo">
+ <el-input v-model="form.projectNo" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鐗╂枡/閮ㄤ欢鍚嶇О" prop="materialName">
+ <el-input v-model="form.materialName" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鐗╂枡鍥惧彿" prop="materialDrawingNo">
+ <el-input v-model="form.materialDrawingNo" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="鍨嬪彿瑙勬牸" prop="specificationModel">
+ <el-input v-model="form.specificationModel" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鏉愯川" prop="materialQuality">
+ <el-input v-model="form.materialQuality" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="渚涘簲鍟�" prop="supplierName">
+ <el-input v-model="form.supplierName" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-divider>涓嶅悎鏍间俊鎭�</el-divider>
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="鎬绘暟閲�" prop="quantity">
+ <el-input-number v-model="form.quantity" :min="0" :precision="2" style="width:100%" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="涓嶅悎鏍兼暟閲�" prop="unqualifiedQuantity">
+ <el-input-number v-model="form.unqualifiedQuantity" :min="0" :precision="2" style="width:100%" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="妫�楠屾棩鏈�" prop="inspectDate">
+ <el-date-picker v-model="form.inspectDate" type="date" value-format="yyyy-MM-dd" style="width:100%" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="妫�楠屽憳" prop="inspectorName">
+ <el-input v-model="form.inspectorName" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="璐d换浜�" prop="responsiblePerson">
+ <el-input v-model="form.responsiblePerson" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="璐d换閮ㄩ棬" prop="responsibleDept">
+ <el-input v-model="form.responsibleDept" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-form-item label="闂鎻忚堪" prop="problemDescription">
+ <el-input v-model="form.problemDescription" type="textarea" :rows="2" />
+ </el-form-item>
+
+ <el-divider>澶勭疆鍐崇瓥</el-divider>
+ <el-form-item label="澶勭疆鏂瑰紡" prop="disposalMethod">
+ <el-radio-group v-model="form.disposalMethod">
+ <el-radio :value="1">璁╂鎺ユ敹</el-radio>
+ <el-radio :value="2">鍘傚唴缁翠慨</el-radio>
+ <el-radio :value="3">杩斿巶缁翠慨</el-radio>
+ <el-radio :value="4">鎹㈣揣</el-radio>
+ <el-radio :value="5">閫�璐�</el-radio>
+ <el-radio :value="6">鎶ュ簾</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item v-if="form.disposalMethod === 2 || form.disposalMethod === 3" label="缁翠慨璇勪及" prop="repairEvaluation">
+ <el-input v-model="form.repairEvaluation" type="textarea" :rows="3"
+ placeholder="璇勪及缁翠慨鍙鎬с�佹墍闇�宸ユ椂銆佺墿鏂欑瓑" />
+ </el-form-item>
+ <el-form-item label="鍘熷洜鍒嗘瀽鍙婂缓璁�" prop="reasonAnalysis">
+ <el-input v-model="form.reasonAnalysis" type="textarea" :rows="3" />
+ </el-form-item>
+ <el-form-item label="绾犳鎺柦" prop="correctionAction">
+ <el-input v-model="form.correctionAction" type="textarea" :rows="3" />
+ </el-form-item>
+ <el-form-item label="棰勯槻鎺柦" prop="preventiveAction">
+ <el-input v-model="form.preventiveAction" type="textarea" :rows="3" />
+ </el-form-item>
+
+ <el-divider>瀹℃壒鎰忚</el-divider>
+ <el-form-item label="璐d换閮ㄩ棬涓荤鎰忚" prop="deptOpinion">
+ <el-input v-model="form.deptOpinion" type="textarea" :rows="2" />
+ </el-form-item>
+ <el-form-item label="鍏徃澶勭悊鍐冲畾" prop="companyDecision">
+ <el-input v-model="form.companyDecision" type="textarea" :rows="2" />
+ </el-form-item>
+ <el-form-item label="鎬荤粡鐞嗘剰瑙�" prop="generalManagerOpinion">
+ <el-input v-model="form.generalManagerOpinion" type="textarea" :rows="2" />
+ </el-form-item>
+
+ <el-divider>闄勪欢</el-divider>
+ <el-form-item label="闄勪欢">
+ <file-upload v-model="form.storageBlobDTOs" />
+ </el-form-item>
+ </el-form>
+
+ <div class="text-center">
+ <el-button type="primary" @click="handleSubmit">鎻愪氦</el-button>
+ <el-button @click="handleCancel">鍙栨秷</el-button>
+ </div>
+ </div>
+</template>
+```
```js
data() {
return {
form: {
- storageBlobDTOs: [],
- storageBlobVOs: [],
+ unqualifiedId: null,
+ disposalMethod: null,
},
- query: {
- pageNum: 1,
- pageSize: 10,
- status: null,
- projectName: '',
- orderNo: '',
+ rules: {
+ unqualifiedId: [{ required: true, message: '璇烽�夋嫨鍏宠仈涓嶅悎鏍煎搧', trigger: 'change' }],
+ disposalMethod: [{ required: true, message: '璇烽�夋嫨澶勭疆鏂瑰紡', trigger: 'change' }],
},
- statusMap: { 0: '鑽夌', 1: '寰呭鎵�', 2: '瀹℃壒涓�', 3: '宸插畬鎴�', 4: '宸查┏鍥�' },
- disposalMethodMap: { 1: '璁╂鎺ユ敹', 2: '鍘傚唴缁翠慨', 3: '杩斿巶缁翠慨', 4: '鎹㈣揣', 5: '閫�璐�', 6: '鎶ュ簾' },
- unqualifiedProcessMap: { 1: '鏉ユ枡', 2: '鍒剁▼', 3: '鎴愬搧' },
+ unqualifiedList: [],
}
+},
+mounted() {
+ // 鍔犺浇寰呭鐞嗙殑涓嶅悎鏍煎搧鍒楄〃
+ loadUnqualifiedList({ inspectState: 0 }).then(res => this.unqualifiedList = res.rows);
+ if (this.$route.query.id) {
+ getDetail(this.$route.query.id).then(res => this.form = res.data);
+ }
+},
+methods: {
+ handleSubmit() {
+ this.$refs.form.validate(valid => {
+ if (!valid) return;
+ const api = this.form.id ? updateOrder : saveOrder;
+ api(this.form).then(() => {
+ this.$message.success(this.form.id ? '淇敼鎴愬姛' : '鏂板鎴愬姛');
+ this.$router.back();
+ });
+ });
+ },
+ handleCancel() { this.$router.back(); },
}
```
-### 4. API 璋冪敤
+## 澶勭疆鏂瑰紡璇存槑
-```js
-import request from '@/utils/request'
+| 鍊� | 鍚箟 | 绯荤粺鑷姩琛屼负 |
+|----|------|------------|
+| 1 | 璁╂鎺ユ敹 | 鏃犺嚜鍔ㄦ搷浣滐紝闇�浜哄伐鍚庣画澶勭悊 |
+| 2 | 鍘傚唴缁翠慨 | **鑷姩鍒涘缓杩斾慨鐢熶骇璁㈠崟**锛團G 寮�澶� NPS 缂栧彿锛夛紝鍏嬮殕鍘熷伐搴忚矾绾� |
+| 3 | 杩斿巶缁翠慨 | **鑷姩鍒涘缓杩斾慨鐢熶骇璁㈠崟**锛團G 寮�澶� NPS 缂栧彿锛夛紝鍏嬮殕鍘熷伐搴忚矾绾� |
+| 4 | 鎹㈣揣 | 鏃犺嚜鍔ㄦ搷浣� |
+| 5 | 閫�璐� | 鏃犺嚜鍔ㄦ搷浣� |
+| 6 | 鎶ュ簾 | 鏃犺嚜鍔ㄦ搷浣滐紙搴撳瓨鎵e噺鐢辨棫妯″潡 `/quality/qualityUnqualified/deal` 澶勭悊锛� |
-// 鍒嗛〉鏌ヨ
-export function listPage(query) {
- return request({ url: '/qualityUnqualifiedOrder/listPage', method: 'get', params: query })
-}
+## 鐘舵�佹祦杞�
-// 璇︽儏
-export function getDetail(id) {
- return request({ url: `/qualityUnqualifiedOrder/${id}`, method: 'get' })
-}
-
-// 鏂板
-export function save(data) {
- return request({ url: '/qualityUnqualifiedOrder/save', method: 'post', data })
-}
-
-// 淇敼
-export function update(data) {
- return request({ url: '/qualityUnqualifiedOrder/update', method: 'put', data })
-}
-
-// 鍒犻櫎
-export function remove(ids) {
- return request({ url: '/qualityUnqualifiedOrder/delete', method: 'delete', data: ids })
-}
+```
+璐ㄦ鑷姩鍒涘缓 鈹�鈹�> 0(鑽夌) 鈹�鈹�> 璋冪敤 /deal 閫夋嫨澶勭疆鏂瑰紡 鈹�鈹�> 3(宸插畬鎴�)
+鎵嬪姩鏂板(娌¢�夊缃柟寮�) 鈹�鈹�> 0(鑽夌) 鈹�鈹�> 璋冪敤 /deal 鈹�鈹�> 3(宸插畬鎴�)
+鎵嬪姩鏂板(閫変簡澶勭疆鏂瑰紡) 鈹�鈹�> 3(宸插畬鎴�)
```
## 娉ㄦ剰浜嬮」
-- 澶勭悊鍗曠紪鍙� `orderNo` 鐢卞悗绔嚜鍔ㄧ敓鎴愶紙鍓嶇紑 "BHG" + 鏃ユ湡 + 3浣嶈嚜澧炲簭鍙凤級锛屽墠绔棤闇�浼犲叆
-- 鏂板鏃� `status` 榛樿涓� 0锛堣崏绋匡級锛屾棤闇�鍓嶇璁剧疆
-- 鍒犻櫎涓洪�昏緫鍒犻櫎锛岄�氳繃 `deleted` 瀛楁鏍囪
-- 闄勪欢涓婁紶浣跨敤绯荤粺宸叉湁鐨勬枃浠朵笂浼犵粍浠讹紝灏嗚繑鍥炵殑涓存椂鏂囦欢ID閫氳繃 `storageBlobDTOs` 浼犲叆
-- 涓嶅悎鏍煎搧澶勭悊鍗曞彲鍏宠仈 `quality_unqualified` 琛ㄧ殑璁板綍锛堥�氳繃 `unqualifiedId` 瀛楁锛�
+- 妫�楠屽崟鎻愪氦鏃讹紝涓嶅悎鏍兼暟閲� > 0 浼氳嚜鍔ㄥ垱寤哄鐞嗗崟锛堢姸鎬佷负鑽夌锛夛紝**鏃犻渶鎵嬪姩鏂板**
+- 鎵嬪姩鏂板澶勭悊鍗曟椂锛岄�変簡澶勭疆鏂瑰紡鐩存帴瀹屾垚锛屾病閫夊垯淇濇寔鑽夌
+- 鑽夌鐘舵�佺殑澶勭悊鍗曢�氳繃 `/qualityUnqualifiedOrder/deal` 鎺ュ彛琛ュ厖澶勭疆鏂瑰紡
+- 鏃х殑涓嶅悎鏍肩鐞嗭紙`/quality/qualityUnqualified`锛夌户缁敤浜庝笉鍚堟牸鍝侀娆¤褰曞拰鍒楄〃鏌ョ湅
+- 澶勭疆鎿嶄綔缁熶竴浣跨敤鏈ā鍧楋紙`/qualityUnqualifiedOrder`锛�
+- 閫夋嫨"鍘傚唴缁翠慨"鎴�"杩斿巶缁翠慨"鏃讹紝绯荤粺鑷姩鍒涘缓杩斾慨鐢熶骇璁㈠崟锛屾棤闇�鎵嬪姩鎿嶄綔
+- 杩斾慨鐢熶骇璁㈠崟鐨� `disposalMethod` 瀛楁鏍囪浜嗗缃柟寮忥紝鍙湪鐢熶骇璁㈠崟鍒楄〃鍖哄垎鏅�氳鍗曞拰杩斾慨璁㈠崟
+- 澶勭悊鍗曠紪鍙疯嚜鍔ㄧ敓鎴愶紝鍓嶇紑涓� `BHG`
+- 闄勪欢閫氳繃 `storageBlobDTOs` 瀛楁涓婁紶锛屾煡璇㈡椂杩斿洖 `storageBlobVOs`
--
Gitblit v1.9.3