T40 UI 审计修复(60 页面全覆盖): - 新增 $acc-d/$wrn-d 渐变中间色变量,修复首页轮播渐变硬编码 - 替换 8 处裸 white 为 $white 设计变量(5 个 SCSS 文件) - 修复 7 处触摸目标 40/44px → 48px(健康/消息/咨询/预约/首页) - 3 页面新增 Loading 状态(体征录入/个人中心/就诊人添加) - statusTag 移除硬编码布局值,改用 SCSS mixin 控制 - 医生端 14 页面架构 Hook 层补充(useThrottledDidShow 替换 useEffect) - 移除 action-inbox 未使用 import 安全 P0 修复: - JWT 中间件加固:token 类型校验 + 过期预检 + 类型别名简化 - 速率限制增强:滑动窗口 + 暴力破解防护 - analytics handler 错误处理完善 文档: - T40 审计报告(24 PASS / 36 PASS_WITH_ISSUES / 0 NEEDS_WORK) - 5 份 DevTools/性能审计讨论记录 - wiki 症状导航 + 小程序章节更新
98 lines
4.7 KiB
Markdown
98 lines
4.7 KiB
Markdown
# UniApp 小程序调试记录
|
||
|
||
> 日期: 2026-05-14 | 分支: feat/media-library-banner
|
||
|
||
## 已解决的问题
|
||
|
||
### 1. crypto-js 导致 DevTools 卡死 (CRITICAL)
|
||
|
||
**现象:** 微信开发者工具打开 uni-app 项目后,所有页面导航(`navigateTo`/`switchTab`/`reLaunch`)均报错 `The "fd" argument must be of type number. Received undefined`,DevTools 完全无响应。
|
||
|
||
**根因:** `crypto-js` 包在初始化时尝试通过 `commonjsRequire` 加载 Node.js 的 `crypto` 模块(vendor.js 第 8113-8115 行)。微信 DevTools 运行在 Node.js 环境中,`require("crypto")` 被执行但 `crypto` 模块期望 `fd`(文件描述符)为数字,而 DevTools 环境不提供有效的 fd,导致整个 JS 运行时崩溃。
|
||
|
||
**修复:** 移除 `crypto-js` 依赖,`utils/secure-storage.ts` 改为直接明文存储(因为 `VITE_ENCRYPTION_KEY` 未配置时加密本来就不生效)。敏感数据通过 HTTPS + 后端加密保护。
|
||
|
||
**影响文件:**
|
||
- `src/utils/secure-storage.ts` — 移除 crypto-js 引用
|
||
- `package.json` — 移除 crypto-js 依赖
|
||
- `vendor.js` — 从 10086 行降至 8070 行
|
||
|
||
**Taro 版本影响:** 已确认 Taro 版本存在完全相同的问题(`src/utils/secure-storage.ts` 同样引用 crypto-js)。已于 2026-05-14 同步修复:移除 crypto-js 依赖,改写为明文存储降级。编译产物验证无 crypto-js 残留。
|
||
|
||
### 2. 401 无限循环风险 (HIGH)
|
||
|
||
**现象:** `request.ts` 中 401 处理程序重试请求时没有最大重试次数限制,可能导致 `401 → refresh → retry → 401 → ...` 无限循环。
|
||
|
||
**修复:** 添加 `retryCount401` 计数器和 `MAX_401_RETRY = 1` 限制。
|
||
|
||
### 3. 登录后 redirectTo 子包页面 (HIGH)
|
||
|
||
**现象:** `login/index.vue` 中医生角色登录后用 `redirectTo` 导航到子包页面 `/pages-sub/doctor/index`,可能不可靠。
|
||
|
||
**修复:** 改为 `reLaunch`。
|
||
|
||
### 4. Profile 页面 loadPatients 时序问题 (MEDIUM)
|
||
|
||
**现象:** `onMounted` 中调用 `loadPatients()`,但此时 `authStore.user` 可能还没通过 `onShow` 的 `restore()` 恢复。
|
||
|
||
**修复:** 将 `loadPatients()` 移到 `onShow` 回调中,在 `restore()` 之后执行。
|
||
|
||
### 5. automationAudits 配置缺失
|
||
|
||
**现象:** uni-app 的 `manifest.json` 中缺少 `automationAudits: true`,导致 MCP 连接时 DevTools 的自动化端口不开启。
|
||
|
||
**修复:** 在 `manifest.json` 的 `mp-weixin.setting` 中添加 `"automationAudits": true`。
|
||
|
||
## 待解决的问题
|
||
|
||
### 6. reLaunch 后 navigateTo 失败 (INVESTIGATING)
|
||
|
||
**现象:** `wx.reLaunch({ url: '/pages/index/index' })` 成功后,`wx.navigateTo` 到子包页面报 `timeout`。MCP 的 `navigate` 工具有时超时但页面实际已加载。
|
||
|
||
**可能原因:**
|
||
- uni-app 的 `navigateTo` 在 tabBar 页面上有特殊行为
|
||
- 子包首次加载耗时较长(automator 超时 vs 实际加载中)
|
||
- uni-app 运行时的 navigateTo 封装添加了额外异步开销
|
||
|
||
**状态:** 需要进一步调查。MCP navigate 超时后页面可能仍在后台加载成功。
|
||
|
||
## Taro 版本同步修复
|
||
|
||
> 2026-05-14 下午 — 同步修复 Taro 版本(主项目)
|
||
|
||
### 7. Taro login 页面 redirectTo 子包 (HIGH)
|
||
|
||
**现象:** `apps/miniprogram/src/pages/login/index.tsx` 第 19 行使用 `Taro.redirectTo({ url: '/pages/doctor/index' })`,与 uni-app 相同问题。
|
||
|
||
**修复:** 改为 `Taro.reLaunch`。
|
||
|
||
### 8. Taro request.ts 401 无限重试 (HIGH)
|
||
|
||
**现象:** `apps/miniprogram/src/services/request.ts` 中 401 处理递归调用 `request()` 无最大重试次数限制。
|
||
|
||
**修复:** 添加 `retryCount401` 计数器和 `MAX_401_RETRY = 1` 限制,与 uni-app 修复一致。
|
||
|
||
### 9. Taro navigateTo:fail timeout (INVESTIGATING)
|
||
|
||
**现象:** 用户报告 DevTools 控制台显示 `navigateTo:fail timeout`、`SharedArrayBuffer` 警告、`<scroll-view> padding` 警告。
|
||
|
||
**分析:**
|
||
- 编译产物已确认无 crypto-js 残留(grep 验证通过)
|
||
- Taro auth restore 已在 App 层处理(`useEffect` + `useDidShow`),无时序问题
|
||
- `navigateTo:fail timeout` 可能是旧构建残留错误或 DevTools 本身性能问题
|
||
- 已完成编译(Webpack: Compiled successfully in 10.30s),修复已包含在产物中
|
||
|
||
**状态:** 需要用新编译产物重新打开 DevTools 验证。
|
||
|
||
## MCP 连接配置
|
||
|
||
**关键配置:** `.mcp.json` 中 `WEAPP_PROJECT_PATH` 指向 `dist/dev/mp-weixin`(dev 编译输出)。
|
||
|
||
**启动流程:**
|
||
1. 运行 `npx uni -p mp-weixin` 启动 dev 编译
|
||
2. 等待编译完成(约 20 秒)
|
||
3. `"D:/微信web开发者工具/cli.bat" auto --project "G:/hms/apps/miniprogram-uniapp/dist/dev/mp-weixin" --auto-port 9420`
|
||
4. MCP `connect` 连接
|
||
|
||
**注意:** 必须先关闭所有 DevTools 实例再启动,否则会打开错误的项目。
|