// REQ-USR-004: USR 模块 API 封装(登录 + 版本下拉取数)。页面只调本文件,不散用 axios。 // REQ-USR-003: 新增用户列表分页查询 listUsers(GET /api/usr/users,中文键归一 D-PLAN-2)。 import request from './request'; import type { LoginPayload, LoginResult, CompanyOption, UserVO, PageResult, UserListQuery, } from './types'; // 响应拦截器已拆 Result.data,故此处返回类型即业务数据本体。 // axios 实例的方法类型仍标注为 AxiosResponse,运行时已被拦截器解包,用 as unknown 桥接。 /** POST /api/usr/login —— 登录认证,成功返回 { token, user } */ export function login(payload: LoginPayload): Promise { return request.post('/usr/login', payload) as unknown as Promise; } /** GET /api/usr/companies —— 登录「版本」下拉项(公司表只读) */ export function fetchCompanies(): Promise { return request.get('/usr/companies') as unknown as Promise; } /** 后端原始用户行(docs/05 以中文键名 `员工名`/`部门` 给出,关联职员表派生) */ interface RawUserRecord { id: number; sUserName: string; 员工名?: string | null; employeeName?: string | null; sUserNo: string | null; 部门?: string | null; departmentName?: string | null; sUserType: string; sLanguage: string; iIsVoid: number; tLastLoginDate: string | null; sCreator: string; tCreateDate: string; } /** 把后端中文键 `员工名`/`部门` 归一为 ASCII `employeeName`/`departmentName`(D-PLAN-2 / spec D9) */ function normalizeUserRecord(raw: RawUserRecord): UserVO { return { id: raw.id, sUserName: raw.sUserName, employeeName: raw.employeeName ?? raw['员工名'] ?? null, sUserNo: raw.sUserNo, departmentName: raw.departmentName ?? raw['部门'] ?? null, sUserType: raw.sUserType, sLanguage: raw.sLanguage, iIsVoid: raw.iIsVoid, tLastLoginDate: raw.tLastLoginDate, sCreator: raw.sCreator, tCreateDate: raw.tCreateDate, }; } /** * GET /api/usr/users —— 用户列表分页查询(只读,BR5)。 * query 走 axios params;`queryValue` 为空字符串时省略(空为全部,BR3)。 * 响应拦截器已拆 Result.data,故此处拿到 PageResult 本体; * 对 records 逐项做中文键→ASCII 归一后返回 PageResult(D-PLAN-2)。 */ export async function listUsers(query: UserListQuery): Promise> { const params: Record = { pageNum: query.pageNum, pageSize: query.pageSize, }; if (query.queryField) params.queryField = query.queryField; if (query.matchType) params.matchType = query.matchType; if (query.queryValue) params.queryValue = query.queryValue; const page = (await (request.get('/usr/users', { params }) as unknown as Promise< PageResult >)); return { records: (page.records ?? []).map(normalizeUserRecord), total: page.total, pageNum: page.pageNum, pageSize: page.pageSize, }; }