109 lines
4.1 KiB
Markdown
109 lines
4.1 KiB
Markdown
# 合同管理模块 — 08 验证清单
|
||
|
||
> 阶段 E 步骤 28 产出 | 日期:2026-05-31
|
||
> **代码审查 + 构建验证**已完成;**浏览器联调手测**项建议在测试环境复验。
|
||
|
||
---
|
||
|
||
## 构建与注册
|
||
|
||
- [x] `pnpm build` 通过(web-admin)
|
||
- [x] 路由注册:`crm.py` → `register_contract_routes` + `register_contract_sub_routes`
|
||
- [x] 前端 API 基路径 `/web/crm/contract`,HTTP 动词对齐 Java(GET/PUT/DELETE/POST)
|
||
- [x] DDL 已在测试库执行(步骤 14)
|
||
|
||
---
|
||
|
||
## 功能验证(代码对齐)
|
||
|
||
### 列表 Tab
|
||
|
||
- [x] 7 个 Tab:`my` / `all` / `submitted` / `approved` / `executing` / `finished` / `invalid`
|
||
- [x] `handleViewChange` 设置 `ownerUserId` / `pendingApprovalUserId` / `approvedByUserId` / `status`
|
||
- [x] 非「已作废」Tab 默认 `excludeStatus=invalid`(`getList`)
|
||
- [x] 后端 `build_query_wrapper` 支持上述筛选字段
|
||
- [x] 统计卡片由当前页列表前端聚合(`loadStatistics`)
|
||
- [ ] Tab 切换后数据与权限角色一致(手测)
|
||
|
||
### 筛选 / 分页 / 展开
|
||
|
||
- [x] 筛选区:合同编号/名称/客户、类型、状态、审批状态、签订日期
|
||
- [x] 快捷日期 + 快速搜索 OR 三字段
|
||
- [x] 查询/重置触发 `getList`,分页绑定 `pageNum` / `pageSize`
|
||
- [x] 行展开懒加载产品明细(`getContractDetail`)
|
||
- [ ] 筛选组合与导出结果一致(手测)
|
||
|
||
### 审批流
|
||
|
||
- [x] `ApprovalDialog`:提交 / 批量提交 / 通过 / 驳回 / 撤回
|
||
- [x] 前端状态校验:仅 `draft` 可提交;对话框 Fresh Mint
|
||
- [x] 后端:`submit_contract_approval` / `batch_submit` / `withdraw` + `approve_contract_by_contract_id`
|
||
- [ ] 多步审批:选下一步审批人、会签/或签(手测;当前对话框为顺序多选审批人)
|
||
- [ ] 待审批 Tab 仅见 `canApprove=true` 行(手测)
|
||
|
||
### 执行 / 完成 / 作废
|
||
|
||
- [x] `ExecuteDialog`:开始执行(`startExecute`)/ 完成(`finishContract`)
|
||
- [x] `InvalidDialog`:作废原因字典 + 二次确认 + 回款/开票风险提示
|
||
- [x] 状态机:approved→executing→finished;非 finished 可 invalid
|
||
- [ ] 执行汇总金额与详情一致(手测)
|
||
|
||
### 附件 / 导出
|
||
|
||
- [x] `UploadDialog`:分类上传、MinIO、保存 `uploadAttachments`
|
||
- [x] 列表导出 `exportContract` → `POST /export` xlsx
|
||
- [ ] 导出列与字典翻译正确(手测)
|
||
- [ ] 附件预览/下载/删除(手测)
|
||
|
||
### 跨模块
|
||
|
||
- [x] 报价转合同:`createFromQuote` + `quote.to_contract` 已恢复
|
||
- [ ] 商机转合同、续签、签约、批量分配负责人(手测)
|
||
- [ ] 回款/开票金额回写 `updateReceivedAmount` / `updateInvoiceAmount`(手测,依赖回款/开票模块)
|
||
|
||
---
|
||
|
||
## UI 合规(Fresh Mint)
|
||
|
||
- [x] 列表单 `panel-top` 标题「合同管理」
|
||
- [x] 工具栏「已选 N 项」在前;仅首个主按钮 `type="primary"`
|
||
- [x] 4 子对话框 + 列设置/详情弹窗:`align-center`、`dialog-form-layout`、`order-module-dialog-mask`
|
||
- [x] 子对话框 `label-position="top"`;footer Close/Check 图标
|
||
- [x] 状态/审批状态列与详情:`el-tag` + `dictStore.getTagType`
|
||
- [x] 操作列 `fixed="right"`,`min-width="260"`
|
||
|
||
---
|
||
|
||
## 权限
|
||
|
||
- [x] `useContractPerm` + `hasContractPerm` 替代 `v-hasPermi`(列表/详情/变更/模板/审批子页)
|
||
- [ ] 测试角色勾选 `crm:contract:*` 后按钮可见性(手测)
|
||
|
||
---
|
||
|
||
## 子模块(变更 / 模板 / 审批独立页)
|
||
|
||
- [x] 后端 `crm_contract_sub_routes.py`:change / template / approval CRUD + export + transfer
|
||
- [x] 前端页面与 API 文件齐全(Fresh Mint 适配在步骤 7–10 完成)
|
||
- [ ] 变更提交/执行、模板启停、审批转办(手测)
|
||
|
||
---
|
||
|
||
## 回归
|
||
|
||
- [ ] 报价单列表「转合同」链路(手测)
|
||
- [ ] 客户详情弹窗引用合同 types 未破坏(手测)
|
||
- [ ] 产品/客户/报价模块未受影响(手测)
|
||
|
||
---
|
||
|
||
## 手测建议顺序
|
||
|
||
1. 登录测试租户 → 合同列表 7 Tab 各点一次
|
||
2. 筛选 + 分页 + 行展开产品
|
||
3. 草稿 → 提交审批 → 待审批 Tab 通过/驳回
|
||
4. 已通过 → 开始执行 → 完成
|
||
5. 另选合同 → 作废
|
||
6. 上传扫描件 → 导出 xlsx
|
||
7. 报价单 → 转合同
|