"use client"; import { useEffect, useRef } from "react"; import { LoaderCircle } from "lucide-react"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { useAuthGuard } from "@/lib/use-auth-guard"; import { BackupSettingsCard } from "./components/backup-settings-card"; import { ApiDocsCard } from "./components/api-docs-card"; import { ConfigCard } from "./components/config-card"; import { CPAPoolDialog } from "./components/cpa-pool-dialog"; import { CPAPoolsCard } from "./components/cpa-pools-card"; import { ImportBrowserDialog } from "./components/import-browser-dialog"; import { ProxyRuntimeCard } from "./components/proxy-runtime-card"; import { SettingsHeader } from "./components/settings-header"; import { Sub2APIConnections } from "./components/sub2api-connections"; import { ThirdPartyAppsCard } from "./components/third-party-apps-card"; import { UserKeysCard } from "./components/user-keys-card"; import { useSettingsStore } from "./store"; const settingsTabs = [ { value: "basic", title: "基础配置" }, { value: "backup", title: "备份" }, { value: "keys", title: "用户密钥" }, { value: "api-docs", title: "接口接入" }, { value: "canvas", title: "画布入口" }, { value: "proxy", title: "FlareSolverr" }, { value: "cpa", title: "CPA" }, { value: "sub2api", title: "Sub2API" }, ]; function SettingsDataController() { const didLoadRef = useRef(false); const initialize = useSettingsStore((state) => state.initialize); const loadPools = useSettingsStore((state) => state.loadPools); const loadBackups = useSettingsStore((state) => state.loadBackups); const pools = useSettingsStore((state) => state.pools); const backupState = useSettingsStore((state) => state.backupState); useEffect(() => { if (didLoadRef.current) { return; } didLoadRef.current = true; void initialize(); }, [initialize]); useEffect(() => { const hasRunningJobs = pools.some((pool) => { const status = pool.import_job?.status; return status === "pending" || status === "running"; }); if (!hasRunningJobs) { return; } const timer = window.setInterval(() => { void loadPools(true); }, 1500); return () => window.clearInterval(timer); }, [loadPools, pools]); useEffect(() => { if (!backupState?.running) { return; } const timer = window.setInterval(() => { void loadBackups(true); }, 3000); return () => window.clearInterval(timer); }, [backupState?.running, loadBackups]); return null; } function SettingsPageContent() { return ( <>
{settingsTabs.map((tab) => ( {tab.title} ))}
); } export default function SettingsPage() { const { isCheckingAuth, session } = useAuthGuard(["admin"]); if (isCheckingAuth || !session || session.role !== "admin") { return (
); } return ; }