feat: integrate creator hub douyin workflows

This commit is contained in:
2026-09-14 19:22:07 +08:00
parent 025fe62c37
commit 44a28954cf
42 changed files with 2850 additions and 880 deletions
+62 -35
View File
@@ -1,40 +1,42 @@
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import { HashRouter, Navigate, Route, Routes, useLocation } from 'react-router'
import { Refine } from '@refinedev/core'
import { dataProvider } from './dataProvider'
import { CreatorHubLayout } from './Layout'
import { LoginPage } from './LoginPage'
import { AccountDetail, AccountList } from './AccountsPage'
import { AuditPage } from './AuditPage'
import { BrowserCreatePage, BrowserDetail, BrowserList } from './BrowsersPage'
import { BrowserImageList } from './BrowserImagesPage'
import { DraftPage } from './DraftPage'
import { GatewayList } from './GatewaysPage'
import { NetworkExitDetail, NetworkExitList } from './NetworkExitsPage'
import { TaskDetail, TaskList } from './TasksPage'
import { AttemptDetail } from './TracePages'
import { CreatorAccountsPage } from './CreatorAccountsPage'
import { CreatorCompetitorsPage } from './CreatorCompetitorsPage'
import { CreatorSettingsPage } from './CreatorSettingsPage'
import { CreatorWorkbenchPage } from './CreatorWorkbenchPage'
import 'remixicon/fonts/remixicon.css'
import './styles.css'
import { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import { HashRouter, Navigate, Route, Routes, useLocation } from "react-router";
import { Refine } from "@refinedev/core";
import { dataProvider } from "./dataProvider";
import { CreatorHubLayout } from "./Layout";
import { LoginPage } from "./LoginPage";
import { AccountDetail, AccountList } from "./AccountsPage";
import { AuditPage } from "./AuditPage";
import { BrowserCreatePage, BrowserDetail, BrowserList } from "./BrowsersPage";
import { BrowserImageList } from "./BrowserImagesPage";
import { DraftPage } from "./DraftPage";
import { GatewayList } from "./GatewaysPage";
import { NetworkExitDetail, NetworkExitList } from "./NetworkExitsPage";
import { TaskDetail, TaskList } from "./TasksPage";
import { AttemptDetail } from "./TracePages";
import { CreatorAccountsPage } from "./CreatorAccountsPage";
import { CreatorCompetitorsPage } from "./CreatorCompetitorsPage";
import { CreatorSettingsPage } from "./CreatorSettingsPage";
import { CreatorWorkbenchPage } from "./CreatorWorkbenchPage";
import "remixicon/fonts/remixicon.css";
import "./styles.css";
// 开发阶段认证仅由页面层掌握:401 会清除凭证并跳转登录;localStorage 为空时直接展示登录页。
// 不用 useState:HashRouter 的 pushState/replaceState 不触发 hashchange,状态会在导航后过期;
// 改为每次渲染直接读 localStorage,登录后 navigate 引发重渲染即可拿到新状态。
const authed = () => localStorage.getItem('creatorhub.auth') !== null
const authed = () => localStorage.getItem("creatorhub.auth") !== null;
function AuthGate({ children }) {
const { pathname } = useLocation()
const loggedIn = authed()
if (!loggedIn && pathname !== '/login') return <Navigate to="/login" replace />
if (loggedIn && pathname === '/login') return <Navigate to="/accounts" replace />
return children
const { pathname } = useLocation();
const loggedIn = authed();
if (!loggedIn && pathname !== "/login")
return <Navigate to="/login" replace />;
if (loggedIn && pathname === "/login")
return <Navigate to="/accounts" replace />;
return children;
}
createRoot(document.getElementById('root')).render(
createRoot(document.getElementById("root")).render(
<StrictMode>
<HashRouter>
<Refine dataProvider={dataProvider} options={{ syncWithLocation: false }}>
@@ -45,15 +47,40 @@ createRoot(document.getElementById('root')).render(
<Route path="/" element={<Navigate to="/accounts" replace />} />
<Route path="/accounts" element={<AccountList />} />
<Route path="/accounts/:id" element={<AccountDetail />} />
<Route path="/creator/accounts" element={<CreatorAccountsPage />} />
<Route path="/creator/competitors" element={<CreatorCompetitorsPage />} />
<Route path="/creator/workbench" element={<CreatorWorkbenchPage />} />
<Route path="/creator/settings" element={<CreatorSettingsPage />} />
<Route
path="/creator/accounts"
element={<CreatorAccountsPage />}
/>
<Route
path="/creator/competitors"
element={<CreatorCompetitorsPage />}
/>
<Route
path="/creator/competitors/:id"
element={<CreatorCompetitorsPage />}
/>
<Route path="/competitors" element={<CreatorCompetitorsPage />} />
<Route
path="/competitors/:id"
element={<CreatorCompetitorsPage />}
/>
<Route
path="/creator/workbench"
element={<CreatorWorkbenchPage />}
/>
<Route path="/workbench" element={<CreatorWorkbenchPage />} />
<Route
path="/creator/settings"
element={<CreatorSettingsPage />}
/>
<Route path="/tasks" element={<TaskList />} />
<Route path="/tasks/:id" element={<TaskDetail />} />
<Route path="/audit" element={<AuditPage />} />
<Route path="/network-exits" element={<NetworkExitList />} />
<Route path="/network-exits/:id" element={<NetworkExitDetail />} />
<Route
path="/network-exits/:id"
element={<NetworkExitDetail />}
/>
<Route path="/browsers" element={<BrowserList />} />
<Route path="/browsers/new" element={<BrowserCreatePage />} />
<Route path="/browsers/:id" element={<BrowserDetail />} />
@@ -67,4 +94,4 @@ createRoot(document.getElementById('root')).render(
</Refine>
</HashRouter>
</StrictMode>,
)
);