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.
270 lines
6.0 KiB
270 lines
6.0 KiB
import axios from 'axios' |
|
|
|
// 配置axios基础URL |
|
import { getFinalConfig } from '../../../../config/app.config.js'; |
|
|
|
const getApiBaseUrl = () => getFinalConfig().apiBaseUrl; |
|
|
|
// 创建axios实例 |
|
const api = axios.create({ |
|
baseURL: getApiBaseUrl(), |
|
timeout: 10000, |
|
headers: { |
|
'Content-Type': 'application/json' |
|
} |
|
}) |
|
|
|
// 请求拦截器 |
|
api.interceptors.request.use( |
|
config => { |
|
// 可以在这里添加token等认证信息 |
|
const token = localStorage.getItem('token') |
|
if (token) { |
|
config.headers.Authorization = `Bearer ${token}` |
|
} |
|
return config |
|
}, |
|
error => { |
|
return Promise.reject(error) |
|
} |
|
) |
|
|
|
// 响应拦截器 |
|
api.interceptors.response.use( |
|
response => { |
|
return response.data |
|
}, |
|
error => { |
|
console.error('API请求错误:', error) |
|
// 直接返回错误对象,让组件处理具体的错误信息 |
|
return Promise.reject(error) |
|
} |
|
) |
|
|
|
export const userService = { |
|
// 获取用户列表 |
|
async getUsers(page = 1, pageSize = 10) { |
|
try { |
|
const response = await api.get('/auth/admin/users', { |
|
params: { page, pageSize } |
|
}) |
|
return response |
|
} catch (error) { |
|
throw error |
|
} |
|
}, |
|
|
|
// 获取单个用户 |
|
async getUser(id) { |
|
try { |
|
const response = await api.get(`/auth/admin/users/${id}`) |
|
return response |
|
} catch (error) { |
|
throw error |
|
} |
|
}, |
|
|
|
// 创建用户 |
|
async createUser(userData) { |
|
try { |
|
const response = await api.post('/auth/admin/users', userData) |
|
return response |
|
} catch (error) { |
|
throw error |
|
} |
|
}, |
|
|
|
// 更新用户 |
|
async updateUser(id, userData) { |
|
try { |
|
const response = await api.put(`/auth/admin/users/${id}`, userData) |
|
return response |
|
} catch (error) { |
|
throw error |
|
} |
|
}, |
|
|
|
// 删除用户 |
|
async deleteUser(id) { |
|
try { |
|
await api.delete(`/auth/admin/users/${id}`) |
|
return true |
|
} catch (error) { |
|
throw error |
|
} |
|
}, |
|
|
|
// 获取角色列表 |
|
async getRoles() { |
|
try { |
|
const response = await api.get('/auth/admin/roles') |
|
return response |
|
} catch (error) { |
|
throw error |
|
} |
|
}, |
|
|
|
// 修改密码 |
|
async changePassword(passwordData) { |
|
try { |
|
const response = await api.post('/auth/change-password', passwordData) |
|
return response |
|
} catch (error) { |
|
throw error |
|
} |
|
}, |
|
|
|
// 获取密码策略 |
|
async getPasswordPolicy() { |
|
try { |
|
const response = await api.get('/auth/password-policy') |
|
return response |
|
} catch (error) { |
|
throw error |
|
} |
|
}, |
|
|
|
// 验证密码强度 |
|
async validatePassword(password) { |
|
try { |
|
const response = await api.post('/auth/validate-password', { password }) |
|
return response |
|
} catch (error) { |
|
throw error |
|
} |
|
}, |
|
|
|
// 检查密码状态 |
|
async checkPasswordStatus() { |
|
try { |
|
const response = await api.get('/auth/password-status') |
|
return response |
|
} catch (error) { |
|
throw error |
|
} |
|
}, |
|
|
|
// 获取权限列表 |
|
async getPermissions() { |
|
try { |
|
const response = await api.get('/permissions') |
|
return response |
|
} catch (error) { |
|
throw error |
|
} |
|
}, |
|
|
|
// 获取验证码 |
|
async getCaptcha() { |
|
try { |
|
const response = await api.get('/auth/captcha') |
|
return response |
|
} catch (error) { |
|
throw error |
|
} |
|
}, |
|
|
|
// 用户登录 |
|
async login(credentials) { |
|
try { |
|
// 确保credentials包含client_ip |
|
const loginData = { |
|
username: credentials.username, |
|
password: credentials.password, |
|
captcha: credentials.captcha, |
|
captcha_id: credentials.captcha_id, |
|
client_ip: credentials.client_ip || '127.0.0.1' // 默认IP |
|
} |
|
|
|
const response = await api.post('/auth/login', loginData) |
|
|
|
// 只保存token,用户信息由MainLayout处理 |
|
if (response.token) { |
|
localStorage.setItem('token', response.token) |
|
localStorage.setItem('isLoggedIn', 'true') |
|
} |
|
|
|
return response |
|
} catch (error) { |
|
throw error |
|
} |
|
}, |
|
|
|
// 用户登出 |
|
async logout(token) { |
|
try { |
|
if (token) { |
|
// 使用传入的token调用登出接口,发送token到请求体 |
|
await api.post('/auth/logout', { token: token }, { |
|
headers: { |
|
'Authorization': `Bearer ${token}` |
|
} |
|
}) |
|
} else { |
|
// 如果没有传入token,从localStorage获取并使用 |
|
const storedToken = localStorage.getItem('token') |
|
if (storedToken) { |
|
await api.post('/auth/logout', { token: storedToken }, { |
|
headers: { |
|
'Authorization': `Bearer ${storedToken}` |
|
} |
|
}) |
|
} else { |
|
// 如果没有token,直接调用登出接口(后端会处理) |
|
await api.post('/auth/logout', { token: '' }) |
|
} |
|
} |
|
|
|
// 完全清理本地存储的认证信息 |
|
localStorage.removeItem('token') |
|
localStorage.removeItem('user') |
|
localStorage.removeItem('isLoggedIn') |
|
|
|
return true |
|
} catch (error) { |
|
throw error |
|
} |
|
}, |
|
|
|
// 获取当前用户信息 |
|
async getCurrentUser(token = null) { |
|
try { |
|
// 如果传入了token,使用传入的token;否则使用localStorage中的token |
|
const authToken = token || localStorage.getItem('token') |
|
if (!authToken) { |
|
throw new Error('未找到认证token') |
|
} |
|
|
|
const response = await api.get('/auth/userinfo', { |
|
headers: { |
|
'Authorization': `Bearer ${authToken}` |
|
} |
|
}) |
|
return response |
|
} catch (error) { |
|
throw error |
|
} |
|
}, |
|
|
|
// 修改密码 |
|
async changePassword(passwordData) { |
|
try { |
|
const response = await api.post('/auth/change-password', passwordData) |
|
return response |
|
} catch (error) { |
|
throw error |
|
} |
|
}, |
|
|
|
// 重置密码 |
|
async resetPassword(email) { |
|
try { |
|
const response = await api.post('/auth/reset-password', { email }) |
|
return response |
|
} catch (error) { |
|
throw error |
|
} |
|
} |
|
} |
|
|
|
export default userService
|
|
|