init repo

This commit is contained in:
2026-04-25 21:52:01 +08:00
commit 1a9ddce26b
105 changed files with 14183 additions and 0 deletions

View File

@@ -0,0 +1,80 @@
"use client"
import { BarChart3, Contact, Home, Settings, Zap, CheckSquare, DollarSign } from "lucide-react"
import {
Sidebar,
SidebarContent,
SidebarFooter,
SidebarGroup,
SidebarGroupContent,
SidebarHeader,
SidebarMenu,
SidebarMenuButton,
SidebarMenuItem,
} from "@/components/ui/sidebar"
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"
import Link from "next/link"
import { usePathname } from "next/navigation"
import { useTranslation } from "@/lib/i18n"
const menuItems = [
{ key: "dashboard", url: "/", icon: Home },
{ key: "deals", url: "/deals", icon: DollarSign },
{ key: "contacts", url: "/contacts", icon: Contact },
{ key: "tasks", url: "/tasks", icon: CheckSquare },
{ key: "integrations", url: "/integrations", icon: Zap },
{ key: "settings", url: "/settings", icon: Settings },
]
export function AppSidebar() {
const pathname = usePathname()
const { t } = useTranslation()
return (
<Sidebar className="border-r">
<SidebarHeader className="p-6">
<div className="flex items-center gap-2">
<div className="flex h-8 w-8 items-center justify-center rounded-lg bg-primary text-primary-foreground">
<BarChart3 className="h-4 w-4" />
</div>
<span className="text-lg font-semibold">{t("app.name")}</span>
</div>
</SidebarHeader>
<SidebarContent>
<SidebarGroup>
<SidebarGroupContent>
<SidebarMenu>
{menuItems.map((item) => (
<SidebarMenuItem key={item.key}>
<SidebarMenuButton asChild isActive={pathname === item.url}>
<Link href={item.url}>
<item.icon className="h-4 w-4" />
<span>{t(`nav.${item.key}`)}</span>
</Link>
</SidebarMenuButton>
</SidebarMenuItem>
))}
</SidebarMenu>
</SidebarGroupContent>
</SidebarGroup>
</SidebarContent>
<SidebarFooter className="p-4">
<div className="flex items-center gap-3">
<Avatar className="h-8 w-8">
<AvatarImage
src="https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=150&h=150&fit=crop&crop=face"
alt="John Doe"
className="object-cover"
/>
<AvatarFallback>JD</AvatarFallback>
</Avatar>
<div className="flex flex-col">
<span className="text-sm font-medium">{t("sidebar.userName")}</span>
<span className="text-xs text-muted-foreground">{t("sidebar.userRole")}</span>
</div>
</div>
</SidebarFooter>
</Sidebar>
)
}