"use client" import * as React from "react" import Link from "next/link" import {motion, useAnimation} from "motion/react" import {useMutation, useQuery, useQueryClient} from "@tanstack/react-query" import {Avatar, AvatarFallback, AvatarImage} from "@/components/ui/avatar" import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from "@/components/ui/breadcrumb" import {useUser} from "@/contexts/user-context" import {ArrowRight, Info, Link2, Loader2, Lock, Shield, Unlink} from "lucide-react" import {Button} from "@/components/ui/button" import {Input} from "@/components/ui/input" import {Separator} from "@/components/ui/separator" import {AuthService} from "@/lib/services" import {toast} from "sonner" export function ProfileMain() { const { user, loading, refetch } = useUser() const controls = useAnimation() const isAnimatingRef = React.useRef(false) const queryClient = useQueryClient() const [oldPassword, setOldPassword] = React.useState("") const [newPassword, setNewPassword] = React.useState("") const [confirmPassword, setConfirmPassword] = React.useState("") const changePasswordMutation = useMutation({ mutationFn: (req: any) => AuthService.changePassword(req), onSuccess: () => { toast.success("密码修改成功") setOldPassword("") setNewPassword("") setConfirmPassword("") void refetch() }, onError: (error: Error) => { toast.error(error.message || "修改密码失败,请重试") }, }) const handlePasswordChange = (e: React.FormEvent) => { e.preventDefault() if (newPassword !== confirmPassword) { toast.error("两次输入的新密码不一致") return } if (newPassword.length < 8) { toast.error("新密码长度不能少于 8 位") return } changePasswordMutation.mutate({ old_password: oldPassword, new_password: newPassword, }) } const externalAccountBindingsQuery = useQuery({ queryKey: ["auth", "external-accounts"], queryFn: () => AuthService.getExternalAccountBindings(), }) const publicAuthSourcesQuery = useQuery({ queryKey: ["auth", "public-sources"], queryFn: () => AuthService.getAuthSources(), }) const bindSourceMutation = useMutation({ mutationFn: async (sourceName: string) => { const { authorize_url } = await AuthService.getAuthorizeUrl(sourceName, "bind") sessionStorage.setItem("redirect_after_login", `${window.location.pathname}${window.location.search}`) window.location.href = authorize_url }, onError: (error: Error) => { toast.error(error.message || "绑定认证源失败") }, }) const handleAvatarClick = () => { if (isAnimatingRef.current) return isAnimatingRef.current = true controls.start({ rotate: [0, -20, 20, -20, 20, 0], transition: { duration: 0.5, ease: "easeInOut" } }) setTimeout(() => { isAnimatingRef.current = false }, 650) } if (loading) { return (
您的个人账户基本信息
更改您的账号密码以确保安全。密码长度不能少于 8 位。
密码风险提示
为了账号安全,您必须修改初始密码。
管理并关联您的第三方授权账户,便于快捷登录与验证