usrApi.ts
3.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// 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<LoginResult> {
return request.post('/usr/login', payload) as unknown as Promise<LoginResult>;
}
/** GET /api/usr/companies —— 登录「版本」下拉项(公司表只读) */
export function fetchCompanies(): Promise<CompanyOption[]> {
return request.get('/usr/companies') as unknown as Promise<CompanyOption[]>;
}
/** 后端原始用户行(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<RawUserRecord> 本体;
* 对 records 逐项做中文键→ASCII 归一后返回 PageResult<UserVO>(D-PLAN-2)。
*/
export async function listUsers(query: UserListQuery): Promise<PageResult<UserVO>> {
const params: Record<string, unknown> = {
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<RawUserRecord>
>));
return {
records: (page.records ?? []).map(normalizeUserRecord),
total: page.total,
pageNum: page.pageNum,
pageSize: page.pageSize,
};
}