游乐游手机版
首页/前端开发/文章详情

用MCP与一句话生成完整CRUD页面

时间:2026-06-14 06:53
我用 MCP + 一句话生成了完整的 CRUD 页面故事从一个 MCP 工具开始 先说结果。在 Claude 里输入了一句话: 帮我做一个员工管理页面,字段有工号、姓名、手机号、部门(下拉选技术部 产品部 设计部)、 状态(在职 离职 试用期,用Tag颜色区分),API地址 api employe

我用 MCP + 一句话生成了完整的 CRUD 页面

故事从一个 MCP 工具开始

先说结果。在 Claude 里输入了一句话:

用 MCP + 一句话生成了完整的 CRUD 页面

帮我做一个员工管理页面,字段有工号、姓名、手机号、部门(下拉选技术部/产品部/设计部)、
状态(在职/离职/试用期,用Tag颜色区分),API地址 /api/employees,
支持新增编辑删除,工号和手机号必填

3 秒后,Claude 返回了一个完整的 .vue 文件。

不是什么半成品,也不是什么带着二十个 // TODO 的骨架代码。就是一个能直接跑的页面——查询表单、数据表格、分页、新增弹窗、编辑弹窗、删除确认、表单校验、状态 Tag 渲染,一个不少。

把它粘贴到项目里,改了一下 import 路径,按一下 F5 刷新浏览器,页面直接跑起来了

6 个页面,半小时搞定。周五准时下班。


等等,这不是普通的 AI 生成代码

你可能会说:"Claude 本来就能生成 Vue 代码啊,这有什么特别的?"

特别的地方在于三点:

  1. 它不是在猜你想要什么 — 它精确知道目标组件库的每个 API
  2. 它生成的代码零 TODO — 不需要人工填充任何部分
  3. 它理解你的后端 — API 地址、请求格式、响应映射一步到位

这个秘密就是 MCP(Model Context Protocol)


MCP 是什么?3 句话解释

MCP 是 Anthropic 提出的协议,让 AI 模型能够调用外部工具

可以把它理解为:给 AI 装了一个插件系统

普通对话:你问 AI → AI 凭"记忆"回答(可能过时、可能幻觉)
MCP 对话:你问 AI → AI 查阅实时文档 + 调用专业工具 → 返回精确结果

做的事情很简单:给 AI 配了一个专门生成 CRUD 页面的 MCP 工具


实操:从安装到生成第一个页面

第 1 步:安装 MCP Server(30 秒)

claude_desktop_config.json(或者 Cursor 的 MCP 配置)里加一段:

{
  "mcpServers": {
    "es-plus": {
      "command": "npx",
      "args": ["-y", "@es-plus/mcp-server@1.1.2"]
    }
  }
}

重启 Claude Desktop 或 Cursor。完事。

第 2 步:用一句话生成页面

打开对话,输入:

用 generate_crud_from_config 工具,帮我生成一个员工管理页面:
- 字段:工号(employeeNo)、姓名(name)、手机号(phone)、部门(deptId,下拉)、状态(status,下拉)
- API: /api/employees
- 操作:新增、编辑、删除
- 工号和手机号必填
- 状态用 Tag 颜色区分

第 3 步:拿到完整代码

AI 会调用 MCP 工具,返回类似这样的代码:


你数一下这段代码的 TODO 注释有几个?

零个。


这背后发生了什么?

当 AI 调用 generate_crud_from_config 工具时,MCP Server 做了这些事:

┌─────────────────────────────────────────────────────┐
│  你的一句话                                           │
│  "员工管理,字段有工号/姓名/手机号/部门/状态..."        │
└───────────────────┬─────────────────────────────────┘
                    │
                    ▼
┌─────────────────────────────────────────────────────┐
│  AI 理解意图 → 构造 StructuredCrudConfig JSON
│  (字段定义、表单类型、校验规则、API地址)              │
└───────────────────┬─────────────────────────────────┘
                    │
                    ▼
┌─────────────────────────────────────────────────────┐
│  MCP Tool: generate_crud_from_config                 │
│  ├── Zod Schema 校验(字段合法性)                    │
│  ├── 代码生成引擎(es-plus 最佳实践内置)             │
│  └── 零 TODO 模板输出                                │
└───────────────────┬─────────────────────────────────┘
                    │
                    ▼
┌─────────────────────────────────────────────────────┐
│  完整 .vue 文件                                       │
│  ├── TypeScript 类型定义                              │
│  ├── 查询表单 + 自动联动                              │
│  ├── 数据表格 + 分页                                  │
│  ├── 新增/编辑弹窗 + 表单校验                         │
│  └── 删除确认                                        │
└─────────────────────────────────────────────────────┘

关键点在于:AI 不是在"猜"怎么写 es-plus 的代码 — 它通过 MCP 协议实时获取了:

  • esplus://types — 完整 TypeScript 类型定义
  • esplus://conventions — 编码规范和最佳实践(包括那些坑,比如重置按钮 key 是 "rest" 不是 "reset"
  • esplus://schemas/table-options — JSON Schema 校验

这意味着 AI 生成的代码 100% 符合组件库规范,不会出现那种"看着对但跑不起来"的尴尬情况。


跟裸写 AI 提示词有什么区别?

做了个对比实验:

方式 A:直接问 Claude(无 MCP)

帮我用 es-plus-ui 写一个员工管理 CRUD 页面

结果:

  • 重置按钮 key 写成了 "reset"(正确是 "rest"
  • configTableOut 字段映射缺失
  • 弹窗没用 useDialog,用了 v-model 控制 el-dialog
  • 查询按钮没加 triggerEvent: true,点了没反应
  • TypeScript 类型缺失

能跑吗? 显然不能。需要人工修 5 处错误。

方式 B:用 MCP Server

同样一句话,结果:

  • 所有按钮 key 正确
  • configTableOut 自动配好
  • 使用 useDialog 编程式弹窗
  • triggerEvent: true 自动加上
  • 完整 TypeScript 类型

能跑吗? 直接跑。零修改。

区别的本质:MCP 让 AI 从"凭记忆写代码"变成了"查着文档写代码"。

用 GPT 写 Vue 代码时,它是在用 2 年前训练数据里的"印象"。而 MCP 让 AI 每次都能拿到最新的、精确的 API 文档。


再来一个真实场景:万行数据虚拟表格

产品说:"这个页面数据量大,可能有几万条,不能卡。"

加了一句话:

这个页面数据量大,用虚拟滚动模式,固定行高 48px,表格高度 500px

AI 自动把 options 改成了:

const options = {
  border: true,
  virtual: true,        // 就多了这几行
  rowHeight: 48,
  tabHeight: 500,
  heightType: 'height' as const,
  apiParams: { url: '/api/employees' },
  rowkey: 'id',
}

底层自动切换到 el-table-v2 虚拟滚动引擎。10 万行数据,丝滑如飞

AI 为什么知道怎么加这几个字段?因为 MCP Server 的 esplus://conventions 资源里明确写了:

## Virtual Scrolling (10k+ rows)
tableOptions: { virtual: true, rowHeight: 48, tabHeight: 500, heightType: 'height' }

AI 不需要"猜",它直接读到了答案


批量生成:6 个页面,30 分钟

回到开头的故事。产品扔过来 6 张原型图:

页面字段数操作
员工管理8增删改查
部门管理5增删改
考勤记录10查看、导出
请假审批7查看、审批
薪资管理12查看、导出
系统日志6查看

每个页面只需要:

  1. 看一眼原型,用一句话描述字段和操作
  2. AI 调用 MCP 工具生成代码
  3. 粘贴到项目里
  4. 改一下真实的 API 地址

平均每个页面 5 分钟。6 个页面,30 分钟收工。

以前这 6 个页面至少要写一天。


你也可以 5 分钟复现

前置条件

  • Claude Desktop / Cursor / 任何支持 MCP 的 AI 工具
  • Node.js 18+

步骤

1. 配置 MCP Server

{
  "mcpServers": {
    "es-plus": {
      "command": "npx",
      "args": ["-y", "@es-plus/mcp-server"]
    }
  }
}

2. 在项目里安装 es-plus-ui

npm install es-plus-ui element-plus

3. 开始对话

随便描述一个业务页面。可以试试:

帮我生成一个商品管理页面:
- 字段:商品名称、分类(电子/服装/食品)、价格、库存、状态(上架/下架)
- API: /api/products
- 支持新增编辑删除
- 价格必填,库存显示为数字
- 状态用 Tag 颜色区分

4. 把代码粘贴到项目里,跑起来

就这么简单。


MCP Server 还能做什么?

除了生成 CRUD 页面,@es-plus/mcp-server 还暴露了这些能力:

工具用途场景
generate_crud_page自然语言 → CRUD 页面快速原型
generate_crud_from_config结构化配置 → 生产代码精确控制
validate_config校验配置 JSON防错
get_component_api获取组件 API 文档AI 理解组件用法
list_form_types列出所有表单类型AI 选择正确的 formtype
scaffold_page最小脚手架空白起步

还有 5 个 Resource(AI 可以主动查阅的文档):

  • esplus://types — TypeScript 类型定义
  • esplus://conventions — 最佳实践和避坑指南
  • esplus://schemas/{name} — JSON Schema 校验
  • esplus://examples — 内置示例
  • esplus://crud-page-schema — EsCrudPage 模式文档

AI 不是在盲猜,它是在"开卷考试"。


为什么不用 ChatGPT / Copilot 也能做?

它们也能生成 CRUD 代码,但区别在于:

维度普通 AIAI + MCP
知识来源训练数据(可能过时)实时获取最新文档
准确率~60%(需要人工修)~95%(几乎直接跑)
规范性不确定(每次可能不同)确定(通过 Schema 校验)
学习成本AI 需要大量 prompt 引导一句话就够
可复现性同样 prompt 可能不同结果相同配置 = 相同输出

MCP 的本质是:把"AI 的经验"替换为"确定性的工具"。

经验会出错,工具不会。


技术架构(给想深入的同学)

@es-plus/mcp-server          ← MCP 协议层(stdio transport)
       │
       ├── Tools              ← AI 可调用的函数
       ├── Resources          ← AI 可查阅的文档
       └── Prompts            ← 预置的 system prompt
               │
               ▼
@es-plus/shared              ← 核心引擎(无 IO,纯逻辑)
       │
       ├── crud-engine.ts     ← 自然语言解析
       ├── structured-generator.ts  ← 结构化代码生成
       ├── schema-validator.ts      ← AJV 校验
       └── schemas/           ← JSON Schema 定义
               │
               ▼
es-plus-ui                   ← Vue 3 组件库(运行时)
       │
       ├── EsTable            ← 配置化表格(含虚拟滚动)
       ├── EsForm             ← 配置化表单
       ├── useDialog          ← 编程式弹窗
       └── EsCrudPage         ← 一键 CRUD 组件

整个链条是:

人类意图 → AI 理解 → MCP 工具验证 → 代码生成引擎 → 零 TODO 输出


写在最后

一年前开始做 es-plus-ui 的时候,目标是"让中后台开发少写重复代码"。

当 MCP 协议出现后,发现了一个更大的可能性:让 AI 直接接管 CRUD 页面的生产

不是"AI 辅助写代码"——是"AI 写完代码,人类只需审查"。

这不是未来,这是现在。现在就可以:

npx @es-plus/mcp-server

然后用一句话,生成你的下一个 CRUD 页面。


链接

  • npm: npm install es-plus-ui / npx @es-plus/mcp-server
  • GitHub: github.com/liujiaao/es…
  • 在线文档: liujiaao.github.io/es-plus
  • MCP Server: @es-plus/mcp-server
  • CLI 工具: npx @es-plus/cli create my-page
来源:https://juejin.cn/post/7644085410188918794
上一篇useList通用列表管理Hook实现与使用 下一篇vxe-table数据分组的三种展示方式详解
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
checked表单属性与CSS变量实现换肤原理
前端开发 · 2026-07-02

checked表单属性与CSS变量实现换肤原理

先聊一个有意思的现象:不需要编写任何 JavaScript,仅靠一个 :checked 伪类,就能驱动整个主题切换系统。听起来很神奇,但原理其实并不复杂——核心在于,:checked 是浏览器原生状态的实时镜像,而不是 JS 模拟出来的开关。 用户点击 ,或者用键盘空格键选中它,状态更新的那一刻,C

HTML meta标签页面定时跳转实现
前端开发 · 2026-07-02

HTML meta标签页面定时跳转实现

说到前端开发中最简洁的页面跳转方式,meta http-equiv= "refresh " 绝对算得上一个经典方案。不过别看它结构简单,格式上稍有疏忽,页面就可能原地卡死,或者直接跳到一个错误地址。下面把几个最容易踩坑的细节彻底讲清楚,帮你避开这些常见陷阱。 使用 http-equiv= "refresh

Cypress跨测试用例状态传递的不推荐但可选方案
前端开发 · 2026-07-02

Cypress跨测试用例状态传递的不推荐但可选方案

Cypress 默认的设计哲学很干脆:每个测试用例都必须是独立小王国,谁也不靠谁。这意味着 it() 执行前,浏览器上下文会被“一键还原”——页面状态、LocalStorage、Cookies 统统清空,强制维护测试隔离。这一规则让很多新手头疼:明明前一个测试已经创建了员工,后一个测试怎么就没法直接

全面深度解析HTML主体main标签唯一性原则与使用规范
前端开发 · 2026-07-02

全面深度解析HTML主体main标签唯一性原则与使用规范

在进行前端无障碍审计时,不少开发者会遇到一个奇怪的场景:浏览器不报错,但Lighthouse却直接标红“duplicate-main”。这其实是语义层与渲染层之间的根本差异。 为什么浏览器不报错但 Lighthouse 直接标红 duplicate-main 关键原因就在于:`main` 是语义锚点

HTML main标签在文档结构中的唯一性详解
前端开发 · 2026-07-02

HTML main标签在文档结构中的唯一性详解

先做一个快速检测:打开你最近开发的一个页面,按下 Ctrl+F 搜索 。如果搜索结果里出现2个以上,那这篇文章建议你认真读完。 本期要聊的主题,是HTML标签中一个看似简单、实际极易踩坑的核心知识点:main标签的唯一性。很多开发者知道这个标签的存在,但真正写到项目里,尤其是用了React、Vue这