@teamix-evo/skills 0.4.0 → 0.6.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.
- package/README.md +7 -3
- package/manifest.json +3 -2
- package/package.json +2 -2
- package/src/teamix-evo-code-opentrek/SKILL.md +12 -10
- package/src/teamix-evo-code-opentrek/api-layering.md +8 -5
- package/src/teamix-evo-code-opentrek/checklist.md +2 -0
- package/src/teamix-evo-code-opentrek/error-and-loading.md +38 -25
- package/src/teamix-evo-code-opentrek/file-structure.md +63 -54
- package/src/teamix-evo-code-opentrek/forms-and-validation.md +14 -12
- package/src/teamix-evo-code-opentrek/reuse-first.md +2 -0
- package/src/teamix-evo-code-opentrek/routing-and-codesplit.md +23 -21
- package/src/teamix-evo-code-opentrek/testing.md +32 -28
- package/src/teamix-evo-code-uni-manager/SKILL.md +12 -10
- package/src/teamix-evo-code-uni-manager/api-layering.md +2 -0
- package/src/teamix-evo-code-uni-manager/checklist.md +2 -0
- package/src/teamix-evo-code-uni-manager/error-and-loading.md +3 -1
- package/src/teamix-evo-code-uni-manager/file-structure.md +2 -0
- package/src/teamix-evo-code-uni-manager/forms-and-validation.md +2 -0
- package/src/teamix-evo-code-uni-manager/reuse-first.md +3 -1
- package/src/teamix-evo-code-uni-manager/routing-and-codesplit.md +3 -1
- package/src/teamix-evo-code-uni-manager/testing.md +2 -0
- package/src/teamix-evo-design-opentrek/SKILL.md +213 -52
- package/src/teamix-evo-design-opentrek/boundaries.md +25 -5
- package/src/teamix-evo-design-opentrek/brand.md +7 -7
- package/src/teamix-evo-design-opentrek/checklist.md +15 -13
- package/src/teamix-evo-design-opentrek/components.md +89 -39
- package/src/teamix-evo-design-opentrek/examples/detail-ai-gateway-1.html +1069 -0
- package/src/teamix-evo-design-opentrek/examples/detail-ai-gateway-instance.html +941 -0
- package/src/teamix-evo-design-opentrek/examples/detail-page-api-doc.html +906 -0
- package/src/teamix-evo-design-opentrek/examples/detail-page-config.html +993 -0
- package/src/teamix-evo-design-opentrek/examples/detail-page-monitor.html +1339 -0
- package/src/teamix-evo-design-opentrek/examples/detail-page.html +933 -0
- package/src/teamix-evo-design-opentrek/examples/settings-page.html +1119 -0
- package/src/teamix-evo-design-opentrek/examples/standard-card-list.html +1094 -0
- package/src/teamix-evo-design-opentrek/examples/standard-table-list.html +1361 -0
- package/src/teamix-evo-design-opentrek/examples/wizard-form-page.html +877 -0
- package/src/teamix-evo-design-opentrek/flows.md +85 -12
- package/src/teamix-evo-design-opentrek/foundations.md +12 -9
- package/src/teamix-evo-design-opentrek/generation-flow.md +84 -14
- package/src/teamix-evo-design-opentrek/pages/detail-page/SKILL.md +260 -0
- package/src/teamix-evo-design-opentrek/pages/detail-page/patterns/api-doc-detail.md +163 -0
- package/src/teamix-evo-design-opentrek/pages/detail-page/patterns/comparison-detail.md +100 -0
- package/src/teamix-evo-design-opentrek/pages/detail-page/patterns/monitor-detail.md +190 -0
- package/src/teamix-evo-design-opentrek/pages/detail-page/patterns/resource-detail.md +148 -0
- package/src/teamix-evo-design-opentrek/pages/form-page/SKILL.md +362 -0
- package/src/teamix-evo-design-opentrek/pages/list-page/SKILL.md +286 -0
- package/src/teamix-evo-design-opentrek/pages/list-page/_shared/action-column-spec.md +60 -0
- package/src/teamix-evo-design-opentrek/pages/list-page/_shared/column-meta-rules.md +117 -0
- package/src/teamix-evo-design-opentrek/pages/list-page/_shared/search-combo-spec.md +194 -0
- package/src/teamix-evo-design-opentrek/pages/list-page/_shared/state-action-pattern.md +51 -0
- package/src/teamix-evo-design-opentrek/pages/list-page/patterns/advanced-filter-list.md +94 -0
- package/src/teamix-evo-design-opentrek/pages/list-page/patterns/card-list.md +558 -0
- package/src/teamix-evo-design-opentrek/pages/list-page/patterns/drawer-list.md +76 -0
- package/src/teamix-evo-design-opentrek/pages/list-page/patterns/expandable-list.md +70 -0
- package/src/teamix-evo-design-opentrek/pages/list-page/patterns/l2-sidebar-list.md +73 -0
- package/src/teamix-evo-design-opentrek/pages/list-page/patterns/standard-list.md +198 -0
- package/src/teamix-evo-design-opentrek/patterns/color-mapping.md +96 -0
- package/src/teamix-evo-design-opentrek/patterns/dashboard.md +2 -0
- package/src/teamix-evo-design-opentrek/patterns/detail-page.md +218 -152
- package/src/teamix-evo-design-opentrek/patterns/form-page.md +437 -228
- package/src/teamix-evo-design-opentrek/patterns/list-page.md +221 -260
- package/src/teamix-evo-design-opentrek/patterns/page-types.md +40 -125
- package/src/teamix-evo-design-opentrek/philosophy.md +7 -5
- package/src/teamix-evo-design-opentrek/rules/_assets/OP_AGENT RUNTIME.svg +1 -0
- package/src/teamix-evo-design-opentrek/rules/_assets/OP_AI GATEWAY.svg +1 -0
- package/src/teamix-evo-design-opentrek/rules/_assets/OP_AI STUDIO.svg +1 -0
- package/src/teamix-evo-design-opentrek/rules/_assets/OP_DEV-2.svg +1 -0
- package/src/teamix-evo-design-opentrek/rules/_assets/OP_LOGO.svg +1 -0
- package/src/teamix-evo-design-opentrek/rules/_assets/OP_OPS.svg +1 -0
- package/src/teamix-evo-design-opentrek/rules/boundaries.rules.json +3 -3
- package/src/teamix-evo-design-opentrek/rules/business-mapping.json +124 -0
- package/src/teamix-evo-design-opentrek/rules/common-components.json +924 -0
- package/src/teamix-evo-design-opentrek/rules/component-specs.json +1083 -0
- package/src/teamix-evo-design-opentrek/rules/design-tokens.css +433 -0
- package/src/teamix-evo-design-opentrek/rules/design-tokens.json +2798 -0
- package/src/teamix-evo-design-opentrek/rules/layout-rules.json +218 -0
- package/src/teamix-evo-design-opentrek/rules/page-flow.json +351 -0
- package/src/teamix-evo-design-opentrek/rules/page-frame.json +241 -0
- package/src/teamix-evo-design-opentrek/rules/page-header-spec.md +123 -0
- package/src/teamix-evo-design-opentrek/rules/page-types.json +206 -0
- package/src/teamix-evo-design-opentrek/rules/sidebar-spec.md +217 -0
- package/src/teamix-evo-design-opentrek/rules/styling.json +188 -0
- package/src/teamix-evo-design-opentrek/rules/token-mapping.md +284 -0
- package/src/teamix-evo-design-uni-manager/SKILL.md +18 -27
- package/src/teamix-evo-design-uni-manager/boundaries.md +7 -4
- package/src/teamix-evo-design-uni-manager/brand.md +1 -1
- package/src/teamix-evo-design-uni-manager/components.md +33 -28
- package/src/teamix-evo-design-uni-manager/foundations.md +24 -21
- package/src/teamix-evo-design-uni-manager/generation-flow.md +46 -8
- package/src/teamix-evo-design-uni-manager/patterns/dashboard.md +3 -1
- package/src/teamix-evo-design-uni-manager/patterns/detail-page.md +42 -13
- package/src/teamix-evo-design-uni-manager/patterns/form-page.md +67 -30
- package/src/teamix-evo-design-uni-manager/patterns/list-page.md +73 -40
- package/src/teamix-evo-design-uni-manager/patterns/page-types.md +14 -12
- package/src/teamix-evo-design-uni-manager/philosophy.md +4 -2
- package/src/teamix-evo-design-uni-manager/rules/boundaries.rules.json +3 -3
- package/src/teamix-evo-manage/SKILL.md +74 -66
|
@@ -1,334 +1,295 @@
|
|
|
1
|
-
# List Page — 列表页模式
|
|
2
|
-
|
|
3
|
-
> **触发**:用户描述含"列表/表格/查询/检索/卡片管理"。
|
|
4
|
-
> **核心特征**:多条结构化数据 + 搜索/筛选 + 分页。
|
|
5
|
-
> **页面级别**:L1(标题模式 PageHeader,自动继承 Sidebar)。
|
|
6
|
-
|
|
7
1
|
---
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
| **pure-card** | "纯卡片"/"卡片管理"/"智能体列表" | SINGLE_COL | CardGrid + ItemCard + CardActionBar |
|
|
18
|
-
| **standard-card** | "卡片列表"/"分类卡片"/"资源卡片" | TWO_COL | Sidebar + CardGrid + ItemCard |
|
|
19
|
-
| **view-toggle** | "视图切换"/"列表卡片切换" | TWO_COL + ViewToggle | ViewToggle + DataTable/CardGrid |
|
|
20
|
-
| **advanced-filter** | "高级筛选"/"更多条件" | TWO_COL | AdvancedFilterPanel + DataTable |
|
|
21
|
-
|
|
22
|
-
### 路由优先级
|
|
23
|
-
|
|
24
|
-
1. "纯卡片"/"卡片管理" → pure-card
|
|
25
|
-
2. "卡片列表"/"分类卡片"/"资源卡片" → standard-card
|
|
26
|
-
3. "视图切换"/"列表卡片" → view-toggle
|
|
27
|
-
4. "高级筛选" → advanced-filter
|
|
28
|
-
5. "展开"/"子项" → expandable
|
|
29
|
-
6. "分类"/"分组"/"左侧树" → l2-sidebar
|
|
30
|
-
7. "弹窗列表"/"选择器" → drawer
|
|
31
|
-
8. 默认 → standard
|
|
32
|
-
|
|
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
|
|
33
11
|
---
|
|
34
12
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
```
|
|
38
|
-
┌────────────────────────────────────────────┐
|
|
39
|
-
│ PageHeader: 标题模式 [新建] │ ← Header zone
|
|
40
|
-
├────────────────────────────────────────────┤
|
|
41
|
-
│ ActionToolbar: 🔍 搜索 [筛选▼] [刷新] │ ← Toolbar zone
|
|
42
|
-
├────────────────────────────────────────────┤
|
|
43
|
-
│ ▢ ID │ 状态 │ 创建时间 │ 操作 │ ← Main zone
|
|
44
|
-
│ ▢ ORD-001234 │ 进行中│ 2026-05-13│ ⋯ │
|
|
45
|
-
│ ▢ ORD-001235 │ 已完成│ 2026-05-12│ ⋯ │
|
|
46
|
-
├────────────────────────────────────────────┤
|
|
47
|
-
│ [已选 2 项] 批量审批 / 批量导出 / 批量删除 │ ← BulkActionBar (按需)
|
|
48
|
-
├────────────────────────────────────────────┤
|
|
49
|
-
│ ← 1 / 24 → [50/页 ▼] 共 1200条 │ ← Footer zone
|
|
50
|
-
└────────────────────────────────────────────┘
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
---
|
|
13
|
+
# 列表页路由规则
|
|
54
14
|
|
|
55
|
-
|
|
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) 快速判断属于哪个子类型
|
|
56
23
|
|
|
57
|
-
|
|
58
|
-
| ----------------------------- | ------- | ----------------------------------------------------------- |
|
|
59
|
-
| **PageHeader** | top | 标题模式(L1 页面);右侧主操作(如「新建」) |
|
|
60
|
-
| **ActionToolbar** | toolbar | 单行 flex(nowrap);左 actions + 中 SearchCombo + 右 tools |
|
|
61
|
-
| **DataTable** 或 **CardGrid** | main | 二选一,按子类型 |
|
|
62
|
-
| **Pagination** | footer | 默认 10 条/页(标准列表) / 12 条/页(卡片) |
|
|
24
|
+
## 1. 类型定义
|
|
63
25
|
|
|
64
|
-
|
|
26
|
+
**页面类型**: ListPage
|
|
27
|
+
**核心特征**: 多条结构化数据的展示、筛选和操作入口
|
|
28
|
+
**识别条件**: 页面包含数据表格(DataTable)或卡片网格(CardGrid)+ 搜索/筛选 + 分页
|
|
65
29
|
|
|
66
30
|
---
|
|
67
31
|
|
|
68
|
-
##
|
|
32
|
+
## 2. 子类型路由表
|
|
69
33
|
|
|
70
|
-
|
|
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 |
|
|
71
44
|
|
|
72
|
-
|
|
45
|
+
> **v7.2 合并**:原 `pure-card-list.md` / `standard-card-list.md` / `view-toggle-list.md` 三个 patterns 合并为单一 `patterns/card-list.md`,子类型差异在其 §1 差异矩阵中区分。
|
|
73
46
|
|
|
74
|
-
|
|
75
|
-
- 与 `.left-actions` 间距 = **20px**
|
|
47
|
+
### 路由判定优先级
|
|
76
48
|
|
|
77
|
-
|
|
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(默认)
|
|
78
57
|
|
|
79
|
-
|
|
80
|
-
[ 维度Select | 分隔线 | 搜索Input | 搜索Button(图标) ]
|
|
81
|
-
```
|
|
58
|
+
---
|
|
82
59
|
|
|
83
|
-
|
|
84
|
-
- 内部元素无独立边框
|
|
60
|
+
## 3. 通用属性模型
|
|
85
61
|
|
|
86
|
-
|
|
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 条/页 |
|
|
87
68
|
|
|
88
|
-
|
|
89
|
-
| ------------------------- | -------------------------------- |
|
|
90
|
-
| 切换维度 | input.value 清空 → input.focus() |
|
|
91
|
-
| 输入框回车 / 点击搜索按钮 | 执行搜索 → 重置到第 1 页 |
|
|
92
|
-
| 输入框 hover 显示 × | 清空输入 → 维度切回"全部" |
|
|
93
|
-
| 输入框为空时点搜索 | 清除当前条件 → 重置分页 |
|
|
69
|
+
> **框架组件自动继承**:Sidebar 的存在性由 `rules/page-frame.json` 统一管理,子技能只定义内容区组件。L1 级页面自动包含:Sidebar(顶部Logo+产品名),无面包屑。
|
|
94
70
|
|
|
95
|
-
|
|
71
|
+
---
|
|
96
72
|
|
|
97
|
-
|
|
98
|
-
- 单条 Tag 含 `label: value ×`
|
|
99
|
-
- 多条提供「清空全部」链接
|
|
73
|
+
## 4. 组件推荐
|
|
100
74
|
|
|
101
|
-
###
|
|
75
|
+
### 必需组件
|
|
102
76
|
|
|
103
|
-
|
|
77
|
+
| 组件 | 引用 | 层级 | 位置 | 说明 |
|
|
78
|
+
|------|------|------|------|------|
|
|
79
|
+
| PageHeader | — | ORGANISM | top | 页面标题(18px/medium),默认无描述 |
|
|
80
|
+
| ActionToolbar | — | ORGANISM | top | 操作工具栏,单行 flex(flex-wrap:nowrap),左侧创建按钮 + 右侧搜索工具 |
|
|
81
|
+
| Pagination | — | MOLECULAR | bottom | 分页控件 |
|
|
104
82
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
[
|
|
108
|
-
{ "label": "全部", "value": "all" },
|
|
109
|
-
{ "label": "名称", "value": "name" },
|
|
110
|
-
{ "label": "ID", "value": "id" }
|
|
111
|
-
]
|
|
83
|
+
> **框架级组件**(自动继承,无需在此声明):Sidebar 由 `rules/page-frame.json` 统一管理,L1 级页面自动包含。
|
|
84
|
+
> 注:DataTable 为 standard/l2/expandable/drawer/view-toggle 的必需组件;CardGrid 为 standard-card/pure-card/view-toggle 的必需组件。
|
|
112
85
|
|
|
113
|
-
|
|
114
|
-
[
|
|
115
|
-
{ "label": "全部", "value": "all" },
|
|
116
|
-
{ "label": "实例 ID/名称", "value": "instance" },
|
|
117
|
-
{ "label": "IP", "value": "ip" },
|
|
118
|
-
{ "label": "标签", "value": "tag" }
|
|
119
|
-
]
|
|
120
|
-
```
|
|
86
|
+
### 禁止组件
|
|
121
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
|
|
122
99
|
---
|
|
123
100
|
|
|
124
|
-
## 5.
|
|
125
|
-
|
|
126
|
-
### 5.1 列元规则(每列必备)
|
|
127
|
-
|
|
128
|
-
| 规则 | 说明 |
|
|
129
|
-
| -------- | ------------------------------------- |
|
|
130
|
-
| 唯一 ID | 用于列宽 / 显隐持久化 |
|
|
131
|
-
| 显隐规则 | "始终显示" 或 "条件显示" + 触发条件 |
|
|
132
|
-
| 宽度定义 | 固定 px / 百分比 / minmax |
|
|
133
|
-
| 对齐方式 | left(默认)/ center / right |
|
|
134
|
-
| 排序能力 | 是否支持服务端排序 |
|
|
135
|
-
| 固定方向 | left(前缀列)/ right(操作列)/ none |
|
|
136
|
-
| 字体 | ID/IP/Hash 等机器列用 `font-mono` |
|
|
101
|
+
## 5.1 Card 内左右对齐【稳定规则 / 硬约束】
|
|
137
102
|
|
|
138
|
-
|
|
103
|
+
> **这是列表页生成中最容易不稳定的点,必须严格遵守:**
|
|
139
104
|
|
|
140
|
-
|
|
141
|
-
- 右固定:操作列(140px)
|
|
142
|
-
- 固定列与滚动列交界处 `box-shadow: 1px 0 0 var(--border)`
|
|
143
|
-
- 固定列 `z-index: 10`,滚动列 `z-index: 1`
|
|
105
|
+
水平 padding 采用**分层模型 v7.5**,职责严格划分:
|
|
144
106
|
|
|
145
|
-
|
|
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 视觉缩进
|
|
146
110
|
|
|
147
|
-
|
|
148
|
-
- 多行内容(如规格列):72px+
|
|
111
|
+
> 注意:Table 首列内容 X = Card 外缘 + 40px,与 PageHeader / ActionToolbar / Pagination 起始线**不对齐**(这是设计预期)。
|
|
149
112
|
|
|
150
|
-
|
|
113
|
+
Card 白卡容器:`padding: 0 var(--card-padding-x)` (上下 0 / 左右 20px)。注意:`--card-padding-x` (20px) 独立于 `--page-container-padding` (16px),后者为 PageContainer 外层间距。
|
|
151
114
|
|
|
152
|
-
|
|
|
153
|
-
|
|
154
|
-
|
|
|
155
|
-
|
|
|
156
|
-
|
|
|
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 提供 |
|
|
157
125
|
|
|
158
|
-
###
|
|
126
|
+
### 参考 CSS
|
|
159
127
|
|
|
160
|
-
|
|
161
|
-
-
|
|
162
|
-
-
|
|
163
|
-
-
|
|
164
|
-
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
- 拖拽手柄置于列头右边界,宽 2px,`cursor: col-resize`
|
|
169
|
-
- 仅对 `visibility: always` 的列允许拖拽
|
|
170
|
-
- 最小宽度取列定义的 `minWidth`(无定义时默认 100px,状态/监控类窄列 80px)
|
|
171
|
-
- 最大宽度不超过表格宽度的 50%
|
|
172
|
-
- 拖拽过程对 `document.body` 加 `cursor: col-resize` + `user-select: none`,防鼠标越界丢失光标
|
|
173
|
-
- 拖拽结束写入 `localStorage`(key 命名 `columnWidths:{产品ID}`);初始化时读取恢复
|
|
174
|
-
- 列配置弹窗提供「恢复默认列宽」按钮,清 localStorage 后刷新
|
|
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
|
+
```
|
|
175
136
|
|
|
176
|
-
###
|
|
137
|
+
### 禁止项
|
|
177
138
|
|
|
178
|
-
-
|
|
179
|
-
-
|
|
180
|
-
-
|
|
181
|
-
-
|
|
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)
|
|
182
145
|
|
|
183
|
-
###
|
|
146
|
+
### 验证方法
|
|
184
147
|
|
|
185
|
-
|
|
186
|
-
| ------- | -------------------------------------------------- |
|
|
187
|
-
| ID / IP | `font-mono` + `word-break: break-all` + `truncate` |
|
|
188
|
-
| 规格 | 多行展示,不截断 |
|
|
189
|
-
| 标签 | 最多 3 个 + `+N`,不自动换行 |
|
|
148
|
+
生成后逐项验证:
|
|
190
149
|
|
|
191
|
-
|
|
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」列右边缘 ↔ 「状态」列左边缘)
|
|
192
154
|
|
|
193
|
-
|
|
155
|
+
任一不一致即为违反。
|
|
194
156
|
|
|
195
|
-
###
|
|
157
|
+
### 视觉预期
|
|
196
158
|
|
|
197
|
-
|
|
159
|
+
- thead 背景、tbody tr `border-bottom`、BulkActionBar 背景、Pagination `border-top` **不延伸到 Card 左右边缘**(Card 左右各保留 20px 白边)
|
|
160
|
+
- 表格首末列内容在此基础上进一步缩进 20px,总体与 Card 边缘保持 40px 距离
|
|
161
|
+
- 这是设计预期行为;表格作为密集数据区,额外的首末列缩进为文本提供更舒适的阅读呼吸
|
|
198
162
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
| 主操作(管理/查看) | 链接样式 | — |
|
|
202
|
-
| `\|` 分隔线 | — | — |
|
|
203
|
-
| 次要操作 | 文字按钮 | `opacity-45 pointer-events-none` |
|
|
204
|
-
| 状态操作 | 下拉按钮 | 同上 |
|
|
205
|
-
| "..." 更多 | Dropdown | — |
|
|
163
|
+
> Token 定义:`rules/design-tokens.json` · `componentSpacing.Card.padding` + `componentSpacing.DataTable.firstLastCellRule` + `componentSpacing.DataTable.horizontalAlignmentRule`
|
|
164
|
+
> 组件详细规范:`rules/component-specs.json` · `C17-Table.horizontalPaddingRule`
|
|
206
165
|
|
|
207
|
-
|
|
166
|
+
---
|
|
208
167
|
|
|
209
|
-
|
|
210
|
-
- 表头「操作」左边缘 X = 表体「详情」链接左边缘 X
|
|
211
|
-
- ❌ 禁止操作列内容居中
|
|
212
|
-
- ❌ 禁止只在 `.col-action` 上设 text-align(部分浏览器会被覆盖)
|
|
168
|
+
## 5.2 ContentCard 表面规则 v7.6【硬约束】
|
|
213
169
|
|
|
214
|
-
|
|
170
|
+
内容区大卡片容器(ContentCard 作为白卡容器使用时)表面规则:
|
|
215
171
|
|
|
216
|
-
|
|
|
217
|
-
|
|
218
|
-
|
|
|
219
|
-
|
|
|
220
|
-
|
|
|
221
|
-
|
|
|
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))` | 保持不变 |
|
|
222
178
|
|
|
223
|
-
|
|
179
|
+
### 参考 CSS
|
|
224
180
|
|
|
225
|
-
|
|
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
|
+
```
|
|
226
191
|
|
|
227
|
-
|
|
192
|
+
### 禁止项
|
|
228
193
|
|
|
229
|
-
-
|
|
230
|
-
-
|
|
231
|
-
-
|
|
232
|
-
-
|
|
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`)
|
|
233
198
|
|
|
234
|
-
|
|
235
|
-
| ------------------------------------------------------- | ------------------- | -------------- |
|
|
236
|
-
| Card 白卡容器 | **24px** | Card 外缘 |
|
|
237
|
-
| PageHeader / ActionToolbar / BulkActionBar / Pagination | **0** | Card 外缘 + 24 |
|
|
238
|
-
| Table 中间列 td | 12px | — |
|
|
239
|
-
| Table 首列 td | padding-left: 20px | Card 外缘 + 44 |
|
|
240
|
-
| Table 末列 td | padding-right: 20px | Card 右缘 - 44 |
|
|
199
|
+
### 不适用场景(依然使用 border)
|
|
241
200
|
|
|
242
|
-
|
|
201
|
+
- 浮层类:Dropdown / Popover / Select content / Tooltip
|
|
202
|
+
- 业务卡片列表项 (item-card / GenericCard)
|
|
203
|
+
- @teamix-evo/ui 默认 Card(未作为内容区白卡容器使用时)
|
|
243
204
|
|
|
244
|
-
|
|
245
|
-
-
|
|
246
|
-
- ❌ Table 首/末列 padding 不为 20px
|
|
247
|
-
- ❌ 用 `px-4` `px-6` 字面量 — 用 `px-3 first:pl-5 last:pr-5`
|
|
248
|
-
- ❌ 在 Card 与子组件间插入额外 paddingX 包裹层
|
|
205
|
+
> Token 定义:`rules/design-tokens.json` · `componentSpacing.Card.surface`
|
|
206
|
+
> 组件规格:`rules/component-specs.json` · `C7-Card.contentCardOverride`
|
|
249
207
|
|
|
250
|
-
|
|
208
|
+
---
|
|
251
209
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
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 | 描述列表不应嵌套在侧边栏 |
|
|
255
232
|
|
|
256
233
|
---
|
|
257
234
|
|
|
258
|
-
##
|
|
259
|
-
|
|
260
|
-
### 8.1 元规则
|
|
235
|
+
## 6. 共享规则引用
|
|
261
236
|
|
|
262
|
-
|
|
263
|
-
- 禁用样式统一 `opacity-45 pointer-events-none`
|
|
264
|
-
- 混合状态时批量按钮禁用,hover 提示原因
|
|
265
|
-
- 异步操作必须有 Toast + 列表刷新机制
|
|
237
|
+
以下规范为多个子类型共用,提取到 `_shared/` 目录:
|
|
266
238
|
|
|
267
|
-
|
|
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) |
|
|
268
245
|
|
|
269
|
-
|
|
270
|
-
| -------------------- | -------------------- | --------------------- |
|
|
271
|
-
| **一级**(可逆) | 查看、编辑、远程连接 | 直接执行 |
|
|
272
|
-
| **二级**(影响状态) | 启动、停止、重启 | Dialog 确认 |
|
|
273
|
-
| **三级**(不可逆) | 删除 | Dialog + 输入确认文本 |
|
|
246
|
+
子类型文件按需要引用对应共享文件。
|
|
274
247
|
|
|
275
|
-
|
|
248
|
+
## 7. 产品配置引用
|
|
276
249
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
| 状态变更 | "操作已提交" | 轮询状态 |
|
|
280
|
-
| 删除 | "删除已提交" | 移除行或刷新 |
|
|
281
|
-
| 批量 | "批量操作已提交,共 N 条" | 轮询 |
|
|
250
|
+
> 具体列定义、状态机、业务场景按产品隔离,存放在 `products/{产品}/` 目录。
|
|
251
|
+
> AI 读取时需根据目标产品加载对应配置文件。
|
|
282
252
|
|
|
283
|
-
|
|
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 绑定) |
|
|
284
259
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
260
|
+
**读取规则**:
|
|
261
|
+
1. 根技能确定页面类型 → Phase ①
|
|
262
|
+
2. 子技能匹配子类型 → Phase ②
|
|
263
|
+
3. 根据目标产品加载 `products/{产品}/` 下对应配置文件 → Phase ②.5
|
|
264
|
+
4. 元规则(列应该有显隐规则/拖拽/排序) + 产品配置(具体列名/宽度/状态) → Phase ③ 生成 HTML
|
|
290
265
|
|
|
291
266
|
---
|
|
292
267
|
|
|
293
|
-
##
|
|
294
|
-
|
|
295
|
-
| 父子关系 | 状态 |
|
|
296
|
-
| ----------------------------------------------------------------------------------------------- | ---------------------------- |
|
|
297
|
-
| PageContainer → ContentWrapper → Card(白卡容器) → PageHeader/ActionToolbar/DataTable/Pagination | ALLOW |
|
|
298
|
-
| ContentWrapper → 业务组件(无 Card 包裹) | **FORBID** |
|
|
299
|
-
| Card → Card | **FORBID**(白卡单例) |
|
|
300
|
-
| ActionToolbar → SearchCombo | ALLOW |
|
|
301
|
-
| CardGrid → ItemCard → CardActionBar | ALLOW |
|
|
302
|
-
| DataTable → Pagination | ALLOW |
|
|
303
|
-
| DataTable → Form | **FORBID**(用 Drawer 触发) |
|
|
304
|
-
|
|
305
|
-
---
|
|
268
|
+
## 规范引用
|
|
306
269
|
|
|
307
|
-
|
|
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`
|
|
308
275
|
|
|
309
|
-
|
|
310
|
-
| ---------------------- | ----------------------------------- |
|
|
311
|
-
| Form 直接出现在内容区 | 应通过 Dialog/Drawer/FormPage 触发 |
|
|
312
|
-
| Chart 出现在标准列表 | 图表归属 Dashboard |
|
|
313
|
-
| 内联编辑 | 编辑必须通过 Drawer/Dialog/FormPage |
|
|
314
|
-
| 拖拽排序 | 表格数据为服务端排序 |
|
|
315
|
-
| 无限滚动 | B2B 管理场景需精确分页 |
|
|
316
|
-
| 悬浮操作栏 | 遮挡数据,可发现性差 |
|
|
317
|
-
| 右键菜单 | 移动端不兼容 |
|
|
318
|
-
| `hr` / section-divider | 间距通过 padding/margin 控制 |
|
|
276
|
+
> `rules/design-tokens.css` 是设计 Token 的唯一真相源(:root 变量定义):生成 HTML 原型时需将 :root 变量块嵌入页面 `<style>` 标签;生成 React/TSX 需确保项目已通过 `@import` 引入该 CSS 文件。
|
|
319
277
|
|
|
320
278
|
---
|
|
321
279
|
|
|
322
|
-
##
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
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条" | 正确 |
|