From bee96a1d36c86068cd5a7eb69f4e3294a8123b04 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期五, 03 七月 2026 18:02:55 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_business' into dev_business

---
 docs/crm_erp_integration_frontend.md |  199 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 199 insertions(+), 0 deletions(-)

diff --git a/docs/crm_erp_integration_frontend.md b/docs/crm_erp_integration_frontend.md
index 3a3afbc..9bf5edb 100644
--- a/docs/crm_erp_integration_frontend.md
+++ b/docs/crm_erp_integration_frontend.md
@@ -698,6 +698,10 @@
 ALTER TABLE `crm_contract`
 ADD COLUMN `order_id` bigint DEFAULT NULL COMMENT '鍏宠仈 ERP 閿�鍞鍗曠紪鍙�' AFTER `total_price`,
 ADD COLUMN `order_no` varchar(32) DEFAULT NULL COMMENT 'ERP 閿�鍞鍗曞崟鍙�' AFTER `order_id`;
+
+-- 鏂板瀹氶噾閲戦瀛楁
+ALTER TABLE `crm_contract`
+ADD COLUMN `deposit_price` decimal(24,6) DEFAULT NULL COMMENT '瀹氶噾閲戦锛屽崟浣嶏細鍏�' AFTER `total_price`;
 ```
 
 ### 5.2 CRM 鍟嗘満琛�
@@ -1006,3 +1010,198 @@
 |------|------|
 | `docs/crm_erp_integration_frontend.md` | 鏈枃妗� |
 | `docs/crm_erp_integration_sql.sql` | SQL 鍙樻洿鑴氭湰 |
+
+---
+
+## 鍗佷簩銆侀攢鍞鍗曚綔搴熷姛鑳斤紙鏂板锛�
+
+### 12.1 鍔熻兘璇存槑
+
+閿�鍞鍗曚綔搴熷姛鑳界敤浜庢爣璁板凡瀹℃牳鐨勮鍗曚负"宸蹭綔搴�"鐘舵�侊紝瀹炵幇璁㈠崟鍏ㄦ祦绋嬪彲杩芥函銆�
+
+**涓氬姟瑙勫垯锛�**
+- 鍙湁宸插鏍哥殑璁㈠崟鎵嶈兘浣滃簾
+- 宸插嚭搴撴垨宸查��璐х殑璁㈠崟涓嶈兘浣滃簾
+- 浣滃簾鍚庤鍗曠姸鎬佸彉涓�"宸蹭綔搴�"
+- 浣滃簾鍚庡悓姝ユ洿鏂板叧鑱斿悎鍚岀姸鎬佷负"宸蹭綔搴�"
+- 绠$悊鍛樺彲浠ラ噸鏂板惎鐢ㄥ凡浣滃簾鐨勮鍗�
+
+### 12.2 鐘舵�佹灇涓�
+
+| 鐘舵�佸�� | 鏋氫妇 | 璇存槑 |
+|--------|------|------|
+| 10 | PROCESS | 鏈鏍� |
+| 20 | APPROVE | 宸插鏍� |
+| 30 | CANCEL | 宸蹭綔搴� |
+
+### 12.3 鍚堝悓鐘舵�佸悓姝�
+
+褰撻攢鍞鍗曚綔搴�/鍚敤鏃讹紝浼氳嚜鍔ㄥ悓姝ュ叧鑱斿悎鍚岀殑鐘舵�侊細
+
+| 鎿嶄綔 | 璁㈠崟鐘舵�佸彉鍖� | 鍚堝悓鐘舵�佸彉鍖� |
+|------|--------------|--------------|
+| 浣滃簾璁㈠崟 | 宸插鏍� 鈫� 宸蹭綔搴� | 瀹℃牳閫氳繃 鈫� 宸蹭綔搴� |
+| 鍚敤璁㈠崟 | 宸蹭綔搴� 鈫� 宸插鏍� | 宸蹭綔搴� 鈫� 瀹℃牳閫氳繃 |
+
+**鍚堝悓鐘舵�佹灇涓撅細**
+
+| 鐘舵�佸�� | 鏋氫妇 | 璇存槑 |
+|--------|------|------|
+| 0 | DRAFT | 鏈彁浜� |
+| 10 | PROCESS | 瀹℃壒涓� |
+| 20 | APPROVE | 瀹℃牳閫氳繃 |
+| 30 | REJECT | 瀹℃牳涓嶉�氳繃 |
+| 40 | CANCEL | 宸插彇娑� |
+| 50 | INVALID | 宸蹭綔搴� |
+
+### 12.4 API 鎺ュ彛
+
+| 鏂规硶 | 璺緞 | 璇存槑 |
+|------|------|------|
+| PUT | /erp/sale-order/cancel | 浣滃簾閿�鍞鍗� |
+| PUT | /erp/sale-order/enable | 閲嶆柊鍚敤閿�鍞鍗� |
+
+**璇锋眰鍙傛暟锛�**
+
+| 鍙傛暟 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+|------|------|------|------|
+| id | Long | 鏄� | 閿�鍞鍗曠紪鍙� |
+
+**鍝嶅簲锛�**
+
+```json
+{
+  "code": 0,
+  "msg": "鎿嶄綔鎴愬姛"
+}
+```
+
+**閿欒鐮侊細**
+
+| 閿欒鐮� | 璇存槑 |
+|--------|------|
+| 1_020_201_011 | 浣滃簾澶辫触锛岃鍗曟湭瀹℃牳 |
+| 1_020_201_012 | 浣滃簾澶辫触锛屽凡瀛樺湪瀵瑰簲鐨勯攢鍞嚭搴撳崟 |
+| 1_020_201_013 | 浣滃簾澶辫触锛屽凡瀛樺湪瀵瑰簲鐨勯攢鍞��璐у崟 |
+| 1_020_201_014 | 浣滃簾澶辫触锛岃鍒锋柊椤甸潰鍚庨噸璇� |
+| 1_020_201_015 | 鍚敤澶辫触锛岃鍗曟湭浣滃簾 |
+| 1_020_201_016 | 鍚敤澶辫触锛岃鍒锋柊椤甸潰鍚庨噸璇� |
+
+### 12.5 鍓嶇淇敼鐐�
+
+**鏂囦欢璺緞锛�** `/src/views/erp/sale/order/index.vue`
+
+**鎿嶄綔鍒楁寜閽細**
+
+```html
+<el-table-column label="鎿嶄綔" width="280">
+  <template #default="{ row }">
+    <el-button v-if="row.status === 10" type="primary" size="small" @click="handleUpdate(row)">缂栬緫</el-button>
+    <el-button v-if="row.status === 10" type="success" size="small" @click="handleApprove(row)">瀹℃牳</el-button>
+    <el-button v-if="row.status === 20" type="warning" size="small" @click="handleProcess(row)">鍙嶅鏍�</el-button>
+    <el-button v-if="row.status === 20" type="danger" size="small" @click="handleCancel(row)">浣滃簾</el-button>
+    <el-button v-if="row.status === 30" type="success" size="small" @click="handleEnable(row)">鍚敤</el-button>
+    <el-button v-if="row.status === 10" type="danger" size="small" @click="handleDelete(row)">鍒犻櫎</el-button>
+  </template>
+</el-table-column>
+```
+
+**鐘舵�佹爣绛撅細**
+
+```html
+<el-table-column label="鐘舵��" prop="status" width="100">
+  <template #default="{ row }">
+    <el-tag v-if="row.status === 10" type="warning">鏈鏍�</el-tag>
+    <el-tag v-if="row.status === 20" type="success">宸插鏍�</el-tag>
+    <el-tag v-if="row.status === 30" type="info">宸蹭綔搴�</el-tag>
+  </template>
+</el-table-column>
+```
+
+**鍏宠仈鍚堝悓鍒楋紙浣滃簾鏃舵樉绀虹孩鑹诧級锛�**
+
+```html
+<el-table-column label="鍏宠仈鍚堝悓" prop="contractNo" width="150">
+  <template #default="{ row }">
+    <el-link
+      v-if="row.contractId"
+      :type="row.status === 30 ? 'danger' : 'primary'"
+      @click="handleViewContract(row)"
+    >
+      {{ row.contractNo }}
+    </el-link>
+    <span v-else>-</span>
+  </template>
+</el-table-column>
+```
+
+**JS 鏂规硶锛�**
+
+```js
+import { cancelSaleOrder, enableSaleOrder } from '@/api/erp/saleOrder'
+
+methods: {
+  async handleCancel(row) {
+    try {
+      await this.$confirm('纭浣滃簾璇ラ攢鍞鍗曪紵浣滃簾鍚庡叧鑱斿悎鍚屼篃灏嗘爣璁颁负宸蹭綔搴燂紒', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      })
+      await cancelSaleOrder(row.id)
+      this.$message.success('浣滃簾鎴愬姛')
+      this.getList()
+    } catch (e) {
+      if (e !== 'cancel') {
+        this.$message.error(e.message || '浣滃簾澶辫触')
+      }
+    }
+  },
+  async handleEnable(row) {
+    try {
+      await this.$confirm('纭閲嶆柊鍚敤璇ラ攢鍞鍗曪紵鍚敤鍚庡叧鑱斿悎鍚屽皢鎭㈠涓哄鏍搁�氳繃鐘舵�侊紒', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'info'
+      })
+      await enableSaleOrder(row.id)
+      this.$message.success('鍚敤鎴愬姛')
+      this.getList()
+    } catch (e) {
+      if (e !== 'cancel') {
+        this.$message.error(e.message || '鍚敤澶辫触')
+      }
+    }
+  }
+}
+```
+
+**API 瀹氫箟鏂囦欢锛�** `/src/api/erp/saleOrder.js`
+
+```js
+// 浣滃簾閿�鍞鍗�
+export function cancelSaleOrder(id) {
+  return request({
+    url: '/erp/sale-order/cancel',
+    method: 'put',
+    params: { id }
+  })
+}
+
+// 閲嶆柊鍚敤閿�鍞鍗�
+export function enableSaleOrder(id) {
+  return request({
+    url: '/erp/sale-order/enable',
+    method: 'put',
+    params: { id }
+  })
+}
+```
+
+### 12.6 娉ㄦ剰浜嬮」
+
+1. 浣滃簾鎿嶄綔浼氬悓姝ユ洿鏂板叧鑱斿悎鍚岀姸鎬佷负"宸蹭綔搴�"
+2. 鍚敤鎿嶄綔浼氬悓姝ユ洿鏂板叧鑱斿悎鍚岀姸鎬佷负"瀹℃牳閫氳繃"
+3. 宸插嚭搴�/宸查��璐х殑璁㈠崟涓嶈兘浣滃簾锛岄渶鍏堝鐞嗙浉鍏充笟鍔″崟鎹�
+4. 浣滃簾鍚庤鍗曞彿鏄剧ず涓虹孩鑹诧紝鎻愰啋鐢ㄦ埛璇ヨ鍗曞凡澶辨晥
+5. 鍚敤鍔熻兘闇�瑕佺鐞嗗憳鏉冮檺锛坄erp:sale-order:enable`锛�

--
Gitblit v1.9.3