返回 AiToEarn
LayoutBody.tsx
根目录 / project / aitoearn-electron / src / layout / LayoutBody.tsx
1 import { useUserStore } from '@/store/user';
2 import { useEffect } from 'react';
3 import { Navigate, Outlet } from 'react-router-dom';
4 import Navigation from './Navigation';
5 import styles from './layoutBody.module.scss';
6 import { useAccountStore } from '../store/account';
7 import { sleep } from '../../commont/utils';
8 import { useBellMessageStroe } from '../store/bellMessageStroe';
9
10 export const LayoutBody = () => {
11 const userStore = useUserStore();
12
13 // 查询用户信息
14 const queryUserInfo = async () => {
15 let count = 0;
16 while (true) {
17 const res = await userStore.getUserInfo().catch(() => false);
18 if (res || count >= 10) break;
19 await sleep(1000);
20 count++;
21 }
22 };
23
24 useEffect(() => {
25 useBellMessageStroe.getState().videoPublishProgressInit();
26 if (userStore.token) {
27 queryUserInfo();
28 } else {
29 userStore.logout();
30 }
31 }, []);
32
33 // 添加键盘事件监听
34 useEffect(() => {
35 const handleKeyDown = (event: KeyboardEvent) => {
36 if (event.ctrlKey && event.code === 'KeyI') {
37 event.preventDefault();
38 window.ipcRenderer.invoke('OPEN_DEV_TOOLS', 'right');
39 }
40 };
41 document.addEventListener('keydown', handleKeyDown);
42
43 return () => {
44 document.removeEventListener('keydown', handleKeyDown);
45 };
46 }, []);
47
48 useEffect(() => {
49 if (userStore.token) {
50 useAccountStore.getState().init();
51 } else {
52 useAccountStore.getState().clear();
53 }
54 }, [userStore.token]);
55
56 if (!userStore.token) {
57 return <Navigate to="/login" replace />;
58 }
59
60 return (
61 <div className={styles.layoutBody}>
62 <Navigation />
63 <main className="layoutBody-main">
64 <Outlet />
65 </main>
66 </div>
67 );
68 };
69
69 lines Plain Text