feat(integration): 新增 site_code 支持并增强玩家与注单管理界面

在后台玩家与注单相关 API 中新增 site_code 参数,支持按站点筛选数据。
更新 PlayersConsole 与 PlayerTicketsConsole UI 组件,新增站点选择筛选功能。
增强国际化支持,在英文与中文语言包中新增站点相关文案。
优化配置中心页面,新增跳转至集成站点管理的入口,提升后台导航体验。
This commit is contained in:
2026-05-27 13:36:44 +08:00
parent e87229c1b7
commit 5eabbcf0ee
17 changed files with 1126 additions and 3 deletions

View File

@@ -0,0 +1,66 @@
"use client";
import { useCallback, useEffect, useState } from "react";
import { getAdminIntegrationSites } from "@/api/admin-integration-sites";
import { adminHasAnyPermission } from "@/lib/admin-permissions";
import { useAdminProfile } from "@/stores/admin-session";
export type AdminSiteCodeOption = {
code: string;
name: string;
};
/**
* 接入站点下拉(已按当前管理员站点权限过滤)。
*/
export function useAdminSiteCodeOptions(): {
sites: AdminSiteCodeOption[];
loading: boolean;
canChooseSite: boolean;
reload: () => Promise<void>;
} {
const profile = useAdminProfile();
const canLoad = adminHasAnyPermission(profile?.permissions, [
"prd.integration.view",
"prd.integration.manage",
]);
const [sites, setSites] = useState<AdminSiteCodeOption[]>([]);
const [loading, setLoading] = useState(false);
const reload = useCallback(async () => {
if (!canLoad) {
setSites([]);
return;
}
setLoading(true);
try {
const data = await getAdminIntegrationSites();
setSites(
data.items.map((row) => ({
code: row.code,
name: row.name,
})),
);
} catch {
setSites([]);
} finally {
setLoading(false);
}
}, [canLoad]);
useEffect(() => {
queueMicrotask(() => {
void reload();
});
}, [reload]);
return {
sites,
loading,
canChooseSite: canLoad && sites.length > 0,
reload,
};
}