15 KiB
全菜单与弹窗真实后端审计
审计范围
本次范围扩大到客户端、运营端所有已挂路由页面,以及页面中的新增、编辑、删除、提交、导入、上传、详情、预览等主要弹窗/动作。
审计依据:
src/routes/AppRoutes.tsxsrc/apps/admin/*.tsxsrc/apps/client/*.tsxsrc/api/adminApi.tsdocs/first-version-development-requirements.mddocs/testing-plan.mddocs/admin-prototype-recovery-scope.md
审计口径:
- 第一版短信功能必须走真实 NestJS API + Prisma/PostgreSQL。
- mock/localStorage/static 数组不能作为系统功能验收通过依据。
- API 失败只能展示错误态或空态,不能静默回退假数据。
- 彩信能力当前是待开发边界,但如果菜单仍可进入,需要明确标记或从第一版验收菜单中移除。
P0:短信第一版必须修复
客户端短信应用列表仍是静态数据
文件:src/apps/client/ClientApplicationsPage.tsx
状态:已修复。
问题:
- 旧实现没有调用
clientApi.listApplications()。 - 旧实现的
applications是前端静态数组。 - 旧实现的“接口参数”弹窗展示假企业代码、账号、密码、网关 IP、端口、接入号、绑定 IP。
影响:
- 清空业务数据后页面仍会显示假应用。
- 客户端看到的 CMPP 对接参数不可信。
已完成修复:
- 页面接入真实
GET /api/client/applications。 - 新增
GET /api/client/applications/{id}/cmpp-params,参数弹窗按当前租户读取真实参数。 - 服务层按
tenantId校验应用归属,跨租户应用不可见。 - 空库时显示空态,不再渲染假应用。
客户端企业认证是纯前端状态机
文件:src/apps/client/ClientEnterpriseAuthPage.tsx
问题:
- 页面没有 API 调用。
- 企业信息、认证状态、提交时间、法人信息、二维码、人脸/打款认证结果全是前端状态。
- 点击提交只改本地
status和step。
影响:
- 客户端提交企业认证后,运营端无法看到真实待审记录。
- 发送前认证校验依赖真实
Tenant.certificationStatus,该页面不会改变真实状态。
修复:
- 接入企业认证查询、提交、重新提交接口。
- 上传营业执照/材料必须走真实文件对象和对象存储。
- 提交后写
EnterpriseCertification,运营端审核后同步Tenant.certificationStatus。
客户端短信发送详情仍是静态表
文件:src/apps/client/ClientSendDetailPage.tsx
状态:已修复。
问题:
sendDetailRows是静态数组。- 查询条件只过滤本地数组。
- 发送记录、回执状态、运营商、省份均不是数据库记录。
影响:
- 发送链路真实跑通后,客户端详情页看不到真实短信。
- 清空数据后仍会显示假记录。
修复:
- 已接入
GET /api/client/operations/messages。 - 查询按当前租户隔离,支持应用、手机号、状态过滤。
- 页面展示真实
SmsMessageRecord、回执记录、通道运营商和发送地区;空库时显示空态。
客户端短信上行记录仍是静态表
文件:src/apps/client/ClientUplinkMessagesPage.tsx
状态:已修复。
问题:
uplinkMessages和matchedSendRecords是静态数组。- “添加到应用黑名单”按钮没有 API 动作。
影响:
- Gateway/真实 API 写入的上行短信无法在客户端展示。
- 上行匹配下发记录的业务闭环不存在。
修复:
- 已接入
GET /api/client/operations/uplink-messages。 - 详情弹窗按上行
messageId查询GET /api/client/operations/messages,展示真实匹配的下发记录。 - 原无 API 支撑的“添加到应用黑名单”按钮已移除,后续补真实企业黑名单或应用黑名单 API 后再恢复。
运营端短信上行记录仍是静态表
文件:src/apps/admin/AdminSmsUplinkRecordsPage.tsx
状态:已修复。
问题:
uplinkMessages、matchedRecord是静态数组。- 查询、详情、匹配下发记录均在前端完成。
- “添加到应用黑名单”按钮没有 API 动作。
影响:
- 运营端看不到真实上行记录。
- 上行匹配和人工处理无法验收。
修复:
- 已接入
GET /api/admin/operations/uplink-messages,返回真实上行记录、企业和通道信息。 - 详情弹窗按上行
messageId查询GET /api/admin/operations/messages,展示真实匹配的下发记录。 - 原无 API 支撑的“添加到应用黑名单”按钮已移除,后续补真实企业黑名单或应用黑名单 API 后再恢复。
运营端短信任务进度仍是静态任务
文件:src/apps/admin/AdminSmsTaskProgressPage.tsx
状态:已修复。
问题:
taskData是静态数组。- 运营商统计、城市统计、任务详情均来自前端。
- 终止任务只更新本地状态。
影响:
- 真实批量任务、发送进度、分运营商/地区统计无法验收。
修复:
- 已接入
GET /api/admin/send/batch-tasks,任务列表和详情均来自真实SmsBatchTask与关联短信记录。 - 详情弹窗使用真实短信记录聚合通道运营商与发送地区分布;当前数据库未持久化号码归属城市,因此不再展示静态城市分布。
- 已新增
POST /api/admin/send/batch-tasks/{id}/terminate,运营终止只取消未提交的 queued/scheduled/ready 消息,已提交部分继续等待回执。
运营端通道组表单没有真实保存
文件:src/apps/admin/AdminChannelGroupFormPage.tsx
状态:已修复。
问题:
channelOptions、defaultProvinceRoutes、defaultNationalRoutes是静态数据。- 新增/编辑省网、全国通道只改本地 state。
- 底部“确认”只
navigate('/admin/channel-groups'),没有调用 API。 - 与当前重要规则冲突:省份通道选择、全国优先级唯一、通道组 item carrier、通道 sendRegion 校验都无法在该页面落库。
影响:
- 页面看似可配置通道组,但实际不会保存到真实通道组 item。
- 从 0 测试时无法通过该表单配置发送路由。
修复:
- 已接入真实通道列表和通道组列表,编辑时加载真实通道组 items。
- 已新增
PUT /api/admin/channel-groups/{id},保存时事务更新通道组并重建省网/全国 items。 - 后端校验省份唯一、全国优先级唯一、通道不重复、item carrier 与通道组 carrier 一致、省网通道地区一致。
运营端企业管理专项缺口已阶段性关闭
文件:
docs/admin-prototype-recovery-scope.mdsrc/apps/admin/AdminCustomerFormPage.tsxsrc/apps/admin/AdminEnterpriseApplicationsPage.tsxsrc/apps/admin/AdminSmsApplicationFormPage.tsxsrc/apps/admin/AdminEnterpriseSignaturesPage.tsxsrc/apps/admin/AdminEnterpriseTemplatesPage.tsx
问题摘要:
- 企业表单曾从原型完整档案瘦身为租户三字段,阶段 4-1 已恢复真实档案保存。
- 企业删除不存在/过期 ID 曾返回 500,阶段 4-1 已修复为 404。
- 企业应用新增/编辑曾硬编码
2763,阶段 4-2 已改为真实企业选择和应用自身tenantId。 - 短信应用编辑接口曾待补,阶段 4-2 已补运营端
GET/POST/PUT /api/admin/enterprise-applications和应用路由替换接口。 - 彩信应用当前明确标记待开发,不展示演示数组。
- 企业签名与引流信息曾只剩只读列表,阶段 4-3 已恢复短信签名新增/编辑/删除和引流信息维护,真实保存到
SmsSignature.drainageInfo。 - 企业模板曾只剩只读列表,阶段 4-4 已恢复短信模板新增/编辑/删除和变量维护,真实保存到
SmsTemplate与TemplateVariable。 - 彩信应用、彩信签名、彩信模板当前明确标记待开发,不展示演示数组。
修复:
- 企业管理、企业应用、企业签名与引流信息、企业模板已按
docs/admin-prototype-recovery-scope.md阶段 4-1 至 4-4 修复。 - 后续继续按审计清单处理其他 P0/P1 页面。
运营端短信通道编辑接口待补
文件:src/apps/admin/AdminChannelsPage.tsx
状态:阶段 5 已修复。
问题:
- 创建、复制、启停、删除、链接日志已经接真实 API。
- 旧实现编辑通道时直接提示“短信通道编辑接口待补,当前不做本地模拟保存”。
影响:
- 旧实现中通道创建后无法真实编辑网关、账号、接入号、地区、运营商等关键配置。
修复:
- 已补
PUT /api/admin/channels/:id。 - 编辑弹窗提交真实更新,密码留空时不覆盖原密码,填写时更新
passwordCipher。 - 后端继续校验
gatewayPort范围,并写sms_channel.update操作日志。 - 已补通道更新单元测试,并重新通过通道定向测试、API 全量测试、前后端构建。
P1:真实接口已接入但能力不完整
客户端短信发送导入表格只是展示入口
文件:src/apps/client/ClientSendPage.tsx
状态:阶段 6 已修复 CSV/TSV/TXT 文本导入真实预览和确认发送;XLSX 二进制解析后续单列能力补齐。
问题:
- 手动输入号码可调用真实
clientApi.createBatchTask()。 - 旧实现“导入表格”明确写着“当前原型仅展示上传入口”。
- 旧实现没有真实文件解析、预览、确认导入。
修复:
- 已接入真实
POST /api/client/send/imports/preview和POST /api/client/send/imports/confirm。 - 客户端读取 CSV/TSV/TXT 文件文本后交由后端预览,后端校验手机号格式、重复号码、黑名单和模板变量列。
- 页面展示总行数、有效号码、错误行和前 5 条错误明细。
- 确认发送走真实导入确认接口,并复用批量任务创建链路。
- 当前后端接口是文本解析,XLSX 二进制解析未标记完成,后续如验收 XLSX 需补解析库和对应测试。
客户端签名材料只记录文件元数据
文件:src/apps/client/ClientSignaturesPage.tsx
状态:阶段 7 已修复。
问题:
- 签名创建、材料记录、提交审核调用真实 API。
- 旧实现文件本体没有真正上传到 MinIO/对象存储,只创建
FileObject元数据。
修复:
- 已新增
POST /api/admin/files/uploadmultipart 上传接口。 - 服务端先把文件内容写入 MinIO 对象存储,再创建
FileObject元数据。 - 客户端签名页上传材料时先调用真实上传接口,成功后再创建签名材料关联。
- 如果对象存储不可用,上传会失败并阻止材料元数据冒充成功。
客户端短信模板功能比原型瘦身
文件:src/apps/client/ClientTemplatesPage.tsx
状态:阶段 8 已修复。
问题:
- 列表、新增、提交审核调用真实 API。
- 旧实现缺少编辑模板、签名选择、变量推荐/自定义变量面板等原型交互。
- 旧实现删除实际是改状态为
disabled,页面文案需要匹配。
修复:
- 已恢复模板新增/编辑弹窗、推荐变量、自定义变量、变量示例值维护。
- 已补
PUT /api/client/templates/{id},编辑时真实更新SmsTemplate并重建TemplateVariable。 - 模板可绑定签名,签名下拉按应用所属企业和签名绑定应用过滤。
- 删除仍按第一版现有语义写
disabled,页面保留删除入口并从列表过滤 disabled。
运营端报备回执导入不是真文件导入
文件:src/apps/admin/AdminReportTasksPage.tsx
状态:阶段 9 已修复 CSV/TSV/TXT 文本回执真实上传和解析。
问题:
- 报备任务列表和导入动作接了 API。
- 弹窗只输入
fileName和备注,没有真实文件上传/解析。 statusAfter固定为partial。
已完成修复:
- 前端导入弹窗改为真实选择文件,先上传到
/api/admin/files/upload,再提交回执内容到报备导入接口。 - 后端解析 CSV/TSV/TXT 文本回执,按状态/结果列统计成功、失败行,并派生
completed、partial、failed任务状态。 - 导入记录保存真实
fileObjectId、文件名、行数、成功数、失败数和行级解析结果。 - 未识别状态按失败处理,避免把未知运营商回执误判为报备通过。
系统配置与账号设置没有保存接口
状态:本轮已从第一版路由移除。
文件:
src/apps/admin/AdminSettingsPage.tsxsrc/apps/client/ClientSettingsPage.tsx
问题:
- 运营端系统配置没有 API。
- 客户端账号设置明确写着“纯前端原型,不会提交到后端”。
已完成修复:
- 运营端系统配置、客户端账号设置当前无真实保存接口,且不属于第一版短信主链路验收入口。
- 已移除对应路由并删除纯前端页面文件,避免直达 URL 展示假功能。
P2:彩信待开发边界,需要菜单策略
以下页面以彩信为主,当前大量使用静态数组、本地 state 或无 API。第一版若不验收彩信,建议从菜单隐藏或明确标记“待开发”,避免与短信真实功能混淆。
状态:本轮已将可点击彩信待开发路由统一指向占位页,不再进入静态 mock 演示页。
客户端:
src/apps/client/ClientMmsSignatureReportPage.tsxsrc/apps/client/ClientMmsTemplatesPage.tsxsrc/apps/client/ClientMmsSendPage.tsxsrc/apps/client/ClientMmsBatchTasksPage.tsxsrc/apps/client/ClientMmsSendDetailPage.tsxsrc/apps/client/ClientMmsUplinkMessagesPage.tsx
运营端:
src/apps/admin/AdminMmsApplicationFormPage.tsxsrc/apps/admin/AdminMmsChannelsPage.tsxsrc/apps/admin/AdminMmsRecordsPage.tsxsrc/apps/admin/AdminMmsTaskProgressPage.tsxsrc/apps/admin/AdminSignatureAuditPage.tsx
说明:
AdminSignatureAuditPage.tsx当前实际是“彩信模板审核”,使用initialMmsAudits,通过/拒绝只改本地 state。- 如果菜单名称仍显示为审核中心能力,需要调整命名或隐藏,避免被误认为短信签名审核真实闭环。
已基本接入真实 API 的页面
以下页面未发现明显静态业务主数据兜底,仍需后续做浏览器 smoke 和真实空库验证:
客户端:
ClientHomeClientBatchTasksPageClientBillingPageClientInvoicesPageClientUsersPageClientSystemLogsPage
运营端:
AdminHomeAdminMonitorPageAdminAnalyticsPageAdminRechargeRecordsPageAdminBillingPageAdminUsersPageAdminSystemLogsPageAdminSmsAuditPageAdminTemplateAuditPageAdminEnterpriseAuditPageAdminReportRecordsPageAdminChannelReportPageAdminSensitiveWordsPageAdminGlobalBlacklistPageAdminEnterpriseBlacklistPageAdminPhoneSegmentsPageAdminDrainageFieldsPage
注意:
- “基本接入”不等于业务验收通过;仍要用真实空库和真实 API 操作验证按钮、弹窗和错误态。
- 搜索表达式会对 option 常量、纯 UI 状态产生少量误报,最终修复应以源码和真实页面操作为准。
建议修复顺序
- 先修 P0 短信主链路展示页:客户端应用、发送详情、上行;运营端短信任务进度、短信上行。
- 修通道组表单真实保存,因为它直接影响发送路由配置。
- 按企业专项恢复企业管理、企业应用、签名引流、模板。
- 补短信通道编辑接口。
- 补 P1 的导入、材料上传、模板编辑、回执导入和设置保存。
- 彩信页面统一隐藏、标记待开发或单独进入彩信开发计划。
- 每完成一组,执行真实空库 smoke,确认清库后不会显示假数据。