@teamix-evo/skills 0.5.0 → 0.7.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 (75) hide show
  1. package/manifest.json +23 -37
  2. package/package.json +2 -2
  3. package/src/teamix-evo-design-opentrek/SKILL.md +210 -42
  4. package/src/teamix-evo-design-opentrek/boundaries.md +3 -3
  5. package/src/teamix-evo-design-opentrek/components.md +41 -40
  6. package/src/teamix-evo-design-opentrek/examples/detail-ai-gateway-1.html +1069 -0
  7. package/src/teamix-evo-design-opentrek/examples/detail-ai-gateway-instance.html +941 -0
  8. package/src/teamix-evo-design-opentrek/examples/detail-page-api-doc.html +906 -0
  9. package/src/teamix-evo-design-opentrek/examples/detail-page-config.html +993 -0
  10. package/src/teamix-evo-design-opentrek/examples/detail-page-monitor.html +1339 -0
  11. package/src/teamix-evo-design-opentrek/examples/detail-page.html +933 -0
  12. package/src/teamix-evo-design-opentrek/examples/settings-page.html +1119 -0
  13. package/src/teamix-evo-design-opentrek/examples/standard-card-list.html +1094 -0
  14. package/src/teamix-evo-design-opentrek/examples/standard-table-list.html +1361 -0
  15. package/src/teamix-evo-design-opentrek/examples/wizard-form-page.html +877 -0
  16. package/src/teamix-evo-design-opentrek/flows.md +85 -12
  17. package/src/teamix-evo-design-opentrek/foundations.md +9 -9
  18. package/src/teamix-evo-design-opentrek/generation-flow.md +15 -3
  19. package/src/teamix-evo-design-opentrek/pages/detail-page/SKILL.md +260 -0
  20. package/src/teamix-evo-design-opentrek/pages/detail-page/patterns/api-doc-detail.md +163 -0
  21. package/src/teamix-evo-design-opentrek/pages/detail-page/patterns/comparison-detail.md +100 -0
  22. package/src/teamix-evo-design-opentrek/pages/detail-page/patterns/monitor-detail.md +190 -0
  23. package/src/teamix-evo-design-opentrek/pages/detail-page/patterns/resource-detail.md +148 -0
  24. package/src/teamix-evo-design-opentrek/pages/form-page/SKILL.md +362 -0
  25. package/src/teamix-evo-design-opentrek/pages/list-page/SKILL.md +286 -0
  26. package/src/teamix-evo-design-opentrek/pages/list-page/_shared/action-column-spec.md +60 -0
  27. package/src/teamix-evo-design-opentrek/pages/list-page/_shared/column-meta-rules.md +117 -0
  28. package/src/teamix-evo-design-opentrek/pages/list-page/_shared/search-combo-spec.md +194 -0
  29. package/src/teamix-evo-design-opentrek/pages/list-page/_shared/state-action-pattern.md +51 -0
  30. package/src/teamix-evo-design-opentrek/pages/list-page/patterns/advanced-filter-list.md +94 -0
  31. package/src/teamix-evo-design-opentrek/pages/list-page/patterns/card-list.md +558 -0
  32. package/src/teamix-evo-design-opentrek/pages/list-page/patterns/drawer-list.md +76 -0
  33. package/src/teamix-evo-design-opentrek/pages/list-page/patterns/expandable-list.md +70 -0
  34. package/src/teamix-evo-design-opentrek/pages/list-page/patterns/l2-sidebar-list.md +73 -0
  35. package/src/teamix-evo-design-opentrek/pages/list-page/patterns/standard-list.md +198 -0
  36. package/src/teamix-evo-design-opentrek/patterns/color-mapping.md +1 -1
  37. package/src/teamix-evo-design-opentrek/patterns/detail-page.md +217 -152
  38. package/src/teamix-evo-design-opentrek/patterns/form-page.md +437 -231
  39. package/src/teamix-evo-design-opentrek/patterns/list-page.md +220 -292
  40. package/src/teamix-evo-design-opentrek/patterns/page-types.md +40 -130
  41. package/src/teamix-evo-design-opentrek/rules/_assets/OP_AGENT RUNTIME.svg +1 -0
  42. package/src/teamix-evo-design-opentrek/rules/_assets/OP_AI GATEWAY.svg +1 -0
  43. package/src/teamix-evo-design-opentrek/rules/_assets/OP_AI STUDIO.svg +1 -0
  44. package/src/teamix-evo-design-opentrek/rules/_assets/OP_DEV-2.svg +1 -0
  45. package/src/teamix-evo-design-opentrek/rules/_assets/OP_LOGO.svg +1 -0
  46. package/src/teamix-evo-design-opentrek/rules/_assets/OP_OPS.svg +1 -0
  47. package/src/teamix-evo-design-opentrek/rules/boundaries.rules.json +3 -3
  48. package/src/teamix-evo-design-opentrek/rules/business-mapping.json +124 -0
  49. package/src/teamix-evo-design-opentrek/rules/common-components.json +924 -0
  50. package/src/teamix-evo-design-opentrek/rules/component-specs.json +1083 -0
  51. package/src/teamix-evo-design-opentrek/rules/design-tokens.css +433 -0
  52. package/src/teamix-evo-design-opentrek/rules/design-tokens.json +2798 -0
  53. package/src/teamix-evo-design-opentrek/rules/layout-rules.json +218 -0
  54. package/src/teamix-evo-design-opentrek/rules/page-flow.json +351 -0
  55. package/src/teamix-evo-design-opentrek/rules/page-frame.json +241 -0
  56. package/src/teamix-evo-design-opentrek/rules/page-header-spec.md +123 -0
  57. package/src/teamix-evo-design-opentrek/rules/page-types.json +206 -0
  58. package/src/teamix-evo-design-opentrek/rules/sidebar-spec.md +217 -0
  59. package/src/teamix-evo-design-opentrek/rules/styling.json +188 -0
  60. package/src/teamix-evo-design-opentrek/rules/token-mapping.md +284 -0
  61. package/src/teamix-evo-design-uni-manager/SKILL.md +1 -1
  62. package/src/teamix-evo-design-uni-manager/boundaries.md +3 -3
  63. package/src/teamix-evo-design-uni-manager/brand.md +1 -1
  64. package/src/teamix-evo-design-uni-manager/components.md +30 -28
  65. package/src/teamix-evo-design-uni-manager/foundations.md +21 -21
  66. package/src/teamix-evo-design-uni-manager/generation-flow.md +3 -1
  67. package/src/teamix-evo-design-uni-manager/patterns/detail-page.md +1 -1
  68. package/src/teamix-evo-design-uni-manager/patterns/form-page.md +18 -18
  69. package/src/teamix-evo-design-uni-manager/patterns/list-page.md +29 -29
  70. package/src/teamix-evo-design-uni-manager/patterns/page-types.md +11 -11
  71. package/src/teamix-evo-design-uni-manager/philosophy.md +1 -1
  72. package/src/teamix-evo-design-uni-manager/rules/boundaries.rules.json +3 -3
  73. package/src/teamix-evo-manage/SKILL.md +288 -121
  74. package/src/teamix-evo-upgrade/SKILL.md +298 -0
  75. package/src/teamix-evo-design-opentrek/patterns/sidebar.md +0 -122
@@ -1,367 +1,295 @@
1
- # List Page — 列表页模式
2
-
3
- > ⚠️ **Prerequisites**: 你必须已在 [generation-flow.md](../generation-flow.md) Step 2 确认页面类型为 **ListPage**,并由 Step 3 引导到这里。
4
-
5
- > **触发**:用户描述含"列表/表格/查询/检索/卡片管理"。
6
- > **核心特征**:多条结构化数据 + 搜索/筛选 + 分页。
7
- > **页面级别**:L1(标题模式 PageHeader,自动继承 Sidebar)。
8
-
9
1
  ---
10
-
11
- ## 1. 子类型路由
12
-
13
- | 子类型 | 关键词 | 布局 | 核心组件 |
14
- | ------------------- | -------------------------------- | ----------------------------- | ----------------------------------- |
15
- | **standard** | "列表"/"表格"/"查询" | TWO_COL | DataTable + Pagination |
16
- | **l2-sidebar** | "分类"/"分组"/"左侧树" | TWO_COL + 内部 Sidebar(240px) | Sidebar + DataTable |
17
- | **expandable** | "展开"/"子项"/"详情行" | TWO_COL | DataTable(行内展开) |
18
- | **drawer** | "弹窗列表"/"选择器" | Drawer 内 | DataTable ⊂ Drawer |
19
- | **pure-card** | "纯卡片"/"卡片管理"/"智能体列表" | SINGLE_COL | CardGrid + ItemCard + CardActionBar |
20
- | **standard-card** | "卡片列表"/"分类卡片"/"资源卡片" | TWO_COL | Sidebar + CardGrid + ItemCard |
21
- | **view-toggle** | "视图切换"/"列表卡片切换" | TWO_COL + ViewToggle | ViewToggle + DataTable/CardGrid |
22
- | **advanced-filter** | "高级筛选"/"更多条件" | TWO_COL | AdvancedFilterPanel + DataTable |
23
-
24
- ### 路由优先级
25
-
26
- 1. "纯卡片"/"卡片管理" → pure-card
27
- 2. "卡片列表"/"分类卡片"/"资源卡片" → standard-card
28
- 3. "视图切换"/"列表卡片" → view-toggle
29
- 4. "高级筛选" → advanced-filter
30
- 5. "展开"/"子项" → expandable
31
- 6. "分类"/"分组"/"左侧树" → l2-sidebar
32
- 7. "弹窗列表"/"选择器" → drawer
33
- 8. 默认 → standard
34
-
2
+ name: page-rule-list
3
+ parent: page-rule-system
4
+ description: >
5
+ 列表页(PageType: ListPage)路由规则。根据子类型识别关键词,路由到 patterns/ 目录下对应详细规则。
6
+ 共享规则在 _shared/ 目录(表格列元规则 / 操作列规范 / 状态-操作模式)。
7
+ 产品配置在 products/{产品}/ 目录(列定义 / 状态机 / 业务映射)。
8
+ 三层参数化架构(v7.0):元规则(固化)+ 产品配置(灵活)+ 模式细节。
9
+ 触发:需要列表页规则、匹配列表页模板、生成列表页。
10
+ Version: 7.8.4
35
11
  ---
36
12
 
37
- ## 2. Template 组件拼装
13
+ # 列表页路由规则
38
14
 
39
- > 源自 `packages/create/variants/opentrek/src/templates/list-page.tsx`
15
+ > ⚠️ **本文件是高阶路由索引,不含布局实现细节。**
16
+ > **生成页面时必须读取**:
17
+ > - `../pages/list-page/SKILL.md` — 子技能入口(子类型列表 + 属性模型)
18
+ > - `../pages/list-page/patterns/{subtype}.md` — 完整骨架 + DOM 结构 + CSS 约束
19
+ > - `../pages/list-page/_shared/search-combo-spec.md` — SearchCombo 20px 间距硬约束
20
+ > - `../pages/list-page/_shared/action-column-spec.md` — 操作列规范
21
+ >
22
+ > 本文件仅用于:(1) 了解 6 种子类型概览 (2) 快速判断属于哪个子类型
40
23
 
41
- ```tsx
42
- <PageShell background="muted" sidebar={<OpSidebar />}>
43
- <OpPageContainer header={<PageHeader title="..." actions={...} />}>
44
- {/* children: 以下组件由消费方自由组合 */}
45
- <ActionToolbar ... />
46
- <DataTable ... /> {/* 或 CardGrid */}
47
- <Pagination ... />
48
- </OpPageContainer>
49
- </PageShell>
50
- ```
51
-
52
- | Slot | 注入内容 | 来源 |
53
- | ------------ | ------------------------------------------------- | ---------------------------------- |
54
- | `sidebar` | OpSidebar(左导) | `@/components/business/op-sidebar` |
55
- | `pageHeader` | PageHeader 整块(title + Tabs + Toolbar 组合) | `@/components/ui/page-header` |
56
- | `children` | ActionToolbar + DataTable / CardGrid + Pagination | 消费方自组合 |
57
-
58
- **壳层特征**:
24
+ ## 1. 类型定义
59
25
 
60
- - PageShell `background="muted"` → 灰底主区
61
- - OpPageContainer → 内嵌**无边框大白卡**(`bg-card rounded-2xl p-6`)
62
- - 业务组件直接作为 children,**不要再包 `<Card>`**(白卡单例)
26
+ **页面类型**: ListPage
27
+ **核心特征**: 多条结构化数据的展示、筛选和操作入口
28
+ **识别条件**: 页面包含数据表格(DataTable)或卡片网格(CardGrid)+ 搜索/筛选 + 分页
63
29
 
64
30
  ---
65
31
 
66
- ## 3. 标准结构(设计线框)
67
-
68
- ```
69
- ┌────────────────────────────────────────────┐
70
- │ PageHeader: 标题模式 [新建] │ ← Header zone
71
- ├────────────────────────────────────────────┤
72
- │ ActionToolbar: 🔍 搜索 [筛选▼] [刷新] │ ← Toolbar zone
73
- ├────────────────────────────────────────────┤
74
- │ ▢ ID │ 状态 │ 创建时间 │ 操作 │ ← Main zone
75
- │ ▢ ORD-001234 │ 进行中│ 2026-05-13│ ⋯ │
76
- │ ▢ ORD-001235 │ 已完成│ 2026-05-12│ ⋯ │
77
- ├────────────────────────────────────────────┤
78
- │ [已选 2 项] 批量审批 / 批量导出 / 批量删除 │ ← BulkActionBar (按需)
79
- ├────────────────────────────────────────────┤
80
- │ ← 1 / 24 → [50/页 ▼] 共 1200条 │ ← Footer zone
81
- └────────────────────────────────────────────┘
82
- ```
32
+ ## 2. 子类型路由表
83
33
 
84
- ---
34
+ | 子类型ID | 识别关键词 | 路由到 | 布局模式 | 核心组件 |
35
+ |----------|-----------|--------|----------|----------|
36
+ | standard | "列表"/"表格"/"查询" | → `patterns/standard-list.md` | 模式D | DataTable + Pagination |
37
+ | l2-sidebar | "分类"/"分组"/"左侧树" | → `patterns/l2-sidebar-list.md` | 模式D + Sidebar | Sidebar(240px) + DataTable |
38
+ | expandable | "展开"/"子项"/"详情" | → `patterns/expandable-list.md` | 模式D | DataTable(行内展开) |
39
+ | drawer | "弹窗列表"/"选择器" | → `patterns/drawer-list.md` | 模式D (Sheet 内) | DataTable ⊂ Sheet |
40
+ | **pure-card** | "纯卡片"/"卡片管理"/"智能体列表" | → `patterns/card-list.md` | 模式A-CARD | CardGrid + ItemCard + CardActionBar |
41
+ | **standard-card** | "卡片列表"/"分类卡片"/"资源卡片" | → `patterns/card-list.md` | 模式D-CARD (TWO_COL) | Sidebar + CardGrid + ItemCard + CardActionBar |
42
+ | **view-toggle** | "视图切换"/"列表卡片切换" | → `patterns/card-list.md` | 模式D + ViewToggle | ViewToggle + CardGrid/DataTable + ItemCard(tile) |
43
+ | advanced-filter | "高级筛选"/"更多条件" | → `patterns/advanced-filter-list.md` | 模式D+ | AdvancedFilterPanel + DataTable |
85
44
 
86
- ## 4. 必需组件
45
+ > **v7.2 合并**:原 `pure-card-list.md` / `standard-card-list.md` / `view-toggle-list.md` 三个 patterns 合并为单一 `patterns/card-list.md`,子类型差异在其 §1 差异矩阵中区分。
87
46
 
88
- | 组件 | 位置 | 说明 |
89
- | ----------------------------- | ------- | -------------------------------------------------------- |
90
- | **PageHeader** | top | 标题模式(L1 页面);右侧主操作(如「新建」) |
91
- | **ActionToolbar** | toolbar | 单行 flex(nowrap);左 actions + 中 SearchCombo + 右 tools |
92
- | **DataTable** 或 **CardGrid** | main | 二选一,按子类型 |
93
- | **Pagination** | footer | 默认 10 条/页(标准列表) / 12 条/页(卡片) |
47
+ ### 路由判定优先级
94
48
 
95
- **框架级**(自动继承,不在 skill 内声明):Sidebar。
49
+ 1. 含"纯卡片"/"卡片管理"关键词 → pure-card
50
+ 2. 含"卡片列表"/"分类卡片"/"资源卡片"关键词 → standard-card
51
+ 3. 含"视图切换"/"列表卡片"关键词 → view-toggle
52
+ 4. 含"高级筛选"关键词 → advanced-filter
53
+ 5. 含"展开"/"子项"关键词 → expandable
54
+ 6. 含"分类"/"分组"/"左侧树"关键词 → l2-sidebar
55
+ 7. 含"弹窗列表"/"选择器"关键词 → drawer
56
+ 8. 其他列表场景 → standard(默认)
96
57
 
97
58
  ---
98
59
 
99
- ## 5. SearchCombo 规范
100
-
101
- > ListPage 顶部搜索 + 筛选的标准复合组件。**禁止**用 Input + Select 散件拼装。
102
-
103
- ### 4.1 在 ActionToolbar 中的位置(硬约束)
104
-
105
- - SearchCombo 是 ActionToolbar 的**直接子元素**,位于 `.left-actions` 之后、`.right-tools` 之前
106
- - 与 `.left-actions` 间距 = **20px**
107
-
108
- ### 4.2 结构
109
-
110
- ```
111
- [ 维度Select | 分隔线 | 搜索Input | 搜索Button(图标) ]
112
- ```
113
-
114
- - 容器统一 border + radius 6px + height 32px + min-width 200px
115
- - 内部元素无独立边框
60
+ ## 3. 通用属性模型
116
61
 
117
- ### 4.3 交互规则
62
+ | 属性 | 值 | 说明 |
63
+ |------|-----|------|
64
+ | layout.type | TWO_COL / SINGLE_COL | 见 `rules/page-frame.json` layoutSelectionRules |
65
+ | layout.frame | L1 | 列表页为 L1 级页面,自动继承 Sidebar(含Logo+产品名)。无面包屑。 |
66
+ | responsive | Desktop ≥1200px(完整), Tablet 768-1199px(横滚), Mobile <768px(不推荐) |
67
+ | pagination.default | 标准列表 10 条/页, 纯卡片 12 条/页 |
118
68
 
119
- | 触发 | 行为 |
120
- | ------------------------- | -------------------------------- |
121
- | 切换维度 | input.value 清空 → input.focus() |
122
- | 输入框回车 / 点击搜索按钮 | 执行搜索 → 重置到第 1 页 |
123
- | 输入框 hover 显示 × | 清空输入 → 维度切回"全部" |
124
- | 输入框为空时点搜索 | 清除当前条件 → 重置分页 |
69
+ > **框架组件自动继承**:Sidebar 的存在性由 `rules/page-frame.json` 统一管理,子技能只定义内容区组件。L1 级页面自动包含:Sidebar(顶部Logo+产品名),无面包屑。
125
70
 
126
- ### 4.4 FilterTag 展示
71
+ ---
127
72
 
128
- - 已应用的搜索条件以 FilterTag 形式展示
129
- - 单条 Tag 含 `label: value ×`
130
- - 多条提供「清空全部」链接
73
+ ## 4. 组件推荐
131
74
 
132
- ### 4.5 搜索维度配置示例
75
+ ### 必需组件
133
76
 
134
- > 维度按业务上下文动态配置;默认含「全部」。
77
+ | 组件 | 引用 | 层级 | 位置 | 说明 |
78
+ |------|------|------|------|------|
79
+ | PageHeader | — | ORGANISM | top | 页面标题(18px/medium),默认无描述 |
80
+ | ActionToolbar | — | ORGANISM | top | 操作工具栏,单行 flex(flex-wrap:nowrap),左侧创建按钮 + 右侧搜索工具 |
81
+ | Pagination | — | MOLECULAR | bottom | 分页控件 |
135
82
 
136
- ```json
137
- // 默认维度
138
- [
139
- { "label": "全部", "value": "all" },
140
- { "label": "名称", "value": "name" },
141
- { "label": "ID", "value": "id" }
142
- ]
83
+ > **框架级组件**(自动继承,无需在此声明):Sidebar 由 `rules/page-frame.json` 统一管理,L1 级页面自动包含。
84
+ > 注:DataTable 为 standard/l2/expandable/drawer/view-toggle 的必需组件;CardGrid 为 standard-card/pure-card/view-toggle 的必需组件。
143
85
 
144
- // ECS 实例列表示例
145
- [
146
- { "label": "全部", "value": "all" },
147
- { "label": "实例 ID/名称", "value": "instance" },
148
- { "label": "IP", "value": "ip" },
149
- { "label": "标签", "value": "tag" }
150
- ]
151
- ```
86
+ ### 禁止组件
152
87
 
88
+ | 组件 | 约束 | 原因 |
89
+ |------|------|------|
90
+ | Form(ORGANISM) | 禁止直接出现在内容区 | 表单应通过 Dialog/Sheet/FormPage 触发 |
91
+ | Chart(ORGANISM) | 禁止出现在标准列表页 | 图表属于 Dashboard |
92
+ | PageContainer | 禁止嵌套 | 见 `rules/layout-rules.json` |
93
+ | 内联编辑 | 禁止 | 编辑应通过 Sheet/Dialog/FormPage |
94
+ | 拖拽排序 | 禁止 | 表格数据为服务端排序 |
95
+ | 无限滚动 | 禁止 | B2B 管理场景需精确分页 |
96
+ | 悬浮操作栏 | 禁止 | 遮挡数据,可发现性差 |
97
+ | 右键菜单 | 禁止 | 可发现性差,移动端不兼容 |
98
+ | hr/section-divider | 禁止 | 组件间距通过 padding/margin 控制,禁止用分割线分隔 PageHeader/ActionToolbar/DataTable
153
99
  ---
154
100
 
155
- ## 6. DataTable 规则(核心)
156
-
157
- ### 5.1 列元规则(每列必备)
158
-
159
- | 规则 | 说明 |
160
- | -------- | ------------------------------------- |
161
- | 唯一 ID | 用于列宽 / 显隐持久化 |
162
- | 显隐规则 | "始终显示" 或 "条件显示" + 触发条件 |
163
- | 宽度定义 | 固定 px / 百分比 / minmax |
164
- | 对齐方式 | left(默认)/ center / right |
165
- | 排序能力 | 是否支持服务端排序 |
166
- | 固定方向 | left(前缀列)/ right(操作列)/ none |
167
- | 字体 | ID/IP/Hash 等机器列用 `font-mono` |
168
-
169
- ### 5.2 列固定
101
+ ## 5.1 Card 内左右对齐【稳定规则 / 硬约束】
170
102
 
171
- - 左固定:Checkbox(48px) + ID/名称(20%)
172
- - 右固定:操作列(140px)
173
- - 固定列与滚动列交界处 `box-shadow: 1px 0 0 var(--border)`
174
- - 固定列 `z-index: 10`,滚动列 `z-index: 1`
103
+ > **这是列表页生成中最容易不稳定的点,必须严格遵守:**
175
104
 
176
- ### 5.3 行高
105
+ 水平 padding 采用**分层模型 v7.5**,职责严格划分:
177
106
 
178
- - 单行内容:56px
179
- - 多行内容(如规格列):72px+
107
+ - **Card.paddingX (20px)** → 提供 Card 外侧边缘 ↔ **非 Table 子组件** (PageHeader / ActionToolbar / BulkActionBar / Pagination) 外缘的外侧呼吸
108
+ - **Table td.paddingX (12px)** → 仅提供中间列与列之间的内部呼吸(相邻 td 12+12=24)
109
+ - **Table 首末列 padding-left/right = 20px** → 表格作为密集数据区,额外享有 20px 视觉缩进
180
110
 
181
- ### 5.4 选择框三态
111
+ > 注意:Table 首列内容 X = Card 外缘 + 40px,与 PageHeader / ActionToolbar / Pagination 起始线**不对齐**(这是设计预期)。
182
112
 
183
- | 状态 | 视觉 | 触发 |
184
- | ------ | ---------------- | --------------- |
185
- | 未选 ☐ | 默认 | — |
186
- | 半选 ☐̲ | 当前页有部分选中 | 自动计算 |
187
- | 全选 ☑ | 当前页全选 | 点表头 checkbox |
113
+ Card 白卡容器:`padding: 0 var(--card-padding-x)` (上下 0 / 左右 20px)。注意:`--card-padding-x` (20px) 独立于 `--page-container-padding` (16px),后者为 PageContainer 外层间距。
188
114
 
189
- ### 5.5 行选择交互
115
+ | 组件 | 水平 padding | 起始线 X 坐标 | 说明 |
116
+ |------|---------------|-----------------|------|
117
+ | Card 白卡容器 | **20px** | Card 外缘 | `padding: 0 var(--card-padding-x)`【外侧呼吸提供者】 |
118
+ | PageHeader | **0** | Card 外缘 + 20 | 外侧呼吸由 Card.paddingX 提供 |
119
+ | ActionToolbar | **0** | Card 外缘 + 20 | 外侧呼吸由 Card.paddingX 提供 |
120
+ | **Table th / td 中间列** | **12px** | — | 仅提供列间内部呼吸(列间距 24px) |
121
+ | **Table th / td 首列** | `padding-left: 20px` | **Card 外缘 + 40** | 表格额外享有 20px 缩进 |
122
+ | **Table th / td 末列** | `padding-right: 20px` | 末缘 = Card 右缘 - 40 | 同上 |
123
+ | BulkActionBar | **0** | Card 外缘 + 20 | 外侧呼吸由 Card.paddingX 提供 |
124
+ | Pagination | **0** | Card 外缘 + 20 | 外侧呼吸由 Card.paddingX 提供 |
190
125
 
191
- - Checkbox:切换当前行
192
- - 行点击(非操作区):跳转 DetailPage
193
- - Shift+点击:范围选中
194
- - Ctrl/Cmd+点击:切换单行
195
- - 选中样式:背景 `bg-accent`(与 Checkbox 选中态一致)
126
+ ### 参考 CSS
196
127
 
197
- ### 5.6 列宽拖拽
128
+ ```css
129
+ .data-table thead th,
130
+ .data-table tbody td { padding: 12px 12px; }
131
+ .data-table thead th:first-child,
132
+ .data-table tbody td:first-child { padding-left: 20px; }
133
+ .data-table thead th:last-child,
134
+ .data-table tbody td:last-child { padding-right: 20px; }
135
+ ```
198
136
 
199
- - 拖拽手柄置于列头右边界,宽 2px,`cursor: col-resize`
200
- - 仅对 `visibility: always` 的列允许拖拽
201
- - 最小宽度取列定义的 `minWidth`(无定义时默认 100px,状态/监控类窄列 80px)
202
- - 最大宽度不超过表格宽度的 50%
203
- - 拖拽过程对 `document.body` 加 `cursor: col-resize` + `user-select: none`,防鼠标越界丢失光标
204
- - 拖拽结束写入 `localStorage`(key 命名 `columnWidths:{产品ID}`);初始化时读取恢复
205
- - 列配置弹窗提供「恢复默认列宽」按钮,清 localStorage 后刷新
137
+ ### 禁止项
206
138
 
207
- ### 5.7 列排序
139
+ - ❌ 禁止在非 Table 子组件 (PageHeader / ActionToolbar / BulkActionBar / Pagination) 重复设置 paddingX(会与 Card.paddingX 叠加为 40px)
140
+ - ❌ 禁止 Table 中间列 td paddingX 不为 12px(列间距不为 24px,与设计不一致)
141
+ - ❌ 禁止 Table 首列 padding-left 为非 20 值(0 / 12 / 16 / 24 都不适用)
142
+ - ❌ 禁止 Table 末列 padding-right 为非 20 值(同上)
143
+ - ❌ 禁止使用 `px-4` / `px-6` 等字面量。Tailwind 唯一可接受模式:`px-3 first:pl-5 last:pr-5`(20px = pl-5 / pr-5)
144
+ - ❌ 禁止在 Card 与子组件之间插入额外的 paddingX 包裹层(如为 `.card-scrollable` 加 paddingX)
208
145
 
209
- - 表头右侧 `⇅` 图标(`text-tertiary`、12px)
210
- - 升序 `↑` / 降序 `↓` 用 `primary` 色
211
- - 点击循环:默认 → 升序 → 降序 → 默认
212
- - 排序状态持久化到 `localStorage`
146
+ ### 验证方法
213
147
 
214
- ### 5.8 文字换行
148
+ 生成后逐项验证:
215
149
 
216
- | 列类型 | 处理 |
217
- | ------- | -------------------------------------------------- |
218
- | ID / IP | `font-mono` + `word-break: break-all` + `truncate` |
219
- | 规格 | 多行展示,不截断 |
220
- | 标签 | 最多 3 个 + `+N`,不自动换行 |
150
+ 1. PageHeader 标题左边缘 X = ActionToolbar 首个控件 X = Pagination 左侧起始 X = **Card 左边缘 + 20px**
151
+ 2. Table 首列 (checkbox) 内容左边缘 X = **Card 左边缘 + 40px**(20 + 20)
152
+ 3. Table 末列内容右边缘 X = **Card 右边缘 - 40px**
153
+ 4. Table 相邻两个中间列内容间距 = **24px**(例如「ID」列右边缘 ↔ 「状态」列左边缘)
221
154
 
222
- ---
155
+ 任一不一致即为违反。
223
156
 
224
- ## 7. 操作列规范(硬约束)
157
+ ### 视觉预期
225
158
 
226
- ### 6.1 结构
159
+ - thead 背景、tbody tr `border-bottom`、BulkActionBar 背景、Pagination `border-top` **不延伸到 Card 左右边缘**(Card 左右各保留 20px 白边)
160
+ - 表格首末列内容在此基础上进一步缩进 20px,总体与 Card 边缘保持 40px 距离
161
+ - 这是设计预期行为;表格作为密集数据区,额外的首末列缩进为文本提供更舒适的阅读呼吸
227
162
 
228
- 操作列 = 主操作 + 分隔线 + 次要操作 + 分隔线 + 状态操作 + 分隔线 + 更多
163
+ > Token 定义:`rules/design-tokens.json` · `componentSpacing.Card.padding` + `componentSpacing.DataTable.firstLastCellRule` + `componentSpacing.DataTable.horizontalAlignmentRule`
164
+ > 组件详细规范:`rules/component-specs.json` · `C17-Table.horizontalPaddingRule`
229
165
 
230
- | 元素 | 样式 | 禁用 |
231
- | ------------------- | -------- | -------------------------------- |
232
- | 主操作(管理/查看) | 链接样式 | — |
233
- | `\|` 分隔线 | — | — |
234
- | 次要操作 | 文字按钮 | `opacity-45 pointer-events-none` |
235
- | 状态操作 | 下拉按钮 | 同上 |
236
- | "..." 更多 | Dropdown | — |
166
+ ---
237
167
 
238
- ### 6.2 水平对齐(硬约束)
168
+ ## 5.2 ContentCard 表面规则 v7.6【硬约束】
239
169
 
240
- - `text-align: left`,**表头与表体均需显式声明**
241
- - 表头「操作」左边缘 X = 表体「详情」链接左边缘 X
242
- - ❌ 禁止操作列内容居中
243
- - ❌ 禁止只在 `.col-action` 上设 text-align(部分浏览器会被覆盖)
170
+ 内容区大卡片容器(ContentCard 作为白卡容器使用时)表面规则:
244
171
 
245
- ### 6.3 操作列行为映射
172
+ | 属性 | v7.5 及之前 | **v7.6(当前)** |
173
+ |------|-------------|----------------|
174
+ | `border` | `1px solid hsl(var(--gray-line))` | **`none`(去掉)** |
175
+ | `box-shadow` | `0 1px 2px rgba(0,0,0,0.04)` 或 `shadow-card` | **`var(--shadow-sm)` = `0 1px 2px rgba(0,0,0,0.05)`** |
176
+ | `border-radius` | `var(--radius-lg)` = 12px | 保持不变 |
177
+ | `background` | `hsl(var(--card))` | 保持不变 |
246
178
 
247
- | 操作 | 触发 | 前置 | 二次确认 | 目标 | 返回行为 |
248
- | --------- | -------- | ---------- | --------------- | ----------------- | ------------------------------------ |
249
- | 查看/管理 | 点链接 | — | 否 | DetailPage | 返回列表保持筛选+分页 |
250
- | 编辑 | 点按钮 | — | 否 | FormPage / Drawer | 保存成功返回列表 + Toast「保存成功」 |
251
- | 删除 | 点按钮 | 资源已停止 | 是(三级 Dialog) | Dialog 确认 | 确认后刷新 + Toast「删除成功」 |
252
- | 更多 | Dropdown | — | 按操作分级 | Dropdown 菜单 | 选择子操作 |
179
+ ### 参考 CSS
253
180
 
254
- ---
181
+ ```css
182
+ .card,
183
+ .card-wrapper {
184
+ background: hsl(var(--card));
185
+ border-radius: var(--radius-lg);
186
+ /* v7.6:去掉 1px border,使用最弱阴影 */
187
+ box-shadow: var(--shadow-sm);
188
+ overflow: hidden;
189
+ }
190
+ ```
255
191
 
256
- ## 8. 主区对齐规则(硬约束 — 最容易不稳定的点)
192
+ ### 禁止项
257
193
 
258
- opentrek 主区由 `OpPageContainer` 提供 — 外层 `py-5 pr-5`(无左 padding,sidebar 自带 20px 间隙) + 内嵌**无边框白底大 Card**(`bg-card rounded-2xl p-6`)承载 PageHeader / ActionToolbar / DataTable / Pagination。水平 padding 分层模型:
194
+ - 禁止 `border: 1px solid hsl(var(--gray-line))`(v7.6 去线框后不再需要)
195
+ - ❌ 禁止硬编码 `box-shadow: 0 1px 2px rgba(0,0,0,0.04)`(一律走 `var(--shadow-sm)`)
196
+ - ❌ 禁止使用 `shadow-DEFAULT` / `shadow-md` 等更强阴影(会造成表面过重)
197
+ - ❌ 禁止同时使用 `border` + `shadow`(v7.6 为二选一关系,仅保留 `shadow`)
259
198
 
260
- - **OpPageContainer 外层**:`py-5 pr-5`(灰底主区 ↔ 白卡的间隙;左侧贴 sidebar 不留 padding)
261
- - **OpPageContainer 内白卡 padding = 24px**(`p-6`):提供白卡内缘 ↔ 非 Table 子组件的呼吸 — **由容器统一管,不要在 PageHeader / Toolbar 上再加 paddingX**
262
- - **Table 中间列 padding = 12px**(左右 12+12=24,列间 24px)
263
- - **Table 首列 padding-left = 20px**(额外缩进让 checkbox 与白卡内缘有呼吸)
264
- - **Table 末列 padding-right = 20px**
199
+ ### 不适用场景(依然使用 border)
265
200
 
266
- | 组件 | 水平 padding | 起始 X |
267
- | ------------------------------------------------------- | ------------------- | ------------------- |
268
- | OpPageContainer 外层 | `pr-5`(右 20,左 0) | PageShell main 外缘 |
269
- | OpPageContainer 内白卡 | **24px**(`p-6`) | 白卡内缘 |
270
- | PageHeader / ActionToolbar / BulkActionBar / Pagination | **0** | 白卡内缘 + 24 |
271
- | Table 中间列 td | 12px | — |
272
- | Table 首列 td | padding-left: 20px | 白卡内缘 + 44 |
273
- | Table 末列 td | padding-right: 20px | 白卡右内缘 - 44 |
201
+ - 浮层类:Dropdown / Popover / Select content / Tooltip
202
+ - 业务卡片列表项 (item-card / GenericCard)
203
+ - @teamix-evo/ui 默认 Card(未作为内容区白卡容器使用时)
274
204
 
275
- ### 禁止项
205
+ > Token 定义:`rules/design-tokens.json` · `componentSpacing.Card.surface`
206
+ > 组件规格:`rules/component-specs.json` · `C7-Card.contentCardOverride`
276
207
 
277
- - ❌ 在 OpPageContainer 主区再叠一层 `<Card>` — 容器已经内置大白卡,嵌套违反白卡单例
278
- - ❌ 在 PageHeader / ActionToolbar / Pagination 上重复设 paddingX(会与 OpPageContainer 内白卡的 `p-6` 叠加为 48px)
279
- - ❌ Table 中间列 padding 不为 12px
280
- - ❌ Table 首/末列 padding 不为 20px
281
- - ❌ 用 `px-4` `px-6` 字面量直接套子组件 — 用 `px-3 first:pl-5 last:pr-5` 让 Table 自己分配
282
- - ❌ 在 OpPageContainer 内白卡与子组件间插入额外 paddingX 包裹层
283
-
284
- ### 验证
208
+ ---
285
209
 
286
- 1. PageHeader / ActionToolbar / Pagination 起始 X = OpPageContainer 内白卡左内缘 + 24
287
- 2. Table 首列(checkbox)内容 X = OpPageContainer 内白卡左内缘 + 44
288
- 3. Table 相邻中间列内容间距 = 24
210
+ ## 5. 嵌套约束
211
+
212
+ | 父子关系 | 状态 | 说明 |
213
+ |----------|------|------|
214
+ | PageContainer → ContentWrapper | ALLOW | 右侧内容大容器(必需) |
215
+ | ContentWrapper → Card(白卡容器) | ALLOW | 白色卡片容器,包裹所有业务内容(必需) |
216
+ | Card(白卡容器) → PageHeader | ALLOW | 标准结构 |
217
+ | Card(白卡容器) → ActionToolbar | ALLOW | 操作工具栏 |
218
+ | Card(白卡容器) → DataTable | ALLOW | 核心组件 |
219
+ | Card(白卡容器) → CardGrid | ALLOW | 卡片列表 |
220
+ | Card(白卡容器) → ViewToggle | ALLOW | 视图切换 |
221
+ | Card(白卡容器) → AdvancedFilterPanel | ALLOW | 高级筛选面板 |
222
+ | Card(白卡容器) → Pagination | ALLOW | 分页控件 |
223
+ | ContentWrapper → PageHeader / ActionToolbar / DataTable / CardGrid / Pagination | FORBID | 业务组件必须经过白卡容器包裹 |
224
+ | Card(白卡容器) → Card(白卡容器) | FORBID | 白卡容器为单例,禁止嵌套 |
225
+ | ActionToolbar → SearchCombo | ALLOW | 搜索组合 |
226
+ | CardGrid → ItemCard | ALLOW | 业务卡片(v7.3 起详见 `patterns/card-list.md` §9.1) |
227
+ | ItemCard → CardActionBar | ALLOW | 卡片操作栏,三态:hover-slidebar / hover-fade / always-visible(v7.3 详见 `patterns/card-list.md` §9.3) |
228
+ | DataTable → Pagination | ALLOW | 分页控件 |
229
+ | DataTable → Dialog | WARN | 确认弹窗由全局状态管理 |
230
+ | DataTable → Form | FORBID | 表格内不应直接嵌套完整表单 |
231
+ | Sidebar → DescriptionList | FORBID | 描述列表不应嵌套在侧边栏 |
289
232
 
290
233
  ---
291
234
 
292
- ## 9. 状态-操作模式
235
+ ## 6. 共享规则引用
293
236
 
294
- ### 8.1 元规则
237
+ 以下规范为多个子类型共用,提取到 `_shared/` 目录:
295
238
 
296
- - 每个状态必须定义操作可用性矩阵
297
- - 禁用样式统一 `opacity-45 pointer-events-none`
298
- - 混合状态时批量按钮禁用,hover 提示原因
299
- - 异步操作必须有 Toast + 列表刷新机制
239
+ | 共享规则 | 路径 | 被引用子类型 |
240
+ |----------|------|-------------|
241
+ | 表格列元规则 | `_shared/column-meta-rules.md` | standard, l2-sidebar, expandable, drawer, view-toggle(列表视图) |
242
+ | 操作列规范 | `_shared/action-column-spec.md` | standard, l2-sidebar, expandable, drawer, view-toggle(列表视图) |
243
+ | 状态-操作模式 | `_shared/state-action-pattern.md` | standard, l2-sidebar, expandable, drawer, pure-card, standard-card, view-toggle |
244
+ | 业务卡片三件套规格(v7.3 下沉) | `patterns/card-list.md` §9(ItemCard/CardGrid/CardActionBar 完整规格) | pure-card, standard-card, view-toggle(均路由到 patterns/card-list.md) |
300
245
 
301
- ### 8.2 操作确认分级
246
+ 子类型文件按需要引用对应共享文件。
302
247
 
303
- | 级别 | 适用 | 确认方式 |
304
- | -------------------- | -------------------- | --------------------- |
305
- | **一级**(可逆) | 查看、编辑、远程连接 | 直接执行 |
306
- | **二级**(影响状态) | 启动、停止、重启 | Dialog 确认 |
307
- | **三级**(不可逆) | 删除 | Dialog + 输入确认文本 |
248
+ ## 7. 产品配置引用
308
249
 
309
- ### 8.3 异步反馈
250
+ > 具体列定义、状态机、业务场景按产品隔离,存放在 `products/{产品}/` 目录。
251
+ > AI 读取时需根据目标产品加载对应配置文件。
310
252
 
311
- | 操作 | Toast 文案 | 列表 |
312
- | -------- | ------------------------- | ------------ |
313
- | 状态变更 | "操作已提交" | 轮询状态 |
314
- | 删除 | "删除已提交" | 移除行或刷新 |
315
- | 批量 | "批量操作已提交,共 N 条" | 轮询 |
253
+ | 产品类型 | 列定义 | 状态机 | 业务映射 |
254
+ |----------|--------|--------|---------|
255
+ | ECS | `products/ecs/columns.json` | `products/ecs/states.json` | `products/ecs/mapping.json` |
256
+ | PolarDB | `products/polar-db/columns.json` | `products/polar-db/states.json` | `products/polar-db/mapping.json` |
257
+ | Cloud-Catalog | `products/cloud-catalog/columns.json` | `products/cloud-catalog/states.json` | |
258
+ | AI Gateway | `products/ai-gateway/columns.json` | `products/ai-gateway/states.json` | `products/ai-gateway/mapping.json` + `cards.json`(v7.2 新增,卡片视图 slot 绑定) |
316
259
 
317
- ### 8.4 页面间导航交互
318
-
319
- - **操作列「查看/管理」**DetailPage(页面跳转);面包屑返回,保持筛选+分页
320
- - **操作列「编辑」** FormPage Drawer(跳转/侧滑);保存/取消返回列表,保存附 Toast
321
- - **创建操作**FormPage(页面跳转);创建成功/取消返回列表
322
- - **搜索执行** → 当前列表(数据刷新);重置到第 1 页
323
- - **筛选条件变更** → 当前列表(数据刷新);重置到第 1 页,保持筛选条件
260
+ **读取规则**:
261
+ 1. 根技能确定页面类型 → Phase ①
262
+ 2. 子技能匹配子类型Phase ②
263
+ 3. 根据目标产品加载 `products/{产品}/` 下对应配置文件 Phase ②.5
264
+ 4. 元规则(列应该有显隐规则/拖拽/排序) + 产品配置(具体列名/宽度/状态) Phase ③ 生成 HTML
324
265
 
325
266
  ---
326
267
 
327
- ## 10. 嵌套约束
328
-
329
- | 父子关系 | 状态 |
330
- | ------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------- |
331
- | PageShell(background="muted", sidebar=OpSidebar) → OpPageContainer(header=PageHeader) → ActionToolbar / DataTable / Pagination | ALLOW |
332
- | OpPageContainer 内大白卡 → 再嵌一层 `<Card>` 包业务组件 | **FORBID**(OpPageContainer 已内置大白卡,嵌套违反白卡单例) |
333
- | ActionToolbar → SearchCombo | ALLOW |
334
- | CardGrid → ItemCard → CardActionBar | ALLOW(卡片网格内每个 ItemCard 是局部小卡 — 业务子区域级,非主区白卡嵌套) |
335
- | DataTable → Pagination | ALLOW |
336
- | DataTable → Form | **FORBID**(用 Drawer 触发) |
337
-
338
- ---
268
+ ## 规范引用
339
269
 
340
- ## 11. 禁止项
270
+ - **读取路径**:见根技能 `../../SKILL.md` §4.5 四阶段读取决策树
271
+ - 阶段①:`page-types.json` + `business-mapping.json`
272
+ - 阶段②:`page-frame.json` + `layout-rules.json` + `page-flow.json` + `_shared/search-combo-spec.md`;卡片子类型 (pure-card / standard-card / view-toggle) 追加读取 `patterns/card-list.md`(v7.3 起为三件套唯一规范来源)
273
+ - 阶段②.5:`products/{产品}/columns.json` + `states.json`(v6.2 新增)
274
+ - 阶段③(生成 HTML 时):`design-tokens.json` + `design-tokens.css` + `styling.json` + `../boundaries.md` + `../foundations.md`
341
275
 
342
- | 禁项 | 原因 |
343
- | ---------------------- | ----------------------------------- |
344
- | Form 直接出现在内容区 | 应通过 Dialog/Drawer/FormPage 触发 |
345
- | Chart 出现在标准列表 | 图表归属 Dashboard |
346
- | 内联编辑 | 编辑必须通过 Drawer/Dialog/FormPage |
347
- | 拖拽排序 | 表格数据为服务端排序 |
348
- | 无限滚动 | B2B 管理场景需精确分页 |
349
- | 悬浮操作栏 | 遮挡数据,可发现性差 |
350
- | 右键菜单 | 移动端不兼容 |
351
- | `hr` / section-divider | 间距通过 padding/margin 控制 |
276
+ > `rules/design-tokens.css` 是设计 Token 的唯一真相源(:root 变量定义):生成 HTML 原型时需将 :root 变量块嵌入页面 `<style>` 标签;生成 React/TSX 需确保项目已通过 `@import` 引入该 CSS 文件。
352
277
 
353
278
  ---
354
279
 
355
- ## 12. 列表页特有自检
356
-
357
- - [ ] PageHeader / ActionToolbar / DataTable / Pagination 嵌套结构正确
358
- - [ ] Card 内统一左右 padding 24px(除 Table 列)
359
- - [ ] 子类型组件正确(standard DataTable,pure-card 用 CardGrid)
360
- - [ ] SearchCombo 位置正确(间距 20px)
361
- - [ ] 操作列水平对齐左对齐
362
- - [ ] 状态-操作矩阵在所有状态下正确
363
- - [ ] 二次确认按级别正确(启动/停止 = Dialog;删除 = 输入确认)
364
- - [ ] 批量操作按钮:选中 ≥1 行显示,混合状态禁用
365
- - [ ] 搜索:回车执行、维度切换清空、FilterTag 展示
366
- - [ ] 分页:保持筛选 + "共 N 条"
367
- - [ ] 边界:空数据 Empty + 加载 Loading + 错误 ErrorState
280
+ ## 验证清单 (Validation Checklist)
281
+
282
+ > **通用检查项**(布局分区/颜色Token/间距/字体/尺寸/禁用样式/异步操作/空数据/加载中)见根技能 `../../docs/validation-workflow.md` 验证清单。此处仅列出列表页特有检查项。
283
+
284
+ | 检查项 | 检查点 | 目标 |
285
+ |--------|--------|------|
286
+ | 嵌套结构 | PageContainer → ContentWrapper → Card(白卡容器) → PageHeader/ActionToolbar/DataTable/Pagination | 100% |
287
+ | Card 内统一左右内边距 | PageHeader/ActionToolbar/DataTable/Pagination 在 Card 内左右 padding 均为 24px | 100% |
288
+ | 必需组件 | PageHeader、ActionToolbar、Pagination + 子类型组件(DataTable/CardGrid) | 100% |
289
+ | 禁止组件 | 无内联编辑、拖拽排序、无限滚动、悬浮操作栏、右键菜单 | 0 个 |
290
+ | 子类型组件 | 按子类型路由到正确组件(DataTable 或 CardGrid) | 正确 |
291
+ | 操作可用性 | 状态-操作矩阵匹配 | 所有状态正确 |
292
+ | 二次确认 | 启动/停止/重启 Dialog确认,删除需输入确认 | 正确 |
293
+ | 批量操作 | 选中≥1行显示、混合状态禁用、异步处理 | 正确 |
294
+ | 搜索交互 | 回车执行、下拉切换维度、FilterTag 展示 | 正确 |
295
+ | 分页 | 默认条数、保持筛选、"共N条" | 正确 |