role.ts 3.61 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'
  }
})

console.log('角色API实例创建,baseURL:', API_BASE_URL)

// 请求拦截器 - 添加token
api.interceptors.request.use(
  (config) => {
    console.log('角色API请求:', {
      url: config.url,
      baseURL: config.baseURL,
      method: config.method,
      params: config.params,
      fullURL: `${config.baseURL}${config.url}`
    })
    
    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 interface Menu {
  menuId: number
  parentId?: number
  menuName: string
  menuType: string
  menuTypeText: string
  path?: string
  icon?: string
  sort: number
  status: number
  statusText: string
  perms?: string
  createTime: string
  updateTime: string
  children?: Menu[]
}

// 角色接口类型定义
export interface Role {
  roleId: number
  roleCode: string
  roleName: string
  status: number
  statusText: string
  remark: string
  createTime: string
  updateTime: string
  menuIds?: number[]
  menus?: Menu[]
}

export interface RoleSearchParams {
  roleCode?: string
  roleName?: string
  status?: number
  pageNum?: number
  pageSize?: number
}

export interface ApiResponse<T = any> {
  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 roleApi = {
  // 获取角色列表
  getRoleList: (params?: RoleSearchParams): Promise<ApiResponse<PageResponse<Role>>> => {
    return api.get('/api/system/role/list', { params })
  },

  // 获取所有角色(不分页,用于下拉选择)
  getAllRoles: (): Promise<ApiResponse<Role[]>> => {
    return api.get('/api/system/role/list', { 
      params: { status: 1, pageSize: 9999 } 
    })
  },

  // 根据ID获取角色详情
  getRoleById: (roleId: number): Promise<ApiResponse<Role>> => {
    return api.get(`/api/system/role/${roleId}`)
  },

  // 创建角色
  createRole: (roleData: any): Promise<ApiResponse<any>> => {
    return api.post('/api/system/role/add', roleData)
  },

  // 更新角色
  updateRole: (roleData: any): Promise<ApiResponse<any>> => {
    return api.post('/api/system/role/edit', roleData)
  },

  // 删除角色(单个或批量)
  deleteRole: (roleIds: number[]): Promise<ApiResponse<any>> => {
    return api.delete(`/api/system/role/${roleIds.join(',')}`)
  },

  // 更新角色状态
  updateRoleStatus: (roleId: number, status: number): Promise<ApiResponse<any>> => {
    return api.post('/api/system/role/changeStatus', { 
      roleId: roleId, 
      status: status 
    })
  },

  // 获取菜单树列表
  getMenuTree: (): Promise<ApiResponse<Menu[]>> => {
    return api.get('/api/system/menu/tree')
  },

  // 测试角色列表接口参数格式
  testRoleListParams: (): RoleSearchParams => {
    return {
      roleCode: "",
      roleName: "",
      status: 1, // 默认获取有效角色
      pageNum: 1,
      pageSize: 9999 // 获取全部有效角色
    }
  }
}