mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-08 00:26:37 +08:00
beae8d2dd9
Move route-specific admin components from components/common/admin into app/(main)/admin/<feature>/components/. Split AdminService god object into domain services, fix UploadService to use BaseService, add AdminUploadService, consolidate DB export into DbManageService, and migrate consumers to the unified services entry.
60 lines
2.0 KiB
TypeScript
60 lines
2.0 KiB
TypeScript
"use client"
|
|
|
|
import * as React from "react"
|
|
import {motion} from "motion/react"
|
|
import {FolderOpen} from "lucide-react"
|
|
|
|
import {Tabs, TabsContent, TabsList, TabsTrigger} from "@/components/ui/tabs"
|
|
import {FileStats} from "./components/file-stats"
|
|
import {FileList} from "./components/file-list"
|
|
import {StorageConfigTab} from "./components/storage-config-tab"
|
|
|
|
export default function FilesPage() {
|
|
const [activeTab, setActiveTab] = React.useState("stats")
|
|
|
|
return (
|
|
<motion.div
|
|
initial={{ opacity: 0, y: 15 }}
|
|
animate={{ opacity: 1, y: 0 }}
|
|
transition={{ duration: 0.35, ease: "easeOut" }}
|
|
className="flex w-full flex-col gap-6 py-6"
|
|
>
|
|
{/* 顶部标题区 */}
|
|
<div className="flex items-center gap-2">
|
|
<FolderOpen className="size-5 text-primary" />
|
|
<div>
|
|
<h1 className="text-2xl font-semibold tracking-tight">存储管理</h1>
|
|
</div>
|
|
</div>
|
|
|
|
<Tabs value={activeTab} onValueChange={setActiveTab} className="w-full">
|
|
<TabsList variant="line" className="w-fit inline-flex gap-8 mb-6">
|
|
<TabsTrigger value="stats" className="px-0 pb-2 text-xs font-semibold">
|
|
文件存储信息
|
|
</TabsTrigger>
|
|
<TabsTrigger value="list" className="px-0 pb-2 text-xs font-semibold">
|
|
文件列表
|
|
</TabsTrigger>
|
|
<TabsTrigger value="storage" className="px-0 pb-2 text-xs font-semibold">
|
|
存储配置
|
|
</TabsTrigger>
|
|
</TabsList>
|
|
|
|
{/* ──────── TAB 1: 统计看板 ──────── */}
|
|
<TabsContent value="stats" className="outline-hidden">
|
|
<FileStats />
|
|
</TabsContent>
|
|
|
|
{/* ──────── TAB 2: 文件列表 ──────── */}
|
|
<TabsContent value="list" className="outline-hidden">
|
|
<FileList />
|
|
</TabsContent>
|
|
|
|
<TabsContent value="storage" className="outline-hidden">
|
|
<StorageConfigTab />
|
|
</TabsContent>
|
|
</Tabs>
|
|
</motion.div>
|
|
)
|
|
}
|