先提交上去

This commit is contained in:
Fox_block
2026-03-16 20:49:46 +08:00
parent 86abcb5602
commit 192b48cab0
303 changed files with 30019 additions and 5846 deletions
+137
View File
@@ -0,0 +1,137 @@
import React, { Suspense, lazy } from "react"
import { Layout, Space, Button, Tag, Spin } from "antd"
import { Routes, Route, Navigate } from "react-router-dom"
import { useTranslation } from "react-i18next"
const Home = lazy(() => import("./Home").then((m) => ({ default: m.Home })))
const StudentManager = lazy(() =>
import("./StudentManager").then((m) => ({ default: m.StudentManager }))
)
const Settings = lazy(() => import("./Settings").then((m) => ({ default: m.Settings })))
const ReasonManager = lazy(() =>
import("./ReasonManager").then((m) => ({ default: m.ReasonManager }))
)
const ScoreManager = lazy(() => import("./ScoreManager").then((m) => ({ default: m.ScoreManager })))
const Leaderboard = lazy(() => import("./Leaderboard").then((m) => ({ default: m.Leaderboard })))
const SettlementHistory = lazy(() =>
import("./SettlementHistory").then((m) => ({ default: m.SettlementHistory }))
)
const AutoScoreManager = lazy(() =>
import("./AutoScoreManager").then((m) => ({ default: m.AutoScoreManager }))
)
const { Content } = Layout
interface ContentAreaProps {
permission: "admin" | "points" | "view"
hasAnyPassword: boolean
onAuthClick: () => void
onLogout: () => void
}
export function ContentArea({
permission,
hasAnyPassword,
onAuthClick,
onLogout,
}: ContentAreaProps): React.JSX.Element {
const { t } = useTranslation()
const permissionTag = (
<Tag
color={permission === "admin" ? "success" : permission === "points" ? "warning" : "default"}
>
{permission === "admin"
? t("permissions.admin")
: permission === "points"
? t("permissions.points")
: t("permissions.view")}
</Tag>
)
return (
<Layout
style={{
flex: 1,
display: "flex",
flexDirection: "column",
overflow: "hidden",
background: "var(--ss-bg-color)",
}}
>
<div
style={
{
height: "40px",
display: "flex",
alignItems: "center",
background: "var(--ss-header-bg)",
borderBottom: "1px solid var(--ss-border-color)",
flexShrink: 0,
} as React.CSSProperties
}
>
<div style={{ flex: 1 }} />
<div
style={
{
display: "flex",
alignItems: "center",
paddingRight: "12px",
} as React.CSSProperties
}
>
<Space size="small">
{permissionTag}
{hasAnyPassword && (
<>
<Button size="small" onClick={onAuthClick}>
{t("auth.enterPassword")}
</Button>
<Button size="small" danger onClick={onLogout}>
{t("auth.lock")}
</Button>
</>
)}
</Space>
</div>
</div>
<Content style={{ flex: 1, overflowY: "auto" }}>
<Suspense
fallback={
<div
style={{
display: "flex",
alignItems: "center",
justifyContent: "center",
height: "100%",
flexDirection: "column",
gap: 16,
}}
>
<Spin size="large" />
</div>
}
>
<Routes>
<Route
path="/"
element={<Home canEdit={permission === "admin" || permission === "points"} />}
/>
<Route path="/students" element={<StudentManager canEdit={permission === "admin"} />} />
<Route
path="/score"
element={<ScoreManager canEdit={permission === "admin" || permission === "points"} />}
/>
<Route path="/leaderboard" element={<Leaderboard />} />
<Route path="/settlements" element={<SettlementHistory />} />
<Route path="/reasons" element={<ReasonManager canEdit={permission === "admin"} />} />
<Route path="/auto-score" element={<AutoScoreManager />} />
<Route path="/settings" element={<Settings permission={permission} />} />
<Route path="*" element={<Navigate to="/" replace />} />
</Routes>
</Suspense>
</Content>
</Layout>
)
}