提交
This commit is contained in:
1 parent
42ad896456
commit
6b2147aa46
66 files changed
+617071
-28046
No files matched your search
@@ -31,7 +31,7 @@
|
||||
**Files:**
|
||||
- Create: `backend/scripts/migrate_20260816_crm_settlement_method_options.sql`
|
||||
|
||||
- [ ] **Step 1: 写入幂等 INSERT**
|
||||
- [x] **Step 1: 写入幂等 INSERT**
|
||||
|
||||
```sql
|
||||
-- backend/scripts/migrate_20260816_crm_settlement_method_options.sql
|
||||
@@ -69,7 +69,7 @@ ON DUPLICATE KEY UPDATE
|
||||
`update_time` = NOW();
|
||||
```
|
||||
|
||||
- [ ] **Step 2: 在目标库执行该 SQL,刷新管理端字典缓存后确认下拉出现 6 项**
|
||||
- [x] **Step 2: 在目标库执行该 SQL,刷新管理端字典缓存后确认下拉出现 6 项**
|
||||
|
||||
---
|
||||
|
||||
@@ -79,7 +79,7 @@ ON DUPLICATE KEY UPDATE
|
||||
- Create: `backend/app/services/crm_settlement_clause.py`
|
||||
- Create: `backend/tests/test_crm_settlement_clause.py`
|
||||
|
||||
- [ ] **Step 1: 先写失败单测**
|
||||
- [x] **Step 1: 先写失败单测**
|
||||
|
||||
```python
|
||||
# backend/tests/test_crm_settlement_clause.py
|
||||
@@ -115,7 +115,7 @@ def test_empty_falls_back_to_arrive():
|
||||
assert default_settlement_clause(None) == default_settlement_clause("arrive_payment")
|
||||
```
|
||||
|
||||
- [ ] **Step 2: 运行确认失败**
|
||||
- [x] **Step 2: 运行确认失败**
|
||||
|
||||
```bash
|
||||
cd backend && source venv/bin/activate && pytest tests/test_crm_settlement_clause.py -v
|
||||
@@ -123,7 +123,7 @@ cd backend && source venv/bin/activate && pytest tests/test_crm_settlement_claus
|
||||
|
||||
Expected: FAIL(模块不存在)
|
||||
|
||||
- [ ] **Step 3: 实现纯函数**
|
||||
- [x] **Step 3: 实现纯函数**
|
||||
|
||||
```python
|
||||
# backend/app/services/crm_settlement_clause.py
|
||||
@@ -163,7 +163,7 @@ def default_settlement_clause(settlement_method: Optional[str]) -> str:
|
||||
return ARRIVE_CLAUSE
|
||||
```
|
||||
|
||||
- [ ] **Step 4: 再跑单测,期望全部 PASS**
|
||||
- [x] **Step 4: 再跑单测,期望全部 PASS**
|
||||
|
||||
```bash
|
||||
cd backend && source venv/bin/activate && pytest tests/test_crm_settlement_clause.py -v
|
||||
@@ -176,13 +176,13 @@ cd backend && source venv/bin/activate && pytest tests/test_crm_settlement_claus
|
||||
**Files:**
|
||||
- Modify: `backend/app/crud/crm/contract.py`(`save_template` 内空草稿兜底,约 1661–1669 行)
|
||||
|
||||
- [ ] **Step 1: 增加 import**
|
||||
- [x] **Step 1: 增加 import**
|
||||
|
||||
```python
|
||||
from app.services.crm_settlement_clause import default_settlement_clause
|
||||
```
|
||||
|
||||
- [ ] **Step 2: 替换空草稿兜底**
|
||||
- [x] **Step 2: 替换空草稿兜底**
|
||||
|
||||
将:
|
||||
|
||||
@@ -213,7 +213,7 @@ drafts = json.dumps(
|
||||
**Files:**
|
||||
- Create: `web-admin/src/views/crm/contract/settlementClause.ts`
|
||||
|
||||
- [ ] **Step 1: 新增共享模块**
|
||||
- [x] **Step 1: 新增共享模块**
|
||||
|
||||
```typescript
|
||||
/** 与后端 app.services.crm_settlement_clause 保持一致 */
|
||||
@@ -282,7 +282,7 @@ export function resolveSettlementClauseContent(options: {
|
||||
**Files:**
|
||||
- Modify: `web-admin/src/views/crm/contract/components/ContractDetailDialog.vue`
|
||||
|
||||
- [ ] **Step 1: import**
|
||||
- [x] **Step 1: import**
|
||||
|
||||
```typescript
|
||||
import {
|
||||
@@ -291,7 +291,7 @@ import {
|
||||
} from '../settlementClause'
|
||||
```
|
||||
|
||||
- [ ] **Step 2: 删除组件内重复的 `getDefaultSettlementClauseContent` / 内层 `parseSettlementClauseDrafts`(`replacePlaceholders` 内与文件级各一处),改为调用共享函数**
|
||||
- [x] **Step 2: 删除组件内重复的 `getDefaultSettlementClauseContent` / 内层 `parseSettlementClauseDrafts`(`replacePlaceholders` 内与文件级各一处),改为调用共享函数**
|
||||
|
||||
在 `replacePlaceholders` 内,第五条取值改为:
|
||||
|
||||
@@ -306,7 +306,7 @@ const getSettlementClauseContent = (): string =>
|
||||
|
||||
文件级若仍有 `parseSettlementClauseDrafts` 供保存草稿使用,改为直接使用 import 的同名函数,删除本地实现。
|
||||
|
||||
- [ ] **Step 3: 手工验证**
|
||||
- [ ] **Step 3: 手工验证**(需在浏览器确认)
|
||||
|
||||
1. 选月结 → 打开打印 → 第五条含「结算方式:月结。」
|
||||
2. 选手改第五条并保存 → 再打开仍为改后文案
|
||||
@@ -320,7 +320,7 @@ const getSettlementClauseContent = (): string =>
|
||||
**Files:**
|
||||
- Modify: `web-admin/src/views/crm/contract/detail.vue`
|
||||
|
||||
- [ ] **Step 1: 同样 import `resolveSettlementClauseContent` / `parseSettlementClauseDrafts`,删除本地重复实现,第五条解析走共享函数**(与 Task 5 相同规则)
|
||||
- [x] **Step 1: 同样 import `resolveSettlementClauseContent` / `parseSettlementClauseDrafts`,删除本地重复实现,第五条解析走共享函数**(与 Task 5 相同规则)
|
||||
|
||||
若该页已废弃不再进入打印路径,仍建议对齐,避免双份逻辑分叉。
|
||||
|
||||
@@ -328,7 +328,7 @@ const getSettlementClauseContent = (): string =>
|
||||
|
||||
### Task 7: 验收与图谱
|
||||
|
||||
- [ ] **Step 1: 再跑**
|
||||
- [x] **Step 1: 再跑**
|
||||
|
||||
```bash
|
||||
cd backend && source venv/bin/activate && pytest tests/test_crm_settlement_clause.py -v
|
||||
@@ -336,9 +336,9 @@ cd backend && source venv/bin/activate && pytest tests/test_crm_settlement_claus
|
||||
|
||||
Expected: PASS
|
||||
|
||||
- [ ] **Step 2: 对照 spec「验收要点」手工走一遍 6 项结算方式**
|
||||
- [ ] **Step 2: 对照 spec「验收要点」手工走一遍 6 项结算方式**(需在浏览器确认)
|
||||
|
||||
- [ ] **Step 3: 更新图谱**
|
||||
- [x] **Step 3: 更新图谱**
|
||||
|
||||
```bash
|
||||
./scripts/update-graph.sh backend
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# 报价单列表 · 可配置列统计行
|
||||
|
||||
**日期:** 2026-08-16
|
||||
**状态:** 待实现
|
||||
**状态:** 已实现(V1.5:`6ce755455` / `072790989` / `42ad89645`)
|
||||
**范围:** `web-admin` 报价单管理主列表(`/#/crm/quote`)
|
||||
**非目标:** 后端聚合、跨页统计、`ListTable` 通用能力、展开行产品子表、其它业务列表
|
||||
|
||||
|
||||
Reference in new issue
Block a user