SOP-102:新客政策报备 E2E 测试
支持复制到 Excel 的标准 SOP 模板;每个
任务(Task ID)表示一个可打卡的子文档,便于人工/机器按照序号完成并记录进度。
文档元数据
- 文档类型:SOP / Checklist
- 适用场景:
http://localhost:3000/crm/customer客户管理界面 → 政策标签创建工作流 - 创建者:QA / 自动化工程
- 最近更新时间:2025-12-22
- 相关接口定义:
crm.swagger.json中工作流相关接口 - 配置文件:
core/internal/workflow/add_policy_prod.yaml
前置条件
| 条件 | 检查方式 |
|---|---|
本地或测试环境可访问 http://localhost:3000/crm/customer |
浏览器打开,页面未返回 500/404 |
| 已使用有权限的用户登录 | 登录接口/前端登录流程成功,能加载左侧导航 |
| 至少存在一个客户记录 | 客户列表页面有数据显示 |
| 部门层级关系配置正确 | 后台设置 → 部门 |
| 产品/政策数据已准备 | 产品列表中有可用的政策产品 |
流程图
graph LR
A[发起申请] --> B[部门审批]
B --> C[生效]
C --> D[抄送]
审批角色
| 步骤 | 审批人 | 说明 |
|---|---|---|
| 部门审批 | 连续多级部门负责人 | 逐级向上审批直至最高层 |
| 抄送 | 媒介 + 财务 | 工作流完成后自动抄送相关人员 |
任务矩阵(Excel Checklist 行模板)
每个任务独立一个表格,依次执行并记录状态;状态列可直接粘贴到 Excel 以打勾 [ ] → [x]。
任务 T1:环境与账号验证
入口:http://localhost:3000/crm/customer
| Action Steps | Input / Payload | 预期结果 | 验证方式 | 证据 | 状态 | 下游任务 |
|---|---|---|---|---|---|---|
| 步骤1:打开浏览器 | — | 浏览器启动成功 | 浏览器窗口打开 | 屏幕截图 | [ ] |
步骤 2 |
| 步骤2:输入 URL | http://localhost:3000/crm/customer |
页面开始加载 | 地址栏显示正确 URL | 屏幕截图 | [ ] |
步骤 3 |
| 步骤3:登录 | 账号/密码 | 登录成功,跳转到主页 | 左侧导航栏显示 | 屏幕截图、浏览器日志 | [ ] |
步骤 4 |
| 步骤4:导航到「客户」 | 点击左侧「客户」菜单 | 页面成功加载、显示客户列表表格、无 500 错误 | UI:存在标题「客户」、表格;Console:无错误 | 屏幕截图、浏览器日志 | [ ] |
T2 |

图:客户列表页面,显示客户简称、编号、类型、资金池余额等列
操作说明: - 成功登录后,点击左侧导航栏的「客户」菜单 - 页面显示客户列表表格,包含客户简称、编号、类型、资金池余额等列 - 表格右上角有「导出」和「创建客户」按钮 - 确认页面加载完成,无错误提示
任务 T2:找到政策标签列并点击创建按钮
前置条件:T1 成功且当前在客户列表
| Action Steps | Input / Payload | 预期结果 | 验证方式 | 证据 | 状态 | 下游任务 |
|---|---|---|---|---|---|---|
| 步骤1:定位到客户行 | 选择任意一个客户记录 | 客户行高亮显示 | 行被选中 | 屏幕截图 | [ ] |
步骤 2 |
| 步骤2:滚动到「客户政策标签」列 | 水平滚动表格或调整列宽 | 「客户政策标签」列可见 | 列标题显示「客户政策标签」 | 屏幕截图 | [ ] |
步骤 3 |
| 步骤3:点击「+」按钮 | 点击政策标签列中的「+」图标按钮 | 弹出「创建政策标签」对话框 | 对话框显示,标题为「创建政策标签」 | 屏幕截图 | [ ] |
T3 |

图:客户政策标签列,显示现有标签和「+」按钮
操作说明: - 在客户列表中选择一个客户行(如"ceshi"客户) - 水平滚动表格或调整列宽,直到看到「客户政策标签」列 - 该列显示现有的政策标签(如有),以及一个带「+」号的链接按钮 - 点击「+」按钮以打开创建政策标签对话框
任务 T3:填写政策标签创建表单
前置条件:T2 成功且「创建政策标签」对话框已打开
| Action Steps | Input / Payload | 预期结果 | 验证方式 | 证据 | 状态 | 下游任务 |
|---|---|---|---|---|---|---|
| 步骤1:选择标签类型 | 选择「折扣」或「后返」tab | Tab 切换成功 | 对应 tab 高亮显示 | 屏幕截图 | [ ] |
步骤 2 |
| 步骤2:填写政策名称 | 政策名称:测试政策标签-QA-{{timestamp}} |
字段成功填写,无验证错误 | 输入框显示正确内容 | 屏幕截图 | [ ] |
步骤 3 |
| 步骤3:设置折扣率 | 折扣率:使用滑块或输入框设置为 5% |
折扣率值正确显示 | 滑块位置和输入框值同步 | 屏幕截图 | [ ] |
步骤 4 |
| 步骤4:选择生效日期 | 选择未来某个日期(如明天) | 日期选择成功 | 日期选择器显示选中日期 | 屏幕截图 | [ ] |
步骤 5 |
| 步骤5:点击确认按钮 | — | 对话框关闭,显示「创建成功」提示和工作流对话框 | Toast:创建成功;工作流对话框弹出 | 截图 + 系统提示 | [ ] |
T4 |

图:创建政策标签对话框,包含政策名称、折扣率滑块、生效日期选择器
对话框内容: - 标题:「创建政策标签」 - 描述:「可以创建政策名称、折扣率、生效日期」 - Tab 选项:「折扣」和「后返」两个标签页(默认选中「折扣」) - 表单字段: - 政策名称(必填)- 示例:测试政策标签234 - 折扣率滑块(-30% ~ 30%,步长 0.01%)- 绿色滑块,可拖动调整 - 折扣率输入框(与滑块同步)- 显示当前值(如0.07%) - 生效日期选择器(必填)- 日历图标按钮,点击选择日期(如2025年12月23日) - 按钮:「取消」(灰色)和「确认」(绿色)
字段验证规则说明:
| 字段 | 验证规则 | 错误提示 |
|---|---|---|
| 政策名称 | 必填,字符串 | "请输入政策名称" |
| 折扣率 | 必填,数值范围 -30% ~ 30% | "请输入有效的折扣率" |
| 生效日期 | 必填,未来日期 | "请选择生效日期" |
任务 T4:查看工作流详情并记录 ID
前置条件:T3 成功
| Action Steps | Input / Payload | 预期结果 | 验证方式 | 证据 | 状态 | 下游任务 |
|---|---|---|---|---|---|---|
| 步骤1:查看工作流状态 | 点击‘点击此处’或导航到工作流页面 | 工作流状态为「审核中」 | 状态显示正确 | 屏幕截图 | [ ] |
步骤 2 |
| 步骤2:返回客户列表 | 客户列表页面可见 | 屏幕截图 | [ ] |
T5 |

图:工作流创建成功对话框,显示绿色对勾和查看审批流程链接
工作流对话框内容: - 显示一个绿色的对勾图标表示成功 - 标题:「创建成功」 - 提示文字:「点击此处 查看审批流程」("点击此处"是可点击的链接) - 按钮:「确认」(绿色按钮,点击后关闭对话框并返回客户列表) - 背景:客户列表页面,可以看到「客户政策标签」列 - 注意:此时工作流已创建,状态为「等待审批」或「审核中」
任务 T5:部门审批流程 - 第一级
前置条件:T4 成功
| Action Steps | Input / Payload | 预期结果 | 验证方式 | 证据 | 状态 | 下游任务 |
|---|---|---|---|---|---|---|
| 步骤1:切换到直属领导账号 | 登出当前账号,登录直属领导账号 | 登录成功 | 显示直属领导的用户信息 | 屏幕截图 | [ ] |
步骤 2 |
| 步骤2:导航到工作流页面 | 点击「工作流」菜单 | 工作流列表页面加载 | 页面显示工作流列表 | 屏幕截图 | [ ] |
步骤 3 |
| 步骤3:切换到「要我审批」Tab | 点击「要我审批」tab | 显示待审批的工作流列表 | 看到刚创建的政策标签工作流 | 屏幕截图 | [ ] |
步骤 4 |
| 步骤4:点击工作流查看详情 | 单击或双击工作流行 | 进入工作流详情页面 | 显示完整的工作流信息 | 屏幕截图 | [ ] |
步骤 5 |
| 步骤5:点击「同意」按钮 | 可选填写审批意见,点击「批准」 | 审批成功 | 显示成功提示,工作流状态更新 | 屏幕截图 | [ ] |
T6 |

图:工作流列表页面,显示「全部」、「与我有关」、「我发起的」、「要我审批」选项卡
工作流列表页面: - 页面标题:「工作流」 - Tab 选项:「全部」、「与我有关」、「我发起的」、「要我审批」 - 默认显示「全部」tab,列出所有工作流 - 表格列:工作流名称、工作流ID、状态、创建者、操作 - 可以看到多个工作流,包括: - 「新政策标签」(刚刚创建的)- 状态:「审核中」或「等待审批」 - 「创建产品标签」 - 「资金池挂账入账」等其他工作流 - 每行右侧有「撤销」操作按钮(橙色) - 底部有分页控件:「每页显示 20 条」,「1 到 20 的 34」
后续步骤说明: - 点击「我发起的」tab 可以筛选出自己发起的工作流 - 点击具体工作流行可以查看工作流详情 - 点击「要我审批」tab 可以查看需要自己审批的工作流(需要切换到审批人账号)
任务 T6:部门审批流程 - 上级部门(循环)
前置条件:T5 成功
| Action Steps | Input / Payload | 预期结果 | 验证方式 | 证据 | 状态 | 下游任务 |
|---|---|---|---|---|---|---|
| 步骤1:切换到上级部门负责人账号 | 登出,登录上级部门负责人 | 登录成功 | 显示上级负责人信息 | 屏幕截图 | [ ] |
步骤 2 |
| 步骤2:查看待审批列表 | 进入「工作流」→「要我审批」 | 看到待审批的工作流 | 工作流显示在列表中 | 屏幕截图 | [ ] |
步骤 3 |
| 步骤3:审批通过 | 查看详情并点击「批准」 | 审批成功 | 显示成功提示 | 屏幕截图 | [ ] |
步骤 4 |
| 步骤4:重复直至最高级部门 | 如有更上级部门,重复步骤 1-3 | 所有部门审批完成 | 工作流自动生效 | 审批历史记录 | [ ] |
T7 |

图:我发起的工作流页面,显示「新政策标签」工作流状态为「审核中」
我发起的工作流页面:
- 「我发起的」tab 已选中(绿色边框高亮)
- 筛选显示当前用户发起的所有工作流
- 工作流列表内容:
- 工作流名称:「新政策标签」(可能有多个)、「创建产品标签」、「资金池挂账入账」等
- 工作流ID:完整的 UUID,如 00b29fdc-0859-4411-8415-470e7b523b7d
- 状态:「审核中」(蓝色徽章)表示正在审批流程中
- 创建者:显示发起人姓名,如「超级管理员」
- 操作:「撤销」按钮(橙色文字),用于撤回工作流
- 可以看到刚才创建的「新政策标签」工作流,状态为「审核中」
- 点击工作流行可以查看详细的审批信息和审批历史
- 当所有部门负责人审批完成后,工作流自动生效
任务 T7:验证工作流完成和抄送
前置条件:T6 成功,所有部门审批已完成
| Action Steps | Input / Payload | 预期结果 | 验证方式 | 证据 | 状态 | 下游任务 |
|---|---|---|---|---|---|---|
| 步骤1:查看工作流状态 | 在工作流列表或详情页查看 | 工作流状态为「已完成」或「生效」 | 状态显示正确 | 屏幕截图 | [ ] |
步骤 2 |
| 步骤2:查看审批历史 | 点击「审批历史」或「审核历史」tab | 显示完整的审批链路 | 所有审批节点按顺序显示,状态正确 | 屏幕截图 | [ ] |
步骤 3 |
| 步骤3:验证抄送通知 | 切换到媒介或财务账号查看通知 | 收到工作流完成的抄送通知 | 通知列表中显示相关通知 | 屏幕截图 | [ ] |
步骤 4 |
| 步骤4:验证政策标签生效 | 返回客户列表,查看该客户的政策标签列 | 新创建的政策标签显示在客户行中 | 标签名称、折扣率显示正确 | 屏幕截图 | [ ] |
T8 |

图:工作流详情列表视图,显示工作流名称、描述、状态、创建者
工作流详情列表视图: - 页面标题:「工作流」,「我发起的」tab 选中 - 表格显示工作流详细信息,列包括: - 工作流名称:如「新政策标签」、「创建产品标签」 - 描述/详情:如「代运营政策折扣比例 6.00%」、「自运营政策折扣比例 4.00%」 - 状态:「审核中」(蓝色徽章) - 创建者:「超级管理员」(带时钟图标) - 操作:「撤销」按钮(橙色) - 所有工作流都显示为「审核中」状态,表示正在等待审批 - 右侧有「列」按钮,可以自定义显示的列
审批流程说明: - 此时工作流已提交到审批流程 - 需要切换到不同的审批人账号(部门负责人)才能继续审批 - 审批人登录后,在「要我审批」tab 中可以看到待审批的工作流 - 审批人可以点击工作流查看详情、批准或拒绝 - 所有部门负责人审批完成后,工作流自动生效
工作流完成页面: - 工作流状态:「已完成」或「生效」 - 完成时间戳显示 - 完整的审批链路时间线: - 发起申请(申请人、时间) - 部门审批 - 第一级(审批人、时间、意见) - 部门审批 - 第二级(审批人、时间、意见) - ...(如有更多层级) - 生效(系统、时间) - 抄送完成(媒介 + 财务)
审批历史详情: - Tab 标签:「基本信息」、「审批历史」、「流转记录」 - 审批历史列表以时间倒序显示: - 每条记录包含:审批节点名称、审批人、审批时间、审批结果(通过/拒绝)、审批意见 - 节点状态图标:✓(已通过)、✗(已拒绝)、⏳(待审批) - 流转记录显示工作流在各个节点的停留时间 - 支持导出审批记录为 PDF 或 Excel
政策标签生效显示:
- 返回客户列表页面
- 在对应客户行的「客户政策标签」列中
- 新创建的政策标签以徽章形式显示:
- 折扣类型:绿色背景徽章,前缀「前」
- 后返类型:蓝色背景徽章,前缀「后」
- 显示格式:前 [政策名称] ( [折扣率]% )
- 示例:前 测试政策标签234 ( 0.07% )
- 鼠标悬停显示 Tooltip:「实际折扣率 0.0007」
- 标签状态为 SUCCESS,颜色正常;否则为灰色
注意:完整的审批流程和最终生效的截图需要在实际测试环境中,由所有审批人完成审批后截取。
任务 T8:数据一致性验证
前置条件:T7 成功
| Action Steps | Input / Payload | 预期结果 | 验证方式 | 证据 | 状态 | 下游任务 |
|---|---|---|---|---|---|---|
| 步骤1:验证客户政策标签 | 在客户列表中查看政策标签列 | 标签正确显示,包含名称和折扣率 | 标签数据与创建时一致 | 屏幕截图 | [ ] |
步骤 2 |
| 步骤2:验证工作流记录 | 查看工作流详情页面 | 工作流记录完整 | 包含所有审批节点和时间戳 | 屏幕截图 | [ ] |
步骤 3 |
| [ ]` | — |
异常场景测试
测试场景一:部门审批拒绝
| Action Steps | Input / Payload | 预期结果 | 验证方式 | 证据 | 状态 |
|---|---|---|---|---|---|
| 步骤1:在部门审批环节点击「拒绝」 | 拒绝理由:政策折扣率过高,需重新评估 |
工作流被拒绝 | 状态变为「已拒绝」 | 屏幕截图 | [ ] |
| 步骤2:查看发起人通知 | 切换到发起人账号 | 收到拒绝通知 | 通知详情显示拒绝理由 | 屏幕截图 | [ ] |
| 步骤3:验证工作流不再可审批 | 其他审批人查看工作流 | 工作流不在待审批列表 | 工作流状态为「已拒绝」 | 屏幕截图 | [ ] |
审批拒绝场景: - 审批人点击「拒绝」按钮 - 弹出拒绝原因输入对话框(必填) - 输入拒绝理由,如:「政策折扣率过高,需重新评估」 - 确认后,工作流状态变为「已拒绝」 - 发起人收到拒绝通知,通知中心显示红色标记 - 工作流详情页显示拒绝节点、拒绝人、拒绝时间和拒绝理由 - 后续审批人无法继续审批该工作流
注意:此截图需要在实际测试环境中,由审批人执行拒绝操作时截取。
测试场景二:流程撤销
| Action Steps | Input / Payload | 预期结果 | 验证方式 | 证据 | 状态 |
|---|---|---|---|---|---|
| 步骤1:发起人在未完成时点击「撤销」 | 在工作流进行中操作 | 工作流被撤销 | 状态变为「已撤销」 | 屏幕截图 | [ ] |
| 步骤2:验证审批人无法继续审批 | 切换到审批人账号 | 工作流不在待审批列表 | 工作流已终止 | 屏幕截图 | [ ] |
测试场景三:表单验证
| Action Steps | Input / Payload | 预期结果 | 验证方式 | 证据 | 状态 |
|---|---|---|---|---|---|
| 步骤1:政策名称为空 | 折扣率和日期填写,名称留空 | 提交失败,显示验证错误 | 「请输入政策名称」提示 | 屏幕截图 | [ ] |
| 步骤2:折扣率超出范围 | 输入 50% 或 -50% |
输入被限制或显示错误 | 无法输入或显示范围错误 | 屏幕截图 | [ ] |
| 步骤3:未选择生效日期 | 名称和折扣率填写,日期未选 | 提交失败,显示验证错误 | 「请选择生效日期」提示 | 屏幕截图 | [ ] |
API 参考(必须遵循的接口)
| 接口 | 方法 | 说明 | 关键字段 & 数据格式 |
|---|---|---|---|
/api/v1/policy_labels |
POST |
创建政策标签并触发工作流 | body 需要: - customer_id(integer):客户 ID- type(string):标签类型(TAG_DISCOUNT/TAG_REBATE)- name(string):政策名称- discount(number):折扣率(小数形式,如 0.05 表示 5%)- eftectiveDate(string):生效日期 |
/api/v1/flows |
GET |
获取工作流列表 | 查询参数: - filters:过滤条件- sorts:排序- user_related:与我相关- my_approval:我发起的- need_approval:要我审批 |
/api/v1/flows/{flowId} |
GET |
获取工作流详情 | 返回完整的工作流信息,包含审批历史 |
/api/v1/flows/{flowId}/approve |
POST |
审批工作流 | body 需要: - action(string):approve/reject- comment(string,可选):审批意见 |
/api/v1/customers/{customerId} |
GET |
获取客户详情 | 返回客户信息,包含 policyLabels 数组 |
进度采集模板(机器辅助/人手填报)
| Task ID | Task Name | Assignee | Start Time | End Time | Status | Evidence | Notes |
|---|---|---|---|---|---|---|---|
| T1 | 环境与账号验证 | QA | — | — | [ ] |
截图链接 | — |
| T2 | 找到政策标签列并点击创建按钮 | 发起人 | — | — | [ ] |
截图链接 | — |
| T3 | 填写政策标签创建表单 | 发起人 | — | — | [ ] |
截图链接 | — |
| T4 | 查看工作流详情并记录 ID | 发起人 | — | — | [ ] |
截图链接 + 流程ID | — |
| T5 | 部门审批流程 - 第一级 | 直属领导 | — | — | [ ] |
截图链接 | — |
| T6 | 部门审批流程 - 上级部门(循环) | 上级领导 | — | — | [ ] |
截图链接 | — |
| T7 | 验证工作流完成和抄送 | QA | — | — | [ ] |
截图链接 | — |
| T8 | 数据一致性验证 | QA | — | — | [ ] |
截图链接 | — |
异常与恢复
- 找不到政策标签列:检查表格列配置,尝试水平滚动表格或调整列宽;确认使用的是客户列表页面而非其他页面。
- 「+」按钮不可见:确认客户记录存在;检查用户权限;刷新页面重试。
- 创建对话框提交失败:检查网络连接;查看浏览器 Console 错误;确认所有必填字段已正确填写;记录错误信息并联系开发。
- 工作流未出现在审批列表:确认登录的是正确的审批人账号;检查部门层级配置;刷新工作流列表页面。
- 审批操作无响应:检查网络连接;查看浏览器 Console;确认工作流状态是否允许当前操作;记录 Request ID。
- 抄送未收到:检查抄送人员配置;确认工作流已完全完成;查看通知设置。
注意事项
- 账号准备:提前准备好所有需要的账号(发起人、各级部门负责人、媒介),确保账号有效且权限正确。
- 部门层级:了解测试环境的部门层级结构,预估需要审批的层级数量。
- 审批顺序:必须严格按照流程图顺序进行审批,不能跳过任何步骤。
- 折扣率格式:系统内部以小数形式存储(0.05 = 5%),UI 显示时会转换为百分比。
- 生效日期:只能选择未来日期,不能选择过去日期。
- 工作流 ID:创建成功后立即记录工作流 ID,便于后续追踪和验证。
- 截图时机:在每个关键步骤操作前后都要截图,特别是审批操作和状态变更。
- 数据清理:测试完成后,可选择性地清理测试数据或保留用于后续分析。
测试数据示例
成功案例
{
"customer_id": 123,
"type": "TAG_DISCOUNT",
"name": "测试政策标签-QA-20251222110000",
"discount": 0.05,
"eftectiveDate": "2025-12-23"
}
预期响应:
{
"id": 456,
"name": "测试政策标签-QA-20251222110000",
"type": "TAG_DISCOUNT",
"discount": 0.05,
"status": "PENDING",
"flow": {
"flowId": "789",
"status": "PENDING"
}
}
失败案例
案例一:折扣率超出范围
{
"customer_id": 123,
"type": "TAG_DISCOUNT",
"name": "测试政策",
"discount": 0.50,
"eftectiveDate": "2025-12-23"
}
预期:前端验证阻止提交或后端返回错误。
案例二:缺少必填字段
{
"customer_id": 123,
"type": "TAG_DISCOUNT",
"discount": 0.05
}
预期:前端验证阻止提交,显示字段验证错误。
附录:Checklist 导出格式
Task ID,Task Name,Status,Evidence,Operator,Notes
T1,环境与账号验证,[ ],screen-T1.png,qa-bot,"login ok"
T2,找到政策标签列并点击创建按钮,[ ],screen-T2.png,qa-bot,"button found"
T3,填写政策标签创建表单,[ ],screen-T3.png,qa-bot,"form filled"
T4,查看工作流详情并记录 ID,[ ],screen-T4.png,qa-bot,"flow created"
T5,部门审批流程 - 第一级,[ ],screen-T5.png,dept-lead-1,"approved"
T6,部门审批流程 - 上级部门,[ ],screen-T6.png,dept-lead-2,"approved"
T7,验证工作流完成和抄送,[ ],screen-T7.png,qa-bot,"flow completed"
T8,数据一致性验证,[ ],screen-T8.png,qa-bot,"data verified"
直接复制上述 CSV/Excel 内容可实现标准化追踪。
相关文档
- CRM 操作手册 - 客户模块
- 工作流全流程调整 - 总体说明文档
- 客户创建 E2E SOP - 参考模板
- 客户创建快速入门
- 账号文档 - 测试账号列表
- 配置文件:
core/internal/workflow/add_policy_prod.yaml
代码参考
前端组件
- 创建对话框组件:
app/crm/customer/components/create-policy-label.tsx - 客户标签渲染器:
components/cellrender.tsx-CustomerTagsRenderer函数 - 客户列定义:
app/crm/customer/hooks/useColumns.ts- 第 119-122 行 - 工作流对话框:
components/flow-dialog.tsx
工作流配置
- 配置文件:
core/internal/workflow/add_policy_prod.yaml - 审批流程:发起 → 部门多级审批 → 生效 → 抄送
版本历史
| 版本 | 日期 | 修改人 | 修改内容 |
|---|---|---|---|
| 1.0 | 2025-12-22 | AI Assistant | 创建初始版本,基于代码分析和 SOP-001 模板 |
| 1.1 | 2025-12-24 | AI Assistant | 更新格式,统一章节编号和表格标题格式 |