Files
hms/docs/discussions/2026-05-14-uniapp-debugging.md
iven 8f353946e1 fix(mp): T40 UI 审计修复 — 28 项设计系统合规 + 安全加固 + 讨论记录
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 症状导航 + 小程序章节更新
2026-05-14 23:12:54 +08:00

4.7 KiB
Raw Blame History

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 undefinedDevTools 完全无响应。

根因: 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 可能还没通过 onShowrestore() 恢复。

修复:loadPatients() 移到 onShow 回调中,在 restore() 之后执行。

5. automationAudits 配置缺失

现象: uni-app 的 manifest.json 中缺少 automationAudits: true,导致 MCP 连接时 DevTools 的自动化端口不开启。

修复:manifest.jsonmp-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 timeoutSharedArrayBuffer 警告、<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.jsonWEAPP_PROJECT_PATH 指向 dist/dev/mp-weixindev 编译输出)。

启动流程:

  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 实例再启动,否则会打开错误的项目。