import React, { useEffect, useMemo, useState } from 'react'; import { Flex, Box, HStack } from '@chakra-ui/react'; import { UsageSourceEnum, UsageSourceMap } from '@fastgpt/global/support/wallet/usage/constants'; import DateRangePicker, { type DateRangeType } from '@fastgpt/web/components/common/DateRangePicker'; import { addDays, startOfMonth, startOfWeek } from 'date-fns'; import { useTranslation } from 'next-i18next'; import { useUserStore } from '@/web/support/user/useUserStore'; import Avatar from '@fastgpt/web/components/common/Avatar'; import AccountContainer from '@/pageComponents/account/AccountContainer'; import { serviceSideProps } from '@fastgpt/web/common/system/nextjs'; import { useScrollPagination } from '@fastgpt/web/hooks/useScrollPagination'; import { getTeamMembers } from '@/web/support/user/team/api'; import FillRowTabs from '@fastgpt/web/components/common/Tabs/FillRowTabs'; import MultipleSelect, { useMultipleSelect } from '@fastgpt/web/components/common/MySelect/MultipleSelect'; import SearchInput from '@fastgpt/web/components/common/Input/SearchInput'; import MySelect from '@fastgpt/web/components/common/MySelect'; import { useRouter } from 'next/router'; import dynamic from 'next/dynamic'; import UsageTableList from '@/pageComponents/account/usage/UsageTable'; import { UnitType } from '@/pageComponents/account/usage/type'; import { useSystem } from '@fastgpt/web/hooks/useSystem'; const UsageDashboard = dynamic(() => import('@/pageComponents/account/usage/Dashboard')); export enum UsageTabEnum { detail = 'detail', dashboard = 'dashboard' } const UsageTable = () => { const { t } = useTranslation(); const { userInfo } = useUserStore(); const { isPc } = useSystem(); const router = useRouter(); const { usageTab = UsageTabEnum.detail } = router.query as { usageTab: `${UsageTabEnum}` }; const [unit, setUnit] = useState('day'); const [dateRange, setDateRange] = useState({ from: addDays(new Date(), -7), to: new Date() }); const { data: members, ScrollData, total: memberTotal } = useScrollPagination(getTeamMembers, {}); const { value: selectTmbIds, setValue: setSelectTmbIds, isSelectAll: isSelectAllTmb, setIsSelectAll: setIsSelectAllTmb } = useMultipleSelect([], true); const tmbList = useMemo( () => members.map((item) => ({ label: ( {item.memberName} ), value: item.tmbId })), [members] ); const { value: usageSources, setValue: setUsageSources, isSelectAll: isSelectAllSource, setIsSelectAll: setIsSelectAllSource } = useMultipleSelect(Object.values(UsageSourceEnum), true); const sourceList = useMemo( () => Object.entries(UsageSourceMap).map(([key, value]) => ({ label: t(value.label as any), value: key as UsageSourceEnum })), [t] ); const [projectName, setProjectName] = useState(''); const [inputValue, setInputValue] = useState(''); const Tabs = useMemo( () => ( { router.replace({ query: { ...router.query, usageTab: e } }); }} /> ), [router, t, usageTab] ); const Selectors = useMemo( () => ( {t('common:user.Time')} {/* {usageTab === UsageTabEnum.dashboard && ( bg={'myGray.50'} minH={'32px'} height={'32px'} fontSize={'mini'} ml={1} list={[ { label: t('account_usage:every_day'), value: 'day' }, { label: t('account_usage:every_month'), value: 'month' } ]} value={unit} onChange={setUnit} /> )} */} {userInfo?.team?.permission.hasManagePer && ( {t('account_usage:member')} list={tmbList} value={selectTmbIds} onSelect={(val) => { setSelectTmbIds(val as string[]); }} itemWrap={false} height={'32px'} bg={'myGray.50'} w={'160px'} ScrollData={ScrollData} isSelectAll={isSelectAllTmb} setIsSelectAll={setIsSelectAllTmb} /> )} {t('account_usage:source')} list={sourceList} value={usageSources} onSelect={setUsageSources} isSelectAll={isSelectAllSource} setIsSelectAll={setIsSelectAllSource} itemWrap={false} height={'32px'} bg={'myGray.50'} w={'160px'} /> {/* {usageTab === UsageTabEnum.detail && ( {t('common:user.Application Name')} setInputValue(e.target.value)} /> )} */} ), [ t, dateRange, userInfo?.team?.permission.hasManagePer, tmbList, selectTmbIds, ScrollData, isSelectAllTmb, setIsSelectAllTmb, sourceList, usageSources, setUsageSources, isSelectAllSource, setIsSelectAllSource, setSelectTmbIds ] ); useEffect(() => { const timer = setTimeout(() => { setProjectName(inputValue); }, 300); return () => clearTimeout(timer); }, [inputValue]); const filterParams = useMemo( () => ({ dateRange, selectTmbIds, projectName, isSelectAllTmb, usageSources, isSelectAllSource, unit }), [dateRange, isSelectAllSource, unit, isSelectAllTmb, projectName, selectTmbIds, usageSources] ); return ( {usageTab === UsageTabEnum.detail && ( )} {usageTab === UsageTabEnum.dashboard && ( )} ); }; export async function getServerSideProps(content: any) { return { props: { ...(await serviceSideProps(content, ['account_usage', 'account'])) } }; } export default React.memo(UsageTable);