- 用户列表:搜索(用户名/邮箱/UUID)、分页、封禁状态、注册时间 - 编辑用户:用户名、邮箱、QQ、密码、权限组、封禁状态 - 绑定玩家:展示 Mojang / StarLight 来源与旧内服适配标记 - Bot 管理:查看状态、修改机器人用户名、使 Token 失效、封禁/解封 Bot 创建 - 频率限制:滑块与数字输入设置丢包频率,支持保存与取消 - 管理审计:按用户或全局查看,游标分页加载更早记录 - 邀请码:按邮箱生成邀请码并复制 - 补充对应 API 与类型定义,中英文各补 39 个文案
This commit is contained in:
1 parent
7b3a5212e6
commit
fbcbb803ac
4 files changed
+1257
-243
No files matched your search
File diff suppressed because it is too large.
Load diff
@@ -1902,3 +1902,116 @@ export function skinSiteUpdateReviewPaperAdmin(
|
||||
{ method: 'PUT', body: data },
|
||||
)
|
||||
}
|
||||
|
||||
export interface SkinSiteBotInfo {
|
||||
exists: boolean
|
||||
username?: string | null
|
||||
active: boolean
|
||||
creationBanned: boolean
|
||||
tokenHint?: string | null
|
||||
createdAt?: number | null
|
||||
updatedAt?: number | null
|
||||
}
|
||||
|
||||
export interface SkinSiteUserFrequencyLimit {
|
||||
dropPercent?: number | null
|
||||
}
|
||||
|
||||
export type SkinSiteUserAdminAuditAction =
|
||||
| 'USER_UPDATED'
|
||||
| 'USER_DELETED'
|
||||
| 'RATE_LIMIT_UPDATED'
|
||||
| 'BOT_USERNAME_UPDATED'
|
||||
| 'BOT_TOKEN_INVALIDATED'
|
||||
| 'BOT_CREATION_BANNED'
|
||||
| 'BOT_CREATION_UNBANNED'
|
||||
|
||||
export interface SkinSiteUserAdminAuditChange {
|
||||
field: string
|
||||
before?: string | null
|
||||
after?: string | null
|
||||
}
|
||||
|
||||
export interface SkinSiteUserAdminAuditInfo {
|
||||
id: number
|
||||
actorUuid: string
|
||||
actorName: string
|
||||
targetUuid: string
|
||||
targetName: string
|
||||
action: SkinSiteUserAdminAuditAction
|
||||
changes: SkinSiteUserAdminAuditChange[]
|
||||
createdAt: number
|
||||
}
|
||||
|
||||
export interface SkinSiteUserAdminAuditPage {
|
||||
items: SkinSiteUserAdminAuditInfo[]
|
||||
nextCursor?: number | null
|
||||
}
|
||||
|
||||
export interface SkinSiteInviteCode {
|
||||
email: string
|
||||
code: string
|
||||
}
|
||||
|
||||
export function skinSiteAdminBotInfo(
|
||||
userUuid: string,
|
||||
): Promise<SkinSiteResponse<SkinSiteBotInfo>> {
|
||||
return skinSiteRequest<SkinSiteBotInfo>('admin/users/' + encodeURIComponent(userUuid) + '/bot')
|
||||
}
|
||||
|
||||
export function skinSiteAdminRenameBot(
|
||||
userUuid: string,
|
||||
username: string,
|
||||
): Promise<SkinSiteResponse<SkinSiteBotInfo>> {
|
||||
return skinSiteRequest<SkinSiteBotInfo>(
|
||||
'admin/users/' + encodeURIComponent(userUuid) + '/bot/username',
|
||||
{ method: 'POST', body: { username } },
|
||||
)
|
||||
}
|
||||
|
||||
export function skinSiteAdminInvalidateBotToken(
|
||||
userUuid: string,
|
||||
): Promise<SkinSiteResponse<SkinSiteBotInfo>> {
|
||||
return skinSiteRequest<SkinSiteBotInfo>(
|
||||
'admin/users/' + encodeURIComponent(userUuid) + '/bot/invalidate',
|
||||
{ method: 'POST' },
|
||||
)
|
||||
}
|
||||
|
||||
export function skinSiteAdminSetBotCreationBanned(
|
||||
userUuid: string,
|
||||
banned: boolean,
|
||||
): Promise<SkinSiteResponse<SkinSiteBotInfo>> {
|
||||
return skinSiteRequest<SkinSiteBotInfo>(
|
||||
'admin/users/' + encodeURIComponent(userUuid) + '/bot/ban',
|
||||
{ method: 'POST', body: { banned } },
|
||||
)
|
||||
}
|
||||
|
||||
export function skinSiteAdminUpdateUserFrequencyLimit(
|
||||
userUuid: string,
|
||||
dropPercent: number | null,
|
||||
): Promise<SkinSiteResponse<SkinSiteUserFrequencyLimit>> {
|
||||
return skinSiteRequest<SkinSiteUserFrequencyLimit>(
|
||||
'admin/users/' + encodeURIComponent(userUuid) + '/frequency-limit',
|
||||
{ method: 'POST', body: { dropPercent } },
|
||||
)
|
||||
}
|
||||
|
||||
export function skinSiteAdminUserAudit(params?: {
|
||||
targetUuid?: string
|
||||
before?: number
|
||||
}): Promise<SkinSiteResponse<SkinSiteUserAdminAuditPage>> {
|
||||
const query = new URLSearchParams()
|
||||
if (params?.targetUuid) query.set('targetUuid', params.targetUuid)
|
||||
if (params?.before) query.set('before', String(params.before))
|
||||
const suffix = query.size > 0 ? '?' + query.toString() : ''
|
||||
return skinSiteRequest<SkinSiteUserAdminAuditPage>('admin/users/audit' + suffix)
|
||||
}
|
||||
|
||||
export function skinSiteAdminInviteUser(email: string): Promise<SkinSiteResponse<SkinSiteInviteCode>> {
|
||||
return skinSiteRequest<SkinSiteInviteCode>('admin/inviteCode', {
|
||||
method: 'POST',
|
||||
body: { email },
|
||||
})
|
||||
}
|
||||
@@ -12178,5 +12178,44 @@
|
||||
"app.skin-site.admin.review.move-up": {"message": "Move up"},
|
||||
"app.skin-site.admin.review.move-down": {"message": "Move down"},
|
||||
"app.skin-site.admin.review.mail-subject-required": {"message": "Subject is required when mail is enabled."},
|
||||
"app.skin-site.admin.review.mail-message-required": {"message": "Body is required when mail is enabled."}
|
||||
"app.skin-site.admin.review.mail-message-required": {"message": "Body is required when mail is enabled."},
|
||||
"app.skin-site.admin.users.actions": {"message": "Actions"},
|
||||
"app.skin-site.admin.users.audit": {"message": "Audit"},
|
||||
"app.skin-site.admin.users.audit-empty": {"message": "No audit records yet."},
|
||||
"app.skin-site.admin.users.audit-more": {"message": "Load earlier"},
|
||||
"app.skin-site.admin.users.audit-title": {"message": "User management audit"},
|
||||
"app.skin-site.admin.users.bot": {"message": "Bot"},
|
||||
"app.skin-site.admin.users.bot-active": {"message": "Token valid"},
|
||||
"app.skin-site.admin.users.bot-ban": {"message": "Ban bot creation"},
|
||||
"app.skin-site.admin.users.bot-creation-banned": {"message": "Token creation banned"},
|
||||
"app.skin-site.admin.users.bot-exists": {"message": "Bot created"},
|
||||
"app.skin-site.admin.users.bot-inactive": {"message": "Token invalidated"},
|
||||
"app.skin-site.admin.users.bot-invalidate": {"message": "Invalidate token"},
|
||||
"app.skin-site.admin.users.bot-not-exists": {"message": "No bot yet"},
|
||||
"app.skin-site.admin.users.bot-save-username": {"message": "Save bot username"},
|
||||
"app.skin-site.admin.users.bot-title": {"message": "Bot management"},
|
||||
"app.skin-site.admin.users.bot-token-hint": {"message": "Token hint"},
|
||||
"app.skin-site.admin.users.bot-unban": {"message": "Unban bot creation"},
|
||||
"app.skin-site.admin.users.bot-username": {"message": "Bot username"},
|
||||
"app.skin-site.admin.users.bound-players-title": {"message": "Linked players"},
|
||||
"app.skin-site.admin.users.frequency": {"message": "Rate limit"},
|
||||
"app.skin-site.admin.users.frequency-clear": {"message": "Clear limit"},
|
||||
"app.skin-site.admin.users.frequency-current": {"message": "Currently {percent}%"},
|
||||
"app.skin-site.admin.users.frequency-hint": {"message": "Packets from this user will be dropped at the given rate."},
|
||||
"app.skin-site.admin.users.frequency-none": {"message": "Not enabled"},
|
||||
"app.skin-site.admin.users.frequency-range": {"message": "Only integer values from 10% to 100% are allowed."},
|
||||
"app.skin-site.admin.users.frequency-save": {"message": "Save limit"},
|
||||
"app.skin-site.admin.users.frequency-title": {"message": "Rate limit"},
|
||||
"app.skin-site.admin.users.invite": {"message": "Invite user"},
|
||||
"app.skin-site.admin.users.invite-copied": {"message": "Invite code copied."},
|
||||
"app.skin-site.admin.users.invite-copy": {"message": "Copy"},
|
||||
"app.skin-site.admin.users.invite-email": {"message": "Email"},
|
||||
"app.skin-site.admin.users.invite-email-invalid": {"message": "Enter a valid email address."},
|
||||
"app.skin-site.admin.users.invite-generate": {"message": "Generate invite code"},
|
||||
"app.skin-site.admin.users.invite-title": {"message": "Invite user"},
|
||||
"app.skin-site.admin.users.legacy-adapted": {"message": "Legacy internal adapted"},
|
||||
"app.skin-site.admin.users.registered-at": {"message": "Registered at"},
|
||||
"app.skin-site.admin.users.status": {"message": "Status"},
|
||||
"app.skin-site.admin.users.status-banned": {"message": "Banned"},
|
||||
"app.skin-site.admin.users.status-normal": {"message": "Normal"}
|
||||
}
|
||||
@@ -12009,5 +12009,44 @@
|
||||
"app.skin-site.admin.review.move-up": {"message": "上移"},
|
||||
"app.skin-site.admin.review.move-down": {"message": "下移"},
|
||||
"app.skin-site.admin.review.mail-subject-required": {"message": "开启邮件后必须填写邮件标题。"},
|
||||
"app.skin-site.admin.review.mail-message-required": {"message": "开启邮件后必须填写邮件正文。"}
|
||||
"app.skin-site.admin.review.mail-message-required": {"message": "开启邮件后必须填写邮件正文。"},
|
||||
"app.skin-site.admin.users.actions": {"message": "操作"},
|
||||
"app.skin-site.admin.users.audit": {"message": "审计"},
|
||||
"app.skin-site.admin.users.audit-empty": {"message": "暂无管理审计记录。"},
|
||||
"app.skin-site.admin.users.audit-more": {"message": "加载更早记录"},
|
||||
"app.skin-site.admin.users.audit-title": {"message": "用户管理审计"},
|
||||
"app.skin-site.admin.users.bot": {"message": "机器人"},
|
||||
"app.skin-site.admin.users.bot-active": {"message": "Token 有效"},
|
||||
"app.skin-site.admin.users.bot-ban": {"message": "封禁 Bot 创建"},
|
||||
"app.skin-site.admin.users.bot-creation-banned": {"message": "禁止创建 Token"},
|
||||
"app.skin-site.admin.users.bot-exists": {"message": "已创建 Bot"},
|
||||
"app.skin-site.admin.users.bot-inactive": {"message": "Token 已失效"},
|
||||
"app.skin-site.admin.users.bot-invalidate": {"message": "使 Token 失效"},
|
||||
"app.skin-site.admin.users.bot-not-exists": {"message": "尚未创建 Bot"},
|
||||
"app.skin-site.admin.users.bot-save-username": {"message": "保存机器人用户名"},
|
||||
"app.skin-site.admin.users.bot-title": {"message": "Bot 管理"},
|
||||
"app.skin-site.admin.users.bot-token-hint": {"message": "Token 标识"},
|
||||
"app.skin-site.admin.users.bot-unban": {"message": "解除 Bot 封禁"},
|
||||
"app.skin-site.admin.users.bot-username": {"message": "机器人用户名"},
|
||||
"app.skin-site.admin.users.bound-players-title": {"message": "绑定玩家"},
|
||||
"app.skin-site.admin.users.frequency": {"message": "频率限制"},
|
||||
"app.skin-site.admin.users.frequency-clear": {"message": "取消限制"},
|
||||
"app.skin-site.admin.users.frequency-current": {"message": "当前 {percent}%"},
|
||||
"app.skin-site.admin.users.frequency-hint": {"message": "以下列频率对指定用户进行丢包处理,限制其进入服务器的频率。"},
|
||||
"app.skin-site.admin.users.frequency-none": {"message": "当前未启用"},
|
||||
"app.skin-site.admin.users.frequency-range": {"message": "仅允许设置 10% 至 100% 的整数。"},
|
||||
"app.skin-site.admin.users.frequency-save": {"message": "保存限制"},
|
||||
"app.skin-site.admin.users.frequency-title": {"message": "频率限制"},
|
||||
"app.skin-site.admin.users.invite": {"message": "邀请用户"},
|
||||
"app.skin-site.admin.users.invite-copied": {"message": "邀请码已复制。"},
|
||||
"app.skin-site.admin.users.invite-copy": {"message": "复制"},
|
||||
"app.skin-site.admin.users.invite-email": {"message": "邮箱"},
|
||||
"app.skin-site.admin.users.invite-email-invalid": {"message": "请输入正确格式的邮箱。"},
|
||||
"app.skin-site.admin.users.invite-generate": {"message": "生成邀请码"},
|
||||
"app.skin-site.admin.users.invite-title": {"message": "邀请用户"},
|
||||
"app.skin-site.admin.users.legacy-adapted": {"message": "已适配旧内服"},
|
||||
"app.skin-site.admin.users.registered-at": {"message": "注册时间"},
|
||||
"app.skin-site.admin.users.status": {"message": "状态"},
|
||||
"app.skin-site.admin.users.status-banned": {"message": "已封禁"},
|
||||
"app.skin-site.admin.users.status-normal": {"message": "正常"}
|
||||
}
|
||||
Reference in new issue
Block a user