dict.ts 4.37 KB
import axios from 'axios'

const API_BASE_URL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:8083'

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

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.data
  },
  (error) => {
    console.error('API请求错误:', error)
    return Promise.reject(error)
  }
)

export interface DictType {
  dictTypeId: number
  dictType: string
  dictName: string
  status: number
  statusText: string
  remark?: string
  createBy?: string
  createTime: string
  updateBy?: string
  updateTime: string
}

export interface DictItem {
  dictItemId: number
  dictTypeId: number
  dictType: string
  dictLabel: string
  dictValue: string
  sort: number
  remark?: string
  createBy?: string
  createTime: string
  updateBy?: string
  updateTime: string
}

export interface DictTypeSearchParams {
  dictType?: string
  dictName?: string
  status?: number
  pageNum?: number
  pageSize?: number
}

export interface DictItemSearchParams {
  dictTypeId?: number
  dictLabel?: string
  dictValue?: string
  pageNum?: number
  pageSize?: number
}

export interface DictTypeAddReq {
  dictType: string
  dictName: string
  status: number
  remark?: string
}

export interface DictTypeUpdateReq extends DictTypeAddReq {
  dictTypeId: number
}

export interface DictItemAddReq {
  dictTypeId: number
  dictLabel: string
  dictValue: string
  sort?: number
  remark?: string
}

export interface DictItemUpdateReq extends DictItemAddReq {
  dictItemId: 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
}

export const dictApi = {
  // 字典类型管理
  // 获取字典类型列表
  getDictTypes: (params: DictTypeSearchParams): Promise<ApiResponse<PageResponse<DictType>>> => {
    return api.get('/api/system/dict/type/list', { params })
  },

  // 获取字典类型详情
  getDictTypeById: (dictTypeId: number): Promise<ApiResponse<DictType>> => {
    return api.get(`/api/system/dict/type/${dictTypeId}`)
  },

  // 新增字典类型
  createDictType: (dictTypeData: DictTypeAddReq): Promise<ApiResponse<any>> => {
    return api.post('/api/system/dict/type', dictTypeData)
  },

  // 修改字典类型
  updateDictType: (dictTypeData: DictTypeUpdateReq): Promise<ApiResponse<any>> => {
    return api.put('/api/system/dict/type', dictTypeData)
  },

  // 删除字典类型
  deleteDictTypes: (dictTypeIds: number[]): Promise<ApiResponse<any>> => {
    return api.delete(`/api/system/dict/type/${dictTypeIds.join(',')}`)
  },

  // 获取字典类型选择框列表
  getDictTypeOptions: (): Promise<ApiResponse<DictType[]>> => {
    return api.get('/api/system/dict/type/optionselect')
  },

  // 刷新字典缓存
  refreshDictCache: (): Promise<ApiResponse<any>> => {
    return api.delete('/api/system/dict/type/refreshCache')
  },

  // 字典项管理
  // 获取字典项列表
  getDictItems: (params: DictItemSearchParams): Promise<ApiResponse<PageResponse<DictItem>>> => {
    return api.get('/api/system/dict/item/list', { params })
  },

  // 根据字典类型获取字典项列表
  getDictItemsByType: (dictType: string): Promise<ApiResponse<DictItem[]>> => {
    return api.get(`/api/system/dict/item/type/${dictType}`)
  },

  // 获取字典项详情
  getDictItemById: (dictItemId: number): Promise<ApiResponse<DictItem>> => {
    return api.get(`/api/system/dict/item/${dictItemId}`)
  },

  // 新增字典项
  createDictItem: (dictItemData: DictItemAddReq): Promise<ApiResponse<any>> => {
    return api.post('/api/system/dict/item', dictItemData)
  },

  // 修改字典项
  updateDictItem: (dictItemData: DictItemUpdateReq): Promise<ApiResponse<any>> => {
    return api.put('/api/system/dict/item', dictItemData)
  },

  // 删除字典项
  deleteDictItems: (dictItemIds: number[]): Promise<ApiResponse<any>> => {
    return api.delete(`/api/system/dict/item/${dictItemIds.join(',')}`)
  },
}