import React, { useCallback } from 'react'; import { Box, Flex, Button, useDisclosure } from '@chakra-ui/react'; import { useForm } from 'react-hook-form'; import { UserUpdateParams } from '@/types/user'; import { putUserInfo } from '@/api/user'; import { useToast } from '@/hooks/useToast'; import { useGlobalStore } from '@/store/global'; import { useUserStore } from '@/store/user'; import { UserType } from '@/types/user'; import { useRouter } from 'next/router'; import { useQuery } from '@tanstack/react-query'; import dynamic from 'next/dynamic'; import { useSelectFile } from '@/hooks/useSelectFile'; import { compressImg } from '@/utils/file'; import { getErrText } from '@/utils/tools'; import { feConfigs } from '@/store/static'; import Loading from '@/components/Loading'; import Avatar from '@/components/Avatar'; const PayModal = dynamic(() => import('./PayModal'), { loading: () => , ssr: false }); const UserInfo = () => { const router = useRouter(); const { userInfo, updateUserInfo, initUserInfo } = useUserStore(); const { setLoading } = useGlobalStore(); const { reset } = useForm({ defaultValues: userInfo as UserType }); const { toast } = useToast(); const { isOpen: isOpenPayModal, onClose: onClosePayModal, onOpen: onOpenPayModal } = useDisclosure(); const { File, onOpen: onOpenSelectFile } = useSelectFile({ fileType: '.jpg,.png', multiple: false }); const onclickSave = useCallback( async (data: UserUpdateParams) => { setLoading(true); try { await putUserInfo({ avatar: data.avatar }); updateUserInfo({ avatar: data.avatar }); reset(data); toast({ title: '更新数据成功', status: 'success' }); } catch (error) { toast({ title: getErrText(error), status: 'error' }); } setLoading(false); }, [reset, setLoading, toast, updateUserInfo] ); const onSelectFile = useCallback( async (e: File[]) => { const file = e[0]; if (!file) return; try { const src = await compressImg({ file, maxW: 100, maxH: 100 }); onclickSave({ ...userInfo, avatar: src }); } catch (err: any) { toast({ title: typeof err === 'string' ? err : '头像选择异常', status: 'warning' }); } }, [onclickSave, toast, userInfo] ); useQuery(['init'], initUserInfo, { onSuccess(res) { reset(res); } }); return ( 头像: 账号: {userInfo?.username} {feConfigs?.show_userDetail && ( 余额: {userInfo?.balance} )} {isOpenPayModal && } ); }; export default UserInfo;