users.ts 2.19 KB
import { apiClient } from './client';

export interface UserListItem {
  userId: number;
  username: string;
  employeeName?: string | null;
  userCode: string;
  departmentName?: string | null;
  userType: 'NORMAL' | 'SUPER_ADMIN';
  language: string;
  isDeleted: boolean;
  lastLoginDate?: string | null;
  createdBy?: string | null;
  createdDate?: string | null;
}

export interface UserDetail extends UserListItem {
  canEditDocument?: boolean;
  employeeId?: number | null;
  permissionCategoryIds: number[];
  updatedBy?: string | null;
  updatedDate?: string | null;
}

export interface UsersListQuery {
  page?: number;
  size?: number;
  sortField?: 'tCreateDate' | 'tLastLoginDate' | 'sUsername' | 'sUserCode';
  sortOrder?: 'asc' | 'desc';
  queryField?: string;
  matchMode?: 'contains' | 'notContains' | 'equals';
  queryValue?: string;
  userType?: 'NORMAL' | 'SUPER_ADMIN';
  isDeleted?: boolean;
}

export interface PageResult<T> {
  records: T[];
  total: number;
  page: number;
  size: number;
}

export interface CreateUserReq {
  username: string;
  userCode: string;
  userType: 'NORMAL' | 'SUPER_ADMIN';
  language: 'zh-CN' | 'en-US' | 'zh-TW';
  canEditDocument: boolean;
  employeeId?: number | null;
  permissionCategoryIds?: number[];
}

export interface UpdateUserReq {
  userCode?: string;
  userType?: 'NORMAL' | 'SUPER_ADMIN';
  language?: 'zh-CN' | 'en-US' | 'zh-TW';
  canEditDocument?: boolean;
  employeeId?: number | null;
  isDeleted?: boolean;
  permissionCategoryIds?: number[];
}

export interface CreateUserVo {
  userId: number;
  username: string;
  userCode: string;
}

export const usersApi = {
  async list(query: UsersListQuery = {}): Promise<PageResult<UserListItem>> {
    return await apiClient.get<unknown, PageResult<UserListItem>>('/users', { params: query });
  },
  async get(userId: number): Promise<UserDetail> {
    return await apiClient.get<unknown, UserDetail>(`/users/${userId}`);
  },
  async create(req: CreateUserReq): Promise<CreateUserVo> {
    return await apiClient.post<unknown, CreateUserVo>('/users', req);
  },
  async update(userId: number, req: UpdateUserReq): Promise<UserDetail> {
    return await apiClient.put<unknown, UserDetail>(`/users/${userId}`, req);
  },
};