@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
|
@@ -8,19 +8,20 @@
|
|
|
8
8
|
|
|
9
9
|
## 强制项(12)
|
|
10
10
|
|
|
11
|
-
| #
|
|
12
|
-
| --- |
|
|
13
|
-
| 1
|
|
14
|
-
| 2
|
|
15
|
-
| 3
|
|
16
|
-
| 4
|
|
17
|
-
|
|
|
18
|
-
|
|
|
19
|
-
|
|
|
20
|
-
|
|
|
21
|
-
|
|
|
22
|
-
|
|
|
23
|
-
|
|
|
11
|
+
| # | 检查点 | 失败示例 | 通过条件 | 规则 |
|
|
12
|
+
| --- | --- | --- | --- | --- |
|
|
13
|
+
| 1 | 无硬编码色值 | `bg-[#fff]` / `style={{color:'red'}}` | 走语义 token:`bg-background` / `text-foreground` | [F1] |
|
|
14
|
+
| 2 | 状态不用原始色 | `text-green-500` / `bg-red-100` | `<Badge variant="secondary">` / `text-destructive` | [S8] |
|
|
15
|
+
| 3 | 间距用 gap | `space-y-4` | `flex flex-col gap-4` | [S2] |
|
|
16
|
+
| 4 | className 不覆盖组件颜色 / 字体 | `<Button className="bg-blue-500">` | `<Button variant="default">` | [S1] |
|
|
17
|
+
| 4.1 | Button 不传 size | `<Button size="sm">` / `<Button size="sm" className="h-9 w-9 p-0">` | `<Button>...</Button>`(default = `h-8` + `text-xs` 12px,ADR 0027 对齐 cd hybridcloud form-element-medium);icon-only 用 `size="icon"` | [ADR0027] |
|
|
18
|
+
| 5 | 复合组件结构完整 | `<Dialog>` 缺 DialogTitle / `<Tabs>` 直接放 Trigger | Dialog ≥ Title;Card ≥ Header+Content;Tabs 含 List;详见 C 组 | [C1-C12] |
|
|
19
|
+
| 6 | 状态 / 占位 / 分隔走专用组件 | 自定义 styled span 当 Badge / animate-pulse div | Badge / Skeleton / Empty / Separator / Alert / `toast()` | [C7-C12] |
|
|
20
|
+
| 7 | 图标用 data-icon,不设尺寸类 | `<SearchIcon className="size-4 mr-2" />` | `<SearchIcon data-icon="inline-start" />` | [I1-I2] |
|
|
21
|
+
| 8 | 不手动 z-index / dark: 覆盖 | `className="z-50"` / `dark:bg-gray-950` | 删除 z-index(组件自管);用语义 token | [S5] [S7] |
|
|
22
|
+
| 9 | 条件类名用 cn() | `` `${active ? 'a' : 'b'}` `` | `cn('base', active ? 'a' : 'b')` | [S6] |
|
|
23
|
+
| 10 | 危险操作二次确认 | `<Button onClick={delete}>删除</Button>` | `<AlertDialog>` + 陈述句标题 + 影响列表 + 重复动词按钮 | P4 [philosophy] |
|
|
24
|
+
| 11 | 可交互元素显式带手型 | `<button onClick={...}>` 不带 `cursor-pointer` | `cursor-pointer` + `disabled:cursor-not-allowed` | [ADR0023] |
|
|
24
25
|
|
|
25
26
|
> **强制项 #12(并入 #11 的纪律范围,与 [ADR 0024](../../../../../docs/adr/0024-scoped-css-radix-state-conflict.md) 同步)**:hover / focus 视觉反馈(border / bg / shadow)写在组件源码 className 时**必须**用 `enabled:` 前缀,disabled 态不触发样式变化。失败示例 `hover:border-primary`(disabled 仍响应);通过示例 `enabled:hover:border-primary`。Radix `data-state="checked"` / `"indeterminate"` / `"on"` 激活态视觉由组件自管,uni-manager scoped CSS 已统一在 `:not()` 链里排除这三个态值,新组件接入 `border-input` 类时务必核对。
|
|
26
27
|
>
|
|
@@ -28,6 +29,7 @@
|
|
|
28
29
|
|
|
29
30
|
[F1]: ./boundaries.md
|
|
30
31
|
[ADR0023]: ../../../../../docs/adr/0023-cursor-pointer-explicit-in-component-source.md
|
|
32
|
+
[ADR0027]: ../../../../../docs/adr/0027-component-visual-token-alignment.md
|
|
31
33
|
[S1]: ./boundaries.md
|
|
32
34
|
[S2]: ./boundaries.md
|
|
33
35
|
[S5]: ./boundaries.md
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
# Components — 选型决策与组合规则
|
|
2
2
|
|
|
3
|
+
> ⚠️ **Prerequisites**: 你必须已完成 [generation-flow.md](./generation-flow.md) Step 1–3(已确定页面类型 + 子类型 + 区域骨架)后才能读本文件。
|
|
4
|
+
> 若未完成前置步骤,请先返回 [generation-flow.md](./generation-flow.md) 从 Step 1 开始。
|
|
5
|
+
|
|
3
6
|
> **本文档只回答"用什么组件、怎么搭配",不写具体 Props / Examples / import 路径。**
|
|
4
7
|
> 组件 API、Props、示例代码通过 MCP `get_component_meta` 实时查询;可用列表通过 `list_components` / `find_components` 查询。
|
|
5
8
|
|
|
@@ -13,24 +16,29 @@
|
|
|
13
16
|
|
|
14
17
|
调用 `list_components` / `find_components` 命中失败、或本文件提到的组件名(例如 `SearchCombo` / `ContextSwitcher` / `ItemCard` / `CardGrid` / `CardActionBar`)在 `@teamix-evo/biz-ui` 中无实物时。
|
|
15
18
|
|
|
16
|
-
### 0.2
|
|
19
|
+
### 0.2 四步处置法
|
|
17
20
|
|
|
18
21
|
1. **不要自造同名组件入 `src/components/`** — 即使本文件提到该组件名,也必须先确认实物存在。
|
|
19
|
-
2.
|
|
20
|
-
3.
|
|
22
|
+
2. **优先扫所有 ui 单体找语义等价**(见 §0.4) — 在 `@teamix-evo/ui` 约 89 个原子件中用 `find_components` 模糊搜 + 按七类法分类筛,找功能 / 结构等价的**单体**直接用。**这一步不可跳**。
|
|
23
|
+
3. **单体彻底无等价 → 才用 ui 多原子最小拼装**(参见本文件 §3 决策树和 §5 拼凑配方)。
|
|
24
|
+
4. **在响应中显式声明替代关系**,例如:
|
|
21
25
|
|
|
22
|
-
> `// SearchCombo 暂未实物化 →
|
|
26
|
+
> `// SearchCombo 暂未实物化 → ui filter-bar 单体语义等价 → 直接采用` > `// 或:// SearchCombo 暂未实物化 → 89 件单体扫尽无等价 → Input + Select + Button 最小拼装`
|
|
23
27
|
|
|
24
28
|
### 0.3 兜底优先序
|
|
25
29
|
|
|
26
30
|
```text
|
|
27
|
-
biz-ui
|
|
31
|
+
biz-ui 实物组件(优先)
|
|
32
|
+
↓ 未命中
|
|
33
|
+
ui 原子 — 精确名匹配(dialog→Dialog / button→Button…)
|
|
28
34
|
↓ 未命中
|
|
29
|
-
ui
|
|
35
|
+
ui 原子 — 语义近似单体替代(扫所有 89 件,见 §0.4) ← 关键档:穷尽前不允许进下一档
|
|
36
|
+
↓ 仍未命中
|
|
37
|
+
ui 多原子最小拼装(万不得已,注释声明)
|
|
30
38
|
↓ 仍无法表达
|
|
31
39
|
跳转 patterns/*.md 找页面级模板
|
|
32
40
|
↓ 仍无法表达
|
|
33
|
-
回报用户:缺组件 +
|
|
41
|
+
回报用户:缺组件 + 已尝试单体扫描记录 + 拼装方案
|
|
34
42
|
```
|
|
35
43
|
|
|
36
44
|
**永远不要**:
|
|
@@ -38,22 +46,60 @@ ui 原子组件最小拼装 (兜底)
|
|
|
38
46
|
- 在 `src/components/` 下新增与 biz-ui 同名的"私有版本"
|
|
39
47
|
- 用 antd / arco / chakra 等其它库填补缺口
|
|
40
48
|
- 在 skill 响应中写"假设 biz-ui 有 X"而不实查 MCP
|
|
49
|
+
- **跳过 §0.4 直接进多原子拼装** — 属于"以拼代查",违反单体优先原则
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
### 0.4 语义近似单体扫描指南(兜底关键步骤)
|
|
54
|
+
|
|
55
|
+
> 「**语义近似单体**」= ui 89 个原子里找到一个**功能等价 / 结构相容 / 视觉中性**的组件直接使用,避免几个原子捆一起的拼装代价。这是 §0.3 第 3 档的实操定义。
|
|
56
|
+
|
|
57
|
+
**扫描三板斧**:
|
|
58
|
+
|
|
59
|
+
1. **关键词模糊搜**:`find_components(kw)` 多关键词试 — 例 `SearchBox` → 试 `search` / `find` / `query` / `filter` / `combo`
|
|
60
|
+
2. **七类法分类筛**(按要做的事归类,再翻该类下的 ui 原子):
|
|
61
|
+
- `general`:Button / Icon / Typography
|
|
62
|
+
- `layout`:Flex / Grid / Space / Separator / Sidebar / PageHeader / Card / Container
|
|
63
|
+
- `navigation`:Breadcrumb / Pagination / DropdownMenu / Steps / NavigationMenu / Tabs
|
|
64
|
+
- `data-entry`:参见 §3.6 输入控件
|
|
65
|
+
- `data-display`:参见 §3.4 / §3.5;含 Accordion / Tooltip / Table / DataTable / Badge / Tag / Avatar / Descriptions / Statistic
|
|
66
|
+
- `feedback`:Alert / Dialog / Sheet(抽屉) / Popover / Progress / Spinner / Empty / Skeleton / Sonner
|
|
67
|
+
- `deprecated`:不出现在 `list_components` 默认结果,无视
|
|
68
|
+
3. **能力边界核对**:候选单体用 `get_component_meta(name)` 确认 Props 是否承载所需语义,避免"看名字像"实际不通
|
|
69
|
+
|
|
70
|
+
**典型语义近似映射**(仅示例,使用前仍需 MCP 实查):
|
|
71
|
+
|
|
72
|
+
| 找不到的概念 | 优先尝试单体(语义近似) | 万不得已的拼装兜底 |
|
|
73
|
+
| ------------------ | ----------------------------------------------- | --------------------------------- |
|
|
74
|
+
| `ItemCard` | `card`(直接用) | CardHeader + CardContent + Footer |
|
|
75
|
+
| `SearchCombo` | `filter-bar`(直接用) | Input + Select + Button |
|
|
76
|
+
| `ContextSwitcher` | `dropdown-menu` / `command` + `popover`(拼装) | command + popover + avatar |
|
|
77
|
+
| `Empty` / `NoData` | `empty`(直接用) | div + Icon + Text |
|
|
78
|
+
| `Loading` | `spinner` / `skeleton`(直接用) | div + animate-spin |
|
|
79
|
+
| `ConfirmDialog` | `alert-dialog`(直接用) | dialog + button + text |
|
|
80
|
+
| `StatusTag` | `badge` / `tag`(按 §3.3) | div + dot + text |
|
|
81
|
+
|
|
82
|
+
**严禁反模式**:
|
|
83
|
+
|
|
84
|
+
- 单体语义等价时仍按概念名拼装(例:明明有 `empty` 偏写 `<div className="flex flex-col items-center"><Icon><span>暂无数据</span></div>`)
|
|
85
|
+
- 把"最小拼装"理解为"多原子捆绑就行",而不是先**穷尽 88 件单体**
|
|
41
86
|
|
|
42
87
|
---
|
|
43
88
|
|
|
44
89
|
## 1. 双层组件架构(实物归属)
|
|
45
90
|
|
|
46
|
-
| 层级 | 来源 | 实物清单(截至当前 variant)
|
|
47
|
-
| ------------------------------------------ | ----------------------------- |
|
|
48
|
-
| **业务扩展层(biz-ui,opentrek variant)** | `@teamix-evo/biz-ui/opentrek` |
|
|
49
|
-
| **ui 实现层(shadcn 原子)** | `@teamix-evo/ui` | ≈
|
|
91
|
+
| 层级 | 来源 | 实物清单(截至当前 variant) |
|
|
92
|
+
| ------------------------------------------ | ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
93
|
+
| **业务扩展层(biz-ui,opentrek variant)** | `@teamix-evo/biz-ui/opentrek` | 3 个实物:`list-card`、`op-sidebar`、`op-page-container`。其余 `business/` 目录为文档草稿,**不可 import**。 |
|
|
94
|
+
| **ui 实现层(shadcn 原子)** | `@teamix-evo/ui` | ≈ 76 个原子/复合组件。包含 **PageHeader / Pagination / Steps / Tabs / Tooltip / DataTable / FilterBar / Command / Combobox / DatePicker / Sheet / Dialog / AlertDialog / Card / Badge / Tag / Alert / Sonner / Form** 等高频件。 |
|
|
50
95
|
|
|
51
96
|
### 1.1 选型铁律
|
|
52
97
|
|
|
53
|
-
1. **优先 biz-ui 实物层** — 已封装变体 + 文案规范,但**注意 opentrek 当前仅
|
|
54
|
-
2. **biz-ui 无实物 → ui
|
|
55
|
-
3.
|
|
56
|
-
4.
|
|
98
|
+
1. **优先 biz-ui 实物层** — 已封装变体 + 文案规范,但**注意 opentrek 当前仅 3 个实物**。
|
|
99
|
+
2. **biz-ui 无实物 → ui 单体精确名匹配** — 按组件名 / 显式语义直查 `find_components`。
|
|
100
|
+
3. **精确名未命中 → ui 单体语义近似扫描**(见 §0.4) — 在 88 件里找等价单体直接用,**这一步不可跳**。
|
|
101
|
+
4. **单体彻底无等价 → §5 多原子最小拼装** — 仅作为单体穷尽后的兜底。
|
|
102
|
+
5. **禁止**自造同名组件(违反 reuse-first,详见 §0)。
|
|
57
103
|
|
|
58
104
|
### 1.2 实时校验
|
|
59
105
|
|
|
@@ -75,7 +121,7 @@ ui 原子组件最小拼装 (兜底)
|
|
|
75
121
|
|
|
76
122
|
## 3. 选型决策树
|
|
77
123
|
|
|
78
|
-
### 3.1 反馈与确认 — Dialog vs Sheet vs
|
|
124
|
+
### 3.1 反馈与确认 — Dialog vs Sheet vs Popover
|
|
79
125
|
|
|
80
126
|
```text
|
|
81
127
|
需要用户做出决定 / 阻塞主流程?
|
|
@@ -84,7 +130,7 @@ ui 原子组件最小拼装 (兜底)
|
|
|
84
130
|
│ └─ 复杂表单(< 8 字段)→ Dialog
|
|
85
131
|
└─ 否
|
|
86
132
|
├─ 临时编辑/筛选(侧边滑出)→ Sheet
|
|
87
|
-
├─ 多级下探查看(侧边可叠层)→
|
|
133
|
+
├─ 多级下探查看(侧边可叠层)→ Sheet(多层叠加模式)
|
|
88
134
|
├─ 内容预览/上下文操作(小气泡)→ Popover
|
|
89
135
|
└─ 仅展示信息(鼠标悬浮)→ Tooltip
|
|
90
136
|
```
|
|
@@ -100,17 +146,17 @@ ui 原子组件最小拼装 (兜底)
|
|
|
100
146
|
|
|
101
147
|
> 来源:Teamix-UI 容器规范。
|
|
102
148
|
|
|
103
|
-
| 类别 | 容器
|
|
104
|
-
| ---------- |
|
|
105
|
-
| **操作型** | 全页面(FormPage)
|
|
106
|
-
| **操作型** | 弹窗模态(Dialog)
|
|
107
|
-
| **操作型** | 气泡(Popconfirm)
|
|
108
|
-
| **展示型** | 全页面(DetailPage)
|
|
109
|
-
| **展示型** | 抽屉非模态(Sheet)
|
|
110
|
-
| **展示型** | 抽屉模态(
|
|
111
|
-
| **展示型** | 弹窗模态(Dialog)
|
|
112
|
-
| **展示型** | 卡片(Card)
|
|
113
|
-
| **展示型** | 通知反馈(
|
|
149
|
+
| 类别 | 容器 | 何时使用 |
|
|
150
|
+
| ---------- | -------------------------- | ------------------------------------------------ |
|
|
151
|
+
| **操作型** | 全页面(FormPage) | 字段多 / 步骤多 / 需要持久 URL |
|
|
152
|
+
| **操作型** | 弹窗模态(Dialog) | 阻塞主流程的简短确认或表单;最多 2 级,不再深入 |
|
|
153
|
+
| **操作型** | 气泡(Popconfirm) | 二次确认(删除/解绑),轻量提示 |
|
|
154
|
+
| **展示型** | 全页面(DetailPage) | 完整信息查看,路由可分享 |
|
|
155
|
+
| **展示型** | 抽屉非模态(Sheet) | 不阻塞主流程,可保留上下文(如侧栏 Detail) |
|
|
156
|
+
| **展示型** | 抽屉模态(Sheet 多层叠加) | 多级下探查看(如资源 → 子资源 → 配置),逐层推出 |
|
|
157
|
+
| **展示型** | 弹窗模态(Dialog) | 一次性展示重要信息 |
|
|
158
|
+
| **展示型** | 卡片(Card) | 同级信息分组;卡片之间间距 16px |
|
|
159
|
+
| **展示型** | 通知反馈(Sonner / Alert) | 瞬时反馈 / 页面级横幅 / 系统通知 |
|
|
114
160
|
|
|
115
161
|
### 3.3 状态展示 — Badge vs Tag vs Alert
|
|
116
162
|
|
|
@@ -149,12 +195,14 @@ ui 原子组件最小拼装 (兜底)
|
|
|
149
195
|
```text
|
|
150
196
|
枚举值 ≤ 7 → RadioGroup(一屏可见)
|
|
151
197
|
枚举值 8~30 → Select
|
|
152
|
-
枚举值 > 30 / 需搜索 → Combobox
|
|
153
|
-
多选 →
|
|
198
|
+
枚举值 > 30 / 需搜索 → Combobox(输入即建议,支持 multiple 多选)或 Command + Popover 拼装
|
|
199
|
+
多选 → Combobox (multiple={true}) / Checkbox
|
|
200
|
+
数值(整数/小数/金额)→ InputNumber(带 min/max/step/precision)
|
|
201
|
+
数值范围可视化 → Slider(仅用于资源配比/阈值的拖拽式选择)
|
|
154
202
|
日期 → DatePicker / DateRangePicker
|
|
155
|
-
富文本 → Textarea
|
|
203
|
+
富文本 → Textarea
|
|
156
204
|
文件 → Upload
|
|
157
|
-
自动补全 →
|
|
205
|
+
自动补全 → Combobox
|
|
158
206
|
```
|
|
159
207
|
|
|
160
208
|
---
|
|
@@ -176,15 +224,16 @@ ui 原子组件最小拼装 (兜底)
|
|
|
176
224
|
|
|
177
225
|
## 5. 业务扩展层(候补)— 实物 vs 概念 + 拼凑配方
|
|
178
226
|
|
|
179
|
-
> opentrek variant
|
|
227
|
+
> opentrek variant 当前有 **3 个**实物业务组件:`list-card`、`op-sidebar`、`op-page-container`。
|
|
180
228
|
> 以下表格区分"已实物化"与"概念占位(用 ui 拼装)"。
|
|
181
229
|
|
|
182
230
|
### 5.1 已实物化(直接使用)
|
|
183
231
|
|
|
184
|
-
| 组件
|
|
185
|
-
|
|
|
186
|
-
| **list-card**
|
|
187
|
-
| **op-sidebar**
|
|
232
|
+
| 组件 | 用途 | 归属 |
|
|
233
|
+
| --------------------- | ----------------------------------------- | --------------- |
|
|
234
|
+
| **list-card** | 列表页卡片化展示(替代 ItemCard) | biz-ui/opentrek |
|
|
235
|
+
| **op-sidebar** | 主导航侧栏 | biz-ui/opentrek |
|
|
236
|
+
| **op-page-container** | 页面容器(白卡 + 间距 + PageHeader 插槽) | biz-ui/opentrek |
|
|
188
237
|
|
|
189
238
|
### 5.2 概念占位(按配方拼装)
|
|
190
239
|
|
|
@@ -237,8 +286,9 @@ ui 原子组件最小拼装 (兜底)
|
|
|
237
286
|
通用结构性规则 → 见 [checklist.md](./checklist.md)(C1-C12 / I1-I4)。本文件特有的"选型决策"自检:
|
|
238
287
|
|
|
239
288
|
- [ ] 已先用 `find_components` 验证组件存在性(不靠默认)
|
|
240
|
-
- [ ] biz-ui 命中失败 →
|
|
241
|
-
- [ ]
|
|
289
|
+
- [ ] biz-ui 命中失败 → **先按 §0.4 扫所有 ui 单体找语义近似替代**,单体覆盖时直接采用,未直接跳到 §5 拼装
|
|
290
|
+
- [ ] 单体彻底无等价时 → §5 拼装代码必加注释 `// 已扫尽 89 件 ui 单体无语义等价 → 拼装`
|
|
291
|
+
- [ ] 反馈 / 确认场景按容量选 Dialog / Sheet / Popover
|
|
242
292
|
- [ ] 容器层级 ≤ 3,弹窗最多 2 级,超过则跳转全页面
|
|
243
293
|
- [ ] 卡片列表优先 biz-ui `list-card`,否则用 `card[] + grid` 拼
|
|
244
294
|
- [ ] 表格 ≤ 6 列,超过改 DataTable + 列控制
|