@teamix-evo/skills 0.5.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/package.json +2 -2
- package/src/teamix-evo-design-opentrek/SKILL.md +210 -42
- package/src/teamix-evo-design-opentrek/boundaries.md +3 -3
- package/src/teamix-evo-design-opentrek/components.md +41 -40
- 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 +9 -9
- package/src/teamix-evo-design-opentrek/generation-flow.md +15 -3
- 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 +1 -1
- package/src/teamix-evo-design-opentrek/patterns/detail-page.md +217 -152
- package/src/teamix-evo-design-opentrek/patterns/form-page.md +437 -231
- package/src/teamix-evo-design-opentrek/patterns/list-page.md +220 -292
- package/src/teamix-evo-design-opentrek/patterns/page-types.md +40 -130
- 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 +1 -1
- package/src/teamix-evo-design-uni-manager/boundaries.md +3 -3
- package/src/teamix-evo-design-uni-manager/brand.md +1 -1
- package/src/teamix-evo-design-uni-manager/components.md +30 -28
- package/src/teamix-evo-design-uni-manager/foundations.md +21 -21
- package/src/teamix-evo-design-uni-manager/generation-flow.md +3 -1
- package/src/teamix-evo-design-uni-manager/patterns/detail-page.md +1 -1
- package/src/teamix-evo-design-uni-manager/patterns/form-page.md +18 -18
- package/src/teamix-evo-design-uni-manager/patterns/list-page.md +29 -29
- package/src/teamix-evo-design-uni-manager/patterns/page-types.md +11 -11
- package/src/teamix-evo-design-uni-manager/philosophy.md +1 -1
- package/src/teamix-evo-design-uni-manager/rules/boundaries.rules.json +3 -3
- 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
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
13
|
+
# 列表页路由规则
|
|
38
14
|
|
|
39
|
-
>
|
|
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
|
-
|
|
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
|
-
|
|
61
|
-
|
|
62
|
-
|
|
26
|
+
**页面类型**: ListPage
|
|
27
|
+
**核心特征**: 多条结构化数据的展示、筛选和操作入口
|
|
28
|
+
**识别条件**: 页面包含数据表格(DataTable)或卡片网格(CardGrid)+ 搜索/筛选 + 分页
|
|
63
29
|
|
|
64
30
|
---
|
|
65
31
|
|
|
66
|
-
##
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
-
|
|
71
|
+
---
|
|
127
72
|
|
|
128
|
-
|
|
129
|
-
- 单条 Tag 含 `label: value ×`
|
|
130
|
-
- 多条提供「清空全部」链接
|
|
73
|
+
## 4. 组件推荐
|
|
131
74
|
|
|
132
|
-
###
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
172
|
-
- 右固定:操作列(140px)
|
|
173
|
-
- 固定列与滚动列交界处 `box-shadow: 1px 0 0 var(--border)`
|
|
174
|
-
- 固定列 `z-index: 10`,滚动列 `z-index: 1`
|
|
103
|
+
> **这是列表页生成中最容易不稳定的点,必须严格遵守:**
|
|
175
104
|
|
|
176
|
-
|
|
105
|
+
水平 padding 采用**分层模型 v7.5**,职责严格划分:
|
|
177
106
|
|
|
178
|
-
-
|
|
179
|
-
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
192
|
-
- 行点击(非操作区):跳转 DetailPage
|
|
193
|
-
- Shift+点击:范围选中
|
|
194
|
-
- Ctrl/Cmd+点击:切换单行
|
|
195
|
-
- 选中样式:背景 `bg-accent`(与 Checkbox 选中态一致)
|
|
126
|
+
### 参考 CSS
|
|
196
127
|
|
|
197
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
210
|
-
- 升序 `↑` / 降序 `↓` 用 `primary` 色
|
|
211
|
-
- 点击循环:默认 → 升序 → 降序 → 默认
|
|
212
|
-
- 排序状态持久化到 `localStorage`
|
|
146
|
+
### 验证方法
|
|
213
147
|
|
|
214
|
-
|
|
148
|
+
生成后逐项验证:
|
|
215
149
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
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
|
-
|
|
157
|
+
### 视觉预期
|
|
225
158
|
|
|
226
|
-
|
|
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
|
-
|
|
168
|
+
## 5.2 ContentCard 表面规则 v7.6【硬约束】
|
|
239
169
|
|
|
240
|
-
|
|
241
|
-
- 表头「操作」左边缘 X = 表体「详情」链接左边缘 X
|
|
242
|
-
- ❌ 禁止操作列内容居中
|
|
243
|
-
- ❌ 禁止只在 `.col-action` 上设 text-align(部分浏览器会被覆盖)
|
|
170
|
+
内容区大卡片容器(ContentCard 作为白卡容器使用时)表面规则:
|
|
244
171
|
|
|
245
|
-
|
|
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
|
-
|
|
192
|
+
### 禁止项
|
|
257
193
|
|
|
258
|
-
|
|
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
|
-
|
|
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
|
-
|
|
267
|
-
|
|
268
|
-
|
|
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
|
-
|
|
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
|
-
|
|
287
|
-
|
|
288
|
-
|
|
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
|
-
##
|
|
235
|
+
## 6. 共享规则引用
|
|
293
236
|
|
|
294
|
-
|
|
237
|
+
以下规范为多个子类型共用,提取到 `_shared/` 目录:
|
|
295
238
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
-
|
|
299
|
-
-
|
|
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
|
-
|
|
246
|
+
子类型文件按需要引用对应共享文件。
|
|
302
247
|
|
|
303
|
-
|
|
304
|
-
| -------------------- | -------------------- | --------------------- |
|
|
305
|
-
| **一级**(可逆) | 查看、编辑、远程连接 | 直接执行 |
|
|
306
|
-
| **二级**(影响状态) | 启动、停止、重启 | Dialog 确认 |
|
|
307
|
-
| **三级**(不可逆) | 删除 | Dialog + 输入确认文本 |
|
|
248
|
+
## 7. 产品配置引用
|
|
308
249
|
|
|
309
|
-
|
|
250
|
+
> 具体列定义、状态机、业务场景按产品隔离,存放在 `products/{产品}/` 目录。
|
|
251
|
+
> AI 读取时需根据目标产品加载对应配置文件。
|
|
310
252
|
|
|
311
|
-
|
|
|
312
|
-
|
|
313
|
-
|
|
|
314
|
-
|
|
|
315
|
-
|
|
|
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
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
-
##
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
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条" | 正确 |
|