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;
|