import React, { useCallback, useState } from 'react'; import { Card, Box, Flex, Button, Table, Thead, Tbody, Tr, Th, Td, TableContainer, Select, Input, IconButton, useDisclosure } from '@chakra-ui/react'; import { DeleteIcon } from '@chakra-ui/icons'; import { useForm, useFieldArray } from 'react-hook-form'; import { UserUpdateParams } from '@/types/user'; import { putUserInfo, getUserBills, getPayOrders, checkPayResult } from '@/api/user'; import { useToast } from '@/hooks/useToast'; import { useGlobalStore } from '@/store/global'; import { useUserStore } from '@/store/user'; import { UserType } from '@/types/user'; import { usePaging } from '@/hooks/usePaging'; import type { UserBillType } from '@/types/user'; import { useQuery } from '@tanstack/react-query'; import dynamic from 'next/dynamic'; import { PaySchema } from '@/types/mongoSchema'; import dayjs from 'dayjs'; import { formatPrice } from '@/utils/user'; import WxConcat from '@/components/WxConcat'; const PayModal = dynamic(() => import('./components/PayModal')); const NumberSetting = () => { const { userInfo, updateUserInfo, initUserInfo } = useUserStore(); const { setLoading } = useGlobalStore(); const { register, handleSubmit, control } = useForm({ defaultValues: userInfo as UserType }); const [showPay, setShowPay] = useState(false); const { isOpen: isOpenWx, onOpen: onOpenWx, onClose: onCloseWx } = useDisclosure(); const { toast } = useToast(); const { fields: accounts, append: appendAccount, remove: removeAccount } = useFieldArray({ control, name: 'accounts' }); const { setPageNum, data: bills } = usePaging({ api: getUserBills, pageSize: 30 }); const [payOrders, setPayOrders] = useState([]); const onclickSave = useCallback( async (data: UserUpdateParams) => { setLoading(true); try { await putUserInfo(data); updateUserInfo(data); toast({ title: '更新成功', status: 'success' }); } catch (error) {} setLoading(false); }, [setLoading, toast, updateUserInfo] ); useQuery(['init'], initUserInfo); useQuery(['initPayOrder'], getPayOrders, { onSuccess(res) { setPayOrders(res); } }); const handleRefreshPayOrder = useCallback( async (payId: string) => { try { setLoading(true); await checkPayResult(payId); const res = await getPayOrders(); setPayOrders(res); } catch (error: any) { toast({ title: error?.message, status: 'warning' }); console.log(error); } setLoading(false); }, [setLoading, toast] ); return ( <> 账号信息 邮箱: {userInfo?.email} 余额: {userInfo?.balance} 关联账号 {accounts.length === 0 && ( )} {accounts.map((item, i) => ( ))}
账号类型
} colorScheme={'red'} onClick={() => { removeAccount(i); handleSubmit(onclickSave)(); }} />
充值记录 {payOrders.map((item) => ( ))}
订单号 时间 金额 消费
{item.orderId} {item.createTime ? dayjs(item.createTime).format('YYYY/MM/DD HH:mm:ss') : '-'} {formatPrice(item.price)}元 {item.status} {item.status === 'NOTPAY' && ( )}
使用记录(最新30条) {bills.map((item) => ( ))}
时间 内容长度 消费
{item.time} {item.textLen} {item.price}元
{showPay && setShowPay(false)} />} {/* wx 联系 */} {isOpenWx && } ); }; export default NumberSetting;