index.ts 2.74 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:user:create / update / delete / query / export
 *
 * ⚠️ 时间字段是**毫秒时间戳数字**,不是格式化字符串:
 *    后端 `UserRespVO.createTime` 是 `LocalDateTime`,由框架的
 *    `TimestampLocalDateTimeSerializer` 序列化成 epoch millis。
 *    所以类型写 `number`,渲染统一走 `formatDateTime()`。
 */
const BASE = `${ADMIN_API_PREFIX}/system/user`

export interface UserVO {
  id: number
  username: string
  nickname: string
  orgId?: number
  orgName?: string
  mobile?: string
  email?: string
  /** 性别:0 未知,1 男,2 女(字典 system_user_sex) */
  sex?: number
  /** 状态:0 启用,1 停用(字典 system_common_status) */
  status?: number
  loginIp?: string
  /** 最后登录时间(毫秒时间戳) */
  loginDate?: number
  /** 创建时间(毫秒时间戳) */
  createTime?: number
  /** 已分配的角色编号(后端按用户聚合后下发) */
  roleIds?: number[]
}

export interface UserPageReqVO extends PageParam {
  username?: string
  nickname?: string
  orgId?: number
  status?: number
}

export interface UserSaveReqVO {
  id?: number
  username: string
  nickname: string
  orgId?: number
  mobile?: string
  email?: string
  sex?: number
  /** 明文密码;创建时必填,修改时留空表示不改 */
  password?: string
  status?: number
  remark?: string
  /** 角色编号集合(全量覆盖) */
  roleIds?: number[]
}

export const UserApi = {
  getUserPage: (params: UserPageReqVO) => request.get<PageResult<UserVO>>(`${BASE}/page`, { params }),
  getUserList: (params?: Partial<UserPageReqVO>) => request.get<UserVO[]>(`${BASE}/list`, { params }),
  getUser: (id: number) => request.get<UserVO>(`${BASE}/get`, { params: { id } }),
  createUser: (data: UserSaveReqVO) => request.post<number>(`${BASE}/create`, data),
  updateUser: (data: UserSaveReqVO) => request.put<boolean>(`${BASE}/update`, data),
  deleteUser: (id: number) => request.delete<boolean>(`${BASE}/delete`, { params: { id } }),
  deleteUserList: (ids: number[]) =>
    request.delete<boolean>(`${BASE}/delete-list`, { params: { ids: ids.join(',') } }),
  exportUser: (params: UserPageReqVO) => request.download(`${BASE}/export-excel`, params, '用户列表.xlsx'),
  resetPassword: (id: number, password: string) =>
    request.put<boolean>(`${BASE}/update-password`, { id, password })
}