DESIGN.md 7.6 KB


name: YesWash 用户端小程序 description: 自助洗车车主端微信小程序,预约、支付、会员一站式服务 colors: primary: "#C6171E" primary-light: "#E84545" primary-dark: "#A81212" success: "#4CAF50" warning: "#FF9800" error: "#F44336" info: "#2196F3" text-primary: "#1A1A1A" text-secondary: "#666666" text-tertiary: "#999999" text-placeholder: "#B0B0B0" text-inverse: "#FFFFFF" bg-page: "#F5F7FA" bg-card: "#FFFFFF" bg-hover: "#F8F8F8" border: "#E0E0E0" border-light: "#F0F0F0" divider: "#F0F0F0" typography: body:

fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif'
fontSize: "14px"
fontWeight: 400
lineHeight: 1.6

caption:

fontSize: "12px"
fontWeight: 400
lineHeight: 1.2

title:

fontSize: "18px"
fontWeight: 600
lineHeight: 1.4

headline:

fontSize: "24px"
fontWeight: 700
lineHeight: 1.2

rounded: sm: "2px" md: "3px" lg: "6px" full: "50%" spacing: xs: "4px" sm: "8px" md: "12px" lg: "15px" components: button-primary:

backgroundColor: "{colors.primary}"
textColor: "{colors.text-inverse}"
rounded: "{rounded.md}"

button-primary-hover:

backgroundColor: "{colors.primary-dark}"

tab-active:

textColor: "{colors.primary}"

tab-inactive:

textColor: "#7A7E83"

Design System: YesWash 用户端小程序

1. Overview

Creative North Star: "口袋里的洗车助手"

车主掏出手机,几秒钟内找到最近的洗车网点、完成预约、扫码启动洗车机。整个过程应该在排队等候的间隙就能完成 — 不需要思考,不需要学习,不需要等待。界面是透明的,用户看到的不是 UI,而是自己的车和下一个空闲的洗车位。

系统基于 uni-app + uv-ui 组件库,主色已经是品牌红 (#C6171E),设计令牌体系完整。追求的是「打开即用,用完即走」的小程序典型体验:信息密度低、操作路径短、视觉噪声少。

Key Characteristics:

  • 移动端优先,触控目标 ≥44px
  • 品牌红作为导航和行动色,页面背景保持浅灰,卡片纯白
  • 卡片式布局为主,每个卡片承载一个独立信息单元
  • 自定义导航栏和底部 TabBar,与系统 UI 自然融合
  • 不做过度动画,只用 150-250ms 微交互做状态反馈

2. Colors

Primary

  • Primary Red (#C6171E): 品牌主红 — 比后台管理系统的 Brand Red 更深一度,在小尺寸屏幕上有更好的辨识度。用于主按钮、Tab 选中态、轮播指示器、价格、关键状态图标。
  • Primary Light (#E84545): 浅红,用于 hover 态和浅色强调背景。
  • Primary Dark (#A81212): 深红,用于按钮按下态和深色强调。

Semantic

  • Success (#4CAF50): 支付成功、操作完成。
  • Warning (#FF9800): 余额不足、即将过期。
  • Error (#F44336): 支付失败、网络错误。
  • Info (#2196F3): 订单状态更新、系统通知。

Neutral

  • Text Primary (#1A1A1A): 正文、标题、核心信息。
  • Text Secondary (#666666): 辅助描述、次要标签。
  • Text Tertiary (#999999): 时间戳、弱化信息。
  • Text Placeholder (#B0B0B0): 输入框占位符。
  • Page Background (#F5F7FA): 页面全局底色,略带蓝灰的浅色。
  • Card Background (#FFFFFF): 卡片、列表项、弹窗背景。
  • Border (#E0E0E0): 分割线、卡片描边。
  • Divider (#F0F0F0): 轻量分割。

Named Rules

The Red Means Action Rule. 品牌红不出现在非交互元素上。看到红色,就意味着可以点击、可以操作、或者这是当前激活态。

The Card-White Rule. 所有内容卡片使用纯白底 (#FFFFFF),与页面底色 (#F5F7FA) 形成两层信息结构。不做三层以上的背景嵌套。

3. Typography

Font Family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif

系统字体栈,保证 iOS 和 Android 各自的最优渲染。小程序内不引入 Web 字体,不增加包体积。

Character: 清晰、中性、不抢戏。字号跨度从 12px 到 24px,通过字重而非颜色区分层级。

Hierarchy

  • Headline (700, 24px, 1.2): 大标题,仅用于首页和重要落地页顶部。
  • Title (600, 18px, 1.4): 页面标题、区块标题、订单金额。
  • Body (400, 14px, 1.6): 正文、列表项、描述文本。
  • Caption (400, 12px, 1.2): 辅助说明、时间、标签。
  • Small (400, 13px, 1.4): 表单标签、次要按钮文字。

Named Rules

The Weight Over Color Rule. 同一页面最多使用两种文本颜色(Primary + Secondary)。层级差异通过字重 (400/600/700) 和字号表达,不引入第三种颜色。

4. Elevation

小程序采用扁平底色分层策略。不依赖阴影区分层级,而是通过背景色差(页面灰 → 卡片白)自然建立视觉层次。

  • 页面底色 #F5F7FA 提供全局基准面
  • 卡片白色 #FFFFFF 浮于基准面之上
  • 弹窗/底部弹出层使用轻微阴影或遮罩 (rgba(0,0,0,0.4))

阴影仅用于必须传达「浮层」的场景:底部弹出菜单、模态对话框。

5. Components

所有组件基于 @climblee/uv-ui,以下记录关键定制和使用约束。

Buttons

  • Shape: 3px 圆角,默认高度 44px(满足触控最小尺寸)。
  • Primary: Primary Red 满底 + 白色文字。用于页面主操作:立即下单、确认支付、一键导航。
  • Hover: 背景深至 Primary Dark,无缩放动画。
  • Ghost: 透明底 + Primary Red 边框和文字。用于次要操作。
  • Disabled: 透明度 0.3,不可交互。

Tab Bar

  • Style: 自定义底部导航,白色背景,顶部 1px 分割线。
  • Active: Primary Red (#C6171E) 图标和文字。
  • Inactive: 灰色 (#7A7E83) 图标和文字。
  • Font Size: 12px 标签文字。

Cards

  • Corner Style: 6px 圆角。
  • Background: Card White (#FFFFFF)。
  • Shadow: 无默认阴影。
  • Internal Padding: 12-15px (md-lg)。

Navigation Bar

  • Style: 自定义导航栏,Primary Red 背景 + 白色标题。
  • Height: 状态栏高度 + 44px 内容区。
  • Title: 18px, 600 字重, 白色。

List Items

  • Style: 白色背景,左侧图标/标签 + 右侧箭头,高度 ≥44px。
  • Divider: 底部 1px Border Light 分割线,左右各 15px 留白。
  • Hover: 背景微变至 #F8F8F8。

Form Inputs

  • Style: 白色背景,底部 1px Border 分割线。
  • Focus: 分割线变为 Primary Red。
  • Label: 14px, Text Primary, 左对齐。
  • Placeholder: 14px, Text Placeholder。

6. Do's and Don'ts

Do:

  • Do 用 Primary Red 标记所有可交互元素和当前激活态
  • Do 保持页面底色 (#F5F7FA) 和卡片白底 (#FFFFFF) 的二级结构
  • Do 所有可点击区域至少 44px 高,满足微信小程序触控规范
  • Do 文本层级靠字重区分:400 正文 → 600 标题 → 700 大标题
  • Do 按钮、列表项、表单项保持统一的 3px 圆角
  • Do 订单金额、优惠标签使用 600 字重突出

Don't:

  • Don't 使用大红色块铺满屏幕。红色是信号,不是背景
  • Don't 在非交互元素上使用 Primary Red
  • Don't 卡片内嵌套卡片
  • Don't 使用超过两种文本颜色(Primary + Secondary)在同一页面
  • Don't 使用花哨的加载动画或页面切换效果
  • Don't 使用 border-left 彩色强调条
  • Don't 在小程序内引入 Web 字体,增加不必要的包体积
  • Don't 在三层以上的背景色嵌套中迷失(页面灰 → 卡片白,仅此两层)