refactor(导航): 优化导航结构和配置
- 简化路由配置,添加用户信息路由 - 简化NavBar用户下拉菜单,仅保留个人信息和退出登录 - 更新国际化配置,添加用户管理相关翻译 - 优化Settings主题色配置模块
This commit is contained in:
parent
6d96c5b947
commit
f2fc249d04
@ -18,13 +18,10 @@ import {
|
|||||||
IconUser,
|
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';
|
||||||
|
import { useHistory } from 'react-router-dom';
|
||||||
import { GlobalState } from '@/store';
|
import { GlobalState } from '@/store';
|
||||||
import { GlobalContext } from '@/context';
|
import { GlobalContext } from '@/context';
|
||||||
import useLocale from '@/utils/useLocale';
|
import useLocale from '@/utils/useLocale';
|
||||||
@ -39,6 +36,7 @@ import { generatePermission } from '@/routes';
|
|||||||
|
|
||||||
function Navbar({ show }: { show: boolean }) {
|
function Navbar({ show }: { show: boolean }) {
|
||||||
const t = useLocale();
|
const t = useLocale();
|
||||||
|
const history = useHistory();
|
||||||
const { userInfo, userLoading } = useSelector((state: GlobalState) => state);
|
const { userInfo, userLoading } = useSelector((state: GlobalState) => state);
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
@ -55,8 +53,8 @@ function Navbar({ show }: { show: boolean }) {
|
|||||||
function onMenuItemClick(key) {
|
function onMenuItemClick(key) {
|
||||||
if (key === 'logout') {
|
if (key === 'logout') {
|
||||||
logout();
|
logout();
|
||||||
} else {
|
} else if (key === 'userInfo') {
|
||||||
Message.info(`You clicked ${key}`);
|
history.push('/user-info');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,54 +82,12 @@ function Navbar({ show }: { show: boolean }) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleChangeRole = () => {
|
|
||||||
const newRole = role === 'admin' ? 'user' : 'admin';
|
|
||||||
setRole(newRole);
|
|
||||||
};
|
|
||||||
|
|
||||||
const droplist = (
|
const droplist = (
|
||||||
<Menu onClickMenuItem={onMenuItemClick}>
|
<Menu onClickMenuItem={onMenuItemClick}>
|
||||||
<Menu.SubMenu
|
<Menu.Item key="userInfo">
|
||||||
key="role"
|
<IconUser className={styles['dropdown-icon']} />
|
||||||
title={
|
{t['navbar.userInfo']}
|
||||||
<>
|
|
||||||
<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.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' }} />
|
<Divider style={{ margin: '4px 0' }} />
|
||||||
<Menu.Item key="logout">
|
<Menu.Item key="logout">
|
||||||
<IconPoweroff className={styles['dropdown-icon']} />
|
<IconPoweroff className={styles['dropdown-icon']} />
|
||||||
|
|||||||
@ -1,10 +1,11 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Trigger, Typography } from '@arco-design/web-react';
|
import { Trigger, Typography } from '@arco-design/web-react';
|
||||||
import { SketchPicker } from 'react-color';
|
import { SketchPicker } from 'react-color';
|
||||||
import { generate, getRgbStr } from '@arco-design/color';
|
import { generate } from '@arco-design/color';
|
||||||
import { useSelector, useDispatch } from 'react-redux';
|
import { useSelector, useDispatch } from 'react-redux';
|
||||||
import { GlobalState } from '../../store';
|
import { GlobalState } from '../../store';
|
||||||
import useLocale from '@/utils/useLocale';
|
import useLocale from '@/utils/useLocale';
|
||||||
|
import initThemeColor from '@/utils/initThemeColor';
|
||||||
import styles from './style/color-panel.module.less';
|
import styles from './style/color-panel.module.less';
|
||||||
|
|
||||||
function ColorPanel() {
|
function ColorPanel() {
|
||||||
@ -26,21 +27,16 @@ function ColorPanel() {
|
|||||||
color={themeColor}
|
color={themeColor}
|
||||||
onChangeComplete={(color) => {
|
onChangeComplete={(color) => {
|
||||||
const newColor = color.hex;
|
const newColor = color.hex;
|
||||||
|
|
||||||
|
// 更新 Redux 状态
|
||||||
dispatch({
|
dispatch({
|
||||||
type: 'update-settings',
|
type: 'update-settings',
|
||||||
payload: { settings: { ...settings, themeColor: newColor } },
|
payload: { settings: { ...settings, themeColor: newColor } },
|
||||||
});
|
});
|
||||||
const newList = generate(newColor, {
|
|
||||||
list: true,
|
// 使用统一的初始化函数生成并注入梯度色
|
||||||
dark: theme === 'dark',
|
const isDark = theme === 'dark';
|
||||||
});
|
initThemeColor(newColor, isDark);
|
||||||
newList.forEach((l, index) => {
|
|
||||||
const rgbStr = getRgbStr(l);
|
|
||||||
document.body.style.setProperty(
|
|
||||||
`--arcoblue-${index + 1}`,
|
|
||||||
rgbStr
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@ -1,9 +1,8 @@
|
|||||||
const i18n = {
|
const i18n = {
|
||||||
'en-US': {
|
'en-US': {
|
||||||
'menu.dashboard': 'Dashboard',
|
'menu.userManagement': 'User Management',
|
||||||
'menu.list': 'List',
|
'menu.userInfo': 'User Info',
|
||||||
'menu.list.searchTable': 'Search Table',
|
'navbar.userInfo': 'User Info',
|
||||||
'menu.dashboard.workplace': 'Workplace',
|
|
||||||
'navbar.logout': 'Logout',
|
'navbar.logout': 'Logout',
|
||||||
'settings.title': 'Settings',
|
'settings.title': 'Settings',
|
||||||
'settings.themeColor': 'Theme Color',
|
'settings.themeColor': 'Theme Color',
|
||||||
@ -35,10 +34,9 @@ const i18n = {
|
|||||||
'navbar.search.placeholder': 'Please search',
|
'navbar.search.placeholder': 'Please search',
|
||||||
},
|
},
|
||||||
'zh-CN': {
|
'zh-CN': {
|
||||||
'menu.dashboard': '仪表盘',
|
'menu.userManagement': '用户管理',
|
||||||
'menu.list': '列表页',
|
'menu.userInfo': '个人信息',
|
||||||
'menu.list.searchTable': '查询表格',
|
'navbar.userInfo': '个人信息',
|
||||||
'menu.dashboard.workplace': '工作台',
|
|
||||||
'navbar.logout': '退出登录',
|
'navbar.logout': '退出登录',
|
||||||
'settings.title': '页面配置',
|
'settings.title': '页面配置',
|
||||||
'settings.themeColor': '主题色',
|
'settings.themeColor': '主题色',
|
||||||
|
|||||||
@ -13,24 +13,13 @@ export type IRoute = AuthParams & {
|
|||||||
|
|
||||||
export const routes: IRoute[] = [
|
export const routes: IRoute[] = [
|
||||||
{
|
{
|
||||||
name: 'menu.dashboard',
|
name: 'menu.userManagement',
|
||||||
key: 'dashboard',
|
key: 'user-management',
|
||||||
children: [
|
|
||||||
{
|
|
||||||
name: 'menu.dashboard.workplace',
|
|
||||||
key: 'dashboard/workplace',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'menu.list',
|
name: 'menu.userInfo',
|
||||||
key: 'list',
|
key: 'user-info',
|
||||||
children: [
|
ignore: true, // 不在菜单中显示
|
||||||
{
|
|
||||||
name: 'menu.list.searchTable',
|
|
||||||
key: 'list/search-table',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user