index.ts 3.91 KB
import request from '@/utils/request'
import { ADMIN_API_PREFIX } from '@/config'
import type { PageParam, PageResult } from '@/types'

/**
 * 系统管理 - 字典
 *
 * 契约说明(新契约,与后端 parking-module-system 对齐):
 *  - 前缀 /admin-api,回归 CommonResult{code=0}
 *  - 标准 CRUD URL 命名:/create /update /delete /delete-list /get /list /page /export-excel
 *  - 权限标识:**字典类型与字典数据共用** system:dict:create / update / delete / query / export
 *    (所以这里两个 API 对象看起来权限一样,是刻意为之)
 *
 * 资源路径有两个:
 *  - `/system/dict-type` 字典类型
 *  - `/system/dict-data` 字典数据(挂在某个类型下面)
 *
 * ⚠️ `/system/dict-data/list?dictType=xxx` 是**字典 store 直接调用的接口**
 *    (见 `store/modules/dict.ts`),返回字段必须与 `DictDataVO` 一致。
 */
const TYPE_BASE = `${ADMIN_API_PREFIX}/system/dict-type`
const DATA_BASE = `${ADMIN_API_PREFIX}/system/dict-data`

export interface DictTypeVO {
  id: number
  name: string
  type: string
  /** 状态:0 启用,1 停用(字典 system_common_status) */
  status?: number
  remark?: string
  /** 创建时间(毫秒时间戳) */
  createTime?: number
}

export interface DictTypePageReqVO extends PageParam {
  name?: string
  type?: string
  status?: number
}

export interface DictTypeSaveReqVO {
  id?: number
  name: string
  type: string
  status?: number
  remark?: string
}

export interface DictDataVO {
  id: number
  sort?: number
  /** 显示文案 */
  label: string
  /** 字典值(后端按字符串存取,数字/布尔值也以字符串形式返回) */
  value: string
  dictType: string
  status?: number
  /** el-tag 的颜色类型:success / info / warning / danger */
  colorType?: string
  cssClass?: string
  remark?: string
}

export interface DictDataPageReqVO extends PageParam {
  dictType?: string
  label?: string
  status?: number
}

export interface DictDataSaveReqVO {
  id?: number
  sort?: number
  label: string
  value: string
  dictType: string
  status?: number
  colorType?: string
  cssClass?: string
  remark?: string
}

export const DictTypeApi = {
  getDictTypePage: (params: DictTypePageReqVO) => request.get<PageResult<DictTypeVO>>(`${TYPE_BASE}/page`, { params }),
  getDictTypeList: (params?: Partial<DictTypePageReqVO>) => request.get<DictTypeVO[]>(`${TYPE_BASE}/list`, { params }),
  getDictType: (id: number) => request.get<DictTypeVO>(`${TYPE_BASE}/get`, { params: { id } }),
  createDictType: (data: DictTypeSaveReqVO) => request.post<number>(`${TYPE_BASE}/create`, data),
  updateDictType: (data: DictTypeSaveReqVO) => request.put<boolean>(`${TYPE_BASE}/update`, data),
  deleteDictType: (id: number) => request.delete<boolean>(`${TYPE_BASE}/delete`, { params: { id } }),
  deleteDictTypeList: (ids: number[]) =>
    request.delete<boolean>(`${TYPE_BASE}/delete-list`, { params: { ids: ids.join(',') } }),
  exportDictType: (params: DictTypePageReqVO) =>
    request.download(`${TYPE_BASE}/export-excel`, params, '字典类型列表.xlsx')
}

export const DictDataApi = {
  /** 按 dictType 取全部字典数据(字典 store 与下拉框用;不分页) */
  getDictDataList: (dictType: string) => request.get<DictDataVO[]>(`${DATA_BASE}/list`, { params: { dictType } }),
  getDictDataPage: (params: DictDataPageReqVO) => request.get<PageResult<DictDataVO>>(`${DATA_BASE}/page`, { params }),
  getDictData: (id: number) => request.get<DictDataVO>(`${DATA_BASE}/get`, { params: { id } }),
  createDictData: (data: DictDataSaveReqVO) => request.post<number>(`${DATA_BASE}/create`, data),
  updateDictData: (data: DictDataSaveReqVO) => request.put<boolean>(`${DATA_BASE}/update`, data),
  deleteDictData: (id: number) => request.delete<boolean>(`${DATA_BASE}/delete`, { params: { id } }),
  deleteDictDataList: (ids: number[]) =>
    request.delete<boolean>(`${DATA_BASE}/delete-list`, { params: { ids: ids.join(',') } })
}