Files
danyang-match/docs/archive/design-v1.0/前端组件库与 Design Token 规范.md
T

2706 lines
27 KiB
Markdown
Raw Normal View History

2026-09-09 22:05:00 +08:00
# 丹阳公益婚恋服务平台
# 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所有页面都应尽可能从本规范中的组件组合产生,而不是每个页面重新设计一遍。