|
|
|
@ -3,18 +3,11 @@ import {
|
|
|
|
Avatar,
|
|
|
|
Avatar,
|
|
|
|
Dropdown,
|
|
|
|
Dropdown,
|
|
|
|
Menu,
|
|
|
|
Menu,
|
|
|
|
Divider,
|
|
|
|
|
|
|
|
Message,
|
|
|
|
|
|
|
|
Button
|
|
|
|
Button
|
|
|
|
} from '@arco-design/web-react';
|
|
|
|
} from '@arco-design/web-react';
|
|
|
|
import {
|
|
|
|
import {
|
|
|
|
IconUser,
|
|
|
|
|
|
|
|
IconSettings,
|
|
|
|
IconSettings,
|
|
|
|
IconPoweroff,
|
|
|
|
IconPoweroff,
|
|
|
|
IconExperiment,
|
|
|
|
|
|
|
|
IconDashboard,
|
|
|
|
|
|
|
|
IconInteraction,
|
|
|
|
|
|
|
|
IconTag,
|
|
|
|
|
|
|
|
IconLoading
|
|
|
|
IconLoading
|
|
|
|
} from '@arco-design/web-react/icon';
|
|
|
|
} from '@arco-design/web-react/icon';
|
|
|
|
import { useSelector, useDispatch } from 'react-redux';
|
|
|
|
import { useSelector, useDispatch } from 'react-redux';
|
|
|
|
@ -26,9 +19,11 @@ import styles from './style/index.module.less';
|
|
|
|
import useStorage from '@/utils/useStorage';
|
|
|
|
import useStorage from '@/utils/useStorage';
|
|
|
|
import { generatePermission } from '@/routes';
|
|
|
|
import { generatePermission } from '@/routes';
|
|
|
|
import logoImage from '@/public/assets/logo.png';
|
|
|
|
import logoImage from '@/public/assets/logo.png';
|
|
|
|
|
|
|
|
import useUser from '@/hooks/user';
|
|
|
|
|
|
|
|
|
|
|
|
function Navbar({ show }: { show: boolean }) {
|
|
|
|
function Navbar({ show }: { show: boolean }) {
|
|
|
|
const t = useLocale();
|
|
|
|
const t = useLocale();
|
|
|
|
|
|
|
|
const { logoutHooks } = useUser();
|
|
|
|
const { userInfo, userLoading } = useSelector((state: GlobalState) => state);
|
|
|
|
const { userInfo, userLoading } = useSelector((state: GlobalState) => state);
|
|
|
|
const dispatch = useDispatch();
|
|
|
|
const dispatch = useDispatch();
|
|
|
|
|
|
|
|
|
|
|
|
@ -37,18 +32,13 @@ function Navbar({ show }: { show: boolean }) {
|
|
|
|
|
|
|
|
|
|
|
|
const { setLang, lang, theme, setTheme } = useContext(GlobalContext);
|
|
|
|
const { setLang, lang, theme, setTheme } = useContext(GlobalContext);
|
|
|
|
|
|
|
|
|
|
|
|
function logout() {
|
|
|
|
function handleLogout() {
|
|
|
|
setUserStatus('logout');
|
|
|
|
setUserStatus('logout');
|
|
|
|
window.location.href = '/login';
|
|
|
|
logoutHooks()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function onMenuItemClick(key) {
|
|
|
|
function onMenuItemClick(key) {
|
|
|
|
if (key === 'logout') {
|
|
|
|
handleLogout();
|
|
|
|
logout();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else {
|
|
|
|
|
|
|
|
Message.info(`You clicked ${key}`);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
useEffect(() => {
|
|
|
|
@ -82,48 +72,6 @@ function Navbar({ show }: { show: boolean }) {
|
|
|
|
|
|
|
|
|
|
|
|
const droplist = (
|
|
|
|
const droplist = (
|
|
|
|
<Menu onClickMenuItem={onMenuItemClick}>
|
|
|
|
<Menu onClickMenuItem={onMenuItemClick}>
|
|
|
|
<Menu.SubMenu
|
|
|
|
|
|
|
|
key="role"
|
|
|
|
|
|
|
|
title={
|
|
|
|
|
|
|
|
<>
|
|
|
|
|
|
|
|
<IconUser className={styles['dropdown-icon']} />
|
|
|
|
|
|
|
|
<span className={styles['user-role']}>
|
|
|
|
|
|
|
|
{role === 'admin'
|
|
|
|
|
|
|
|
? t['menu.user.role.admin']
|
|
|
|
|
|
|
|
: t['menu.user.role.user']}
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</>
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<Menu.Item onClick={handleChangeRole} key="switch role">
|
|
|
|
|
|
|
|
<IconTag className={styles['dropdown-icon']} />
|
|
|
|
|
|
|
|
{t['menu.user.switchRoles']}
|
|
|
|
|
|
|
|
</Menu.Item>
|
|
|
|
|
|
|
|
</Menu.SubMenu>
|
|
|
|
|
|
|
|
<Menu.Item key="setting">
|
|
|
|
|
|
|
|
<IconSettings className={styles['dropdown-icon']} />
|
|
|
|
|
|
|
|
{t['menu.user.setting']}
|
|
|
|
|
|
|
|
</Menu.Item>
|
|
|
|
|
|
|
|
<Menu.SubMenu
|
|
|
|
|
|
|
|
key="more"
|
|
|
|
|
|
|
|
title={
|
|
|
|
|
|
|
|
<div style={{ width: 80 }}>
|
|
|
|
|
|
|
|
<IconExperiment className={styles['dropdown-icon']} />
|
|
|
|
|
|
|
|
{t['message.seeMore']}
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<Menu.Item key="workplace">
|
|
|
|
|
|
|
|
<IconDashboard className={styles['dropdown-icon']} />
|
|
|
|
|
|
|
|
{t['menu.dashboard.workplace']}
|
|
|
|
|
|
|
|
</Menu.Item>
|
|
|
|
|
|
|
|
<Menu.Item key="card list">
|
|
|
|
|
|
|
|
<IconInteraction className={styles['dropdown-icon']} />
|
|
|
|
|
|
|
|
{t['menu.list.cardList']}
|
|
|
|
|
|
|
|
</Menu.Item>
|
|
|
|
|
|
|
|
</Menu.SubMenu>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<Divider style={{ margin: '4px 0' }} />
|
|
|
|
|
|
|
|
<Menu.Item key="logout">
|
|
|
|
<Menu.Item key="logout">
|
|
|
|
<IconPoweroff className={styles['dropdown-icon']} />
|
|
|
|
<IconPoweroff className={styles['dropdown-icon']} />
|
|
|
|
{t['navbar.logout']}
|
|
|
|
{t['navbar.logout']}
|
|
|
|
@ -146,7 +94,7 @@ function Navbar({ show }: { show: boolean }) {
|
|
|
|
<ul className={styles.right}>
|
|
|
|
<ul className={styles.right}>
|
|
|
|
{userInfo && (
|
|
|
|
{userInfo && (
|
|
|
|
<li>
|
|
|
|
<li>
|
|
|
|
<Dropdown droplist={droplist} position="br" disabled={userLoading}>
|
|
|
|
<Dropdown droplist={droplist} trigger="click" position="br" disabled={userLoading}>
|
|
|
|
<Avatar size={32} style={{ cursor: 'pointer' }}>
|
|
|
|
<Avatar size={32} style={{ cursor: 'pointer' }}>
|
|
|
|
{userLoading ? (
|
|
|
|
{userLoading ? (
|
|
|
|
<IconLoading />
|
|
|
|
<IconLoading />
|
|
|
|
|