diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..59802bd --- /dev/null +++ b/.env.development @@ -0,0 +1,11 @@ +# 开发环境配置 +NODE_ENV=development + +# 后端API基础地址(代理用) +VITE_API_BASE_URL=/api + +# 系统名称 +VITE_APP_TITLE=后台管理系统(开发版) + +# 是否开启mock数据 +VITE_USE_MOCK=true diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..ed3ba0f --- /dev/null +++ b/.env.production @@ -0,0 +1,11 @@ +# 生产环境配置 +NODE_ENV=production + +# 后端API基础地址 +VITE_API_BASE_URL=https://api.example.com + +# 系统名称 +VITE_APP_TITLE=后台管理系统 + +# 是否开启mock数据 +VITE_USE_MOCK=false diff --git a/.env.test b/.env.test new file mode 100644 index 0000000..836e3ba --- /dev/null +++ b/.env.test @@ -0,0 +1,11 @@ +# 测试环境配置 +NODE_ENV=production + +# 后端API基础地址 +VITE_API_BASE_URL=http://test-api.example.com + +# 系统名称 +VITE_APP_TITLE=后台管理系统(测试版) + +# 是否开启mock数据 +VITE_USE_MOCK=false diff --git a/src/api/index.ts b/src/api/index.ts new file mode 100644 index 0000000..2fefdf5 --- /dev/null +++ b/src/api/index.ts @@ -0,0 +1,4 @@ +// API 统一出口 +export * from './system/loginApi' +export * from './system/menuApi' +export * from './user/userApi' diff --git a/src/api/request.ts b/src/api/request.ts index a1a2182..735d566 100644 --- a/src/api/request.ts +++ b/src/api/request.ts @@ -14,8 +14,11 @@ request.interceptors.request.use( (config) => { const userStore = useUserStore() if (userStore.token) { - config.headers.Authorization = `Bearer ${userStore.token}` + config.headers.token = userStore.token } + // 删除 Cookie 和 Authorization + delete config.headers.Cookie + delete config.headers.Authorization return config }, (error) => { @@ -26,11 +29,12 @@ request.interceptors.request.use( request.interceptors.response.use( (response: AxiosResponse) => { const { data } = response - if (data.code !== 200) { - ElMessage.error(data.message || '请求失败') - return Promise.reject(new Error(data.message)) + // code 为 0 或 200 表示成功 + if (data.code !== 0 && data.code !== 200) { + ElMessage.error(data.msg || '请求失败') + return Promise.reject(new Error(data.msg || '请求失败')) } - return data + return data.data }, (error) => { const { response } = error @@ -39,7 +43,7 @@ request.interceptors.response.use( userStore.clearUser() window.location.href = '/login' } - ElMessage.error(response?.data?.message || '网络错误') + ElMessage.error(response?.data?.msg || '网络错误') return Promise.reject(error) } ) diff --git a/src/api/system/loginApi.ts b/src/api/system/loginApi.ts new file mode 100644 index 0000000..148d7e5 --- /dev/null +++ b/src/api/system/loginApi.ts @@ -0,0 +1,24 @@ +import request from '../request' + +// 登录接口 +export function login(data: { username: string; password: string; captcha: string; uuid: string }) { + return request({ + url: '/login', + method: 'post', + data, + }) +} + +// 获取验证码 +export function getCaptchaUrl(uuid: string) { + const baseUrl = import.meta.env.VITE_API_BASE_URL || '/api' + return `${baseUrl}/captcha?uuid=${uuid}&t=${Date.now()}` +} + +// 退出登录 +export function logout() { + return request({ + url: '/sys/logout', + method: 'post', + }) +} diff --git a/src/api/system/menuApi.ts b/src/api/system/menuApi.ts new file mode 100644 index 0000000..53fdf43 --- /dev/null +++ b/src/api/system/menuApi.ts @@ -0,0 +1,9 @@ +import request from '../request' + +// 获取动态菜单 +export function getNavMenu() { + return request({ + url: '/sys/menu/nav', + method: 'get', + }) +} diff --git a/src/api/user/userApi.ts b/src/api/user/userApi.ts new file mode 100644 index 0000000..ef2f26e --- /dev/null +++ b/src/api/user/userApi.ts @@ -0,0 +1,45 @@ +import request from '../request' + +// 获取用户信息 +export function getUserInfo() { + return request({ + url: '/sys/user/info', + method: 'get', + }) +} + +// 获取用户列表 +export function getUserList(params: { page: number; limit: number; username?: string }) { + return request({ + url: '/sys/user/list', + method: 'get', + params, + }) +} + +// 新增用户 +export function addUser(data: Record) { + return request({ + url: '/sys/user/save', + method: 'post', + data, + }) +} + +// 修改用户 +export function updateUser(data: Record) { + return request({ + url: '/sys/user/update', + method: 'post', + data, + }) +} + +// 删除用户 +export function deleteUser(ids: number[]) { + return request({ + url: '/sys/user/delete', + method: 'post', + data: ids, + }) +} diff --git a/src/api/userApi.ts b/src/api/userApi.ts deleted file mode 100644 index 2b2bf6b..0000000 --- a/src/api/userApi.ts +++ /dev/null @@ -1,23 +0,0 @@ -import request from './request' - -export interface LoginParams { - username: string - password: string -} - -export interface LoginResult { - token: string - userInfo: Record -} - -export function login(data: LoginParams) { - return request.post('/user/login', data) -} - -export function getUserInfo() { - return request.get('/user/info') -} - -export function logout() { - return request.post('/user/logout') -} diff --git a/src/layouts/MainLayout.vue b/src/layouts/MainLayout.vue index 32c5d57..e43756b 100644 --- a/src/layouts/MainLayout.vue +++ b/src/layouts/MainLayout.vue @@ -1,7 +1,9 @@ + + diff --git a/src/views/home/index.vue b/src/views/home/index.vue index a24d661..b145554 100644 --- a/src/views/home/index.vue +++ b/src/views/home/index.vue @@ -1,5 +1,5 @@ - - diff --git a/vite.config.ts b/vite.config.ts index 1071f07..c27a92d 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -13,5 +13,12 @@ export default defineConfig({ server: { port: 3000, open: true, + proxy: { + '/api': { + target: 'http://localhost:8080/', + changeOrigin: true, + rewrite: (path) => path.replace(/^\/api/, ''), + }, + }, }, })