fix(mp): T40 UI 审查全量修复 + 设计体系一致性优化

Phase 0 基础设施:
- statusTag.ts: getStatusInlineStyle() 移除内联 borderRadius/padding/fontSize,仅返回 {background, color}
- 新增 SEVERITY_COLORS + getSeverityStyle() + getSeverityLabel() 统一告警严重程度样式
- variables.scss: 新增 9 个语义颜色别名 ($success/$danger/$warning/$info 等)
- mixins.scss: 新增 status-inline mixin 统一状态标签样式
- 7 个消费者页面添加 @include status-inline CSS 补偿

Phase 1 HIGH 修复 (4 页面):
- P46 随访管理: 移除 getTypeStyle() 硬编码 fontSize,替换文字 Loading 为组件
- P45 咨询详情医护: 添加 Loading/ErrorState 三态模板 + error ref
- P02 健康数据: 添加 loading ref + Loading 组件 + 错误 toast 提示
- P48 告警中心: 替换本地 SEVERITY_COLORS/SEVERITY_LABELS 为 statusTag.ts 导出

Phase 2 全局一致性:
- 2.1 触控补全: 17 页面为可点击元素添加 min-height: $touch-min
- 2.2 字号替换: 19 文件 31 处硬编码 px → Design Token CSS 变量
- 2.3 颜色替换: 18 文件 ~50 处硬编码十六进制 → SCSS 语义变量
- 2.4 elder-mode.scss: 新增 9 个选择器到触控放大清单

Phase 3 LOW 修复:
- 3.1 统一 Loading: 21 页面旧式文字加载 → <Loading> 组件
- 3.2 useElderClass: 8 页面补全长者模式 class 绑定
- 3.3 零散修复: 按钮 44px→48px,诊断记录添加 scroll-view 无限加载

同时新增 UniApp (Vue 3 + Vite) 小程序完整代码库 (146 文件)
This commit is contained in:
iven
2026-05-15 11:22:51 +08:00
parent 18fa6ce6d4
commit 2c567bd772
147 changed files with 36561 additions and 564 deletions

View File

@@ -1,632 +1,362 @@
# T40 小程序全页面 UI 审查结果
> 日期: 2026-05-14 | 分支: feat/media-library-banner | 审查方法: 静态代码审查 + MCP 验证(首页)
## 审查方法说明
MCP DevTools 连接后 `inject_auth` 和导航工具持续报 `fd` 错误(文件描述符耗尽),仅成功获取首页 `page_data`。审查以 **全量静态代码扫描** 为主,覆盖 58 个页面 TSX + 57 个 SCSS 文件。
**扫描维度:**
- `font-size: \d+px` 硬编码字号 → **零违规**
- `border-radius: \d+px` 硬编码圆角 → **零违规**
- `#[0-9A-Fa-f]{3,8}` 硬编码颜色 → 12 处4 hex + 8 bare `white`
- 内联 style 硬编码 → 2 处需修复statusTag.ts
- Loading 组件覆盖 → 50/58 页面
- 长者模式覆盖 → 58/58 页面(**100%**
- 空态处理 → 39/58 页面(详情页/表单页无需空态)
- 触控区域 <48px → 11 处40px/44px
---
> 日期: 2026-05-15 | 分支: feat/media-library-banner | 审查方法: MCP 实时测试(4页) + 静态代码审查(56页)
## 审查汇总
| 分组 | 页面数 | PASS | PASS_WITH_ISSUES | NEEDS_WORK |
|------|--------|------|-----------------|------------|
| §3.1 TabBar 页面 | 4 | 0 | 4 | 0 |
| §3.5 医护工作站 | 12 | 4 | 8 | 0 |
| §3.2 患者端核心 | 7 | 2 | 5 | 0 |
| §3.3 患者端子包 | 11 | 5 | 6 | 0 |
| §3.4 个人中心 | 18 | 9 | 9 | 0 |
| §3.6 透析+法律 | 8 | 4 | 4 | 0 |
| **合计** | **60** | **24** | **36** | **0** |
| §3.5 医护工作站 | 12 | 0 | 11 | 1 |
| §3.2 患者端核心 | 7 | 0 | 7 | 0 |
| §3.3 患者端子包 | 11 | 0 | 11 | 0 |
| §3.4 个人中心 | 18 | 0 | 18 | 0 |
| §3.6 透析+法律 | 8 | 0 | 8 | 0 |
| **合计** | **60** | **0** | **59** | **1** |
**问题统计:**
- HIGH: 0 个
- MEDIUM: 5 个(触控 <48px ×4 + statusTag 硬编码 ×1
- LOW: 19 个bare `white` ×8 + gradient hex ×4 + 触控 44px ×4 + 缺 Loading ×3
## 问题统计
| 级别 | 数量 | 说明 |
|------|------|------|
| HIGH | 6 | JS层硬编码字号+颜色、咨询详情缺Loading、健康页静默错误、随访管理NEEDS_WORK |
| MEDIUM | 18 | 触控区域普遍不足、字号硬编码(~20处)、颜色硬编码(~45处) |
| LOW | 12 | 加载组件不统一、部分缺elderClass、错误静默 |
---
## §3.1 TabBar 页面(P0
## §3.1 TabBar 页面(MCP 实时测试 + 静态审查
### P1 首页pages/index/index
### P01 首页pages/index/index— PASS_WITH_ISSUES
**角色:** 访客 / 患者
**MCP 验证:** ✅ page_data 确认渲染正确(问候语"晚上好,系统管理员"4 项体征卡片正常显示"未记录"
**结果:** PASS_WITH_ISSUES
**角色:** 患者 | **MCP截图:**
| 维度 | 状态 | 备注 |
|------|------|------|
| 字号 Token | | 全部 `var(--tk-font-*)` |
| 颜色变量 | ⚠️ | 4 处硬编码 hex#3D5A40 ×2, #8B6F4E ×2渐变中间色 |
| 圆角变量 | | 全部 SCSS 变量 |
| 触控区域 | ⚠️ | greeting-bell 44px应 ≥48px |
| 空态 | ✅ | 文章列表有 fallback 卡片 |
| 加载态 | ✅ | Loading 组件 + useThrottledDidShow |
| 错误态 | ✅ | catch → showToast |
| 长者模式 | ✅ | modeClass prop |
| 访客守卫 | ✅ | 内置 GuestHome 组件 |
**问题清单:**
- [ ] `index.scss:343,358` 渐变 #3D5A40 → 应定义 `$acc-d` 变量LOW
- [ ] `index.scss:346,362` 渐变 #8B6F4E → 应定义 `$wrn-d` 变量LOW
- [ ] `index.scss:44` greeting-bell 44px → 建议 48pxLOW
---
### P2 健康数据pages/health/index
**角色:** 患者
**结果:** PASS_WITH_ISSUES
| 维度 | 状态 | 备注 |
|------|------|------|
| 字号 Token | ✅ | 全部 `var(--tk-font-*)` |
| 颜色变量 | ✅ | 无硬编码 |
| 圆角变量 | ✅ | 全部 SCSS 变量 |
| 触控区域 | ⚠️ | vital-tab 40pxMEDIUMdevice-icon 44pxLOW |
| 空态 | ✅ | 趋势数据有"暂无趋势数据" |
| 字号 Token | | `.action-icon` 硬编码 `font-size: 36px` |
| 颜色变量 | | 全部使用 SCSS 变量 |
| 触控区域 | | `.action-item` 无 min-height约 36px < 48px |
| 空态 | | EmptyState |
| 加载态 | ✅ | Loading 组件 |
| 错误态 | | catch → showToast |
| 长者模式 | | useElderClass() |
| 访客守卫 | ✅ | GuestGuard 组件 |
| 错误态 | | catch 静默失败 |
| 长者模式 | | 硬编码字号 + 触控未放大 |
**问题清单:**
- [ ] `index.scss:32` vital-tab height 40px → 建议 48pxMEDIUM
- [ ] `index.scss:277` device-icon 44px → 建议 48pxLOW
**问题**
- [ ] `.action-icon` font-size 36px → `var(--tk-font-hero)` (MEDIUM)
- [ ] `.action-item` 无 min-height (MEDIUM)
- [ ] API catch 静默失败无提示 (LOW)
---
### P3 消息pages/messages/index
### P02 健康数据pages/health/index— PASS_WITH_ISSUES
**角色:** 患者
**结果:** PASS_WITH_ISSUES
| 维度 | 状态 | 备注 |
|------|------|------|
| 字号 Token | | 全部 `var(--tk-font-*)` |
| 颜色变量 | ✅ | 无硬编码 |
| 圆角变量 | | 全部 SCSS 变量 |
| 触控区域 | ⚠️ | segment-tab 40pxMEDIUMconsult-avatar 44pxLOW |
| 态 | | 咨询/通知均有"暂无"提示 |
| 加载态 | | Loading 组件 |
| 错误态 | | catch → showToast |
| 长者模式 | ✅ | useElderClass() |
| 访客守卫 | ✅ | GuestGuard 组件 |
| 字号 Token | | `.vital-icon` 硬编码 `font-size: 28px` |
| 颜色变量 | ✅ | 全部 SCSS 变量 |
| 触控区域 | | `.vital-item` 无 min-height |
| 空态 | | 体征全空无引导 UI |
| 加载态 | | 无 Loading 指示器 |
| 错误态 | | `catch { /* ignore */ }` |
| 长者模式 | | 硬编码字号 + 3列网格未适配 |
**问题清单:**
- [ ] `index.scss:35` segment-tab height 40px → 建议 48pxMEDIUM
- [ ] `index.scss:123` consult-avatar 44px → 可接受非主要触控LOW
**问题**
- [ ] 无 Loading 组件 (HIGH)
- [ ] catch 完全静默 (HIGH)
- [ ] `.vital-icon` 28px → `var(--tk-font-body-lg)` (MEDIUM)
- [ ] 体征空态无引导 (MEDIUM)
---
### P03 消息pages/messages/index— PASS_WITH_ISSUES
### P4 我的pages/profile/index
**角色:** 访客 / 患者
**结果:** PASS_WITH_ISSUES
**角色:** 患者
| 维度 | 状态 | 备注 |
|------|------|------|
| 字号 Token | ✅ | 全部 `var(--tk-font-*)` |
| 颜色变量 | ✅ | 无硬编码 |
| 圆角变量 | | 全部 SCSS 变量 |
| 触控区域 | ✅ | menu-item min-height 48px |
| 态 | N/A | 始终有内容 |
| 加载态 | ⚠️ | refreshPoints() 异步但无 loading 指示,积分先显示 0 |
| 错误态 | N/A | 无需 |
| 长者模式 | ✅ | modeClass 变量 |
| 访客守卫 | ✅ | 内置 isGuest 逻辑 |
| 字号 Token | ✅ | 全部 var(--tk-font-*) |
| 颜色变量 | ✅ | 全部 SCSS 变量 |
| 触控区域 | | `.msg-card` 无 min-height |
| 空态 | ✅ | EmptyState |
| 加载态 | ✅ | Loading |
| 错误态 | | catch 静默与空列表不可区分 |
| 长者模式 | ⚠️ | `.msg-card` 未列入触控放大 |
**问题清单:**
- [ ] `index.tsx:91` refreshPoints 异步加载积分,初始显示 0 可能让用户误以为无积分 → 建议 loading 态LOW
---
## §3.5 医护工作站P0
### P41 医护工作台pages/doctor/index
**角色:** Doctor / Nurse / HM
**结果:** PASS
全维度合规Loading/空态/长者模式/错误处理均正确。
---
### P42 患者列表pages/doctor/patients/index
**角色:** Doctor / Nurse
**结果:** PASS_WITH_ISSUES
**问题清单:**
- [ ] `index.tsx:127` style 内 `color: white` 硬编码(标签颜色来自后端动态数据,可接受但建议用 `$white`LOW
---
### P43 患者详情pages/doctor/patients/detail/index
**角色:** Doctor / Nurse
**结果:** PASS
---
### P44 咨询管理pages/doctor/consultation/index
**角色:** Doctor / Nurse
**结果:** PASS_WITH_ISSUES
**问题清单:**
- [ ] 引用 `statusTag.ts` 中硬编码 COLORS 和 fontSize/borderRadius → 应改为 CSS 类MEDIUM
---
### P45 咨询详情-医护pages/doctor/consultation/detail/index
**角色:** Doctor / Nurse
**结果:** PASS_WITH_ISSUES
**问题清单:**
- [ ] `index.scss:192,203` 输入栏按钮 height 40px → 建议 48pxLOW
---
### P46 随访管理pages/doctor/followup/index
**角色:** Doctor / Nurse / HM
**结果:** PASS_WITH_ISSUES
**问题清单:**
- [ ] 引用 `statusTag.ts` 硬编码(同 P44MEDIUM
---
### P47 随访详情-医护pages/doctor/followup/detail/index
**角色:** Doctor / Nurse
**结果:** PASS
---
### P48 告警中心pages/doctor/alerts/index
**角色:** Doctor / Nurse / HM
**结果:** PASS
---
### P49 告警详情pages/doctor/alerts/detail/index
**角色:** Doctor / Nurse / HM
**结果:** PASS
---
### P50 化验审核pages/doctor/report/index
**角色:** Doctor
**结果:** PASS
---
### P51 化验详情-医护pages/doctor/report/detail/index
**角色:** Doctor
**结果:** PASS
---
### P52 待办事项pages/doctor/action-inbox/index
**角色:** Doctor / Nurse / HM
**结果:** PASS_WITH_ISSUES
**问题清单:**
- [ ] 引用 `statusTag.ts` 硬编码(同 P44MEDIUM
---
## §3.2 患者端核心功能P0
### P5 咨询列表pages/consultation/index
### P04 我的pages/profile/index— PASS_WITH_ISSUES
**角色:** 患者
**结果:** PASS
| 维度 | 状态 | 备注 |
|------|------|------|
| 字号 Token | ✅ | 全部 CSS 变量 |
| 颜色变量 | ✅ | 全部 SCSS 变量 |
| 触控区域 | ⚠️ | `.menu-item` 64px ✅; `.patient-item` ❌ |
| 空态 | ⚠️ | 无患者时缺引导 |
| 加载态 | ❌ | loadPatients 无 Loading |
| 错误态 | ❌ | API 无 try/catch |
| 长者模式 | ⚠️ | `.patient-item` 未列入触控放大 |
---
### P6 咨询详情pages/consultation/detail/index
## §3.5 医护工作站(静态代码审查
**角色:** 患者
**结果:** PASS
### P41 工作台pages-sub/doctor/index— PASS_WITH_ISSUES
✅ 字号/颜色 | ❌ 触控 | ❌ 错误静默
### P42 患者列表pages-sub/doctor/patients/index— PASS_WITH_ISSUES
✅ 字号/颜色 | ❌ 触控 | ✅ 空态/加载/错误
### P43 患者详情pages-sub/doctor/patients/detail— PASS_WITH_ISSUES
✅ 字号/颜色 | ❌ 触控 | ✅ 空态/加载/错误
### P44 咨询管理pages-sub/doctor/consultation/index— PASS_WITH_ISSUES
✅ 字号/颜色 | ❌ 触控 | ✅ 空态/加载/错误
### P45 咨询详情-医护pages-sub/doctor/consultation/detail— PASS_WITH_ISSUES
✅ 字号/颜色 | ❌ 触控 | ❌ **无 Loading UI**HIGH
### P46 随访管理pages-sub/doctor/followup/index— **NEEDS_WORK**
- ❌ JS 层硬编码 `fontSize: '24px'`HIGH
- ❌ JS 层 8 个硬编码 hex 颜色HIGH
- ❌ 触控不足 Tab padding 仅 6px 16px
- ❌ 长者模式字号不生效
### P47 随访详情-医护pages-sub/doctor/followup/detail— PASS_WITH_ISSUES
✅ 字号 | ❌ CSS `color: #fff` | ❌ 触控
### P48 告警中心pages-sub/doctor/alerts/index— PASS_WITH_ISSUES
✅ 字号 | ❌ JS 层 8 个 hex 颜色 | ❌ 触控
### P49 告警详情pages-sub/doctor/alerts/detail— PASS_WITH_ISSUES
✅ 字号/颜色/触控均合规(唯一触控完全达标页面)
### P50 化验审核pages-sub/doctor/report/index— PASS_WITH_ISSUES
✅ 字号/颜色 | ❌ 触控
### P51 化验详情-医护pages-sub/doctor/report/detail— PASS_WITH_ISSUES
✅ 字号 | ❌ CSS `#fa541c/#1890ff/#52c41a` | ❌ 触控
### P52 待办事项pages-sub/doctor/action-inbox— PASS_WITH_ISSUES
✅ 字号/颜色 | ❌ 触控
---
### P7 预约列表pages/appointment/index
## §3.2 患者端核心功能(静态代码审查
**角色:** 患者
**结果:** PASS_WITH_ISSUES
### P05 咨询列表pages-sub/consultation/index— PASS_WITH_ISSUES
✅ 全维度合规
**问题清单:**
- [ ] `index.scss:151` filter tab height 40px → 建议 48pxLOW
### P06 咨询详情pages-sub/consultation/detail— PASS_WITH_ISSUES
✅ 字号/颜色 | ❌ 发送按钮触控 | ❌ 消息空态缺失
### P07 预约列表pages-sub/appointment/index— PASS_WITH_ISSUES
✅ 全维度合规 | ⚠️ 列表项不可点击跳转详情
### P08 创建预约pages-sub/appointment/create— PASS_WITH_ISSUES
✅ 字号/颜色 | ❌ 无 Loading 组件
### P09 预约详情pages-sub/appointment/detail— PASS_WITH_ISSUES
❌ 3 处硬编码颜色 | ❌ 取消按钮 44px | ❌ 未用 Loading 组件
### P10 积分商城pages-sub/mall/index— PASS_WITH_ISSUES
✅ 全维度合规 | ⚠️ 商品卡片不可点击
### P11 登录pages/login/index— PASS_WITH_ISSUES
❌ 2 处硬编码字号 | ❌ 复选框 36px < 48px
---
### P8 创建预约pages/appointment/create/index
## §3.3 患者端子包功能(静态代码审查
**角色:** 患者
**结果:** PASS_WITH_ISSUES
### P12 健康趋势pages-sub/pkg-health/trend— PASS_WITH_ISSUES
✅ 全维度基本合规
**问题清单:**
- [ ] `index.scss:258` doctor-check height 44px → 可接受LOW
- [ ] `index.scss:63,267,348` 裸 CSS `white` 关键字 ×3 → 改 `$white`LOW
### P13 体征录入pages-sub/pkg-health/input— PASS_WITH_ISSUES
❌ 4 处硬编码字号 | ❌ 2 处 `color: #fff` | ❌ 无 Loading
### P14 日常监测pages-sub/pkg-health/daily-monitoring— PASS_WITH_ISSUES
❌ 6 处硬编码字号 | ❌ 4 处硬编码颜色 | ❌ 无 Loading
### P15 健康告警pages-sub/pkg-health/alerts— PASS_WITH_ISSUES
❌ 1 处字号 | ❌ 3 处颜色 | ❌ Tab 32px
### P16 积分兑换pages-sub/pkg-mall/exchange— PASS_WITH_ISSUES
❌ 3 处字号 | ❌ 5 处颜色 | ❌ 按钮 44px
### P17 兑换订单pages-sub/pkg-mall/orders— PASS_WITH_ISSUES
❌ 1 处字号 | ❌ 3 处颜色 | ❌ Tab 32px
### P18 商品详情pages-sub/pkg-mall/detail— PASS_WITH_ISSUES
❌ 3 处字号 | ❌ 5 处颜色 | ❌ Tab 32px
### P19 文章列表pages-sub/article/index— PASS_WITH_ISSUES
✅ 全维度合规
### P20 文章详情pages-sub/article/detail— PASS_WITH_ISSUES
✅ 全维度合规
### P21 线下活动pages-sub/events/index— PASS_WITH_ISSUES
❌ 2 处颜色 | ❌ 按钮触控不足
### P22 设备同步pages-sub/device-sync/index— PASS_WITH_ISSUES
❌ 2 处字号 | ❌ 4 处颜色
---
### P9 预约详情pages/appointment/detail/index
## §3.4 个人中心(静态代码审查
**角色:** 患者
**结果:** PASS
### P23 健康记录pkg-profile/health-records— PASS_WITH_ISSUES
✅ 字号/颜色/长者 | ⚠️ 用文字"加载中..."而非 Loading 组件
### P24 我的报告pkg-profile/reports— PASS_WITH_ISSUES
✅ 字号/颜色/长者 | ⚠️ 用文字"加载中..."而非 Loading 组件
### P25 我的随访pkg-profile/followups— PASS_WITH_ISSUES
✅ 全维度合规
### P26 就诊人管理pkg-profile/family— PASS_WITH_ISSUES
✅ 全维度合规
### P27 添加就诊人pkg-profile/family-add— PASS_WITH_ISSUES
✅ 全维度合规
### P28 用药记录pkg-profile/medication— PASS_WITH_ISSUES
✅ 全维度合规
### P29 诊断记录pkg-profile/diagnoses— PASS_WITH_ISSUES
✅ 字号/颜色/长者 | ⚠️ 有 loadMore 但无 scroll-view 触发
### P30 知情同意pkg-profile/consents— PASS_WITH_ISSUES
✅ 全维度合规
### P31 透析记录pkg-profile/dialysis-records— PASS_WITH_ISSUES
✅ 字号/长者 | ❌ 4 处硬编码颜色 `#1677ff/#722ed1/#d48806/#52c41a`
### P32 透析记录详情pkg-profile/dialysis-records/detail— PASS_WITH_ISSUES
✅ 字号/长者 | ❌ 2 处硬编码颜色 `#52c41a/#1677ff`
### P33 透析处方pkg-profile/dialysis-prescriptions— PASS_WITH_ISSUES
✅ 字号/长者 | ❌ 2 处硬编码颜色 `#52c41a/#ff4d4f`
### P34 处方详情pkg-profile/dialysis-prescriptions/detail— PASS_WITH_ISSUES
✅ 字号/长者 | ❌ 2 处硬编码颜色 `#52c41a/#ff4d4f`
### P35 长者模式pkg-profile/elder-mode— PASS_WITH_ISSUES
✅ 字号/颜色 | ⚠️ 开关控件 52x30px高度 30px < 48px
### P36 设置pkg-profile/settings— PASS_WITH_ISSUES
✅ 全维度合规
### P37 AI 分析列表ai-report/list— PASS_WITH_ISSUES
✅ 字号/长者 | ❌ 2 处硬编码颜色 `#52c41a/#ff4d4f`
### P38 AI 分析详情ai-report/detail— PASS_WITH_ISSUES
❌ 1 处字号 `11px` | ✅ 颜色/长者
### P39 化验报告详情report/detail— PASS_WITH_ISSUES
❌ 1 处字号 `11px` | ❌ 3 处颜色 `#fa541c/#1890ff/#52c41a`
### P40 随访详情followup/detail— PASS_WITH_ISSUES
❌ 4 处颜色 `#52c41a/#ff4d4f/#d48806/#fff` | ❌ 提交按钮 44px
---
### P10 积分商城pages/mall/index
## §3.6 透析管理-医护(静态代码审查
**角色:** 患者
**结果:** PASS
### P53 透析记录-医护doctor/dialysis/index— PASS_WITH_ISSUES
✅ 全维度合规(使用 getStatusInlineStyle 工具函数)
### P54 透析详情-医护doctor/dialysis/detail— PASS_WITH_ISSUES
✅ 全维度合规Loading + ErrorState + btn-primary mixin
### P55 新建透析doctor/dialysis/create— PASS_WITH_ISSUES
✅ 全维度合规(输入框 48px + btn-primary mixin
### P56 透析处方-医护doctor/prescription/index— PASS_WITH_ISSUES
✅ 全维度合规
### P57 处方详情-医护doctor/prescription/detail— PASS_WITH_ISSUES
✅ 全维度合规
### P58 新建处方doctor/prescription/create— PASS_WITH_ISSUES
✅ 全维度合规
## §3.7 法律页面(静态代码审查)
### P59 用户协议pages/legal/user-agreement— PASS_WITH_ISSUES
✅ 字号/颜色 | ❌ 未引入 useElderClass
### P60 隐私政策pages/legal/privacy-policy— PASS_WITH_ISSUES
✅ 字号/颜色 | ❌ 未引入 useElderClass
---
### P11 登录pages/login/index
## 全量问题清单
**角色:** 访客
**结果:** PASS
### HIGH6 项)
1. [ ] P46 随访管理JS 层硬编码 `fontSize: '24px'`,长者模式不生效
2. [ ] P46 随访管理JS 层 8 个硬编码 hex 颜色绕过变量体系
3. [ ] P45 咨询详情-医护:`loading` ref 存在但模板未使用,无 Loading UI
4. [ ] P02 健康数据:整页无 Loading 组件
5. [ ] P02 健康数据:`catch { /* ignore */ }` 完全静默
6. [ ] P48 告警中心JS 层 8 个硬编码 hex 颜色
### MEDIUM18 项)
7. [ ] 全局触控不足:约 30 个页面的可点击元素无 min-height ≥ 48px
8. [ ] P01 首页:`.action-icon` 36px 硬编码字号
9. [ ] P02 健康数据:`.vital-icon` 28px 硬编码字号
10. [ ] P13 体征录入4 处硬编码字号22/14/12/18px
11. [ ] P14 日常监测6 处硬编码字号22/11/12/14/18px
12. [ ] P16-P18 积分商城:共 7 处硬编码字号
13. [ ] P22 设备同步2 处硬编码字号 36px
14. [ ] P39 化验报告详情、P38 AI详情2 处 11px 硬编码
15. [ ] P46/P48 告警/随访JS 层内联颜色 ~16 处 hex
16. [ ] P51 化验详情-医护CSS 3 处 hex `#fa541c/#1890ff/#52c41a`
17. [ ] P31-P34 透析相关页面:~10 处状态颜色硬编码
18. [ ] P37-P40 AI/报告/随访详情:~9 处状态颜色硬编码
19. [ ] P08/P09 预约创建/详情:缺 Loading 组件
20. [ ] P02 健康数据:体征全空无引导录入 UI
21. [ ] P47 随访详情-医护CSS `color: #fff` 硬编码
22. [ ] P09 预约详情3 处硬编码颜色 + 取消按钮 44px
23. [ ] P15/P17/P18 Tab 触控padding 6px 16px 约 32px
24. [ ] P13/P14 体征录入/日常监测:无 Loading 组件
### LOW12 项)
25. [ ] ~12 个个人中心页面:用文字"加载中..."而非统一 Loading 组件
26. [ ] P59/P60 法律页面:未引入 useElderClass长者模式不生效
27. [ ] P41 工作台:错误静默处理
28. [ ] P35 长者模式设置:开关控件高度 30px < 48px
29. [ ] P03 消息catch 静默与空列表不可区分
30. [ ] P29 诊断记录:有 loadMore 但无 scroll-view 触发
31. [ ] P04 我的loadPatients 无 Loading
32. [ ] P07 预约列表/积分商城:列表项/商品不可点击
33. [ ] P11 登录2 处字号硬编码 + 复选框 36px
34. [ ] P40 随访详情:提交按钮 44px
35. [ ] P16 积分兑换:确认按钮 44px
36. [ ] P05 咨询列表等 8 页:未显式集成 useElderClass字号通过 CSS 变量可被动级联,但结构性覆写不生效)
---
## §3.3 患者端子包功能P1
## MCP 测试限制
### P12 健康趋势pages/pkg-health/trend/index
| 限制 | 说明 |
|------|------|
| 分包页面不可达 | MCP navigateTo 对 pages-sub/ 下所有页面超时 |
| 截图频繁超时 | 仅首页截图成功,其他页面均超时 |
| 访客态无法模拟 | 清除 storage 后 zustand 内存状态未同步 |
**角色:** 患者
**结果:** PASS_WITH_ISSUES
## 整体评价
**问题清单:**
- [ ] `index.scss:68` 裸 CSS `white` 关键字LOW
**60 个页面全部可用,无阻断性问题。** 1 个页面P46 随访管理)因 JS 层硬编码字号+颜色被标记为 NEEDS_WORK其余 59 个均为 PASS_WITH_ISSUES。
---
**质量较好的方面:**
- 字号 Token 体系整体遵循率高(~90% 页面完全合规)
- 颜色变量体系在 CSS 层遵循率高(硬编码主要出现在 JS 层内联样式中)
- 空态/加载态/错误态三态覆盖完整(除 2-3 个页面缺失)
- 医护端页面质量明显高于患者端(统一使用 Loading/ErrorState/getStatusInlineStyle
### P13 体征录入pages/pkg-health/input/index
**角色:** 患者
**结果:** PASS_WITH_ISSUES
**问题清单:**
- [ ] 缺少 Loading 组件 — `getHealthThresholds()` 异步加载阈值无 loadingLOW
- [ ] `index.scss:229` 裸 CSS `white` 关键字LOW
---
### P14 日常监测pages/pkg-health/daily-monitoring/index
**角色:** 患者
**结果:** PASS_WITH_ISSUES
**问题清单:**
- [ ] `index.scss:273` 裸 CSS `white` 关键字LOW
---
### P15 健康告警pages/pkg-health/alerts/index
**角色:** 患者
**结果:** PASS
---
### P16 积分兑换pages/pkg-mall/exchange/index
**角色:** 患者
**结果:** PASS_WITH_ISSUES
**问题清单:**
- [ ] `index.scss:199` 裸 CSS `white` 关键字LOW
---
### P17 兑换订单pages/pkg-mall/orders/index
**角色:** 患者
**结果:** PASS
---
### P18 商品详情pages/pkg-mall/detail/index
**角色:** 患者
**结果:** PASS
---
### P19 文章列表pages/article/index
**角色:** 访客 / 患者
**结果:** PASS
---
### P20 文章详情pages/article/detail/index
**角色:** 访客 / 患者
**结果:** PASS
---
### P21 线下活动pages/events/index
**角色:** 患者
**结果:** PASS
---
### P22 设备同步pages/device-sync/index
**角色:** 患者
**结果:** PASS
---
## §3.4 个人中心子页面P1
### P23 健康记录pages/pkg-profile/health-records/index
**结果:** PASS
---
### P24 我的报告pages/pkg-profile/reports/index
**结果:** PASS
---
### P25 我的随访pages/pkg-profile/followups/index
**结果:** PASS
---
### P26 就诊人管理pages/pkg-profile/family/index
**结果:** PASS
---
### P27 添加就诊人pages/pkg-profile/family-add/index
**结果:** PASS_WITH_ISSUES
**问题清单:**
- [ ] 缺少 Loading — 提交时 `submitting` 仅控制按钮,无全页面 loading 覆盖LOW
---
### P28 用药记录pages/pkg-profile/medication/index
**结果:** PASS_WITH_ISSUES
**问题清单:**
- [ ] `index.scss:110` medication item height 40px → 建议 48pxLOW
---
### P29 诊断记录pages/pkg-profile/diagnoses/index
**结果:** PASS
---
### P30 知情同意pages/pkg-profile/consents/index
**结果:** PASS
---
### P31 透析记录pages/pkg-profile/dialysis-records/index
**结果:** PASS
---
### P32 透析记录详情pages/pkg-profile/dialysis-records/detail/index
**结果:** PASS
---
### P33 透析处方pages/pkg-profile/dialysis-prescriptions/index
**结果:** PASS
---
### P34 处方详情pages/pkg-profile/dialysis-prescriptions/detail/index
**结果:** PASS
---
### P35 长者模式pages/pkg-profile/elder-mode/index
**结果:** PASS
---
### P36 设置pages/pkg-profile/settings/index
**结果:** PASS
---
### P37 AI 分析列表pages/ai-report/list/index
**结果:** PASS
---
### P38 AI 分析详情pages/ai-report/detail/index
**结果:** PASS
---
### P39 化验报告详情pages/report/detail/index
**结果:** PASS
---
### P40 随访详情pages/followup/detail/index
**结果:** PASS
---
## §3.6 透析管理 + 法律P2
### P53 透析记录-医护pages/doctor/dialysis/index
**结果:** PASS
---
### P54 透析详情-医护pages/doctor/dialysis/detail/index
**结果:** PASS
---
### P55 新建透析pages/doctor/dialysis/create/index
**结果:** PASS
---
### P56 透析处方-医护pages/doctor/prescription/index
**结果:** PASS
---
### P57 处方详情-医护pages/doctor/prescription/detail/index
**结果:** PASS
---
### P58 新建处方pages/doctor/prescription/create/index
**结果:** PASS_WITH_ISSUES
**问题清单:**
- [ ] `index.scss:63` 裸 CSS `white` 关键字 → 改 `$white`LOW
---
### P59 用户协议pages/legal/user-agreement
**结果:** PASS
---
### P60 隐私政策pages/legal/privacy-policy
**结果:** PASS
---
## 跨页面公共问题
### 问题 1: statusTag.ts 硬编码样式MEDIUM
**文件:** `apps/miniprogram/src/utils/statusTag.ts`
**影响页面:** P44 咨询管理、P46 随访管理、P52 待办事项
```ts
// 问题代码
const COLORS = {
pri: '#C4623A', priLight: '#F0DDD4',
acc: '#5B7A5E', accLight: '#E8F0E8',
...
};
borderRadius: '6px', padding: '2px 8px', fontSize: '24px'
```
**建议:** 提取为 `.status-tag` CSS 类,颜色通过 CSS 自定义属性注入。
### 问题 2: 裸 CSS `white` 关键字LOW ×8
**影响文件:** appointment/create、pkg-health/trend、pkg-health/input、pkg-health/daily-monitoring、pkg-mall/exchange、doctor/prescription/create
**建议:** 全部替换为 `$white` SCSS 变量。
### 问题 3: 触控区域不足 48pxMEDIUM ×3 + LOW ×4
**关键问题40px Tab/按钮):**
- `health/index.scss:32` — vital-tab
- `messages/index.scss:35` — segment-tab
- `consultation/detail/index.scss:192,203` — 输入栏按钮
**次要问题44px接近阈值:**
- `index/index.scss:44` — greeting-bell
- `health/index.scss:277` — device-icon
- `messages/index.scss:123` — consult-avatar
- `appointment/create/index.scss:258` — doctor-check
### 问题 4: 缺少 Loading 指示LOW ×3
- `pkg-health/input/index.tsx` — getHealthThresholds 异步无 loading
- `profile/index.tsx` — refreshPoints 异步,积分先显示 0
- `pkg-profile/family-add/index.tsx` — 提交仅按钮状态,无覆盖层
### 问题 5: 首页渐变硬编码LOW ×4
- `index/index.scss:343,358`#3D5A40 → 应定义 `$acc-d`
- `index/index.scss:346,362`#8B6F4E → 应定义 `$wrn-d`
- 注意 343/358 和 346/362 是重复声明,可合并
---
## 合规度总结
| 检查维度 | 合规率 | 说明 |
|----------|--------|------|
| 字号 Token | **100%** (0/58 违规) | 全部使用 `var(--tk-font-*)` |
| 圆角变量 | **100%** (0/57 违规) | 全部使用 SCSS 变量 |
| 颜色变量 | **98.2%** (12/57 文件有小问题) | 4 hex + 8 bare white |
| 长者模式 | **100%** (58/58) | 全部页面支持 |
| Loading 组件 | **86.2%** (50/58) | 3 个页面缺少5 个无需 |
| 空态处理 | **100%** (39/39 需要的页面) | 列表页均有空态 |
| 访客守卫 | **100%** (5/5 TabBar 页面) | 全部正确处理 |
| 触控 ≥48px | **81%** (7 处低于 48px) | 3 处 40px Tab + 4 处 44px |
| 内联 style | **96.6%** (2 处动态计算合法) | statusTag.ts 需重构 |
**综合评分: 95/100 — 设计体系遵循度优秀**
MEDIUM 问题均为触控区域和 statusTag 工具函数不影响功能使用。LOW 问题为变量命名规范,可在后续迭代中统一修复。
**需人工补充验证的场景MCP 不可用):**
- [ ] 下拉刷新动画流畅性
- [ ] 列表无限滚动加载
- [ ] 长者模式切换后字号变化
- [ ] 分包页面首次加载 loading
- [ ] 医护端各角色权限视图差异
**主要改进方向:**
- 触控区域:全局需为 ~30 个页面的可点击元素补充 min-height
- 状态颜色:~45 处硬编码 hex 需提取为语义变量或统一使用工具函数
- 加载组件:~12 个页面需从文字"加载中..."升级为统一 Loading 组件
- 长者模式2 个法律页面 + 8 个未集成 useElderClass 的页面需补充