7.9 KiB
7.9 KiB
踩坑速查与迁移经验
经 User 确认后录入的实践经验。AI 发现新踩坑点时先提出建议,User 确认后再录入。 按类别组织,每条记录包含:场景、问题、解决方案、影响页面。
WXML 模板
禁止在 {{}} 中调用 JS 方法
- 场景:WXML 模板中使用
.toFixed()、.map()等 - 问题:小程序模板不支持 JS 方法调用
- 方案:用 WXS 模块
utils/format.wxs - 影响:所有页面
TabBar 页面跳转必须用 wx.switchTab
- 场景:从非 tabBar 页面跳转到 task-list、board-finance、my-profile
- 问题:
navigateTo会静默失败 - 方案:tabBar 页面一律用
wx.switchTab - 影响:所有涉及 tabBar 跳转的页面
样式与布局
一屏页面用 height: 100vh 而非 min-height
- 场景:login、reviewing、no-permission 等单屏页面
- 问题:
min-height: 100vh在某些情况下不生效 - 方案:
height: 100vh+box-sizing: border-box - 影响:login, reviewing, no-permission
状态栏适配禁止用 env(safe-area-inset-top)
- 场景:自定义 navBar 页面的顶部 padding
- 问题:小程序不支持
env()CSS 函数 - 方案:JS
wx.getSystemInfoSync().statusBarHeight动态设置 - 影响:所有自定义 navBar 页面
padding-top + 100vh 必须配合 box-sizing: border-box
- 场景:有顶部 padding 的全屏页面
- 问题:不加 box-sizing 会导致底部内容溢出
- 方案:始终添加
box-sizing: border-box - 影响:所有全屏页面
TDesign 组件
t-button icon 只支持内置图标
- 场景:按钮中使用品牌图标(微信 logo 等)
- 问题:
icon属性只接受 TDesign 内置图标名 - 方案:用
<view>+<image>组合替代 - 影响:login 页面微信登录按钮
TDesign 默认样式优先级高
- 场景:需要大幅覆盖 TDesign 组件样式
- 问题:CSS 变量和外部样式类不够用时,
!important也可能不生效 - 方案:直接用原生
<view>实现,绕开样式干扰 - 影响:视具体组件
资源引用
所有 H5 内联 SVG 必须导出为独立文件
- 场景:H5 中直接写在 HTML 内的
<svg>元素 - 问题:小程序不支持内联 SVG
- 方案:导出为
.svg文件存放assets/icons/,用<image>引用 - 影响:所有含内联 SVG 的页面
引用不存在的图片会 500 错误
- 场景:WXML 中
<image src>指向不存在的文件 - 问题:不是 404 而是 500 错误,难以排查
- 方案:用 CSS 渐变、emoji、
<t-icon>替代;或确保文件存在 - 影响:所有页面
截图与对比
rpx 取整导致累积高度偏移
- 场景:多屏长页面的中间屏截图对比
- 问题:MP 页面总高度比 H5 短 ~10%,中间屏内容窗口错位
- 方案:使用锚点对齐法(按元素位置对齐而非 scrollTop 数值)
- 影响:board-finance, performance 等长页面
- 发现日期:2026-03-10
AI 浮动按钮动画造成随机差异
- 场景:截图时 ai-float-button 的 gradientShift 动画处于不同帧
- 问题:每次截图差异 ~1%
- 方案:双端截图前隐藏(H5 用 JS,MP 用
wx:if="{{false}}") - 影响:所有含 ai-float-button 的页面
- 发现日期:2026-03-10
禁止跨维度套用布局假设,H5 原型是唯一视觉真相
- 场景:board-customer "最专一"卡片的
.loyal-table布局 - 问题:其他维度(最应召回等)的
card-mid-row/card-assistant-row有ml-11(80rpx 对齐头像右侧),开发时"合理推断"表格也应该加margin-left: 80rpx。但 H5 原型中表格容器没有ml-11,是从卡片 padding 开始的(left=16px)。Playwright 实测才发现偏差 - 方案:每个维度的每个组件都必须回到 H5 HTML 逐一确认 Tailwind 类,禁止从其他维度"类推"。不确定时用 Playwright
getBoundingClientRect()实测 H5 元素位置 - 影响:所有多维度页面(board-customer 8 维度、board-coach 4 维度)
- 发现日期:2026-03-12
H5 与 MP mock 数据不同,像素级 diff 需结合结构比对
- 场景:用 PIL/numpy 或 image-compare 对比 H5 和 MP 截图
- 问题:H5 原型使用硬编码 mock 数据(如孙先生/王先生/李女士),MP 使用后端返回的测试数据(王先生/李女士/张先生),文字内容不同导致像素 diff 高达 11%,18 个分段覆盖全页面,无法区分"数据差异"和"样式差异"
- 方案:像素级 diff 仅用于发现大面积结构偏移(窗口错位、整块缺失)。样式还原度验证的主要方法是 Tailwind 类→rpx 值逐项比对表,逐一确认每个 CSS 属性的换算结果
- 影响:所有页面的截图对比流程
- 发现日期:2026-03-12
Tailwind→WXSS 映射必须逐项建表验证
- 场景:将 H5 Tailwind 类翻译为小程序 WXSS
- 问题:凭记忆或经验直接写 WXSS 值容易出错——
font-medium是 500 不是 600,gap-1是 4px 不是 2px,space-y-2是 8px 不是 4px。错误在视觉上不明显但会累积 - 方案:对每个组件建立完整的对照表(H5 Tailwind 类 → 计算值 px → rpx 换算 → MP WXSS 值),逐行核对。参考速查表:
2→4, 4→8, 6→10, 8→14, 10→18, 12→22, 14→24, 16→28, 20→36, 24→42 - 影响:所有页面的 WXSS 编写
- 发现日期:2026-03-12
相邻元素间距叠加导致高度翻倍
- 场景:经营一览的
.overview-grid-2底部 padding 32rpx +.ai-insight-sectionmargin-top 32rpx,间距翻倍为 64rpx - 问题:H5 中 grid 无 margin-bottom,间距完全由下方元素的
mt-4(16px) 提供。MP 中两端都加了间距,导致块间距翻倍、整体高度偏高 - 方案:校对间距时必须确认「这段间距是谁提供的」——上方元素的 padding-bottom 还是下方元素的 margin-top。用 Playwright
getComputedStyle实测 H5 两个相邻元素的 margin/padding,确认间距归属后只在一端设置 - 影响:所有包含多个子区块的板块(经营一览、预收资产等)
- 发现日期:2026-03-12
用 Playwright 实测 H5 比手动解析 Tailwind 更可靠
- 场景:H5 原型文件是单行 minified HTML,手动读取 Tailwind 类名容易遗漏或误判
- 问题:Tailwind 类名组合后的实际渲染值不直观(如
p-4在嵌套容器中可能被覆盖,space-y-2的实际 gap 取决于子元素数量),手动推算容易出错 - 方案:通过
browser_run_code创建 375×812 viewport + DPR 1.5 的 context,用getComputedStyle+getBoundingClientRect直接拿到渲染后的实际 px 值,再按换算规则转 rpx。这个方法应作为所有页面校对的标准流程 - 影响:所有页面的 WXSS 校对流程
- 发现日期:2026-03-12
Tailwind 字号类自带 line-height,WXSS 必须同步补齐
-
场景:校对经营一览的现金流水概览 4 个块,H5 明显比 MP 高
-
问题:Tailwind 的
text-xs/text-sm/text-lg/text-xl等字号类捆绑了特定的line-height(如text-lg=font-size: 18px; line-height: 28px),但 WXSS 只写了font-size没写line-height,小程序默认行高约 1.2,远小于 Tailwind 的行高,导致每行文字占据的垂直空间不足,块整体矮了一截 -
方案:每个 Tailwind 字号类转 WXSS 时,必须同时写
font-size和line-height。完整对照表(87.5% 缩放):Tailwind font-size (px) line-height (px) WXSS font-size WXSS line-height text-xs12 16 22rpx 28rpx text-sm14 20 24rpx 34rpx text-base16 24 28rpx 42rpx text-lg18 28 32rpx 48rpx text-xl20 28 36rpx 48rpx text-2xl24 32 42rpx 56rpx -
影响:所有页面的所有文字元素
-
发现日期:2026-03-12
新增经验请按以上格式录入,包含:场景、问题、解决方案、影响页面、发现日期(可选)。