98 lines
5.1 KiB
Markdown
98 lines
5.1 KiB
Markdown
# 合同结算方式:新增选项与第五条条款规则
|
||
|
||
## 目标
|
||
|
||
合同管理「结算方式」下拉增加 **按量结算 / 月结 / 季结 / 其他** 四个选项,供业务录入与列表/详情展示。
|
||
|
||
- **货到付款 / 款到发货**:继续按现状驱动合同打印富文本「第五条、结算方式及期限」及 PDF 同源内容。
|
||
- **新四项**:不走货到/款到那套自动条款;首次需填第五条时使用带当前选项 label 的约定句式;用户改过并保存后按结算方式分 key 保留草稿,不再被自动覆盖。
|
||
|
||
采用方案:**按结算方式分默认文案 + 现有占位符/草稿机制**(不拆第二字段、不真留空占位符)。
|
||
|
||
## 字典
|
||
|
||
字典类型:`crm_settlement_method`(已有)。
|
||
|
||
| dict_label | dict_value | order_num | 说明 |
|
||
|------------|------------|-----------|------|
|
||
| 货到付款 | `arrive_payment` | 0 | 已有;条款驱动 |
|
||
| 款到发货 | `advance_payment` | 1 | 已有;条款驱动 |
|
||
| 按量结算 | `volume_settlement` | 2 | 新增 |
|
||
| 月结 | `monthly_settlement` | 3 | 新增 |
|
||
| 季结 | `quarterly_settlement` | 4 | 新增 |
|
||
| 其他 | `other_settlement` | 5 | 新增 |
|
||
|
||
- 表单、列表 `DictTag`、详情展示继续读字典,**无需改下拉组件结构**。
|
||
- 需提供可重复执行的 SQL 迁移(`backend/scripts/`),并同步基线快照约定(`docs/sql/` 如有惯例则跟)。
|
||
|
||
## 第五条内容解析规则
|
||
|
||
仍使用:
|
||
|
||
- 模板正文第五条位置:`{{SETTLEMENT_METHOD_CONTENT}}`
|
||
- 分方式草稿字段:`settlement_clause_drafts`(JSON:`{ [settlementMethod]: string }`)
|
||
|
||
解析:
|
||
|
||
```text
|
||
content = drafts[settlementMethod]
|
||
|| defaultClause(settlementMethod)
|
||
```
|
||
|
||
### defaultClause
|
||
|
||
| settlementMethod | 默认正文 |
|
||
|------------------|----------|
|
||
| `advance_payment` | `款到发货。需方付款后安排发货,需方收到货物后,供方开具13%增值税专用发票。` |
|
||
| `arrive_payment` | `货到付款,需方收到供方货物后,供方开具13%增值税专用发票,无异议后,以现汇方式月结。` |
|
||
| `volume_settlement` / `monthly_settlement` / `quarterly_settlement` / `other_settlement` | `请根据双方约定填写结算方式:{label}。供方开具13%增值税专用发票,无异议后,以现汇方式月结。` |
|
||
| 其它未知值 | 回退 `arrive_payment` 默认文案(兼容脏数据) |
|
||
|
||
其中 `{label}` 为字典 label(按量结算 / 月结 / 季结 / 其他)。示例:
|
||
|
||
- 月结 → `请根据双方约定填写结算方式:月结。供方开具13%增值税专用发票,无异议后,以现汇方式月结。`
|
||
- 按量结算 → `请根据双方约定填写结算方式:按量结算。供方开具13%增值税专用发票,无异议后,以现汇方式月结。`
|
||
|
||
### 「占位不变」在本方案中的含义
|
||
|
||
1. 存库模板第五条仍保存为占位符(与现网一致),打开打印/生成 PDF 时再解析。
|
||
2. 新四项**不得**误用货到付款/款到发货整段默认句(这是相对现状的关键修复点)。
|
||
3. 用户在打印弹窗编辑第五条并保存后,写入 `settlement_clause_drafts[当前 settlementMethod]`;再次打开同方式优先用草稿,**不自动覆盖**。
|
||
4. 在货到/款到与新四项之间切换时,各用各的草稿或默认,互不踩踏。
|
||
|
||
## 前后端一致性
|
||
|
||
前端(打印弹窗打开、`replacePlaceholders`、PDF 再替换)与后端 `save_template` 在空草稿兜底时,**必须使用同一套 defaultClause 规则**。
|
||
|
||
建议:
|
||
|
||
- 前端抽出共享函数(如 `settlementClause.ts`),`ContractDetailDialog.vue` 与仍在用的 `detail.vue` 共用。
|
||
- 后端抽出纯函数(如 CRUD 旁或 `services` 小模块),`save_template` 调用;并补单测覆盖六种方式 + 未知值。
|
||
|
||
前端取 label:字典 `crm_settlement_method`;后端兜底可用固定 value→label 映射(与上表一致),避免依赖运行时字典表。
|
||
|
||
## 不变范围
|
||
|
||
- 不改合同其它条款(如第三条送货方式)的生成逻辑。
|
||
- 不新增独立「条款结算方式」字段。
|
||
- 不改变审批/执行等状态机。
|
||
- 不要求历史合同批量回填 `settlement_clause_drafts`(打开时按新规则即时解析即可)。
|
||
|
||
## 改动落点(实现时)
|
||
|
||
| 区域 | 内容 |
|
||
|------|------|
|
||
| SQL | 向 `sys_dict_data` 插入四条(幂等) |
|
||
| 前端 | 第五条 default / 解析逻辑;打印与 PDF 路径 |
|
||
| 后端 | `save_template` 空草稿默认文案与前端对齐 |
|
||
| 测试 | 后端 defaultClause / save 兜底单测 |
|
||
|
||
## 验收要点
|
||
|
||
1. 新增/编辑结算方式下拉可见 6 项;新四项可保存,列表/详情 Tag 显示正确。
|
||
2. 选「款到发货 / 货到付款」→ 第五条仍为原默认(或各自已有草稿)。
|
||
3. 选「月结」且无草稿、首次打开打印 → 第五条为带「月结」的约定句;手改保存后再打开仍为改后内容。
|
||
4. 「按量结算 / 季结 / 其他」同理,label 随选项变化。
|
||
5. PDF 与打印弹窗第五条一致。
|
||
6. 从「货到付款」改为「月结」再打开打印 → 显示月结约定句(或月结草稿),不再误显示货到付款默认句(除非用户曾把相同文案存进月结草稿)。
|