import React, { useCallback } from 'react'; import { Box, Flex, useTheme } from '@chakra-ui/react'; import { useSystemStore } from '@/web/common/system/useSystemStore'; import { useRouter } from 'next/router'; import dynamic from 'next/dynamic'; import { useUserStore } from '@/web/support/user/useUserStore'; import { useConfirm } from '@fastgpt/web/hooks/useConfirm'; import PageContainer from '@/components/PageContainer'; import SideTabs from '@/components/SideTabs'; import LightRowTabs from '@fastgpt/web/components/common/Tabs/LightRowTabs'; import UserInfo from './components/Info/index'; import { serviceSideProps } from '@/web/common/utils/i18n'; import { useTranslation } from 'next-i18next'; import Script from 'next/script'; import { useSystem } from '@fastgpt/web/hooks/useSystem'; const Promotion = dynamic(() => import('./components/Promotion')); const UsageTable = dynamic(() => import('./components/UsageTable')); const BillAndInvoice = dynamic(() => import('./components/bill/BillAndInvoice')); const InformTable = dynamic(() => import('./components/InformTable')); const ApiKeyTable = dynamic(() => import('./components/ApiKeyTable')); const Individuation = dynamic(() => import('./components/Individuation')); enum TabEnum { 'info' = 'info', 'promotion' = 'promotion', 'usage' = 'usage', 'bill' = 'bill', 'inform' = 'inform', 'individuation' = 'individuation', 'apikey' = 'apikey', 'loginout' = 'loginout' } const Account = ({ currentTab }: { currentTab: TabEnum }) => { const { t } = useTranslation(); const { userInfo, setUserInfo } = useUserStore(); const { feConfigs, systemVersion } = useSystemStore(); const { isPc } = useSystem(); const tabList = [ { icon: 'support/user/userLight', label: t('common:user.Personal Information'), value: TabEnum.info }, ...(feConfigs?.isPlus ? [ { icon: 'support/usage/usageRecordLight', label: t('common:user.Usage Record'), value: TabEnum.usage } ] : []), // ...(feConfigs?.show_pay && userInfo?.team?.permission.hasWritePer ...(feConfigs?.show_pay || userInfo?.team?.permission.hasWritePer ? [ { icon: 'support/bill/payRecordLight', label: t('common:support.wallet.Bills'), value: TabEnum.bill } ] : []), ...(feConfigs?.show_promotion ? [ { icon: 'support/account/promotionLight', label: t('common:user.Promotion Record'), value: TabEnum.promotion } ] : []), ...(userInfo?.team?.permission.hasWritePer ? [ { icon: 'support/outlink/apikeyLight', label: t('common:user.apikey.key'), value: TabEnum.apikey } ] : []), { icon: 'support/user/individuation', label: t('common:support.account.Individuation'), value: TabEnum.individuation }, ...(feConfigs.isPlus ? [ { icon: 'support/user/informLight', label: t('common:user.Notice'), value: TabEnum.inform } ] : []), { icon: 'support/account/loginoutLight', label: t('common:user.Sign Out'), value: TabEnum.loginout } ]; const { openConfirm, ConfirmModal } = useConfirm({ content: t('common:support.user.logout.confirm') }); const router = useRouter(); const theme = useTheme(); const setCurrentTab = useCallback( (tab: string) => { if (tab === TabEnum.loginout) { openConfirm(() => { setUserInfo(null); router.replace('/login'); })(); } else { router.replace({ query: { currentTab: tab } }); } }, [openConfirm, router, setUserInfo] ); return ( <> {isPc ? ( flex={1} mx={'auto'} mt={2} w={'100%'} list={tabList} value={currentTab} onChange={setCurrentTab} /> V{systemVersion} ) : ( m={'auto'} size={isPc ? 'md' : 'sm'} list={tabList.map((item) => ({ value: item.value, label: item.label }))} value={currentTab} onChange={setCurrentTab} /> )} {currentTab === TabEnum.info && } {currentTab === TabEnum.promotion && } {currentTab === TabEnum.usage && } {currentTab === TabEnum.bill && } {currentTab === TabEnum.individuation && } {currentTab === TabEnum.inform && } {currentTab === TabEnum.apikey && } ); }; export async function getServerSideProps(content: any) { return { props: { currentTab: content?.query?.currentTab || TabEnum.info, ...(await serviceSideProps(content, ['publish', 'user'])) } }; } export default Account;