日期:2026-08-11
范围:mobile-h5/pages/oa/start/index.vue(模板列表页)
视觉 Demo:mobile-ui/zkxw-mobile-oa-start-cards-demo.html
对齐:web-admin/src/views/oa-approval/start/index.vue+OaAppIcon+utils/oa-app-icons.ts
父设计:docs/superpowers/specs/2026-08-11-mobile-oa-start-approval-design.md§6.1
ep:IconName|#bg 串,色板与 Web 不一致。oa-apps__card-row 换行)+ OaAppIcon 彩色底/图标色。OA_APP_ICON_COLOR_PAIRS 完全一致;支持 ep:… 与图片 URL。fetchOaTemplates + fetchOaGroupList)。#10b981 当作页面主色;页面骨架与「发起」按钮仍用三墙 #0a9f6d。| 决策点 | 结论 |
|---|---|
| 布局 | 卡片网格,对齐 Demo(2 列) |
| 分类标题 | 独立一行,对齐 Web section-head |
| 顶部分类 Tab | 保留(搜索下方) |
| Logo 色 | 与 Web OA_APP_ICON_COLOR_PAIRS 一致 |
| 实现路径 | 小程序内解析 ep: + 内联 SVG 映射(不依赖 Element Plus) |
在 mobile-h5 增加轻量工具 utils/oa-app-icons.js(色对、解析、默认值从 Web oa-app-icons.ts 逐字拷贝色表与规则),页面用组件或内联块渲染图标:
ep:Document|#d1fae5 → 32×32、圆角 8、背景 #d1fae5、SVG 描边/填充 #059669ep: 的 URL → 图片铺满方块(与 Web kind=image 一致)ep:Document + 默认绿对备选未采用:整页 web-view 渲染列表(过重);把图标做成独立 H5 CDN(多一次网络与域名配置)。
页面自上而下:
groupOptionsdisplayGroups 分段
name · 红点 #f87171 · 右对齐 N 个表单1fr 1fr,gap ~10–16rpx交互:点卡片或「发起」→ 现有 onPick → webview。
数据逻辑:沿用现有 displayGroups(搜索 + Tab 过滤 + 按组桶 + 未分组),不改分组算法。
| 项 | 值 |
|---|---|
| 尺寸 | 32×32(对齐 Web OaAppIcon sm) |
| 圆角 | 8px |
| 色对 | 与 Web 锁定 8 组(禁止灰):见 OA_APP_ICON_COLOR_PAIRS |
| 解析 | resolveOaAppIcon / parseEpIconUrl 行为对齐 Web |
| 图标集 | Web OA_APP_EP_ICON_NAMES 子集须覆盖;未知名回退 Document |
| 页面主色 | 三墙 #0a9f6d(按钮/Tab active);不用色对覆盖整页主题 |
色对权威源:web-admin/src/utils/oa-app-icons.ts。mobile 侧拷贝后若 Web 变更,须同步更新并在 PR 注明。
| 文件 | 变更 |
|---|---|
mobile-h5/utils/oa-app-icons.js |
新增:色对、解析、可选 SVG path 映射 |
mobile-h5/pages/oa/start/index.vue |
模板改为 section-head + card-row;接图标解析 |
mobile-ui/zkxw-mobile-oa-start-cards-demo.html |
已作为视觉冻结参考 |
可选:抽 components/OaAppIcon.vue(若页面内联过长再抽)。
ep: 模板:背景色、图标色与 Web 同模板一致(同 iconUrl 字符串)。iconUrl:方块内 aspectFill。rich-text 或 image(base64/svg 文件);优先用 uni-app 支持的方式(可先 image + 本地/内联 data URI,或用 text 首字仅作临时——验收要求禁止长期首字兜底替代 ep 色标)。