# H5 → 微信小程序批量迁移执行手册 > 本手册是 SPEC 执行的唯一权威文档,整合了原 `apps/miniprogram/doc/` 下全部迁移文档。 > 目标:将 `docs/h5_ui/pages/` 下 17 个 HTML 原型页面迁移为原生微信小程序页面。 > 创建日期:2026-03-08 > 原始文档来源:migration-guide.md、migration-method-full-path.md、h5-to-miniprogram-pitfalls.md、 > shared-component-specs.md、h5-input-material-guide.md、howtodo.md、auth-integration-guide.md、 > migration-tracker.md、prd.md — 已全部整合至此,原文件不再维护。 --- ## 一、迁移范围 ### 排除页面(4 个,用户指定不迁移) - login、no-permission、reviewing、apply ### 排除页面补充(2 个,材料不完整,本次不处理) - home-settings(无交互说明) - ai-icon-demo(无截图、无交互说明) ### 全量迁移清单(17 个页面,全部需要走完整流程) > board-coach、board-customer 虽有历史实现,board-finance 正在迁移中, > 但本次 SPEC 统一纳入,全部按标准流程重新迁移/验收。 | 批次 | 页面 | 复杂度 | 交互说明 | 截图 | 历史状态 | 备注 | |------|------|--------|----------|------|----------|------| | A-看板 | board-finance | 高 | ✅ | ✅ (4张) | 🔧 迁移中 | 6 板块,含筛选下拉+指标弹窗+目录面板 | | A-看板 | board-coach | 高 | ✅ | ✅ (8张) | ✅ 有历史实现 | 4 维度卡片 + 3 种筛选下拉 | | A-看板 | board-customer | 高 | ✅ | ✅ (10张) | ✅ 有历史实现 | 8 维度卡片 + heart-icon + 最专一表格 | | B-核心 | task-list | 高 | ✅ | ✅ (3张) | 待迁移 | TabBar 主页,含长按菜单+备注弹窗 | | B-核心 | my-profile | 中 | ✅ | ✅ | 待迁移 | TabBar 主页 | | C-任务 | task-detail | 高 | ✅ | ✅ (3张) | 待迁移 | 含放弃弹窗+备注弹窗 | | C-任务 | task-detail-callback | 低 | ✅ | ✅ | 待迁移 | task-detail 主题色变体(仅 banner 背景+按钮配色),数据结构同 task-detail | | C-任务 | task-detail-priority | 低 | ✅ | ✅ | 待迁移 | task-detail 主题色变体(仅 banner 背景+按钮配色),数据结构同 task-detail | | C-任务 | task-detail-relationship | 低 | ✅ | ✅ | 待迁移 | task-detail 主题色变体(仅 banner 背景+按钮配色),数据结构同 task-detail | | D-详情 | coach-detail | 中 | ✅ | ✅ (2张) | 待迁移 | 含备注弹窗 | | D-详情 | customer-detail | 中 | ✅ | ✅ | 待迁移 | 客户详情 | | D-详情 | customer-service-records | 中 | ✅ | ✅ | 待迁移 | 客户服务记录 | | E-绩效 | performance | 中 | ✅ | ✅ | 待迁移 | 业绩总览 | | E-绩效 | performance-records | 中 | ✅ | ✅ | 待迁移 | 业绩明细 | | F-对话 | chat | 中 | ✅ | ✅ | 待迁移 | AI 对话 | | F-对话 | chat-history | 低 | ✅ | ✅ | 待迁移 | 对话历史 | | G-其他 | notes | 低 | ✅ | ✅ | 待迁移 | 备忘录(有历史实现,需重写) | ### 有历史实现的页面处理方式 - board-coach、board-customer、board-finance、notes:已有小程序代码,本次按标准流程重新审计 → 对比 H5 原型 → 差异修复 → 像素级验收 - 其余 13 页:从零开始全流程迁移 --- ## 二、每页迁移标准流程(7 步) ### Step 1:输入物冻结(加载顺序严格执行) ``` 1. 规则层: - 本文档(转换规范 + 避坑指南 + 组件规范,全部在此) 2. 全局资源层: - docs/h5_ui/design-tokens.json(颜色/间距/字号/圆角/阴影) - docs/h5_ui/icon-mapping.md(图标处理方案) 3. 页面源码层: - docs/h5_ui/pages/.html(H5 源码 — 唯一结构真相) - docs/h5_ui/css/.css(自定义 CSS,如有) - docs/h5_ui/computed-styles.json 中 key(精确 px 值,如有) 4. 行为层: - docs/h5_ui/interactions/.md(状态变量 + 操作响应 + 状态枚举) 5. 视觉校验层: - docs/h5_ui/screenshots/.png(默认态截图) - docs/h5_ui/screenshots/--*.png(交互态截图) ``` **缺一不可。** 缺失材料时先标记,不猜测。 ### Step 2:迁移审计(先输出报告,不写代码) 输出《迁移审计报告》,包含 7 项: | 审计项 | 内容 | |--------|------| | A. 页面结构 | 主要区域划分(header/list/card/footer),组件化边界建议 | | B. CSS 风险点 | 不支持的 CSS 特性清单 + 替代方案(含原因/影响/验收方式) | | C. 关键样式映射 | Tailwind 类 → computed 值 → WXSS(按第五章七维度逐项核对,取 computed-styles 精确值) | | D. 图标处理 | 每个 SVG 的处理决策(TDesign / 导出 SVG / Emoji) | | E. 交互映射 | H5 DOM 操作 → setData + 事件绑定映射表 | | F. 外部依赖 | CDN 资源(Tailwind/Google Fonts)本地化方案 | | G. 缺失信息 | 需要用户补充的材料清单 | ### Step 3:规则化转换(详见第三章) 按第三章的标签映射、样式转换、事件转换、路由规则执行。 ### Step 4:编译验证 | 检查项 | 合格标准 | |--------|---------| | WXML 编译 | 无编译错误(特别注意 `.toFixed()` 等 JS 方法不能在 WXML 中使用) | | WXSS 编译 | 无警告(检查不支持的选择器) | | 控制台 | 无 JS 运行时错误 | | 图片加载 | 无 404/500 错误(所有 `/assets/` 引用的文件必须存在) | | 组件注册 | 无 "component not found" 警告 | | 路由跳转 | 无 "navigateTo:fail" 错误 | | TS 类型 | `Page()` 类型定义完整,data 中所有字段有初始值 | ### Step 5:结构还原验证(必须在像素对比之前完成) > ⚠️ 这是最关键的一步。未迁移页面的结构与 H5 原型差异巨大, > 如果跳过结构验证直接做像素对比,差异率会高达 20%~80%,完全没有参考价值。 > **结构没对齐之前,禁止进入像素级对比。** 逐项对照 H5 原型截图和交互说明,确认以下结构要素: | # | 检查项 | 对照源 | 合格标准 | 常见问题 | |---|--------|--------|---------|---------| | 1 | 区域划分 | H5 截图 | header/content/footer/tabbar 区域与 H5 一致 | 缺少区域、区域顺序错误 | | 2 | 元素层级 | H5 源码 | 嵌套层级与 H5 DOM 结构对应 | 多余嵌套或缺少容器 | | 3 | 列表/卡片数量 | H5 截图 | Mock 数据条数与 H5 一致(便于截图对比) | 数据条数不同导致高度差异 | | 4 | 文本内容 | H5 源码 | 标题、标签、按钮文案与 H5 完全一致 | 文案遗漏或写错 | | 5 | 图标完整性 | icon-mapping.md | 所有图标位置有对应实现(TDesign/SVG/Emoji) | 图标缺失显示空白 | | 6 | 导航结构 | interactions/*.md | 自定义导航栏/返回按钮/TabBar 行为正确 | 导航栏缺失或返回失效 | | 7 | 弹窗/浮层 | interactions/*.md | 所有弹窗/下拉/浮层能正常触发和关闭 | 弹窗不弹出或无法关闭 | | 8 | 滚动行为 | H5 截图 | 长页面可滚动,吸顶元素正确固定 | 内容溢出不可滚动 | | 9 | 三态占位 | PRD 规范 | loading/empty/error 三种状态有对应 UI 结构 | 缺少状态处理 | **通过标准:** 以上 9 项全部通过后,才可进入 Step 6 像素级对比。 **未通过处理:** 记录问题 → 修复 → 重新验证,循环直到全部通过。 ### Step 6:像素级视觉对比(详见第五章) > **前置条件:Step 5 结构还原验证全部通过。** > 结构未对齐时的像素对比结果无参考价值,禁止跳过 Step 5。 ### Step 7:验收签收 | 验收项 | 怎么看 | 合格标准 | 常见失败表现 | |--------|--------|---------|-------------| | 布局结构 | 对比截图整体布局 | 区域划分、层级关系一致 | 元素错位、层级混乱 | | 间距系统 | 对比元素间距 | 与 H5 截图一致(±4rpx 容差) | 间距过大/过小 | | 字体系统 | 对比字号、字重、行高 | 与 design-tokens 一致 | 字号偏差、行高不对 | | 颜色 | 对比背景色、文字色、边框色 | 与 design-tokens 一致 | 颜色偏差 | | 圆角 | 对比卡片、按钮圆角 | 与 design-tokens 一致 | 圆角过大/过小 | | 阴影 | 对比卡片阴影 | 有阴影且不突兀 | 无阴影或阴影过重 | | 图标 | 对比图标位置、大小、颜色 | TDesign 图标正确显示 | 图标缺失或错位 | | 交互完整性 | 按交互说明逐项操作 | 所有操作有正确响应 | 点击无反应、状态不切换 | | 三态处理 | 切换 loading/empty/error | 三种状态均有对应 UI | 缺少空状态或加载态 | | 安全区 | 刘海屏设备检查 | 内容不被刘海遮挡 | 顶部内容被裁切 | **未通过返工流程:** 验收未通过时,按问题严重度回退到对应步骤修复: | 问题类型 | 回退到 | 说明 | |----------|--------|------| | 结构错误(区域缺失/层级错乱/元素遗漏) | Step 5 结构还原验证 | 结构问题必须重新走结构验证 | | 样式偏差(间距/字号/颜色/圆角/阴影) | Step 6 像素级对比 | 用 diff 图定位具体偏差点,补丁式修复 | | 交互缺陷(点击无响应/状态不切换/弹窗异常) | Step 3 规则化转换 | 对照 interactions/*.md 补全事件绑定 | | 编译报错(修复过程中引入新错误) | Step 4 编译验证 | 修复后必须重新过编译检查 | | 真机差异(模拟器正常但真机异常) | Step 6 像素级对比 | 真机截图对比,针对性修复 | > 每次返工修复后,必须从回退步骤开始重新往下走完所有后续步骤,不可跳步。 > 例如:回退到 Step 5 修复结构问题后,需依次重新通过 Step 5 → Step 6 → Step 7。 --- ## 三、转换规则大全 ### 3.1 核心缩放公式(强制) ``` 最终 rpx = H5 px × 2 × 0.875 结果取偶数(向最近偶数取整) ``` 来源:iPhone 15 Pro Max 430px 宽 → 小程序 750rpx 基准,87.5% = 750/430/2。 先后尝试了非统一缩放、80%、87.5% 三种方案,87.5% 在 iPhone 15 Pro Max 上与 H5 原型视觉一致度最高。 ### 3.2 标签映射(硬性规则) | HTML | WXML | 说明 | |------|------|------| | `
` | `` | 容器 | | `` / `

` | `` | 文本必须用 `` 包裹;`` 内只能嵌套 `` | | `` | `` | 必须指定 mode 和宽高,默认 320×240 会变形 | | `` 内联 | `` 或 `` | 不支持内联 SVG | | `

    /
  • ` | `` | 无列表语义标签,必须加 `wx:key` | | `

    `~`

    ` | `` + 样式类 | 无语义标题标签 | | `` | `` 手动布局 | 无表格标签 | | `
    ` | `` | 语义标签统一用 view | | `