适用范围:
miniprogram(客户端 / 供应商端 / 配送员端)及工作台 WebView 业务 H5(web-admin/m/**)
现行视觉权威:本文各节;工作台 WebView 列表卡与确认弹窗分别见 §12.3、§12.6。 参考实现:web-admin/src/views/m/crm/customer/index.vue、web-admin/src/views/m/crm/product/index.vue;确认弹窗见web-admin/src/utils/mp-crm-confirm.ts。 附件宫格参考:miniprogram/pages/bx/invoice/mine.vue(我的发票夹)。 历史来源:早期mobile-ui/、bak/mobile-ui/HTML 原型不在当前仓库中,不再作为必读或验收依据;其有效布局、Token 和 class 映射规则保留在本文。旧 expense-card 仅适用 §12.3.1 的过渡范围。
375px 为主基线,兼容 414px。// 品牌主色
$brand-green: #0a9f6d;
$brand-green-dark: #087f57;
$brand-green-soft: #e9f9f2;
// 品牌辅助
$barley-yellow: #d6a343;
$barley-yellow-soft: #fff7e8;
// 中性色
$bg-page: #f5f8f7;
$surface: #ffffff;
$text-primary: #1f2a26;
$text-muted: #6b7b74;
$border: #dcebe4;
// 语义色
$danger: #d14343;
$warning: #cf8a19;
$success: #189b65;
-apple-system, BlinkMacSystemFont, "PingFang SC", sans-serif18px / 20px13px / 14px11px / 12px16px / 20px,建议半粗体以上(600/700)8 / 10 / 12 / 14 / 1612px / 14px / 16px18px / 22px14px / 17px / 20pxlinear-gradient(145deg, $brand-green-dark, $brand-green)navigationStyle: custom 的页面,业务顶栏 SHALL 避开状态栏与右上角胶囊。statusBarHeight 与 getMenuButtonBoundingClientRect(见 utils/safeArea.js)。--sq-safe-top、--sq-nav-height、--sq-header-height、--sq-capsule-right-safe;微信端 SHALL 通过顶栏根节点内联 style 注入,不得仅依赖 H5 document。--sq-header-height,内容行高 --sq-nav-height,右侧列预留 --sq-capsule-right-safe,该列 SHALL NOT 放置可点击业务按钮。padding-top 含 --sq-safe-top,padding-right 含 --sq-capsule-right-safe。$border)目的:统一三端商品图片展示口径,避免运营上传图片后在不同页面“变形/撑高/被截断”。
1:1(正方形)800×800 ~ 2000×2000 像素(JPG/PNG/WebP)aspectFill):非 1:1 的图片会被裁切到方形,主体请尽量居中4:3750px(例如 750×562)aspectFill):非 4:3 的图片会被裁切,主体请尽量居中750px)widthFix):图片按屏幕宽度铺满,高度随原图等比变化720p 以内,并尽量缩短时长以利加载warning:待处理(琥珀)success:进行中/完成(绿色系)danger:异常/风险(红色)44x44目的:保留历史 Demo 的有效结构映射,供
miniprogram/pages/**.vue实现参考,无需读取已移除的原型。 建议:优先保留 Demo class 名,若历史页面已存在 class,可做“旧类名 = 新类名别名”过渡。
pages/client/home/home.vue)| Demo 区块 | Demo class | 建议 uni-app class |
|---|---|---|
| 页面根容器 | phone |
client-home-page |
| 顶部头部 | top, top-row, search |
client-header, client-header-row, client-search |
| 一级分类分页容器 | first-level |
client-first-level |
| 一级分类分页项 | first-page |
client-first-page |
| 一级分类卡片 | first-chip |
client-first-chip |
| 一级分类滑块组 | first-level-indicator |
client-first-indicator |
| 一级分类滑块项 | indicator-dot |
client-first-indicator-dot |
| 分类主布局 | category-layout |
client-category-layout |
| 二级分类侧栏 | second-level, second-item |
client-second-level, client-second-item |
| 商品区 | goods-area, goods-list, goods-card |
client-goods-area, client-goods-list, client-goods-card |
| 底部结算条 | cart-bar, cart-inner, settle |
client-cart-bar, client-cart-inner, client-settle-btn |
pages/client/cart/cart.vue)| Demo 区块 | Demo class | 建议 uni-app class |
|---|---|---|
| 页面头部 | top, title, sub |
cart-header, cart-title, cart-sub |
| 店铺分组卡 | store, store-head, store-name |
cart-store-card, cart-store-head, cart-store-name |
| 商品行 | item, thumb, name, spec |
cart-item-row, cart-item-thumb, cart-item-name, cart-item-spec |
| 数量控制 | qty, qbtn, qnum |
cart-qty, cart-qty-btn, cart-qty-num |
| 底部结算 | bar, total, btn |
cart-footer, cart-total, cart-checkout-btn |
pages/client/order/order.vue)| Demo 区块 | Demo class | 建议 uni-app class |
|---|---|---|
| 顶部筛选 | tabs, tab |
order-tabs, order-tab-item |
| 订单卡 | order, head, no |
order-card, order-card-head, order-no |
| 状态标签 | status pending/delivering |
order-status status-pending/status-delivering |
| 订单商品摘要 | goods, img, meta |
order-goods-row, order-goods-thumb, order-goods-meta |
| 卡片底部动作 | ft, actions, btn |
order-footer, order-actions, order-action-btn |
pages/client/profile/profile.vue)| Demo 区块 | Demo class | 建议 uni-app class |
|---|---|---|
| 头部用户区 | header, user, avatar, name |
profile-header, profile-user, profile-avatar, profile-name |
| 统计区 | stats, s |
profile-stats, profile-stat-item |
| 功能列表 | card, row, left, arrow |
profile-menu-card, profile-menu-row, profile-menu-left, profile-menu-arrow |
| 退出按钮 | logout |
profile-logout-btn |
pages/supplier/home/home.vue)| Demo 区块 | Demo class | 建议 uni-app class |
|---|---|---|
| 头部 | header, topline, merchant |
supplier-header, supplier-header-top, supplier-merchant |
| 统计卡 | stats, stat |
supplier-stats, supplier-stat-item |
| 功能宫格 | tools, tool, icon |
supplier-tools, supplier-tool-item, supplier-tool-icon |
| 任务列表 | tasks, task |
supplier-task-list, supplier-task-card |
| 任务状态 | tag pending/stocking |
supplier-task-tag tag-pending/tag-stocking |
pages/deliverer/home/home.vue)| Demo 区块 | Demo class | 建议 uni-app class |
|---|---|---|
| 头部与统计 | 同供应商结构 | deliverer-header, deliverer-stats |
| Tab 区 | tabs, tab |
deliverer-tabs, deliverer-tab-item |
| 菜单宫格(在任务上方) | tools, tool |
deliverer-tools, deliverer-tool-item |
| 任务卡 | task, line1, status |
deliverer-task-card, deliverer-task-head, deliverer-task-status |
| 取货/配送信息块 | blk, phone-row, dial |
deliverer-info-block, deliverer-phone-row, deliverer-dial-btn |
/m/pl/plan-cert,详情路径 /m/pl/plan-cert/:id,均复用 MpWebviewShell;视觉骨架以第 12 节扁平折叠卡为准(绿顶栏 + 可选业务 Tab + 三栏筛选含「更多」+ 扁平卡);存量 expense-card / style-align 为过渡,改造时迁到 12.3。SHALL NOT 再使用与骨架冲突的独立密集 cert-* 工具条 / Chip 硬挤。src/styles 或公共组件。tag-* / status-*,减少后续维护成本。*-indicator-dot、*-checkout-btn,便于后续脚本绑定。列表卡参考实现:
web-admin/src/views/m/crm/customer/index.vue、web-admin/src/views/m/crm/product/index.vue;规范见本节 §12.3。 确认弹窗参考实现:web-admin/src/utils/mp-crm-confirm.ts;规范见本节 §12.6。 过渡范围:旧 expense-card 见 §12.3.1,不作为新页面标准。 OpenSpec:openspec/changes/zkxw-engineering-standards/specs/ui-conventions/spec.md→「工作台 WebView 业务页」
色板:本节与全文 §2 一致,主色#0a9f6d,禁止 Fresh Mint#10b981。
适用于小程序工作台菜单打开的 H5(/m/crm/*、/m/pl/plan-cert 等)。参考实现:客户管理、产品管理。附件宫格仍参考「我的发票夹」。
| 顺序 | 区块 | 说明 |
|---|---|---|
| 1 | 绿顶栏 | 返回、标题(固定页面名);胶囊搜索可放在顶栏内(对齐 MpBusinessHeader) |
| 2 | 业务 Tab(可选) | 仅业务有多视图/多状态时出现(如客户视图);不是每页必有;无需要时不硬塞状态 Tab |
| 3 | 三栏筛选 | 紧贴搜索下方;固定 3 格:前 2 项京东式下拉,第 3 项「更多」 |
| 4 | 列表卡片 | 见 12.3 扁平折叠卡;与左右边界留白(约 12px);条数汇总在卡片之后;滚到底继续加载,不再放「加载更多」按钮 |
| 5 | Speed Dial / 批量底栏 | 新增用右下角「+」;批量仅勾选后出底栏 |
禁止:顶栏下再堆「新增 / 筛选 / 显示 / 刷新」多行工具条。
底部 Sheet 收纳全部条件,控件类型:
以上为共用筛选能力集合;每个页面只展示桌面端/后端已支持并能真实生效的字段,不得为了展示某种控件伪造无效筛选。危化品证页当前无独立“证书上传时间”查询字段,保持与 Web 端字段一致。
顶栏只保留标题和「关闭」。重置、确定放在底栏,对齐客户管理(mp-customer-filter-vant__foot)。不要把这两个按钮放进顶栏左右文字。重置会清空并立即查询。「更多」内有额外条件时,顶栏「更多」显示「更多·已筛」。
CRM 管理与运输管理中的产品危化属性标签统一使用 MpProductHazardTag:易制毒显示「毒」(红色 #dc2626),易制爆显示「爆」(黄色 #ca8a04),均为白字、24px 高度。列表、详情、编辑及产品选择弹窗保持一致;完整属性名称保留在无障碍标签中。
CRM 管理六个界面及运输计划、危化品证上传界面的普通操作按钮统一为 30px 高、28px 行高,上下可见留白约为原 44px 按钮的一半;左右内边距不变。此规则包含对应弹窗的操作按钮,优先于通用 44px 高度规则;返回、Tab、勾选控件和圆形加号维持原尺寸。
紧凑按钮规则以 .mp-wv-root 页面容器及其弹层容器为范围,覆盖详情、编辑、审批、选择器及辅助子页面。新增原生操作按钮使用 .mp-compact-action 接入统一尺寸,不能依赖页面类名白名单。
状态 · 编号 · 时间),无色块底—有金额业务:金额进 meta/预览/展开之一,不用独立金额色块区作为默认层。字段集对齐 PC 约定可见列(或已确认固定全集);不做移动端「显示字段」勾选驱动卡片。
建议 class(H5):mp-wv-card + mp-*-list-card / __meta / __preview / __toggle / __extra / __row(结构不得缺层)。
expense-card存量可暂留:标题+Tag → 可选金额大区 → 副信息 → 灰底 KV → 时间 → 虚线底栏。新增与改造必须用 12.3;不得新建灰底 KV / 绿底强调条列表卡。客户、产品、报价已达标;合同、危化证等仍用旧卡者为过渡、待改造。仅一个底栏按钮时按内容宽度靠右,不拉满整行。
详情使用独立路由页面,支持直达、刷新和返回,SHALL NOT 放入 Bottom Sheet 或桌面弹窗。结构为:普通绿顶栏(返回 + 固定页面标题)→ 业务 Tab(如有)→ 信息卡(上标签下值或 section+h3+KV)→ 底栏主操作。编号、状态、金额等业务信息放入正文;顶部不设置票根、Hero、动态记录标题、副标题或状态标签等特殊区。审批流使用头像时间轴,附件回显见 12.5。
att-grid / att-img / att-add / att-doc-thumb#0a9f6d#dc2626(文案如「确认删除」)web-admin/src/utils/mp-crm-confirm.ts#10b981 主色后续 H5 改造以客户、产品、报价单页面为准。规范正文见 OpenSpec「H5 样式改造补遗(以报价单管理落地为准)」。要点:绿头 Tab 白字均分、筛选行白字透明底、更多筛选底栏重置/确定、滚动分页、即时检索、表单绿竖条标题与固定底栏、左右只留壳层间距、明细与选择器用 Vant 底部弹层、详情 Tab 作锚点且字段与 Web 查看弹窗一致。