@es-plus/mcp-server 1.0.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/LICENSE +21 -0
- package/README.md +345 -0
- package/build/core/code-generator.d.ts +9 -0
- package/build/core/code-generator.d.ts.map +1 -0
- package/build/core/code-generator.js +87 -0
- package/build/core/code-generator.js.map +1 -0
- package/build/core/constants.d.ts +61 -0
- package/build/core/constants.d.ts.map +1 -0
- package/build/core/constants.js +51 -0
- package/build/core/constants.js.map +1 -0
- package/build/core/crud-engine.d.ts +12 -0
- package/build/core/crud-engine.d.ts.map +1 -0
- package/build/core/crud-engine.js +405 -0
- package/build/core/crud-engine.js.map +1 -0
- package/build/core/schema-validator.d.ts +9 -0
- package/build/core/schema-validator.d.ts.map +1 -0
- package/build/core/schema-validator.js +57 -0
- package/build/core/schema-validator.js.map +1 -0
- package/build/index.d.ts +3 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +18 -0
- package/build/index.js.map +1 -0
- package/build/prompts/crud-page.d.ts +3 -0
- package/build/prompts/crud-page.d.ts.map +1 -0
- package/build/prompts/crud-page.js +49 -0
- package/build/prompts/crud-page.js.map +1 -0
- package/build/prompts/form-config.d.ts +3 -0
- package/build/prompts/form-config.d.ts.map +1 -0
- package/build/prompts/form-config.js +42 -0
- package/build/prompts/form-config.js.map +1 -0
- package/build/prompts/index.d.ts +3 -0
- package/build/prompts/index.d.ts.map +1 -0
- package/build/prompts/index.js +7 -0
- package/build/prompts/index.js.map +1 -0
- package/build/resources/examples.d.ts +3 -0
- package/build/resources/examples.d.ts.map +1 -0
- package/build/resources/examples.js +36 -0
- package/build/resources/examples.js.map +1 -0
- package/build/resources/index.d.ts +3 -0
- package/build/resources/index.d.ts.map +1 -0
- package/build/resources/index.js +9 -0
- package/build/resources/index.js.map +1 -0
- package/build/resources/schemas.d.ts +3 -0
- package/build/resources/schemas.d.ts.map +1 -0
- package/build/resources/schemas.js +46 -0
- package/build/resources/schemas.js.map +1 -0
- package/build/resources/types.d.ts +3 -0
- package/build/resources/types.d.ts.map +1 -0
- package/build/resources/types.js +159 -0
- package/build/resources/types.js.map +1 -0
- package/build/tools/generate-crud-page.d.ts +3 -0
- package/build/tools/generate-crud-page.d.ts.map +1 -0
- package/build/tools/generate-crud-page.js +33 -0
- package/build/tools/generate-crud-page.js.map +1 -0
- package/build/tools/get-component-api.d.ts +3 -0
- package/build/tools/get-component-api.d.ts.map +1 -0
- package/build/tools/get-component-api.js +191 -0
- package/build/tools/get-component-api.js.map +1 -0
- package/build/tools/index.d.ts +3 -0
- package/build/tools/index.d.ts.map +1 -0
- package/build/tools/index.js +13 -0
- package/build/tools/index.js.map +1 -0
- package/build/tools/list-form-types.d.ts +3 -0
- package/build/tools/list-form-types.d.ts.map +1 -0
- package/build/tools/list-form-types.js +21 -0
- package/build/tools/list-form-types.js.map +1 -0
- package/build/tools/scaffold-page.d.ts +3 -0
- package/build/tools/scaffold-page.d.ts.map +1 -0
- package/build/tools/scaffold-page.js +38 -0
- package/build/tools/scaffold-page.js.map +1 -0
- package/build/tools/validate-config.d.ts +3 -0
- package/build/tools/validate-config.d.ts.map +1 -0
- package/build/tools/validate-config.js +60 -0
- package/build/tools/validate-config.js.map +1 -0
- package/package.json +57 -0
- package/schemas/README.md +75 -0
- package/schemas/api-params.schema.json +36 -0
- package/schemas/btn-config.schema.json +77 -0
- package/schemas/dialog-options.schema.json +149 -0
- package/schemas/form-item.schema.json +142 -0
- package/schemas/index.schema.json +71 -0
- package/schemas/table-column.schema.json +111 -0
- package/schemas/table-options.schema.json +141 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 liujiaao
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
# @es-plus/mcp-server
|
|
2
|
+
|
|
3
|
+
[es-plus-ui](https://www.npmjs.com/package/es-plus-ui) 官方 MCP Server —— 让 AI 编码工具自动生成 Vue 3 CRUD 页面。
|
|
4
|
+
|
|
5
|
+
支持 Claude Code、Cursor、Windsurf、Continue 等所有兼容 [MCP 协议](https://modelcontextprotocol.io/) 的 AI 编码工具。
|
|
6
|
+
|
|
7
|
+
## 30 秒快速配置
|
|
8
|
+
|
|
9
|
+
### Claude Code
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
claude mcp add es-plus -- npx -y @es-plus/mcp-server
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
或在项目根目录 `.mcp.json` 中添加:
|
|
16
|
+
|
|
17
|
+
```json
|
|
18
|
+
{
|
|
19
|
+
"mcpServers": {
|
|
20
|
+
"es-plus": {
|
|
21
|
+
"command": "npx",
|
|
22
|
+
"args": ["-y", "@es-plus/mcp-server"]
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Cursor
|
|
29
|
+
|
|
30
|
+
在 `.cursor/mcp.json` 中添加:
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"mcpServers": {
|
|
35
|
+
"es-plus": {
|
|
36
|
+
"command": "npx",
|
|
37
|
+
"args": ["-y", "@es-plus/mcp-server"]
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Windsurf
|
|
44
|
+
|
|
45
|
+
在 `~/.codeium/windsurf/mcp_config.json` 中添加:
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
{
|
|
49
|
+
"mcpServers": {
|
|
50
|
+
"es-plus": {
|
|
51
|
+
"command": "npx",
|
|
52
|
+
"args": ["-y", "@es-plus/mcp-server"]
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### VS Code (GitHub Copilot)
|
|
59
|
+
|
|
60
|
+
在 `.vscode/mcp.json` 中添加:
|
|
61
|
+
|
|
62
|
+
```json
|
|
63
|
+
{
|
|
64
|
+
"servers": {
|
|
65
|
+
"es-plus": {
|
|
66
|
+
"command": "npx",
|
|
67
|
+
"args": ["-y", "@es-plus/mcp-server"]
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
> **前提条件:** Node.js >= 18,项目已安装 `es-plus-ui` 和 `element-plus`。
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 使用方式
|
|
78
|
+
|
|
79
|
+
配置完成后,直接在 AI 编码工具中用自然语言描述需求即可:
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
帮我生成一个用户管理页面,查询条件有姓名、手机号、状态,
|
|
83
|
+
表格显示姓名、手机号、邮箱、状态、创建时间,支持新增编辑删除
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
AI 会自动调用 MCP Server 的 `generate_crud_page` 工具,返回一个完整可运行的 `.vue` 文件,包含:
|
|
87
|
+
|
|
88
|
+
- 查询表单(自动推断 Input / Select / DatePicker 等控件类型)
|
|
89
|
+
- 数据表格(含状态列渲染、操作按钮)
|
|
90
|
+
- 新增/编辑弹窗(含表单验证)
|
|
91
|
+
- 删除确认提示
|
|
92
|
+
- 分页与接口请求模板
|
|
93
|
+
|
|
94
|
+
**你只需替换 `httpRequest` 中的接口地址即可投入使用。**
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## 工具 (Tools)
|
|
99
|
+
|
|
100
|
+
MCP Server 提供 5 个工具,AI 编码工具会根据你的描述自动选择调用。
|
|
101
|
+
|
|
102
|
+
### generate_crud_page
|
|
103
|
+
|
|
104
|
+
从自然语言生成完整的 Vue 3 CRUD 页面(.vue SFC)。
|
|
105
|
+
|
|
106
|
+
| 参数 | 类型 | 说明 |
|
|
107
|
+
|------|------|------|
|
|
108
|
+
| `description` | string | 页面功能描述(中文或英文) |
|
|
109
|
+
|
|
110
|
+
**描述技巧:**
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
# ✅ 好的描述 — 分段说明查询、表格、操作
|
|
114
|
+
"用户管理页面,
|
|
115
|
+
查询条件有姓名、手机号、状态,
|
|
116
|
+
表格显示姓名、手机号、邮箱、状态、创建时间,
|
|
117
|
+
支持新增编辑删除"
|
|
118
|
+
|
|
119
|
+
# ✅ 精简描述 — 自动推断全部字段
|
|
120
|
+
"员工管理:姓名、部门、职位、手机号、状态、创建时间"
|
|
121
|
+
|
|
122
|
+
# ✅ 只读列表
|
|
123
|
+
"操作日志查询,查询关键词、级别、日期范围,表格显示时间、级别、操作人、内容,只查看不编辑"
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**关键词智能识别:**
|
|
127
|
+
|
|
128
|
+
| 字段关键词 | 自动映射为 |
|
|
129
|
+
|-----------|-----------|
|
|
130
|
+
| 状态、类型、分类、级别、来源 | Select 下拉选择 |
|
|
131
|
+
| 日期、创建时间、更新时间 | datePicker 日期选择器 |
|
|
132
|
+
| 时间、时刻 | timePicker 时间选择器 |
|
|
133
|
+
| 开关、启用、是否 | Switch 开关 |
|
|
134
|
+
| 评分、星级 | Rate 评分 |
|
|
135
|
+
| 头像、图片、文件、附件 | Upload 上传 |
|
|
136
|
+
| 备注、描述、内容、简介 | Input(textarea) 多行文本 |
|
|
137
|
+
| 性别、单选 | Radio 单选框 |
|
|
138
|
+
| 多选、标签、兴趣 | Checkbox 多选框 |
|
|
139
|
+
| 省市、城市、地区、层级 | Cascader 级联选择 |
|
|
140
|
+
| 进度、区间、范围 | Slider 滑块 |
|
|
141
|
+
| 穿梭、分配 | Transfer 穿梭框 |
|
|
142
|
+
| 其他 | Input 输入框 |
|
|
143
|
+
|
|
144
|
+
### validate_config
|
|
145
|
+
|
|
146
|
+
校验 JSON 配置是否符合 es-plus-ui 组件规范,返回错误详情和修复建议。
|
|
147
|
+
|
|
148
|
+
| 参数 | 类型 | 说明 |
|
|
149
|
+
|------|------|------|
|
|
150
|
+
| `config` | string | JSON 配置字符串 |
|
|
151
|
+
| `type` | string? | Schema 类型,不传则自动检测 |
|
|
152
|
+
|
|
153
|
+
支持的 Schema 类型:`form-item`、`table-column`、`table-options`、`dialog-options`
|
|
154
|
+
|
|
155
|
+
### list_form_types
|
|
156
|
+
|
|
157
|
+
列出 es-plus-ui 支持的全部 13 种表单控件类型及用法示例。无需参数。
|
|
158
|
+
|
|
159
|
+
### get_component_api
|
|
160
|
+
|
|
161
|
+
获取组件完整 API 文档,包含 TypeScript 接口定义、Props、方法、使用示例。
|
|
162
|
+
|
|
163
|
+
| 参数 | 类型 | 说明 |
|
|
164
|
+
|------|------|------|
|
|
165
|
+
| `component` | enum | `EsForm` / `EsTable` / `useDialog` |
|
|
166
|
+
|
|
167
|
+
### scaffold_page
|
|
168
|
+
|
|
169
|
+
生成最小化页面脚手架,适合需要手动填充配置的场景。
|
|
170
|
+
|
|
171
|
+
| 参数 | 类型 | 说明 |
|
|
172
|
+
|------|------|------|
|
|
173
|
+
| `name` | string | 页面名称(kebab-case) |
|
|
174
|
+
| `features` | string[]? | 功能列表,默认 `['query', 'table']` |
|
|
175
|
+
|
|
176
|
+
可选 features:`query`(查询表单)、`table`(数据表格)、`dialog`(弹窗)
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## 资源 (Resources)
|
|
181
|
+
|
|
182
|
+
AI 工具可通过 MCP 资源协议读取 es-plus-ui 的 Schema 定义和类型信息。
|
|
183
|
+
|
|
184
|
+
| 资源 URI | 内容 |
|
|
185
|
+
|----------|------|
|
|
186
|
+
| `esplus://schemas/form-item` | 表单项配置 JSON Schema |
|
|
187
|
+
| `esplus://schemas/table-column` | 表格列配置 JSON Schema |
|
|
188
|
+
| `esplus://schemas/table-options` | 表格选项 JSON Schema |
|
|
189
|
+
| `esplus://schemas/dialog-options` | 弹窗配置 JSON Schema |
|
|
190
|
+
| `esplus://schemas/btn-config` | 按钮配置 JSON Schema |
|
|
191
|
+
| `esplus://schemas/api-params` | 远程数据加载 JSON Schema |
|
|
192
|
+
| `esplus://types` | 完整 TypeScript 类型定义 |
|
|
193
|
+
| `esplus://examples` | 8 个预设 CRUD 示例(含生成代码) |
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## 提示模板 (Prompts)
|
|
198
|
+
|
|
199
|
+
| 模板名 | 参数 | 用途 |
|
|
200
|
+
|--------|------|------|
|
|
201
|
+
| `crud-page` | `description` | 生成完整 CRUD 页面的系统提示 |
|
|
202
|
+
| `form-config` | `description` | 仅生成表单配置 JSON 的系统提示 |
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## 内置预设示例
|
|
207
|
+
|
|
208
|
+
以下 8 个业务场景可直接使用或作为描述参考:
|
|
209
|
+
|
|
210
|
+
| 预设 | 查询字段 | 表格列 | 操作 |
|
|
211
|
+
|------|---------|--------|------|
|
|
212
|
+
| 用户管理 | 姓名、手机号、状态 | 姓名、手机号、邮箱、状态、创建时间 | 新增、编辑、删除 |
|
|
213
|
+
| 订单列表 | 订单号、客户名称、日期范围、状态 | 订单号、客户、金额、状态、创建时间 | 查看、删除 |
|
|
214
|
+
| 商品管理 | 商品名称、分类、状态 | 名称、分类、价格、库存、状态 | 新增、编辑、删除 |
|
|
215
|
+
| 日志查询 | 关键词、级别、日期范围 | 时间、级别、操作人、内容 | 只读 |
|
|
216
|
+
| 角色权限 | 角色名称、状态 | 角色名称、描述、状态、创建时间 | 新增、编辑、删除 |
|
|
217
|
+
| 员工花名册 | 姓名、部门、职位 | 姓名、性别、年龄、部门、职位、手机号、状态 | 新增、编辑 |
|
|
218
|
+
| 文章管理 | 标题、分类、状态 | 标题、分类、创建人、创建时间、状态 | 新增、编辑、删除 |
|
|
219
|
+
| 系统配置 | 名称、类型 | 名称、编号、类型、描述、状态 | 新增、编辑、删除、导出 |
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## 生成代码示例
|
|
224
|
+
|
|
225
|
+
输入描述:
|
|
226
|
+
|
|
227
|
+
```
|
|
228
|
+
用户管理页面,查询姓名、手机号、状态,表格显示姓名、手机号、邮箱、状态、创建时间,支持新增编辑删除
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
生成的代码结构:
|
|
232
|
+
|
|
233
|
+
```vue
|
|
234
|
+
<template>
|
|
235
|
+
<es-table
|
|
236
|
+
ref="tableRef"
|
|
237
|
+
:columns="columns"
|
|
238
|
+
:options="options"
|
|
239
|
+
v-model:data-source="tableData"
|
|
240
|
+
v-model:pagination="pagination"
|
|
241
|
+
>
|
|
242
|
+
<es-form :model="queryForm" :form-item-list="formItems" :config-btn="queryBtns" />
|
|
243
|
+
</es-table>
|
|
244
|
+
</template>
|
|
245
|
+
|
|
246
|
+
<script setup>
|
|
247
|
+
import { reactive, ref, h } from 'vue'
|
|
248
|
+
import { useDialog } from 'es-plus-ui'
|
|
249
|
+
import { ElTag, ElMessageBox, ElMessage } from 'element-plus'
|
|
250
|
+
|
|
251
|
+
// 查询表单配置
|
|
252
|
+
const formItems = [
|
|
253
|
+
{ prop: 'name', label: '姓名', formtype: 'Input', span: 6, attrs: { clearable: true } },
|
|
254
|
+
{ prop: 'phone', label: '手机号', formtype: 'Input', span: 6, attrs: { clearable: true } },
|
|
255
|
+
{ prop: 'status', label: '状态', formtype: 'Select', span: 6,
|
|
256
|
+
attrs: { clearable: true },
|
|
257
|
+
dataOptions: [{ label: '启用', value: 1 }, { label: '禁用', value: 0 }] }
|
|
258
|
+
]
|
|
259
|
+
|
|
260
|
+
// 表格列 — 状态列自动渲染 ElTag,操作列自动绑定事件
|
|
261
|
+
const columns = [
|
|
262
|
+
{ prop: 'name', label: '姓名' },
|
|
263
|
+
{ prop: 'phone', label: '手机号' },
|
|
264
|
+
{ prop: 'email', label: '邮箱' },
|
|
265
|
+
{ prop: 'status', label: '状态',
|
|
266
|
+
render: (_, { row }) => h(ElTag, { type: row.status === 1 ? 'success' : 'danger' },
|
|
267
|
+
() => row.status === 1 ? '启用' : '禁用') },
|
|
268
|
+
{ prop: 'createTime', label: '创建时间' },
|
|
269
|
+
{ prop: 'operate', label: '操作',
|
|
270
|
+
btns: [
|
|
271
|
+
{ name: '编辑', type: 'primary', clickEvent: (row) => openForm('编辑', row) },
|
|
272
|
+
{ name: '删除', type: 'danger', clickEvent: (row) => handleDelete(row) }
|
|
273
|
+
] }
|
|
274
|
+
]
|
|
275
|
+
|
|
276
|
+
// 删除 — 带确认提示
|
|
277
|
+
function handleDelete(row) {
|
|
278
|
+
ElMessageBox.confirm('确定删除该条数据吗?', '提示', { type: 'warning' })
|
|
279
|
+
.then(async () => {
|
|
280
|
+
// TODO: 调用删除接口
|
|
281
|
+
ElMessage.success('删除成功')
|
|
282
|
+
tableRef.value?.httpRequestInstance()
|
|
283
|
+
})
|
|
284
|
+
.catch(() => {})
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// 新增/编辑弹窗 — 含表单验证
|
|
288
|
+
function openForm(title, row = {}) {
|
|
289
|
+
const formData = reactive({ name: '', phone: '', email: '', status: '', createTime: '', ...row })
|
|
290
|
+
dialog({
|
|
291
|
+
title,
|
|
292
|
+
width: '500px',
|
|
293
|
+
render: (h, { registerRef }) => (
|
|
294
|
+
<EsForm ref={el => el && registerRef('form', el)} model={formData} formItemList={dialogFormItems} />
|
|
295
|
+
),
|
|
296
|
+
configBtn: [
|
|
297
|
+
{ name: '取消', click: (_, { close }) => close() },
|
|
298
|
+
{ name: '确定', type: 'primary', click: async (_, { close, getRefs }) => {
|
|
299
|
+
try {
|
|
300
|
+
await getRefs('form')?.validate()
|
|
301
|
+
// TODO: 调用保存接口
|
|
302
|
+
close()
|
|
303
|
+
tableRef.value?.httpRequestInstance()
|
|
304
|
+
} catch { /* 表单验证失败 */ }
|
|
305
|
+
}}
|
|
306
|
+
]
|
|
307
|
+
})
|
|
308
|
+
}
|
|
309
|
+
</script>
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
**只需替换 `httpRequest` 和删除接口即可投入使用。**
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
## 与 @es-plus/cli 的区别
|
|
317
|
+
|
|
318
|
+
| 特性 | @es-plus/mcp-server | @es-plus/cli |
|
|
319
|
+
|------|---------------------|--------------|
|
|
320
|
+
| 使用方式 | AI 编码工具自动调用 | 终端手动运行 |
|
|
321
|
+
| 适用场景 | AI 对话式开发 | 批量生成、CI/CD |
|
|
322
|
+
| 输出 | 返回代码给 AI 工具 | 直接写入 .vue 文件 |
|
|
323
|
+
|
|
324
|
+
**推荐组合:** 项目初始化用 CLI 批量生成,日常开发用 MCP Server 让 AI 辅助迭代。
|
|
325
|
+
|
|
326
|
+
---
|
|
327
|
+
|
|
328
|
+
## 本地开发
|
|
329
|
+
|
|
330
|
+
```bash
|
|
331
|
+
git clone https://github.com/es-plus-ui/es-plus.git
|
|
332
|
+
cd es-plus/packages/mcp-server
|
|
333
|
+
npm install
|
|
334
|
+
npm run build
|
|
335
|
+
npm start
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
## 环境要求
|
|
339
|
+
|
|
340
|
+
- Node.js >= 18
|
|
341
|
+
- npm >= 8
|
|
342
|
+
|
|
343
|
+
## License
|
|
344
|
+
|
|
345
|
+
[MIT](./LICENSE)
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type GeneratedConfig } from "./crud-engine.js";
|
|
2
|
+
export interface GenerateResult {
|
|
3
|
+
code: string;
|
|
4
|
+
config: GeneratedConfig;
|
|
5
|
+
summary: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function generateCrudPage(description: string): GenerateResult;
|
|
8
|
+
export declare function generateScaffold(name: string, features?: string[]): string;
|
|
9
|
+
//# sourceMappingURL=code-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-generator.d.ts","sourceRoot":"","sources":["../../src/core/code-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE1F,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAmBpE;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,EAAE,GAClB,MAAM,CA2ER"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { generateCrudConfig, generateCode } from "./crud-engine.js";
|
|
2
|
+
export function generateCrudPage(description) {
|
|
3
|
+
const config = generateCrudConfig(description);
|
|
4
|
+
const code = generateCode(config);
|
|
5
|
+
const summary = [
|
|
6
|
+
`Generated CRUD page with:`,
|
|
7
|
+
`- ${config.formItems.length} query form fields`,
|
|
8
|
+
`- ${config.columns.length} table columns`,
|
|
9
|
+
`- Actions: ${config.actions.join(", ")}`,
|
|
10
|
+
config.dialogFormItems?.length
|
|
11
|
+
? `- ${config.dialogFormItems.length} dialog form fields (with validation rules)`
|
|
12
|
+
: "",
|
|
13
|
+
config.hasStatusRender ? `- Status column with ElTag render` : "",
|
|
14
|
+
config.actions.includes("delete") ? `- Delete confirmation dialog` : "",
|
|
15
|
+
]
|
|
16
|
+
.filter(Boolean)
|
|
17
|
+
.join("\n");
|
|
18
|
+
return { code, config, summary };
|
|
19
|
+
}
|
|
20
|
+
export function generateScaffold(name, features) {
|
|
21
|
+
const componentName = name.charAt(0).toUpperCase() + name.slice(1).replace(/-(\w)/g, (_, c) => c.toUpperCase());
|
|
22
|
+
const hasQuery = !features || features.includes("query");
|
|
23
|
+
const hasTable = !features || features.includes("table");
|
|
24
|
+
const hasDialog = features?.includes("dialog");
|
|
25
|
+
const lines = [];
|
|
26
|
+
lines.push(`<template>`);
|
|
27
|
+
lines.push(` <div class="${name}-page">`);
|
|
28
|
+
if (hasTable) {
|
|
29
|
+
lines.push(` <es-table`);
|
|
30
|
+
lines.push(` ref="tableRef"`);
|
|
31
|
+
lines.push(` :columns="columns"`);
|
|
32
|
+
lines.push(` :options="options"`);
|
|
33
|
+
lines.push(` v-model:data-source="tableData"`);
|
|
34
|
+
lines.push(` v-model:pagination="pagination"`);
|
|
35
|
+
lines.push(` >`);
|
|
36
|
+
if (hasQuery) {
|
|
37
|
+
lines.push(` <es-form :model="queryForm" :form-item-list="formItems" :config-btn="queryBtns" />`);
|
|
38
|
+
}
|
|
39
|
+
lines.push(` </es-table>`);
|
|
40
|
+
}
|
|
41
|
+
else if (hasQuery) {
|
|
42
|
+
lines.push(` <es-form :model="queryForm" :form-item-list="formItems" :config-btn="queryBtns" />`);
|
|
43
|
+
}
|
|
44
|
+
lines.push(` </div>`);
|
|
45
|
+
lines.push(`</template>`);
|
|
46
|
+
lines.push(``);
|
|
47
|
+
lines.push(`<script setup>`);
|
|
48
|
+
lines.push(`import { reactive, ref } from 'vue'`);
|
|
49
|
+
if (hasDialog) {
|
|
50
|
+
lines.push(`import { useDialog } from 'es-plus-ui'`);
|
|
51
|
+
}
|
|
52
|
+
lines.push(``);
|
|
53
|
+
if (hasQuery) {
|
|
54
|
+
lines.push(`const queryForm = reactive({})`);
|
|
55
|
+
lines.push(`const formItems = []`);
|
|
56
|
+
lines.push(`const queryBtns = [`);
|
|
57
|
+
lines.push(` { name: '查询', type: 'primary', key: 'query', triggerEvent: true },`);
|
|
58
|
+
lines.push(` { name: '重置', key: 'rest', triggerEvent: true },`);
|
|
59
|
+
lines.push(`]`);
|
|
60
|
+
lines.push(``);
|
|
61
|
+
}
|
|
62
|
+
if (hasTable) {
|
|
63
|
+
lines.push(`const tableRef = ref(null)`);
|
|
64
|
+
lines.push(`const tableData = ref([])`);
|
|
65
|
+
lines.push(`const pagination = ref({ current: 1, pageSize: 10, total: 0 })`);
|
|
66
|
+
lines.push(`const columns = []`);
|
|
67
|
+
lines.push(`const options = {`);
|
|
68
|
+
lines.push(` border: true,`);
|
|
69
|
+
lines.push(` stripe: true,`);
|
|
70
|
+
lines.push(` highlightCurrentRow: true,`);
|
|
71
|
+
lines.push(` headerCellStyle: { background: '#f5f7fa' },`);
|
|
72
|
+
lines.push(` httpRequest: async (params) => {`);
|
|
73
|
+
lines.push(` // TODO: 替换为实际接口调用`);
|
|
74
|
+
lines.push(` },`);
|
|
75
|
+
lines.push(` configTableOut: { total: 'total', tableData: 'data', pageSize: 'pageSize', current: 'pageIndex' },`);
|
|
76
|
+
lines.push(` rowkey: 'id'`);
|
|
77
|
+
lines.push(`}`);
|
|
78
|
+
lines.push(``);
|
|
79
|
+
}
|
|
80
|
+
if (hasDialog) {
|
|
81
|
+
lines.push(`const dialog = useDialog()`);
|
|
82
|
+
lines.push(``);
|
|
83
|
+
}
|
|
84
|
+
lines.push(`</script>`);
|
|
85
|
+
return lines.join("\n");
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=code-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-generator.js","sourceRoot":"","sources":["../../src/core/code-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export declare const FORM_TYPES: readonly [{
|
|
2
|
+
readonly type: "Input";
|
|
3
|
+
readonly description: "输入框 — 文本/数字/密码输入";
|
|
4
|
+
readonly example: "姓名、手机号、邮箱";
|
|
5
|
+
}, {
|
|
6
|
+
readonly type: "Select";
|
|
7
|
+
readonly description: "下拉选择器 — 单选/多选";
|
|
8
|
+
readonly example: "状态、类型、分类";
|
|
9
|
+
}, {
|
|
10
|
+
readonly type: "datePicker";
|
|
11
|
+
readonly description: "日期选择器 — 日期/日期范围";
|
|
12
|
+
readonly example: "创建时间、日期范围";
|
|
13
|
+
}, {
|
|
14
|
+
readonly type: "timePicker";
|
|
15
|
+
readonly description: "时间选择器 — 时间/时间范围";
|
|
16
|
+
readonly example: "开始时间、结束时间";
|
|
17
|
+
}, {
|
|
18
|
+
readonly type: "Slider";
|
|
19
|
+
readonly description: "滑块 — 数值区间选择";
|
|
20
|
+
readonly example: "价格区间、进度";
|
|
21
|
+
}, {
|
|
22
|
+
readonly type: "ColorPicker";
|
|
23
|
+
readonly description: "颜色选择器";
|
|
24
|
+
readonly example: "主题色、标签颜色";
|
|
25
|
+
}, {
|
|
26
|
+
readonly type: "Transfer";
|
|
27
|
+
readonly description: "穿梭框 — 左右列表选择";
|
|
28
|
+
readonly example: "权限分配、人员分配";
|
|
29
|
+
}, {
|
|
30
|
+
readonly type: "Cascader";
|
|
31
|
+
readonly description: "级联选择器 — 多级联动";
|
|
32
|
+
readonly example: "省市区、部门层级";
|
|
33
|
+
}, {
|
|
34
|
+
readonly type: "Radio";
|
|
35
|
+
readonly description: "单选框组";
|
|
36
|
+
readonly example: "性别、是否启用";
|
|
37
|
+
}, {
|
|
38
|
+
readonly type: "Checkbox";
|
|
39
|
+
readonly description: "多选框组";
|
|
40
|
+
readonly example: "兴趣爱好、功能模块";
|
|
41
|
+
}, {
|
|
42
|
+
readonly type: "Switch";
|
|
43
|
+
readonly description: "开关 — 布尔切换";
|
|
44
|
+
readonly example: "启用/禁用、显示/隐藏";
|
|
45
|
+
}, {
|
|
46
|
+
readonly type: "Rate";
|
|
47
|
+
readonly description: "评分 — 星级评分";
|
|
48
|
+
readonly example: "满意度、评分";
|
|
49
|
+
}, {
|
|
50
|
+
readonly type: "Upload";
|
|
51
|
+
readonly description: "上传 — 文件/图片上传";
|
|
52
|
+
readonly example: "头像、附件、证件照";
|
|
53
|
+
}];
|
|
54
|
+
export type FormType = typeof FORM_TYPES[number]['type'];
|
|
55
|
+
export declare const COMPONENT_LIST: readonly ["EsForm", "EsTable", "useDialog"];
|
|
56
|
+
export type ComponentName = typeof COMPONENT_LIST[number];
|
|
57
|
+
export declare const PRESET_EXAMPLES: {
|
|
58
|
+
label: string;
|
|
59
|
+
prompt: string;
|
|
60
|
+
}[];
|
|
61
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAcb,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,eAAO,MAAM,cAAc,6CAA8C,CAAC;AAC1E,MAAM,MAAM,aAAa,GAAG,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;AAE1D,eAAO,MAAM,eAAe;;;GAiC3B,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export const FORM_TYPES = [
|
|
2
|
+
{ type: 'Input', description: '输入框 — 文本/数字/密码输入', example: '姓名、手机号、邮箱' },
|
|
3
|
+
{ type: 'Select', description: '下拉选择器 — 单选/多选', example: '状态、类型、分类' },
|
|
4
|
+
{ type: 'datePicker', description: '日期选择器 — 日期/日期范围', example: '创建时间、日期范围' },
|
|
5
|
+
{ type: 'timePicker', description: '时间选择器 — 时间/时间范围', example: '开始时间、结束时间' },
|
|
6
|
+
{ type: 'Slider', description: '滑块 — 数值区间选择', example: '价格区间、进度' },
|
|
7
|
+
{ type: 'ColorPicker', description: '颜色选择器', example: '主题色、标签颜色' },
|
|
8
|
+
{ type: 'Transfer', description: '穿梭框 — 左右列表选择', example: '权限分配、人员分配' },
|
|
9
|
+
{ type: 'Cascader', description: '级联选择器 — 多级联动', example: '省市区、部门层级' },
|
|
10
|
+
{ type: 'Radio', description: '单选框组', example: '性别、是否启用' },
|
|
11
|
+
{ type: 'Checkbox', description: '多选框组', example: '兴趣爱好、功能模块' },
|
|
12
|
+
{ type: 'Switch', description: '开关 — 布尔切换', example: '启用/禁用、显示/隐藏' },
|
|
13
|
+
{ type: 'Rate', description: '评分 — 星级评分', example: '满意度、评分' },
|
|
14
|
+
{ type: 'Upload', description: '上传 — 文件/图片上传', example: '头像、附件、证件照' },
|
|
15
|
+
];
|
|
16
|
+
export const COMPONENT_LIST = ['EsForm', 'EsTable', 'useDialog'];
|
|
17
|
+
export const PRESET_EXAMPLES = [
|
|
18
|
+
{
|
|
19
|
+
label: '用户管理',
|
|
20
|
+
prompt: '用户管理页面,查询条件有姓名、手机号、状态,表格显示姓名、手机号、邮箱、状态、创建时间,支持新增编辑删除'
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
label: '订单列表',
|
|
24
|
+
prompt: '订单列表,查询订单号、客户名称、日期范围、状态,表格显示订单号、客户、金额、状态、创建时间,支持查看详情和删除'
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
label: '商品管理',
|
|
28
|
+
prompt: '商品管理,查询商品名称、分类、状态,表格显示名称、分类、价格、库存、状态,支持新增编辑删除'
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
label: '日志查询',
|
|
32
|
+
prompt: '操作日志查询,查询关键词、级别、日期范围,表格显示时间、级别、操作人、内容,只查看不编辑'
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
label: '角色权限',
|
|
36
|
+
prompt: '角色管理页面,查询角色名称、状态,表格显示角色名称、描述、状态、创建时间,支持新增编辑删除'
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
label: '员工花名册',
|
|
40
|
+
prompt: '员工管理,查询姓名、部门、职位,表格显示姓名、性别、年龄、部门、职位、手机号、状态,支持新增编辑'
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
label: '文章管理',
|
|
44
|
+
prompt: '文章管理,查询标题、分类、状态,表格显示标题、分类、创建人、创建时间、状态,支持新增编辑删除'
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
label: '系统配置',
|
|
48
|
+
prompt: '系统配置管理,查询名称、类型,表格显示名称、编号、类型、描述、状态,支持新增编辑删除导出'
|
|
49
|
+
},
|
|
50
|
+
];
|
|
51
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,OAAO,EAAE,WAAW,EAAE;IACxE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE;IACrE,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,OAAO,EAAE,WAAW,EAAE;IAC5E,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,OAAO,EAAE,WAAW,EAAE;IAC5E,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE;IAClE,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE;IAClE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE;IACvE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,UAAU,EAAE;IACtE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;IAC1D,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE;IAC/D,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE;IACpE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE;IAC7D,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE;CAC7D,CAAC;AAIX,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAU,CAAC;AAG1E,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B;QACE,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,sDAAsD;KAC/D;IACD;QACE,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,yDAAyD;KAClE;IACD;QACE,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,+CAA+C;KACxD;IACD;QACE,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,8CAA8C;KACvD;IACD;QACE,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,+CAA+C;KACxD;IACD;QACE,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,kDAAkD;KAC3D;IACD;QACE,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,gDAAgD;KACzD;IACD;QACE,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,8CAA8C;KACvD;CACF,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface GeneratedConfig {
|
|
2
|
+
formItems: any[];
|
|
3
|
+
columns: any[];
|
|
4
|
+
queryBtns: any[];
|
|
5
|
+
tableOptions: any;
|
|
6
|
+
actions: string[];
|
|
7
|
+
dialogFormItems?: any[];
|
|
8
|
+
hasStatusRender?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function generateCrudConfig(input: string): GeneratedConfig;
|
|
11
|
+
export declare function generateCode(config: GeneratedConfig): string;
|
|
12
|
+
//# sourceMappingURL=crud-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crud-engine.d.ts","sourceRoot":"","sources":["../../src/core/crud-engine.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,GAAG,EAAE,CAAA;IAChB,OAAO,EAAE,GAAG,EAAE,CAAA;IACd,SAAS,EAAE,GAAG,EAAE,CAAA;IAChB,YAAY,EAAE,GAAG,CAAA;IACjB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,eAAe,CAAC,EAAE,GAAG,EAAE,CAAA;IACvB,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AA+KD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAgGjE;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAuK5D"}
|