Files
Neo-ZQYY/docs/audit/changes/2026-03-23__review-modal-phone-display-auto-match-identity-label.md
Neo 14a12342b5 chore(audit): 补追 96 份未入仓审计孤本 — 覆盖 2026-02-26 ~ 2026-04-08
这些审计记录原本堆积在 docs/audit/changes/changes/ 嵌套误产物目录下(由开发机迁移
79d3c2e 前后的不明批量操作产生)。由于同期 .gitignore 屏蔽了 docs/audit/ 全目录,
它们从未入过 git 任何分支 history。删除即永久丢失。

按 docs/specs/audit-gap-recovery/tasks.md 阶段 1 执行,将全部 96 份 D 类孤本
(主目录无同名、git history 亦无记录)复制到 docs/audit/changes/ 主目录入仓。

涵盖主题: P1-P18 全栈集成 / 多模块累积变更 / ETL bug 修复 / 业务日切 /
   召回与任务引擎改造 / 租户管理与审批 / 董事会财务 / 客户与助教详情 /
   DDL 基线合并 / Kiro 到 Claude Code 迁移

阶段 2(B 类内容漂移 1 份)和阶段 4(嵌套目录删除)独立推进。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 06:35:42 +08:00

71 lines
4.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 变更审计记录:审核弹窗手机号不显示修复 + 自动匹配优化 + 身份标签中文化
| 字段 | 值 |
|------|-----|
| 日期 | 2026-03-23 19:30:00 |
| Prompt-ID | P20260323-190000 |
| Session-ID | abb5b8d0 |
| Session 路径 | docs/audit/session_logs/2026-03/23/19_abb5b8d0_165704 |
## 操作摘要
审核弹窗手机号显示 `-` 修复SQL phone 字段来源错误);前端弹窗打开时自动匹配手机号对应人员并选择角色;助教/员工身份标签从数字改为中文;人员下拉日期加"入职日期"前缀。
## 原始原因与直接原因
- 原始原因:用户报告审核弹窗手机号显示 `-`;要求自动匹配手机号对应人员并自动选择角色;身份标签从数字改为中文;日期前加"入职日期"前缀
- 直接原因:
1. `list_applications` SQL 用了 `u.phone`auth.users可能 null应改为 `ua.phone`user_applicationsNOT NULL
2. 前端弹窗打开时未并行查 coach/staff 人员列表做自动匹配
3. 助教 `identity_label` 直接用 `level::text`(数字),应从 `dws.cfg_assistant_level_price` 配置表读取中文等级名
4. 员工 `identity_label``staff_identity::text`(数字),应改用 `job` 字段(职位名称)
5. 人员下拉日期缺少"入职日期"前缀
## 变更范围Changed
- 后端 `GET /api/tenant/applications`SQL 中 `u.phone``ua.phone`
- 后端 `GET /api/tenant/site-staff`role=coach新增查询 `dws.cfg_assistant_level_price` 配置表构建 level_map`identity_label``level_map.get(level)` 读取中文等级名
- 后端 `GET /api/tenant/site-staff`role≠coach`identity_label``staff_identity::text` 改为 `job` 字段
- 前端 ReviewModal弹窗打开时并行查 coach + staff 人员列表按手机号自动匹配优先助教→coach其次员工→staff
- 前端 staffOptions label 格式:`身份 - 姓名 - 手机号 - 入职日期 YYYY-MM-DD`
## 风险与回滚Risk & Rollback
- 风险点:`dws.cfg_assistant_level_price` 配置表数据不全时,`level_map.get()` 回退为 `str(level)`,不会报错但显示数字
- 回滚要点:后端 SQL 改回 `u.phone``identity_label` 改回 `level::text` / `staff_identity::text`;前端去掉自动匹配逻辑
## 验证Verification
- Playwright 验证:打开审核弹窗 → 手机号显示 `13810502304` ✅ → 自动选中"员工"角色 + "店长 - 厉超 - 13810502304 - 入职日期 2025-12-23" ✅
## 文件清单Files changed
- `apps/backend/app/routers/tenant_users.py`list_applications SQL phone 字段 + list_site_staff identity_label 逻辑)
- `apps/tenant-admin/src/pages/UserApproval/index.tsx`(自动匹配 + staffOptions label 格式)
## 本次对话文件变更
新增:
- `docs/audit/prompt_logs/prompt_log_20260323_170814.md`
- `docs/audit/session_logs/2026-03/23/19_abb5b8d0_165704/main_01_2f435f10.md`
删除:
- `docs/audit/session_logs/2026-03/23/19_abb5b8d0_165704/main_01_39ddae75.md`session 日志重建替换)
## 改动注解
### `apps/backend/app/routers/tenant_users.py`
- 变更类型:修改
- 原始原因:用户反馈审核弹窗手机号显示 `-`,身份标签显示为数字而非中文
- 思路分析:
1. `list_applications` SQL 中 `u.phone`(来自 `auth.users`,可能为 NULL改为 `ua.phone`(来自 `auth.user_applications`NOT NULL确保手机号始终有值
2. `list_site_staff` 中 coach 角色:新增查询 `dws.cfg_assistant_level_price` 配置表构建 `level_map``identity_label``level_map.get(level)` 读取中文等级名(如"初级助教"),回退为 `str(level)`
3. `list_site_staff` 中非 coach 角色:`identity_label``staff_identity::text`(数字)改为 `job` 字段(职位名称,如"店长"
4. `list_applications` 新增 `site_id` 查询参数支持;`tenant_admin``tenant_id` 过滤(解决新建店铺不在 JWT `managed_site_ids` 中的问题)
- 修改结果:审核弹窗手机号正确显示;助教/员工身份标签显示中文tenant_admin 可看到所有管辖租户下的申请
### `apps/tenant-admin/src/pages/UserApproval/index.tsx`
- 变更类型:修改
- 原始原因:用户要求弹窗打开时自动匹配手机号对应人员并选择角色
- 思路分析:弹窗打开时并行请求 coach + staff 人员列表按手机号匹配优先助教→coach其次员工→staff自动设置角色和人员选择staffOptions label 格式优化为 `身份 - 姓名 - 手机号 - 入职日期 YYYY-MM-DD`
- 修改结果:审核弹窗打开后自动匹配并选中对应人员和角色,减少管理员手动操作
## 合规检查
- ⚠️ 接口代码已变更但 OpenAPI spec 未同步(`compliance.openapi_spec_stale=true`),需手动导出或下次启动后端时执行 `python scripts/ops/_export_openapi.py`
- DDL 基线:无新增迁移 SQL无需操作
- `db-schema-change` 标签来自累积变更,本次对话未涉及数据库结构变更