feat: polish reporting templates and shared controls

This commit is contained in:
hectorzhao
2026-07-15 16:31:49 +08:00
parent 28fb8e9038
commit a7a4e8d9f6
21 changed files with 488 additions and 119 deletions
+10 -4
View File
@@ -137,10 +137,12 @@
### 4.4 模板管理与审核
1. 客户端创建短信模板,填写模板名称、短信内容、变量、应用、签名。
2. 系统校验敏感词、字数、变量格式和签名匹配
3. 运营端短信模板审核可通过或驳回模板
4. 运营端在企业模板管理中代企业添加的短信模板,保存后应直接置为已通过 `approved`;客户端自行创建并提交的模板仍按审核流程处理
4. 审核通过的模板才允许在短信发送中选择
2. 短信模板必须选择签名,模板内容必须以完整中文括号签名 `【签名】` 开头。客户端和运营端选择签名时自动把完整签名填入内容开头,切换签名时替换原前缀而不是重复追加;内容输入框明确提示该规则,字符数和计费条数按“签名 + 正文”完整内容计算
3. NestJS 创建、编辑和提交审核时必须校验所选签名属于模板企业/应用,且模板内容以该签名开头;不得只依赖前端自动填充
4. 系统校验敏感词、字数、变量格式和签名匹配
5. 运营端短信模板审核通过或驳回模板
6. 运营端在企业模板管理中代企业添加的短信模板,保存后应直接置为已通过 `approved`;客户端自行创建并提交的模板仍按审核流程处理。
7. 审核通过的模板才允许在短信发送中选择。
### 4.5 短信发送
@@ -547,6 +549,10 @@
- 平均到达时长只使用成功且时间有效的短信,按 `deliveredAt - submittedAt` 计算;每个日期、每个维度组先计算 P95,剔除大于 P95 的最慢 5% 样本后再求平均。无成功或无有效时间样本时展示为空,不以 0 冒充。
- `SmsMessageRecord` 必须固化实际使用的 `drainageInfoId`。新短信在同签名已审核通过的引流信息中按正文精确包含 URL 匹配,优先最长 URL;最长 URL 出现多个同长度候选时视为歧义并不关联。历史短信使用同一规则回填,未命中或歧义统一归入“未关联引流信息”,不得把一条短信复制到签名下所有引流信息造成重复统计。
- 发送质量报表与对账、利润报表共用 T+1 及 T-4 至 T-1 滚动重算任务,每次重算在同一日期事务内重建四个质量维度。
- 对账单、利润报表、发送质量报表均提供导出功能。导出必须由真实 API 按页面当前筛选条件查询完整结果并生成 CSV,不得只导出当前分页或在浏览器内拼接静态数据。
- 报备字段库采用自适应卡片布局,分开展示统计概览、签名/引流信息通用字段和字段定义;卡片明确展示通道引用数及通用配置数,已被引用的字段不可删除。
- 运营端和客户端用户管理页的新增用户按钮使用标准小尺寸操作按钮,不得占用大块页面空间。
- 项目通用 `Select` 下拉面板默认通过页面级 Portal 渲染,不得被弹窗正文、底部操作栏、卡片或滚动容器裁剪;控件根据视口剩余空间自动向上或向下展开,跟随页面滚动和窗口尺寸变化重新定位,并继续支持名称搜索和滚动浏览全部真实 API 选项。企业签名的企业和企业应用选择等所有页面统一复用该控件,不得另写页面专用下拉实现。
### 5.20 数据保存与清理