"use client"; import { useEffect, useState } from "react"; import { usePathname, useRouter } from "next/navigation"; import Link from "next/link"; import { Book, ChevronRight, FileText, LogOut, Menu, MessageSquare, Search, User, } from "lucide-react"; import Breadcrumb from "@/components/ui/breadcrumb"; import { cn } from "@/lib/utils"; type NavigationChild = { name: string; href: string; }; type NavigationItem = { name: string; icon: React.ComponentType<{ className?: string }>; href?: string; children?: NavigationChild[]; defaultOpen?: boolean; }; export default function DashboardLayout({ children, }: { children: React.ReactNode; }) { const router = useRouter(); const pathname = usePathname(); const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); const [openGroups, setOpenGroups] = useState>({ knowledge: pathname.startsWith("/dashboard/knowledge"), "doc-processing": pathname.startsWith("/dashboard/doc-processing"), }); useEffect(() => { const token = localStorage.getItem("token"); if (!token) { router.push("/login"); } }, [router]); const handleLogout = () => { localStorage.removeItem("token"); router.push("/login"); }; useEffect(() => { if (pathname.startsWith("/dashboard/knowledge")) { setOpenGroups((prev) => ({ ...prev, knowledge: true })); } if (pathname.startsWith("/dashboard/doc-processing")) { setOpenGroups((prev) => ({ ...prev, "doc-processing": true })); } }, [pathname]); const toggleGroup = (key: string) => { setOpenGroups((prev) => ({ ...prev, [key]: !prev[key], })); }; const navigation: NavigationItem[] = [ { name: "知识库", icon: Book, defaultOpen: true, children: [ { name: "文档知识库", href: "/dashboard/knowledge/document" }, { name: "代码知识库", href: "/dashboard/knowledge/code" }, ], }, { name: "对话", href: "/dashboard/chat", icon: MessageSquare }, { name: "文档处理", icon: FileText, children: [ { name: "需求提取", href: "/dashboard/doc-processing/extract" }, { name: "测试用例生成", href: "/dashboard/doc-processing/test-case-gen", }, ], }, { name: "一致性分析", href: "/dashboard/consistency-analysis", icon: Search, }, { name: "API 密钥", href: "/dashboard/api-keys", icon: User }, ]; return (
标志 RAG 知识助手
{children}
); } export const dashboardConfig = { mainNav: [], sidebarNav: [ { title: "文档知识库", href: "/dashboard/knowledge/document", icon: "database", }, { title: "代码知识库", href: "/dashboard/knowledge/code", icon: "braces", }, { title: "对话", href: "/dashboard/chat", icon: "messageSquare", }, { title: "文档处理", href: "/dashboard/doc-processing/extract", icon: "fileText", }, { title: "一致性分析", href: "/dashboard/consistency-analysis", icon: "search", }, { title: "API 密钥", href: "/dashboard/api-keys", icon: "key", }, ], };