|
|
|
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
|