import React, { useCallback, useRef } from 'react'; import { Box, Flex, useTheme } from '@chakra-ui/react'; import { useGlobalStore } from '@/store/global'; import { useRouter } from 'next/router'; import dynamic from 'next/dynamic'; import { clearCookie } from '@/utils/user'; import { useUserStore } from '@/store/user'; import { useConfirm } from '@/hooks/useConfirm'; import PageContainer from '@/components/PageContainer'; import SideTabs from '@/components/SideTabs'; import Tabs from '@/components/Tabs'; import UserInfo from './components/Info'; const BillTable = dynamic(() => import('./components/BillTable'), { ssr: false }); const PayRecordTable = dynamic(() => import('./components/PayRecordTable'), { ssr: false }); const InformTable = dynamic(() => import('./components/InformTable'), { ssr: false }); enum TabEnum { 'info' = 'info', 'bill' = 'bill', 'pay' = 'pay', 'inform' = 'inform', 'loginout' = 'loginout' } const NumberSetting = ({ currentTab }: { currentTab: `${TabEnum}` }) => { const tabList = useRef([ { icon: 'meLight', label: '个人信息', id: TabEnum.info, Component: }, { icon: 'billRecordLight', label: '消费记录', id: TabEnum.bill, Component: }, { icon: 'payRecordLight', label: '充值记录', id: TabEnum.pay, Component: }, { icon: 'informLight', label: '通知', id: TabEnum.inform, Component: }, { icon: 'loginoutLight', label: '登出', id: TabEnum.loginout, Component: () => <> } ]); const { openConfirm, ConfirmChild } = useConfirm({ content: '确认退出登录?' }); const router = useRouter(); const theme = useTheme(); const { isPc } = useGlobalStore(); const { setUserInfo } = useUserStore(); const setCurrentTab = useCallback( (tab: string) => { if (tab === TabEnum.loginout) { openConfirm(() => { clearCookie(); setUserInfo(null); router.replace('/login'); })(); } else { router.replace({ query: { currentTab: tab } }); } }, [openConfirm, router, setUserInfo] ); return ( {isPc ? ( ) : ( ({ id: item.id, label: item.label }))} activeId={currentTab} onChange={setCurrentTab} /> )} {currentTab === TabEnum.info && } {currentTab === TabEnum.bill && } {currentTab === TabEnum.pay && } {currentTab === TabEnum.inform && } ); }; export async function getServerSideProps({ query }: any) { return { props: { currentTab: query?.currentTab || TabEnum.info } }; } export default NumberSetting;