import React, { useEffect, useMemo, useState } from 'react'; import { Table, Thead, Tbody, Tr, Th, Td, TableContainer, Flex, Box, Button } from '@chakra-ui/react'; import { UsageSourceEnum, UsageSourceMap } from '@fastgpt/global/support/wallet/usage/constants'; import { getUserUsages } from '@/web/support/wallet/usage/api'; import type { UsageItemType } from '@fastgpt/global/support/wallet/usage/type'; import { usePagination } from '@fastgpt/web/hooks/usePagination'; import { useLoading } from '@fastgpt/web/hooks/useLoading'; import dayjs from 'dayjs'; import MyIcon from '@fastgpt/web/components/common/Icon'; import DateRangePicker, { type DateRangeType } from '@fastgpt/web/components/common/DateRangePicker'; import { addDays } from 'date-fns'; import dynamic from 'next/dynamic'; import { useSystemStore } from '@/web/common/system/useSystemStore'; import { useTranslation } from 'next-i18next'; import { useQuery } from '@tanstack/react-query'; import { useUserStore } from '@/web/support/user/useUserStore'; import { getTeamMembers } from '@/web/support/user/team/api'; import Avatar from '@/components/Avatar'; import MySelect from '@fastgpt/web/components/common/MySelect'; import { formatNumber } from '@fastgpt/global/common/math/tools'; const UsageDetail = dynamic(() => import('./UsageDetail')); const UsageTable = () => { const { t } = useTranslation(); const { Loading } = useLoading(); const [dateRange, setDateRange] = useState({ from: addDays(new Date(), -7), to: new Date() }); const [usageSource, setUsageSource] = useState<`${UsageSourceEnum}` | ''>(''); const { isPc } = useSystemStore(); const { userInfo } = useUserStore(); const [usageDetail, setUsageDetail] = useState(); const sourceList = useMemo( () => [ { label: t('common.All'), value: '' }, ...Object.entries(UsageSourceMap).map(([key, value]) => ({ label: t(value.label), value: key })) ], [t] ); const [selectTmbId, setSelectTmbId] = useState(userInfo?.team?.tmbId); const { data: members = [] } = useQuery(['getMembers', userInfo?.team?.teamId], () => { if (!userInfo?.team?.teamId) return []; return getTeamMembers(); }); const tmbList = useMemo( () => members.map((item) => ({ label: ( {item.memberName} ), value: item.tmbId })), [members] ); const { data: usages, isLoading, Pagination, getData } = usePagination({ api: getUserUsages, pageSize: isPc ? 20 : 10, params: { dateStart: dateRange.from || new Date(), dateEnd: addDays(dateRange.to || new Date(), 1), source: usageSource, teamMemberId: selectTmbId }, defaultRequest: false }); useEffect(() => { getData(1); }, [usageSource, selectTmbId]); return ( {tmbList.length > 1 && userInfo?.team?.canWrite && ( {t('support.user.team.member')} )} getData(1)} /> {/* */} {usages.map((item) => ( {/* */} ))}
{t('user.team.Member Name')}{t('user.Time')} { setUsageSource(e); }} w={'130px'} > {t('user.Application Name')} {t('support.wallet.usage.Total points')}
{item.memberName}{dayjs(item.time).format('YYYY/MM/DD HH:mm:ss')} {t(UsageSourceMap[item.source]?.label) || '-'} {t(item.appName) || '-'} {formatNumber(item.totalPoints) || 0}
{!isLoading && usages.length === 0 && ( 无使用记录~ )} {!!usageDetail && ( setUsageDetail(undefined)} /> )}
); }; export default React.memo(UsageTable);