"use client" import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar" import { Button } from "@/components/ui/button" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { Separator } from "@/components/ui/separator" import { Switch } from "@/components/ui/switch" import { Textarea } from "@/components/ui/textarea" import { notifySuccess } from "@/lib/toast" import type { UserRole } from "@/lib/types" import type { ThemePreference } from "@/store/auth" import { useAuthStore } from "@/store/auth" import { Camera } from "lucide-react" import { useTheme } from "next-themes" import Link from "next/link" import { useRef, useState } from "react" export default function SettingsPage() { const { currentRole, verifiedRoles, switchRole, user, updateProfile, notificationPrefs, setNotificationPref, } = useAuthStore() const [nickname, setNickname] = useState(user?.nickname ?? "") const [bio, setBio] = useState(user?.bio ?? "") const [avatar, setAvatar] = useState(user?.avatar ?? "") const fileRef = useRef(null) const isRoleVerified = (role: UserRole) => verifiedRoles.includes(role) const { theme, setTheme } = useTheme() const setThemePreference = useAuthStore((s) => s.setThemePreference) function handleThemeChange(value: string) { const pref = value as ThemePreference setTheme(pref) setThemePreference(pref) } return (

个人设置

头像
{user?.nickname?.[0] ?? "?"} { const file = event.target.files?.[0] if (!file) return setAvatar(URL.createObjectURL(file)) event.target.value = "" }} />

点击更换头像,支持 JPG、PNG 格式

基本信息
setNickname(event.target.value)} />