@teamix-evo/skills 0.2.0 → 0.4.0

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.
Files changed (56) hide show
  1. package/README.md +18 -8
  2. package/_template/SKILL.md.hbs +14 -1
  3. package/manifest.json +79 -6
  4. package/package.json +7 -3
  5. package/src/teamix-evo-code-opentrek/SKILL.md +92 -0
  6. package/src/teamix-evo-code-opentrek/api-layering.md +225 -0
  7. package/src/teamix-evo-code-opentrek/checklist.md +173 -0
  8. package/src/teamix-evo-code-opentrek/error-and-loading.md +269 -0
  9. package/src/teamix-evo-code-opentrek/file-structure.md +273 -0
  10. package/src/teamix-evo-code-opentrek/forms-and-validation.md +220 -0
  11. package/src/teamix-evo-code-opentrek/reuse-first.md +130 -0
  12. package/src/teamix-evo-code-opentrek/routing-and-codesplit.md +298 -0
  13. package/src/teamix-evo-code-opentrek/testing.md +313 -0
  14. package/src/teamix-evo-code-uni-manager/SKILL.md +95 -0
  15. package/src/teamix-evo-code-uni-manager/api-layering.md +370 -0
  16. package/src/teamix-evo-code-uni-manager/checklist.md +193 -0
  17. package/src/teamix-evo-code-uni-manager/error-and-loading.md +389 -0
  18. package/src/teamix-evo-code-uni-manager/file-structure.md +339 -0
  19. package/src/teamix-evo-code-uni-manager/forms-and-validation.md +459 -0
  20. package/src/teamix-evo-code-uni-manager/reuse-first.md +188 -0
  21. package/src/teamix-evo-code-uni-manager/routing-and-codesplit.md +450 -0
  22. package/src/teamix-evo-code-uni-manager/testing.md +396 -0
  23. package/src/teamix-evo-design-opentrek/SKILL.md +71 -0
  24. package/src/teamix-evo-design-opentrek/boundaries.md +513 -0
  25. package/src/teamix-evo-design-opentrek/brand.md +154 -0
  26. package/src/teamix-evo-design-opentrek/checklist.md +83 -0
  27. package/src/teamix-evo-design-opentrek/components.md +245 -0
  28. package/src/teamix-evo-design-opentrek/flows.md +51 -0
  29. package/src/teamix-evo-design-opentrek/foundations.md +271 -0
  30. package/src/teamix-evo-design-opentrek/generation-flow.md +185 -0
  31. package/src/teamix-evo-design-opentrek/patterns/dashboard.md +31 -0
  32. package/src/teamix-evo-design-opentrek/patterns/detail-page.md +202 -0
  33. package/src/teamix-evo-design-opentrek/patterns/form-page.md +289 -0
  34. package/src/teamix-evo-design-opentrek/patterns/list-page.md +334 -0
  35. package/src/teamix-evo-design-opentrek/patterns/page-types.md +154 -0
  36. package/src/teamix-evo-design-opentrek/philosophy.md +96 -0
  37. package/src/teamix-evo-design-opentrek/rules/README.md +39 -0
  38. package/src/teamix-evo-design-opentrek/rules/boundaries.rules.json +391 -0
  39. package/src/teamix-evo-design-uni-manager/SKILL.md +73 -0
  40. package/src/teamix-evo-design-uni-manager/boundaries.md +564 -0
  41. package/src/teamix-evo-design-uni-manager/brand.md +202 -0
  42. package/src/teamix-evo-design-uni-manager/checklist.md +115 -0
  43. package/src/teamix-evo-design-uni-manager/components.md +254 -0
  44. package/src/teamix-evo-design-uni-manager/flows.md +63 -0
  45. package/src/teamix-evo-design-uni-manager/foundations.md +258 -0
  46. package/src/teamix-evo-design-uni-manager/generation-flow.md +194 -0
  47. package/src/teamix-evo-design-uni-manager/patterns/dashboard.md +95 -0
  48. package/src/teamix-evo-design-uni-manager/patterns/detail-page.md +224 -0
  49. package/src/teamix-evo-design-uni-manager/patterns/form-page.md +329 -0
  50. package/src/teamix-evo-design-uni-manager/patterns/list-page.md +356 -0
  51. package/src/teamix-evo-design-uni-manager/patterns/page-types.md +165 -0
  52. package/src/teamix-evo-design-uni-manager/philosophy.md +106 -0
  53. package/src/teamix-evo-design-uni-manager/rules/README.md +49 -0
  54. package/src/teamix-evo-design-uni-manager/rules/boundaries.rules.json +418 -0
  55. package/src/teamix-evo-manage/SKILL.md +281 -0
  56. package/skills/teamix-evo-manage/SKILL.md +0 -138
@@ -0,0 +1,356 @@
1
+ # List Page — 列表页模式(uni-manager)
2
+
3
+ > **触发**:用户描述含"列表/表格/查询/检索/卡片管理"。
4
+ > **核心特征**:多条结构化数据 + 搜索/筛选 + 分页。
5
+ > **页面级别**:L1(标题模式 PageHeader,自动继承 um-topbar + Sidebar)。
6
+ > **uni-manager 增强**:高密度行(36-40px)+ 跨云 CloudBadge 列 + 多租户 / 多区域筛选维度 + 批量操作高频。
7
+
8
+ ---
9
+
10
+ ## 1. 子类型路由
11
+
12
+ | 子类型 | 关键词 | 布局 | 核心组件 |
13
+ | ------------------- | ---------------------------------- | ----------------------------- | ----------------------------------- |
14
+ | **standard** | "列表"/"表格"/"查询" | TWO_COL | DataTable + Pagination |
15
+ | **l2-sidebar** | "分类"/"分组"/"左侧树" | TWO_COL + 内部 Sidebar(240px) | Sidebar + DataTable |
16
+ | **expandable** | "展开"/"子项"/"详情行" | TWO_COL | DataTable(行内展开) |
17
+ | **drawer** | "弹窗列表"/"选择器" | Drawer 内 | DataTable ⊂ Drawer |
18
+ | **pure-card** | "纯卡片"/"卡片管理"/"资源卡片管理" | SINGLE_COL | CardGrid + ItemCard + CardActionBar |
19
+ | **standard-card** | "卡片列表"/"分类卡片" | TWO_COL | Sidebar + CardGrid + ItemCard |
20
+ | **view-toggle** | "视图切换"/"列表卡片切换" | TWO_COL + ViewToggle | ViewToggle + DataTable/CardGrid |
21
+ | **advanced-filter** | "高级筛选"/"更多条件" | TWO_COL | AdvancedFilterPanel + DataTable |
22
+ | **multi-cloud** | "多云资源"/"跨云列表"/"跨账号" | TWO_COL | DataTable + CloudBadge 首列 |
23
+
24
+ ### 路由优先级
25
+
26
+ 1. "多云资源"/"跨云列表"/"跨账号" → multi-cloud
27
+ 2. "纯卡片"/"卡片管理" → pure-card
28
+ 3. "卡片列表"/"分类卡片" → standard-card
29
+ 4. "视图切换"/"列表卡片" → view-toggle
30
+ 5. "高级筛选" → advanced-filter
31
+ 6. "展开"/"子项" → expandable
32
+ 7. "分类"/"分组"/"左侧树" → l2-sidebar
33
+ 8. "弹窗列表"/"选择器" → drawer
34
+ 9. 默认 → standard
35
+
36
+ ---
37
+
38
+ ## 2. 标准结构
39
+
40
+ ```
41
+ ┌────────────────────────────────────────────┐
42
+ │ um-topbar (框架级,含租户 / 区域切换) │
43
+ ├────────────────────────────────────────────┤
44
+ │ PageHeader: 标题模式 [新建] │ ← Header zone
45
+ ├────────────────────────────────────────────┤
46
+ │ ActionToolbar: 🔍 搜索 [筛选▼] [刷新] │ ← Toolbar zone
47
+ ├────────────────────────────────────────────┤
48
+ │ ▢ ☁ ID │ 状态 │ 创建时间 │ 操作 │ ← Main zone (含 CloudBadge 列)
49
+ │ ▢☁阿里 i-001 │ 运行中│ 2026-05-13│ ⋯ │
50
+ │ ▢☁AWS i-002 │ 已完成│ 2026-05-12│ ⋯ │
51
+ ├────────────────────────────────────────────┤
52
+ │ [已选 2 项] 批量启动 / 批量停止 / 批量删除 │ ← BulkActionBar (按需)
53
+ ├────────────────────────────────────────────┤
54
+ │ ← 1 / 24 → [50/页 ▼] 共 1200条 │ ← Footer zone
55
+ └────────────────────────────────────────────┘
56
+ ```
57
+
58
+ ---
59
+
60
+ ## 3. 必需组件
61
+
62
+ | 组件 | 位置 | 说明 |
63
+ | ----------------------------- | ------- | ----------------------------------------------------------- |
64
+ | **PageHeader** | top | 标题模式(L1 页面);右侧主操作(如「新建」) |
65
+ | **ActionToolbar** | toolbar | 单行 flex(nowrap);左 actions + 中 SearchCombo + 右 tools |
66
+ | **DataTable** 或 **CardGrid** | main | 二选一,按子类型 |
67
+ | **Pagination** | footer | 默认 10 条/页(标准列表)/ 12 条/页(卡片) |
68
+
69
+ **框架级**(自动继承,不在 skill 内声明):um-topbar、Sidebar。
70
+
71
+ ---
72
+
73
+ ## 4. SearchCombo 规范
74
+
75
+ > ListPage 顶部搜索 + 筛选的标准复合组件。**禁止**用 Input + Select 散件拼装。
76
+
77
+ ### 4.1 在 ActionToolbar 中的位置(硬约束)
78
+
79
+ - SearchCombo 是 ActionToolbar 的**直接子元素**,位于 `.left-actions` 之后、`.right-tools` 之前
80
+ - 与 `.left-actions` 间距 = **20px**
81
+
82
+ ### 4.2 结构
83
+
84
+ ```
85
+ [ 维度Select | 分隔线 | 搜索Input | 搜索Button(图标) ]
86
+ ```
87
+
88
+ - 容器统一 border + radius **2px**(uni-manager 锐利圆角)+ height 32px + min-width 200px
89
+ - 内部元素无独立边框
90
+
91
+ ### 4.3 交互规则
92
+
93
+ | 触发 | 行为 |
94
+ | ------------------------- | -------------------------------- |
95
+ | 切换维度 | input.value 清空 → input.focus() |
96
+ | 输入框回车 / 点击搜索按钮 | 执行搜索 → 重置到第 1 页 |
97
+ | 输入框 hover 显示 × | 清空输入 → 维度切回"全部" |
98
+ | 输入框为空时点搜索 | 清除当前条件 → 重置分页 |
99
+
100
+ ### 4.4 FilterTag 展示
101
+
102
+ - 已应用的搜索条件以 FilterTag 形式展示
103
+ - 单条 Tag 含 `label: value ×`
104
+ - 多条提供「清空全部」链接
105
+
106
+ ### 4.5 搜索维度配置示例(uni-manager 多云增强)
107
+
108
+ > 维度按业务上下文动态配置;默认含「全部」。**uni-manager 默认在维度中暴露"租户 / 区域 / 云厂商"**。
109
+
110
+ ```json
111
+ // 默认维度(多云资源)
112
+ [
113
+ { "label": "全部", "value": "all" },
114
+ { "label": "名称", "value": "name" },
115
+ { "label": "ID", "value": "id" },
116
+ { "label": "云厂商", "value": "cloud" },
117
+ { "label": "区域", "value": "region" },
118
+ { "label": "租户", "value": "tenant" }
119
+ ]
120
+
121
+ // ECS 实例列表示例(多云)
122
+ [
123
+ { "label": "全部", "value": "all" },
124
+ { "label": "实例 ID/名称", "value": "instance" },
125
+ { "label": "IP", "value": "ip" },
126
+ { "label": "标签", "value": "tag" },
127
+ { "label": "云厂商", "value": "cloud" },
128
+ { "label": "区域", "value": "region" }
129
+ ]
130
+ ```
131
+
132
+ ---
133
+
134
+ ## 5. DataTable 规则(核心)
135
+
136
+ ### 5.1 列元规则(每列必备)
137
+
138
+ | 规则 | 说明 |
139
+ | -------- | ------------------------------------- |
140
+ | 唯一 ID | 用于列宽 / 显隐持久化 |
141
+ | 显隐规则 | "始终显示" 或 "条件显示" + 触发条件 |
142
+ | 宽度定义 | 固定 px / 百分比 / minmax |
143
+ | 对齐方式 | left(默认)/ center / right |
144
+ | 排序能力 | 是否支持服务端排序 |
145
+ | 固定方向 | left(前缀列)/ right(操作列)/ none |
146
+ | 字体 | ID/IP/Hash 等机器列用 `font-mono` |
147
+
148
+ ### 5.2 列固定
149
+
150
+ - 左固定:Checkbox(48px) + ID/名称(20%)
151
+ - 右固定:操作列(140px)
152
+ - 固定列与滚动列交界处 `box-shadow: 1px 0 0 var(--border)`
153
+ - 固定列 `z-index: 10`,滚动列 `z-index: 1`
154
+ - **uni-manager 多云列表**:CloudBadge 列建议固定为左侧第二列(紧邻 Checkbox)
155
+
156
+ ### 5.3 行高(uni-manager 高密度)
157
+
158
+ | 类型 | 行高 | 说明 |
159
+ | ------------------ | -------- | -------------------------------------- |
160
+ | 单行内容(默认) | **36px** | uni-manager 高密度(OpenTrek 是 56px) |
161
+ | 双行内容(带规格) | **44px** | 第二行附属信息(规格 / 标签) |
162
+ | 多行内容(含监控) | 56px+ | 含小型监控图 / 多标签 |
163
+
164
+ ### 5.4 选择框三态
165
+
166
+ | 状态 | 视觉 | 触发 |
167
+ | ------ | ---------------- | --------------- |
168
+ | 未选 ☐ | 默认 | — |
169
+ | 半选 ☐̲ | 当前页有部分选中 | 自动计算 |
170
+ | 全选 ☑ | 当前页全选 | 点表头 checkbox |
171
+
172
+ ### 5.5 行选择交互
173
+
174
+ - Checkbox:切换当前行
175
+ - 行点击(非操作区):跳转 DetailPage
176
+ - Shift+点击:范围选中
177
+ - Ctrl/Cmd+点击:切换单行
178
+ - 选中样式:背景 `bg-accent`(与 Checkbox 选中态一致)
179
+
180
+ ### 5.6 列宽拖拽
181
+
182
+ - 拖拽手柄置于列头右边界,宽 2px,`cursor: col-resize`
183
+ - 仅对 `visibility: always` 的列允许拖拽
184
+ - 最小宽度取列定义的 `minWidth`(无定义时默认 100px,状态/监控类窄列 80px)
185
+ - 最大宽度不超过表格宽度的 50%
186
+ - 拖拽过程对 `document.body` 加 `cursor: col-resize` + `user-select: none`,防鼠标越界丢失光标
187
+ - 拖拽结束写入 `localStorage`(key 命名 `columnWidths:{产品ID}`);初始化时读取恢复
188
+ - 列配置弹窗提供「恢复默认列宽」按钮,清 localStorage 后刷新
189
+
190
+ ### 5.7 列排序
191
+
192
+ - 表头右侧 `⇅` 图标(`text-tertiary`、12px)
193
+ - 升序 `↑` / 降序 `↓` 用 `primary` 色
194
+ - 点击循环:默认 → 升序 → 降序 → 默认
195
+ - 排序状态持久化到 `localStorage`
196
+
197
+ ### 5.8 文字换行
198
+
199
+ | 列类型 | 处理 |
200
+ | ---------- | -------------------------------------------------- |
201
+ | ID / IP | `font-mono` + `word-break: break-all` + `truncate` |
202
+ | 规格 | 多行展示,不截断 |
203
+ | 标签 | 最多 3 个 + `+N`,不自动换行 |
204
+ | CloudBadge | icon + label,不换行 |
205
+
206
+ ---
207
+
208
+ ## 6. 操作列规范(硬约束)
209
+
210
+ ### 6.1 结构
211
+
212
+ 操作列 = 主操作 + 分隔线 + 次要操作 + 分隔线 + 状态操作 + 分隔线 + 更多
213
+
214
+ | 元素 | 样式 | 禁用 |
215
+ | ------------------- | -------- | -------------------------------- |
216
+ | 主操作(管理/查看) | 链接样式 | — |
217
+ | `\|` 分隔线 | — | — |
218
+ | 次要操作 | 文字按钮 | `opacity-45 pointer-events-none` |
219
+ | 状态操作 | 下拉按钮 | 同上 |
220
+ | "..." 更多 | Dropdown | — |
221
+
222
+ ### 6.2 水平对齐(硬约束)
223
+
224
+ - `text-align: left`,**表头与表体均需显式声明**
225
+ - 表头「操作」左边缘 X = 表体「详情」链接左边缘 X
226
+ - ❌ 禁止操作列内容居中
227
+ - ❌ 禁止只在 `.col-action` 上设 text-align(部分浏览器会被覆盖)
228
+
229
+ ### 6.3 操作列行为映射
230
+
231
+ | 操作 | 触发 | 前置 | 二次确认 | 目标 | 返回行为 |
232
+ | --------- | -------- | ---------- | ------------------ | ----------------- | ------------------------------------ |
233
+ | 查看/管理 | 点链接 | — | 否 | DetailPage | 返回列表保持筛选+分页 |
234
+ | 编辑 | 点按钮 | — | 否 | FormPage / Drawer | 保存成功返回列表 + Toast「保存成功」 |
235
+ | 删除 | 点按钮 | 资源已停止 | 是(输入资源名称) | Dialog 确认 | 确认后刷新 + Toast「删除成功」 |
236
+ | 更多 | Dropdown | — | 按操作分级 | Dropdown 菜单 | 选择子操作 |
237
+
238
+ ---
239
+
240
+ ## 7. Card 内对齐规则(硬约束)
241
+
242
+ 水平 padding 分层模型:
243
+
244
+ - **Card.paddingX = 24px**:提供 Card 外缘 ↔ 非 Table 子组件的呼吸
245
+ - **Table 中间列 padding = 12px**(左右 12+12=24,列间 24px)
246
+ - **Table 首列 padding-left = 20px**(额外缩进)
247
+ - **Table 末列 padding-right = 20px**
248
+
249
+ | 组件 | 水平 padding | 起始 X |
250
+ | ------------------------------------------------------- | ------------------- | -------------- |
251
+ | Card 白卡容器 | **24px** | Card 外缘 |
252
+ | PageHeader / ActionToolbar / BulkActionBar / Pagination | **0** | Card 外缘 + 24 |
253
+ | Table 中间列 td | 12px | — |
254
+ | Table 首列 td | padding-left: 20px | Card 外缘 + 44 |
255
+ | Table 末列 td | padding-right: 20px | Card 右缘 - 44 |
256
+
257
+ ### 禁止项
258
+
259
+ - ❌ 在 PageHeader / ActionToolbar / Pagination 上重复设 paddingX(会与 Card.paddingX 叠加为 48px)
260
+ - ❌ Table 中间列 padding 不为 12px
261
+ - ❌ Table 首/末列 padding 不为 20px
262
+ - ❌ 用 `px-4` `px-6` 字面量 — 用 `px-3 first:pl-5 last:pr-5`
263
+ - ❌ 在 Card 与子组件间插入额外 paddingX 包裹层
264
+
265
+ ### 验证
266
+
267
+ 1. PageHeader / ActionToolbar / Pagination 起始 X = Card 左缘 + 24
268
+ 2. Table 首列(checkbox)内容 X = Card 左缘 + 44
269
+ 3. Table 相邻中间列内容间距 = 24
270
+
271
+ ---
272
+
273
+ ## 8. 状态-操作模式
274
+
275
+ ### 8.1 元规则
276
+
277
+ - 每个状态必须定义操作可用性矩阵
278
+ - 禁用样式统一 `opacity-45 pointer-events-none`
279
+ - 混合状态时批量按钮禁用,hover 提示原因
280
+ - 异步操作必须有 Toast + 列表刷新机制
281
+
282
+ ### 8.2 操作确认分级(uni-manager 强化)
283
+
284
+ | 级别 | 适用 | 确认方式 |
285
+ | -------------------- | -------------------- | ---------------------------------- |
286
+ | **一级**(可逆) | 查看、编辑、远程连接 | 直接执行 |
287
+ | **二级**(影响状态) | 启动、停止、重启 | AlertDialog 确认 |
288
+ | **三级**(不可逆) | 删除、释放、销毁 | AlertDialog + 输入**资源名称**确认 |
289
+
290
+ ### 8.3 异步反馈
291
+
292
+ | 操作 | Toast 文案 | 列表 |
293
+ | -------- | ------------------------- | ------------ |
294
+ | 状态变更 | "操作已提交" | 轮询状态 |
295
+ | 删除 | "删除已提交" | 移除行或刷新 |
296
+ | 批量 | "批量操作已提交,共 N 条" | 轮询 |
297
+
298
+ ### 8.4 页面间导航交互
299
+
300
+ - **操作列「查看/管理」** → DetailPage(页面跳转);面包屑返回,保持筛选+分页
301
+ - **操作列「编辑」** → FormPage 或 Drawer(跳转/侧滑);保存/取消返回列表,保存附 Toast
302
+ - **创建操作** → FormPage(页面跳转);创建成功/取消返回列表
303
+ - **搜索执行** → 当前列表(数据刷新);重置到第 1 页
304
+ - **筛选条件变更** → 当前列表(数据刷新);重置到第 1 页,保持筛选条件
305
+ - **um-topbar 切换租户/区域** → 当前列表 URL 改写 + 数据刷新(见 flows.md §1.E)
306
+
307
+ ---
308
+
309
+ ## 9. 嵌套约束
310
+
311
+ | 父子关系 | 状态 |
312
+ | ----------------------------------------------------------------------------------------------------------- | ---------------------------- |
313
+ | um-topbar → PageContainer → ContentWrapper → Card(白卡容器) → PageHeader/ActionToolbar/DataTable/Pagination | ALLOW |
314
+ | ContentWrapper → 业务组件(无 Card 包裹) | **FORBID** |
315
+ | Card → Card | **FORBID**(白卡单例) |
316
+ | ActionToolbar → SearchCombo | ALLOW |
317
+ | CardGrid → ItemCard → CardActionBar | ALLOW |
318
+ | DataTable → Pagination | ALLOW |
319
+ | DataTable → Form | **FORBID**(用 Drawer 触发) |
320
+ | 自建 topbar | **FORBID**(UM1) |
321
+
322
+ ---
323
+
324
+ ## 10. 禁止项
325
+
326
+ | 禁项 | 原因 |
327
+ | ----------------------- | ----------------------------------- |
328
+ | Form 直接出现在内容区 | 应通过 Dialog/Drawer/FormPage 触发 |
329
+ | Chart 出现在标准列表 | 图表归属 Dashboard |
330
+ | 内联编辑 | 编辑必须通过 Drawer/Dialog/FormPage |
331
+ | 拖拽排序 | 表格数据为服务端排序 |
332
+ | 无限滚动 | B2B 管理场景需精确分页 |
333
+ | 悬浮操作栏 | 遮挡数据,可发现性差 |
334
+ | 右键菜单 | 移动端不兼容 |
335
+ | `hr` / section-divider | 间距通过 padding/margin 控制 |
336
+ | 跨云资源不带 CloudBadge | 违反 UM3 |
337
+
338
+ ---
339
+
340
+ ## 11. 列表页特有自检
341
+
342
+ - [ ] PageHeader / ActionToolbar / DataTable / Pagination 嵌套结构正确
343
+ - [ ] um-topbar 在框架层就位(UM1)
344
+ - [ ] Card 内统一左右 padding 24px(除 Table 列)
345
+ - [ ] 子类型组件正确(standard 用 DataTable,pure-card 用 CardGrid,multi-cloud 含 CloudBadge 列)
346
+ - [ ] SearchCombo 位置正确(间距 20px)+ 圆角 2px(uni-manager 锐利风)
347
+ - [ ] 高密度行高 36px(默认)/ 44px(双行)
348
+ - [ ] 操作列水平对齐左对齐
349
+ - [ ] 状态-操作矩阵在所有状态下正确
350
+ - [ ] 二次确认按级别正确(启动/停止 = AlertDialog;删除 = 输入**资源名称**确认)
351
+ - [ ] 批量操作按钮:选中 ≥1 行显示,混合状态禁用
352
+ - [ ] 搜索:回车执行、维度切换清空、FilterTag 展示
353
+ - [ ] 多云场景:搜索维度暴露"云厂商 / 区域 / 租户"
354
+ - [ ] 跨云资源在主区有 CloudBadge 列(UM3)
355
+ - [ ] 分页:保持筛选 + "共 N 条"
356
+ - [ ] 边界:空数据 Empty + 加载 Loading + 错误 ErrorState
@@ -0,0 +1,165 @@
1
+ # Page Types — 5 种标准页面类型(uni-manager)
2
+
3
+ > AI 生成页面前**必须先识别页面类型**,再选择对应模式。本文档是 generation-flow.md Step 2 的核心输入。
4
+ >
5
+ > uni-manager 与 OpenTrek 五型同构,差异在于:**Dashboard 默认承担"Console Home"**、所有 L1/L2 页面**必须挂在 `um-topbar` 之下**。
6
+
7
+ ---
8
+
9
+ ## 1. 类型概览
10
+
11
+ | 类型 | 用途 | 核心组件 | 子文件 |
12
+ | ---------------- | ------------------------------ | ----------------------------------------------- | ------------------------- |
13
+ | **ListPage** | 资源集合的查询、筛选、批量操作 | DataTable / CardGrid + SearchCombo + Pagination | `list-page.md` |
14
+ | **DetailPage** | 单个资源的完整信息展示 | Tabs + DescriptionList + ActionToolbar | `detail-page.md` |
15
+ | **FormPage** | 资源的创建 / 编辑 | Form(FieldGroup + Field) + SubmitBar | `form-page.md` |
16
+ | **Dashboard** | 控制台首页 / 数据概览与监控 | StatCard + Chart + Timeline | `dashboard.md` |
17
+ | **Dialog/Sheet** | 二次确认、快速操作 | AlertDialog / Dialog / Sheet | (见 components.md §3.1) |
18
+
19
+ ---
20
+
21
+ ## 2. 识别决策树(uni-manager 增强版)
22
+
23
+ ```text
24
+ 用户描述包含什么?
25
+ ├─ "控制台首页"/"工作台"/"Console Home" → Dashboard (Console Home 子类型)
26
+ ├─ "列表"/"表格"/"查询"/"检索"/"卡片管理" → ListPage
27
+ ├─ "详情"/"查看"/"信息"/"概览(单资源)" → DetailPage
28
+ ├─ "新建"/"创建"/"编辑"/"修改"/"复制" → FormPage
29
+ ├─ "仪表盘"/"概览大屏"/"监控"/"统计"/"资源分布" → Dashboard
30
+ ├─ "确认"/"删除二次确认"/"快速重命名" → Dialog
31
+ └─ 不确定 → 优先 ListPage(最通用入口)
32
+ ```
33
+
34
+ **优先级裁决**:
35
+
36
+ - 出现"批量操作" → ListPage(即使页面看起来像 Dashboard)
37
+ - 出现"步骤"/"分步" → FormPage(Wizard 变体)
38
+ - 出现"对比" → DetailPage(对比型)
39
+ - 出现"租户切换"/"区域切换" → 任何页面都要带 `um-topbar`(框架级,不影响类型判定)
40
+ - 用户说"管理控制台"/"运维门户" 且未指明具体页 → **Dashboard (Console Home)**
41
+
42
+ ---
43
+
44
+ ## 3. 页面级别 (L1 / L2 / L0)
45
+
46
+ | 级别 | 适用类型 | PageHeader 模式 | um-topbar | Sidebar |
47
+ | ------ | -------------------- | ------------------------- | --------- | -------- |
48
+ | **L0** | Dialog / Sheet 内部 | 无 PageHeader | 不渲染 | 无 |
49
+ | **L1** | ListPage、Dashboard | title 模式(仅标题) | 必有 | 自动继承 |
50
+ | **L2** | DetailPage、FormPage | breadcrumb 模式(含路径) | 必有 | 自动继承 |
51
+
52
+ **框架自动继承**:L1 / L2 页面**不需要在 skill 中显式声明** Sidebar / um-topbar / PageHeader — 由 page-frame 统一管理。
53
+
54
+ ---
55
+
56
+ ## 4. Zone Map(区域命名约定)
57
+
58
+ | Zone | 位置 | 用途 |
59
+ | --------------- | ------------- | -------------------------------------------------------------------- |
60
+ | **um-topbar** | 顶顶 | 全局 topbar:logo + 租户/区域切换 + 用户菜单(uni-manager 专属壳层) |
61
+ | **header** | um-topbar 下 | PageHeader(标题或面包屑 + 主操作) |
62
+ | **toolbar** | header 下 | ActionToolbar(搜索 + 筛选 + 视图切换) |
63
+ | **main** | 中部主体 | 主要内容区(DataTable / Form / DescriptionList) |
64
+ | **bulk-action** | main 浮于底部 | BulkActionBar(仅 ListPage 选中行时) |
65
+ | **footer** | 底部固定 | Pagination 或 SubmitBar |
66
+ | **sidebar** | 左侧 | 全局导航(框架级,自动继承) |
67
+ | **aside** | 右侧 | 侧边详情 / AI 面板(按 variant 启用) |
68
+
69
+ **默认壳层结构**:`um-topbar(顶) + Sidebar(左) + Header(顶下) + Main(中)`。
70
+
71
+ ---
72
+
73
+ ## 5. Dashboard(含 Console Home)
74
+
75
+ > **完整规范见 [`dashboard.md`](./dashboard.md)** —— Console Home / 资源概览 / 业务概览 / 监控概览 四子类型 + StatCard 下钻规则 + 跨云资产分布。
76
+
77
+ ---
78
+
79
+ ## 6. 页间流转
80
+
81
+ > 单页内部规则在 §1-§5,本节是**跨页流转**视角。完整的"五条核心用户旅程"(A 资源查找 / B 创建 / C 异常 / D 批量 / E 上下文切换)见 [`flows.md`](../flows.md)。
82
+
83
+ ### 6.1 后台主流转图
84
+
85
+ ```text
86
+ ┌─────────────────────┐
87
+ │ um-topbar / Console│ ← Console Home 是登录默认
88
+ └──────────┬──────────┘
89
+ │ 选择模块
90
+
91
+ ┌──────────┐ 创建 ┌──────────┐ 查看 ┌────────────┐
92
+ │ FormPage │◄────│ ListPage │──────►│ DetailPage │
93
+ └────┬─────┘ └─────┬────┘ └─────┬──────┘
94
+ │ 成功 │ │
95
+ └────────────────►│◄──────────────────┘
96
+ │ 编辑 返回
97
+
98
+ ┌──────────────┐
99
+ │ FormPage │
100
+ └──────────────┘
101
+
102
+ Console Home ──下钻──► ListPage(预筛选)
103
+ um-topbar 切租户/区域 ──> 当前页 URL 改写 + 数据刷新
104
+ ```
105
+
106
+ ### 6.2 流转设计规则
107
+
108
+ 1. **导航深度 ≤ 4 层** — 超过即是信息架构问题
109
+ 2. **每层都有返回路径** — 面包屑 / 返回按钮 / Esc 快捷键
110
+ 3. **um-topbar 始终可见** — 仅"全屏编辑 / 大屏展示"模式可隐藏
111
+ 4. **状态保持** — 列表筛选条件、表单未保存内容必须保留;切换租户 / 区域时给出二次确认(见 flows.md §1.E)
112
+ 5. **快捷路径** — 高频操作建议提供 `Cmd+K` 入口
113
+ 6. **不创建死胡同** — 任何成功 / 失败页面都必须有"下一步"按钮
114
+ 7. **跨云资源在列表 / 详情中均要标注 CloudBadge** — 让用户始终知道"我在哪片云的哪个区域"
115
+
116
+ ### 6.3 资源生命周期
117
+
118
+ | 阶段 | 发现 | 创建 | 配置 | 监控 | 变更 | 删除 |
119
+ | ---- | -------- | -------- | ---------- | --------- | -------- | -------- |
120
+ | 页面 | ListPage | FormPage | DetailPage | Dashboard | FormPage | Dialog |
121
+ | 动作 | 搜索定位 | 填写表单 | 查看明细 | 处置异常 | 编辑提交 | 二次确认 |
122
+
123
+ > "资源" 泛指云上业务对象(实例 / 数据库 / 用户 / 工单 / 配置项 / 日志…)。
124
+
125
+ ### 6.4 CRUD 流转速查
126
+
127
+ | 意图 | 关键词 | 目标页 | 完成后 |
128
+ | ---------- | -------------- | ---------------------------- | --------------- |
129
+ | 看首页 | 控制台/工作台 | Dashboard (Console Home) | — |
130
+ | 查看列表 | 列表/查询/检索 | ListPage | — |
131
+ | 查看详情 | 详情/查看/信息 | DetailPage | 可返回列表 |
132
+ | 新建 | 新建/创建/新增 | FormPage(新建) | 保存后返回列表 |
133
+ | 编辑 | 编辑/修改 | FormPage(编辑) 或 Drawer | 保存后返回原页 |
134
+ | 删除 | 删除/移除 | Dialog (输入名称确认) | 确认后刷新列表 |
135
+ | 复制 | 复制/克隆 | FormPage(复制新建) | 保存后返回列表 |
136
+ | 切换上下文 | 切租户/切区域 | um-topbar 触发 + AlertDialog | URL 改写 + 刷新 |
137
+
138
+ ---
139
+
140
+ ## 7. 通用结构铁律(所有页面类型共享)
141
+
142
+ 1. **um-topbar → PageContainer → ContentWrapper → Card(白卡容器) → 业务组件**
143
+ - 业务组件**必须**经白卡容器包裹,禁止直接放在 ContentWrapper 内
144
+ 2. **Card(白卡容器) 不可嵌套** — 白卡是单例
145
+ 3. **页头不可重复** — 子页面禁止自建 header / topbar,PageHeader / um-topbar 由框架管控(UM1 / UM2)
146
+ 4. **不在内容区直接放 Form 整体** — 必须用 FieldGroup + Field(详见 boundaries.md C7)
147
+ 5. **不在 ListPage / DetailPage 内嵌 Chart 整体** — 图表归属 Dashboard
148
+ 6. **不在 FormPage / DetailPage 内嵌 DataTable 整体** — 关联数据通过 Tabs / Drawer 组织
149
+ 7. **跨云资源在 ListPage / DetailPage 主区必须有 CloudBadge** — 不可只在 Tooltip 中提示(UM3)
150
+
151
+ ---
152
+
153
+ ## 8. 类型选择自检
154
+
155
+ 完成识别后必须能回答:
156
+
157
+ - [ ] 这是 L0 / L1 / L2 哪一级?
158
+ - [ ] PageHeader 用 title 还是 breadcrumb 模式?
159
+ - [ ] um-topbar 是否就位(L1/L2 必须)
160
+ - [ ] Main 区核心组件是什么?(DataTable / DescriptionList / FieldGroup)
161
+ - [ ] 是否需要 toolbar / bulk-action / footer Zone?
162
+ - [ ] 跨云资源是否带 CloudBadge?
163
+ - [ ] 错位风险:是否在不该出现的页面类型里出现了 Form / DataTable / Chart?
164
+
165
+ 类型识别错误 = 后续所有约束都错位。**错则回到 Step 1 重判。**
@@ -0,0 +1,106 @@
1
+ # 设计哲学 · Uni-Manager
2
+
3
+ > 回答**"为什么这么做"**。具体规则见 [boundaries.md](./boundaries.md) / [foundations.md](./foundations.md)。
4
+
5
+ ---
6
+
7
+ ## 1. 我们是谁
8
+
9
+ Uni-Manager 是面向**专有云 / 混合云 / 多租户管控平台**的设计语言。用户是云平台管理员、运维工程师、SRE、合规审计员 — 他们的工作环境特征:
10
+
11
+ - 每天面对来自多个云厂商(阿里云 / 腾讯云 / AWS / 私有 IDC)的资源
12
+ - 在多个租户 / 项目 / 区域上下文之间频繁切换
13
+ - 操作影响面大、可见性要求高、可审计可回滚
14
+ - 屏幕长期保持高密度信息驻留(一屏看尽几十条资源)
15
+
16
+ **核心主张**:**让多云、多租户、多区域的复杂性变成"可枚举、可预期、可审计"的统一管理体验**。
17
+
18
+ **三条不可让步的底层信念**:
19
+
20
+ 1. 设计是降低认知负荷的手段,不是展示创意的舞台
21
+ 2. 每一个视觉元素必须承载功能价值或信息语义
22
+ 3. **一致性是云管平台的生命线** — 不同云、不同区域、不同模块都应让用户产生"同一个工具"的感受
23
+
24
+ ---
25
+
26
+ ## 2. 四大设计原则(按优先级降序)
27
+
28
+ 冲突时裁决顺序:**Safety > Predictability > Clarity > Efficiency**。
29
+
30
+ ### P1 · Safety — 安全防护(最高优先级)
31
+
32
+ > 关键资源操作必须有防护栏。云管平台一次误操作可能影响整片资源。
33
+
34
+ - 危险操作(删除 / 释放 / 停机)二次确认 → `AlertDialog variant="destructive"` + 输入资源名称确认
35
+ - 跨租户 / 跨区域操作显式提示(Banner 或 Drawer 顶部)
36
+ - 表单未保存离开提示 → `beforeunload`
37
+ - 无权限操作隐藏或禁用 → `usePermission`
38
+ - 操作记录可查(OperationLog 全局可访问)
39
+
40
+ **评判**:一次误操作的最大损失是否被框定在可恢复的范围内?
41
+
42
+ ### P2 · Predictability — 可预期性
43
+
44
+ > 用户不应该猜测"点击这个会发生什么"。云管面对几十种资源类型,一致性是底线。
45
+
46
+ - 同类资源使用同一套页面模板(List / Detail / Form)
47
+ - 同类操作出现在固定位置(Zone Map + 一致性三件套,见 brand.md §3.2)
48
+ - 操作后 ≤ 200ms 给出反馈
49
+ - 跨云资源操作的语义统一("释放" 在所有云厂商页面下都对应同一动作)
50
+
51
+ **评判**:用户在 A 云的实例页学会的操作,能否无障碍迁移到 B 云的实例页?
52
+
53
+ ### P3 · Clarity — 清晰优先
54
+
55
+ > 界面的首要职责是传递信息,不是展示装饰。多云场景"看清归属"比"看着漂亮"重要。
56
+
57
+ - 文字对比度 ≥ 4.5:1(WCAG AA) — 走 `text-foreground` on `bg-background`
58
+ - 状态语义 = **颜色 + 图标 + 文字**三重传达 — `Badge variant` + Icon + Label
59
+ - 跨云资源 **必须** 用 cloud-provider Badge 标注归属
60
+ - 资源 ID / Hash 一律 `font-mono` + 复制按钮
61
+ - 3 级信息层级:标题 / 正文 / 辅助
62
+
63
+ **评判**:新用户是否能在 3 秒内识别"这条记录属于哪朵云、哪个区域、什么状态"?
64
+
65
+ ### P4 · Efficiency — 效率至上
66
+
67
+ > 运维每天面对数百次重复操作,减少一次点击就是减少一次出错机会。
68
+
69
+ - 高频操作 ≤ 2 次点击可达
70
+ - 支持多选 + 批量操作 → `BulkActionBar` + Checkbox 列
71
+ - 列表页必须提供搜索入口 → `SearchCombo` / `FilterBar`
72
+ - 筛选条件持久化(URL Params + localStorage)
73
+ - 上下文切换器(租户 / 项目 / 区域)固定在 um-topbar,全局可达
74
+
75
+ **评判**:完成核心任务的步骤数是否为同类产品最少?
76
+
77
+ ---
78
+
79
+ ## 3. 原则冲突示例
80
+
81
+ | 场景 | 候选 | 选 | 理由 |
82
+ | ------------------------------ | ------------------------------------------------ | --- | --------------------------- |
83
+ | 释放实例要不要二次确认? | A. 直接释放<br>B. AlertDialog + 输入名称确认 | B | Safety > Efficiency |
84
+ | 跨租户切换要不要确认? | A. 静默切换<br>B. 显式 Banner 提示当前租户已切换 | B | Safety > Efficiency |
85
+ | 多云资源用一个表格还是分 Tab? | A. 按云厂商分 Tab<br>B. 单表格 + cloud Badge 列 | B | Predictability + Efficiency |
86
+ | 状态用什么表达? | A. 仅颜色<br>B. 颜色 + 图标 + 文字 | B | Clarity > Efficiency |
87
+
88
+ ---
89
+
90
+ ## 4. 决策框架(套用顺序)
91
+
92
+ 1. Safety > Predictability > Clarity > Efficiency
93
+ 2. 业务正确性 > 视觉美观
94
+ 3. **一致性 > 创新性**(云管底线)
95
+ 4. 可访问性 > 视觉丰富度
96
+ 5. 性能 > 动效丰富度
97
+
98
+ ---
99
+
100
+ 文件分工:
101
+
102
+ - **philosophy.md** — 为什么(含云管特殊主张)
103
+ - **boundaries.md** — 不能做什么(含 UM1-UM3 专有云一致性硬约束)
104
+ - **foundations.md** — 用什么 token(hybridcloud 真值)
105
+ - **patterns/** — 具体页面怎么搭(含 Console Home)
106
+ - **brand.md** — 品牌画像 + 一致性三件套