Phase 1 #20 #23: 通用模块 + Vue3 前端框架搭建

#20 通用模块:
- MinioService: MinIO 文件上传/下载/桶管理
- @DataScope 注解: 数据权限切片
- ExcelUtils: EasyExcel 导出
- IdUtils: Snowflake ID 生成器
- BaseEntity: MyBatis-Plus 基础实体

#23 前端框架:
- Vue3 + TypeScript + Vite + Element Plus + ECharts + Pinia
- 路由系统: 登录守卫 + 动态路由
- 登录页: 渐变背景 + Axios+Sa-Token 认证
- 仪表盘: 统计卡片 + 供水趋势折线图 + 片区饼图
- MainLayout: 侧边栏菜单 + 顶栏用户下拉(退出)
- API 层: Axios 请求/响应拦截器 + Token 自动注入
- 系统管理骨架: 用户/角色/菜单/部门 列表页
This commit is contained in:
bot_pm
2026-06-14 13:17:40 +08:00
parent 9a7e0481ef
commit 575b2138c1
24 changed files with 538 additions and 0 deletions
+13
View File
@@ -0,0 +1,13 @@
import request from './request'
export function login(username: string, password: string) {
return request.post('/base/auth/login', { username, password })
}
export function getUserInfo() {
return request.get('/base/auth/user-info')
}
export function logout() {
return request.post('/base/auth/logout')
}
+21
View File
@@ -0,0 +1,21 @@
import axios from 'axios'
import { ElMessage } from 'element-plus'
const request = axios.create({ baseURL: '/api', timeout: 15000 })
request.interceptors.request.use(config => {
const token = localStorage.getItem('token')
if (token) config.headers.Authorization = token
return config
})
request.interceptors.response.use(
res => {
const data = res.data
if (data.code !== 200) { ElMessage.error(data.message); return Promise.reject(data) }
return data
},
err => { ElMessage.error(err.message); return Promise.reject(err) }
)
export default request