Files
taiji-pda-v0/components/theme-toggle.tsx
T
zhanggangyong 6f9fc26d1b feat: 添加登录页面视频背景、主题切换和AI助手头像
- 登录页面添加视频背景,登录框使用透明设计
- 实现主题切换功能(纯白色、灰色、纯黑色)
- 添加AI助手组件,使用用户提供的二次元角色头像
- 优化颜色方案,使界面更加专业
- 更新API客户端,修复租户密码重置接口
2026-01-11 18:00:14 +00:00

66 lines
2.0 KiB
TypeScript

"use client"
import * as React from "react"
import { useTheme } from "next-themes"
import { Button } from "@/components/ui/button"
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu"
import { Monitor, Moon, Sun } from "lucide-react"
import { useLanguage } from "@/contexts/language-context"
export function ThemeToggle() {
const { theme, setTheme } = useTheme()
const { t } = useLanguage()
const [mounted, setMounted] = React.useState(false)
React.useEffect(() => {
setMounted(true)
}, [])
if (!mounted) {
return (
<Button variant="ghost" size="icon" className="h-9 w-9">
<Sun className="h-4 w-4" />
</Button>
)
}
const getIcon = () => {
if (theme === "light") return <Sun className="h-4 w-4" />
if (theme === "black") return <Moon className="h-4 w-4" />
return <Monitor className="h-4 w-4" />
}
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="ghost" size="icon" className="h-9 w-9">
{getIcon()}
<span className="sr-only">{t("切换主题", "Toggle theme")}</span>
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end">
<DropdownMenuItem onClick={() => setTheme("light")}>
<Sun className="mr-2 h-4 w-4" />
<span>{t("纯白色", "Light")}</span>
{theme === "light" && <span className="ml-auto">✓</span>}
</DropdownMenuItem>
<DropdownMenuItem onClick={() => setTheme("dark")}>
<Monitor className="mr-2 h-4 w-4" />
<span>{t("灰色", "Gray")}</span>
{theme === "dark" && <span className="ml-auto">✓</span>}
</DropdownMenuItem>
<DropdownMenuItem onClick={() => setTheme("black")}>
<Moon className="mr-2 h-4 w-4" />
<span>{t("纯黑色", "Black")}</span>
{theme === "black" && <span className="ml-auto">✓</span>}
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
)
}