menu.ts 3.12 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
  component?: string
  isFrame?: number
  remark?: string
  level?: number
  createTime: string
  updateTime: string
  children?: Menu[]
}

export interface MenuSearchParams {
  menuName?: string
  menuType?: 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 menuApi = {
  // 获取菜单列表
  getMenuList: (params: MenuSearchParams): Promise<ApiResponse<PageResponse<Menu>>> => {
    return api.get('/api/system/menu/list', { params })
  },

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

  // 获取菜单详情
  getMenuById: (menuId: number): Promise<ApiResponse<Menu>> => {
    return api.get(`/api/system/menu/${menuId}`)
  },

  // 新增菜单
  createMenu: (menuData: any): Promise<ApiResponse<any>> => {
    return api.post('/api/system/menu', menuData)
  },

  // 修改菜单
  updateMenu: (menuData: any): Promise<ApiResponse<any>> => {
    return api.put('/api/system/menu', menuData)
  },

  // 删除菜单
  deleteMenu: (menuIds: number[]): Promise<ApiResponse<any>> => {
    return api.delete(`/api/system/menu/${menuIds.join(',')}`)
  },

  // 获取菜单下拉树选择
  getMenuTreeSelect: (): Promise<ApiResponse<Menu[]>> => {
    return api.get('/api/system/menu/treeselect')
  },

  // 根据角色ID获取菜单下拉树选择
  getMenuTreeSelectByRole: (roleId: number): Promise<ApiResponse<Menu[]>> => {
    return api.get(`/api/system/menu/roleMenuTreeselect/${roleId}`)
  }
}

export default menuApi