types.ts 3.16 KB
// REQ-USR-004: 前端跨 task 共享类型契约(对齐 docs/05 § REQ-USR-004 / spec § 4)

/** 登录用户(对齐 Result<{ token, user }> 的 user 字段) */
export interface AuthUser {
  id: number;
  sUserName: string;
  sUserType: string;
  sLanguage: string;
}

/** POST /api/usr/login 请求体 */
export interface LoginPayload {
  sUserName: string;
  password: string;
  companyId: number;
}

/** POST /api/usr/login 成功响应(已拆 Result.data) */
export interface LoginResult {
  token: string;
  user: AuthUser;
}

/** GET /api/usr/companies 列表项(登录「版本」下拉,D8;sVersion 可空) */
export interface CompanyOption {
  id: number;
  sCompanyName: string;
  sVersion: string | null;
}

// === REQ-USR-003 用户列表查询契约(FE-03) ===

/**
 * 用户列表行 VO(已在 api 层把 docs/05 中文键 `员工名`/`部门` 归一为 ASCII
 * `employeeName`/`departmentName`,组件/列定义统一用 ASCII 键,D-PLAN-2 / spec D9)。
 */
export interface UserVO {
  id: number;
  sUserName: string;
  employeeName: string | null;
  sUserNo: string | null;
  departmentName: string | null;
  sUserType: string;
  sLanguage: string;
  iIsVoid: number;
  tLastLoginDate: string | null;
  sCreator: string;
  tCreateDate: string;
}

/** 统一分页返回体(docs/04 § 1.4 / § 3.2) */
export interface PageResult<T> {
  records: T[];
  total: number;
  pageNum: number;
  pageSize: number;
}

/**
 * GET /api/usr/users 查询参数(提交给后端的 query)。
 * `queryValue` 为空字符串时由 listUsers 省略(空为全部,BR3)。
 */
export interface UserListQuery {
  queryField?: string;
  matchType?: string;
  queryValue?: string;
  pageNum: number;
  pageSize: number;
}

// === REQ-USR-001 / REQ-USR-002 用户单据契约(FE-04) ===

/** 单据模式:新增 / 修改(由路由 :id 判定,spec § 3) */
export type UserDetailMode = 'create' | 'edit';

/**
 * 员工名下拉项(D1)。后端 GET /api/usr/employees 原始行
 * `iIncrement`/`sEmployeeName`/`sEmployeeNo` 在 api 层归一为此结构。
 */
export interface EmployeeOption {
  value: number;
  label: string;
  sEmployeeNo: string | null;
}

/**
 * 权限项(D2/D3)。后端 GET /api/usr/permissions 原始行
 * `iIncrement`/`sPermissionName`/`sPermissionCategory` 在 api 层归一为此结构。
 */
export interface PermissionItem {
  id: number;
  name: string;
  category: string;
}

/**
 * POST /api/usr/users 请求体(create,对齐 docs/05 § REQ-USR-001)。
 * 密码 `initialPassword` 前端不传,由后端默认 666666(BR9)。
 */
export interface UserCreateReq {
  sUserName: string;
  sUserNo?: string;
  iEmployeeId?: number | null;
  sUserType: string;
  sLanguage: string;
  iCanModifyBill?: 0 | 1;
  permissionIds?: number[];
}

/**
 * PUT /api/usr/users/{id} 请求体(edit,对齐 docs/05 § REQ-USR-002)。
 * `sUserName` 不可改不传、密码不在本接口(BR3/BR9);`permissionIds` 全量覆盖(BR11)。
 */
export interface UserUpdateReq {
  sUserNo?: string;
  iEmployeeId?: number | null;
  sUserType: string;
  sLanguage: string;
  iCanModifyBill?: 0 | 1;
  iIsVoid?: 0 | 1;
  permissionIds?: number[];
}