feat(huya): 客服开放精英宝典工作台与外部 CK 导入

This commit is contained in:
yml2213
2026-11-09 11:09:01 +08:00
parent 6b2285913f
commit 070a7954e7
8 changed files with 38 additions and 6 deletions
+2
View File
@@ -66,6 +66,7 @@ PERMISSIONS = {
"huya:cookie:view": "查看虎牙 Cookie",
"huya:cookie:export": "导出/清除虎牙 Cookie",
"huya:task": "虎牙任务管理",
"huya:elite:import_ck": "精英宝典工作台导入外部 CK",
"huya:bind": "虎牙绑定操作",
"huya:recharge": "虎牙充值操作",
"huya:config": "虎牙配置管理",
@@ -176,6 +177,7 @@ ROLE_PERMISSIONS = {
"huya:view_assigned",
"huya:tag",
"huya:task",
"huya:elite:import_ck",
# 客服能看能改(共享表,靠审计留痕),但删除只给运营。
"huya:collab:view",
"huya:collab:edit",
+9
View File
@@ -132,6 +132,15 @@ def _require_huya_perm(user: User, permission: str) -> None:
raise HTTPException(status_code=403, detail="权限不足")
def _require_huya_workbench_import_ck(user: User) -> None:
"""工作台导入外部 CK 的专用权限;运营仍走历史 huya:import。"""
if not (
_has_huya_perm(user, "huya:import")
or _has_huya_perm(user, "huya:elite:import_ck")
):
raise HTTPException(status_code=403, detail="权限不足")
def _require_huya_tag_permission(user: User) -> None:
"""标签权限兼容历史上使用导入权限的运营人员。"""
if not (_has_huya_perm(user, "huya:tag") or _has_huya_perm(user, "huya:import")):
+1 -1
View File
@@ -414,7 +414,7 @@ def import_workbench_cookies(
导入后的账号会出现在工作台账号列表里,可照常执行「生成开通支付码 / 绑定二维码 /
查询角色 / 刷新积分」等操作。没有归属的新账号自动归属到导入者,否则客服看不到。
"""
_require_huya_perm(current, "huya:import")
_require_huya_workbench_import_ck(current)
accounts, skipped = import_huya_cookies_detailed(
db, req.text, req.tag, assign_to=current.id
)
+2 -1
View File
@@ -91,9 +91,10 @@ export default function MainLayout({ onLogout }: { onLogout?: () => void }) {
douyuItems.push({ key: '/douyu/collab', label: '外部单协作', icon: <FileExcelOutlined /> });
}
// 虎牙:客服只保留浏览器兑换;管理员/运营显示完整入口
// 虎牙:客服用浏览器兑换和精英宝典;管理员/运营显示完整入口
if (can('huya:task')) {
if (user?.role === 'support') {
huyaItems.push({ key: '/huya/elite', label: '精英宝典', icon: <BookOutlined /> });
huyaItems.push({ key: '/huya/browser-exchange', label: '浏览器兑换', icon: <GlobalOutlined /> });
} else {
if (canAny(['huya:account', 'huya:view_all', 'huya:view_assigned'])) {
+1 -1
View File
@@ -164,7 +164,7 @@ function taskQrUrl(task: HuyaTaskItem | undefined): string {
export default function HuyaElitePage() {
const { can } = usePermissions();
const canConfig = can('huya:config');
const canImport = can('huya:import');
const canImport = can('huya:import') || can('huya:elite:import_ck');
const [pool, setPool] = useState<HuyaAccountItem[]>([]);
const [accounts, setAccounts] = useState<HuyaAccountItem[]>([]);
const [selectedIds, setSelectedIds] = useState<number[]>([]);