index.ts
3.2 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
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:role:create / update / delete / query / export
*
* ⚠️ `createTime` 是毫秒时间戳数字(后端 LocalDateTime),渲染走 `formatDateTime()`。
*
* ⚠️ `/get` 会额外返回 `menuIds`(该角色已授权的菜单),是给编辑弹窗的
* 「菜单权限」树做回显用的;`/page` 返回的列表**不含** menuIds(避免 N+1)。
*/
const BASE = `${ADMIN_API_PREFIX}/system/role`
export interface RoleVO {
id: number
name: string
code: string
sort?: number
/** 状态:0 启用,1 停用(字典 system_common_status) */
status?: number
/** 数据范围:1 全部,2 自定义,3 本组织,4 本组织及以下,5 仅本人(字典 system_data_scope) */
dataScope?: number
remark?: string
/** 创建时间(毫秒时间戳) */
createTime?: number
/** 已授权的菜单编号,仅 /get 返回 */
menuIds?: number[]
}
export interface RolePageReqVO extends PageParam {
name?: string
code?: string
status?: number
}
export interface RoleSaveReqVO {
id?: number
name: string
code: string
sort?: number
status?: number
/** 不传时后端默认「仅本人」(5),保证最小权限 */
dataScope?: number
remark?: string
/** 菜单编号集合(全量覆盖该角色的菜单授权) */
menuIds?: number[]
}
/**
* ⚠️ 菜单授权提交时 `menuIds` 必须**同时包含半选的父节点**
* (勾选框的父节点在子节点只选了一部分时是「半选」状态,
* `el-tree.getCheckedKeys()` **不返回**半选节点)。
* 后端 `getMenuListByUserId` 只按「授权表里存的 id」取菜单、不会自动补父节点,
* 漏掉父目录会导致该角色的菜单在侧边栏里挂不上树而整棵丢失。
*/
export interface RoleUpdateStatusReqVO {
id: number
status: number
}
export const RoleApi = {
getRolePage: (params: RolePageReqVO) => request.get<PageResult<RoleVO>>(`${BASE}/page`, { params }),
getRoleList: (params?: Partial<RolePageReqVO>) => request.get<RoleVO[]>(`${BASE}/list`, { params }),
getRole: (id: number) => request.get<RoleVO>(`${BASE}/get`, { params: { id } }),
createRole: (data: RoleSaveReqVO) => request.post<number>(`${BASE}/create`, data),
updateRole: (data: RoleSaveReqVO) => request.put<boolean>(`${BASE}/update`, data),
/** 只改状态;后端会把 state 变更与「内置角色保护」一起校验 */
updateRoleStatus: (data: RoleUpdateStatusReqVO) => request.put<boolean>(`${BASE}/update-status`, data),
deleteRole: (id: number) => request.delete<boolean>(`${BASE}/delete`, { params: { id } }),
deleteRoleList: (ids: number[]) =>
request.delete<boolean>(`${BASE}/delete-list`, { params: { ids: ids.join(',') } }),
exportRole: (params: RolePageReqVO) => request.download(`${BASE}/export-excel`, params, '角色列表.xlsx')
}