pangu-user-platform/docs/多Agent协同开发指南.md

962 lines
27 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 盘古用户平台 - 多Agent协同开发指南
---
## 重要:协同开发规则
### 1. 开发服务器管理
```
⚠️ 关键规则:
- 只有 Agent-1 负责启动 npm run dev端口3000
- Agent-2 ~ Agent-7 只创建/修改文件绝不启动dev server
- 所有Agent共享同一个项目目录自动热更新
```
### 2. 文件边界划分
每个Agent只能操作自己负责的文件避免冲突
| Agent | 可操作的文件 |
|-------|------------|
| Agent-1 | src/layout/*, src/mock/index.js, src/mock/user.js, src/utils/*, src/views/dashboard/*, src/main.js, src/router/index.js, src/App.vue |
| Agent-2 | src/views/login/* |
| Agent-3 | src/views/school/*, src/api/school.js, src/mock/school.js |
| Agent-4 | src/views/member/*, src/api/member.js, src/mock/member.js |
| Agent-5 | src/views/student/*, src/api/student.js, src/mock/student.js |
| Agent-6 | src/views/application/*, src/api/application.js, src/mock/application.js |
| Agent-7 | src/views/base/*, src/api/grade.js, src/api/class.js, src/api/subject.js, src/api/region.js, src/mock/grade.js, src/mock/class.js, src/mock/subject.js, src/mock/region.js |
### 3. 共享文件更新规则
`src/mock/index.js` 需要汇总所有mock文件
- Agent-1 创建基础结构只import user.js
- Agent-3~7 完成后各自在末尾追加自己的import
```javascript
// Agent-1 创建的基础内容
import './user'
// Agent-3 追加
import './school'
// Agent-4 追加
import './member'
// ... 以此类推
```
### 4. 验证方式
- Agent-1 完成后启动 `npm run dev`,保持运行
- Agent-2~7 完成后刷新浏览器即可看到新页面Vite热更新
- 无需重启服务器
---
## 项目概述
使用多个AI Agent并行开发前端页面每个Agent负责一个独立模块。
**技术栈**Vue 3 + Vite + Element Plus + Pinia + Vue Router + MockJS
**项目路径**`/Users/felix/pgWorkSpace/pangu-user-platform/frontend`
**原型地址**https://modao.cc/proto/atlwMul8t9pi6yxQ42W7up/sharing
**作者**pangu
---
## Agent分工
| Agent | 负责模块 | 启动Server | 文件范围 |
|-------|---------|:----------:|---------|
| Agent-1 | 核心基础设施 | ✅ 是 | layout, utils, mock入口, dashboard |
| Agent-2 | 登录页面 | ❌ 否 | views/login |
| Agent-3 | 学校管理 | ❌ 否 | views/school, api/school, mock/school |
| Agent-4 | 会员管理 | ❌ 否 | views/member, api/member, mock/member |
| Agent-5 | 学生管理 | ❌ 否 | views/student, api/student, mock/student |
| Agent-6 | 应用管理 | ❌ 否 | views/application, api/application, mock/application |
| Agent-7 | 基础数据 | ❌ 否 | views/base/*, api/grade等, mock/grade等 |
**执行顺序**
1. 先完成 Agent-1启动dev server保持运行
2. Agent-2~7 并行开发只创建文件不启动server
3. 每个Agent完成后刷新浏览器验证
---
## 前端编码规范所有Agent必须遵守
### 1. 表格规范
```vue
<!-- 正确表格必须设置这些属性 -->
<el-table
:data="tableData"
border
stripe
v-loading="loading"
:header-cell-style="{ background: '#f5f7fa', color: '#606266' }"
style="width: 100%"
>
<!-- 列宽度必须明确指定,避免右侧大量空白 -->
<el-table-column prop="name" label="名称" min-width="120" show-overflow-tooltip />
<el-table-column prop="code" label="编码" width="120" />
<el-table-column prop="status" label="状态" width="80" align="center" />
<el-table-column prop="createTime" label="创建时间" width="160" />
<!-- 操作列固定右侧 -->
<el-table-column label="操作" width="180" fixed="right" align="center">
<template #default="{ row }">
<el-button link type="primary" @click="handleEdit(row)">编辑</el-button>
<el-button link type="danger" @click="handleDelete(row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- ❌ 错误:不设置列宽会导致右侧大量空白 -->
<el-table :data="tableData">
<el-table-column prop="name" label="名称" />
</el-table>
```
### 2. 列宽分配原则
| 字段类型 | 推荐宽度 | 说明 |
|---------|---------|------|
| ID/编号 | 80-100px | 固定宽度 |
| 名称/标题 | min-width: 120-200px | 弹性宽度使用min-width |
| 状态/类型 | 80-100px | 固定宽度,居中 |
| 日期时间 | 160-180px | 固定宽度 |
| 手机号 | 120px | 固定宽度 |
| 操作列 | 根据按钮数量120-200px | 固定右侧 |
### 3. 长文本处理
```vue
<!-- 使用 show-overflow-tooltip 处理长文本鼠标悬停显示全部 -->
<el-table-column prop="remark" label="备注" min-width="150" show-overflow-tooltip />
<!-- 手机号脱敏显示 -->
<el-table-column prop="phone" label="手机号" width="120">
<template #default="{ row }">
{{ row.phone ? row.phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2') : '-' }}
</template>
</el-table-column>
```
### 4. 表格响应式
```vue
<!-- 使用 el-scrollbar 包裹确保水平滚动 -->
<el-scrollbar>
<el-table :data="tableData" style="width: 100%; min-width: 800px;">
<!-- 列定义 -->
</el-table>
</el-scrollbar>
```
### 5. 搜索表单规范
```vue
<!-- 正确使用 inline 表单合理分布 -->
<el-form :model="queryParams" ref="queryFormRef" :inline="true" class="search-form">
<el-form-item label="名称" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入名称" clearable style="width: 200px" />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择" clearable style="width: 120px">
<el-option label="全部" value="" />
<el-option label="正常" value="0" />
<el-option label="停用" value="1" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" :icon="Search" @click="handleQuery">查询</el-button>
<el-button :icon="Refresh" @click="handleReset">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作按钮行 -->
<el-row :gutter="10" class="mb-8">
<el-col :span="1.5">
<el-button type="primary" :icon="Plus" @click="handleAdd">新增</el-button>
</el-col>
</el-row>
```
### 6. 分页规范
```vue
<!-- 分页组件右对齐 -->
<div style="display: flex; justify-content: flex-end; margin-top: 16px;">
<el-pagination
v-model:current-page="queryParams.pageNum"
v-model:page-size="queryParams.pageSize"
:page-sizes="[10, 20, 50, 100]"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
@size-change="handleQuery"
@current-change="handleQuery"
/>
</div>
```
### 7. 弹窗规范
```vue
<el-dialog
v-model="dialogVisible"
:title="dialogTitle"
width="600px"
:close-on-click-modal="false"
destroy-on-close
>
<el-form
ref="formRef"
:model="form"
:rules="rules"
label-width="100px"
>
<!-- 表单项 -->
</el-form>
<template #footer>
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="handleSubmit" :loading="submitLoading">确定</el-button>
</template>
</el-dialog>
```
### 8. 状态Tag颜色规范
```vue
<!-- 状态正常-success停用-danger -->
<el-tag :type="row.status === '0' ? 'success' : 'danger'">
{{ row.status === '0' ? '正常' : '停用' }}
</el-tag>
<!-- 身份类型家长-primary教师-success -->
<el-tag :type="row.identityType === '1' ? '' : 'success'">
{{ row.identityType === '1' ? '家长' : '教师' }}
</el-tag>
<!-- 性别-primary-danger未知-info -->
<el-tag :type="row.gender === '1' ? '' : row.gender === '2' ? 'danger' : 'info'">
{{ { '0': '未知', '1': '男', '2': '女' }[row.gender] }}
</el-tag>
```
### 9. 空数据处理
```vue
<!-- 表格空数据提示 -->
<el-table :data="tableData">
<template #empty>
<el-empty description="暂无数据" />
</template>
</el-table>
<!-- 字段空值显示 -->
<el-table-column prop="remark" label="备注">
<template #default="{ row }">
{{ row.remark || '-' }}
</template>
</el-table-column>
```
### 10. 删除确认规范
```javascript
// 使用 ElMessageBox 确认删除
const handleDelete = (row) => {
ElMessageBox.confirm(`确定要删除"${row.name}"吗?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
// 调用删除API
deleteApi(row.id).then(() => {
ElMessage.success('删除成功')
handleQuery()
})
}).catch(() => {})
}
```
### 11. 页面布局规范
```vue
<!-- 标准页面结构 -->
<template>
<div class="app-container">
<!-- 搜索区域 -->
<el-card shadow="never" class="search-wrapper">
<el-form>...</el-form>
</el-card>
<!-- 表格区域 -->
<el-card shadow="never" style="margin-top: 12px;">
<!-- 操作按钮 -->
<el-row :gutter="10" style="margin-bottom: 12px;">
<el-col :span="1.5">
<el-button type="primary" :icon="Plus">新增</el-button>
</el-col>
</el-row>
<!-- 表格 -->
<el-table>...</el-table>
<!-- 分页 -->
<el-pagination />
</el-card>
<!-- 弹窗 -->
<el-dialog>...</el-dialog>
</div>
</template>
<style scoped>
.app-container {
padding: 16px;
}
.search-wrapper {
margin-bottom: 0;
}
</style>
```
---
## 共享约定
### 1. 目录结构
```
src/
├── api/ # API接口定义
├── assets/styles/ # 全局样式
├── components/ # 公共组件
├── layout/ # 布局组件
├── mock/ # Mock数据
│ ├── index.js # Mock入口汇总所有mock
│ ├── user.js
│ ├── school.js
│ └── ...
├── router/ # 路由配置
├── store/ # Pinia Store
├── utils/ # 工具函数
└── views/ # 页面视图
```
### 2. API响应格式
```javascript
// 成功响应
{ code: 200, msg: '操作成功', data: { ... } }
// 分页响应
{ code: 200, msg: '查询成功', total: 100, rows: [ ... ] }
// 错误响应
{ code: 500, msg: '操作失败' }
```
### 3. Mock数据规范
```javascript
// mock/xxx.js 格式
import Mock from 'mockjs'
// GET请求用RegExp匹配URL
Mock.mock(/\/api\/xxx\/list/, 'get', (options) => {
return { code: 200, total: 100, rows: [...] }
})
// POST/PUT/DELETE用字符串匹配
Mock.mock('/api/xxx', 'post', { code: 200, msg: '新增成功' })
```
---
## Agent-1核心基础设施
```
你是一个Vue 3前端开发专家。请为"盘古用户平台"创建核心基础设施。
## 项目信息
- 项目路径:/Users/felix/pgWorkSpace/pangu-user-platform/frontend
- 技术栈Vue 3 + Vite + Element Plus + Pinia + Vue Router + MockJS
- 作者pangu
## 重要你是唯一需要启动dev server的Agent
完成开发后,执行 npm run dev 启动服务器端口3000并保持运行。
其他Agent会在你之后并行开发共享同一个项目。
## 编码规范
请严格遵守本文档"前端编码规范"章节的所有规范。
## 你的任务
### 1. 创建布局组件 src/layout/index.vue
- 左侧边栏可折叠展开200px折叠64px
- 顶部导航栏(显示用户信息、退出按钮)
- 右侧主内容区(<router-view>
### 2. 创建 src/layout/components/Sidebar.vue
菜单项:
- 首页 (icon: HomeFilled)
- 学校管理 (icon: School)
- 会员管理 (icon: User)
- 学生管理 (icon: UserFilled)
- 应用管理 (icon: Grid)
- 基础数据 (icon: Setting, 有子菜单)
- 年级管理
- 班级管理
- 学科管理
- 区域管理
### 3. 创建 src/layout/components/Navbar.vue
- 折叠按钮
- 面包屑导航
- 右侧:用户头像、昵称、下拉菜单(退出登录)
### 4. 创建Mock入口 src/mock/index.js
```javascript
import './user'
// 其他Agent会在此添加import
```
### 5. 创建用户Mock src/mock/user.js
- POST /api/login - 登录返回token
- GET /api/getInfo - 获取用户信息(返回用户名、头像、权限)
- POST /api/logout - 退出
### 6. 创建工具函数 src/utils/request.js
- 基于axios封装
- 请求拦截器添加Authorization头
- 响应拦截器处理code!=200的情况弹出错误提示
### 7. 创建首页 src/views/dashboard/index.vue
- 欢迎信息卡片
- 统计卡片学校数、会员数、学生数、应用数使用Mock数据
### 8. 确保 src/main.js 正确引入所有依赖
### 9. 确保 src/router/index.js 路由配置正确
## 设计参考
- 主题色:#409EFF
- 侧边栏背景:#304156
- 布局参考RuoYi-Vue
## 完成后
1. 运行 npm run dev 启动开发服务器
2. 确认 http://localhost:3000 可以正常访问
3. 保持服务器运行其他Agent会继续开发
```
---
## Agent-2登录页面
```
你是一个Vue 3前端开发专家。请为"盘古用户平台"创建登录页面。
## 项目信息
- 项目路径:/Users/felix/pgWorkSpace/pangu-user-platform/frontend
- 技术栈Vue 3 + Element Plus
- 作者pangu
## ⚠️ 重要不要启动dev server
Agent-1已经启动了开发服务器端口3000你只需创建文件。
完成后刷新浏览器即可看到效果Vite热更新
## 你只能操作这些文件
- src/views/login/index.vue新建
- src/views/login/其他组件(如需要)
## 编码规范
请严格遵守本文档"前端编码规范"章节的所有规范。
## 你的任务
### 1. 创建登录页面 src/views/login/index.vue
页面设计:
- 居中登录卡片宽度400px圆角8px阴影
- 背景:渐变色 linear-gradient(135deg, #667eea 0%, #764ba2 100%)
- 标题:盘古用户平台
- 副标题:统一用户管理系统
表单字段:
- 用户名el-input前缀图标Userplaceholder="请输入用户名"
- 密码el-input type="password"前缀图标Lockshow-password
- 验证码el-input + 右侧验证码图片,点击刷新)
- 记住密码el-checkbox
- 登录按钮el-button type="primary" 全宽高度40px
功能:
- 表单验证(用户名、密码、验证码必填)
- 点击验证码图片刷新
- 登录成功存储token跳转首页
- 登录失败显示错误提示
### 2. 验证码Mock在 src/mock/user.js 中添加)
- GET /api/captchaImage - 返回 { code: 200, img: 'base64图片', uuid: 'xxx' }
- 可以用Mock生成简单的文字验证码
### 3. 样式要求
- 登录卡片居中显示
- 响应式适配移动端
## Mock数据说明
调用接口:
- GET /api/captchaImage
- POST /api/login { username, password, code, uuid }
## 完成后
确保登录页面可以正常显示输入admin/admin123可以登录成功
```
---
## Agent-3学校管理
```
你是一个Vue 3前端开发专家。请为"盘古用户平台"创建学校管理模块。
## 项目信息
- 项目路径:/Users/felix/pgWorkSpace/pangu-user-platform/frontend
- 技术栈Vue 3 + Element Plus
- 作者pangu
- 原型参考https://modao.cc/proto/atlwMul8t9pi6yxQ42W7up/sharing
## ⚠️ 重要不要启动dev server
Agent-1已经启动了开发服务器端口3000你只需创建文件。
完成后刷新浏览器即可看到效果Vite热更新
## 你只能操作这些文件
- src/views/school/*(新建)
- src/api/school.js新建
- src/mock/school.js新建
- src/mock/index.js追加import './school'
## 编码规范
请严格遵守本文档"前端编码规范"章节的所有规范,特别是:
- 表格列必须指定宽度,避免右侧空白
- 使用min-width让名称列自适应
- 操作列fixed="right"
- 长文本使用show-overflow-tooltip
## 你的任务
### 1. 创建页面 src/views/school/index.vue
布局左右分栏使用el-row el-col
- 左侧span=6约250px区域树
- 右侧span=18学校列表
左侧区域树:
- 使用 el-tree带搜索过滤
- 数据:湖北省 > 武汉市 > 武昌区/汉口区/汉阳区...
- 点击节点筛选右侧表格
右侧列表:
- 搜索条件:学校名称(input)、状态(select)
- 表格字段(指定列宽):
- 名称 min-width="150" show-overflow-tooltip
- 类型 width="100"
- 所属区域 min-width="180" show-overflow-tooltip
- 状态 width="80" align="center"
- 创建时间 width="160"
- 创建人 width="100"
- 操作 width="200" fixed="right"
- 操作按钮:编辑、删除、新增年级、新增班级
- 分页
### 2. 创建弹窗 src/views/school/components/SchoolDialog.vue
- 新增/编辑学校
- 字段:学校名称(必填)、学校类型(下拉)、所属区域(级联)、状态(开关)
### 3. 创建弹窗 src/views/school/components/GradeDialog.vue
- 为学校新增年级
- 字段年级选择多选checkbox
### 4. 创建弹窗 src/views/school/components/ClassDialog.vue
- 为年级新增班级
- 字段班级选择多选checkbox
### 5. 创建API src/api/school.js
### 6. 创建Mock src/mock/school.js
区域树Mock数据
```javascript
const regionTree = [
{
regionId: 1, regionName: '湖北', children: [
{ regionId: 11, regionName: '武汉', children: [
{ regionId: 111, regionName: '武昌区' },
{ regionId: 112, regionName: '汉口区' },
{ regionId: 113, regionName: '汉阳区' },
{ regionId: 114, regionName: '江夏区' }
]},
{ regionId: 12, regionName: '黄冈', children: [
{ regionId: 121, regionName: '黄州区' },
{ regionId: 122, regionName: '红安县' }
]}
]
}
]
```
### 7. 在 src/mock/index.js 中添加 import './school'
## 完成后
确保页面可以正常展示左侧树点击可筛选CRUD功能正常
```
---
## Agent-4会员管理
```
你是一个Vue 3前端开发专家。请为"盘古用户平台"创建会员管理模块。
## 项目信息
- 项目路径:/Users/felix/pgWorkSpace/pangu-user-platform/frontend
- 技术栈Vue 3 + Element Plus
- 作者pangu
## ⚠️ 重要不要启动dev server
Agent-1已经启动了开发服务器端口3000你只需创建文件。
完成后刷新浏览器即可看到效果Vite热更新
## 你只能操作这些文件
- src/views/member/*(新建)
- src/api/member.js新建
- src/mock/member.js新建
- src/mock/index.js追加import './member'
## 编码规范
请严格遵守本文档"前端编码规范"章节的所有规范,特别是:
- 表格列必须指定宽度
- 手机号脱敏显示 138****5678
- 状态使用Tag组件
## 你的任务
### 1. 创建页面 src/views/member/index.vue
搜索条件:
- 手机号(input, width=150px)
- 昵称(input, width=150px)
- 身份类型(select: 全部/家长/教师, width=120px)
- 状态(select: 全部/正常/停用, width=100px)
- 注册时间(date-picker范围, width=240px)
表格字段(列宽):
- 会员编号 width="140"
- 手机号 width="120" (脱敏显示)
- 昵称 min-width="100"
- 性别 width="60" align="center"
- 出生日期 width="100"
- 身份类型 width="80" align="center" Tag
- 注册时间 width="160"
- 注册来源 width="80"
- 状态 width="70" align="center" Tag
- 操作 width="180" fixed="right"
操作按钮:编辑、重置密码、删除
### 2. 创建弹窗 src/views/member/components/MemberDialog.vue
字段:
- 手机号(必填)
- 昵称
- 性别radio男/女/未知)
- 出生日期date-picker
- 身份类型radio家长/教师)
- 当身份=教师时显示:区域、学校、年级、班级(级联)
- 状态switch
学生绑定区域(表格):
- 显示已绑定学生
- 添加/移除按钮
### 3. 创建弹窗 src/views/member/components/ResetPwdDialog.vue
- 显示新密码
- 复制按钮
### 4. 创建API src/api/member.js
### 5. 创建Mock src/mock/member.js
### 6. 在 src/mock/index.js 中添加 import './member'
## 完成后
确保页面可以正常展示和交互
```
---
## Agent-5学生管理
```
你是一个Vue 3前端开发专家。请为"盘古用户平台"创建学生管理模块。
## 项目信息
- 项目路径:/Users/felix/pgWorkSpace/pangu-user-platform/frontend
- 技术栈Vue 3 + Element Plus
- 作者pangu
## ⚠️ 重要不要启动dev server
Agent-1已经启动了开发服务器端口3000你只需创建文件。
完成后刷新浏览器即可看到效果Vite热更新
## 你只能操作这些文件
- src/views/student/*(新建)
- src/api/student.js新建
- src/mock/student.js新建
- src/mock/index.js追加import './student'
## 编码规范
请严格遵守本文档"前端编码规范"章节的所有规范。
## 你的任务
### 1. 创建页面 src/views/student/index.vue
布局(左右分栏):
- 左侧span=6学校树学校>年级>班级使用el-tree
- 右侧span=18学生列表
搜索条件:姓名、学号、性别、用户手机号、学科
表格字段(列宽):
- 姓名 min-width="80"
- 学号 width="100"
- 性别 width="60" align="center"
- 出生年月 width="100"
- 地区 min-width="150" show-overflow-tooltip
- 学校 min-width="140" show-overflow-tooltip
- 年级 width="80"
- 班级 width="60"
- 学科 width="60"
- 用户昵称 width="100"
- 用户手机号 width="120"(脱敏)
- 操作 width="120" fixed="right"
功能按钮:新增学生、批量导入
### 2. 创建弹窗 src/views/student/components/StudentDialog.vue
字段:姓名(必填)、学号、性别、出生日期、学校信息(级联,必填)、学科、归属用户
### 3. 创建弹窗 src/views/student/components/ImportDialog.vue
- 下载模板按钮
- 上传Excelel-upload
- 导入结果展示
### 4. 创建API src/api/student.js
### 5. 创建Mock src/mock/student.js
### 6. 在 src/mock/index.js 中添加 import './student'
## 完成后
确保页面可以正常展示和交互
```
---
## Agent-6应用管理
```
你是一个Vue 3前端开发专家。请为"盘古用户平台"创建应用管理模块。
## 项目信息
- 项目路径:/Users/felix/pgWorkSpace/pangu-user-platform/frontend
- 技术栈Vue 3 + Element Plus
- 作者pangu
## ⚠️ 重要不要启动dev server
Agent-1已经启动了开发服务器端口3000你只需创建文件。
完成后刷新浏览器即可看到效果Vite热更新
## 你只能操作这些文件
- src/views/application/*(新建)
- src/api/application.js新建
- src/mock/application.js新建
- src/mock/index.js追加import './application'
## 编码规范
请严格遵守本文档"前端编码规范"章节的所有规范。
## 你的任务
### 1. 创建页面 src/views/application/index.vue
搜索条件:应用名称、应用编码、状态
表格字段(列宽):
- 应用名称 min-width="150"
- 应用编码 width="120"
- 授权接口 min-width="250"多个用Tag展示show-overflow-tooltip
- 状态 width="80" align="center"
- 创建时间 width="160"
- 创建人 width="100"
- 操作 width="180" fixed="right"
操作按钮:编辑、重置密钥、删除
### 2. 创建弹窗 src/views/application/components/AppDialog.vue
字段:
- 应用名称(必填)
- 应用编码自动生成disabled
- 应用描述
- 联系人、联系电话
- 状态
- 接口授权checkbox-group
- 查询学生信息
- 查询学校信息
- 查询年级信息
- 查询班级信息
- 查询会员信息
- 查询区域树
### 3. 创建弹窗 src/views/application/components/SecretDialog.vue
- 显示密钥只读input
- 复制按钮
### 4. 创建API src/api/application.js
### 5. 创建Mock src/mock/application.js
### 6. 在 src/mock/index.js 中添加 import './application'
## 完成后
确保页面可以正常展示和交互
```
---
## Agent-7基础数据
```
你是一个Vue 3前端开发专家。请为"盘古用户平台"创建基础数据管理模块(年级/班级/学科/区域)。
## 项目信息
- 项目路径:/Users/felix/pgWorkSpace/pangu-user-platform/frontend
- 技术栈Vue 3 + Element Plus
- 作者pangu
## ⚠️ 重要不要启动dev server
Agent-1已经启动了开发服务器端口3000你只需创建文件。
完成后刷新浏览器即可看到效果Vite热更新
## 你只能操作这些文件
- src/views/base/*(新建)
- src/api/grade.js, class.js, subject.js, region.js新建
- src/mock/grade.js, class.js, subject.js, region.js新建
- src/mock/index.js追加import
## 编码规范
请严格遵守本文档"前端编码规范"章节的所有规范。
## 你的任务
这4个页面结构相似可以复用代码模式。
### 1. 年级管理 src/views/base/grade/index.vue
搜索:年级名称、状态
表格字段(列宽):
- 年级名称 min-width="150"
- 年级编码 width="120"
- 排序 width="80" align="center"
- 状态 width="80" align="center"
- 创建时间 width="160"
- 操作 width="150" fixed="right"
弹窗字段:年级名称(必填)、年级编码(自动生成)、排序、状态
### 2. 班级管理 src/views/base/class/index.vue
(结构同年级管理)
### 3. 学科管理 src/views/base/subject/index.vue
(结构同年级管理)
### 4. 区域管理 src/views/base/region/index.vue
特殊布局:
- 使用树形表格el-table + row-key + tree-props
- 展示省-市-区结构
- 操作:新增子区域、编辑、删除
### 5. 创建API
- src/api/grade.js
- src/api/class.js
- src/api/subject.js
- src/api/region.js
### 6. 创建Mock预置数据
- src/mock/grade.js一年级~六年级、七年级~九年级、高一~高三
- src/mock/class.js1班~10班
- src/mock/subject.js语文、数学、英语、物理、化学、生物、历史、地理、政治
- src/mock/region.js复用school.js的区域数据
### 7. 在 src/mock/index.js 中添加所有import
## 完成后
确保4个页面都可以正常展示和交互
```
---
## 执行指南
### 第一步启动Agent-1必须先完成
1. 开启新会话,复制本文档
2. 告诉Cursor`请完成Agent-1的任务`
3. Agent-1会创建文件并启动 `npm run dev`端口3000
4. **保持这个会话和服务器运行**
### 第二步并行启动Agent-2~7
1. 开启6个新会话
2. 每个会话复制本文档
3. 分别告诉Cursor
- `请完成Agent-2的任务`
- `请完成Agent-3的任务`
- ... 以此类推
### 关键规则
```
✅ Agent-1创建文件 + 启动dev server + 保持运行
✅ Agent-2~7只创建文件不启动server
✅ 验证方式刷新浏览器Vite自动热更新
❌ 错误每个Agent都启动npm run dev
```
### 完成后检查
1. 访问 http://localhost:3000 验证所有页面
2. 检查 `src/mock/index.js` 是否引入了所有mock文件
```javascript
import './user'
import './school'
import './member'
import './student'
import './application'
import './grade'
import './class'
import './subject'
import './region'
```
3. 检查各页面表格是否无右侧空白
4. 测试CRUD功能是否正常
---
*文档作者pangu*
*创建时间2026-01-31*