日期:2026-08-11
工程:mobile-h5(微信小程序)+ 独立 OA 表单 H5
对齐参考:web-admin发起审批(views/oa-approval/start+OaStartFormDialog+OaFlowPreview)
相关:docs/superpowers/specs/2026-08-10-mobile-h5-vant-ui-design.md、docs/miniprogram-ui-spec-sanqiang.md
mobile-h5:登录与首页已完成;首页「功能菜单」目前为空(未接移动端菜单权限)。web-admin:发起审批已上线——卡片展示已发布流程 → 弹窗上半 form-create 动态表单、下半审批流预览 → 暂存草稿 / 提交。@form-create/element-ui + 大量自研组件/套件;移动端需用 @form-create/vant 渲染同一套 formSchemaJson。appId 拉取 JSON 动态渲染。@form-create/vant(已评估为高风险,不作为主路径)。| 决策点 | 结论 |
|---|---|
| 发布目标 | 微信小程序(mobile-h5) |
| 表单承载 | 独立部署 H5 + 小程序整页 web-view |
| 列表 vs 填写 | A1:模板列表用小程序原生;仅填写页进 H5 |
| 表单能力 | 已发布模板可完整发起;Spike/移植范围以 zkxw-sc 真实 schema 用量为准(非设计器理论全集) |
| 多流程 UI | 一套 H5 页 + JSON 渲染,不为每个流程单独做页 |
| 阶段一验证 | 首页硬编码测试菜单 → web-view → H5 水槽页(手工 kitchen-sink rule) |
| 品牌色 | 三墙 #0a9f6d 等;禁止混用 Web #10b981 |
┌─ mobile-h5(微信小程序)────────────────────────────┐
│ 首页功能菜单 ← 「移动端菜单」+ 角色授权(联调阶段) │
│ │ │
│ ▼ │
│ 模板列表页(原生) │
│ · GET templates + groups │
│ · 卡片 / 分组(对齐 Web 发起审批列表思路) │
│ · 「发起」→ 打开 web-view 页 │
│ │ │
│ ▼ │
│ 整页 web-view │
│ src = {H5_ORIGIN}/oa-start/?appId=&token=… │
│ (阶段一水槽:/oa-form-sink/) │
└──────────────────────────┼───────────────────────────┘
▼
┌─ 独立 H5(建议目录 mobile-oa-h5)─────────────────────┐
│ Vue3 + Vant4 + @form-create/vant │
│ 注册:基础控件映射 + 全部自研 type(与 Web type 名一致)│
│ 上:动态表单 ← formSchemaJson │
│ 下:审批流预览 ← flow-preview │
│ 底:取消 / 暂存草稿 / 提交 │
│ 结束:postMessage + navigateBack → 小程序 │
└──────────────────────────────────────────────────────┘
@form-create/vant 面向浏览器 H5 + Vant,不是 uni-app / 微信小程序一等公民。web-view 强制全屏,故填写相关 UI(表单、审批流、底栏)全部放在 H5,避免原生与 web-view 叠层。否。 与 Web OaStartFormDialog 相同:
formSchemaJson.rule / option(存库)。GET templates/{appId} 取 schema + 流程树。<form-create-mobile :rule="rule" v-model="formData" /> 渲染。rule 不同;前提是 H5 已注册所有用到的 type。| 端 | 路径 / 工程 | 职责 |
|---|---|---|
| 小程序 | 首页 MenuGrid |
正式「发起审批」菜单;阶段一可硬编码「表单水槽测试」 |
| 小程序 | /pages/oa/start/index |
已发布模板卡片列表 |
| 小程序 | /pages/oa/start/webview(或 /pages/oa/form-sink/index) |
整页 web-view 容器 |
| H5 | /oa-form-sink |
厨房水槽:手工 rule 覆盖全部 type |
| H5 | /oa-start |
正式填写:真实模板 + 审批流 + 草稿/提交 |
H5 建议独立目录(如 mobile-oa-h5/),Vite 构建并部署到已配置的小程序业务域名 HTTPS 路径;与 HBuilderX 小程序工程解耦。
真机验证:web-view 内 @form-create/vant + 全量自研 type 注册能否稳定渲染与交互。
表单水槽测试 → /pages/oa/form-sink/index。menus=[])。不必按「设计器里理论存在的全部 type」做全量水槽。以测试库 zkxw-sc 中已发布且最新版本的 oa_app_version.form_schema_json 为准,统计客户实际用到的控件/套件,水槽 rule 只覆盖这些 type(另加少量基础控件兜底)。
2026-08-11 抽样结果(27 个已发布最新模板):
| 优先级 | type | 出现次数(约) | 说明 |
|---|---|---|---|
| P0 | input / textarea / datePicker(+date/datetime) / select / inputNumber/number |
高 | 基础控件 |
| P0 | upload |
31 | 最常用自研 |
| P0 | money |
13 | |
| P0 | relatedApproval |
11 | |
| P0 | receiveAccount |
7 | |
| P1 | dept |
5 | |
| P1 | person |
3 | |
| P2 | overtimeKit |
2 | 套件 |
| P2 | leaveKit / confirmationKit / resignationKit / tripKit(+tripItinerary) |
各 1 | 套件 |
| P2 | ownerPerson / ownerDept / post |
各 1 |
当前已发布模板中未出现、可暂缓移动端移植的 type:以库内统计为准;若后续设计器新增并发布,再补注册与水槽项。
复测命令(本机已配 backend/.env → zkxw-sc):解析 form_schema_json 递归收集 type 字段即可;实施计划中附脚本。
kitchen-sink-rule:覆盖上表实际用到的 type(可按 P0→P2 分批先通)。formData(本阶段可不接真实发起 API)。成功:开发者工具 + 真机可打开;各 type 可交互;校验与取值正常;无白屏。
失败:记录问题清单后仍不可用 → 复盘部署/域名/JSBridge;不回退到「小程序内直挂 form-create」作为主方案(该路径已否决)。
对齐 Web oa-approval/start 思路:
fetchOaTemplates + fetchOaGroupList(或等价接口)。appId、登录态(token 等)。OaStartFormDialog)appId 必填;可选 draftId。flow-preview;条件未齐显示 pending;initiator_select 支持选人。postMessage + navigateBack;小程序 @message 收结果(注意微信端 message 多在后退/销毁时送达)。path 指向小程序列表页。/web/admin/oa-approval/* + 现有 JWT;确认小程序登录角色的菜单/数据权限足够。/mini/oa-approval/*,契约与 Web 运行时对齐。产品目标仍是:已发布模板在移动端可完整发起。实现顺序与 Spike 验证范围以 zkxw-sc 已发布 schema 统计 为准,避免为未使用的控件空转。
type 名称与 Web 注册保持一致。H5 侧用 Vant/移动交互重实现,不能直接复用 Element Plus 组件。
upload、money、relatedApproval、receiveAccount + 基础控件dept、personovertimeKit、leaveKit、confirmationKit、resignationKit、tripKit/tripItinerary、ownerPerson、ownerDept、post发布前用同一统计脚本再跑一遍;若出现新 type,补移植后再开菜单。
| 风险 | 对策 |
|---|---|
| web-view 全屏、无法叠原生控件 | 填写页 UI 全部在 H5 |
| 业务域名未配置 | H5 部署到已备案 HTTPS 业务域名 |
| postMessage 非实时 | 提交/取消后主动返回,触发小程序收消息 |
| Token 安全 | 短时参数或桥接;避免长期明文落日志 |
| 套件行为与 Web 不一致 | 水槽 + 同模板双端对照清单 |
| 首页菜单长期为空 | 阶段二必须打通移动端菜单接口 |
| 序号 | 内容 | 状态(2026-08-11) |
|---|---|---|
| P0 | 独立 H5 工程骨架 + Vant + @form-create/vant |
完成 |
| P1 | 水槽页 + 全 type 注册(可先 mock 未完成的自研控件) | 完成(已换真实控件) |
| P2 | 小程序:测试菜单 + 整页 web-view 打开水槽;真机验收 | 完成(水槽入口保留) |
| P3 | 按序完成自研组件/套件真实实现 | 完成 |
| P4 | H5 /oa-start:模板 API + flow-preview + 草稿/提交 |
完成 |
| P5 | 小程序原生模板列表 + 菜单注册 + 首页菜单联调 | 完成(待库授权) |
| P6 | 已发布模板全量回归(移动端可完整发起) | 进行中(待真机) |
web-admin/src/views/oa-approval/start/index.vueweb-admin/src/components/oa-approval/OaStartFormDialog.vueweb-admin/src/components/oa-approval/OaFlowPreview.vueweb-admin/src/api/oaApproval.tsweb-admin/src/main.ts + src/utils/oa-form-create-*.ts