import { Box, Button, Flex, Table, TableContainer, Tbody, Td, Th, Thead, Tr } from '@chakra-ui/react'; import { formatNumber } from '@fastgpt/global/common/math/tools'; import { UsageSourceMap } from '@fastgpt/global/support/wallet/usage/constants'; import { UsageItemType } from '@fastgpt/global/support/wallet/usage/type'; import EmptyTip from '@fastgpt/web/components/common/EmptyTip'; import MyBox from '@fastgpt/web/components/common/MyBox'; import dayjs from 'dayjs'; import { useTranslation } from 'next-i18next'; import React, { useMemo, useState } from 'react'; import Avatar from '@fastgpt/web/components/common/Avatar'; import { usePagination } from '@fastgpt/web/hooks/usePagination'; import { getUserUsages } from '@/web/support/wallet/usage/api'; import { addDays } from 'date-fns'; import dynamic from 'next/dynamic'; import { UsageFilterParams } from './type'; import PopoverConfirm from '@fastgpt/web/components/common/MyPopover/PopoverConfirm'; import { useRequest2 } from '@fastgpt/web/hooks/useRequest'; import { downloadFetch } from '@/web/common/system/utils'; const UsageDetail = dynamic(() => import('./UsageDetail')); const UsageTableList = ({ filterParams, Tabs, Selectors }: { Tabs: React.ReactNode; Selectors: React.ReactNode; filterParams: UsageFilterParams; }) => { const { t } = useTranslation(); const { dateRange, selectTmbIds, isSelectAllTmb, usageSources, isSelectAllSource, projectName } = filterParams; const requestParans = useMemo( () => ({ dateStart: dateRange.from || new Date(), dateEnd: addDays(dateRange.to || new Date(), 1), sources: isSelectAllSource ? undefined : usageSources, teamMemberIds: isSelectAllTmb ? undefined : selectTmbIds, projectName }), [ dateRange.from, dateRange.to, isSelectAllSource, isSelectAllTmb, projectName, selectTmbIds, usageSources ] ); const { data: usages, isLoading, Pagination, total } = usePagination(getUserUsages, { pageSize: 20, params: requestParans, refreshDeps: [requestParans] }); const [usageDetail, setUsageDetail] = useState(); const { runAsync: exportUsage } = useRequest2( async () => { await downloadFetch({ url: `/api/proApi/support/wallet/usage/exportUsage`, filename: `usage.csv`, body: requestParans }); }, { refreshDeps: [requestParans] } ); return ( <> {Tabs} {Selectors} {t('common:Export')}} showCancel content={t('account_usage:export_confirm_tip', { total })} onConfirm={exportUsage} /> {usages.map((item) => ( ))}
{t('common:user.Time')} {t('account_usage:member')} {t('account_usage:user_type')} {t('account_usage:project_name')} {t('account_usage:total_points')}
{dayjs(item.time).format('YYYY/MM/DD HH:mm:ss')} {item.sourceMember.name} {t(UsageSourceMap[item.source]?.label as any) || '-'} {t(item.appName as any) || '-'} {formatNumber(item.totalPoints) || 0}
{!isLoading && usages.length === 0 && ( )}
{!!usageDetail && ( setUsageDetail(undefined)} /> )} ); }; export default React.memo(UsageTableList);