feat(密钥管理): 按数据权限分组隔离与筛选

- 后台密钥列表改为按 biz_shop_manage_group 分组:主管只看自己带的分组成员,超管看全量可按 group_id 筛选
- 行数据补「所属分组」名称(批量查询);列表接口带回分组筛选项
- 修复超管筛选不生效:前端筛选参数统一 snake_case(camel 被后端静默忽略)
- 列表列/筛选项文案由「所属管理员」改为「分组」
This commit is contained in:
2026-09-13 13:34:08 +08:00
parent 05ae0c62d6
commit 1b733b23b9
10 changed files with 251 additions and 96 deletions
+14 -9
View File
@@ -19,8 +19,8 @@ export interface AdminUserSecretModule {
export interface AdminUserSecretRow {
userId: number
username: string
createdById: number | null
createdByUsername: string
/** 所属数据权限分组名(可能多个)。 */
groups: string[]
similarAsin: AdminUserSecretModule
appearancePatent: AdminUserSecretModule
proxy: AdminUserSecretModule
@@ -34,26 +34,31 @@ export interface AdminUserSecretPage {
total: number
page: number
pageSize: number
/** 分组筛选项(超管=全部;主管=自己带的分组)。 */
groupOptions?: GroupOption[]
}
/** 管理员下拉项(超管筛选用)。 */
export interface AdminOption {
export interface GroupOption {
id: number
username: string
groupName: string
}
export interface UserSecretQuery {
keyword?: string
checkStatus?: string
/** 按创建人筛选(仅超管生效)。 */
createdById?: number
/** 按数据权限分组筛选(仅超管生效);后端参数为 snake_case。 */
groupId?: number
page: number
pageSize: number
}
/** 分页查询用户密钥(一行一用户):GET /api/admin/user-secrets */
/** 分页查询用户密钥(一行一用户):GET /api/admin/user-secrets(筛选参数必须 snake_case,camel 会被后端静默忽略)。 */
export async function fetchUserSecretList(params: UserSecretQuery): Promise<AdminUserSecretPage> {
const { data } = await http.get('/api/admin/user-secrets', { params })
const query: Record<string, string | number> = { page: params.page, pageSize: params.pageSize }
if (params.keyword) query.keyword = params.keyword
if (params.checkStatus) query.checkStatus = params.checkStatus
if (params.groupId) query.group_id = params.groupId
const { data } = await http.get('/api/admin/user-secrets', { params: query })
return unwrap<AdminUserSecretPage>(data)
}