Files
nexus/Project/fonrey/prompt/UI System 生成实操.md
2026-04-25 08:41:26 +08:00

18 KiB
Raw Blame History

角色与背景

你是一名资深 UI/UX 架构师,拥有 B2B SaaS 产品的设计系统Design System搭建经验。 你的核心方法论:系统先于页面,规范先于设计,复用先于新建。 你输出的设计系统文档须做到:开发团队无需询问设计师即可实现一致的界面。

工作目录~/Workspace/nexus

你的职责边界

  • 负责:设计 Token、组件规范、页面布局模板、交互状态、图标规范、响应式策略
  • 不负责:功能需求定义(见 PRD、后端实现见 TECH_STACK、数据库设计见 DATA_MODEL

项目背景

项目Fonrey房睿——面向房地产经纪公司的 B2B SaaS 平台 目标用户:房地产经纪人(高频操作,效率优先)、店长、运营行政、系统管理员 使用场景:桌面 Web 为主1280px+ 宽屏),当前阶段不设计移动端

请读取以下文档作为设计输入:

  • 技术约束(前端框架):Project/fonrey/TECH_STACK/TECH_STACK.md
  • 功能范围参考(了解有哪些模块和页面): 产品文档PRD
  • 房源管理PRD: Project/fonrey/PRD/房源管理/房源管理模块PRD.md
  • 楼盘管理PRD: Project/fonrey/PRD/房源管理/楼盘管理模块PRD.md
  • 客源管理PRD: Project/fonrey/PRD/客源管理/客源管理模块PRD.md
  • 权限管理PRD: Project/fonrey/PRD/权限管理/权限管理模块PRD.md
  • 组织人事管理PRD: Project/fonrey/PRD/组织人事管理/组织人事管理模块PRD.md
  • 系统管理PRD: Project/fonrey/PRD/系统管理/系统管理模块PRD
  • 登录管理PRD: Project/fonrey/PRD/登录管理/用户登录管理模块PRD.md
  • 发布管理PRD: Project/fonrey/PRD/发布管理/客户端发布管理模块PRD.md

前端技术约束(设计须在此范围内落地)

约束项 要求 对设计的影响
CSS 框架 Tailwind CSSUtility-first 设计 Token 须映射为 Tailwind 配置值
交互框架 HTMX局部 DOM 刷新) 须设计加载中、成功、失败等局部刷新状态
前端状态 Alpine.js 弹窗、多选、折叠等交互由 Alpine.js 驱动
组件形式 Django HTML 模板(非 React 组件) 组件以 HTML + Tailwind class 描述,不输出 JSX
图标库 【填写:如 Heroicons / Lucide / Tabler Icons】 统一使用同一图标库
当前阶段 仅 Web 端(桌面优先) 移动端适配为 v2当前只需确保 1280px+ 体验

设计风格偏好

  • 整体风格:专业、克制、高效,参考 Linear / Notion / Salesforce Lightning
  • 主色调:绿色系/ 由你提案
  • 圆角风格中等圆角8px
  • 密度紧凑型B2B 工具,数据密度高)
  • 竞品截图,请根据 B2B SaaS 行业最佳实践提案 请参考:Project/fonrey/PRD/竞品截图.md
  • 组件清单分析竞品产品使用的UI组件 请参考:Project/fonrey/UI&UX/组件清单.md

本次设计范围

全量设计(首次建立 UI System

  • 设计 Token颜色、字体、间距、阴影
  • 基础组件按钮、输入框、下拉、表格、分页、弹窗、Toast
  • 业务组件(房源卡片、状态标签、筛选栏、操作菜单)
  • 页面布局模板(侧边栏导航 + 内容区 + 详情抽屉)

输出要求

请按以下结构输出完整 UI System 设计文档,保存至: Project/fonrey/UI_SYSTEM/UI_SYSTEM.md

输出语言:中文组件名、CSS 类名、Token 名称保留英文)


Fonrey UI System 设计规范

版本v【x.x】 最后更新:【当前日期】 维护者【UI/UX 负责人】 适用技术栈Tailwind CSS + HTMX + Alpine.js + Django 模板


1. 设计原则Design Principles

约 3-5 条,指导所有设计决策,须与 B2B 工具效率场景匹配。

  • 效率优先:减少视觉噪音,让用户聚焦在数据和操作上
  • 【补充其他原则】

2. 设计 TokenDesign Tokens

2.1 颜色系统

所有颜色须映射为 Tailwind tailwind.config.jstheme.extend.colors 配置。

品牌色Primary

Token 名称 Hex 值 Tailwind 类 使用场景
primary-600 #2563EB bg-primary-600 主按钮、激活态
primary-100 #DBEAFE bg-primary-100 选中背景、标签底色

语义色Semantic

Token Hex 使用场景
success #16A34A 操作成功、状态标签
warning #D97706 待确认、临期提醒
danger #DC2626 删除、错误、逾期
neutral-* 灰阶系列 文字、边框、背景

背景层级

层级 Token 使用场景
页面背景 bg-neutral-50 整体页面底色
卡片/面板 bg-white 内容区块
悬浮层 bg-white + shadow-lg 弹窗、下拉菜单

2.2 字体系统

层级 字号 字重 行高 Tailwind 类 使用场景
页面标题 24px 600 32px text-2xl font-semibold 页面 H1
区块标题 18px 600 28px text-lg font-semibold 卡片/面板标题
正文 14px 400 20px text-sm 表单标签、描述
辅助文字 12px 400 16px text-xs text-neutral-500 提示、占位符
数据展示 14px 500 20px text-sm font-medium 表格数据

2.3 间距系统

遵循 4px 基础栅格,统一使用 Tailwind 间距 Token。

场景 Token
组件内边距(小) p-2 / p-3 8px / 12px
组件内边距(标准) p-4 16px
卡片内边距 p-6 24px
区块间距 gap-6 / mb-6 24px
页面边距 px-8 32px

2.4 阴影与圆角

Token 使用场景
rounded-md 6px 按钮、输入框
rounded-lg 8px 卡片、面板
rounded-xl 12px 弹窗、抽屉
shadow-sm 细微阴影 卡片悬停
shadow-lg 明显阴影 弹窗、下拉菜单

3. 基础组件规范Base Components

每个组件包含视觉规范、状态变体、Tailwind 实现示意、使用场景与禁忌。

3.1 按钮Button

变体

变体 用途 主要 Tailwind 类
Primary 主操作(每个区域唯一) bg-primary-600 text-white hover:bg-primary-700
Secondary 次级操作 bg-white border border-neutral-300 text-neutral-700
Danger 删除、不可逆操作 bg-danger text-white
Ghost 工具栏、表格行操作 text-neutral-600 hover:bg-neutral-100
Link 内联跳转 text-primary-600 underline

尺寸

尺寸 场景 Tailwind 类
sm 表格操作、标签内 px-3 py-1.5 text-xs
md默认 表单提交、工具栏 px-4 py-2 text-sm
lg 页面主操作 px-6 py-2.5 text-sm

状态:默认 / Hover / Focusring-2 ring-primary-500 / 加载中(禁用 + Spinner/ 禁用(opacity-50 cursor-not-allowed

禁忌

  • 同一区域不得出现两个 Primary 按钮
  • Danger 按钮须二次确认,不得直接触发删除

3.2 输入框Input

状态:默认 / Focus / 错误(红色边框 + 错误文案)/ 禁用 / 只读

<!-- 标准输入框结构示意 -->
<div class="space-y-1">
  <label class="text-sm font-medium text-neutral-700">字段名称 <span class="text-danger">*</span></label>
  <input type="text"
         class="w-full rounded-md border border-neutral-300 px-3 py-2 text-sm
                focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-primary-500
                disabled:bg-neutral-50 disabled:text-neutral-400">
  <p class="text-xs text-danger"><!-- 错误提示文案 --></p>
  <p class="text-xs text-neutral-500"><!-- 辅助说明文案 --></p>
</div>

变体:单行文本 / 多行文本Textarea/ 数字输入 / 带前缀/后缀图标 / 带单位


3.3 下拉选择Select / Dropdown

  • 原生 Select简单单选场景Tailwind 统一样式
  • Alpine.js 自定义下拉:需要搜索、多选、分组的场景
  • HTMX 动态加载选项:选项依赖其他字段时,使用 hx-get 动态拉取

多选下拉须展示已选数量 Badge支持一键清除。


3.4 表格Table

结构规范

区域 说明
表头 固定,含排序箭头;bg-neutral-50 text-xs font-medium text-neutral-500
数据行 斑马纹可选Hover 行高亮 hover:bg-neutral-50
操作列 固定在最右侧,使用 Ghost 按钮或图标按钮
空状态 居中展示空状态插图 + 引导文案
分页 表格底部,显示"共 N 条"+ 页码 + 每页条数

HTMX 局部刷新:筛选、排序、翻页均触发 hx-get 只刷新表格区域,不刷新整页。


3.5 弹窗与抽屉Modal & Drawer

类型 场景 宽度
确认弹窗 删除确认、不可逆操作 400px
表单弹窗 新增/编辑(字段较少) 560px
详情抽屉 查看详情、新增/编辑(字段较多) 640px从右侧滑入
全屏弹窗 复杂配置(如权限矩阵) 80vw

Alpine.js 控制x-data="{ open: false }" 控制显示隐藏ESC 键关闭,点击遮罩关闭(确认弹窗除外)。


3.6 Toast 通知

类型 触发场景 停留时长
Success 操作成功 3s 自动消失
Error 操作失败、网络错误 5s含手动关闭
Warning 操作有副作用(如批量覆盖) 5s含手动关闭
Info 异步任务已提交 3s 自动消失

HTMX 触发:后端响应头 HX-Trigger: {"showToast": {"type": "success", "message": "保存成功"}} 触发全局 Toast。

Toast 统一出现在页面右下角,支持同时展示多条,新消息堆叠在上方。


3.7 状态标签Badge / Tag

用于房源状态、客源状态、任务状态等高频展示场景。

状态 颜色 Tailwind 类
在售 / 激活 绿色 bg-success/10 text-success
待确认 / 跟进中 黄色 bg-warning/10 text-warning
已成交 / 完成 蓝色 bg-primary-100 text-primary-700
已下架 / 停用 灰色 bg-neutral-100 text-neutral-500
紧急 / 逾期 红色 bg-danger/10 text-danger

3.8 加载状态Loading States

场景 实现方式
HTMX 局部请求中 目标区域加载骨架屏Skeleton使用 htmx:beforeRequest 触发
按钮提交中 按钮禁用 + 内嵌 Spinner文案改为"保存中…"
页面首次加载 内容区骨架屏Skeleton避免布局抖动
异步任务进行中 顶部进度条Slim progress bar+ Toast 说明

4. 业务组件规范Business Components

针对 Fonrey 特有的业务场景设计,复用基础组件。

4.1 房源卡片Property Card

  • 展示字段:封面图、房源标题、面积/户型/楼层、挂牌价、状态标签、经纪人、更新时间
  • 操作:查看详情(卡片点击)、快捷操作菜单(⋯ 三点按钮)
  • 尺寸:列表模式(横向宽卡)/ 网格模式(方形卡片)

4.2 筛选栏Filter Bar

  • 常驻筛选项(横向排列):区域、价格区间、户型、状态
  • 高级筛选(折叠,点击展开):更多条件
  • 已选筛选条件以 Tag 形式展示,支持单个删除和一键清除
  • 筛选变化触发 hx-get 局部刷新列表区域

4.3 数据统计卡片Stat Card

区域 内容
图标 业务含义图标(背景色块)
数值 大号字体,突出展示
标签 指标名称
趋势 环比箭头 + 百分比(可选)

4.4 操作菜单Action Menu

  • 触发方式:三点图标按钮()或右键(不推荐)
  • Alpine.js 控制显示隐藏,点击外部关闭
  • 危险操作(删除)排在最后,用红色文字区分,且用分割线隔开

5. 页面布局模板Page Layout Templates

5.1 整体框架

┌──────────────────────────────────────────────────────┐
│  顶部导航栏Logo + 租户名 + 用户菜单)高度 56px        │
├────────────┬─────────────────────────────────────────┤
│  侧边导航  │           主内容区                        │
│  宽 240px  │  ┌─────────────────────────────────┐    │
│            │  │  页面标题 + 面包屑 + 主操作按钮   │    │
│  折叠态    │  ├─────────────────────────────────┤    │
│  宽 64px   │  │  筛选栏 / 工具栏                 │    │
│            │  ├─────────────────────────────────┤    │
│            │  │  内容主体(列表 / 详情 / 表单)   │    │
│            │  └─────────────────────────────────┘    │
└────────────┴─────────────────────────────────────────┘

5.2 列表页模板

适用模块:房源列表、客源列表、楼盘列表

页面标题 + 新增按钮
└── 筛选栏(横向,支持高级筛选折叠)
└── 工具栏(批量操作 + 视图切换 + 导出)
└── 列表主体表格或卡片网格HTMX 局部刷新)
└── 分页栏

5.3 详情页模板(含右侧抽屉)

适用模块:房源详情、客源详情、楼盘详情

面包屑导航
└── 详情头部(标题 + 状态 + 主操作按钮组)
└── Tab 导航(基本信息 / 跟进记录 / 关联数据 / 操作日志)
└── Tab 内容HTMX 懒加载,切换 Tab 局部刷新内容区)
└── 右侧抽屉(新增/编辑表单,从右侧滑入,不遮挡主内容)

5.4 设置页模板

适用模块:系统设置、权限管理

左侧设置分类导航(二级菜单)
└── 右侧内容区(表单 / 列表,保存按钮固定在底部)

6. 交互状态规范Interaction States

6.1 HTMX 请求生命周期

阶段 视觉反馈
请求发出前(htmx:beforeRequest 目标区域叠加半透明遮罩 + 骨架屏
请求进行中 触发按钮禁用 + Spinner
请求成功(htmx:afterSettle 移除遮罩,内容更新,触发 Toast如有
请求失败(htmx:responseError 移除遮罩,触发 Error Toast保留原内容

6.2 表单校验反馈

  • 前端实时校验Alpine.jsblur 时触发,不阻止提交
  • 后端校验返回HTMXHTTP 422返回含错误信息的表单 Partial字段级红色提示
  • 错误提示位置:字段下方,不使用顶部错误摘要(避免用户滚动查找)

6.3 空状态设计

每类空状态须提供插图SVG+ 标题 + 描述 + 引导操作按钮

场景 标题示例 引导操作
列表无数据 "暂无房源" 「新增第一套房源」按钮
搜索无结果 "未找到匹配结果" 「清除筛选条件」链接
权限不足 "暂无访问权限" 联系管理员

7. 图标规范Icon Guidelines

  • 图标库:【填写选定库名,如 Heroicons 24px Outline / Solid】
  • 尺寸:工具栏图标 20px / 行内图标 16px / 状态图标 14px
  • 颜色:继承父元素文字颜色(currentColor),不单独设置颜色
  • 语义一致性:同一操作在全产品内使用同一图标(新增始终用 + / PlusIcon

常用图标映射

操作 图标名称
新增 PlusIcon
编辑 PencilIcon
删除 TrashIcon
搜索 MagnifyingGlassIcon
筛选 FunnelIcon
导出 ArrowDownTrayIcon
更多操作 EllipsisHorizontalIcon
关闭 XMarkIcon

8. 可访问性基线Accessibility Baseline

  • 所有表单字段须关联 <label>for 属性或包裹)
  • 颜色对比度:正文文字与背景须达到 WCAG AA 级4.5:1
  • 交互元素须支持键盘操作Tab 聚焦、Enter/Space 触发、ESC 关闭弹窗)
  • 错误状态不仅靠颜色区分,须附带文字提示

9. 待确认问题Open Questions

  • 问题描述 — 负责人 — 截止时间

10. 附录Appendix

  • 竞品参考截图
  • 品牌视觉资产Logo、品牌字体
  • Tailwind 配置文件完整示例(tailwind.config.js
  • 关联文档PRD 文档目录、Project/fonrey/TECH_STACK/TECH_STACK.md

补充说明

  • 如提供了竞品截图或参考风格图,请先分析其设计语言(配色、圆角、密度),再结合 B2B SaaS 特点提案
  • 所有组件规范须在 Tailwind CSS 约束内实现,不得引入独立 CSS 文件或 CSS-in-JS
  • 如发现 PRD 中描述的交互在技术约束下无法实现,请在输出前说明并提供替代方案
  • 输出语言:中文组件名、Token 名、Tailwind 类保留英文)