create-dwy 0.3.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/templates/claude-global/rules/agent-team-execution.md +138 -0
- package/templates/claude-global/rules/agent-team-patterns.md +157 -0
- package/templates/claude-global/rules/backend-security.md +7 -0
- package/templates/claude-global/rules/docs-sync.md +23 -0
- package/templates/claude-global/rules/python-code-style.md +3 -0
- package/templates/claude-global/rules/server-security.md +9 -0
- package/templates/claude-global/rules/vue-code-style.md +9 -0
- package/templates/claude-global/skills/dwy-auto-sync/SKILL.md +52 -0
- package/templates/claude-global/skills/dwy-frontend-eui/SKILL.md +29 -18
package/package.json
CHANGED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Agent 团队并行执行规则
|
|
2
|
+
|
|
3
|
+
收到任务后,必须先评估是否可以通过 Agent 并行加速执行。这是强制检查,不可跳过。
|
|
4
|
+
|
|
5
|
+
## 一、可并行性评估
|
|
6
|
+
|
|
7
|
+
收到任务后立即判断:
|
|
8
|
+
|
|
9
|
+
| 条件 | 判定 |
|
|
10
|
+
|------|------|
|
|
11
|
+
| 任务可拆为 2+ 个**无依赖**子任务 | → 任务级并行 |
|
|
12
|
+
| 单个任务内有 2+ 个**独立步骤** | → 步骤级并行 |
|
|
13
|
+
| 任务只有单一线性流程 | → 正常执行,不并行 |
|
|
14
|
+
|
|
15
|
+
**核心原则:只有真正无依赖的工作才并行。** 如果子任务 B 需要子任务 A 的输出,它们必须串行。
|
|
16
|
+
|
|
17
|
+
## 二、风险分级与自主度
|
|
18
|
+
|
|
19
|
+
根据任务风险决定执行方式:
|
|
20
|
+
|
|
21
|
+
### 低风险 — 直接并行执行
|
|
22
|
+
|
|
23
|
+
- 只读操作(代码研究、搜索、文档查阅)
|
|
24
|
+
- 新建独立文件(写 demo、写测试、写新组件)
|
|
25
|
+
- 独立的 lint / format / 类型检查
|
|
26
|
+
- 查询外部文档或 API
|
|
27
|
+
|
|
28
|
+
**执行方式:** 直接派 Agent 并行,完成后汇报结果。
|
|
29
|
+
|
|
30
|
+
### 中风险 — 确认后并行执行
|
|
31
|
+
|
|
32
|
+
- 修改已有文件
|
|
33
|
+
- 添加/升级依赖
|
|
34
|
+
- 修改构建配置或路由配置
|
|
35
|
+
|
|
36
|
+
**执行方式:** 先展示拆分计划(哪些 Agent、各做什么、修改哪些文件),用户确认后并行执行。
|
|
37
|
+
|
|
38
|
+
### 高风险 — 确认 + 强制 Review
|
|
39
|
+
|
|
40
|
+
- 删除文件或代码
|
|
41
|
+
- 修改核心模块(数据库/认证/路由守卫/支付)
|
|
42
|
+
- 架构重构
|
|
43
|
+
- 涉及 git 操作(rebase / merge / force push)
|
|
44
|
+
|
|
45
|
+
**执行方式:** 展示详细计划 + 影响分析,用户确认后执行,完成后**必须**触发 review + auto-fix 闭环。
|
|
46
|
+
|
|
47
|
+
## 三、Agent 派遣协议
|
|
48
|
+
|
|
49
|
+
### 任务级并行
|
|
50
|
+
|
|
51
|
+
将大任务拆分为独立子任务,每个子任务派一个 Agent:
|
|
52
|
+
|
|
53
|
+
1. 识别独立子任务,创建 TaskCreate 追踪
|
|
54
|
+
2. 在**同一条消息**中派出所有 Agent(确保真正并行)
|
|
55
|
+
3. 每个 Agent 的 prompt 必须包含:完整的任务上下文、要操作的文件范围、相关的代码规范要求
|
|
56
|
+
4. 涉及文件修改的 Agent 使用 `isolation: "worktree"` 避免冲突
|
|
57
|
+
5. 所有 Agent 完成后汇总结果
|
|
58
|
+
|
|
59
|
+
### 步骤级并行
|
|
60
|
+
|
|
61
|
+
在单个任务执行中,将独立步骤并行化:
|
|
62
|
+
|
|
63
|
+
1. 识别当前步骤中哪些操作互不依赖
|
|
64
|
+
2. 在同一条消息中发起多个工具调用(Agent、Bash、Grep、Glob 等均可并行)
|
|
65
|
+
3. 等结果返回后再进入依赖这些结果的下一步
|
|
66
|
+
|
|
67
|
+
### Agent Prompt 要求
|
|
68
|
+
|
|
69
|
+
派遣 Agent 时,prompt 必须包含以下要素(不可省略):
|
|
70
|
+
|
|
71
|
+
- **目标:** 这个 Agent 具体要完成什么
|
|
72
|
+
- **上下文:** 为什么要做这件事,整体任务的背景
|
|
73
|
+
- **范围:** 要操作的文件/目录,明确边界
|
|
74
|
+
- **规范:** 需遵循的代码规范(引用具体规则文件或关键约束)
|
|
75
|
+
- **产出:** 期望的输出形式(代码、报告、修复等)
|
|
76
|
+
|
|
77
|
+
**禁止:** 写模糊的 prompt 如"基于你的研究结果实现它"。每个 Agent 的 prompt 必须自包含。
|
|
78
|
+
|
|
79
|
+
## 四、Review + Auto-Fix 闭环
|
|
80
|
+
|
|
81
|
+
所有并行 Agent 完成后,执行质量保障流程:
|
|
82
|
+
|
|
83
|
+
### 触发条件
|
|
84
|
+
|
|
85
|
+
以下情况**必须**触发 review 闭环:
|
|
86
|
+
|
|
87
|
+
- 任何高风险任务完成后
|
|
88
|
+
- 3 个或以上 Agent 并行修改代码后
|
|
89
|
+
- 用户明确要求 review 时
|
|
90
|
+
|
|
91
|
+
以下情况**可跳过** review:
|
|
92
|
+
|
|
93
|
+
- 纯只读研究任务
|
|
94
|
+
- 单个低风险文件创建
|
|
95
|
+
|
|
96
|
+
### Review 流程
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
Agent 完成 → code-reviewer Agent 审查 → 发现问题?
|
|
100
|
+
├─ 否 → 汇报结果,完成
|
|
101
|
+
└─ 是 → 自动修复 → 再次 review → 通过?
|
|
102
|
+
├─ 否 → 报告给用户,人工介入
|
|
103
|
+
└─ 是 → 汇报结果,完成
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
1. 启动 `superpowers:code-reviewer` Agent,审查所有变更
|
|
107
|
+
2. 如发现问题,直接修复(不需再次确认)
|
|
108
|
+
3. 修复后再次 review,最多循环 **2 轮**
|
|
109
|
+
4. 2 轮后仍有问题,向用户报告剩余问题,交由人工判断
|
|
110
|
+
|
|
111
|
+
### Review Agent 的 Prompt 要求
|
|
112
|
+
|
|
113
|
+
- 说明本次变更的整体目标
|
|
114
|
+
- 列出所有被修改/新建的文件
|
|
115
|
+
- 引用相关的代码规范规则
|
|
116
|
+
- 要求 review 聚焦:正确性、规范符合度、是否引入 bug
|
|
117
|
+
|
|
118
|
+
## 五、执行报告
|
|
119
|
+
|
|
120
|
+
并行任务全部完成后,向用户输出简洁的执行报告:
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
## 执行报告
|
|
124
|
+
- **并行 Agent 数量:** N 个
|
|
125
|
+
- **完成情况:** 全部完成 / X 个成功、Y 个失败
|
|
126
|
+
- **Review 结果:** 通过 / 修复了 N 个问题
|
|
127
|
+
- **变更文件:** 列出所有新建/修改的文件
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
仅在多 Agent 并行任务时输出报告,单 Agent 执行不需要。
|
|
131
|
+
|
|
132
|
+
## 六、禁止事项
|
|
133
|
+
|
|
134
|
+
- **禁止**派 Agent 做需要用户交互的操作(如需要用户输入、选择)
|
|
135
|
+
- **禁止**多个 Agent 修改同一个文件(必须用 worktree 隔离或拆分为串行)
|
|
136
|
+
- **禁止**在 Agent prompt 中省略上下文让 Agent "自己去查"
|
|
137
|
+
- **禁止**跳过风险评估直接并行执行
|
|
138
|
+
- **禁止**忽略 Agent 的失败结果,必须处理或报告
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# Agent 并行模式速查表
|
|
2
|
+
|
|
3
|
+
常见任务的 Agent 并行分工模板。执行前对照此表选择合适的模式。
|
|
4
|
+
|
|
5
|
+
## 一、任务级并行模式
|
|
6
|
+
|
|
7
|
+
### 模式 1:批量创建(N 路并行)
|
|
8
|
+
|
|
9
|
+
**场景:** 创建多个独立的组件/页面/测试/demo
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
示例:"给 5 个组件写 demo 页面"
|
|
13
|
+
|
|
14
|
+
Agent-1 (worktree) → ComponentA demo
|
|
15
|
+
Agent-2 (worktree) → ComponentB demo
|
|
16
|
+
Agent-3 (worktree) → ComponentC demo
|
|
17
|
+
Agent-4 (worktree) → ComponentD demo
|
|
18
|
+
Agent-5 (worktree) → ComponentE demo
|
|
19
|
+
→ 全部完成后 code-reviewer 审查
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
**要点:**
|
|
23
|
+
- 每个 Agent 使用 `isolation: "worktree"`
|
|
24
|
+
- 每个 Agent 的 prompt 包含组件的 API 说明和 demo 规范
|
|
25
|
+
- 风险等级:低,直接执行
|
|
26
|
+
|
|
27
|
+
### 模式 2:研究 + 实现(2 阶段流水线)
|
|
28
|
+
|
|
29
|
+
**场景:** 需要先了解代码再动手修改
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
示例:"修复 EForm 组件的验证 bug"
|
|
33
|
+
|
|
34
|
+
阶段 1(并行研究):
|
|
35
|
+
Agent-Explore → 分析 EForm 组件代码结构和数据流
|
|
36
|
+
Agent-Explore → 搜索相关测试和使用示例
|
|
37
|
+
Agent-Explore → 查看 git 历史和相关 issue
|
|
38
|
+
|
|
39
|
+
阶段 2(串行实现):
|
|
40
|
+
基于研究结果,主线程或单 Agent 实现修复
|
|
41
|
+
|
|
42
|
+
阶段 3(并行验证):
|
|
43
|
+
Agent → 运行测试
|
|
44
|
+
Agent → code-review 变更
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**要点:**
|
|
48
|
+
- 阶段 1 的 Agent 全部用 `subagent_type: "Explore"`
|
|
49
|
+
- 阶段 2 必须等阶段 1 全部完成
|
|
50
|
+
- 风险等级:中,阶段 2 前需确认方案
|
|
51
|
+
|
|
52
|
+
### 模式 3:多模块同步修改
|
|
53
|
+
|
|
54
|
+
**场景:** 一个功能涉及多个独立模块的修改
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
示例:"给所有 API 模块添加分页参数"
|
|
58
|
+
|
|
59
|
+
Agent-1 (worktree) → 修改 user API 模块
|
|
60
|
+
Agent-2 (worktree) → 修改 order API 模块
|
|
61
|
+
Agent-3 (worktree) → 修改 product API 模块
|
|
62
|
+
→ code-reviewer 审查一致性
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**要点:**
|
|
66
|
+
- 每个 Agent 必须收到统一的修改规范(参数命名、类型定义)
|
|
67
|
+
- 使用 worktree 隔离
|
|
68
|
+
- 风险等级:中,执行前确认修改规范
|
|
69
|
+
|
|
70
|
+
### 模式 4:前后端同步开发
|
|
71
|
+
|
|
72
|
+
**场景:** 接口契约已定,前后端可以同时写
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
示例:"新增用户导出功能"
|
|
76
|
+
|
|
77
|
+
Agent-1 (worktree) → 后端 API + service 实现
|
|
78
|
+
Agent-2 (worktree) → 前端页面 + API 调用
|
|
79
|
+
→ code-reviewer 审查接口契约一致性
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**要点:**
|
|
83
|
+
- 两个 Agent 必须收到相同的接口契约定义(URL、参数、响应格式)
|
|
84
|
+
- 风险等级:中,确认接口契约后执行
|
|
85
|
+
|
|
86
|
+
## 二、步骤级并行模式
|
|
87
|
+
|
|
88
|
+
### 模式 A:并行信息收集
|
|
89
|
+
|
|
90
|
+
在执行任何任务前,将独立的信息收集步骤并行化:
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
同一消息中发起:
|
|
94
|
+
Grep → 搜索相关代码引用
|
|
95
|
+
Glob → 查找相关文件
|
|
96
|
+
Read → 读取配置文件
|
|
97
|
+
Agent(Explore) → 分析依赖关系
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### 模式 B:并行验证
|
|
101
|
+
|
|
102
|
+
修改完成后,将独立的验证步骤并行化:
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
同一消息中发起:
|
|
106
|
+
Bash → 运行单元测试
|
|
107
|
+
Bash → 运行 lint 检查
|
|
108
|
+
Bash → 运行类型检查
|
|
109
|
+
Bash → 运行构建
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### 模式 C:并行文档/测试补充
|
|
113
|
+
|
|
114
|
+
主要代码完成后,并行补充配套文件:
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
同一消息中发起:
|
|
118
|
+
Agent → 写单元测试
|
|
119
|
+
Agent → 更新相关文档
|
|
120
|
+
Agent → 更新 changelog
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## 三、反模式(禁止使用)
|
|
124
|
+
|
|
125
|
+
| 反模式 | 问题 | 正确做法 |
|
|
126
|
+
|--------|------|---------|
|
|
127
|
+
| 多 Agent 改同一文件 | 冲突、覆盖 | 串行修改或拆分文件职责 |
|
|
128
|
+
| 无上下文的 Agent | 产出质量差 | prompt 必须自包含 |
|
|
129
|
+
| 链式依赖硬并行 | B 依赖 A 的输出却并行 | 识别依赖,串行执行 |
|
|
130
|
+
| 10+ Agent 同时派出 | 难以管理、context 爆炸 | 单批最多 5 个 Agent |
|
|
131
|
+
| 跳过 review 直接提交 | 质量无保障 | 遵循 review 闭环 |
|
|
132
|
+
|
|
133
|
+
## 四、Agent 数量指南
|
|
134
|
+
|
|
135
|
+
| 场景 | 建议 Agent 数 |
|
|
136
|
+
|------|-------------|
|
|
137
|
+
| 批量创建同质文件 | 每个文件 1 个,上限 5 个/批 |
|
|
138
|
+
| 并行研究 | 2-3 个 Explore Agent |
|
|
139
|
+
| 多模块修改 | 每个模块 1 个,上限 4 个/批 |
|
|
140
|
+
| 前后端同步 | 2 个 |
|
|
141
|
+
| 步骤级并行工具调用 | 不限(Grep/Glob/Read 等轻量调用尽量并行) |
|
|
142
|
+
|
|
143
|
+
超过 5 个 Agent 的任务,分批执行:先派第一批,完成后再派第二批。
|
|
144
|
+
|
|
145
|
+
## 五、Worktree 使用指南
|
|
146
|
+
|
|
147
|
+
以下场景**必须**使用 `isolation: "worktree"`:
|
|
148
|
+
|
|
149
|
+
- 多个 Agent 各自创建/修改不同文件
|
|
150
|
+
- Agent 的修改可能与当前工作区冲突
|
|
151
|
+
- 需要保持主工作区干净(如正在进行其他工作)
|
|
152
|
+
|
|
153
|
+
以下场景**不需要** worktree:
|
|
154
|
+
|
|
155
|
+
- 纯只读的 Explore Agent
|
|
156
|
+
- 步骤级并行的工具调用(Grep/Glob/Read/Bash)
|
|
157
|
+
- 单个 Agent 执行(无冲突风险)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# 文档同步规则
|
|
2
|
+
|
|
3
|
+
代码变更时,必须同步更新所有关联文档。不允许只改代码不更新文档。
|
|
4
|
+
|
|
5
|
+
## 核心原则
|
|
6
|
+
|
|
7
|
+
**代码和文档是一个整体。** 如果一次变更修改了对外可见的 API(props、函数签名、导出类型、命令行参数等),那么描述该 API 的文档必须在同一个 commit 中更新。
|
|
8
|
+
|
|
9
|
+
## 检查清单
|
|
10
|
+
|
|
11
|
+
完成代码变更后,逐项确认:
|
|
12
|
+
|
|
13
|
+
1. **Skills / 速查文档** — 是否有 SKILL.md 或类似的 AI 速查文档描述了被修改的 API?如果有,更新对应条目。
|
|
14
|
+
2. **示例 / Demo 页面** — 新增的功能是否有对应的交互演示?如果没有,补充 demo。
|
|
15
|
+
3. **导航 / 搜索索引** — 新增的页面或组件是否已注册到路由、侧边栏、搜索索引?
|
|
16
|
+
4. **项目 CLAUDE.md** — 模块结构(新增/删除/重命名包或模块)、构建命令、测试命令是否变化?如果是,更新 CLAUDE.md。
|
|
17
|
+
5. **版本号** — 变更是否对外可见?如果是,更新 package.json / pyproject.toml 版本号。
|
|
18
|
+
|
|
19
|
+
## 提交规范
|
|
20
|
+
|
|
21
|
+
- 文档更新应与代码变更在**同一个 commit** 中
|
|
22
|
+
- 遗漏后发现,立即补一个 `docs: sync xxx` 的 commit
|
|
23
|
+
- 纯文档更新用 `docs:` 前缀,代码+文档混合用 `feat:` / `fix:`
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dwy-auto-sync
|
|
3
|
+
description: "create-dwy 发版后自动更新本地 CLI 并同步 Claude Code 配置。触发条件:执行了 npm publish create-dwy、pnpm publish:cli、或用户要求同步 dwy 配置时。"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# DWY 发版后自动同步
|
|
7
|
+
|
|
8
|
+
当 `create-dwy` 发布新版本后,必须执行以下步骤确保本地 Claude Code 配置与最新版本同步。
|
|
9
|
+
|
|
10
|
+
## 触发时机
|
|
11
|
+
|
|
12
|
+
以下任一情况发生时,执行同步流程:
|
|
13
|
+
|
|
14
|
+
1. 执行了 `npm publish`(在 claude-cli 目录下)
|
|
15
|
+
2. 执行了 `pnpm publish:cli`
|
|
16
|
+
3. 用户要求"同步 dwy"或"更新配置"
|
|
17
|
+
|
|
18
|
+
## 同步流程
|
|
19
|
+
|
|
20
|
+
发版成功后,按顺序执行:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# 1. 更新全局 CLI 到最新版
|
|
24
|
+
npm i -g create-dwy@latest
|
|
25
|
+
|
|
26
|
+
# 2. 验证版本
|
|
27
|
+
dwy --version
|
|
28
|
+
|
|
29
|
+
# 3. 同步 Claude Code 配置(skills/rules/hooks/commands/settings)
|
|
30
|
+
dwy sync claude
|
|
31
|
+
|
|
32
|
+
# 4. 验证同步结果
|
|
33
|
+
ls ~/.claude/skills/
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## 同步了什么
|
|
37
|
+
|
|
38
|
+
`dwy sync claude` 会将以下内容从 CLI 模板同步到 `~/.claude/`:
|
|
39
|
+
|
|
40
|
+
| 目录 | 内容 | 同步方式 |
|
|
41
|
+
|------|------|---------|
|
|
42
|
+
| `~/.claude/skills/` | AI 速查文档 (dwy-frontend-eui, dwy-frontend-core, dwy-backend-base) | 覆盖同名,保留已有 |
|
|
43
|
+
| `~/.claude/rules/` | 编码规范 (python-code-style, vue-code-style, 安全规则等) | 覆盖同名,保留已有 |
|
|
44
|
+
| `~/.claude/hooks/` | 自动化脚本 (pre-git-commit 检查) | 覆盖同名,保留已有 |
|
|
45
|
+
| `~/.claude/commands/` | 自定义命令 | 覆盖同名,保留已有 |
|
|
46
|
+
| `~/.claude/settings.json` | Claude Code 设置 | 浅合并(新 key 加入,同名覆盖,已有独有 key 保留) |
|
|
47
|
+
|
|
48
|
+
## 注意事项
|
|
49
|
+
|
|
50
|
+
- npm 注册表有传播延迟(~1 分钟),如果 `npm i -g create-dwy@latest` 安装的不是刚发布的版本,等待后重试
|
|
51
|
+
- `dwy sync claude` 从 Gitee 仓库拉取模板,确保代码已 push 到 Gitee 后再执行
|
|
52
|
+
- 同步不会删除用户手动添加的 skills/rules,只覆盖同名文件
|
|
@@ -75,30 +75,30 @@ frontend/eui/src/components/{component-name}/types.ts
|
|
|
75
75
|
|
|
76
76
|
| 组件 | 用途 | 关键 Props |
|
|
77
77
|
|------|------|-----------|
|
|
78
|
-
| EInput | 输入框 | v-model, type, placeholder, size, clearable, showPassword, disabled, readonly, maxlength |
|
|
79
|
-
| ETextarea | 多行输入 | v-model, placeholder, rows, autoResize, maxlength, disabled |
|
|
80
|
-
| ENumberField | 数字输入 | v-model, min, max, step, size, disabled |
|
|
81
|
-
| ESelect | 下拉选择 | v-model, options(Option[]), placeholder, clearable, size, disabled |
|
|
78
|
+
| EInput | 输入框 | v-model, type, placeholder, size, clearable, showPassword, disabled, readonly, maxlength, showWordLimit |
|
|
79
|
+
| ETextarea | 多行输入 | v-model, placeholder, rows, autoResize, maxlength, disabled, showWordLimit, minRows, maxRows |
|
|
80
|
+
| ENumberField | 数字输入 | v-model, min, max, step, size, disabled, precision, controlsPosition, placeholder, readonly |
|
|
81
|
+
| ESelect | 下拉选择 | v-model, options(Option[]), placeholder, clearable, size, disabled, filterable, multiple, collapseTags, remote, remoteMethod, loading |
|
|
82
82
|
| ENativeSelect | 原生 select | v-model, options(SelectOption[]), placeholder, disabled |
|
|
83
83
|
| ECombobox | 组合框 | v-model, options(Option[]), placeholder, emptyText, disabled |
|
|
84
84
|
| EAutocomplete | 自动补全 | v-model, fetchSuggestions(async fn), debounce, placeholder |
|
|
85
|
-
| ECheckbox | 复选框 | v-model, label, disabled, indeterminate |
|
|
86
|
-
| ERadio | 单选组 | v-model, options(Option[]), direction(horizontal/vertical), disabled |
|
|
85
|
+
| ECheckbox | 复选框 | v-model, label, disabled, indeterminate, options(Option[]), direction(horizontal/vertical), border |
|
|
86
|
+
| ERadio | 单选组 | v-model, options(Option[]), direction(horizontal/vertical), disabled, optionType(default/button), border, size |
|
|
87
87
|
| ESwitch | 开关 | v-model, label, size, disabled |
|
|
88
88
|
| ETagsInput | 标签输入 | v-model(string[]), placeholder, max, size, disabled |
|
|
89
|
-
| EDatePicker | 日期选择 | v-model, placeholder, format, clearable, disabled |
|
|
89
|
+
| EDatePicker | 日期选择 | v-model, type(date/daterange/month/year), placeholder, startPlaceholder, endPlaceholder, rangeSeparator, format, clearable, disabled, disabledDate, shortcuts(DatePickerShortcut[]) |
|
|
90
90
|
| ETimePicker | 时间选择 | v-model, placeholder, format, hourStep, minuteStep, disabled |
|
|
91
91
|
| EColorPicker | 颜色选择 | v-model, presets(string[]), showAlpha, disabled |
|
|
92
92
|
| ERate | 评分 | v-model, max, allowHalf, showText, disabled |
|
|
93
93
|
| ESlider | 滑块 | v-model(number[]), min, max, step, orientation, disabled |
|
|
94
|
-
| ECascader | 级联选择 | v-model, options(CascaderOption[]), placeholder, filterable, clearable |
|
|
94
|
+
| ECascader | 级联选择 | v-model, options(CascaderOption[]), placeholder, filterable, clearable, lazy, loadFn, multiple, collapseTags |
|
|
95
95
|
| ETreeSelect | 树选择 | v-model, data(TreeNode[]), placeholder, multiple, checkable, disabled |
|
|
96
96
|
| EMention | @提及输入 | v-model, options(MentionOption[]), prefix, loading, placeholder |
|
|
97
97
|
| EInputOTP | OTP 验证码 | v-model, length, disabled, placeholder |
|
|
98
98
|
| EPinInput | PIN 输入 | v-model(string[]), length, mask, otp, type(text/number) |
|
|
99
|
-
| EUpload | 文件上传 | v-model(UploadFile[]), action, accept, multiple, limit, listType(text/picture/picture-card), drag |
|
|
99
|
+
| EUpload | 文件上传 | v-model(UploadFile[]), action, accept, multiple, limit, listType(text/picture/picture-card), drag, beforeUpload, autoUpload, headers, withCredentials |
|
|
100
100
|
| ETransfer | 穿梭框 | v-model, data(TransferItem[]), filterable, titles([string, string]) |
|
|
101
|
-
| EForm | 表单容器 | model, rules(Zod/FormRule[]), labelWidth, labelPosition(left/right/top), size, disabled |
|
|
101
|
+
| EForm | 表单容器 | model, rules(Zod/FormRule[]), labelWidth, labelPosition(left/right/top), size, disabled, inline |
|
|
102
102
|
| EFormItem | 表单项 | (配合 EForm 使用) |
|
|
103
103
|
| EField | 字段布局 | orientation(vertical/horizontal/responsive), invalid |
|
|
104
104
|
| EInputGroup | 输入组 | 子组件 EInputGroupAddon(align) |
|
|
@@ -107,22 +107,22 @@ frontend/eui/src/components/{component-name}/types.ts
|
|
|
107
107
|
|
|
108
108
|
| 组件 | 用途 | 关键 Props |
|
|
109
109
|
|------|------|-----------|
|
|
110
|
-
| ETable | 表格 | data, columns(TableColumn[]), loading, rowKey, striped, bordered, selectable, selectedKeys |
|
|
110
|
+
| ETable | 表格 | data, columns(TableColumn[]), loading, rowKey, striped, bordered, selectable, selectedKeys, expandable, expandedRowKeys, rowClassName, showSummary, summaryMethod, virtual, virtualRowHeight, resizable |
|
|
111
111
|
| EVirtualTable | 虚拟滚动表格 | columns(VirtualTableColumn[]), data, height, estimateRowHeight, rowKey, loading |
|
|
112
112
|
| EDescriptions | 描述列表 | items(DescriptionItem[]), columns, bordered, title |
|
|
113
113
|
| ETimeline | 时间线 | items(TimelineItem[]), reverse |
|
|
114
114
|
| EStatistic | 统计数值 | title, value, prefix, suffix, precision |
|
|
115
|
-
| ETree | 树形控件 | data(TreeNode[]), v-model, checkable, expandedKeys, defaultExpandAll |
|
|
115
|
+
| ETree | 树形控件 | data(TreeNode[]), v-model, checkable, expandedKeys, defaultExpandAll, lazy, loadFn, draggable, filterMethod, filterQuery, checkStrictly |
|
|
116
116
|
| ECalendar | 日历 | v-model, multiple, disabled, locale, minValue, maxValue |
|
|
117
117
|
| ERangeCalendar | 日期范围日历 | v-model({start, end}), disabled, locale, minValue, maxValue |
|
|
118
|
-
| EPagination | 分页 | v-model, total, pageSize, showSizeChanger, pageSizes, showTotal |
|
|
118
|
+
| EPagination | 分页 | v-model, total, pageSize, showSizeChanger, pageSizes, showTotal, jumper, layout, disabled |
|
|
119
119
|
| EBreadcrumb | 面包屑 | items(BreadcrumbItem[]), separator |
|
|
120
120
|
|
|
121
121
|
### 弹层与反馈
|
|
122
122
|
|
|
123
123
|
| 组件 | 用途 | 关键 Props |
|
|
124
124
|
|------|------|-----------|
|
|
125
|
-
| EDialog | 对话框 | v-model:open, title, description, showClose, maxWidth |
|
|
125
|
+
| EDialog | 对话框 | v-model:open, title, description, showClose, maxWidth, draggable, closeOnClickModal, closeOnPressEscape, fullscreen, destroyOnClose |
|
|
126
126
|
| EDrawer | 抽屉 | v-model:open, title, description, direction(top/right/bottom/left), showClose |
|
|
127
127
|
| ESheet | 侧边面板 | v-model:open, title, description, side(top/right/bottom/left), showClose |
|
|
128
128
|
| EAlertDialog | 确认对话框 | v-model:open, title, description, confirmText, cancelText |
|
|
@@ -136,9 +136,9 @@ frontend/eui/src/components/{component-name}/types.ts
|
|
|
136
136
|
|
|
137
137
|
| 组件 | 用途 | 关键 Props |
|
|
138
138
|
|------|------|-----------|
|
|
139
|
-
| ETabs | 标签页 | v-model, items(TabItem[]) |
|
|
140
|
-
| EMenu | 侧边菜单 | v-model, items(MenuItem[]), collapsed |
|
|
141
|
-
| EDropdown | 下拉菜单 | items(DropdownMenuItem[]), side, align, sideOffset |
|
|
139
|
+
| ETabs | 标签页 | v-model, items(TabItem[]), closable, addable, tabPosition(top/bottom/left/right) |
|
|
140
|
+
| EMenu | 侧边菜单 | v-model, items(MenuItem[]), collapsed, router, uniqueOpened, defaultOpeneds |
|
|
141
|
+
| EDropdown | 下拉菜单 | items(DropdownMenuItem[]), side, align, sideOffset, trigger(click/hover), splitButton, buttonText, buttonVariant |
|
|
142
142
|
| EAccordion | 手风琴 | v-model, items(AccordionItemOption[]), multiple, collapsible |
|
|
143
143
|
| ECollapsible | 折叠面板 | v-model(boolean), disabled |
|
|
144
144
|
| EStepper | 步骤条 | v-model, items(StepperItem[]), direction(horizontal/vertical) |
|
|
@@ -191,7 +191,7 @@ frontend/eui/src/components/{component-name}/types.ts
|
|
|
191
191
|
| Composable | 用途 | 返回值 |
|
|
192
192
|
|------------|------|--------|
|
|
193
193
|
| useMessage() | 全局消息提示 | { success, warning, error, info } — 每个接收 string 或 MessageOptions |
|
|
194
|
-
| useNotification() | 通知 | { success, warning, error, info } — 接收 NotificationOptions(title, message, position, duration) |
|
|
194
|
+
| useNotification() | 通知 | { success, warning, error, info } — 接收 NotificationOptions(title, message, position, duration, onClick, closable) |
|
|
195
195
|
| useMessageBox() | 对话确认 | { alert, confirm, prompt } — 返回 Promise<'confirm' \| 'cancel'> |
|
|
196
196
|
| useTheme() | 主题管理 | { isDark, theme, setTheme, toggleDark, colorTheme, setColorTheme } |
|
|
197
197
|
| useConfigProvider() | 读取全局配置 | { size, zIndex, locale } |
|
|
@@ -229,6 +229,8 @@ interface MenuItem {
|
|
|
229
229
|
key: string
|
|
230
230
|
label: string
|
|
231
231
|
icon?: string
|
|
232
|
+
/** Route path for router mode (falls back to key if not provided) */
|
|
233
|
+
path?: string
|
|
232
234
|
children?: MenuItem[]
|
|
233
235
|
disabled?: boolean
|
|
234
236
|
}
|
|
@@ -243,4 +245,13 @@ interface TableColumn<T = any> {
|
|
|
243
245
|
align?: 'left' | 'center' | 'right'
|
|
244
246
|
render?: (row: T, index: number) => any
|
|
245
247
|
}
|
|
248
|
+
|
|
249
|
+
type DatePickerType = 'date' | 'daterange' | 'month' | 'year'
|
|
250
|
+
|
|
251
|
+
interface DatePickerShortcut {
|
|
252
|
+
text: string
|
|
253
|
+
value: Date | Date[] | (() => Date | Date[])
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
type TabPosition = 'top' | 'bottom' | 'left' | 'right'
|
|
246
257
|
```
|