You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

160 lines
4.6 KiB

2 weeks ago
---
name: "vue3-admin"
description: "生成并规范化一个基于 Vue3 + TypeScript 的后台管理系统工程结构与基础模块。"
---
## 📝 代码规范
完整的 TypeScript 类型定义
代码符合 ESLint + Prettier 规范
.vscode/settings.json实现保存自动格式化
## 设计规范(与 HTML 原型一致)
管理端视觉以 **主色 `#B11E23`**、深红悬停 `**#8B1519**` 为准,与后端仓库内静态原型 `public/slake/frontend/prototype/css/prototype.css` 及《UI 原型说明》一致。Vue 工程主题集中在 `**src/assets/theme-slake.css**`Element Plus 主色链 + `--slake-*` 变量),请勿在业务页随意引入与品牌冲突的强调色。
**全站列表页与操作区样式**页头布局、筛选区、14px/12px 字号、状态色、操作列描边按钮等)以 **`docs/管理后台UI规范.md`** 为准;课程管理为首个落地样例(`src/views/operations/courses/index.vue`)。
## 技术栈
Vue 3.4 + TypeScript 5
Vite 5 构建工具
Pinia 状态管理
Vue Router 4 路由
Element Plus UI
Axios 请求封装
## 功能模块
用户登录/登出Token 认证)
角色管理(**首期仅菜单分配**;接口级 permission 二期扩展)
菜单管理(动态路由)
数据字典(每一条字典下有多个值,多用于作为下拉选项)
操作日志(列表模式,包含(操作人、操作时间、接口、操作项)
系统设置
页面结构
顶部导航栏(左侧项目名称、右侧用户信息、退出登陆)
左侧侧边栏(多级菜单、可折叠菜单)
额外要求
响应式布局,支持移动端
深色/浅色主题切换
路由权限控制(首期:按角色菜单生成侧栏与动态路由)
请求拦截和响应拦截
实现性能优化
支持本地node服务请求数据
### 功能细则
1 路由权限控制:
```
1.1菜单权限:
菜单权限控制即用户登录后只能看到自己权限范围内的菜单不能看到其他菜单。给单个路由的meta添加roles属性roles是一个数组数组元素是角色名。比如[radmin','user'],菜单权限控制只对动态菜单有效。菜单由静态菜单+动态菜单组合生成最后的菜单。动态菜单根据用户角色权限进行过滤。至少有3个页面用来区分
不同角色登录后显示不同菜单效果
首期建议:已实现「角色 → 菜单」即可;以下为二期增强(接口与按钮对齐 permission code
1.2按钮权限:
根据用户权限,对按钮进行权限控制。采用给按钮添加权限指令的方式.
要求实现两个指令v-permission和v-role。
1.2.1 v-permissio按权限码permission code控制显示
单个权限: v-permission="'settings:edit'"
多个权限AND 关系,必须全部满足才显示): v-permission="['user:create','user:delete']"
1.2.2 v-role按“角色”控制显示
v-role="'admin'" 或 v-role="['admin']"
1.3 理论上支持菜单无限极拓展
左侧菜单栏至少出现一个包含多级菜单的菜单(以三级菜单为例),用来模拟支持菜单无限极功能
```
2 http请求
基于axios封装实现考虑前端引入多个服务场景支持多个服务联调。每个服务有自己的baseURL、timeout、headers等配置。
要求在vite.config.ts中proxy配置多个服务通过请求本地node服务测试接口
3 性能优化:
打包工具与代码层面等多个组合实现高性能优化
4 本地node服务
本地生成node服务mock数据实现本地联调实现vite.config.ts中proxy代理和正常http请求;
需要至少生成两个node服务提供前端进行真实请求模拟多个服务场景并提供mock数据
5 支持多环境打包
6 支持多语言拓展
### 组件规范
- ✅ 使用 `<script setup lang="ts">` 语法糖
- ✅ 组件命名采用 PascalCaseUserTable.vue
- ✅ 优先使用 Composition API
- ✅ 所有 props 必须定义 TypeScript 类型
### 命名规范
- 组件PascalCaseUserList.vue
- 文件kebab-caseuser-list.vue
- 变量/函数camelCaseuserInfo, getUserData
- 常量UPPER_SNAKE_CASEMAX_RETRY_COUNT
### 禁止行为
- ❌ 不要使用 Options API
- ❌ 不要使用 any 类型
- ❌ 不要直接操作 DOM
- ❌ 不要在组件内硬编码 API 地址
## 🎨 UI 规范
### Element Plus 使用
- 按需导入组件
- 使用 ElTable、ElForm 等标准组件
- 表单验证使用 async-validator
### 响应式布局
- 使用 ElContainer 布局
- 移动端适配使用 @media 查询
- 最小宽度 1200px