{"text_format":"2","workbook":"xlsx","n_sheets":3,"sheets":["变更说明","后台","接口权限"],"not_rendered":{"charts":0,"images":0,"macros":0,"external_links":0,"defined_names":0,"comments":0,"pivot_tables":0},"unopened":[],"bounds":{"document_bytes":16777216,"sheet_cells":100000,"run_cost":"one","rows_first":2000,"rows_last":500,"rows_between":2000,"halvings":0,"cell_chars":16384,"cell_head_chars":4096},"cells_cut":0,"cells_raw":0,"read":"whole","date_system":"1900"}

{"sheet":"变更说明","index":0,"n_rows":8,"n_cols":3,"rows_kept":8,"cut":false,"hidden":false,"merged":[]}
["变更类型","颜色","说明"]
["新增","绿色","渠道管理模块新增测试点"]
["调整","黄色","已有通用用例可复用，但字段或断言需按渠道管理调整"]
["删除/不适用","红色","本模块不适用或与当前需求冲突的测试点"]
["保留","白色","可直接继续执行的通用测试点"]
[]
["本次主要覆盖","","Channel 列表查询、新建/编辑/查看/删除、类型/类别/名称三级字典维护、重复校验、分页、权限、接口异常"]
["待确认风险","","正式接口字段、Channel ID 是否为后端唯一编号、删除后是否影响历史投放数据、字典项被引用后的编辑/删除限制"]

{"sheet":"后台","index":1,"n_rows":28,"n_cols":12,"rows_kept":28,"cut":false,"hidden":false,"merged":[]}
["序号","变更类型","范围","功能模块","测试项目","优先级","前置条件","测试内容","期待结果","备注","UAT 测试人","UAT 测试结果"]
[1,"新增","后台","菜单入口与权限","渠道管理菜单入口","P1","账号具备渠道管理查看权限","进入【汇丰银行 / 渠道管理】菜单","正常进入渠道管理列表页；查询区、列表区、新建 Channel 按权限展示","菜单路径按实际系统菜单名称确认","/",""]
[2,"新增","后台","菜单入口与权限","无查看权限","P0","账号无渠道管理查看权限","尝试从菜单或直接 URL 进入渠道管理页面","菜单不可见或进入后展示无权限提示；不得看到渠道列表数据","/","/",""]
[3,"新增","后台","列表查询","列表字段展示","P1","存在渠道数据","打开渠道管理列表页并查看表格列","列表包含操作、Channel ID、类型、类别、名称、子名称、跟进员工、创建时间、更新时间；空子名称/跟进员工展示“-”","来源：ChannelManagement 原型","/",""]
[4,"新增","后台","列表查询","按 Channel ID 精确查询","P1","存在 Channel ID=1 的记录","输入 Channel ID=1 点击查询；再输入不存在 ID 查询","存在时仅展示匹配记录；不存在时展示空态，不保留上一轮查询结果","原型提示为支持精确查询","/",""]
[5,"新增","后台","列表查询","类型/类别/名称级联查询","P0","存在多组类型、类别、名称数据","选择 Channel 类型后查看类别和名称下拉；继续选择类别后查看名称下拉；点击查询","类别下拉仅展示该类型下类别；名称下拉仅展示所选类型/类别下名称；查询结果满足全部条件","/","/",""]
[6,"新增","后台","列表查询","切换上级条件清空下级条件","P1","已选择类型、类别、名称","切换 Channel 类型；再切换 Channel 类别","切换类型后类别和名称清空；切换类别后名称清空，避免带入无效组合","覆盖 onSearchTypeChange/onSearchCategoryChange","/",""]
[7,"新增","后台","列表查询","子名称与跟进员工查询","P1","存在子名称和跟进员工不同的渠道记录","分别输入 Channel 子名称关键字、跟进员工姓名查询；再组合多个条件查询","列表按输入条件刷新；组合查询时仅展示同时满足条件的记录","/","/",""]
[8,"新增","后台","列表查询","重置查询条件","P1","查询区已有多个筛选条件","点击重置","所有筛选条件清空，页码回到第 1 页，列表恢复默认数据","/","/",""]
[9,"新增","后台","列表查询","分页和每页条数","P1","存在超过 10 条渠道数据","切换页码；将每页条数改为 20/50；再执行查询","分页数据正确刷新；修改每页条数后回到第 1 页；Channel ID 展示序号与当前页一致","如 Channel ID 为真实后端编号，应调整该断言","/",""]
[10,"新增","后台","新建 Channel","打开新建弹窗","P1","/","点击【新建 Channel】","打开新建弹窗；类型、类别、名称、子名称、跟进员工为空；不展示 Channel ID；底部展示取消和确定","/","/",""]
[11,"新增","后台","新建 Channel","必填校验","P0","打开新建弹窗","不选择类型/类别/名称直接点击确定；仅选择部分必填项后再次点击确定","保存被阻断并提示需完整选择类型、类别和名称；弹窗不关闭，已填内容保留","/","/",""]
[12,"新增","后台","新建 Channel","成功新建渠道","P0","类型、类别、名称字典项已存在","选择类型、类别、名称，填写子名称和跟进员工后点击确定","提示新建成功；弹窗关闭；列表刷新到第 1 页并展示新建记录；创建/更新时间正确","/","/",""]
[13,"新增","后台","查看 Channel","查看模式只读","P1","存在渠道记录","点击列表操作【查看】","打开查看弹窗；字段展示当前记录值；所有输入和字典维护按钮不可编辑；不展示确定按钮","/","/",""]
[14,"新增","后台","编辑 Channel","编辑基础信息","P0","存在渠道记录","点击【编辑】，修改类型/类别/名称、子名称、跟进员工后保存","提示保存成功；列表刷新；记录字段和更新时间更新；创建时间不变","/","/",""]
[15,"新增","后台","编辑 Channel","编辑时级联清空","P1","编辑弹窗中已选择类型、类别、名称","切换 Channel 类型；再切换 Channel 类别","切换类型后类别和名称清空；切换类别后名称清空；必须重新选择有效下级后才能保存","/","/",""]
[16,"新增","后台","删除 Channel","删除取消和确认","P0","存在可删除渠道记录","点击删除；在确认弹窗先取消；再次删除并确认","取消时记录保留；确认后提示删除成功，列表刷新且记录不再展示","需确认已被投放链接引用的渠道是否允许删除","/",""]
[17,"新增","后台","删除 Channel","删除权限和接口失败","P1","账号无删除权限或模拟删除接口失败","查看删除入口；或点击删除并触发接口失败","无权限时删除入口隐藏/禁用且后端拒绝越权；接口失败时提示失败，记录不被前端移除","/","/",""]
[18,"新增","后台","字典维护","新增 Channel 类型","P0","打开新建或编辑弹窗","点击类型旁【新增】，输入新类型并保存","新增成功；类型下拉增加该项并自动选中；类别和名称清空等待继续维护","/","/",""]
[19,"新增","后台","字典维护","新增 Channel 类别","P0","已选择 Channel 类型","点击类别旁【新增】，输入新类别并保存","新增成功；类别下拉增加该项并自动选中；名称清空等待选择或维护","未选择类型时应提示先选择 Channel 类型","/",""]
[20,"新增","后台","字典维护","新增 Channel 名称","P0","已选择 Channel 类型和类别","点击名称旁【新增】，输入新名称并保存","新增成功；名称下拉增加该项并自动选中；可继续保存 Channel","未选择类型/类别时应提示先选择完整上级","/",""]
[21,"新增","后台","字典维护","编辑 Channel 类型","P1","已选择待编辑类型","点击类型旁【编辑】，修改为新值并保存","编辑成功；原类型被新类型替换；已关联类别、名称和列表数据按规则同步或保留映射","被引用后的同步规则需技术确认","/",""]
[22,"新增","后台","字典维护","编辑 Channel 类别","P1","已选择类型和待编辑类别","点击类别旁【编辑】，修改为新值并保存","编辑成功；原类别被新类别替换；该类别下名称保留且列表相关记录展示新类别","/","/",""]
[23,"新增","后台","字典维护","编辑 Channel 名称","P1","已选择类型、类别和待编辑名称","点击名称旁【编辑】，修改为新值并保存","编辑成功；原名称被新名称替换；列表相关记录展示新名称","/","/",""]
[24,"新增","后台","字典维护","重复值校验","P0","同层级下已存在字典值","在新增或编辑类型/类别/名称时输入同层级已存在值并保存","保存被阻断并提示已存在，不能重复新增或修改为重复值；原数据不变","/","/",""]
[25,"新增","后台","字典维护","空值和空格校验","P1","打开任一字典维护面板","输入空值、纯空格、前后带空格的值并保存","空值/纯空格阻断并提示请输入内容；前后空格自动裁剪后保存或按规范提示","原型 savePanel 使用 trim","/",""]
[26,"新增","后台","异常处理","字典接口异常","P1","可模拟 /api/channel/dict 失败或返回空对象","进入渠道管理页，打开新建弹窗并查看下拉","接口失败时给出错误提示或下拉为空；页面不白屏；重试后可恢复","/","/",""]
[27,"新增","后台","异常处理","列表/保存接口异常","P1","可模拟列表或保存接口失败","触发查询、新建、编辑保存失败","展示失败提示；弹窗和已填写内容保留；列表不展示未成功保存的数据","/","/",""]

{"sheet":"接口权限","index":2,"n_rows":9,"n_cols":12,"rows_kept":9,"cut":false,"hidden":false,"merged":[]}
["序号","变更类型","范围","功能模块","测试项目","优先级","前置条件","测试内容","期待结果","备注","UAT 测试人","UAT 测试结果"]
[1,"新增","接口","查询渠道字典","字典结构","P0","/","调用 GET /api/channel/dict","返回类型-类别-名称三级结构；空层级返回空数组/空对象；前端可正确渲染级联下拉","/","/",""]
[2,"新增","接口","查询渠道列表","入参组合","P0","/","调用 GET /api/channel/list，分别传 id/type/category/name/subName/owner 和组合条件","接口按条件返回匹配列表；空条件返回默认列表；异常参数返回可识别错误或空结果","/","/",""]
[3,"新增","接口","保存渠道","新建与编辑","P0","/","调用 POST /api/channel/save，分别传不带 id 和带 id 的渠道数据","不带 id 创建新记录；带 id 更新原记录；必填缺失时返回明确错误，不写入脏数据","/","/",""]
[4,"新增","接口","删除渠道","删除幂等与引用限制","P1","/","调用 POST /api/channel/delete，传存在、不存在、已被引用的 id","存在且允许删除时成功；不存在返回明确结果；已被引用时按产品规则阻断或软删除","引用限制待确认","/",""]
[5,"新增","接口","保存渠道字典","新增/编辑类型类别名称","P0","/","调用 POST /api/channel/dict/save，覆盖 target=type/category/name、mode=add/edit","字典保存成功后返回最新完整字典；同层级重复值阻断；上级缺失时返回错误","/","/",""]
[6,"新增","权限","后台按钮权限","查看/新建/编辑/删除/字典维护","P0","/","分别使用仅查看、可新建、可编辑、可删除、可维护字典的账号操作","菜单、按钮、弹窗编辑态和后端接口权限一致；越权请求被拒绝并记录","/","/",""]
[7,"新增","日志","后台审计","渠道变更日志","P1","/","执行新建、编辑、删除 Channel 和新增/编辑字典项","记录操作人、操作时间、操作类型、变更前后值、Channel ID 或字典层级，便于审计追溯","/","/",""]
[8,"新增","数据一致性","投放参数引用","Channel ID 可用于页面链接参数","P1","组装页获取链接支持 Channel 参数","创建渠道后在组装页获取链接弹窗选择该 Channel；删除或编辑后再次查看","可选择有效 Channel；删除/编辑后的链接参数展示和历史链接行为符合产品规则","跨模块联调用例","/",""]