@tfdesign/b-end 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AI_READ_FIRST.md +131 -0
- package/LICENSE +21 -0
- package/README.md +353 -0
- package/package.json +67 -0
- package/scripts/check-tfds-contract.mjs +334 -0
- package/scripts/check-tfds-integration.mjs +263 -0
- package/scripts/postinstall-cursor-skill.mjs +382 -0
- package/scripts/setup.mjs +520 -0
- package/skills/tfds/CHECKLIST.md +205 -0
- package/skills/tfds/COMMON_FAILURES.md +238 -0
- package/skills/tfds/DESIGN_PRINCIPLES.md +477 -0
- package/skills/tfds/GLOBAL_DESIGN_RULES.md +636 -0
- package/skills/tfds/LAYOUT_RECIPES.md +140 -0
- package/skills/tfds/LAYOUT_RULES.md +1355 -0
- package/skills/tfds/PAGE_ARCHETYPES.md +201 -0
- package/skills/tfds/SKILL.md +188 -0
- package/skills/tfds/components.index.json +7305 -0
- package/skills/tfds/components.summary.json +1809 -0
- package/src/_b_end_runtime/components/AiSuggestionShared.jsx +166 -0
- package/src/_b_end_runtime/components/Avatar.jsx +325 -0
- package/src/_b_end_runtime/components/Avatar.tokens.js +76 -0
- package/src/_b_end_runtime/components/AvatarGridPreview.jsx +56 -0
- package/src/_b_end_runtime/components/AvatarGroup.jsx +80 -0
- package/src/_b_end_runtime/components/AvatarGroup.tokens.js +28 -0
- package/src/_b_end_runtime/components/Button.jsx +144 -0
- package/src/_b_end_runtime/components/Button.tokens.js +90 -0
- package/src/_b_end_runtime/components/Card.jsx +460 -0
- package/src/_b_end_runtime/components/Card.tokens.js +124 -0
- package/src/_b_end_runtime/components/CardPreview.jsx +51 -0
- package/src/_b_end_runtime/components/ChatBubble.jsx +384 -0
- package/src/_b_end_runtime/components/ChatBubble.tokens.js +60 -0
- package/src/_b_end_runtime/components/ChatBubblePreview.jsx +129 -0
- package/src/_b_end_runtime/components/ChatInput.jsx +1399 -0
- package/src/_b_end_runtime/components/ChatInput.tokens.js +75 -0
- package/src/_b_end_runtime/components/ChatMessage.jsx +2215 -0
- package/src/_b_end_runtime/components/ChatMessage.tokens.js +257 -0
- package/src/_b_end_runtime/components/ChatMessagePreview.jsx +388 -0
- package/src/_b_end_runtime/components/Checkbox.jsx +317 -0
- package/src/_b_end_runtime/components/Checkbox.tokens.js +59 -0
- package/src/_b_end_runtime/components/ConversationList.jsx +1264 -0
- package/src/_b_end_runtime/components/ConversationList.tokens.js +135 -0
- package/src/_b_end_runtime/components/ConversationListPreview.jsx +108 -0
- package/src/_b_end_runtime/components/CustomerServiceWorkspaceFrame.jsx +324 -0
- package/src/_b_end_runtime/components/CustomerServiceWorkspaceFrame.tokens.js +69 -0
- package/src/_b_end_runtime/components/DatePicker.jsx +739 -0
- package/src/_b_end_runtime/components/DatePicker.tokens.js +99 -0
- package/src/_b_end_runtime/components/Empty.jsx +141 -0
- package/src/_b_end_runtime/components/Empty.tokens.js +40 -0
- package/src/_b_end_runtime/components/Form.jsx +609 -0
- package/src/_b_end_runtime/components/Form.tokens.js +77 -0
- package/src/_b_end_runtime/components/FormFieldStack.jsx +123 -0
- package/src/_b_end_runtime/components/FormFieldStack.tokens.js +12 -0
- package/src/_b_end_runtime/components/FormTitle.jsx +119 -0
- package/src/_b_end_runtime/components/FormTitle.tokens.js +87 -0
- package/src/_b_end_runtime/components/FullScreenPage.jsx +97 -0
- package/src/_b_end_runtime/components/FullScreenPage.tokens.js +19 -0
- package/src/_b_end_runtime/components/Icon.jsx +172 -0
- package/src/_b_end_runtime/components/Icon.tokens.js +26 -0
- package/src/_b_end_runtime/components/IconGridPreview.jsx +277 -0
- package/src/_b_end_runtime/components/InfoDisplayPanel.jsx +620 -0
- package/src/_b_end_runtime/components/InfoDisplayPanel.tokens.js +71 -0
- package/src/_b_end_runtime/components/InfoDisplayPanelPreview.jsx +133 -0
- package/src/_b_end_runtime/components/Input.jsx +258 -0
- package/src/_b_end_runtime/components/Input.tokens.js +68 -0
- package/src/_b_end_runtime/components/InputNumber.jsx +242 -0
- package/src/_b_end_runtime/components/InputNumber.tokens.js +55 -0
- package/src/_b_end_runtime/components/Modal.jsx +155 -0
- package/src/_b_end_runtime/components/Modal.tokens.js +73 -0
- package/src/_b_end_runtime/components/NavBar.jsx +842 -0
- package/src/_b_end_runtime/components/NavBar.tokens.js +97 -0
- package/src/_b_end_runtime/components/NavBarPreview.jsx +11 -0
- package/src/_b_end_runtime/components/Radio.jsx +227 -0
- package/src/_b_end_runtime/components/Radio.tokens.js +59 -0
- package/src/_b_end_runtime/components/Select.jsx +766 -0
- package/src/_b_end_runtime/components/Select.tokens.js +99 -0
- package/src/_b_end_runtime/components/Sheet.jsx +132 -0
- package/src/_b_end_runtime/components/Sheet.tokens.js +61 -0
- package/src/_b_end_runtime/components/Slider.jsx +346 -0
- package/src/_b_end_runtime/components/Slider.tokens.js +47 -0
- package/src/_b_end_runtime/components/Switch.jsx +124 -0
- package/src/_b_end_runtime/components/Switch.tokens.js +38 -0
- package/src/_b_end_runtime/components/Table.jsx +1338 -0
- package/src/_b_end_runtime/components/Table.tokens.js +147 -0
- package/src/_b_end_runtime/components/TablePreview.jsx +599 -0
- package/src/_b_end_runtime/components/Tabs.jsx +149 -0
- package/src/_b_end_runtime/components/Tabs.tokens.js +102 -0
- package/src/_b_end_runtime/components/Tag.jsx +199 -0
- package/src/_b_end_runtime/components/Tag.tokens.js +171 -0
- package/src/_b_end_runtime/components/TagBar.jsx +1134 -0
- package/src/_b_end_runtime/components/TagBar.tokens.js +75 -0
- package/src/_b_end_runtime/components/TagGridPreview.jsx +23 -0
- package/src/_b_end_runtime/components/TagInput.jsx +382 -0
- package/src/_b_end_runtime/components/TagInput.tokens.js +52 -0
- package/src/_b_end_runtime/components/TextArea.jsx +363 -0
- package/src/_b_end_runtime/components/TextArea.tokens.js +65 -0
- package/src/_b_end_runtime/components/TimePicker.jsx +444 -0
- package/src/_b_end_runtime/components/TimePicker.tokens.js +77 -0
- package/src/_b_end_runtime/components/Toast.jsx +120 -0
- package/src/_b_end_runtime/components/Toast.tokens.js +146 -0
- package/src/_b_end_runtime/components/Tooltip.jsx +282 -0
- package/src/_b_end_runtime/components/Tooltip.tokens.js +48 -0
- package/src/_b_end_runtime/components/TooltipPreview.jsx +50 -0
- package/src/_b_end_runtime/components/Upload.jsx +455 -0
- package/src/_b_end_runtime/components/Upload.tokens.js +47 -0
- package/src/_b_end_runtime/components/avatar-assets/avatar-default.png +0 -0
- package/src/_b_end_runtime/components/avatar-group-assets/avatar-group-1.png +0 -0
- package/src/_b_end_runtime/components/avatar-group-assets/avatar-group-2.png +0 -0
- package/src/_b_end_runtime/components/avatar-group-assets/avatar-group-3.png +0 -0
- package/src/_b_end_runtime/components/avatar-group-assets/avatar-group-4.png +0 -0
- package/src/_b_end_runtime/components/avatar-group-assets/avatar-group-5.png +0 -0
- package/src/_b_end_runtime/components/empty-assets/administrator-1.svg +40 -0
- package/src/_b_end_runtime/components/empty-assets/administrator-2.svg +33 -0
- package/src/_b_end_runtime/components/empty-assets/construction.svg +33 -0
- package/src/_b_end_runtime/components/empty-assets/failure.svg +49 -0
- package/src/_b_end_runtime/components/empty-assets/idle.svg +34 -0
- package/src/_b_end_runtime/components/empty-assets/no-access.svg +36 -0
- package/src/_b_end_runtime/components/empty-assets/no-content.svg +77 -0
- package/src/_b_end_runtime/components/empty-assets/no-result.svg +61 -0
- package/src/_b_end_runtime/components/empty-assets/not-found.svg +46 -0
- package/src/_b_end_runtime/components/empty-assets/success.svg +38 -0
- package/src/_b_end_runtime/components/file-type-assets/batch-report.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/catcat.svg +21 -0
- package/src/_b_end_runtime/components/file-type-assets/code.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/conversation.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/document.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/feishu-card.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/feishu-sheet.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/feishu.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/image.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/index.js +105 -0
- package/src/_b_end_runtime/components/file-type-assets/knowledge.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/pdf.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/pe.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/strategy.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/table.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/webpage.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/xmind.png +0 -0
- package/src/_b_end_runtime/components/icons/icon-data.js +12496 -0
- package/src/_b_end_runtime/components/nav-bar-assets/bytehi-logo-mark.svg +21 -0
- package/src/_b_end_runtime/components/table-assets/avatar.png +0 -0
- package/src/_b_end_runtime/components/table-assets/button.png +0 -0
- package/src/_b_end_runtime/components/table-assets/icon-chevron-down.png +0 -0
- package/src/_b_end_runtime/components/table-cell-assets/avatar.png +0 -0
- package/src/_b_end_runtime/components/table-cell-assets/button.png +0 -0
- package/src/_b_end_runtime/components/table-cell-assets/checkbox.png +0 -0
- package/src/_b_end_runtime/components/table-cell-assets/icon-chevron-right.png +0 -0
- package/src/_b_end_runtime/components/table-cell-assets/icon.png +0 -0
- package/src/_b_end_runtime/components/table-cell-assets/semi-icons-handle.png +0 -0
- package/src/_b_end_runtime/components/table-cell-assets/semi-icons-tree-triangle-right.png +0 -0
- package/src/_b_end_runtime/components/table-cell-assets/switch.png +0 -0
- package/src/_b_end_runtime/components/tagShared.js +3 -0
- package/src/_b_end_runtime/components/team-avatar-assets/chengcheng-murphy.png +0 -0
- package/src/_b_end_runtime/components/team-avatar-assets/duan-ran.png +0 -0
- package/src/_b_end_runtime/components/team-avatar-assets/guo-zhezhi.png +0 -0
- package/src/_b_end_runtime/components/team-avatar-assets/li-siru.png +0 -0
- package/src/_b_end_runtime/components/team-avatar-assets/liu-delin.png +0 -0
- package/src/_b_end_runtime/components.js +3499 -0
- package/src/_b_end_runtime/index.js +9 -0
- package/src/_b_end_runtime/page-patterns/BasePageFramePattern.jsx +395 -0
- package/src/_b_end_runtime/page-patterns/ChatConversationPattern.jsx +989 -0
- package/src/_b_end_runtime/page-patterns/ChatHomePagePattern.jsx +281 -0
- package/src/_b_end_runtime/page-patterns/CopilotPagePattern.jsx +380 -0
- package/src/_b_end_runtime/page-patterns/CustomerServiceWorkspaceFramePattern.jsx +392 -0
- package/src/_b_end_runtime/page-patterns/IMConversationPattern.jsx +590 -0
- package/src/_b_end_runtime/page-patterns/McpManagementPage.jsx +237 -0
- package/src/_b_end_runtime/page-patterns/StrategyListPage.jsx +189 -0
- package/src/_b_end_runtime/page-patterns/TabTopBarListPage.jsx +594 -0
- package/src/_b_end_runtime/page-patterns/VariableManagementPage.jsx +87 -0
- package/src/_b_end_runtime/page-patterns/pageListShared.jsx +177 -0
- package/src/_b_end_runtime/patterns.js +428 -0
- package/src/_b_end_runtime/preview-registry.jsx +4719 -0
- package/src/_b_end_runtime/teamMembers.js +56 -0
- package/src/_b_end_runtime/tokens.js +500 -0
- package/src/index.d.ts +1073 -0
- package/src/index.js +52 -0
- package/theme.css +350 -0
|
@@ -0,0 +1,477 @@
|
|
|
1
|
+
# TFDS B 端设计原则(设计品味与体验判断)
|
|
2
|
+
|
|
3
|
+
> **作用域**:生成任何 TFDS B 端页面前,先用本文件判断页面气质、信息优先级和 UX 取舍。
|
|
4
|
+
>
|
|
5
|
+
> 本文件回答“为什么这样设计、如何取舍”;具体组件、props、token 和布局骨架仍以 `components.index.json`、`LAYOUT_RULES.md`、`GLOBAL_DESIGN_RULES.md` 为准。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 目录
|
|
10
|
+
|
|
11
|
+
- §0 一句话定位
|
|
12
|
+
- §1 设计哲学
|
|
13
|
+
- §2 视觉调性
|
|
14
|
+
- §3 平台视觉 DNA(标杆页面沉淀)
|
|
15
|
+
- §4 页面层级判断
|
|
16
|
+
- §5 页面类型设计判断
|
|
17
|
+
- §6 组件设计角色
|
|
18
|
+
- §7 生成前决策流程
|
|
19
|
+
- §8 生成后设计自检
|
|
20
|
+
- §9 与其他规范的关系
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 0. 一句话定位
|
|
25
|
+
|
|
26
|
+
TFDS 是面向企业级 B 端平台的高密度浅色系统,适用于管理后台、运营平台、数据平台、客服工作台、配置中心、审核系统、流程工具和 AI 辅助工作台等场景。页面应当专业、克制、清晰,把任务、数据、输入、流程和协作放在视觉中心。品牌青绿用于交互与状态信号;AI 渐变只在明确智能能力场景中作为语义信号,不作为装饰背景。
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 1. 设计哲学
|
|
31
|
+
|
|
32
|
+
### 1.1 任务先于装饰
|
|
33
|
+
|
|
34
|
+
用户打开 B 端页面是为了完成任务,不是欣赏视觉包装。页面第一屏必须让用户立刻知道:
|
|
35
|
+
|
|
36
|
+
- 当前在处理什么业务对象
|
|
37
|
+
- 当前最重要的状态或风险是什么
|
|
38
|
+
- 下一步最合理的操作在哪里
|
|
39
|
+
- 需要输入、筛选、对比、确认或查看的内容在哪个区域
|
|
40
|
+
|
|
41
|
+
如果某个视觉元素不能帮助完成以上任一目标,就不要加。
|
|
42
|
+
|
|
43
|
+
### 1.2 内容先于容器
|
|
44
|
+
|
|
45
|
+
TFDS 的容器负责承载工作流,不负责抢视觉权重。大白卡、面板、分区只提供稳定边界;真正的层级来自标题、状态、控件和数据本身。
|
|
46
|
+
|
|
47
|
+
- 最外层工作白卡:纯白底 + 12px 圆角 + 无 border + 无 shadow
|
|
48
|
+
- 白卡之间:靠灰底与 8px 间距分层
|
|
49
|
+
- 白卡内部:由 FormTitle、Tabs、Table、Form、TextArea、ChatInput 等组件建立功能区
|
|
50
|
+
- 内部控件描边保留,白卡外边界不加描边
|
|
51
|
+
|
|
52
|
+
### 1.3 层级靠结构,不靠大字号
|
|
53
|
+
|
|
54
|
+
TFDS 不用“大标题 + 大留白 + 重阴影”制造气势。企业工作台更需要稳定扫描。
|
|
55
|
+
|
|
56
|
+
- 标题默认用 `FormTitle`,字重 600
|
|
57
|
+
- 常规 UI 字号以 14px 为主体,标题通过 600 字重和组件结构区分
|
|
58
|
+
- 页面只允许少量 18px / 20px 标题,避免整页所有模块都在喊话
|
|
59
|
+
- 强调信息优先用位置、分组、Tag 和操作优先级表达,不靠 `font-bold` 或任意字号
|
|
60
|
+
|
|
61
|
+
### 1.4 高密度但可扫描
|
|
62
|
+
|
|
63
|
+
TFDS 的密度应当像成熟企业软件:信息多,但不乱。
|
|
64
|
+
|
|
65
|
+
- 同组元素用 8px 或 12px,表单字段用 16px,白卡内 padding 用 24px
|
|
66
|
+
- 表格、列表、会话、编辑器应撑满可用空间,而不是堆成窄窄一列
|
|
67
|
+
- 重要说明完整展示;列表预览、文件名、模型 ID 可省略,但必须配 Tooltip 或详情入口
|
|
68
|
+
- 不为了“留白好看”牺牲数据对比效率
|
|
69
|
+
|
|
70
|
+
### 1.5 智能能力是局部身份信号,不是全局装饰主题
|
|
71
|
+
|
|
72
|
+
TFDS 不只服务 AI 工作台。AI 渐变只在页面存在明确智能能力时出现,并只服务于 AI 相关对象,例如 AI 输入框、AI 消息、AI 推荐、AI 执行流、AI 标识。不要把 AI 渐变铺到普通卡片、页面背景、按钮、统计模块上,也不要让非 AI 平台页面带上“为了显得智能”的装饰感。
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 2. 视觉调性
|
|
77
|
+
|
|
78
|
+
### 2.1 基础气质
|
|
79
|
+
|
|
80
|
+
- **专业**:对齐、清晰、稳定,避免花哨装饰
|
|
81
|
+
- **克制**:品牌色少量出现,阴影和渐变不泛用
|
|
82
|
+
- **轻盈**:浅灰底 + 白色工作区,靠明度差和圆角分层
|
|
83
|
+
- **可信**:状态语义明确,危险、警告、成功、信息不能混用
|
|
84
|
+
- **企业平台感**:结构稳定、信息密度适中,既能承载通用管理后台,也能承载 AI 辅助工作流
|
|
85
|
+
|
|
86
|
+
### 2.2 色彩使用
|
|
87
|
+
|
|
88
|
+
- 页面底色:浅灰 `var(--color-blueGrey-200)`,用于承载整页工作区
|
|
89
|
+
- 白卡底色:`var(--color-surface)`,用于承载真实工作内容
|
|
90
|
+
- 主文字:`var(--color-foreground)`,次级说明:`var(--color-foreground-secondary)` / `muted`
|
|
91
|
+
- 品牌青绿:只用于焦点、激活、链接、品牌状态、标题竖条
|
|
92
|
+
- 语义色:只用于状态反馈,不用于装饰
|
|
93
|
+
- AI 渐变:只用于 AI 语义面,不用于普通业务面
|
|
94
|
+
|
|
95
|
+
### 2.3 禁止的视觉倾向
|
|
96
|
+
|
|
97
|
+
- 禁止营销页式 hero、彩色光斑、大面积渐变背景,除非当前页面就是明确的 AI 入口页模板
|
|
98
|
+
- 禁止普通白卡加重阴影、灰色描边、黑色边框来“显得有层次”
|
|
99
|
+
- 禁止整页多个黑色主按钮并列,主操作必须收敛
|
|
100
|
+
- 禁止把 Tag、Button、Tabs、Card、FormTitle 用 `div/span` 手搓相似样式
|
|
101
|
+
- 禁止用随机 `text-[15px]`、`p-[18px]`、`#333`、`bg-gray-*` 填补审美空白
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## 3. 平台视觉 DNA(标杆页面沉淀)
|
|
106
|
+
|
|
107
|
+
### 3.1 灰色应用壳 + 白色工作区
|
|
108
|
+
|
|
109
|
+
TFDS 平台不是白底网页,也不是传统后台的强边框面板。标准气质是浅灰应用壳承载多个白色工作区。
|
|
110
|
+
|
|
111
|
+
- 最外层是浅灰画布,导航、页头、分区间距都坐在灰底上
|
|
112
|
+
- 真正工作内容进入白色大圆角区域,白卡之间用 8px 灰底缝隙分层
|
|
113
|
+
- 白卡不靠边框和阴影强调,靠明度差、圆角、内容标题和控件边界建立层级
|
|
114
|
+
- 页面贴近浏览器边缘,不做居中 `max-width` 后台页面
|
|
115
|
+
|
|
116
|
+
### 3.2 平台导航是“窄侧栏 + 顶部语境切换”
|
|
117
|
+
|
|
118
|
+
标杆页面普遍使用两层导航:左侧窄导航负责产品/业务域,顶部胶囊负责当前模块或工作模式。
|
|
119
|
+
|
|
120
|
+
- 左侧导航窄、轻、稳定,图标为主,当前业务项用浅底或品牌色信号提示
|
|
121
|
+
- 顶部模块切换优先用胶囊 Tabs / segment,选中态可以是黑色实心胶囊,未选中态保持灰色轻量
|
|
122
|
+
- 页面右上角放全局操作,主操作用黑色 primary,次要操作用白底描边或 icon button
|
|
123
|
+
- 不要把顶部导航、页面标题和操作按钮塞进白卡内;它们属于应用壳
|
|
124
|
+
|
|
125
|
+
### 3.3 选择态是细信号,不是大面积染色
|
|
126
|
+
|
|
127
|
+
TFDS 的选中、激活、当前态都很克制。
|
|
128
|
+
|
|
129
|
+
- 表格或列表选中:使用品牌描边、左侧细竖条、浅品牌底或小图标,不整块强色填充
|
|
130
|
+
- 顶部模块选中:可以使用黑色胶囊,形成明确当前模式
|
|
131
|
+
- 状态徽标:使用低饱和浅底 Tag,避免大面积红/绿/橙背景
|
|
132
|
+
- hover 只做轻微底色、描边或阴影变化,不做浮夸动效
|
|
133
|
+
|
|
134
|
+
### 3.4 信息密度高,但阅读路径清楚
|
|
135
|
+
|
|
136
|
+
标杆页面的密度来自稳定排布,不是把控件挤小。
|
|
137
|
+
|
|
138
|
+
- 表格行高、列表项高度保持充足,文字 14px 为主,元信息 12px
|
|
139
|
+
- 核心对象名用 600 字重,描述和时间戳用 muted 色
|
|
140
|
+
- 筛选区靠近内容标题,筛选控件横向排布且固定宽
|
|
141
|
+
- 分页、总数、每页数量固定在列表底部,不漂浮在内容中间
|
|
142
|
+
|
|
143
|
+
### 3.5 工作台优先分屏,不堆叠
|
|
144
|
+
|
|
145
|
+
复杂任务页不是 Dashboard 堆卡片,而是把“上下文、工作内容、配置/详情/产物”分成稳定面板。
|
|
146
|
+
|
|
147
|
+
- 常见骨架:左侧列表/会话/进程,中间主工作区,右侧详情/配置/预览
|
|
148
|
+
- 每个面板只承担一个职责,面板头固定,正文内部滚动
|
|
149
|
+
- 左侧用于定位和上下文,中间用于编辑/对话/主内容,右侧用于参数、详情、产物或结果
|
|
150
|
+
- 不要把三类内容纵向堆成一个长页面;那会破坏工作流对照
|
|
151
|
+
|
|
152
|
+
### 3.6 内容产物要像“可交付物”,不是普通卡片
|
|
153
|
+
|
|
154
|
+
报告、文档、HTML 预览、策略说明、运行产物需要被当作主内容画布处理。
|
|
155
|
+
|
|
156
|
+
- 产物区通常占据最大面积,使用大白内容画布
|
|
157
|
+
- 顶部只保留必要标题、状态和工具图标,减少容器噪音
|
|
158
|
+
- 正文排版以可读性为优先,段落、标题、图表、指标卡要形成文档式阅读节奏
|
|
159
|
+
- 产物预览不要压缩成多个小卡片,也不要被 AI 进程面板抢占视觉中心
|
|
160
|
+
|
|
161
|
+
### 3.7 AI 辅助是伴随式,不默认主宰页面
|
|
162
|
+
|
|
163
|
+
标杆页面中的 AI 能力通常以“进程、建议、输入、产物生成”方式嵌入工作流,而不是把所有页面都变成聊天页。
|
|
164
|
+
|
|
165
|
+
- 用户未进入具体上下文时,可以使用居中的 AI 输入入口
|
|
166
|
+
- 用户已经在处理对象时,AI 应在侧栏、底部输入框、进程卡或建议区中辅助
|
|
167
|
+
- AI 进程卡使用轻灰容器、步骤状态和简短总结,避免大段营销式解释
|
|
168
|
+
- 只有明确的 AI 入口页,ChatInput 才成为页面中心;管理页和配置页仍以对象和任务为中心
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## 4. 页面层级判断
|
|
173
|
+
|
|
174
|
+
### 4.1 页面元信息直接坐灰底
|
|
175
|
+
|
|
176
|
+
页面级标题、返回、面包屑、页面级 Tabs、页面主次操作属于页面元信息,应直接放在灰底上。不要为了“规整”把页面 header 再包一张白卡。
|
|
177
|
+
|
|
178
|
+
适用对象:
|
|
179
|
+
|
|
180
|
+
- 页面标题和描述
|
|
181
|
+
- 页面级主按钮、导出、创建、同步等操作
|
|
182
|
+
- 页面级筛选入口或全局切换
|
|
183
|
+
- 返回、面包屑、产品级上下文
|
|
184
|
+
|
|
185
|
+
### 4.2 白卡只承载工作内容
|
|
186
|
+
|
|
187
|
+
白卡应当承载用户真正要处理的内容:
|
|
188
|
+
|
|
189
|
+
- 表格、列表、筛选结果
|
|
190
|
+
- 表单配置、字段编辑
|
|
191
|
+
- Prompt / JSON / 代码 / 参数编辑区
|
|
192
|
+
- 对话流、消息列表、客服会话
|
|
193
|
+
- 运行结果、审核结果、风险明细
|
|
194
|
+
|
|
195
|
+
不要把“页面标题 + 描述 + 操作按钮”单独包成一张白卡。那会让页面失去主从关系。
|
|
196
|
+
|
|
197
|
+
### 4.3 区分工作白卡和 Card 组件
|
|
198
|
+
|
|
199
|
+
TFDS 中有两类“卡片”,不能混用:
|
|
200
|
+
|
|
201
|
+
- **工作白卡**:页面布局容器,纯白底、12px 圆角、无 border、无 shadow,通常由页面骨架创建。
|
|
202
|
+
- **Card 组件**:业务摘要、入口卡、信息卡,使用组件自身样式和 props。它不是所有白色容器的替代品。
|
|
203
|
+
|
|
204
|
+
不要把 Card 的玻璃感、hover 阴影、20px 圆角套到所有工作白卡上。工作白卡遵守 `GLOBAL_DESIGN_RULES.md` 的白卡铁律。
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## 5. 页面类型设计判断
|
|
209
|
+
|
|
210
|
+
### 5.1 平台壳 / 模块工作区
|
|
211
|
+
|
|
212
|
+
目标是让用户明确当前产品域、当前模块和页面主操作。
|
|
213
|
+
|
|
214
|
+
- 左侧 NavBar 保持稳定,不随内容滚动
|
|
215
|
+
- 顶部模块切换、版本切换、发布/保存/创建等动作直接坐灰底
|
|
216
|
+
- 当前模块用黑色胶囊或轻量激活态表达,不用大面积品牌色
|
|
217
|
+
- 右上角主操作保持固定位置,不能藏在白卡内部
|
|
218
|
+
|
|
219
|
+
### 5.2 列表 / 管理页
|
|
220
|
+
|
|
221
|
+
目标是快速筛选、对比、批量处理。第一优先级是表格或列表的可扫描性。
|
|
222
|
+
|
|
223
|
+
- 先选列表/管理类 page-template
|
|
224
|
+
- 页面级主操作只保留一个,例如“新建”
|
|
225
|
+
- 筛选栏控件固定宽,不要全部满宽
|
|
226
|
+
- 标题、业务范围 Tag、筛选区、表格之间要形成一条自然的纵向扫描线
|
|
227
|
+
- 表格容器撑满剩余高度,避免页面滚动和表格内部滚动同时混乱
|
|
228
|
+
- 表格行分隔线轻,行内容靠列对齐和弱文字建立密度
|
|
229
|
+
- 状态、风险、类型必须用 Tag,不手写彩色徽标
|
|
230
|
+
|
|
231
|
+
### 5.3 分类 + 列表页 / 知识库页
|
|
232
|
+
|
|
233
|
+
目标是让用户先定位分类,再处理右侧对象。
|
|
234
|
+
|
|
235
|
+
- 左侧用 TagBar / 分类列表表达结构
|
|
236
|
+
- 右侧用 Table / 列表表达工作对象
|
|
237
|
+
- 需要查看全文、说明、案例详情时,右侧增加详情面板,而不是弹窗打断
|
|
238
|
+
- 左侧宽度固定,右侧 `flex-1 min-w-0`
|
|
239
|
+
- 分类数量不要做成一排 Button
|
|
240
|
+
- 当前分类、数量、筛选条件要贴近列表标题
|
|
241
|
+
- 列表项选中态优先用品牌描边或轻底色,详情面板用白色内容容器承载富文本
|
|
242
|
+
|
|
243
|
+
### 5.4 Tab 顶栏 / 策略详情 / 编辑详情页
|
|
244
|
+
|
|
245
|
+
目标是让用户在同一对象下切换视图。
|
|
246
|
+
|
|
247
|
+
- 同一容器内的互斥视图必须用 Tabs
|
|
248
|
+
- 内容区 Tabs 默认 sm
|
|
249
|
+
- 顶部上下文信息应轻量,不喧宾夺主
|
|
250
|
+
- 详情区和列表区要有明确主从,不要双区域都做成强标题
|
|
251
|
+
- 编辑详情页常见三分区:左侧上下文/进程,中间编辑器或画布,右侧配置/说明/单测
|
|
252
|
+
- 中间编辑器应占最大视觉面积,右侧配置区窄而稳定
|
|
253
|
+
|
|
254
|
+
### 5.5 托管 / 客服 / 会话工作台
|
|
255
|
+
|
|
256
|
+
目标是高效处理队列、会话上下文和下一步动作。
|
|
257
|
+
|
|
258
|
+
- 左侧队列按状态分组,当前项用品牌左边条或轻底色突出
|
|
259
|
+
- 中间会话/处理流保持纵向时间线,重要任务卡使用轻灰容器承载
|
|
260
|
+
- 待确认、托管中、已挂起、异常等状态必须用 Tag 或固定状态区表达
|
|
261
|
+
- 底部输入或确认动作固定,不随会话流滚走
|
|
262
|
+
- 右侧详情、用户画像或工单信息只作为辅助,不抢会话主线
|
|
263
|
+
|
|
264
|
+
### 5.6 Playground / 调试台 / Prompt Editor
|
|
265
|
+
|
|
266
|
+
目标是输入、参数、运行、结果在同一屏完成对照。
|
|
267
|
+
|
|
268
|
+
- 整页不滚,面板内部滚
|
|
269
|
+
- 多面板同高,标题固定,正文滚动
|
|
270
|
+
- Prompt、JSON、代码、日志优先用 TextArea `variant="code"` 或规范代码容器
|
|
271
|
+
- 运行按钮、模型参数、结果状态要靠近工作流,不要散在页面角落
|
|
272
|
+
- 输入区和输出区不要被大留白隔开
|
|
273
|
+
|
|
274
|
+
### 5.7 入口页 / 首页 / AI 入口页
|
|
275
|
+
|
|
276
|
+
目标是降低开始成本,不是做营销落地页。普通企业平台首页应突出业务入口、待办、数据概览和最近访问;AI 入口页才突出 ChatInput 和智能推荐。
|
|
277
|
+
|
|
278
|
+
- 普通首页的核心入口、待办和关键数据必须是视觉中心
|
|
279
|
+
- AI 入口页的 ChatInput、推荐问题、快捷动作、历史入口要围绕输入组织
|
|
280
|
+
- AI 渐变只在 AI 入口或智能模块中出现,用于身份信号
|
|
281
|
+
- 模板/案例卡片放在入口下方,作为“下一步可选路径”,不要抢输入主行动
|
|
282
|
+
- 不要做大面积品牌背景、漂浮装饰、无功能的 slogan 区
|
|
283
|
+
|
|
284
|
+
### 5.8 Copilot / 产物预览页
|
|
285
|
+
|
|
286
|
+
目标是主工作区和 AI 辅助区并行,最终产物清晰可读。
|
|
287
|
+
|
|
288
|
+
- 主内容占主导,AI 侧栏辅助决策
|
|
289
|
+
- AI 建议必须可执行、可采纳、可忽略
|
|
290
|
+
- 侧栏宽度固定或有合理上下限,主区 `min-w-0`
|
|
291
|
+
- 不能让 AI 面板挤压表单标题或正文导致一字一行
|
|
292
|
+
- 产物预览区占最大面积,工具栏轻量贴顶,文档正文不被过度卡片化
|
|
293
|
+
|
|
294
|
+
### 5.9 三步配置 / 批测 / 评估流
|
|
295
|
+
|
|
296
|
+
目标是让用户按步骤完成配置,同时保留跨步骤对照。
|
|
297
|
+
|
|
298
|
+
- 多步骤配置优先横向三栏或分区并列,而不是纵向长表单
|
|
299
|
+
- 步骤编号用小黑底数字或明确序号,标题简短
|
|
300
|
+
- 每栏白卡内部再使用轻描边子区块承载选项、预览和参数
|
|
301
|
+
- 中间预览/评估对象要保持可见,右侧配置不要挤压它
|
|
302
|
+
- 发起评估、发布、保存等主操作固定在顶部右侧
|
|
303
|
+
|
|
304
|
+
### 5.10 会话 / 客服 / IM 页
|
|
305
|
+
|
|
306
|
+
目标是清楚处理“谁在说、说了什么、当前状态、下一步动作”。
|
|
307
|
+
|
|
308
|
+
- 消息必须使用 ChatMessage / ChatBubble / IMConversationPattern
|
|
309
|
+
- 输入区固定底部,消息流内部滚动
|
|
310
|
+
- 人工、AI、用户、系统状态必须视觉区分
|
|
311
|
+
- 工单、订单、用户画像等辅助信息放侧栏,不要挤进聊天流
|
|
312
|
+
- 高风险、待跟进、已解决等状态用 Tag 和固定位置表达
|
|
313
|
+
|
|
314
|
+
### 5.11 空状态 / 无权限 / 建设中
|
|
315
|
+
|
|
316
|
+
目标是解释原因并给出下一步。
|
|
317
|
+
|
|
318
|
+
- 优先使用 Empty 或对应 page-template
|
|
319
|
+
- 文案短,说明原因 + 一个主行动
|
|
320
|
+
- 不要堆多个按钮
|
|
321
|
+
- 不要用大面积插画替代明确操作
|
|
322
|
+
|
|
323
|
+
---
|
|
324
|
+
|
|
325
|
+
## 6. 组件设计角色
|
|
326
|
+
|
|
327
|
+
### 6.1 NavBar / Top Tabs / TagBar
|
|
328
|
+
|
|
329
|
+
导航组件表达“我在哪里”和“我正在处理哪一类对象”。
|
|
330
|
+
|
|
331
|
+
- NavBar 负责产品域和一级业务,不承载页面筛选条件
|
|
332
|
+
- 顶部 Tabs / segment 负责当前模块、模式、版本或工作台切换
|
|
333
|
+
- TagBar / 分类树负责对象过滤和知识分类,不要用按钮组冒充
|
|
334
|
+
- 当前态必须稳定可见;未选中态保持轻,不要每个项都加高饱和颜色
|
|
335
|
+
|
|
336
|
+
### 6.2 FormTitle
|
|
337
|
+
|
|
338
|
+
FormTitle 是页面语义锚点,不是装饰竖条。
|
|
339
|
+
|
|
340
|
+
- 页面总标题、白卡标题、面板标题、section 标题都先用 FormTitle
|
|
341
|
+
- 标题字重必须由组件内部保持 600,不外部覆写
|
|
342
|
+
- 状态和数量贴主标题右侧,用 `titleSuffix`
|
|
343
|
+
- 普通标题默认不展示 description
|
|
344
|
+
- 只有确实需要解释业务规则、风险、空状态原因时才开启 description
|
|
345
|
+
|
|
346
|
+
### 6.3 Button
|
|
347
|
+
|
|
348
|
+
Button 表达操作优先级。
|
|
349
|
+
|
|
350
|
+
- 每个区域最多一个 primary
|
|
351
|
+
- 普通操作用 outline / ghost / text,而不是继续增加 primary
|
|
352
|
+
- 危险操作必须有语义区分,不能伪装成普通按钮
|
|
353
|
+
- 低频操作收进更多菜单或 icon button,避免工具栏变成按钮墙
|
|
354
|
+
|
|
355
|
+
### 6.4 Tabs
|
|
356
|
+
|
|
357
|
+
Tabs 表达同一区域内的视图切换,不表达状态标签。
|
|
358
|
+
|
|
359
|
+
- 分段切换用 `variant="segment"`
|
|
360
|
+
- 内容区默认 sm
|
|
361
|
+
- 页面级或产品级导航才考虑 md / lg
|
|
362
|
+
- 不要用一排 Button 或 Tag 冒充 Tabs
|
|
363
|
+
|
|
364
|
+
### 6.5 Form 控件
|
|
365
|
+
|
|
366
|
+
表单控件承载输入任务,默认应稳定、清晰、可预测。
|
|
367
|
+
|
|
368
|
+
- 主区、筛选栏、弹窗、抽屉中的 Input / Select / Button 默认 md
|
|
369
|
+
- 表格行内或极窄工具条才用 sm
|
|
370
|
+
- 筛选栏:多个字段并排,固定宽
|
|
371
|
+
- 白卡正文单列字段:默认满宽
|
|
372
|
+
- 必填、错误、禁用、帮助说明使用组件内能力,不手写状态样式
|
|
373
|
+
|
|
374
|
+
### 6.6 TextArea / 代码输入
|
|
375
|
+
|
|
376
|
+
TextArea 是长内容编辑器,不是普通多行 div。
|
|
377
|
+
|
|
378
|
+
- 普通描述、备注、工单详情用默认 TextArea
|
|
379
|
+
- Prompt、JSON、SQL、日志、代码参数用 `variant="code"`
|
|
380
|
+
- 代码类文字必须保持 14px / 20px 节奏
|
|
381
|
+
- 主编辑区使用 `fillHeight`,让控件内部滚动
|
|
382
|
+
- 不手写原生 textarea + 行号列
|
|
383
|
+
|
|
384
|
+
### 6.7 Table / 列表
|
|
385
|
+
|
|
386
|
+
Table 承担 B 端最重要的数据对比。
|
|
387
|
+
|
|
388
|
+
- 表格优先保持稳定行高和列对齐
|
|
389
|
+
- 状态列用 Tag
|
|
390
|
+
- 操作列收敛,低频操作用更多菜单
|
|
391
|
+
- 长文本可省略,但必须有 Tooltip 或详情入口
|
|
392
|
+
- 表格不要被包进多层窄容器导致横向拥挤
|
|
393
|
+
|
|
394
|
+
### 6.8 Card
|
|
395
|
+
|
|
396
|
+
Card 用于业务摘要、入口、对象概览,不是通用白卡容器。
|
|
397
|
+
|
|
398
|
+
- 父级灰底时可用 `color="white"`
|
|
399
|
+
- 父级白底时用 `color="grey"` 做次级容器
|
|
400
|
+
- 摘要卡内部要有明确标题、状态、主指标或下一步入口
|
|
401
|
+
- 不要用 Card 承载大篇幅表单、表格、对话流
|
|
402
|
+
|
|
403
|
+
### 6.9 Chat 组件
|
|
404
|
+
|
|
405
|
+
Chat 组件表达消息和 AI 工作流。
|
|
406
|
+
|
|
407
|
+
- 所有消息用 ChatMessage / ChatBubble
|
|
408
|
+
- 用户、AI、系统、客服角色必须清楚
|
|
409
|
+
- 先判断会话背景,再选气泡色:AI 问答、任务执行、Copilot、流程跟进等执行类对话优先浅灰背景 `var(--color-blueGrey-200)`;常规 IM、客服进线、人工接待、站内信回复优先白色背景 `var(--color-surface)`
|
|
410
|
+
- 浅灰背景:左侧用户气泡用 `incomingTone="grey"`,右侧普通回复用 `outgoingTone="white"`;只有明确 AI / 机器人执行回复时才用 `outgoingTone="ai"`
|
|
411
|
+
- 白色背景:左侧用户气泡用 `incomingTone="grey"`,右侧人工/客服回复用 `outgoingTone="default"`,右侧 AI/机器人回复用 `outgoingTone="ai"`;禁止白底上再叠无描边白气泡
|
|
412
|
+
- ChatMessage 的 `role="user"` 用户气泡默认使用 `userBubbleTone="auto"` 自动适配:白色大背景 / 白色工作卡内自动变为 `fill-default` 灰气泡;浅灰、蓝灰、AI 会话灰底等非白背景自动保持 `surface` 白气泡。生成页面默认不要手动传 `userBubbleTone`;只有复杂背景无法识别时才显式传 `surface` / `fill`
|
|
413
|
+
- AI 建议、执行过程、追问按钮使用组件能力
|
|
414
|
+
- 输入区用 ChatInput,不手写渐变输入框
|
|
415
|
+
|
|
416
|
+
### 6.10 Modal / Sheet / FullScreenPage
|
|
417
|
+
|
|
418
|
+
浮层表达打断强度。
|
|
419
|
+
|
|
420
|
+
- 轻量确认用 Modal
|
|
421
|
+
- 侧向配置或详情查看用 Sheet
|
|
422
|
+
- 复杂编辑、长流程、沉浸任务用 FullScreenPage
|
|
423
|
+
- 浮层里同样遵守一主操作原则
|
|
424
|
+
|
|
425
|
+
---
|
|
426
|
+
|
|
427
|
+
## 7. 生成前决策流程
|
|
428
|
+
|
|
429
|
+
每次生成页面前,按顺序回答:
|
|
430
|
+
|
|
431
|
+
1. 这是哪类页面:平台壳、列表管理、分类列表、知识库详情、策略编辑、托管会话、首页、配置中心、数据看板、Playground、AI 入口、Copilot、产物预览、批测评估、表单、空状态?
|
|
432
|
+
2. 用户第一眼必须看到什么:状态、数据、输入框、对话、风险还是主操作?
|
|
433
|
+
3. 是否已有 page-template / page-pattern 命中?
|
|
434
|
+
4. 每个 UI 元素是否已有组件命中?
|
|
435
|
+
5. 如果组件未覆盖,自定义区块是否完全使用 `GLOBAL_DESIGN_RULES.md` token?
|
|
436
|
+
6. 页面滚动模型是什么:整页滚、面板内滚、表格内滚还是消息流滚?
|
|
437
|
+
7. 页面是否需要分屏对照:左上下文 / 中主工作区 / 右配置详情?
|
|
438
|
+
8. 是否有一个明确主操作,其他操作是否降级?
|
|
439
|
+
|
|
440
|
+
答不出来时,先回到 `components.index.json` 和 `LAYOUT_RULES.md`,不要开始写代码。
|
|
441
|
+
|
|
442
|
+
---
|
|
443
|
+
|
|
444
|
+
## 8. 生成后设计自检
|
|
445
|
+
|
|
446
|
+
交付前必须检查:
|
|
447
|
+
|
|
448
|
+
- 页面是否像“企业级 B 端平台”,而不是营销页、普通 admin 模板或随机 shadcn 页面
|
|
449
|
+
- 是否符合“灰色应用壳 + 白色工作区 + 轻导航 + 黑色主操作”的平台气质
|
|
450
|
+
- 页面 header 是否直接坐灰底,白卡是否只承载工作内容
|
|
451
|
+
- 最外层白卡是否无 border、无 shadow、12px 圆角
|
|
452
|
+
- 复杂任务是否采用稳定分屏,而不是纵向堆叠成长页面
|
|
453
|
+
- 列表/表格是否撑满工作区,筛选、分页和详情是否位置稳定
|
|
454
|
+
- 入口页是否把主行动放在视觉中心,模板/案例卡片是否作为辅助路径
|
|
455
|
+
- 产物预览是否像可交付文档,而不是被压缩成普通信息卡
|
|
456
|
+
- 所有标题是否使用 FormTitle,且字重没有被外部覆写
|
|
457
|
+
- 所有已有组件是否整体 import 使用,没有手搓相似样式
|
|
458
|
+
- 品牌青绿是否只用于焦点、激活、链接、品牌状态和标题竖条
|
|
459
|
+
- AI 渐变是否只出现在 AI 语义面
|
|
460
|
+
- 字号、间距、圆角、阴影是否全部来自 token 或组件默认值
|
|
461
|
+
- 主操作是否收敛,每个区域是否最多一个 primary
|
|
462
|
+
- 长文本是否不会静默裁切,省略是否有 Tooltip 或详情入口
|
|
463
|
+
- Playground / 会话 / 多面板页面是否没有错误地整页滚动
|
|
464
|
+
|
|
465
|
+
---
|
|
466
|
+
|
|
467
|
+
## 9. 与其他规范的关系
|
|
468
|
+
|
|
469
|
+
当本文件与具体实现规则发生冲突时,按以下优先级执行:
|
|
470
|
+
|
|
471
|
+
1. `components.index.json` 的组件 rules / examples
|
|
472
|
+
2. `SKILL.md` 的硬规则和 Checklist
|
|
473
|
+
3. `LAYOUT_RULES.md` 的页面骨架、宽高、自适应、滚动规则
|
|
474
|
+
4. `GLOBAL_DESIGN_RULES.md` 的 token、白卡、字体、间距、文本规则
|
|
475
|
+
5. 本文件的设计原则和 UX 取舍
|
|
476
|
+
|
|
477
|
+
本文件不能用来绕开组件调用、token 约束或布局铁律。它只负责让 AI 在正确规则内做更专业的页面判断。
|