Files
danyang-match/docs/archive/design-v1.0/前端组件库与 Design Token 规范.md
T
WorkBuddy 16538d7af5 chore(docs): V1.0 前端设计文档归档至 docs/archive/design-v1.0;为仍被援引的 V1.0 总纲文档加取代头注
- git mv 4 份 UI 类文档(UIUX 视觉规范/组件库与 Design Token/高保真原型/页面级功能清单)入档,
  附 README 说明取代关系:UI 域唯一基线为 docs/superpowers/specs/2026-09-13-* 规格
- 根目录两份 V1.0 WorkBuddy 提示词/总指令:加「已被 V1.1 整合版取代」头注,保留原位
  (AGENTS_SUMMARY 与 Recovery 报告仍援引其行号)
- REST API 规范:加「部分取代」头注(V1.1 增量以数据库与API增量设计为准;WebSocket 章节仍为协议出处)
- 根 CHANGELOG.md:加指针指向 docs/V1_1_CHANGELOG.md
- V1.0 业务设计 12 份与部署运维方案按用户决定保留原位不动
2026-09-18 20:25:58 +08:00

2706 lines
27 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 丹阳公益婚恋服务平台
# V1.0 前端组件库与 Design Token 规范
版本:V1.0
适用范围:微信小程序用户端、公益红娘工作台、运营管理后台
目标:统一视觉、降低研发成本、提高复用率、减少后期维护难度
---
# 第一章 规范目标
本规范用于统一整个V1.0前端设计与开发中的:
- 品牌颜色
- 中性色
- 字号
- 字重
- 行高
- 圆角
- 间距
- 阴影
- 图标
- 按钮
- 标签
- 表单
- 用户卡片
- 推荐卡片
- 活动卡片
- 状态组件
- 弹窗
- 空状态
- 错误状态
- 加载状态
- PC后台组件
后续所有页面原则上不得单独创造新的:
- 颜色
- 圆角
- 字号
- 按钮样式
- 卡片样式
- 状态颜色
如确需新增,应先进入组件库,再进入业务页面。
---
# 第二章 Token命名原则
统一采用语义化命名。
不要使用:
```text
red1
red2
gray3
bigFont
smallFont
```
建议使用:
```text
color-primary
color-text-primary
color-success
radius-card
spacing-page
font-title-lg
```
这样后期修改品牌风格时,不需要逐页面替换。
---
# 第三章 颜色 Design Token
## 3.1 品牌主色
```text
color-primary = #E96B6B
```
用途:
- 一级按钮
- 当前Tab
- 喜欢按钮
- 品牌强调
- 重点链接
- 部分进度状态
---
## 3.2 品牌主色按压态
```text
color-primary-active = #D95F5F
```
用于:
- 按钮按下
- 可点击组件按压反馈
---
## 3.3 品牌浅色
```text
color-primary-light = #FFF3F2
```
用途:
- 推荐理由背景
- 浅品牌卡片
- 已喜欢轻状态
- 婚恋相关轻提示
---
## 3.4 品牌极浅色
```text
color-primary-lighter = #FFF8F7
```
用于:
- 非核心区域背景
- 强调卡片底色
---
# 第四章 功能色
## 4.1 成功色
```text
color-success = #2E9B68
color-success-light = #ECF8F2
```
用于:
- 已实名
- 已审核
- 报名成功
- 已签到
- 操作完成
---
## 4.2 警告色
```text
color-warning = #E59A32
color-warning-light = #FFF7E9
```
用于:
- 审核中
- 需修改
- 风险提醒
- 待处理
---
## 4.3 错误/危险色
```text
color-danger = #D94A4A
color-danger-light = #FFF0F0
```
用于:
- 举报
- 拉黑
- 封禁
- 错误
- 极高风险
---
## 4.4 信息色
```text
color-info = #4A7CD4
color-info-light = #EEF4FF
```
用于:
- 系统说明
- 普通通知
- 辅助信息
---
# 第五章 中性色
```text
color-text-primary = #222222
color-text-secondary = #444444
color-text-tertiary = #777777
color-text-placeholder = #999999
color-border = #EEEEEE
color-divider = #F0F0F0
color-bg-page = #F7F8FA
color-bg-card = #FFFFFF
color-bg-disabled = #F3F3F3
color-disabled-text = #B5B5B5
```
---
# 第六章 深色文字使用规则
标题:
```text
color-text-primary
```
正文:
```text
color-text-secondary
```
辅助信息:
```text
color-text-tertiary
```
Placeholder:
```text
color-text-placeholder
```
不要随意使用:
```text
#000000
#333333
#666666
```
统一使用Token。
---
# 第七章 字体体系
用户端优先使用系统字体。
```text
font-family-cn = PingFang SC, Noto Sans SC, system-ui
```
PC后台:
```text
font-family-admin = Inter, PingFang SC, Noto Sans SC, system-ui
```
不额外引入装饰性品牌字体。
---
# 第八章 字号 Token
```text
font-size-xs = 12px
font-size-sm = 13px
font-size-md = 14px
font-size-base = 16px
font-size-lg = 18px
font-size-xl = 20px
font-size-2xl = 24px
font-size-3xl = 28px
```
---
# 第九章 字号使用规则
## 页面大标题
```text
24px
font-size-2xl
```
## 页面标题
```text
20px
font-size-xl
```
## 卡片标题
```text
18px
font-size-lg
```
## 正文
```text
16px
font-size-base
```
## 普通辅助文字
```text
14px
font-size-md
```
## 标签
```text
12~13px
font-size-xs / sm
```
---
# 第十章 字重
```text
font-weight-regular = 400
font-weight-medium = 500
font-weight-semibold = 600
font-weight-bold = 700
```
原则:
- 正文:400
- 按钮:500
- 卡片标题:600
- 页面大标题:600
极少使用700。
---
# 第十一章 行高
```text
line-height-tight = 1.25
line-height-normal = 1.5
line-height-relaxed = 1.7
```
使用:
标题:
```text
1.25
```
普通正文:
```text
1.5
```
长文本:
```text
1.7
```
---
# 第十二章 间距 Token
采用4px基础栅格。
```text
spacing-1 = 4px
spacing-2 = 8px
spacing-3 = 12px
spacing-4 = 16px
spacing-5 = 20px
spacing-6 = 24px
spacing-8 = 32px
spacing-10 = 40px
spacing-12 = 48px
```
---
# 第十三章 页面间距规范
用户端页面左右:
```text
spacing-page-x = 16px
```
区块间:
```text
20~24px
```
卡片内部:
```text
16px
```
紧密内容:
```text
8px
```
---
# 第十四章 圆角 Token
```text
radius-sm = 8px
radius-md = 12px
radius-lg = 16px
radius-xl = 20px
radius-full = 999px
```
使用:
- Input:12px
- Button:12px
- 普通卡片:16px
- 首页推荐卡片:20px
- Tag:999px
---
# 第十五章 阴影 Token
原则:
> 极轻阴影。
推荐:
```text
shadow-card =
0 4px 16px rgba(0,0,0,0.04)
```
浮层:
```text
shadow-popup =
0 8px 32px rgba(0,0,0,0.10)
```
不要使用明显深阴影。
---
# 第十六章 边框 Token
```text
border-width = 1px
border-color = #EEEEEE
```
Input Focus:
```text
border-color-focus = color-primary
```
错误:
```text
border-color-error = color-danger
```
---
# 第十七章 动效 Token
```text
motion-fast = 120ms
motion-normal = 200ms
motion-slow = 300ms
```
缓动:
```text
ease-standard = ease-out
```
不要超过500ms的常规UI动效。
---
# 第十八章 图标规范
建议统一线性图标。
基础尺寸:
```text
icon-xs = 16px
icon-sm = 20px
icon-md = 24px
icon-lg = 32px
```
图标库建议保持统一风格。
不要混用:
- 填充图标
- 卡通图标
- 3D图标
- 多套不同图标库
---
# 第十九章 Button组件
组件名:
```text
Button
```
支持Variant:
```text
primary
secondary
text
danger
ghost
```
支持Size:
```text
small
medium
large
```
---
# 第二十章 Primary Button
```text
height = 48px
radius = 12px
background = color-primary
text = white
font-size = 16px
font-weight = 500
```
Hover/Press:
```text
color-primary-active
```
Disabled:
```text
background = color-bg-disabled
text = color-disabled-text
```
---
# 第二十一章 Secondary Button
```text
height = 48px
background = #FFFFFF
border = color-primary
text = color-primary
```
典型场景:
- 查看资料
- 返回修改
- 稍后再聊
- 放宽条件
---
# 第二十二章 Text Button
没有背景。
用于:
- 编辑
- 查看更多
- 取消喜欢
- 解除拉黑
---
# 第二十三章 Danger Button
用于:
- 拉黑
- 封禁
- 注销
- 删除
背景方式建议:
普通用户端:
> 红色文字/描边优先。
后台严重操作:
> 可使用红色实心按钮。
---
# 第二十四章 Button状态
每个按钮必须支持:
```text
default
pressed
loading
disabled
```
Loading状态:
```text
加载图标 + 文案
```
例如:
> 提交中...
禁止用户重复点击。
---
# 第二十五章 Input组件
组件名:
```text
Input
```
高度:
```text
48px
```
支持:
```text
label
placeholder
prefix
suffix
helperText
errorText
disabled
```
---
# 第二十六章 Input状态
```text
default
focus
filled
error
disabled
```
错误状态:
```text
红色边框
+
字段下方错误文字
```
不要只用红框,不显示原因。
---
# 第二十七章 Textarea组件
用于:
- 自我介绍
- 举报说明
- 红娘服务说明
- 意见反馈
建议最小高度:
```text
120px
```
支持字数统计:
```text
128 / 500
```
---
# 第二十八章 Select组件
移动端优先:
> Picker / Bottom Sheet
PC后台:
> Dropdown Select
不要在微信小程序中强行模拟PC下拉菜单。
---
# 第二十九章 RadioGroup组件
整行可点击。
示例:
```text
○ 必须符合
● 最好符合
```
组件:
```text
RadioGroup
RadioItem
```
---
# 第三十章 Checkbox/TagSelect组件
婚恋标签选择建议使用:
```text
TagSelect
```
例如:
```text
[旅行] [运动] [阅读]
```
未选中:
```text
浅灰背景
深灰文字
```
选中:
```text
color-primary-light
color-primary
```
---
# 第三十一章 Switch组件
用于:
- 隐私设置
- 是否接收活动推荐
- 是否允许搜索
- 是否接受红娘推荐
建议使用系统化Switch。
---
# 第三十二章 SliderRange组件
用于:
- 年龄
- 身高
组件:
```text
RangeSlider
```
同时显示左右值:
```text
28岁 —— 35岁
```
不要只显示滑块而看不到当前数值。
---
# 第三十三章 ProgressBar组件
用于:
- 资料完善进度
- 注册流程
参数:
```text
value
max
showText
```
颜色:
```text
color-primary
```
---
# 第三十四章 StatusBadge组件
统一组件:
```text
StatusBadge
```
支持状态:
```text
verified
reviewed
reviewing
need_edit
success
pending
danger
disabled
service
```
---
# 第三十五章 StatusBadge视觉
## 已实名
```text
background = color-success-light
text = color-success
```
文案:
> 已实名
---
## 已审核
```text
background = color-success-light
text = color-success
```
---
## 审核中
```text
background = color-warning-light
text = color-warning
```
---
## 需修改
```text
background = color-warning-light
text = color-warning
```
---
## 高风险
```text
background = color-danger-light
text = color-danger
```
---
# 第三十六章 UserCard组件
UserCard是平台核心组件之一。
用于:
- 找对象
- 喜欢列表
- 红娘候选
- 活动意向名单
基础属性:
```text
avatar
displayName
age
height
region
education
occupation
maritalStatus
verified
reviewed
```
---
# 第三十七章 UserCard移动端结构
```text
┌────────────────────────┐
│ [照片] 王女士 · 32岁 │
│ 165cm · 丹阳 │
│ 本科 · 教师 │
│ 未婚 │
│ ✓ 已实名 │
└────────────────────────┘
```
推荐:
```text
avatar:88×112px
```
比例约:
```text
4:5
```
---
# 第三十八章 UserCard交互
整卡:
> 可点击进入详情。
不要在普通列表里堆:
- 喜欢
- 举报
- 拉黑
- 红娘推荐
这些应进入详情或特定业务场景。
---
# 第三十九章 RecommendCard组件
用于:
> 首页每日推荐。
继承UserCard,并增加:
```text
photos
recommendReasons
likeStatus
actionMode
```
---
# 第四十章 RecommendCard结构
```text
照片区域
↓
用户核心资料
↓
认证状态
↓
推荐理由
↓
操作栏
```
---
# 第四十一章 RecommendReason组件
组件:
```text
RecommendReason
```
样式:
```text
background = color-primary-light
radius = 12px
padding = 12~16px
```
最多显示:
> 3~4条。
---
# 第四十二章 RecommendReason文案
每条使用:
```text
✓ 年龄符合双方要求
```
不要写:
```text
算法得分 +15
权重命中
```
---
# 第四十三章 ActivityCard组件
属性:
```text
cover
title
date
time
location
feeType
status
registrationCount
```
V1前台不要重点展示报名人数。
---
# 第四十四章 ActivityCard结构
```text
封面
活动名称
时间
地点
公益免费标签
状态
```
---
# 第四十五章 ActivityStatus
支持:
```text
报名中
审核中
报名成功
已满
已结束
已签到
```
---
# 第四十六章 ProfileSection组件
用于用户详情页。
结构:
```text
标题
内容
```
例如:
```text
关于TA
────────
婚姻状况 未婚
学历 本科
```
统一Padding:
```text
16px
```
统一Radius:
```text
16px
```
---
# 第四十七章 InfoRow组件
用于:
```text
左侧Label
右侧Value
```
例如:
```text
婚姻状况 未婚
```
属性:
```text
label
value
highlight
```
---
# 第四十八章 PhotoGrid组件
用于:
- 用户生活照片
- 举报证据
- 意见反馈
用户资料中:
```text
2~3列
```
照片比例:
```text
1:1
```
点击:
> Preview。
---
# 第四十九章 PhotoUploader组件
支持:
```text
single
multiple
maxCount
compress
preview
delete
```
主头像模式:
```text
single
```
生活照:
```text
multiple
```
---
# 第五十章 Avatar/ProfilePhoto规范
婚恋用户头像建议:
> 尽量使用真实照片矩形裁切。
列表:
```text
4:5
```
聊天:
```text
1:1
圆角
```
不要所有地方都裁成圆形。
---
# 第五十一章 NoticeBar组件
用于:
- 聊天安全提醒
- 审核提示
- 活动提示
Variant:
```text
info
warning
success
danger
```
聊天安全:
```text
warning
```
---
# 第五十二章 Toast组件
适用于即时轻反馈。
例如:
```text
已喜欢
保存成功
报名已提交
已解除拉黑
```
展示:
```text
1.5~2秒
```
不允许承载复杂信息。
---
# 第五十三章 Dialog组件
用于重要二次确认。
结构:
```text
title
description
primaryAction
secondaryAction
```
适用:
- 解除匹配
- 拉黑
- 暂停寻找
- 成功牵手
- 封禁
- 删除
---
# 第五十四章 BottomSheet组件
移动端优先用于:
- 选择操作
- 解除匹配原因
- 简单Picker
- 更多菜单
最大高度建议:
```text
80vh
```
---
# 第五十五章 MoreMenu组件
用户详情和聊天右上角:
```text
···
```
内容:
```text
查看资料
解除匹配
举报
拉黑
```
根据业务状态动态显示。
---
# 第五十六章 EmptyState组件
属性:
```text
icon
title
description
actionText
action
```
示例:
```text
暂无聊天
双方互相喜欢后,
就可以开始交流。
[ 去看看推荐 ]
```
---
# 第五十七章 ErrorState组件
示例:
```text
网络好像有点问题
请检查网络后重新加载。
[ 重新加载 ]
```
不要展示技术堆栈信息。
---
# 第五十八章 Loading组件
页面加载:
优先:
> Skeleton。
按钮:
> Spinner。
不要全屏长期显示大型Loading动画。
---
# 第五十九章 Skeleton组件
至少支持:
```text
UserCardSkeleton
RecommendCardSkeleton
ListSkeleton
ProfileSkeleton
```
避免页面加载时跳动过大。
---
# 第六十章 MatchSuccess组件
用于双向喜欢。
属性:
```text
userAvatar
targetAvatar
targetName
primaryAction
```
视觉:
> 简洁爱心+双头像。
不要做娱乐化动画。
---
# 第六十一章 ChatListItem组件
属性:
```text
avatar
name
lastMessage
time
unreadCount
```
样式接近用户熟悉的微信消息列表。
---
# 第六十二章 ChatBubble组件
支持:
```text
self
other
system
```
用户本人:
> 右侧。
对方:
> 左侧。
系统安全信息:
> 中间。
---
# 第六十三章 RiskNotice组件
用于聊天风险提示。
Variant:
```text
money
fraud
privacy
```
但V1视觉统一,不需要不同颜色体系。
默认警告色。
---
# 第六十四章 Tab组件
用户端:
```text
SegmentTabs
```
例如:
```text
互相喜欢 | 我喜欢的 | 喜欢我的
```
后台:
```text
PageTabs
```
例如:
```text
待审核 | 审核中 | 已通过
```
---
# 第六十五章 BottomTabBar组件
固定五项:
```text
首页
找对象
消息
活动
我的
```
必须使用统一图标和文案。
消息有未读时:
> 红点或数字Badge。
---
# 第六十六章 Navbar组件
小程序页面统一:
```text
title
back
rightAction
```
尽量使用微信原生导航行为。
---
# 第六十七章 SearchBar组件
后台和部分用户搜索使用。
用户端:
> 不作为主入口。
后台:
用于:
- 用户搜索
- 活动人员搜索
- 红娘用户搜索
---
# 第六十八章 FilterBar组件
后台列表统一使用。
结构:
```text
搜索
筛选项
查询
重置
```
避免每个后台页面重新布局。
---
# 第六十九章 DataTable组件
红娘端、后台核心组件。
支持:
```text
columns
pagination
sorting
selection
actions
loading
empty
```
---
# 第七十章 DataTable视觉规范
表头:
```text
14px
500
浅灰背景或白背景
```
表格正文:
```text
14px
```
行高:
```text
52~56px
```
---
# 第七十一章 TableRowAction组件
每行最多:
```text
2个直接操作 + 更多
```
例如:
```text
查看 | 审核 | 更多
```
---
# 第七十二章 AdminSidebar组件
宽度:
```text
220~240px
```
状态:
```text
default
active
collapsed
```
V1可不优先做折叠。
---
# 第七十三章 AdminHeader组件
包含:
```text
当前机构
通知
当前用户
退出
```
不加入无关信息。
---
# 第七十四章 StatCard组件
后台工作台统一组件。
属性:
```text
title
value
trend
status
action
```
示例:
```text
待审核资料
12
```
---
# 第七十五章 StatCard规则
待办类:
> 可点击。
普通统计:
> 不一定可点击。
不要用大量渐变背景。
---
# 第七十六章 RiskLevelTag组件
后台风险:
```text
正常
关注
高风险
封禁
```
颜色:
正常:
```text
success
```
关注:
```text
warning
```
高风险:
```text
danger
```
封禁:
```text
深灰/危险
```
---
# 第七十七章 ReviewStatus组件
用户审核:
```text
待审核
审核中
需修改
已通过
已拒绝
```
统一各端显示。
---
# 第七十八章 ServiceStatus组件
红娘:
```text
待分配
已接单
服务中
待跟进
已完成
```
---
# 第七十九章 ActivityManagementStatus组件
后台活动:
```text
草稿
报名中
报名结束
进行中
已结束
```
---
# 第八十章 FormSection组件
后台长表单使用。
例如:
```text
基本信息
活动时间
人数限制
报名设置
```
减少一个大表单堆几十个字段。
---
# 第八十一章 ConfirmDangerDialog组件
后台高风险操作统一使用。
例如封禁:
```text
确认封禁该用户?
封禁后用户将无法继续使用婚恋服务。
原因:
[请选择]
[确认封禁]
[取消]
```
必须要求原因。
---
# 第八十二章 Pagination组件
默认:
```text
20条/页
```
支持:
```text
20
50
100
```
V1默认建议只开放20/50。
---
# 第八十三章 DatePicker组件
移动端:
> 微信Picker。
后台:
> 日期时间组件。
统一存储时间格式由后端定义,前端负责本地化显示。
---
# 第八十四章 FormValidation规范
字段错误优先显示在字段下方。
例如:
```text
身份证号码
[32xxxxxxxxxxxx]
身份证号码格式不正确
```
不要提交后只顶部显示:
> 表单有错误。
---
# 第八十五章 必填标识
必填项:
```text
*
```
但首次资料填写中尽量通过产品流程减少大量星号。
可选项明确标注:
> 选填
---
# 第八十六章 Disabled状态
禁用组件必须:
- 视觉明显变淡
- 无点击响应
- 如用户可能疑惑,给说明
例如:
```text
资料审核中,暂不能修改婚姻状态。
```
---
# 第八十七章 图片占位组件
头像缺失:
不要默认用随机人物照片。
使用:
> 中性用户轮廓图标。
但正式进入匹配前:
> 必须上传真实头像。
---
# 第八十八章 内容超长规则
用户名称:
> 单行省略。
职业:
> 单行省略。
个人介绍:
详情页完整展示。
列表:
> 不显示或最多2行。
---
# 第八十九章 标签数量限制
UserCard:
最多:
```text
2~3个状态标签
```
详情页兴趣:
最多:
```text
8个
```
避免标签海洋。
---
# 第九十章 层级 Z-Index Token
建议统一:
```text
z-base = 1
z-sticky = 100
z-tabbar = 200
z-dropdown = 500
z-modal = 1000
z-toast = 2000
```
---
# 第九十一章 Safe Area规范
微信小程序底部:
必须考虑:
```text
env(safe-area-inset-bottom)
```
底部固定按钮和Tab不能被系统Home Indicator遮挡。
---
# 第九十二章 PC响应式断点
```text
breakpoint-md = 1024px
breakpoint-lg = 1280px
breakpoint-xl = 1440px
```
红娘端/后台:
V1优先优化:
```text
1280+
```
---
# 第九十三章 用户端组件命名建议
前端目录:
```text
components/
button/
input/
status-badge/
user-card/
recommend-card/
activity-card/
profile-section/
info-row/
photo-grid/
photo-uploader/
notice-bar/
empty-state/
error-state/
loading/
match-success/
chat-bubble/
bottom-sheet/
```
---
# 第九十四章 后台组件命名建议
```text
admin-components/
admin-sidebar/
admin-header/
stat-card/
filter-bar/
data-table/
review-status/
risk-level-tag/
form-section/
confirm-danger-dialog/
```
---
# 第九十五章 页面不得直接写死颜色
禁止:
```css
color: #E96B6B;
```
页面层应使用:
```css
color: var(--color-primary);
```
或框架对应的Token引用方式。
---
# 第九十六章 页面不得直接写死通用间距
避免:
```css
margin-top: 17px;
```
优先:
```text
spacing-4
spacing-5
spacing-6
```
只有特殊布局才允许例外。
---
# 第九十七章 微信小程序Token建议
可统一定义:
```text
--color-primary
--color-primary-light
--color-success
--color-warning
--color-danger
--color-info
--text-primary
--text-secondary
--text-tertiary
--bg-page
--bg-card
--radius-sm
--radius-md
--radius-lg
--spacing-1
--spacing-2
--spacing-3
--spacing-4
--spacing-5
--spacing-6
```
---
# 第九十八章 推荐Token代码结构示例
```text
theme/
colors
typography
spacing
radius
shadow
motion
```
不要把所有样式变量放在一个无法维护的大文件中。
---
# 第九十九章 组件状态统一原则
所有可交互组件至少考虑:
```text
默认
按下
加载
禁用
错误
空状态
```
需要网络数据的组件还要考虑:
```text
Loading
Error
Empty
Loaded
```
---
# 第一百章 组件复用红线
以下业务不能自行重新造组件:
- 用户卡片
- 推荐卡片
- 活动卡片
- 状态标签
- 空状态
- 弹窗
- Toast
- 审核状态
- 风险状态
- 表格
- 筛选栏
---
# 第一百零一章 组件文案原则
组件内部不要写死业务文案。
例如:
错误:
```text
Button组件内部默认文案:立即报名
```
正确:
```text
Button接受children/text参数
```
业务文案由页面传入。
---
# 第一百零二章 无障碍规范
Button:
> 必须有文字或accessible label。
纯图标:
> 必须提供说明。
颜色状态:
> 必须同时有文字。
例如:
不能只有红色点。
应该:
> 高风险
---
# 第一百零三章 点击热区
移动端交互元素最小:
```text
44×44px
```
文字“编辑”也应通过padding扩大可点击区域。
---
# 第一百零四章 用户端视觉密度
原则:
> 中低密度。
不追求一屏展示尽可能多数据。
尤其:
- 首页
- 详情
- 活动
- 红娘服务
都要有足够留白。
---
# 第一百零五章 后台视觉密度
原则:
> 中等密度。
可以比用户端紧凑,但避免传统ERP式高密度。
---
# 第一百零六章 头像审核状态显示
如果用户资料处于:
> 审核中
主头像仍然可以给本人看。
但在其他用户侧:
> 未审核用户不能进入正常推荐池。
因此不需要设计“别人看到审核中头像”的场景。
---
# 第一百零七章 敏感字段组件
后台建议:
```text
SensitiveField
```
默认:
```text
320***********1234
```
具备权限者点击:
> 查看完整信息
系统记录访问日志。
---
# 第一百零八章 MobileStickyAction组件
用于:
- 用户详情喜欢
- 活动报名
- 表单提交
固定底部。
必须:
- 避开TabBar
- 避开safe area
- 有白色背景
- 顶部轻分割线
---
# 第一百零九章 StepProgress组件
用于首次资料填写。
示例:
```text
完善资料 2/5
██████░░░░
```
不需要复杂Step图标。
---
# 第一百一十章 PageHeader组件
用户端简单:
```text
标题
可选说明
```
后台:
```text
页面标题
说明
主要操作
```
例如:
```text
活动管理 + 创建活动
管理公益婚恋线下活动
```
---
# 第一百一十一章 Alert组件
后台使用。
例如:
> 修改匹配权重会影响后续推荐,请谨慎操作。
Variant:
```text
info
warning
danger
```
---
# 第一百一十二章 Drawer组件
后台可用于:
- 快速查看用户
- 快速查看报名详情
不用于复杂审核。
复杂审核进入完整页面。
---
# 第一百一十三章 Tooltip组件
后台可以使用。
用户小程序:
> 尽量不用Tooltip。
移动端不适合依赖Hover。
---
# 第一百一十四章 Breadcrumb规范
后台页面层级较深时使用。
例如:
```text
活动管理 / 丹阳青年公益相亲会 / 报名管理
```
小程序不需要。
---
# 第一百一十五章 NotificationBadge组件
Tab消息:
```text
1~99
99+
```
系统通知:
可以只显示红点。
---
# 第一百一十六章 上传进度
照片上传必须有:
```text
上传中
失败
成功
```
上传失败:
显示:
> 重新上传。
不要让失败图片直接消失。
---
# 第一百一十七章 网络请求反馈
提交类操作:
Button Loading。
列表刷新:
Skeleton/局部Loading。
不使用:
> 点击后整个页面遮罩5秒。
---
# 第一百一十八章 防重复提交
以下操作必须前端防重复:
- 实名提交
- 资料提交审核
- 喜欢
- 活动报名
- 红娘申请
- 举报
- 反馈提交
同时后端也要保证幂等。
---
# 第一百一十九章 组件测试重点
每个组件必须验证:
- 普通状态
- 超长文字
- 无图片
- 弱网
- 禁用
- 加载
- 错误
- 不同屏幕宽度
---
# 第一百二十章 首批必须完成的组件
P0组件:
```text
Button
Input
Textarea
Picker
RadioGroup
TagSelect
Switch
RangeSlider
ProgressBar
StatusBadge
UserCard
RecommendCard
RecommendReason
ProfileSection
InfoRow
PhotoUploader
Toast
Dialog
BottomSheet
NoticeBar
EmptyState
ErrorState
Skeleton
BottomTabBar
Navbar
MobileStickyAction
```
---
# 第一百二十一章 第二批组件
P1:
```text
ActivityCard
MatchSuccess
ChatListItem
ChatBubble
RiskNotice
PhotoGrid
StepProgress
NotificationBadge
```
---
# 第一百二十二章 后台首批组件
```text
AdminSidebar
AdminHeader
PageHeader
StatCard
FilterBar
DataTable
TableRowAction
StatusBadge
ReviewStatus
RiskLevelTag
FormSection
Dialog
Drawer
Pagination
Alert
SensitiveField
```
---
# 第一百二十三章 组件验收标准
任何通用组件完成后必须回答:
### 能否在两个以上页面复用?
不能:
可能不应该进入公共组件库。
### 是否存在写死业务字段?
有:
需要重新抽象。
### 状态是否完整?
至少:
> 默认、加载、禁用、错误。
### 是否符合Token?
不能出现无规范颜色和间距。
---
# 第一百二十四章 Design Token验收标准
项目最终应达到:
> 修改一次主色,整个平台同步变化。
> 修改一次卡片圆角,所有卡片同步变化。
> 修改一次页面间距,所有标准页面遵循。
> 不需要人工逐页面搜索CSS修改。
---
# 第一百二十五章 最终开发原则
前端开发必须遵循:
> 页面由组件组成。
> 组件由Token控制。
> Token统一视觉。
> 业务逻辑不直接侵入基础组件。
最终目标不是做一套“漂亮页面”,而是建立一套:
> **可复用、可维护、可扩展、后期新增页面不容易跑偏的前端设计系统。**
V1.0所有页面都应尽可能从本规范中的组件组合产生,而不是每个页面重新设计一遍。