# edu-agent-front
**Repository Path**: Guqier/edu-agent-front
## Basic Information
- **Project Name**: edu-agent-front
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-04-28
- **Last Updated**: 2026-04-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# AAWebFront - Vue 3 + Typescript Web前端
一个基于 Vue 3 + Vite + TypeScript 的前端项目,集成 Naive UI、Pinia、Vue Router、UnoCSS、Axios、ECharts 等,用于构建实训/教学管理相关的 Web 界面。
### 技术栈
- **框架**: Vue 3 (Composition API, SFC)
- **构建工具**: Vite 4
- **语言**: TypeScript
- **路由**: Vue Router 4(基于 `createWebHistory('/')`)
- **状态管理**: Pinia
- **UI 组件**: Naive UI
- **样式**: UnoCSS、Sass、animate.css
- **数据请求**: Axios(拦截器、统一错误码处理)
- **图表**: ECharts
- **工具**: dayjs、xlsx
## 环境要求
- Node.js 16+(推荐 18 LTS)
- 包管理器:npm(仓库包含 `package-lock.json`)
## 快速开始
1. 安装依赖
```bash
npm install
```
2. 新建开发环境变量文件 `.env.development`
```bash
VITE_TITLE=管理系统
VITE_BASE_API=/api/pc
```
3. 启动开发服务器
```bash
npm run dev
```
4. 生产构建与本地预览
```bash
npm run build
npm run preview
```
## 环境变量
- `VITE_TITLE`: 页面标题,注入到 `index.html` 的 `
` 模板中
- `VITE_BASE_API`: Axios 实例的 `baseURL`,开发环境通常设置为 `/api/pc`
说明:`vite.config.ts` 已配置了开发代理,将以 `/api/pc` 开头的请求代理到后端并去除前缀。
```ts
// vite.config.ts 节选
server: {
proxy: {
'/api/pc': {
// 根据需要改为你的后端地址
target: 'http://localhost:8080/api/pc',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api\/pc/, ''),
},
},
},
```
## NPM 脚本
- `npm run dev`: 启动开发服务器
- `npm run build`: 类型检查(`vue-tsc`)并构建生产包
- `npm run preview`: 预览构建产物
## 项目结构
```txt
.
├─ src/
│ ├─ api/ # 接口封装(Axios 基于统一实例)
│ ├─ components/ # 通用与业务组件
│ ├─ layout/ # 布局相关
│ ├─ router/ # 路由、守卫与动态路由装配
│ ├─ store/ # Pinia 状态(用户、权限、应用等)
│ ├─ styles/ # 全局样式(reset.css、global.scss)
│ ├─ types/ # TS 类型(Route.Row、User、Page 等)
│ ├─ utils/ # 工具库(storage/auth/request/common)
│ ├─ views/ # 页面模块(login、workbench、sys-manage 等)
│ ├─ App.vue # 根组件(Naive UI Provider 注入)
│ └─ main.ts # 应用入口(Pinia/Router 装配)
├─ public/ # 静态资源(favicon、loading)
├─ index.html # HTML 模板(使用 VITE_TITLE)
├─ vite.config.ts # Vite 配置(别名、插件、代理、构建)
├─ unocss.config.ts # UnoCSS 配置与快捷类
├─ tsconfig*.json # TypeScript 配置
└─ package.json
```
## 路由与权限
- 基础路由位于 `src/router/routes/index.ts` 的 `basicRoutes`,含 `/login`、`/404` 等。
- 项目采用 `createWebHistory('/')`,部署于根路径。如果部署到子路径,请同步调整:
- Router history 基础路径
- Vite `base`(`defineConfig({ base: '/子路径/' })`)
- 动态路由:登录成功后,会根据权限生成路由并通过 `router.addRoute` 挂载。
- 扫描规则:会自动扫描 `views/**/route.ts` 并汇总为异步路由。
## 身份认证与会话
- Token 存储:本地存储键为 `access_token`,默认有效期 12 小时。
- 请求头:`Authorization: Token `(在请求拦截器中自动注入)。
- Token 刷新:`/auth/refresh`,在过期前半段后尝试刷新;失败则跳转登录。
- 返回码约定:接口成功码为 `code === 1`,其他情况会通过全局消息提示;
- `201/202/204/206` 等会触发登出并重定向至登录。
## 请求封装(Axios)
- 统一实例位于 `src/utils/request/index.ts`,`baseURL` 读取 `VITE_BASE_API`。
- 开箱方法:`request.get/post/put/delete`,返回统一的 `{ code, message, data }` 结构。
- GET/DELETE:若携带 `params`,会自动拼接为查询字符串(含数组/对象展开)。
示例:
```ts
// src/api/authApi.ts
login: (loginInfo) => request.post('/auth/login', loginInfo)
```
## 样式与 UI
- UnoCSS:已启用 `presetUno` 与 `presetAttributify`,同时配置了常用快捷类与自定义规则(见 `unocss.config.ts`)。
- 全局样式:`src/styles/reset.css`、`src/styles/global.scss`(通过 Vite `additionalData` 自动注入)。
- 动画:`animate.css`;UI 组件库:`Naive UI`(在 `App.vue` 挂载 Provider)。
## 构建与部署
1. 构建产物
```bash
npm run build
```
2. 产物位置:默认输出到 `dist/`,可部署到任意静态服务器(Nginx、Apache、Netlify 等)。
3. 路由模式为 History:生产环境请确保后端/网关做了 HTML5 History 路由回退(将未知路径重写到 `index.html`)。
4. 接口地址:
- 方案 A(推荐开发):保持 `VITE_BASE_API=/api/pc`,使用 Vite 代理;生产由网关同样配置 `/api/pc` 反向代理。
- 方案 B:将 `VITE_BASE_API` 配置为完整后端地址(如 `https://your-domain.com/api/pc`),并在生产禁用前端代理。
## 常见问题
- 登录后白屏或无限跳转:
- 检查 `VITE_BASE_API` 是否正确;
- 后端 `/auth/login` 是否可达并返回 `code === 1`;
- 浏览器是否禁用了本地存储或三方 Cookie(已开启 `withCredentials`)。
- 接口 404:
- 开发环境检查 Vite 代理与 `VITE_BASE_API` 前缀是否一致;
- 生产环境检查网关反向代理与跨域配置。
- 路由 404(部署后刷新丢失):
- 配置服务端将未知路由回退到 `index.html`(History 模式所需)。
## 许可证
本仓库未显式声明开源许可证,如需开源请自行添加 `LICENSE` 并在此处说明。