目录
[一、TRAE 三大智能体简介](#一、TRAE 三大智能体简介)
[① @Chat 智能体:"结对编程"伙伴](#① @Chat 智能体:“结对编程”伙伴)
[② @Builder 智能体:你的"原型加速器"](#② @Builder 智能体:你的“原型加速器”)
[③ @Builder with MCP:你的"全栈交付引擎"](#③ @Builder with MCP:你的“全栈交付引擎”)
[(3)实战场景流程示例:构建一个 "用户管理中心"](#(3)实战场景流程示例:构建一个 “用户管理中心”)
[二、@Builder with MCP 智能体(全栈应用)](#二、@Builder with MCP 智能体(全栈应用))
[① 外部系统连接与操作](#① 外部系统连接与操作)
[② 全栈应用架构设计](#② 全栈应用架构设计)
[③ 真实数据生命周期管理](#③ 真实数据生命周期管理)
[④ 生产就绪配置与部署](#④ 生产就绪配置与部署)
[(2)高效使用 @Builder with MCP 的黄金法则](#(2)高效使用 @Builder with MCP 的黄金法则)
[① 法则一:始于终------蓝图描绘法则](#① 法则一:始于终——蓝图描绘法则)
[② 法则二:契约先行------接口驱动法则](#② 法则二:契约先行——接口驱动法则)
[③ 法则三:分层构建------垂直切片法则](#③ 法则三:分层构建——垂直切片法则)
[④ 法则四:环境隔离------配置分离法则](#④ 法则四:环境隔离——配置分离法则)
[⑤ 法则五:善用其"手"------MCP 工具调用法则](#⑤ 法则五:善用其“手”——MCP 工具调用法则)
[(3)添加 MCP Servers](#(3)添加 MCP Servers)
[(4)实战使用流程(以 Vue 项目为例)](#(4)实战使用流程(以 Vue 项目为例))
[① 第一阶段:项目架构升级 - 从前端到全栈](#① 第一阶段:项目架构升级 - 从前端到全栈)
[② 第二阶段:API 集成与前端改造](#② 第二阶段:API 集成与前端改造)
[③ 第三阶段:高级数据库功能实现](#③ 第三阶段:高级数据库功能实现)
[④ 第四阶段:数据库优化与监控](#④ 第四阶段:数据库优化与监控)
[⑤ 第五阶段:数据迁移与生产部署](#⑤ 第五阶段:数据迁移与生产部署)
[三、@Builder 智能体("从 0 到 1" 的创造)](#三、@Builder 智能体(“从 0 到 1” 的创造))
[(1)核心能力:@Builder 与 @Chat 的本质区别](#(1)核心能力:@Builder 与 @Chat 的本质区别)
[(2)高效使用 @Builder 智能体的黄金法则](#(2)高效使用 @Builder 智能体的黄金法则)
[(3)实战使用流程(以 Vue 项目为例)](#(3)实战使用流程(以 Vue 项目为例))
[① 第一阶段:项目初始化与骨架搭建](#① 第一阶段:项目初始化与骨架搭建)
[② 第二阶段:页面内容生成与数据模拟](#② 第二阶段:页面内容生成与数据模拟)
[③ 第三阶段:预览、微调与组合使用智能体](#③ 第三阶段:预览、微调与组合使用智能体)
[四、@Chat 智能体("从 1 到 N" 的优化)](#四、@Chat 智能体(“从 1 到 N” 的优化))
[(2)高效使用 @Chat 智能体的黄金法则](#(2)高效使用 @Chat 智能体的黄金法则)
[(3)实战使用流程(以 Vue 项目为例)](#(3)实战使用流程(以 Vue 项目为例))
[① 第一阶段:优化任务列表页 - 增强交互功能](#① 第一阶段:优化任务列表页 - 增强交互功能)
[② 第二阶段:增强仪表盘 - 添加数据可视化](#② 第二阶段:增强仪表盘 - 添加数据可视化)
[③ 第三阶段:优化用户体验 - 添加高级功能](#③ 第三阶段:优化用户体验 - 添加高级功能)
一、TRAE 三大智能体简介
TRAE 三大智能体:
@Chat 智能体 :就像你团队里一位全能的技术专家。你给他具体的指令,他帮你解决具体的问题。
@Builder 智能体 :就像一位项目总监或产品经理。你告诉他一个想法或目标,他会制定计划、分配资源,交付一个完整的项目原型。
@Builder with MCP :就像一位拥有超级权限的CTO。他不仅能做项目总监的工作,还能直接调用公司的各种基础设施(数据库、云服务、内部工具),交付一个真正可用的生产系统。
如何选择:
要修改或理解现有代码? → @Chat 智能体
要创建新的页面或项目,但不需要/还没准备好连接真实数据库? → @Builder 智能体
要创建连接了真实数据库、API的全栈应用,或集成外部服务? → @Builder with MCP 智能体
最佳实践是组合使用:用 @Builder with MCP 搭建坚实的全栈基础,用 @Builder 快速探索新功能原型,用 @Chat 进行日常的代码维护和优化。三者协同,将能最大化地提升你的开发效率。
(1)三大智能体核心区别
| 特性维度 | @Chat 智能体 | @Builder 智能体 | @Builder with MCP 智能体 |
|---|---|---|---|
| 核心角色 | 代码级助手 | 项目级构建者 | 系统级架构师 |
| 工作粒度 | 文件/代码块 (函数、组件、样式) | 功能/页面/项目 (完整功能模块、项目骨架) | 全栈应用/数据流 (前端+后端+数据库+服务) |
| 交互模式 | 对话驱动 (你问它答,你指令它执行) | 目标驱动 (你描述"做什么",它决定"怎么做") | 资源驱动 (你描述目标,它调度外部资源来实现) |
| 核心输入 | 代码片段、错误信息、自然语言指令 | 自然语言需求描述、设计稿、产品原型图 | 自然语言需求描述、数据库Schema、API文档、外部工具配置 |
| 核心输出 | 代码片段、修改建议、解释、修复方案 | 结构化、可运行的项目文件和代码 | 连接了真实数据源和服务、具备完整数据流的生产就绪项目 |
| 数据能力 | 操作前端模拟数据(Mock) | 操作前端模拟数据(Mock) | 连接并操作真实数据库(MySQL/PostgreSQL等)、调用外部API |
| 决策权 | 低 (等待你的每一步指令) | 中 (自主进行技术选型、项目结构设计) | 高 (自主进行系统架构、数据库设计、服务集成) |
| [三大智能体核心区别对比表] |
(2)三大智能体适用场景
① @Chat 智能体:"结对编程"伙伴
要修改或理解现有代码? → @Chat 智能体
典型场景:
日常编码与调试 : "帮我写一个Vue 3的Composable来管理用户登录状态。" "这个JavaScript函数为什么一直返回undefined?"
代码解释与学习 : "解释一下这段Pinia Store的代码是如何工作的?" "Vue Router的导航守卫有哪些使用场景?"
代码重构与优化 : "帮我优化这个组件,让它支持虚拟滚动。" "将这个Options API的组件改成Composition API。"
单文件修改 : "在
UserProfile.vue组件里,为表单添加一个邮箱格式验证。"何时使用:
当需要修改、理解或优化现有代码时,首先想到 @Chat。
② @Builder 智能体:你的"原型加速器"
要创建新的页面或项目,但不需要/还没准备好连接真实数据库? → @Builder 智能体
典型场景:
项目冷启动 : "创建一个React + TypeScript + Ant Design的管理后台,包含用户管理和权限设置。"
功能模块生成 : "在我的Vue项目中,为一个电商产品生成完整的商品详情页,包括图片画廊、规格选择、购买区域。"
从设计到代码 : (上传一张Figma设计稿) "请参考这个设计稿,搭建出对应的Vue页面组件。"
技术栈探索 : "使用SvelteKit为我构建一个个人博客网站,并集成MDX支持。"
何时使用:
当需要从零开始创建一个新的项目、页面或复杂功能模块时,使用 @Builder。
③ @Builder with MCP:你的"全栈交付引擎"
要创建连接了真实数据库、API的全栈应用,或集成外部服务? → @Builder with MCP 智能体
典型场景:
全栈应用开发 : "构建一个任务管理系统,前端用Vue,后端用Node.js(Express),数据库用MySQL,并实现任务的CRUD、用户认证和实时通知。"
数据库设计与集成 : "为我的博客系统设计数据库Schema,创建
posts、users、comments表,并建立关联,然后提供相应的RESTful API。"外部服务集成 : "在我的项目中集成GitHub API,实现一个可以显示我的仓库列表和最新提交的功能。"
遗留系统现代化 : "连接到我现有的MySQL数据库,为其生成一个GraphQL API层,并创建一个React前端来管理数据。"
生产环境部署准备 : "为刚才创建的全栈应用生成Docker配置文件和CI/CD流水线脚本。"
何时使用:
当项目需要连接真实的数据源、集成外部服务、或构建具备完整前后端数据流的全栈应用时,必须使用 @Builder with MCP。
(3)实战场景流程示例:构建一个 "用户管理中心"
协同使用三大智能体:
阶段一:项目初始化 (使用 @Builder with MCP)
指令 : "构建一个用户管理中心,前端Vue 3 + Element Plus,后端Express,MySQL数据库。需要
users表(id, name, email, role),实现用户的增删改查(CRUD)和分页查询API。"结果: @Builder with MCP 会创建完整的项目结构、数据库表、后端API和前端页面,数据完全打通。
阶段二:功能增强 (使用 @Chat 智能体)
指令: (打开生成的前端页面)"为这个用户表格添加一个'导出为CSV'的功能按钮。"
指令: "在后端的用户创建API里,添加对邮箱格式的验证逻辑。"
结果: @Chat 会在现有代码基础上进行微调和增强。
阶段三:新增模块 (使用 @Builder 智能体)
指令: "现在需要增加一个'操作日志'模块,记录用户的关键操作。请先在前端创建一个日志查看页面,用表格展示,数据暂时用Mock。"
结果: @Builder 会快速生成一个带有模拟数据的日志页面组件,让你先预览UI效果。
阶段四:数据持久化 (使用 @Builder with MCP)
指令 : "现在请将'操作日志'模块落地。在数据库中创建
logs表,创建对应的后端API,并将前端页面连接到真实API。"结果: @Builder with MCP 将刚才的Mock模块升级为全栈功能。
二、@Builder with MCP 智能体(全栈应用)
要创建连接了真实数据库、API的全栈应用,或集成外部服务? → @Builder with MCP 智能体
@Builder with MCP 智能体 Vue + MySQL 项目实战教程:
- MCP (Model Context Protocol) 核心价值:让 @Builder 能够连接和操作外部工具与数据源,如数据库、API、GitHub 等。
- 将我们的"企业任务管理系统"升级为连接真实 MySQL 数据库的全栈应用。
(1)核心能力
@Builder with MCP 的核心能力可以概括为:通过标准化协议,将AI的规划与构建能力,与真实世界的数据、工具和服务相连接,实现从"虚拟代码生成"到"物理系统构建"的跨越。
① 外部系统连接与操作
这是 MCP 最根本的能力,它允许智能体突破沙箱,与外部环境交互。
数据库操作 :直接连接并操作 MySQL、PostgreSQL、MongoDB 等数据库。它能执行:
CREATE TABLE等 DDL 语句来设计 Schema。
INSERT/UPDATE/DELETE等 DML 语句来管理数据。执行复杂查询和事务,确保数据一致性。
API 集成 :调用外部 RESTful API、GraphQL 端点。例如,集成 GitHub API 获取仓库信息,调用云服务商(AWS S3、Twilio)的API。
服务器管理:通过 SSH 连接服务器,执行命令、部署应用、查看日志。
版本控制 :与 Git 交互,完成提交代码、创建分支、解决冲突等操作。
② 全栈应用架构设计
它不再只关心前端,而是具备系统架构师的思维。
前后端分离架构:自动规划并生成前端(Vue/React)和后端(Node.js/Express,Python/FastAPI)项目结构。
数据流设计:设计从数据库 -> 后端 API -> 前端状态管理(Pinia/Redux)-> 视图组件的完整数据流。
API 设计与实现:自动创建符合 REST 规范的 API 端点,并生成对应的 Swagger/OpenAPI 文档。
环境配置:区分开发、测试、生产环境,配置数据库连接、环境变量等。
③ 真实数据生命周期管理
与只能使用模拟数据的其他智能体相比,它能处理真实数据的全生命周期。
数据库迁移:生成并执行数据库迁移脚本,优雅地管理 Schema 变更。
种子数据:创建初始数据和测试数据,确保应用启动时即有可用数据。
数据关联与查询:处理复杂的多表关联查询,优化 N+1 查询问题。
数据备份与恢复:规划并执行数据备份策略。
④ 生产就绪配置与部署
它的输出目标直接是生产环境。
容器化 :生成
Dockerfile和docker-compose.yml文件,实现应用容器化。CI/CD 流水线:创建 GitHub Actions、GitLab CI 等配置文件,实现自动化测试和部署。
监控与日志:集成应用性能监控和结构化日志记录。
依赖与安全:管理项目依赖,识别并处理安全漏洞。
(2)高效使用 @Builder with MCP 的黄金法则
要驾驭这个强大的工具,必须遵循以下法则,其核心思维是从 "程序员" 转变为 "系统架构师与产品经理"。
使用 @Builder with MCP 的成功与否,90% 取决于你的指令质量 和规划能力。
从"如何实现"到"要实现什么":你不再需要思考for循环怎么写,而是思考业务流程和数据模型是什么。
从"程序员"到"架构师":你的核心价值在于定义系统边界、模块划分和技术选型。
从"编码执行者"到"需求审查员":@Builder with MCP 生成代码后,你需要审查其架构合理性、代码质量和安全性,这比亲手编写每一行代码要求更高。
遵循这些黄金法则,你将能真正释放 @Builder with MCP 的潜力,从一个复杂的代码编写工作中解放出来,专注于更具价值的系统设计和产品创新。
① 法则一:始于终------蓝图描绘法则
在发出第一条指令前,必须清晰地构想出最终系统的完整蓝图。
- 低效指令 :"帮我做个任务管理系统。"
黄金指令:
"构建一个全栈任务管理系统:
- 前端:Vue 3 + Composition API + Element Plus,需要仪表盘、任务列表和用户管理页面。
- 后端:Node.js + Express,提供RESTful API。
- 数据库 :MySQL,需要
users、tasks、teams表,并描述清楚字段和关联关系。- 核心功能:用户认证、任务 CRUD、任务分配、状态流转。
- 部署:提供 Docker化 配置。"
**有效的原因:**清晰的蓝图让 @Builder with MCP 能一次性进行正确的技术选型和架构设计,避免后期推倒重来。
② 法则二:契约先行------接口驱动法则
在开发具体功能前,先定义好前后端、内外系统之间的"契约"。
黄金指令:"在开始编码前,请先:
设计数据库 Schema,给出完整的建表 SQL。
基于 Schema,定义出所有后端 API 端点的路径、方法、请求体和响应体格式。
根据 API 定义,创建前端的 API Service 层接口文件。"
为什么有效? 这强制你提前思考数据模型和系统交互,确保了前后端并行开发的可行性,MCP 能据此生成高度一致的代码。
③ 法则三:分层构建------垂直切片法则
不要水平地一次做完所有功能(如先做完全部后端,再做全部前端)。而应按功能模块垂直拆分,逐个完成。
黄金指令:"我们分阶段构建:
阶段一:用户系统
后端:创建
users表,实现注册、登录、获取用户列表 API。前端:创建用户登录页面和用户管理页面。
阶段二:任务核心后端:创建
tasks表,实现任务的 CRUD API。前端:创建任务列表和任务创建/编辑页面。
阶段三:关联与高级功能建立任务与用户的关联,实现任务分配功能。"
为什么有效? 每个阶段都能产生一个可测试、可演示的成果,快速验证想法,降低复杂项目的风险。
④ 法则四:环境隔离------配置分离法则
从一开始就严格区分不同环境的配置。
黄金指令:"请为项目配置多环境:
development:使用本地 MySQL,日志级别为 debug。
production:使用环境变量读取数据库连接字符串,日志级别为 warn。创建
.env.example文件,并确保敏感信息不被提交到代码库。"
为什么有效? MCP 能帮你建立最佳实践,避免 "在本地是好的,一上线就崩了" 的经典问题,输出生产就绪的代码。
⑤ 法则五:善用其"手"------MCP 工具调用法则
明确指示 @Builder with MCP 去调用具体的 MCP 工具来完成特定任务。
黄金指令:"请使用 MCP 服务器管理工具,通过SSH登录到服务器
192.168.1.100,部署刚才构建的后端应用。""请使用 MCP 的 Git 工具,将当前项目的代码提交到一个新的 Git 仓库,并创建初始提交。"
为什么有效? 这直接利用了 MCP 的核心价值,将自动化从代码生成扩展到整个软件开发生命周期。
(3)添加 MCP Servers


添加 MySQL






(4)实战使用流程(以 Vue 项目为例)
TRAE @Builder with MCP 智能体 Vue 项目实战教程:
- 这是一个专注于 Vue.js 项目的 TRAE @Builder with MCP 智能体实战教程。
- 本教程将通过一个清晰的流程,展示如何利用 @Builder with MCP 将我们的"企业任务管理系统"升级为连接真实 MySQL 数据库的全栈应用。
**项目目标:构建一个 "企业任务管理系统" 的 Vue + MySQL 项目实战教程,**让 @Builder 能够连接和操作外部工具与数据源,如数据库、API、GitHub 等。此示例项目我是先走第三、四章流程先创建纯前端项目,再来补充后端代码的,实际使用,可先直接从这一步开始,看个人需要随机组合协作。
① 第一阶段:项目架构升级 - 从前端到全栈
目标: 将纯前端的 Vue 应用升级为包含 Node.js 后端和 MySQL 数据库的全栈应用。
指令(启动 @Builder with MCP 智能体):"请使用 MCP 能力,为现有的'企业任务管理系统' Vue 项目创建完整的后端架构:
后端要求:
使用 Node.js + Express 框架
连接 MySQL 数据库,创建以下表:
users(id, name, email, position, avatar)
tasks(id, title, description, status, priority, assignee_id, due_date, created_at)
task_status(id, name, color)提供完整的 RESTful API:
GET /api/tasks - 获取任务列表(支持筛选、分页)
POST /api/tasks - 创建新任务
PUT /api/tasks/:id - 更新任务
DELETE /api/tasks/:id - 删除任务
GET /api/users - 获取用户列表
数据库配置:
数据库名:task_management
使用 Sequelize ORM
包含数据迁移和种子数据
请同时更新前端 Vue 项目,将所有 Pinia store 改为调用真实 API。"
@Builder with MCP 的行动:
通过 MCP 连接 MySQL:
创建数据库连接配置
执行 SQL 脚本创建数据库和表结构
生成后端项目结构 :
生成数据库模型:
javascript// backend/models/Task.js module.exports = (sequelize, DataTypes) => { const Task = sequelize.define('Task', { id: { type: DataTypes.INTEGER, autoIncrement: true, primaryKey: true }, title: { type: DataTypes.STRING, allowNull: false }, description: { type: DataTypes.TEXT, allowNull: true }, status: { type: DataTypes.INTEGER, allowNull: false, defaultValue: 1, // 默认为待处理 references: { model: 'task_status', key: 'id' } }, priority: { type: DataTypes.ENUM('low', 'medium', 'high', 'urgent'), allowNull: false, defaultValue: 'medium' }, assignee_id: { type: DataTypes.INTEGER, allowNull: true, references: { model: 'users', key: 'id' } }, due_date: { type: DataTypes.DATE, allowNull: true }, created_at: { type: DataTypes.DATE, allowNull: false, defaultValue: DataTypes.NOW } }, { tableName: 'tasks', timestamps: false }); return Task; };










② 第二阶段:API 集成与前端改造
目标: 将前端的数据源从模拟数据切换到真实 API。
指令(启动 @Builder with MCP 智能体):"现在请更新前端 Vue 项目:
创建
src/services/api.js封装所有 API 调用改造
taskStore和teamStore,移除模拟数据,改为调用后端 API添加加载状态和错误处理
在
main.js中配置 axios 基础URL"
@Builder with MCP 的行动:
创建 API 服务层:
javascript// src/services/api.js import axios from 'axios'; // 创建 axios 实例 const api = axios.create({ timeout: 10000, headers: { 'Content-Type': 'application/json' } }); // 请求拦截器 api.interceptors.request.use( config => { // 可以在这里添加 token 等认证信息 return config; }, error => { return Promise.reject(error); } ); // 响应拦截器 api.interceptors.response.use( response => { return response.data; }, error => { console.error('API Error:', error); // 统一错误处理 let errorMessage = '请求失败'; if (error.response) { switch (error.response.status) { case 401: errorMessage = '未授权,请重新登录'; break; case 403: errorMessage = '拒绝访问'; break; case 404: errorMessage = '请求的资源不存在'; break; case 500: errorMessage = '服务器错误'; break; default: errorMessage = error.response.data?.message || '请求失败'; } } else if (error.request) { errorMessage = '网络错误,请检查您的网络连接'; } return Promise.reject(new Error(errorMessage)); } ); // API 方法封装 export const taskApi = { // 获取任务列表 getTasks: (params = {}) => api.get('/api/tasks', { params }), // 获取任务详情 getTaskById: (id) => api.get(`/api/tasks/${id}`), // 创建任务 createTask: (taskData) => api.post('/api/tasks', taskData), // 更新任务 updateTask: (id, taskData) => api.put(`/api/tasks/${id}`, taskData), // 删除任务 deleteTask: (id) => api.delete(`/api/tasks/${id}`), // 获取任务统计 getTaskStats: () => api.get('/api/tasks/stats') }; export const userApi = { // 获取用户列表 getUsers: () => api.get('/api/users'), // 获取用户详情 getUserById: (id) => api.get(`/api/users/${id}`) }; export default api;改造 Pinia Store:
javascript// src/stores/taskStore.js import { defineStore } from 'pinia' import { taskApi } from '@/services/api' export const useTaskStore = defineStore('task', { state: () => ({ tasks: [], loading: false, error: null, filter: { status: '', priority: '', assignee: '' }, pagination: { currentPage: 1, pageSize: 10, total: 0 } }), getters: { filteredTasks: (state) => { return state.tasks.filter(task => { let match = true if (state.filter.status && task.status !== state.filter.status) { match = false } if (state.filter.priority && task.priority !== state.filter.priority) { match = false } if (state.filter.assignee && (!task.assignee || task.assignee.id !== parseInt(state.filter.assignee))) { match = false } return match }) }, taskStats: (state) => { // 状态映射(后端数字状态到前端状态) const statusMap = { 1: 'pending', 2: 'in_progress', 3: 'completed' } const stats = { pending: 0, inProgress: 0, completed: 0, total: state.tasks.length } state.tasks.forEach(task => { const frontEndStatus = statusMap[task.status] || 'pending' if (frontEndStatus === 'pending') { stats.pending++ } else if (frontEndStatus === 'in_progress') { stats.inProgress++ } else if (frontEndStatus === 'completed') { stats.completed++ } }) return stats } }, actions: { setFilter(filter) { this.filter = { ...this.filter, ...filter } // 当筛选条件改变时,重新获取数据 this.fetchTasks() }, setPagination(currentPage, pageSize) { this.pagination.currentPage = currentPage this.pagination.pageSize = pageSize this.fetchTasks() }, async fetchTasks() { this.loading = true this.error = null try { const params = { ...this.filter, page: this.pagination.currentPage, pageSize: this.pagination.pageSize } const response = await taskApi.getTasks(params) this.tasks = response.tasks || response this.pagination.total = response.total || this.tasks.length } catch (error) { this.error = error.message console.error('获取任务列表失败:', error) // 如果API调用失败,保持现有数据 } finally { this.loading = false } }, async fetchTaskById(id) { this.loading = true this.error = null try { return await taskApi.getTaskById(id) } catch (error) { this.error = error.message console.error('获取任务详情失败:', error) throw error } finally { this.loading = false } }, async addTask(taskData) { this.loading = true this.error = null try { const newTask = await taskApi.createTask(taskData) this.tasks.unshift(newTask) this.pagination.total++ return newTask } catch (error) { this.error = error.message console.error('创建任务失败:', error) throw error } finally { this.loading = false } }, async updateTask(id, updates) { this.loading = true this.error = null try { const updatedTask = await taskApi.updateTask(id, updates) const index = this.tasks.findIndex(task => task.id === id) if (index !== -1) { this.tasks[index] = { ...this.tasks[index], ...updatedTask } } return updatedTask } catch (error) { this.error = error.message console.error('更新任务失败:', error) throw error } finally { this.loading = false } }, async deleteTask(id) { this.loading = true this.error = null try { await taskApi.deleteTask(id) const index = this.tasks.findIndex(task => task.id === id) if (index !== -1) { this.tasks.splice(index, 1) this.pagination.total-- } return true } catch (error) { this.error = error.message console.error('删除任务失败:', error) throw error } finally { this.loading = false } }, async fetchTaskStats() { try { return await taskApi.getTaskStats() } catch (error) { console.error('获取任务统计失败:', error) // 返回本地计算的统计数据作为降级方案 return this.taskStats } } } })


③ 第三阶段:高级数据库功能实现
目标: 实现复杂的数据库查询和业务逻辑。
指令(启动 @Builder with MCP 智能体):"请为任务系统添加以下高级功能:
任务统计API :
GET /api/dashboard/stats- 返回总任务数、各状态任务数、逾期任务数任务评论功能 :创建
comments表,支持对任务添加评论文件附件 :创建
attachments表,支持任务文件上传数据库事务:确保相关操作的数据一致性"
@Builder with MCP 的行动:
创建 API:
javascript// backend/routes/api.js import axios from 'axios'; // 创建 axios 实例 const api = axios.create({ timeout: 10000, headers: { 'Content-Type': 'application/json' } }); // 请求拦截器 api.interceptors.request.use( config => { // 可以在这里添加 token 等认证信息 return config; }, error => { return Promise.reject(error); } ); // 响应拦截器 api.interceptors.response.use( response => { return response.data; }, error => { console.error('API Error:', error); // 统一错误处理 let errorMessage = '请求失败'; if (error.response) { switch (error.response.status) { case 401: errorMessage = '未授权,请重新登录'; break; case 403: errorMessage = '拒绝访问'; break; case 404: errorMessage = '请求的资源不存在'; break; case 500: errorMessage = '服务器错误'; break; default: errorMessage = error.response.data?.message || '请求失败'; } } else if (error.request) { errorMessage = '网络错误,请检查您的网络连接'; } return Promise.reject(new Error(errorMessage)); } ); // API 方法封装 export const taskApi = { // 获取任务列表 getTasks: (params = {}) => api.get('/api/tasks', { params }), // 获取任务详情 getTaskById: (id) => api.get(`/api/tasks/${id}`), // 创建任务 createTask: (taskData) => api.post('/api/tasks', taskData), // 更新任务 updateTask: (id, taskData) => api.put(`/api/tasks/${id}`, taskData), // 删除任务 deleteTask: (id) => api.delete(`/api/tasks/${id}`), // 获取任务统计 getTaskStats: () => api.get('/api/tasks/stats') }; export const userApi = { // 获取用户列表 getUsers: () => api.get('/api/users'), // 获取用户详情 getUserById: (id) => api.get(`/api/users/${id}`) }; export default api;


④ 第四阶段:数据库优化与监控
目标: 优化数据库性能和添加监控功能。
指令(启动 @Builder with MCP 智能体):"请为系统添加数据库优化措施:
为常用查询字段添加数据库索引
实现数据库查询性能监控
添加数据备份机制
实现数据库连接池配置"
@Builder with MCP 的行动:
通过 MCP 执行索引优化:
sql-- backend\migrations\20230101000005-add-indexes.js -- 为表的常用查询字段添加索引 module.exports = { up: async (queryInterface, Sequelize) => { // 为tasks表添加索引 await queryInterface.addIndex('tasks', ['status'], { name: 'idx_tasks_status' }); await queryInterface.addIndex('tasks', ['priority'], { name: 'idx_tasks_priority' }); await queryInterface.addIndex('tasks', ['assignee_id'], { name: 'idx_tasks_assignee_id' }); await queryInterface.addIndex('tasks', ['due_date'], { name: 'idx_tasks_due_date' }); await queryInterface.addIndex('tasks', ['created_at'], { name: 'idx_tasks_created_at' }); // 为comments表添加索引 await queryInterface.addIndex('comments', ['task_id'], { name: 'idx_comments_task_id' }); await queryInterface.addIndex('comments', ['user_id'], { name: 'idx_comments_user_id' }); await queryInterface.addIndex('comments', ['created_at'], { name: 'idx_comments_created_at' }); // 为attachments表添加索引 await queryInterface.addIndex('attachments', ['task_id'], { name: 'idx_attachments_task_id' }); await queryInterface.addIndex('attachments', ['user_id'], { name: 'idx_attachments_user_id' }); // 为users表添加索引 await queryInterface.addIndex('users', ['email'], { name: 'idx_users_email', unique: true }); await queryInterface.addIndex('users', ['name'], { name: 'idx_users_name' }); }, down: async (queryInterface) => { // 删除索引 await queryInterface.removeIndex('tasks', 'idx_tasks_status'); await queryInterface.removeIndex('tasks', 'idx_tasks_priority'); await queryInterface.removeIndex('tasks', 'idx_tasks_assignee_id'); await queryInterface.removeIndex('tasks', 'idx_tasks_due_date'); await queryInterface.removeIndex('tasks', 'idx_tasks_created_at'); await queryInterface.removeIndex('comments', 'idx_comments_task_id'); await queryInterface.removeIndex('comments', 'idx_comments_user_id'); await queryInterface.removeIndex('comments', 'idx_comments_created_at'); await queryInterface.removeIndex('attachments', 'idx_attachments_task_id'); await queryInterface.removeIndex('attachments', 'idx_attachments_user_id'); await queryInterface.removeIndex('users', 'idx_users_email'); await queryInterface.removeIndex('users', 'idx_users_name'); } };配置数据库连接池:
javascript// backend/config/config.js { "development": { "username": "root", "password": "password", "database": "task_management", "host": "127.0.0.1", "dialect": "mysql", "define": { "timestamps": true }, "pool": { "max": 10, "min": 0, "acquire": 30000, "idle": 10000 }, "logging": true }, "test": { "username": "root", "password": "password", "database": "task_management_test", "host": "127.0.0.1", "dialect": "mysql", "pool": { "max": 10, "min": 0, "acquire": 30000, "idle": 10000 }, "logging": false }, "production": { "username": "root", "password": "password", "database": "task_management", "host": "127.0.0.1", "dialect": "mysql", "pool": { "max": 20, "min": 2, "acquire": 60000, "idle": 20000 }, "logging": false } }


⑤ 第五阶段:数据迁移与生产部署
目标: 准备生产环境的数据和部署配置。
指令(启动 @Builder with MCP 智能体):"请准备生产环境部署:
创建数据库迁移脚本
生成生产环境的数据种子
创建 Docker 配置文件
设置环境变量配置"
@Builder with MCP 的行动:
创建数据库迁移:
javascript// backend\migrations\20230101000006-production-migration.js module.exports = { up: async (queryInterface, Sequelize) => { // 执行所有迁移操作的事务 const transaction = await queryInterface.sequelize.transaction(); try { // 1. 创建task_status表 await queryInterface.createTable('task_statuses', { id: { allowNull: false, autoIncrement: true, primaryKey: true, type: Sequelize.INTEGER }, name: { type: Sequelize.STRING, allowNull: false, unique: true }, created_at: { allowNull: false, type: Sequelize.DATE }, updated_at: { allowNull: false, type: Sequelize.DATE } }, { transaction }); // 2. 创建users表 await queryInterface.createTable('users', { id: { allowNull: false, autoIncrement: true, primaryKey: true, type: Sequelize.INTEGER }, name: { type: Sequelize.STRING, allowNull: false }, email: { type: Sequelize.STRING, allowNull: false, unique: true }, role: { type: Sequelize.STRING, allowNull: false, defaultValue: 'user' }, created_at: { allowNull: false, type: Sequelize.DATE }, updated_at: { allowNull: false, type: Sequelize.DATE } }, { transaction }); // 3. 创建tasks表 await queryInterface.createTable('tasks', { id: { allowNull: false, autoIncrement: true, primaryKey: true, type: Sequelize.INTEGER }, title: { type: Sequelize.STRING, allowNull: false }, description: { type: Sequelize.TEXT }, status: { type: Sequelize.INTEGER, allowNull: false, references: { model: 'task_statuses', key: 'id' } }, priority: { type: Sequelize.ENUM('low', 'medium', 'high', 'urgent'), allowNull: false, defaultValue: 'medium' }, assignee_id: { type: Sequelize.INTEGER, references: { model: 'users', key: 'id' } }, due_date: { type: Sequelize.DATE }, created_at: { allowNull: false, type: Sequelize.DATE }, updated_at: { allowNull: false, type: Sequelize.DATE } }, { transaction }); // 4. 创建comments表 await queryInterface.createTable('comments', { id: { allowNull: false, autoIncrement: true, primaryKey: true, type: Sequelize.INTEGER }, content: { type: Sequelize.TEXT, allowNull: false }, task_id: { type: Sequelize.INTEGER, allowNull: false, references: { model: 'tasks', key: 'id', onDelete: 'CASCADE' } }, user_id: { type: Sequelize.INTEGER, allowNull: false, references: { model: 'users', key: 'id' } }, created_at: { allowNull: false, type: Sequelize.DATE } }, { transaction }); // 5. 创建attachments表 await queryInterface.createTable('attachments', { id: { allowNull: false, autoIncrement: true, primaryKey: true, type: Sequelize.INTEGER }, filename: { type: Sequelize.STRING, allowNull: false }, filepath: { type: Sequelize.STRING, allowNull: false }, filesize: { type: Sequelize.INTEGER, allowNull: false }, filetype: { type: Sequelize.STRING, allowNull: false }, task_id: { type: Sequelize.INTEGER, allowNull: false, references: { model: 'tasks', key: 'id', onDelete: 'CASCADE' } }, user_id: { type: Sequelize.INTEGER, allowNull: false, references: { model: 'users', key: 'id' } }, created_at: { allowNull: false, type: Sequelize.DATE } }, { transaction }); // 6. 添加所有索引 await queryInterface.addIndex('tasks', ['status'], { name: 'idx_tasks_status', transaction }); await queryInterface.addIndex('tasks', ['priority'], { name: 'idx_tasks_priority', transaction }); await queryInterface.addIndex('tasks', ['assignee_id'], { name: 'idx_tasks_assignee_id', transaction }); await queryInterface.addIndex('tasks', ['due_date'], { name: 'idx_tasks_due_date', transaction }); await queryInterface.addIndex('tasks', ['created_at'], { name: 'idx_tasks_created_at', transaction }); await queryInterface.addIndex('comments', ['task_id'], { name: 'idx_comments_task_id', transaction }); await queryInterface.addIndex('comments', ['user_id'], { name: 'idx_comments_user_id', transaction }); await queryInterface.addIndex('comments', ['created_at'], { name: 'idx_comments_created_at', transaction }); await queryInterface.addIndex('attachments', ['task_id'], { name: 'idx_attachments_task_id', transaction }); await queryInterface.addIndex('attachments', ['user_id'], { name: 'idx_attachments_user_id', transaction }); await queryInterface.addIndex('users', ['email'], { name: 'idx_users_email', unique: true, transaction }); await queryInterface.addIndex('users', ['name'], { name: 'idx_users_name', transaction }); // 提交事务 await transaction.commit(); } catch (error) { // 回滚事务 await transaction.rollback(); throw error; } }, down: async (queryInterface) => { // 删除所有表(按依赖关系的反向顺序) await queryInterface.dropTable('attachments'); await queryInterface.dropTable('comments'); await queryInterface.dropTable('tasks'); await queryInterface.dropTable('users'); await queryInterface.dropTable('task_statuses'); } };创建 Docker 配置:
bash# backend/Dockerfile # 使用官方 Node.js 16 镜像作为基础镜像 FROM node:16-alpine # 设置工作目录 WORKDIR /app # 复制 package.json 和 package-lock.json COPY package*.json ./ # 安装依赖 RUN npm ci --only=production # 复制应用程序代码 COPY . . # 创建必要的目录 RUN mkdir -p logs backups # 设置环境变量 ENV NODE_ENV=production ENV PORT=3000 # 暴露端口 EXPOSE 3000 # 运行命令 CMD ["npm", "start"]


















整个前后端分离环境架构已部署好,后面就是优化细节了!
三、@Builder 智能体("从 0 到 1" 的创造)
TRAE @Builder 智能体:从想法到成品的项目构建引擎
- @Builder 智能体,特别是其 SOLO模式,核心价值在于处理更宏观、更复杂的项目初始化与构建任务。
- 它能将你的自然语言描述或一张设计图,直接转化成一个可运行的项目骨架。
- 如果说 @Chat 智能体是一个强大的编程伙伴,那么 @Builder 智能体就是一位能够自主完成整个项目搭建的"项目总监"。

(1)核心能力:@Builder 与 @Chat 的本质区别
| 特性 | @Builder 智能体 (SOLO模式) | @Chat 智能体 |
|---|---|---|
| 任务粒度 | 项目级/功能级:创建整个应用、完整页面 | 文件/代码块级:修改函数、解释代码、修复错误 |
| 交互模式 | 目标驱动:你提供"做什么",它决定"怎么做"并执行。 | 指令驱动:你一步步下达"怎么做"的指令。 |
| 输出结果 | 完整的、结构化的项目文件、配置和可运行的代码库。 | 代码片段、建议、解释,需要你手动整合。 |
| 最佳场景 | 项目冷启动、原型开发、从设计稿到代码 | 日常编码、调试、迭代优化、学习代码 |
简单比喻:我想盖房子。
找 @Builder:我给它一张房屋设计图,它直接给我打好地基、搭好框架、建好毛坯房。
找 @Chat:我告诉它"这里砌一堵墙"、"那里装一扇窗",它给我砖头和窗户,我来砌。
(2)高效使用 @Builder 智能体的黄金法则
@Builder 智能体彻底改变了项目启动的方式。我们的核心技能不再是编写每一行代码,而是精准地定义问题、描述需求和验收成果。通过将重复性的搭建工作交给 @Builder,我们可以将宝贵的时间投入到更具创造性的架构设计和业务逻辑实现中。
目标清晰,描述具体:
不佳:"做个好看的网站。"
优秀:"创建一个单页作品集,包含关于我、项目展示(网格布局)、博客文章列表(时间线布局)和联系方式,使用 Tailwind CSS 框架。"
分步构建,由粗到精:对于极其复杂的项目,不要试图一蹴而就。先用 @Builder 搭建"毛坯房"(项目骨架和基础功能),再用 @Chat 进行"精装修"(样式优化、复杂逻辑)。
第一阶段:"先用 @Builder 搭建一个只包含路由和空白页面的基础框架。"
第二阶段:"现在,请专门为'项目展示'页面生成详细的卡片网格 UI 和模拟数据。"
善用视觉输入:一张设计图抵得上千言万语。@Builder 的多模态能力能极大提升还原度。
理解其局限性:@Builder 生成的通常是 "毛坯房"(高质量的原型),复杂的业务逻辑、API 对接和极致的性能优化,仍需我们借助 @Chat 智能体或手动编码来完成。
技术栈声明前置 :在给 @Builder 的初始指令中,必须明确 Vue 3, Composition API,
<script setup>,状态管理库和 UI 组件库,这是生成高质量、符合你习惯代码的关键。数据管理要明确 :明确要求 @Builder 使用 Pinia 来管理模拟数据,这能保证项目结构清晰,数据流可控。
善用"组合智能体"工作流:这是最高效的工作流。
@Builder 负责 "从 0 到 1" 的创造:快速搭建项目骨架和页面原型。
@Chat 负责"从 1 到 N" 的优化:在此基础上进行功能迭代、代码优化和问题修复。
(3)实战使用流程(以 Vue 项目为例)
TRAE @Builder 智能体 Vue 项目实战教程:
- 这是一个专注于 Vue.js 项目的 TRAE @Builder 智能体实战教程。
- 本教程将通过一个清晰的流程,展示如何利用 @Builder 从零开始,快速构建一个完整的 Vue 应用。
项目目标:构建一个 "企业任务管理系统" 的 Vue 前端原型,包含仪表盘、任务列表和团队页面。
① 第一阶段:项目初始化与骨架搭建
指令(启动 @Builder 智能体):
"请使用 SOLO 模式,为我创建一个 Vue 3 企业任务管理系统的前端项目。
核心要求:
技术栈: Vue 3 +
<script setup>+ Vite + Vue Router + Pinia + Element Plus。页面结构:
仪表盘 (/dashboard): 展示统计卡片和近期任务概览。
任务列表 (/tasks): 以表格形式展示所有任务,支持筛选和分页。
团队 (/team): 展示团队成员列表。
布局: 使用经典的左侧导航栏 + 右侧主内容区的布局。
数据: 使用 Pinia 管理应用状态,并为每个页面生成模拟数据。
样式: 整体风格要求专业、简洁,符合企业管理系统的气质。"
@Builder 智能体的行动与输出:
项目规划: 分析需求,生成一个详细的项目结构图。
初始化项目: 创建
package.json,并安装指定的所有依赖(Vue, Vite, Vue Router, Pinia, Element Plus)。生成核心文件:
src/main.js:初始化 Vue 应用,并集成 Router, Pinia 和 Element Plus。
src/App.vue:作为应用根组件,包含主要的布局结构。
src/layouts/DefaultLayout.vue:实现要求的左侧导航 + 右侧内容的布局。导航菜单包含"仪表盘"、"任务"、"团队"的链接。
src/router/index.js:配置好三个页面的路由。
src/stores/app.js:创建一个 Pinia Store,用于管理全局状态(例如用户信息、侧边栏折叠状态)。此时,@Builder 已经交付了一个可运行的项目骨架 。可以立即执行
npm run dev看到一个带有导航布局的基础应用。











系统初步设计已完成,打开系统网址:http://127.0.0.1:5173/
② 第二阶段:页面内容生成与数据模拟
现在,让 @Builder 为每个页面填充具体内容。
指令(启动 @Builder 智能体):"很好,基础骨架已经完成。现在请为三个主要页面生成具体的 UI 内容和模拟数据:
仪表盘页面 (
/dashboard):
顶部放置三个统计卡片:总任务数、进行中任务数、已完成任务数。
下方展示一个"近期任务"列表,显示任务名、负责人和截止日期。
任务列表页面 (
/tasks):
使用 ElTable 展示任务,列包括:ID、任务名称、状态、优先级、负责人、截止日期。
顶部提供筛选栏,可以根据任务状态进行筛选。
实现分页功能。
**团队页面 (
/team):**使用卡片网格展示团队成员,每个卡片包含成员头像、姓名、职位和邮箱。数据层: 请在 Pinia 中创建一个
taskStore和一个teamStore来集中管理这些模拟数据。"
@Builder 智能体的行动与输出:
创建 Store:
src/stores/taskStore.js:定义tasks状态,并生成模拟的任务数据数组。包含fetchTasks,updateTask等动作。
src/stores/teamStore.js:定义members状态,并生成模拟的团队成员数据。生成页面组件:
src/views/DashboardView.vue:
从
taskStore中获取数据。使用 ElRow 和 ElCol 布局三个 ElCard 统计卡片。
使用 ElTable 展示近期任务列表。
src/views/TasksView.vue:
从
taskStore中获取任务列表。使用 ElTable 并绑定 Store 中的数据,配置好分页。
使用 ElSelect 作为状态筛选器。
src/views/TeamView.vue:
从
teamStore中获取成员列表。使用 ElRow 和 ElCol 循环生成多个 ElCard 来展示成员信息。
此时,再次预览应用,会发现它已经是一个功能完整、数据充盈的原型了,具备了企业管理系统的核心外观。
③ 第三阶段:预览、微调与组合使用智能体
**1. 预览与发现问题:**发现 "仪表盘" 的统计卡片样式比较普通,希望更突出。
2. 切换至 @Chat 智能体进行精细调整: 打开src/views/DashboardView.vue文件指令(启动 @Chat 智能体): "请优化这个仪表盘页面中三个统计卡片的样式。让它们背景色采用渐变色,数字字体更大更粗,并添加一个对应的图标(例如:总任务数用
el-icon-document)。"@Chat 智能体会直接修改该文件中的模板和样式代码,实现要求。


**3. 使用 @Builder 添加新功能:**现在,需要一个 "任务详情" 页面。
指令(启动 @Builder 智能体):
"请在现有项目中增加一个'任务详情'页面。路由为
/task/:id。当在任务列表点击某个任务名时,应能跳转到该详情页。详情页需要展示该任务的所有信息,并提供一个'编辑'按钮(功能待实现)。请同时更新路由和任务列表的链接。"
@Builder 智能体的行动与输出:
创建
src/views/TaskDetailView.vue组件。更新
src/router/index.js,添加动态路由。修改
TasksView.vue中的任务名列,将其变为一个指向详情页的RouterLink。
四、@Chat 智能体("从 1 到 N" 的优化)
TRAE 中的 Chat 智能体是整个 IDE 的智能中枢,它超越了简单的聊天机器人,是一个能理解整个项目上下文、并执行具体操作的编程伙伴。
(1)核心能力
自然语言编程:用日常语言描述项目代码设计的需求,智能体会生成相应的代码。
代码解释与调试:选中不理解的代码或报错,让它解释或提供修复方案。
项目上下文感知:它能基于整个项目的代码库进行回答和操作,理解项目架构和风格。
自动化重构:提出代码优化建议,并直接帮忙完成重构。
文件与资源操作:根据问题指令创建新文件、安装依赖、甚至启动开发服务器。
(2)高效使用 @Chat 智能体的黄金法则
将 TRAE 的 Chat 智能体当作一个能力超群、不知疲倦的编程伙伴。核心任务是从 "写代码"转变为 "提需求、做审查和定方向"。通过清晰的指令和迭代式的对话,将能极大地提升开发效率,将精力集中在架构设计和业务逻辑等更有创造性的工作上。
上下文是关键:
提供充足背景 :在提问前,确保智能体已经加载了指定项目(TRAE 通常会自动完成)。在复杂问题上,可以在问题中说 "参考一下
utils/api.js文件里的格式"。精准描述 :与其说 "这里出错了",不如说 "这个函数在用户登录时抛出了类型错误,请看
LoginForm.js第 25 行附近的handleSubmit函数"。迭代式精炼:
从静态数据到动态交互,从基础功能到高级功能,一步步地向智能体提出需求。
不要试图在一个指令中完成所有事情。
将智能体视为一个实习生,先让它搭出框架,然后再一步步提出修改要求,使其不断完善。
示例流程:"创建一个按钮" -> "给按钮加一个加载状态" -> "点击按钮时调用这个 API"。
善用指令与快捷方式:
- TRAE 通常支持一些快捷指令,如
/test(为这段代码生成测试)、/explain(详细解释)、/fix(尝试自动修复)。留意官方文档中的特定指令。明确技术栈 :在指令中开头就声明
"使用 Vue 3 + Composition API + <script setup>",让智能体生成最符合个人习惯的代码。善用组件库 :直接要求智能体使用
Element Plus、Ant Design Vue等知名组件库来重构 UI,能极大提升开发效率和界面美观度。让智能体调试 :遇到任何错误或警告,直接将错误信息复制给智能体,并说明上下文,它不仅能修复,还能解释报错原因。
结合 SOLO 模式进行飞跃:
对于更宏大的任务,直接使用 SOLO 模式。可以上传一张设计图或提供一个产品链接,然后说 "参考这张设计图,在我的项目中搭建一个类似的主页 UI。"
SOLO 模式的 Builder 智能体会尝试自动分析并生成整个页面的代码框架,再通过 Chat 智能体进行微调。
(3)实战使用流程(以 Vue 项目为例)
TRAE Chat 智能体 Vue 项目优化实战教程:
- 这是一个 Vue.js 项目的 TRAE Chat 智能体实战使用教程。
- 在 @Builder 智能体搭建的 "企业任务管理系统" 基础上,使用 @Chat 智能体 进行深度优化和功能增强。
当前状态: @Builder 已生成基础系统,包含仪表盘、任务列表、团队页面和基础布局。
① 第一阶段:优化任务列表页 - 增强交互功能
目标: 为任务列表添加编辑、状态快速更改和高级筛选功能。
1. 实现行内编辑功能
指令(启动 @Chat 智能体):
"在
Tasks.vue的任务表格中,我希望可以点击'任务名称'直接进行编辑。请实现:当点击任务名称时,变为输入框,编辑完成后按回车或失去焦点保存到 store。"
@Chat 智能体的行动:
在
taskStore中添加updateTaskaction修改表格列,为任务名称添加
el-input和编辑状态控制实现编辑逻辑和保存功能





2. 添加快速状态更改按钮
指令(启动 @Chat 智能体):
"在任务表格的操作列中,添加'开始'、'完成'、'重新打开'的快速操作按钮。根据任务状态显示不同的按钮,点击后直接更新任务状态。
@Chat 智能体的行动:
在
taskStore中添加changeTaskStatusaction在操作列中添加条件渲染的按钮
实现状态转换逻辑





② 第二阶段:增强仪表盘 - 添加数据可视化
目标: 在仪表盘添加图表,直观展示任务数据。
添加任务状态分布饼图
指令(启动 @Chat 智能体):
"在仪表盘页面的统计卡片下方,添加一个 ECharts 饼图,展示任务状态分布(待处理、进行中、已完成)。请安装 ECharts 依赖并集成到 Vue 中。"
@Chat 智能体的行动:
安装
echarts和vue-echarts依赖在
DashboardView.vue中集成饼图组件从 store 中计算状态分布数据










③ 第三阶段:优化用户体验 - 添加高级功能
1. 实现任务拖拽排序
指令(启动 @Chat 智能体):
"在任务列表页面,我希望可以通过拖拽来调整任务的显示顺序。请使用 Sortable.js 实现表格行的拖拽排序功能。"
@Chat 智能体的行动:
安装
sortablejs依赖在表格挂载后初始化 Sortable.js
实现拖拽结束后的数据更新逻辑





2. 添加数据导出功能
指令(启动 @Chat 智能体):
"在任务列表页面顶部添加一个'导出Excel'按钮,点击后可以将当前筛选的任务数据导出为 CSV 格式文件。"
@Chat 智能体的行动:
实现 CSV 格式转换函数
创建 Blob 对象并触发下载
添加导出按钮和点击事件















三、
