docs: T40 UI 审计报告 + wiki 更新 + Docker 配置

- T40 UI 审计计划和结果文档(docs/qa/)
- wiki 更新:miniprogram 设计系统合规审计记录 + index 关键数字更新
- 审计 V2 完整报告(docs/audits/v2/)
- 讨论记录文档(docs/discussions/)
- 设计规格和实施计划(docs/superpowers/)
- 角色测试计划和结果(docs/qa/role-test-*)
- Docker 生产部署配置
This commit is contained in:
iven
2026-05-13 23:29:42 +08:00
parent 212c08b7ae
commit df1d85bfde
78 changed files with 10345 additions and 39 deletions

View File

@@ -1,6 +1,6 @@
---
title: 微信小程序(患者端)
updated: 2026-05-08
updated: 2026-05-10
status: active
tags: [miniprogram, taro, wechat, patient]
---
@@ -308,6 +308,10 @@ POST /auth/wechat/login { code }
| 调用 → | [[erp-server]] | `POST /auth/wechat/bind-phone` | 手机号绑定 |
| 调用 → | [[erp-health]] | `/api/v1/health/*` | 健康数据查询 |
| 调用 → | [[erp-server]] | `/api/v1/auth/refresh` | Token 刷新 |
| 调用 → | [[erp-health]] | `GET /public/banners` | 访客首页轮播图(无需认证) |
| 调用 → | [[erp-health]] | `GET /public/banner-image/{id}` | 轮播图图片下载(`wx.downloadFile`,无需认证) |
| 调用 → | [[erp-health]] | `GET /public/articles` | 访客首页文章列表(无需认证) |
| 调用 → | [[erp-health]] | `GET /public/articles/{id}` | 访客文章详情(无需认证) |
## 3. 代码逻辑
@@ -320,6 +324,7 @@ defineConstants: {
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development'),
'process.env.TARO_APP_API_URL': JSON.stringify(process.env.TARO_APP_API_URL || 'http://localhost:3000/api/v1'),
'process.env.TARO_APP_ENCRYPTION_KEY': JSON.stringify(process.env.TARO_APP_ENCRYPTION_KEY || ''),
'process.env.TARO_APP_DEFAULT_TENANT_ID': JSON.stringify(process.env.TARO_APP_DEFAULT_TENANT_ID || ''),
},
```
@@ -444,6 +449,7 @@ secret = "<通过环境变量 ERP__WECHAT__SECRET 设置>"
```bash
cd apps/miniprogram
echo 'TARO_APP_API_URL=http://localhost:3000/api/v1
TARO_APP_DEFAULT_TENANT_ID=019d80da-7a2c-7820-b0a3-3d5266a3a324
TARO_APP_ENCRYPTION_KEY=' > .env
NODE_ENV=development npx taro build --type weapp
```
@@ -591,6 +597,37 @@ curl -X POST http://localhost:3000/api/v1/auth/login \
| **require() 在 evaluate 不可用** | webpack 用数字 ID 注册模块 | 直接用 `wx.setStorageSync` / `wx.getStorageSync` |
| **auth 重定向** | request interceptor 检测 401 后跳转 login 并清空 storage | 确保 token 有效reLaunch 后等待 2-3 秒 |
| **生产构建 decrypt 抛异常** | 空密钥 + `NODE_ENV=production` 时 `decrypt()` 直接 throw | 使用 `NODE_ENV=development` 构建 |
| **DevTools 频繁卡死** | Electron 多进程累积文件描述符泄漏14+ 进程 3.5GB+ 内存 | 见下方 §6.9 DevTools 性能优化 |
### 6.9 DevTools 性能优化
微信开发者工具基于 Electron多进程架构主进程 + 渲染进程 + GPU + 插件)在长时间运行后会出现 `EMFILE: too many open files` 导致卡死。
**常见触发场景:**
- 频繁 MCP 调用evaluate/reLaunch导致 fd 累积
- Taro 热重载文件监视器与 DevTools 自带监视器重叠
- 长时间(>2 小时)不重启 DevTools
**优化措施:**
```powershell
# 1. 定期清理 DevTools 进程(推荐每 30 分钟或卡顿时执行)
taskkill /F /IM wechatdevtools.exe
# 然后重新打开项目
# 2. 检查进程资源占用
Get-Process wechatdevtools | Measure-Object WorkingSet64 -Sum | Select Count, @{N='MB';E={[math]::Round($_.Sum/1MB)}}
# 正常:< 1500MB | 需要重启:> 3000MB
# 3. 关闭不必要的 DevTools 功能
# 设置 → 编辑器设置 → 取消勾选「文件保存时自动编译」
# 设置 → 代理 → 关闭(不用代理时)
```
**MCP 联调最佳实践:**
- 每轮 MCP 测试结束后 `disconnect` 断开连接
- 批量测试分批执行,每批 ≤ 10 页后重启 DevTools
- 避免在 DevTools 编辑器中同时打开多个文件
### 6.7 MCP 服务器架构
@@ -655,6 +692,40 @@ node scripts/audit-pages.mjs --role doctor --batch-size 8
### 6.9 审计结果
#### 2026-05-13 T40 UI 设计系统合规审计60 页面)
基于 `docs/qa/T40-miniprogram-ui-audit-plan.md` 对全部 60 个页面进行设计系统合规审计,覆盖 Design Token、SCSS 变量、色彩/圆角/字号/组件规范。
**审计结果汇总:**
| 级别 | 页面数 | 占比 |
|------|--------|------|
| PASS | 31 | 52% |
| PASS_WITH_ISSUES | 27 | 45% |
| NEEDS_WORK | 2 | 3% |
**发现并修复的问题(全部已修复):**
| 类别 | 数量 | 修复内容 |
|------|------|----------|
| HIGH | 2 | 趋势页缺 Loading/EmptyState文章列表缺 mixins 导入 |
| MEDIUM | 6 | 硬编码字号(72px→`--tk-font-display`)ErrorState 图标字号AI报告离调色板颜色(#7c3aed/#f0e6ff→`$pri`/`$pri-l`);医生患者列表 inline style咨询页 GuestGuard 统一3处 TSX inline 颜色提取为 SCSS 类 |
| LOW — `#fff` 统一 | 44 | 新增 `$white` 变量,所有 `color: #fff` → `$white``background: #fff` → `$card` |
| LOW — 圆角统一 | 14 | `8px` → `$r-xs`7文件`20px` → `$r-lg`2文件`16px` → `$r`1文件 |
| LOW — 静默 catch | 2 | article/health 的空 catch 块添加状态清理 |
| LOW — ErrorBoundary 重构 | 1 | 6 个 inline style 硬编码提取为 SCSS 类 + Design Token |
| LOW — 离调色板颜色 | 2 | `#0284C7`(冷蓝) → `$tx2``#94A3B8`(冷灰) → `$tx3` |
| LOW — `#FFFFFF` 统一 | 4 | index/exchange/mixins/variables 中 `#FFFFFF` → `$white` |
**设计系统新增:**
- `variables.scss`: 新增 `$white: #FFFFFF` 语义变量
- `tokens.scss`: 新增 `--tk-font-display` Token72px/80px大数字装饰用
- `ErrorBoundary`: 新增 SCSS 文件,从 inline style 迁移到设计系统
**影响文件:** 25 个 SCSS + 10 个 TSX + 1 个新增 SCSS + 2 个样式系统文件
报告文件:`docs/qa/role-test-results/T40-ui-audit-results.md`
#### 2026-05-08 多角色自动化审计59 页面 × 4 角色)
使用分批审计脚本对全部 59 个页面进行 4 角色全面审计236 次页面探测):
@@ -692,7 +763,9 @@ node scripts/audit-pages.mjs --role doctor --batch-size 8
| 日期 | 变更 |
|------|------|
| 2026-05-09 | **Design Token 全面接入**68 SCSS 文件59 页面 + 9 组件)全面迁移 `font-size: Npx` → `var(--tk-*)`;重写 `tokens.scss` 校准 10 级字号 + 4 结构 token 匹配实际设计值;更新 `mixins.scss` 4 个 mixin 引用 token清理 12 个页面的本地 mixin 重复定义;`elder-mode.scss` 从 530 行缩减至 ~120 行(删除所有字号/颜色覆写仅保留结构布局634 token 引用 / 3 个特殊硬编码;新增 §1.1 Design Token 系统文档 |
| 2026-05-13 | **T40 UI 设计系统合规审计+修复**60 页面全覆盖审计PASS 31 / PASS_WITH_ISSUES 27 / NEEDS_WORK 2修复 HIGH×2 + MEDIUM×6 + LOW×67新增 `$white` 变量 + `--tk-font-display` Token44 处 `#fff` 统一为 `$white`14 处圆角硬编码统一为变量3 处 TSX inline 颜色提取为 SCSS 类ErrorBoundary 重构为 SCSS2 处静默 catch 修复2 处离调色板颜色修正 |
| 2026-05-10 | **访客首页改造**:轮播图接入 `/public/banners` API + `wx.downloadFile` 下载图片到本地临时路径;文章列表接入 `/public/articles` API文章详情页根据登录状态选择认证/公开 API`getPublicArticleDetail``.env` 新增 `TARO_APP_DEFAULT_TENANT_ID`;集成契约新增 4 个公开端点 |
| 2026-05-09 | **Design Token 全面接入**68 SCSS 文件全面迁移 `font-size: Npx` → `var(--tk-*)`634 token 引用 / 3 个特殊硬编码;新增 §1.1 Design Token 系统文档 |
| 2026-05-08 | **多角色自动化审计**4 角色admin/doctor/nurse/operator× 59 页面 = 236 次探测,综合通过率 96.2%;更新 §2 页面结构为 59 页面完整列表(含医生端 dialysis/prescription/action-inbox + 患者端 dialysis-records/prescriptions/consents/health-records/diagnoses更新 §5 审计发现(透析/知情同意/诊断/健康记录标记为已修复);更新 §6.5 TabBar 为 3 个;新增 §6.8 分批审计脚本;更新 §6.9 多角色审计结果 |
| 2026-05-08 | **MCP 联调全面重写**:自建 MCP 服务器 `@hms/weapp-mcp` 替代 `@yfme/weapp-dev-mcp`;基于 `@weapp-vite/miniprogram-automator@1.1.0`;新增 §6.2 启动步骤(登录+单实例铁律);更新工具列表为 weapp-local 25 个工具;新增 inject_auth 一键注入;新增 §6.7 MCP 服务器架构说明多实例冲突、CLI 登录、SummerCompiler 等已知限制 |
| 2026-05-01 | 审计发现更新CRITICAL 晚间血压丢失 / HIGH 透析+知情同意完全空白 / 功能域完成度矩阵 |