feat(密钥管理): 列表按用户聚合三字段列 + 代理配置服务端上报

- Java:后台列表一行一用户(货源查询密钥/外观专利密钥/代理设置),行级状态三项全通过才算通过;检测/清空改为按用户;搜索仅按用户名(去 UID);新增代理检测(经用户代理请求自家域名)与代理掩码(隐去账密)
- 后台前端:三字段列改版 + 行级状态筛选 + 用户名筛选
- 桌面前端:登录加载密钥时补报本地代理(只填空缺不覆盖)、保存/清空代理实时上报
This commit is contained in:
2026-09-13 10:47:19 +08:00
parent 82a782550e
commit b7d4d325e0
14 changed files with 665 additions and 226 deletions
+33 -23
View File
@@ -1,10 +1,8 @@
import { http } from './http'
import { unwrap } from './envelope'
export interface AdminUserSecretItem {
id: number
userId: number
username: string
/** 单模块状态(脱敏值 + 连通性)。 */
export interface AdminUserSecretModule {
moduleKey: string
moduleLabel: string
masked: string
@@ -14,12 +12,23 @@ export interface AdminUserSecretItem {
checkMessage: string
checkLatencyMs: number | null
checkedAt: string | null
source: string
updatedAt: string | null
}
/** 一行一用户:三个字段列 + 行级状态(三类都检测通过才算 passed)。 */
export interface AdminUserSecretRow {
userId: number
username: string
similarAsin: AdminUserSecretModule
appearancePatent: AdminUserSecretModule
proxy: AdminUserSecretModule
status: string
statusMessage: string
updatedAt: string | null
}
export interface AdminUserSecretPage {
items: AdminUserSecretItem[]
items: AdminUserSecretRow[]
total: number
page: number
pageSize: number
@@ -27,34 +36,35 @@ export interface AdminUserSecretPage {
export interface UserSecretQuery {
keyword?: string
moduleKey?: string
checkStatus?: string
page: number
pageSize: number
}
/** 分页查询用户密钥(脱敏):GET /api/admin/user-secrets */
/** 分页查询用户密钥(一行一用户):GET /api/admin/user-secrets */
export async function fetchUserSecretList(params: UserSecretQuery): Promise<AdminUserSecretPage> {
const { data } = await http.get('/api/admin/user-secrets', { params })
return unwrap<AdminUserSecretPage>(data)
}
/** 立即检测指定密钥POST /api/admin/user-secrets/{id}/check */
export async function checkUserSecret(id: number) {
const { data } = await http.post(`/api/admin/user-secrets/${id}/check`)
return unwrap<{
moduleKey: string
checkStatus: string
checkCode: string
checkMessage: string
checkLatencyMs: number | null
checkedAt: string | null
viaProxy: boolean
}>(data)
/** 立即检测该用户全部已配置项POST /api/admin/user-secrets/{userId}/check */
export async function checkUserSecret(userId: number) {
const { data } = await http.post(`/api/admin/user-secrets/${userId}/check`)
return unwrap<
Array<{
moduleKey: string
checkStatus: string
checkCode: string
checkMessage: string
checkLatencyMs: number | null
checkedAt: string | null
viaProxy: boolean
}>
>(data)
}
/** 清空指定用户密钥DELETE /api/admin/user-secrets/{id} */
export async function deleteUserSecret(id: number): Promise<void> {
const { data } = await http.delete(`/api/admin/user-secrets/${id}`)
/** 清空该用户全部密钥与代理配置DELETE /api/admin/user-secrets/{userId} */
export async function deleteUserSecret(userId: number): Promise<void> {
const { data } = await http.delete(`/api/admin/user-secrets/${userId}`)
unwrap<unknown>(data)
}