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。
  • 抄送未收到:检查抄送人员配置;确认工作流已完全完成;查看通知设置。

注意事项

  1. 账号准备:提前准备好所有需要的账号(发起人、各级部门负责人、媒介),确保账号有效且权限正确。
  2. 部门层级:了解测试环境的部门层级结构,预估需要审批的层级数量。
  3. 审批顺序:必须严格按照流程图顺序进行审批,不能跳过任何步骤。
  4. 折扣率格式:系统内部以小数形式存储(0.05 = 5%),UI 显示时会转换为百分比。
  5. 生效日期:只能选择未来日期,不能选择过去日期。
  6. 工作流 ID:创建成功后立即记录工作流 ID,便于后续追踪和验证。
  7. 截图时机:在每个关键步骤操作前后都要截图,特别是审批操作和状态变更。
  8. 数据清理:测试完成后,可选择性地清理测试数据或保留用于后续分析。

测试数据示例

成功案例

{
  "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 内容可实现标准化追踪。

相关文档

代码参考

前端组件

  • 创建对话框组件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 更新格式,统一章节编号和表格标题格式