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

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