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 症状导航 + 小程序章节更新
4.7 KiB
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 编译输出)。
启动流程:
- 运行
npx uni -p mp-weixin启动 dev 编译 - 等待编译完成(约 20 秒)
"D:/微信web开发者工具/cli.bat" auto --project "G:/hms/apps/miniprogram-uniapp/dist/dev/mp-weixin" --auto-port 9420- MCP
connect连接
注意: 必须先关闭所有 DevTools 实例再启动,否则会打开错误的项目。