File size: 1,524 Bytes
04d557b
 
 
 
 
04aba1b
6b8fc2c
503735c
04d557b
04aba1b
 
6b8fc2c
 
04aba1b
aa396c5
04d557b
04aba1b
04d557b
 
 
 
 
 
 
04aba1b
 
657bc8a
04aba1b
 
 
 
 
 
04d557b
4086c42
04aba1b
 
 
4086c42
 
04aba1b
 
04d557b
aa396c5
 
6b8fc2c
04aba1b
503735c
 
 
aa396c5
 
 
 
503735c
 
04aba1b
 
6b8fc2c
04aba1b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import {
  useFetchUserInfo,
  useLogout,
  useSelectUserInfo,
} from '@/hooks/userSettingHook';
import authorizationUtil from '@/utils/authorizationUtil';
import type { MenuProps } from 'antd';
import { Avatar, Button, Dropdown } from 'antd';
import React, { useCallback, useMemo } from 'react';
import { useTranslation } from 'react-i18next';
import { history } from 'umi';

const App: React.FC = () => {
  const { t } = useTranslation();
  const userInfo = useSelectUserInfo();
  const logout = useLogout();

  const handleLogout = useCallback(async () => {
    const retcode = await logout();
    if (retcode === 0) {
      authorizationUtil.removeAll();
      history.push('/login');
    }
  }, [logout]);

  const toSetting = () => {
    history.push('/user-setting');
  };

  const items: MenuProps['items'] = useMemo(() => {
    return [
      {
        key: '1',
        onClick: handleLogout,
        label: <Button type="text">{t('header.logout')}</Button>,
      },
      {
        key: '2',
        onClick: toSetting,
        label: <Button type="text">{t('header.setting')}</Button>,
      },
    ];
  }, [t, handleLogout]);

  useFetchUserInfo();

  return (
    <Dropdown menu={{ items }} placement="bottomLeft" arrow>

      <Avatar

        size={32}

        src={

          userInfo.avatar ??

          'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png'

        }

      />

    </Dropdown>
  );
};

export default App;