You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
246 lines
12 KiB
246 lines
12 KiB
|
4 hours ago
|
# A7 后台管理验收步骤清单(a7-acceptance · 15 页全分区)
|
||
|
|
|
||
|
|
- **被测对象**:`demo/index.html`(15 tab 统一版)× 测试环境 `https://ai.itc.vip/crm-api`
|
||
|
|
- **使用方法**:双击打开 demo → 页头「uid 登录」(默认管理员罗伟健)→ 按下表逐 tab 从上到下点每个步骤按钮 →
|
||
|
|
输出框**绿色(✅/提示)= PASS**,**红色(失败 + code=)= 候选缺陷** → 结果列填 PASS / FAIL,FAIL 的按《验收结果汇总.md》格式记缺陷。
|
||
|
|
- **纪律**:数字类断言(条数/计数)随库内数据浮动,以**相对变化**为准;每 tab 最后的「清理」步骤务必执行,不留演示数据。
|
||
|
|
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 用户管理(user)· A7-1 用户管理
|
||
|
|
|
||
|
|
> 覆盖:用户列表 / 统计出参 / 移交全链路 / 时间戳
|
||
|
|
|
||
|
|
| 步骤 | 操作 | 说明 / 预期 | 结果(PASS/FAIL) | 备注 |
|
||
|
|
|---|---|---|---|---|
|
||
|
|
| 步骤1 | 移交预览(admin 名下各域计数) | — | | |
|
||
|
|
| 步骤2 | 自移交拦截(userId=receiverId → 期望 61019) | — | | |
|
||
|
|
| 步骤3 | 移交执行 admin→BUDDY(全域计数清零) | — | | |
|
||
|
|
| 步骤4 | 移交返还 BUDDY→admin(计数还原) | — | | |
|
||
|
|
| 步骤5 | 用户统计出参(lastTransferTime 非空) | — | | |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 同步任务(sync)· A7-1-2 同步任务(二期票01)
|
||
|
|
|
||
|
|
> 覆盖:任务化契约 / 分页倒序 / 详情五块 / 设置读写与边界 / lastSyncTime 切表
|
||
|
|
|
||
|
|
| 步骤 | 操作 | 说明 / 预期 | 结果(PASS/FAIL) | 备注 |
|
||
|
|
|---|---|---|---|---|
|
||
|
|
| 步骤1 | 发起同步任务(任务编号格式 + 异步终态轮询) | — | | |
|
||
|
|
| 步骤2 | 同步记录分页(筛选 + 开始时间倒序断言) | — | | |
|
||
|
|
| 步骤3 | 任务详情(执行结果/失败对象/接口错误/处理结果/进度五块) | — | | |
|
||
|
|
| 步骤4 | 读取同步设置(默认值 + 派生出参) | — | | |
|
||
|
|
| 步骤5 | 保存合法设置(interval=2 次数=3 并发=1,回显断言) | — | | |
|
||
|
|
| 步骤6 | 边界校验(间隔<1min / 次数<1 → 期望 61022) | — | | |
|
||
|
|
| 步骤7 | 还原设置(不污染环境) | — | | |
|
||
|
|
| 步骤8 | lastSyncTime 数据源切换(任务表最新成功行口径)+ 下次执行时间推导 | — | | |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 角色管理(role)· A7-2 角色管理
|
||
|
|
|
||
|
|
> 覆盖:统计四计数 / 批量增量分配 / copy / 启停校验 / 内置保护
|
||
|
|
|
||
|
|
| 步骤 | 操作 | 说明 / 预期 | 结果(PASS/FAIL) | 备注 |
|
||
|
|
|---|---|---|---|---|
|
||
|
|
| 步骤0 | 准备演示角色(幂等建 e2d-演示角色) | — | | |
|
||
|
|
| 步骤1 | 角色统计(四计数) | — | | |
|
||
|
|
| 步骤2 | 批量增量分配给 BUDDY(assign-roles-batch) | — | | |
|
||
|
|
| 步骤3 | 复制演示角色(期望停用草稿 roleCode 带 _copy_) | — | | |
|
||
|
|
| 步骤4 | 启用无授权副本(期望 61021 两道校验) | — | | |
|
||
|
|
| 步骤5 | 停用内置管理员角色(期望内置保护拦截) | — | | |
|
||
|
|
| 步骤6 | 恢复 BUDDY 角色 + 删除演示角色(在职守卫通路) | — | | |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 权限点管理(res)· A7-2 权限点管理
|
||
|
|
|
||
|
|
> 覆盖:引用清单 / 停启 roundtrip / 禁删两段
|
||
|
|
|
||
|
|
| 步骤 | 操作 | 说明 / 预期 | 结果(PASS/FAIL) | 备注 |
|
||
|
|
|---|---|---|---|---|
|
||
|
|
| 步骤0 | 准备演示权限点 + 禁删链路(演示角色 RD) | — | | |
|
||
|
|
| 步骤1 | 商机管理目录引用清单(期望 ≥1 角色) | — | | |
|
||
|
|
| 步骤2 | 演示点停用→启用 roundtrip | — | | |
|
||
|
|
| 步骤3 | 删除两段拦截(启用删 61009 / 停用后删 61020) | — | | |
|
||
|
|
| 步骤4 | 清理(删 RD 级联清引用 → 停用并删演示点) | — | | |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 方案推送规则(push)· A7-3 方案推送规则
|
||
|
|
|
||
|
|
> 覆盖:状态机全链(草稿/发布/64029/64030/copy/64027)
|
||
|
|
|
||
|
|
| 步骤 | 操作 | 说明 / 预期 | 结果(PASS/FAIL) | 备注 |
|
||
|
|
|---|---|---|---|---|
|
||
|
|
| 步骤1 | 新建 R1 草稿(仅步骤①,无步骤④) | — | | |
|
||
|
|
| 步骤2 | 发布 R1(D-01 回归:期望成功非 500) | — | | |
|
||
|
|
| 步骤3 | 新建 R2 完整 4 步骤草稿 + 详情回显 | — | | |
|
||
|
|
| 步骤4 | 发布 R2 + versions 版本列表 | — | | |
|
||
|
|
| 步骤5 | 同名发布中唯一(期望 64029) | — | | |
|
||
|
|
| 步骤6 | 创建方式非法(期望 64030) | — | | |
|
||
|
|
| 步骤7 | 复制 R2(新编码 V1.0 草稿) | — | | |
|
||
|
|
| 步骤8 | 停用 R2 + 删除已停用(期望 64027 仅草稿可删) | — | | |
|
||
|
|
| 步骤9 | 清理草稿(R3/R4/copy) | — | | |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 项目查重规则(dedup)· A7-3 项目查重规则
|
||
|
|
|
||
|
|
> 覆盖:发布与引用计数 / 64031 两路 / 64030 / 64033
|
||
|
|
|
||
|
|
| 步骤 | 操作 | 说明 / 预期 | 结果(PASS/FAIL) | 备注 |
|
||
|
|
|---|---|---|---|---|
|
||
|
|
| 步骤1 | 新建 D1(全部商机)→ 发布 | — | | |
|
||
|
|
| 步骤2 | 属地档缺适用对象(期望 64031) | — | | |
|
||
|
|
| 步骤3 | 属地档设默认(期望 64031 仅全部商机可设默认) | — | | |
|
||
|
|
| 步骤4 | 推送规则 R5 草稿引用 D1 → referenceCount=1(草稿引用入账) | — | | |
|
||
|
|
| 步骤5 | 引用草稿 D2 发布 R6(期望 64030 草稿不可被正式引用) | — | | |
|
||
|
|
| 步骤6 | 复制→删草稿 / 停用 D1 / 删已停用(期望 64033) | — | | |
|
||
|
|
| 步骤7 | 清理(删 R5/R6/D2 草稿,refCount 回落) | — | | |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 项目规则(projrule)· A7-3 项目规则
|
||
|
|
|
||
|
|
> 覆盖:current 5 区块聚合 / 分区保存 / 64036 比例校验
|
||
|
|
|
||
|
|
| 步骤 | 操作 | 说明 / 预期 | 结果(PASS/FAIL) | 备注 |
|
||
|
|
|---|---|---|---|---|
|
||
|
|
| 步骤1 | 读当前配置(5 区块) | — | | |
|
||
|
|
| 步骤2 | 保存阶段别名(2 行)→ 回显断言 | — | | |
|
||
|
|
| 步骤3 | 标底比例越界 150(期望 64036) | — | | |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 线索池(pool)· A7-3 线索规则·线索池
|
||
|
|
|
||
|
|
> 覆盖:三类异人成员 / 导出导入 / 列表 / 清理
|
||
|
|
|
||
|
|
| 步骤 | 操作 | 说明 / 预期 | 结果(PASS/FAIL) | 备注 |
|
||
|
|
|---|---|---|---|---|
|
||
|
|
| 步骤1 | 建演示池(负责人/协作人/部门成员三类异人) | — | | |
|
||
|
|
| 步骤2 | 详情回填断言(三类成员名单) | — | | |
|
||
|
|
| 步骤3 | 导出(xlsx 字节数 + ZIP 魔数) | — | | |
|
||
|
|
| 步骤4 | 导入上方文件(逐行 BatchResult) | 脚本预先准备 12 列模板 xlsx(1 条 e2d-导入池,部门取空闲第二顺位避让 64003) | | |
|
||
|
|
| 步骤5 | 列表断言(演示池/导入池可见) | — | | |
|
||
|
|
| 步骤6 | 清理(删演示池/导入池) | — | | |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 公海绑定数(poolrule)· A7-3-4 公海规则「绑定商机(数量)」(二期票03)
|
||
|
|
|
||
|
|
> 覆盖:部门专用规则发布 / boundOppCount 增量 / 默认兜底 / 清理
|
||
|
|
|
||
|
|
| 步骤 | 操作 | 说明 / 预期 | 结果(PASS/FAIL) | 备注 |
|
||
|
|
|---|---|---|---|---|
|
||
|
|
| 步骤1 | 建演示部门专用规则并发布(e2d-绑定数规则;部门被占则回退既有发布中专用规则) | — | | |
|
||
|
|
| 步骤2 | 建演示商机 A → detail.boundOppCount = base+1 | POST /api/opportunity 六必填+省市 code(照 opportunity-e2e 先例) | | |
|
||
|
|
| 步骤3 | 建演示商机 B → detail.boundOppCount = base+2 | — | | |
|
||
|
|
| 步骤4 | 默认规则兜底口径(发布中默认规则计数不因本部门建商机而增) | 无发布中默认规则时降级为提示(单测已覆盖口径) | | |
|
||
|
|
| 步骤5 | 清理(关停演示商机 close / 停用演示规则) | 商机无删除端点(API 正门终态=关闭);规则发布中→停用留存可辨 | | |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 全局日志(glog)· A7-4 日志管理(二期票02 · crm-log)
|
||
|
|
|
||
|
|
> 覆盖:AOP 采集 / 操作·登录·批量日志 / 结果文件 / 权限口径
|
||
|
|
|
||
|
|
| 步骤 | 操作 | 说明 / 预期 | 结果(PASS/FAIL) | 备注 |
|
||
|
|
|---|---|---|---|---|
|
||
|
|
| 步骤1 | 建/删演示角色(AOP 写端点采集素材) | — | | |
|
||
|
|
| 步骤2 | 操作日志分页(operatorName/opType 筛选命中 + 逐字段) | — | | |
|
||
|
|
| 步骤3 | 退出登录(内联埋点)→ 登录日志「退出」行断言 | debug/token 不走登录采集点(票内已核实),退出钩子按请求登录态采集——验证后自动重铸 token | | |
|
||
|
|
| 步骤4 | 线索池导出 → batch/page「导出」行(result+结果文件 id) | — | | |
|
||
|
|
| 步骤5 | 导入上方文件 → batch/page「导入」行(BatchResult 计数) | 脚本预置 12 列模板 xlsx(1 条 e2d-导入池,部门取空闲顺位避让 64003) | | |
|
||
|
|
| 步骤6 | 结果文件下载 /api/log/batch/file?id=(ZIP 魔数) | — | | |
|
||
|
|
| 步骤7 | 打包下载 /api/log/batch/download ids[](ZIP 魔数) | — | | |
|
||
|
|
| 步骤8 | 不存在文件 id 错误形态(40401/404 形态) | — | | |
|
||
|
|
| 步骤9 | 非管理员(BUDDY)调三 page(期望权限拒绝) | — | | |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 字典种子验证(seed)· A7-5 字典种子验证
|
||
|
|
|
||
|
|
> 覆盖:opp_stage 06/07 + opportunity_status 4 值
|
||
|
|
|
||
|
|
| 步骤 | 操作 | 说明 / 预期 | 结果(PASS/FAIL) | 备注 |
|
||
|
|
|---|---|---|---|---|
|
||
|
|
| 步骤1 | 校验种子可见性 | — | | |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 分组管理(dgroup)· A7-5 数据字典·分组管理(v3 契约)
|
||
|
|
|
||
|
|
> 覆盖:新建/编辑/启停/删除/设默认值(仅二级项)
|
||
|
|
|
||
|
|
本页为主界面操作(无联测步骤面板),对照原型逐控件核对:
|
||
|
|
|
||
|
|
可操作入口:查询、+ 新建分组、上一页、下一页
|
||
|
|
|
||
|
|
| 操作 | 预期 | 结果(PASS/FAIL) | 备注 |
|
||
|
|
|---|---|---|---|
|
||
|
|
| 逐控件操作并观察列表/弹窗反馈 | 与原型 A7 对应页一致(弹窗字段、错误码文案、列表列头) | | |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 字典项管理(ditem)· A7-5 数据字典·字典项管理(v3 契约)
|
||
|
|
|
||
|
|
> 覆盖:无键值自动编码 / 组内名称唯一 63007 / 复合子项 / 63013 禁停
|
||
|
|
|
||
|
|
本页为主界面操作(无联测步骤面板),对照原型逐控件核对:
|
||
|
|
|
||
|
|
可操作入口:查询、+ 新建字典项、上一页、下一页
|
||
|
|
|
||
|
|
| 操作 | 预期 | 结果(PASS/FAIL) | 备注 |
|
||
|
|
|---|---|---|---|
|
||
|
|
| 逐控件操作并观察列表/弹窗反馈 | 与原型 A7 对应页一致(弹窗字段、错误码文案、列表列头) | | |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 两级树(dtree)· A7-5 数据字典·两级树
|
||
|
|
|
||
|
|
> 覆盖:一级列表 + 行内二级展开
|
||
|
|
|
||
|
|
本页为主界面操作(无联测步骤面板),对照原型逐控件核对:
|
||
|
|
|
||
|
|
可操作入口:刷新
|
||
|
|
|
||
|
|
| 操作 | 预期 | 结果(PASS/FAIL) | 备注 |
|
||
|
|
|---|---|---|---|
|
||
|
|
| 逐控件操作并观察列表/弹窗反馈 | 与原型 A7 对应页一致(弹窗字段、错误码文案、列表列头) | | |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 引用计数联测(dref)· A7-5 数据字典·引用计数联测
|
||
|
|
|
||
|
|
> 覆盖:客户引用 +1 / 换引用迁移 / 引用项禁删 63009 / 归档保留计数
|
||
|
|
|
||
|
|
| 步骤 | 操作 | 说明 / 预期 | 结果(PASS/FAIL) | 备注 |
|
||
|
|
|---|---|---|---|---|
|
||
|
|
| 步骤0 | 准备演示字典项(幂等建 e2d_type_a / e2d_type_b) | 走 POST /api/dict/item/saveOrUpdate:名称组内唯一(63006/63007 幂等可重跑) | | |
|
||
|
|
| 步骤1 | 新建客户引用此字典 | POST /api/customer/create(confirmSimilar=true)→ 字典项 referenced=true(ref_count +1,同事务入账) | | |
|
||
|
|
| 步骤2 | 编辑客户换引用到 e2d_type_b | POST /api/customer/edit?id=(CAS version)→ 旧项 decrement、新项 increment(applyFieldChange 随迁) | | |
|
||
|
|
| 步骤3 | 尝试删除当前被引用项 | POST /api/dict/item/delete → 期望 63009「该字典已被引用,无法删除」 | | |
|
||
|
|
| 步骤4 | 归档演示客户(清理) | POST /api/customer/archive?id=;归档保留字典编码引用计数(数据一致性优先) | | |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 争议留白(待产品/负责人确认,本轮不作为缺陷)
|
||
|
|
|
||
|
|
- [ ] 数据共享 3 页(A7-2-3 backup 草稿箱):等原型正式化,未纳入盘点与验收。
|
||
|
|
- [ ] 职务下拉值域来源(OA title 去重 vs 字典分组):挂账待拍板。
|
||
|
|
- [ ] 角色管理「处理使用人员」弹窗「当前参与商机数」列:计数口径未拍板。
|
||
|
|
- [ ] OpportunityPoolRule 列表「所属战队」等冗余列:随 UI 确认后补。
|
||
|
|
- [ ] 幻影挂账 3 端点(POST /depts/save、/depts/delete、/users/admin-role):原型无入口,保留运维用途。
|
||
|
|
- [ ] 项目规则「阶段提醒」区块:原型自注「待补充」。
|
||
|
|
- [ ] 全局日志采集覆盖面 = 写侧(POST)先行,不采「查询」GET;登录日志仅采「退出」钩子(debug/token 不走登录采集点)。
|
||
|
|
|
||
|
|
## 已知形态说明(不算缺陷)
|
||
|
|
|
||
|
|
- 同步任务两态容忍:测试环境钉钉凭据不可达时,任务以 all_failed 终态落行(或长时间 running)均为正常形态。
|
||
|
|
- lastSyncTime 口径 = 同步任务表最新成功行 endTime;无成功行时为空。
|
||
|
|
- 操作/登录/批量日志行与同步任务行 = 审计数据,留存不删;其余演示数据一律 e2d- 前缀 + 步骤面板末步清理。
|