user.ts 4.44 KB
import axios from 'axios'

// API基础配置
const API_BASE_URL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:8083'

// 创建axios实例
const api = axios.create({
  baseURL: API_BASE_URL,
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器 - 添加token
api.interceptors.request.use(
  (config) => {
    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
  },
  (error) => {
    if (error.response?.status === 401) {
      // token过期,跳转到登录页
      localStorage.removeItem('token')
      localStorage.removeItem('userInfo')
      window.location.href = '/'
    }
    return Promise.reject(error)
  }
)

// 用户数据类型
export interface User {
  userId: number
  username: string
  realName: string
  phone: string
  email: string
  status: number
  statusText: string
  remark: string
  createBy: string
  createTime: string
  updateBy: string
  updateTime: string
  lastLoginTime: string | null
  lastLoginIp: string | null
  roles: Role[]
}

// 角色类型
export interface Role {
  roleId: number
  roleCode: string
  roleName: string
  status: number
  statusText: string
  remark: string
  createBy: string
  createTime: string
  updateBy: string
  updateTime: string
  menus: any
}

// 搜索参数类型
export interface UserSearchParams {
  username?: string
  phone?: string
  status?: number
  startTime?: string
  endTime?: string
  page?: number
  pageSize?: number
}

// 用户表单类型
export interface UserForm {
  userId?: number
  username: string
  realName: string
  phone: string
  email: string
  status: number
  remark: string
  roleIds: number[]
  password?: string
}

// API响应类型
export interface ApiResponse<T> {
  code: number
  message: string
  data: T
}

// 分页响应类型
export interface PageResponse<T> {
  records: T[]
  total: number
  size: number
  current: number
  orders: any[]
  optimizeCountSql: boolean
  searchCount: boolean
  maxLimit: any
  countId: any
  pages: number
}

// 用户API接口
export const userApi = {
  // 获取用户列表
  getUserList: async (params: UserSearchParams = {}) => {
    try {
      const response = await api.get<ApiResponse<PageResponse<User>>>('/api/system/user/list', { params })
      return response.data
    } catch (error) {
      console.error('获取用户列表失败:', error)
      throw error
    }
  },

  // 获取用户详情
  getUserById: async (id: number) => {
    try {
      const response = await api.get<ApiResponse<User>>(`/api/system/user/${id}`)
      return response.data
    } catch (error) {
      console.error('获取用户详情失败:', error)
      throw error
    }
  },

  // 创建用户
  createUser: async (userData: UserForm) => {
    try {
      const response = await api.post<ApiResponse<User>>('/api/system/user/add', userData)
      return response.data
    } catch (error) {
      console.error('创建用户失败:', error)
      throw error
    }
  },

  // 更新用户
  updateUser: async (id: number, userData: UserForm) => {
    try {
      const response = await api.post<ApiResponse<User>>('/api/system/user/edit', userData)
      return response.data
    } catch (error) {
      console.error('更新用户失败:', error)
      throw error
    }
  },

  // 删除用户(单个或批量)
  deleteUser: async (id: number) => {
    try {
      const response = await api.delete<ApiResponse<void>>(`/api/system/user/${id}`)
      return response.data
    } catch (error) {
      console.error('删除用户失败:', error)
      throw error
    }
  },

  // 批量删除用户
  batchDeleteUsers: async (ids: number[]) => {
    try {
      const response = await api.delete<ApiResponse<void>>(`/api/system/user/${ids.join(',')}`)
      return response.data
    } catch (error) {
      console.error('批量删除用户失败:', error)
      throw error
    }
  },

  // 更新用户状态
  updateUserStatus: async (id: number, status: number) => {
    try {
      const response = await api.post<ApiResponse<void>>('/api/system/user/changeStatus', { 
        userId: id, 
        status: status 
      })
      return response.data
    } catch (error) {
      console.error('更新用户状态失败:', error)
      throw error
    }
  },

}

export default userApi