feat: refine template deletion and channel group filters

This commit is contained in:
hectorzhao
2026-08-09 20:54:52 +08:00
parent 482d332f49
commit 78b839f468
11 changed files with 210 additions and 49 deletions
+31 -4
View File
@@ -2332,8 +2332,8 @@
3. 使用已保存草稿或 scheduled 任务触发送。
4. 查询历史发送详情。
- 预期结果:
- 新发送不可选择已删除模板。
- 草稿或 scheduled 到点时校验失败,不入队
- 新发送和尚未创建真实任务的草稿不可选择已删除模板。
- 删除前已创建的 scheduled 任务到点时使用持久化快照继续入队;企业、应用或签名当前不可用时仍阻断
- 历史发送详情仍展示原短信内容、模板名称或模板快照。
- 不影响历史计费和对账。
@@ -3764,7 +3764,7 @@ npm run verify:phase8
- `TC-UIUX-A5-DELETE-001`:活动通道组引用通道时打开删除确认层;真实预检返回引用数量、组名和优先级,`allowedActions`为空,前后端均禁止删除且通道状态不变。
- `TC-UIUX-A5-DELETE-002`:签名仍被未删除模板、引流信息或未结束报备任务引用;运营端和客户端均显示租户内依赖摘要并禁止删除,客户端不能读取其他企业对象。
- `TC-UIUX-A5-DELETE-003`:模板存在未结束发送或批量任务时阻断;无依赖模板填写原因后逻辑删除,返回操作单号PostgreSQL状态为`deleted`OperationLog包含原因、依赖、影响和幂等键。
- `TC-UIUX-A5-DELETE-003`:模板即使存在未结束发送或批量任务也允许逻辑删除,返回操作单号PostgreSQL模板状态为`deleted`,既有任务、消息和历史关联不变,OperationLog包含依赖快照、影响和幂等键。
- `TC-UIUX-A5-DELETE-004`:相同删除幂等键重试返回相同操作单号且不重复审计;旧版本并发提交返回409并要求重新预检;旧删除接口不能绕过治理规则。
- `TC-UIUX-A5-DELETE-005`:在1440×900、1366×768、768×1024、390×844和375×667打开依赖确认层;对象、依赖、影响和底部操作可滚动到达,无页面级横向溢出,控制台无error/warn。
@@ -4423,7 +4423,10 @@ npm run verify:phase8
| TC-DELETE-CHANNEL-010 | 通道仅关联未结束报备任务,没有活动组、直接路由或连接 | 出现“同时结束关联的报备任务”必选项;勾选后任务置为`abandoned`并写记录,通道逻辑删除,受影响有效签名按剩余有效通道重算汇总 |
| TC-DELETE-CHANNEL-011 | 通道仍存在活动通道组、直接路由或活动网关连接 | 报备任务勾选项不能绕过其他硬依赖,后端拒绝删除并返回真实阻断原因 |
| TC-DELETE-REASON-012 | 分别在运营端和客户端删除无硬依赖的通道、签名、模板,删除原因留空或填写内容 | 留空时允许删除;填写时原文进入审计详情,三类对象均不再要求至少4个字符 |
| TC-DELETE-TEMPLATE-013 | 模板关联状态为`approved/rejected`的发送审核任务和`finished/canceled`的批量任务 | 已结束任务不阻止模板删除;真实过程态发送或批量任务仍阻止删除 |
| TC-DELETE-TEMPLATE-013 | 模板关联任意终态或过程态的发送审核任务和批量任务 | 单独删除模板不查询也不依赖任务是否结束;模板逻辑删除成功,既有任务和历史关联不变 |
| TC-DELETE-TEMPLATE-014 | 使用已逻辑删除的模板创建新发送任务 | 后端拒绝创建,不产生批量任务、消息或计费记录 |
| TC-DELETE-TEMPLATE-015 | 已接受的定时任务到点前,其模板被逻辑删除,企业、应用和签名仍有效 | 任务按已持久化内容快照冻结费用并入队,不因模板当前`deleted`状态失败 |
| TC-DELETE-TEMPLATE-016 | 已接受的定时任务到点前,其签名变为未通过或删除 | 仍按签名安全规则阻断调度,不冻结费用、不入队,任务和消息记录真实标记失败原因 |
## 2026-08-09 通道组删除风险展示与历史保留用例
@@ -4484,3 +4487,27 @@ npm run verify:phase8
| TC-ENTERPRISE-REGION-002 | 打开运营端新建企业,依次选择两个不同省份并查看地市下拉 | 省份选项来自真实字典API;地市只显示当前省的对应值,切换省份后旧地市立即清空;保存后省市真实写入企业档案 |
| TC-ENTERPRISE-REGION-003 | 编辑一个已存省市值暂未出现在当前号段字典的历史企业 | 页面将档案原值补入当前选项并正常显示,未主动修改时不会被清空 |
| TC-ENTERPRISE-REGION-004 | 断开字典API后打开新建企业 | 页面明确提示省市字典加载失败,不显示Mock、localStorage或旧的写死选项 |
## 2026-08-09 通道支持运营商多选规划用例(需求暂缓、未执行)
> 本节仅保存未来验收口径。当前版本不实现运营商多选,以下用例状态均为“暂缓、未执行”,不得据此判定现有系统缺陷或功能已完成。
| 用例编号 | 操作 | 未来预期结果 |
| --- | --- | --- |
| TC-CHANNEL-CARRIER-MULTI-001 | 对包含`mobile/unicom/telecom/all`及已删除通道的生产数据副本执行兼容迁移 | 单运营商值分别迁移为单元素集合,`all`迁移为移动、联通、电信全选;记录数、通道ID、状态和历史关联不变,不根据名称或通道组使用情况推断并缩减能力 |
| TC-CHANNEL-CARRIER-MULTI-002 | 新建或编辑通道,分别勾选一个、两个、三个和零个运营商 | 一个、两个、三个非空组合均可真实保存并回填;零个被前后端拒绝;页面不再提供独立“三网”选项,三个全选等价于旧`all` |
| TC-CHANNEL-CARRIER-MULTI-003 | 将支持移动和联通但不支持电信的通道分别加入三类通道组并发送对应运营商短信 | 仅允许加入移动、联通通道组;电信组前后端均拒绝;发送链不会把电信短信选到该通道,通道组、路由规则和短信实际运营商仍为单值 |
| TC-CHANNEL-CARRIER-MULTI-004 | 取消通道已被活动通道组引用的运营商,再尝试保存 | 后端返回对应真实通道组及影响并阻止保存,不自动删除成员、路由、报备任务或历史数据;解除活动引用后才允许取消 |
| TC-CHANNEL-CARRIER-MULTI-005 | 多运营商通道参与移动、联通、电信发送及成本统计 | 三个运营商继续共用通道唯一单价,客户计费和平台成本不因多选被重复计算;本需求不产生分运营商价格 |
| TC-CHANNEL-CARRIER-MULTI-006 | 检查签名报备任务、报备记录和三网汇总 | 当前暂缓方案不得伪造“签名 × 通道 × 运营商”结果;未来实施前必须重新确定报备升级范围,现有“签名 × 通道”历史记录不得删除或复制成多个虚假运营商结果 |
| TC-CHANNEL-CARRIER-MULTI-007 | 分阶段部署兼容底座后写入仅支持两个运营商的通道,再执行回滚演练 | 只能回滚到能够读取运营商集合的兼容版本;仅识别旧单值的代码不得重新上线并将双运营商数据误判为三网或单网 |
## 2026-08-09 通道组按通道筛选用例
| 用例编号 | 操作 | 预期结果 |
| --- | --- | --- |
| TC-CHANNEL-GROUP-FILTER-001 | 打开通道组管理页并展开“通道”下拉 | 通道组和通道真实API并行加载;下拉显示全部真实通道的名称和编码,已删除通道标记“已删除”,未加入任何组的通道也不被隐藏 |
| TC-CHANNEL-GROUP-FILTER-002 | 在通道下拉中输入完整或部分通道名称、编码 | 下拉只显示标签包含关键字的真实通道选项;无匹配时显示“无匹配选项” |
| TC-CHANNEL-GROUP-FILTER-003 | 选择某通道 | 只展示`items.channelId`包含该通道的通道组,不展示仅运营商相同但未配置该通道的组;总数和分页与筛选结果一致 |
| TC-CHANNEL-GROUP-FILTER-004 | 同时输入通道组名称并选择通道 | 按名称包含与成员通道两个条件取交集,条件变更后回到第一页 |
| TC-CHANNEL-GROUP-FILTER-005 | 点击“重置” | 通道组名称和通道条件同时清空,恢复全部未删除通道组并回到第一页 |