Files
lehuo/docs/15_FRONTEND_DESIGN_SPEC.md
T

1672 lines
21 KiB
Markdown
Raw Normal View History

2026-08-12 14:35:12 +08:00
# 15 前端界面设计与实现规范(Codex 执行版)
> 项目:乐活公益·暖心服务平台
> 版本:V1.0
> 适用范围:微信小程序端 + Web 管理后台
> 目标:Codex 必须依照本文档实现,不得自行改变既定视觉方向、信息架构和核心交互。
> 关联文档:`01_PROJECT_CONSTITUTION.md`、`02_PRODUCT_PRD_V1.md`、`07_UI_UX.md`、`09_TEST_ACCEPTANCE.md`
> 视觉参考:`ui_reference.png`
---
# 一、设计总则
## 1.1 产品气质
本项目面向公益服务对象、老年人、困境妇女儿童、残疾人、志愿者、公益工作人员和社会爱心人士。
视觉关键词:
- 温暖
- 可信
- 清晰
- 简洁
- 亲和
- 公益感
- 服务感
- 不商业化
- 不娱乐化
- 不科技炫技
界面必须让普通用户第一眼就知道:
> “我在哪里、我能做什么、下一步点哪里。”
---
## 1.2 设计风格
整体采用:
- 浅色背景;
- 卡片式信息组织;
- 大留白;
- 大按钮;
- 圆角;
- 简洁图标;
- 真实公益服务照片;
- 橙色为主色;
- 绿色、蓝色、紫色作为业务辅助色。
禁止:
- 大面积深色背景;
- 霓虹渐变;
- 玻璃拟态;
- 复杂动效;
- 过度阴影;
- 过多装饰插画;
- 信息密度过高;
- 商城化设计;
- 抽奖、积分、红包等强商业视觉;
- 短视频平台式沉浸内容流。
---
# 二、视觉设计系统
## 2.1 主色
推荐 CSS / Design Token:
```ts
export const colors = {
primary: '#FF6B35',
primaryLight: '#FFF1EB',
primaryHover: '#FF7A4D',
primaryPressed: '#E95A28',
success: '#52C41A',
info: '#1890FF',
warning: '#FAAD14',
purple: '#722ED1',
danger: '#E34D59',
textPrimary: '#1F2329',
textSecondary: '#646A73',
textTertiary: '#8F959E',
textDisabled: '#B8BDC6',
background: '#F5F5F5',
surface: '#FFFFFF',
border: '#E5E6EB',
divider: '#EBEDF0',
};
```
### 使用规则
橙色:
- 核心 CTA;
- “我需要帮助”;
- “提交申请”;
- “立即参与”;
- 强调数字。
绿色:
- 已完成;
- 服务正常;
- 志愿服务;
- 成功状态。
蓝色:
- 信息类;
- 进行中;
- 老年/残障等部分入口可辅助使用。
紫色:
- 妇女儿童、心理关怀类辅助标签;
- 禁止大面积使用。
红色:
- 错误、风险、失败;
- 不用于普通公益强调。
---
## 2.2 字体
优先使用系统字体。
微信小程序:
```text
-apple-system
BlinkMacSystemFont
"Helvetica Neue"
"PingFang SC"
"Microsoft YaHei"
sans-serif
```
Web 后台:
同上。
---
## 2.3 字号
### 小程序
```text
页面大标题 24px / 600
区块标题 20px / 600
卡片标题 17px / 600
正文 16px / 400
辅助文字 14px / 400
标签 12~13px
主要按钮 17px / 600
```
核心原则:
普通正文不得默认使用 12px。
适老场景:
- 可提供“大字模式”二期;
- V1 默认已经采用偏大字号。
---
## 2.4 圆角
```text
小卡片:12px
大卡片:16px
按钮:12~24px
头像:50%
图片:12px
标签:6px
```
---
## 2.5 间距体系
采用 4 的倍数:
```text
4 / 8 / 12 / 16 / 20 / 24 / 32
```
推荐:
```text
页面左右边距:16px
卡片内部:16px
区块之间:20~24px
列表项高度:56px 以上
主要按钮高度:48~52px
```
---
## 2.6 阴影
仅轻阴影:
```css
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06);
```
禁止重阴影。
---
# 三、图标规范
优先使用 TDesign 官方图标。
禁止:
- Emoji 代替正式图标;
- 多套图标风格混用;
- 图标无文字解释地承担核心操作。
核心图标:
```text
首页
服务
志愿者
项目
活动
用户
电话
消息
位置
日历
记录
回访
评价
文件
上传
提醒
公益爱心
```
---
# 四、图片规范
公益项目展示使用真实、温暖、尊重被服务对象尊严的照片。
禁止:
- 悲情营销;
- 刻意展示脆弱、哭泣、伤残特征;
- 暴露儿童身份;
- 暴露家庭住址;
- 未授权特写;
- 过度摆拍。
建议图片比例:
```text
首页 Banner:16:7
项目卡片:16:9
活动卡片:16:9
头像:1:1
服务记录:4:3
```
---
# 五、小程序底部导航
固定四项:
```text
首页
服务
公益
我的
```
图标 + 中文。
默认:
- 未选中:灰色;
- 选中:主色橙。
不要设计第五个 Tab。
---
# 六、小程序首页
## 6.1 页面目标
用户 3 秒内知道:
1. 这里是乐活公益;
2. 可以申请帮助;
3. 可以帮家人申请;
4. 可以参与公益。
---
## 6.2 页面结构
```text
AppBar
品牌欢迎区 / Banner
核心入口区
服务分类区
服务进度入口
公益项目
公益活动
加入公益
Footer Safe Area
```
---
## 6.3 顶部
左:
- 乐活公益 Logo
- “乐活公益”
右:
- 微信原生胶囊区域,不模拟。
---
## 6.4 Banner
文案建议:
```text
用爱连接 · 让爱传递
乐活公益 · 助人为乐 · 服务社会
```
Banner 不做自动轮播。
CTA 不超过 1 个。
---
## 6.5 核心入口
必须视觉突出:
### 第一按钮
```text
我需要帮助
```
### 第二按钮
```text
帮家人申请
```
允许上下排列或左右双卡。
不得把这两个入口隐藏到二级菜单。
---
## 6.6 首页功能栏目
2026-08-12 14:35:12 +08:00
一个高权重主入口:
2026-08-12 14:35:12 +08:00
```text
帮扶服务
2026-08-12 14:35:12 +08:00
```
六个次级入口,使用 3×2 布局:
2026-08-12 14:35:12 +08:00
```text
志愿服务
公益项目
公益动态
旧物善用
财务公开
服务进度
2026-08-12 14:35:12 +08:00
```
具体服务类别进入帮扶服务后选择,不在首页重复展示。每项:
2026-08-12 14:35:12 +08:00
- 图标;
- 文字;
- 点击区域 >= 48px。
“服务进度”在主功能区提供入口后,不在下方便捷入口重复展示;便捷入口不展示“旧物善用”。
2026-08-12 14:35:12 +08:00
---
## 6.7 服务进度
若用户存在申请:
显示:
```text
我的服务
服务编号:LHXXXXXXXX
当前状态:工作人员正在联系
查看进度 >
```
若无:
不显示此卡片。
---
## 6.8 公益项目
标题:
```text
公益项目 更多 >
```
项目卡片内容:
- 图片
- 项目名
- 简介
- 服务对象
- 当前进展(可选)
- 查看详情
不要首页展示复杂捐赠进度。
---
# 七、帮扶服务页面(内部模型:服务申请)
2026-08-12 14:35:12 +08:00
## 7.1 页面原则
不一次展示长表单。
采用步骤式:
```text
步骤 1:需要什么帮助
步骤 2:帮谁申请
步骤 3:联系方式
步骤 4:描述需求
步骤 5:确认提交
```
---
## 7.2 步骤一:服务类型
大卡片选择:
```text
关爱老人
困境妇女
儿童关爱
残障帮扶
生活困难
其他
```
每张卡片包含:
- 图标/图片;
- 名称;
- 一句话解释。
---
## 7.3 步骤二:申请关系
```text
为自己申请
帮家人申请
社区/机构代办
志愿者代办
其他
```
---
## 7.4 步骤三:基本联系信息
字段:
```text
服务对象姓名/称呼
联系电话
所在地区
期望联系时间(可选)
```
精确地址不在第一步强制收集。
---
## 7.5 步骤四:需求描述
组件:
- 多行文本框;
- 上传图片;
- 字数提示;
- 可选“是否需要上门”;
- 可选“行动是否不方便”。
文案:
```text
请简单描述目前遇到的困难或希望得到的帮助
```
---
## 7.6 步骤五:确认
必须显示:
- 服务类型;
- 服务对象;
- 联系方式脱敏;
- 需求摘要;
- 隐私授权。
按钮:
```text
提交申请
```
---
## 7.7 提交成功
成功页:
图标:
✅
标题:
```text
申请已提交
```
说明:
```text
乐活公益工作人员将根据实际情况与您联系。
```
显示:
```text
服务编号
提交时间
当前状态
```
按钮:
```text
查看服务进度
返回首页
```
---
# 八、我的服务 / 进度页面
采用 Timeline。
状态:
```text
已提交
工作人员联系
需求评估
服务安排
服务中
服务完成
回访
```
当前状态高亮。
每个节点:
- 时间;
- 状态;
- 简要说明。
不向用户展示内部技术状态码。
---
# 九、服务对象档案页面(后台为主)
## 9.1 页面结构
```text
头像 / 姓名 / 标签
基本资料
联系方式
服务需求
历史服务
回访记录
附件
操作
```
---
## 9.2 顶部摘要
示例:
```text
张奶奶
女 / 78岁
[关爱老人] [独居] [重点关爱]
```
右侧操作:
```text
联系
新建服务
新增回访
编辑资料
```
---
## 9.3 敏感字段
默认脱敏。
点击“查看完整信息”:
- 检查权限;
- 记录审计;
- 可提示“此次查看将被记录”。
---
# 十、服务记录页面
记录卡片:
```text
上门探访
2026-08-10 10:00
服务人员:李志愿者
服务时长:1.5小时
服务内容:
……
服务照片:
[图][图][图]
服务对象反馈:
★★★★★
```
工作人员可新增。
普通用户只能查看与自己相关、允许公开给本人/监护人的记录。
---
# 十一、反馈与评价
页面保持简单:
```text
本次服务您满意吗?
★★★★★
是否还需要帮助?
○ 不需要
○ 需要继续帮助
其他反馈
[输入框]
提交反馈
```
如果选择“需要继续帮助”,提交后明确:
```text
我们已记录您的需求,工作人员会继续跟进。
```
---
# 十二、公益项目详情
结构:
```text
封面
项目名称
项目标签
项目简介
项目目标
服务内容
项目进展
项目动态
参与方式
```
底部固定 CTA:
```text
我要参与
```
如果没有公开募捐能力,不出现“立即捐款”。
---
# 十三、志愿者中心
## 13.1 顶部身份卡
```text
李志愿者
已认证志愿者
累计服务 56小时
参与活动 23次
帮助人数 18人
```
---
## 13.2 快捷入口
```text
我的报名
服务中
已完成
服务时长
```
---
## 13.3 功能
```text
服务记录
培训学习
证书/荣誉
我的团队
设置
```
V1 中证书/荣誉可先预留,不强做。
---
# 十四、个人中心
顶部用户卡:
```text
头像
昵称
手机号脱敏
```
数据摘要:
```text
我的关注
我的收藏
我的捐赠(若未来合规开放)
我的服务
```
V1 建议优先:
```text
我的帮扶服务
2026-08-12 14:35:12 +08:00
我的活动
我的志愿服务
我的消息
我的评价
帮助与反馈
关于乐活
隐私设置
设置
```
---
# 十五、Web 管理后台整体布局
## 15.1 页面结构
桌面优先:
```text
左侧导航 240px
顶部栏 56px
主内容区
```
左侧导航深色或浅深蓝灰均可,但整体不应压迫。
---
## 15.2 导航
```text
工作台
服务申请
服务对象
服务工单
回访管理
志愿者管理
公益项目
公益活动
内容管理
数据统计
用户与权限
系统设置
```
审计日志只对高权限显示。
---
# 十六、后台工作台
## 16.1 顶部数据卡
最多 4~6 项:
```text
今日新申请
待联系
服务中
待回访
重点关爱
今日服务
```
---
## 16.2 图表
V1 最多 2~3 张:
```text
服务趋势
服务类型分布
本月任务完成情况
```
不要堆 10 个图。
---
## 16.3 快捷入口
```text
新增服务对象
新增工单
志愿者招募
发布公益活动
```
---
# 十七、服务申请列表
## 17.1 筛选
```text
关键词
服务类型
状态
负责人
时间范围
```
按钮:
```text
查询
重置
```
---
## 17.2 表格列
```text
服务编号
服务对象
服务类型
年龄/年龄段
联系电话(脱敏)
状态
提交时间
负责人
操作
```
操作:
```text
查看
受理
```
“编辑”不是所有状态都显示。
---
# 十八、服务对象列表
列:
```text
姓名
服务类别
年龄
联系电话
重点关爱
最近服务
下次回访
状态
操作
```
默认手机号脱敏。
---
# 十九、服务工单详情
必须采用状态进度条:
```text
待指派
已指派
服务中
待回访
已完成
```
内容分左右两栏:
左:
- 工单信息;
- 服务对象;
- 服务需求;
- 服务记录。
右:
- 负责人;
- 协作人员;
- 时间;
- 操作日志;
- 后续计划。
---
# 二十、回访中心
按待办设计,不做普通信息表。
顶部:
```text
今日待回访
已逾期
本周待回访
重点关爱
```
列表:
```text
服务对象
上次服务
回访原因
计划日期
负责人
状态
```
明显突出逾期项。
---
# 二十一、志愿者管理
列表字段:
```text
姓名
地区
技能
服务方向
累计时长
审核状态
最近参与
操作
```
支持:
```text
查看
审核
暂停
恢复
```
---
# 二十二、公益项目后台
项目详情后台分:
```text
基本信息
服务对象
项目工单
活动
成果数据
内容动态
```
V1 不做复杂甘特图。
---
# 二十三、活动管理
活动创建步骤:
```text
基本信息
招募设置
时间地点
内容说明
发布确认
```
报名列表:
```text
姓名
手机号
志愿者状态
报名时间
审核
签到
服务时长
```
---
# 二十四、内容管理
内容列表:
```text
标题
类型
状态
作者
发布时间
操作
```
状态:
```text
草稿
待审核
已发布
已归档
```
编辑器:
- Markdown / 富文本二选一;
- 建议成熟富文本;
- 禁止直接注入 HTML。
---
# 二十五、数据统计页面
## 25.1 顶部 KPI
```text
服务完成率
用户满意度
活跃志愿者
回访完成率
```
---
## 25.2 图表
```text
月度服务趋势
服务类型分布
项目服务量
志愿服务时长
```
所有指标必须能追溯到数据库真实数据。
---
# 二十六、响应式
## 小程序
覆盖常见微信手机尺寸。
最低关注:
- iPhone SE 宽度;
- 常见 Android 360~430 CSS px。
禁止水平滚动。
## 后台
主目标:
- 1366×768
- 1440×900
- 1920×1080
最低:
- 1280px 宽正常使用。
小于 1024:
- 导航折叠;
- 表格允许横向滚动;
- 不要求完整移动后台。
---
# 二十七、组件清单
Codex 必须优先抽取共享组件。
## 小程序
```text
AppHeader
HeroBanner
PrimaryActionCard
ServiceCategoryGrid
ProjectCard
ActivityCard
StatusTimeline
EmptyState
ErrorState
LoadingSkeleton
FormSection
PrivacyConsent
FileUploader
BeneficiarySummary
VolunteerProfileCard
BottomSafeArea
```
## 后台
```text
PageHeader
StatCard
FilterBar
StatusTag
SensitiveText
DataTable
EmptyState
ConfirmDialog
AuditNotice
BeneficiaryDrawer
ServiceTimeline
WorkOrderPanel
PermissionGuard
FilePreview
```
---
# 二十八、状态规范
所有页面至少实现:
```text
loading
success
empty
error
no-permission
offline / retry
```
不允许只有 success。
---
# 二十九、Skeleton
列表和首页采用 Skeleton。
不要用全屏 Spinner 阻断用户。
---
# 三十、Toast / Message
成功:
```text
提交成功
保存成功
操作已完成
```
失败:
```text
提交失败,请稍后重试
```
有 requestId 时:
```text
如问题持续,请联系客服并提供编号:XXXX
```
---
# 三十一、确认弹窗
只用于高风险操作:
- 取消服务;
- 删除草稿;
- 归档;
- 移除志愿者;
- 改关键状态;
- 导出敏感信息。
普通保存不弹确认。
---
# 三十二、权限 UI
前端可以隐藏无权限按钮,但:
> 前端权限不是安全边界。
所有敏感操作后端必须再次授权。
如果接口 403:
显示:
```text
您暂无权限执行此操作。
```
不得显示技术错误。
---
# 三十三、数据脱敏展示
手机号:
```text
138****8888
```
地址:
普通列表:
```text
丹阳市开发区
```
详细地址仅授权用户查看。
儿童信息:
列表优先使用:
```text
小明(化名)
```
具体规则由后台数据和权限控制。
---
# 三十四、可访问性与适老
必须:
- 点击区域充足;
- 对比度足够;
- 不仅靠颜色区分状态;
- 图标+文字;
- 表单错误有文字;
- 输入焦点明显;
- 主要按钮不放得过近;
- 不使用晃动/闪烁。
---
# 三十五、前端工程结构
## 小程序
```text
apps/miniprogram/
├─ miniprogram/
│ ├─ pages/
│ ├─ components/
│ ├─ services/
│ ├─ stores/
│ ├─ utils/
│ ├─ constants/
│ ├─ styles/
│ └─ assets/
├─ project.config.json
└─ tsconfig.json
```
---
## 后台
```text
apps/admin-web/src/
├─ api/
├─ assets/
├─ components/
├─ composables/
├─ constants/
├─ layouts/
├─ router/
├─ stores/
├─ styles/
├─ types/
├─ utils/
└─ views/
```
---
# 三十六、Design Token
必须统一定义,而不是组件内散落。
建议:
```ts
export const spacing = {
xs: 4,
sm: 8,
md: 12,
lg: 16,
xl: 24,
xxl: 32,
};
```
颜色、字号、圆角也集中。
---
# 三十七、API 使用规范
前端禁止页面内直接 `wx.request` / `fetch`。
统一:
```text
services/apiClient
```
统一处理:
- baseURL;
- auth;
- requestId;
- timeout;
- 401;
- 403;
- 429;
- 5xx;
- 重试策略。
---
# 三十八、前端缓存
可缓存:
- 用户基本资料;
- 公益项目公开列表;
- 服务分类;
- 表单草稿;
- UI 设置。
不得长期本地保存:
- 完整服务对象敏感档案;
- 详细家庭困难;
- 儿童敏感信息;
- 后台敏感数据;
- 长期访问 Token。
---
# 三十九、小程序性能
要求:
- 首页不要一次请求所有业务数据;
- 图片 lazy-load;
- 图片压缩;
- 分包;
- 首屏只加载必要资源;
- 避免超大组件库全量引入;
- 每个页面按需引用。
---
# 四十、管理后台性能
要求:
- 路由懒加载;
- 列表分页;
- 筛选防抖;
- 图表按需加载;
- 不一次性加载全部历史服务;
- 大附件不 preload。
---
# 四十一、前端测试
## Unit
测试:
- 状态格式化;
- 权限组件;
- 表单校验;
- 脱敏函数;
- timeline mapping;
- API error mapping。
## Component
关键组件:
- ServiceCategoryGrid
- StatusTimeline
- SensitiveText
- FileUploader
- DataTable
## E2E
必须覆盖:
```text
首页 → 我需要帮助 → 提交申请
首页 → 帮家人申请 → 提交申请
我的 → 我的服务 → 查看进度
后台 → 申请 → 受理 → 创建工单
后台 → 工单 → 服务记录 → 完成
后台 → 回访 → 继续帮助
志愿者 → 活动报名
```
---
# 四十二、视觉验收
Codex 完成页面后必须对照 `ui_reference.png`。
重点不是逐像素复制,而是保证:
- 色彩方向一致;
- 卡片风格一致;
- 信息密度一致;
- 主 CTA 一致;
- 圆角一致;
- 页面留白一致;
- 不出现复杂科技感;
- 不出现商业商城风。
---
# 四十三、页面完成定义
单页面只有满足以下条件才算完成:
- UI 完成;
- loading 完成;
- empty 完成;
- error 完成;
- 权限状态完成;
- API 对接完成;
- 表单校验完成;
- 防重复提交完成;
- 小尺寸测试完成;
- 真实设备测试完成;
- 无 Console Error;
- 无 TypeScript Error;
- 单元/组件测试通过;
- 对照设计规范完成。
---
# 四十四、Codex 前端执行指令
每次前端任务开始:
1. 阅读本文档;
2. 阅读 PRD;
3. 阅读 UI/UX 规范;
4. 检查 `ui_reference.png`;
5. 确认当前 Phase;
6. 只实现当前页面;
7. 不扩大功能。
每次页面完成后:
1. 运行 lint;
2. typecheck;
3. component tests;
4. build;
5. 截图;
6. 对照设计图自检;
7. 更新 `10_TASK_STATE.md`;
8. 汇报差异。
---
# 四十五、V1 前端开发顺序
严格顺序:
## Sprint UI-01
- Design Tokens
- 小程序导航
- 小程序首页
- 空状态/错误态/Skeleton
- 后台 Layout
## Sprint UI-02
- 服务类型选择
- 本人申请
- 代申请
- 提交成功
- 我的申请
- 服务进度
## Sprint UI-03
- 后台服务申请列表
- 服务申请详情
- 服务对象列表
- 服务对象详情
## Sprint UI-04
- 工单列表
- 工单详情
- 服务记录
- 回访中心
## Sprint UI-05
- 志愿者中心
- 志愿者后台
- 公益项目
- 公益活动
## Sprint UI-06
- 内容管理
- 数据统计
- 权限页面
- 系统设置
- 全局视觉修正
- 真机验收
未经批准,不要提前实现捐赠、AI、地图。
---
# 四十六、最终界面原则
前端实现结果必须使不同用户获得以下体验:
### 对老年人
“按钮大、字清楚、步骤少,我知道怎么求助。”
### 对家属
“我能方便地替父母或亲属申请。”
### 对志愿者
“我知道哪里需要我、我参加了什么、服务了多久。”
### 对工作人员
“每天打开后台,我就知道今天要处理什么。”
### 对负责人
“项目做了多少服务、服务了谁、完成到什么程度,都能看清。”
### 对社会公众
“我能看见乐活公益真正做了什么,也知道怎么参与。”
这就是 V1 前端是否成功的最终判断标准。