修改路由配置

This commit is contained in:
linxd
2025-06-24 09:54:08 +08:00
parent c74aefb93d
commit 762632650f
12 changed files with 395 additions and 393 deletions

View File

@ -32,179 +32,132 @@ export default [
path: '/index',
meta: {
title: '首页',
icon: 'icon-shouye',
},
component: '@/pages/index',
},
// 供应商评价分组
{
name: 'userManage',
path: '/userManage',
name: 'supplierEvaluate',
path: '/supplierEvaluate',
meta: {
title: '用户管理',
},
component: '@/pages/userManage/userManage',
},
{
name: 'downloadManage',
path: '/downloadManage',
meta: {
title: '下载管理',
},
component: '@/pages/downloadManage/downloadManage',
},
{
name: 'noticeManage',
path: '/noticeManage',
meta: {
title: '公告管理',
},
component: '@/pages/noticeManage/noticeManage',
},
{
name: 'policyManage',
path: '/policyManage',
component: '@/pages/policyManage/policyManage',
},
{
name: 'aboutManage',
path: '/aboutManage',
meta: {
title: '关于我们',
},
component: '@/pages/aboutManage/aboutManage',
},
{
name: 'helpManage',
path: '/helpManage',
meta: {
title: '帮助中心',
},
component: '@/pages/helpManage/helpManage',
},
{
name: 'readQuestionManage',
path: '/readQuestionManage',
meta: {
title: '已读问题',
},
component: '@/pages/userQuestionManage/readQuestionManage',
},
{
name: 'unreadQuestionManage',
path: '/unreadQuestionManage',
meta: {
title: '未读问题',
},
component: '@/pages/userQuestionManage/unreadQuestionManage',
},
{
name: 'friendLinkCategory',
path: '/friendLinkCategory',
meta: {
title: '友情链接分类',
},
component: '@/pages/friendLinkManage/friendLinkCategory',
},
{
name: 'friendLinkManage',
path: '/friendLinkManage',
meta: {
title: '友情链接管理',
},
component: '@/pages/friendLinkManage/friendLinkManage',
title: '供应商评价',
icon: 'icon-youqinglianjie',
},
component: '@/layouts/MainLayout',
routes: [
{
name: 'supplierTemplateManage',
path: '/supplierTemplateManage',
path: 'supplierTemplateManage',
meta: {
title: '供应商模板管理',
title: '模板管理',
icon: 'icon-fenlei',
},
component: '@/pages/supplierEvaluateManage/supplierTemplateManage/supplierTemplateManage',
},
{
name: 'supplierTemplateManageAdd',
path: '/supplierTemplateManage/supplierTemplateManageAdd',
path: 'supplierTemplateManageAdd',
meta: {
title: '供应商模板管理新增',
title: '模板管理新增',
hide: true,
icon: 'icon-fenlei',
},
component: '@/pages/supplierEvaluateManage/supplierTemplateManage/supplierTemplateManageAdd',
},
{
name: 'supplierTemplateManageDetail',
path: '/supplierTemplateManage/supplierTemplateManageDetail',
path: 'supplierTemplateManageDetail',
meta: {
title: '供应商模板管理详情',
title: '模板管理详情',
hide: true,
icon: 'icon-fenlei',
},
component: '@/pages/supplierEvaluateManage/supplierTemplateManage/supplierTemplateManageDetail',
},
{
name: 'supplierTaskManage',
path: '/supplierTaskManage',
path: 'supplierTaskManage',
meta: {
title: '供应商任务管理',
title: '任务管理',
icon: 'icon-liebiaomoshi',
},
component: '@/pages/supplierEvaluateManage/supplierTaskManage/supplierTaskManage',
},
{
name: 'supplierTaskManageAdd',
path: '/supplierTaskManage/supplierTaskManageAdd',
path: 'supplierTaskManageAdd',
meta: {
title: '供应商任务管理新增',
title: '任务管理新增',
hide: true,
icon: 'icon-liebiaomoshi',
},
component: '@/pages/supplierEvaluateManage/supplierTaskManage/supplierTaskManageAdd',
},
{
name: 'supplierEvaluateScore',
path: '/supplierEvaluateScore',
path: 'supplierEvaluateScore',
meta: {
title: '供应商评分管理',
title: '评价打分',
icon: 'icon-liebiaomoshi',
},
component: '@/pages/supplierEvaluateManage/supplierEvaluateScore/supplierEvaluateScore',
},
{
name: 'supplierEvaluateResult',
path: '/supplierEvaluateResult',
path: 'supplierEvaluateResult',
meta: {
title: '供应商评价结果',
title: '评价结果',
icon: 'icon-liebiaomoshi',
},
component: '@/pages/supplierEvaluateManage/supplierEvaluateResult/supplierEvaluateResult',
},
{
name: 'supplierEvaluateResultInfo',
path: '/supplierEvaluateResult/supplierEvaluateResultInfo',
path: 'supplierEvaluateResultInfo',
meta: {
title: '供应商评价结果详情',
title: '评价结果详情',
hide: true,
icon: 'icon-liebiaomoshi',
},
component: '@/pages/supplierEvaluateManage/supplierEvaluateResult/supplierEvaluateResultInfo',
},
{
name: 'supplierEvaluateResultScoreDetail',
path: '/supplierEvaluateResult/supplierEvaluateResultScoreDetail',
path: 'supplierEvaluateResultScoreDetail',
meta: {
title: '供应商评价结果得分明细',
title: '评价结果得分明细',
hide: true,
icon: 'icon-liebiaomoshi',
},
component: '@/pages/supplierEvaluateManage/supplierEvaluateResult/supplierEvaluateResultScoreDetail',
},
{
name: 'supplierEvaluateResultScoreByList',
path: '/supplierEvaluateResult/supplierEvaluateResultScoreByList',
path: 'supplierEvaluateResultScoreByList',
meta: {
title: '供应商评价结果打分情况',
title: '评价结果打分情况',
hide: true,
icon: 'icon-liebiaomoshi',
},
component: '@/pages/supplierEvaluateManage/supplierEvaluateResult/supplierEvaluateResultScoreByList',
},
{
name: 'supplierEvaluateResultByZb',
path: '/supplierEvaluateResult/supplierEvaluateResultByZb',
path: 'supplierEvaluateResultByZb',
meta: {
title: '评价结果详情',
hide: true,
icon: 'icon-liebiaomoshi',
},
component: '@/pages/supplierEvaluateManage/supplierEvaluateResult/supplierEvaluateResultByZb',
},
{
name: 'supplierEvaluateResultApproval',
path: '/supplierEvaluateResultApproval',
path: 'supplierEvaluateResultApproval',
meta: {
title: '供应商评价结果审批',
title: '评价结果审批',
icon: 'icon-liebiaomoshi',
},
component: '@/pages/supplierEvaluateManage/supplierEvaluateResultApproval/supplierEvaluateResultApproval',
},
@ -212,42 +165,62 @@ export default [
name: 'supplierEvaluateResultApprovalInfo',
path: '/supplierEvaluateResultApproval/supplierEvaluateResultApprovalInfo',
meta: {
title: '供应商评价审批',
title: '评价审批详情',
hide: true,
icon: 'icon-liebiaomoshi',
},
component: '@/pages/supplierEvaluateManage/supplierEvaluateResultApproval/supplierEvaluateResultApprovalInfo',
}
]
},
// 供应商年审分组
{
name: 'supplierAnnual',
path: '/supplierAnnual',
meta: {
title: '供应商年审',
icon: 'icon-fenlei',
},
component: '@/layouts/MainLayout',
routes: [
{
name: 'supplierAnnualTemplateManage',
path: '/supplierAnnualTemplateManage',
path: 'supplierAnnualTemplateManage',
meta: {
title: '供应商年度模板管理',
title: '年审模板管理',
icon: 'icon-fenlei',
},
component: '@/pages/supplierAnnualManage/supplierAnnualTemplateManage/supplierAnnualTemplateManage',
},
{
name: 'supplierAnnualTaskManage',
path: '/supplierAnnualTaskManage',
path: 'supplierAnnualTaskManage',
meta: {
title: '供应商年度任务管理',
title: '年审任务管理',
icon: 'icon-liebiaomoshi',
},
component: '@/pages/supplierAnnualManage/supplierAnnualTaskManage/supplierAnnualTaskManage',
},
{
name: 'supplierAnnualQuery',
path: '/supplierAnnualQuery',
path: 'supplierAnnualQuery',
meta: {
title: '供应商年度查询',
title: '年度查询',
icon: 'icon-liebiaomoshi',
},
component: '@/pages/supplierAnnualManage/supplierAnnualQuery/supplierAnnualQuery',
},
{
name: 'supplierAnnualResult',
path: '/supplierAnnualResult',
path: 'supplierAnnualResult',
meta: {
title: '供应商年度结果',
title: '年审结果',
icon: 'icon-liebiaomoshi',
},
component: '@/pages/supplierAnnualManage/supplierAnnualResult/supplierAnnualResult',
},
}
]
}
]
},

BIN
mock.zip

Binary file not shown.

View File

@ -6,8 +6,14 @@ const { Header, Footer, Sider, Content } = Layout;
import HeaderComponent from './Header';
import SiderMenu from './SiderMenu';
import './layout.less';
const LayoutIndex: React.FC = (props) => {
const { children } = props;
console.log('主布局渲染:', {
children: !!children,
type: children ? typeof children : 'none'
});
return (
<>
<Layout>
@ -31,4 +37,5 @@ const LayoutIndex: React.FC = (props) => {
</>
);
};
export default LayoutIndex;

View File

@ -0,0 +1,36 @@
import React from 'react';
import { Layout } from 'antd';
import { useLocation } from 'umi';
const { Content } = Layout;
/**
* 供应商评价和年审的子路由布局组件
*/
const MainLayout: React.FC = (props) => {
const { children } = props;
const location = useLocation();
// 调试信息,帮助排查问题
console.log('MainLayout渲染:', {
path: location.pathname,
children: !!children
});
return (
<Layout style={{ padding: '0 24px', minHeight: 'calc(100vh - 140px)' }}>
<Content
style={{
margin: 0,
minHeight: 280,
background: '#fff',
padding: '24px',
}}
>
{children || <div></div>}
</Content>
</Layout>
);
};
export default MainLayout;

View File

@ -2,167 +2,81 @@ import React, { useEffect, useState } from 'react';
import { Menu } from 'antd';
import { useIntl, Link, useHistory } from 'umi';
import IconFont from '@/components/IconFont/IconFont';
import routerConfig from '../../config/router.config';
// 路由接口定义
interface IRouteItem {
path: string;
component?: string;
name?: string;
meta?: {
title?: string;
hide?: boolean;
icon?: string;
};
routes?: IRouteItem[];
children?: IRouteItem[];
redirect?: string;
}
interface IMenuItem {
label: string;
key: string;
path?: string;
path: string;
icon: string;
children?: IMenuItem[];
}
// 引入样式文件 useIntl().formatMessage({ id: 'menu.首页' }),
const items: IMenuItem[] = [
{
label: 'menu.首页',
key: 'index',
path: '/index',
icon: 'icon-shouye',
},
{
label: 'menu.管理员管理',
key: 'userManage',
path: '/userManage',
icon: 'icon-guanliyuan',
},
{
label: 'menu.下载中心管理',
key: 'downloadManage',
path: '/downloadManage',
icon: 'icon-Tab_xiazaizhongxin',
},
{
label: 'menu.通知中心管理',
key: 'noticeManage',
path: '/noticeManage',
icon: 'icon-tongzhizhongxin',
},
{
label: 'menu.政策法规管理',
key: 'policyManage',
path: '/policyManage',
icon: 'icon-zhengcefagui',
},
{
label: 'menu.关于我们管理',
key: 'aboutManage',
path: '/aboutManage',
icon: 'icon-guanyuwomen',
},
{
label: 'menu.帮助中心管理',
key: 'helpManage',
path: '/helpManage',
icon: 'icon-bangzhuzhongxin'
},
{
label: 'menu.用户提问管理',
key: 'userQuestionManage',
icon: 'icon-yonghutiwen',
path: '/userQuestionManage',
children: [
{
label: 'menu.已阅问题',
key: 'readQuestionManage',
icon: 'icon-yiyue',
path: '/readQuestionManage',
},
{
label: 'menu.未阅问题',
key: 'unreadQuestionManage',
icon: 'icon-weiyuedu',
path: '/unreadQuestionManage',
},
],
},
{
label: 'menu.友情链接管理',
key: 'friendLinkManage',
icon: 'icon-youqinglianjie',
children: [
{
label: 'menu.友情链接分类',
key: 'friendLinkCategory',
icon: 'icon-fenlei',
path: '/friendLinkCategory',
},
{
label: 'menu.友情链接列表',
key: 'friendLinkList',
icon: 'icon-liebiaomoshi',
path: '/friendLinkManage',
},
],
},
{
label: 'menu.供应商评价',
key: 'supplierEvaluateManage',
icon: 'icon-youqinglianjie',
children: [
{
label: 'menu.模板管理',
key: 'supplierTemplateManage',
icon: 'icon-fenlei',
path: '/supplierTemplateManage',
},
{
label: 'menu.任务管理',
key: 'supplierTaskManage',
icon: 'icon-liebiaomoshi',
path: '/supplierTaskManage',
},
{
label: 'menu.评价打分',
key: 'supplierEvaluateScore',
icon: 'icon-liebiaomoshi',
path: '/supplierEvaluateScore',
},
{
label: 'menu.评价结果',
key: 'supplierEvaluateResult',
icon: 'icon-liebiaomoshi',
path: '/supplierEvaluateResult',
},
{
label: 'menu.评价结果审批',
key: 'supplierEvaluateResultApproval',
icon: 'icon-liebiaomoshi',
path: '/supplierEvaluateResultApproval',
},
],
},
{
label: 'menu.供应商年审',
key: 'supplierAnnualManage',
icon: 'icon-youqinglianjie',
children: [
{
label: 'menu.年审模板管理',
key: 'supplierAnnualTemplateManage',
icon: 'icon-fenlei',
path: '/supplierAnnualTemplateManage',
},
{
label: 'menu.年审任务管理',
key: 'supplierAnnualTaskManage',
icon: 'icon-liebiaomoshi',
path: '/supplierAnnualTaskManage',
},
{
label: 'menu.年度查询',
key: 'supplierAnnualQuery',
icon: 'icon-liebiaomoshi',
path: '/supplierAnnualQuery',
},
{
label: 'menu.年审结果',
key: 'supplierAnnualResult',
icon: 'icon-liebiaomoshi',
path: '/supplierAnnualResult',
},
],
},
];
const SiderMenu: React.FC = (props) => {
// 获取路由配置转换为菜单项
const generateMenuItems = (): IMenuItem[] => {
// 找到主布局下的路由
const mainLayoutRoute = routerConfig.find((route: IRouteItem) => route.path === '/');
if (!mainLayoutRoute || !mainLayoutRoute.routes) return [];
// 递归处理路由,生成菜单项
const processRoutes = (routes: IRouteItem[], parentPath: string = ''): IMenuItem[] => {
return routes
.filter(route => !route.redirect && route.name && !route.meta?.hide)
.map(route => {
// 构建完整路径
const routePath = route.path.startsWith('/')
? route.path
: `${parentPath}/${route.path}`.replace(/\/+/g, '/');
// 创建菜单项
const menuItem: IMenuItem = {
label: route.meta?.title ? `menu.${route.meta.title}` : `menu.${route.name || ''}`,
key: route.name || '',
path: routePath,
icon: route.meta?.icon || 'icon-liebiaomoshi',
};
// 如果有子路由,递归处理
if (route.routes && route.routes.length > 0) {
const children = processRoutes(route.routes, routePath);
if (children.length > 0) {
menuItem.children = children;
}
}
// 如果有children递归处理
if (route.children && route.children.length > 0) {
const children = processRoutes(route.children, routePath);
if (children.length > 0) {
menuItem.children = children;
}
}
return menuItem;
});
};
return processRoutes(mainLayoutRoute.routes);
};
const items: IMenuItem[] = generateMenuItems();
const SiderMenu: React.FC = (props: any) => {
//当前激活菜单
const [current, setCurrent] = useState('index');
const intl = useIntl();
@ -170,37 +84,77 @@ const SiderMenu: React.FC = (props) => {
useEffect(() => {
// 获取当前激活菜单
const path = history.location.pathname;
const menu = items.find((item) => item.path === path);
if (menu) {
setCurrent(menu.key);
// 递归查找匹配的菜单项
const findMatchingMenuItem = (menuItems: IMenuItem[]): string | null => {
for (const item of menuItems) {
if (item.path === path) {
return item.key;
}
if (item.children) {
const childMatch = findMatchingMenuItem(item.children);
if (childMatch) return childMatch;
}
}
return null;
};
const matchedKey = findMatchingMenuItem(items);
if (matchedKey) {
setCurrent(matchedKey);
} else {
// 如果跳转的详情页面获取根级激活菜单
const rootActiveMenu = path.split('/')[1];
setCurrent(rootActiveMenu);
// 如果没有精确匹配,尝试匹配路径前缀
const pathParts = path.split('/');
if (pathParts.length > 1) {
const basePath = `/${pathParts[1]}`;
const findByPrefix = (menuItems: IMenuItem[]): string | null => {
for (const item of menuItems) {
if (item.path === basePath) {
return item.key;
}
if (item.children) {
const childMatch = findByPrefix(item.children);
if (childMatch) return childMatch;
}
}
return null;
};
const prefixMatch = findByPrefix(items);
if (prefixMatch) {
setCurrent(prefixMatch);
return;
}
}
// 默认选中首页
setCurrent('index');
}
}, [history.location.pathname]);
return (
<div className="header-menu">
<Menu selectedKeys={[current]} mode="inline">
{items.map((item: IMenuItem) =>
item.children ? (
// 递归渲染菜单项
const renderMenuItems = (menuItems: IMenuItem[]) => {
return menuItems.map((item: IMenuItem) =>
item.children && item.children.length > 0 ? (
<Menu.SubMenu
key={item.key}
title={intl.formatMessage({ id: item.label })}
icon={<IconFont type={item.icon} />}
>
{item.children?.map((child: IMenuItem) => (
<Menu.Item key={child.key} icon={<IconFont type={child.icon} />}>
<Link to={child.path}>{intl.formatMessage({ id: child.label })}</Link>
</Menu.Item>
))}
{renderMenuItems(item.children)}
</Menu.SubMenu>
) : (
<Menu.Item key={item.key} icon={<IconFont type={item.icon} />}>
<Link to={item.path}>{intl.formatMessage({ id: item.label })}</Link>
</Menu.Item>
),
)}
);
};
return (
<div className="header-menu">
<Menu selectedKeys={[current]} mode="inline">
{renderMenuItems(items)}
</Menu>
</div>
);

View File

@ -6,6 +6,7 @@ import aboutManage from './zh-CN/aboutManage';
import policyManage from './zh-CN/policyManage';
import userQuestion from './zh-CN/userQuestion';
import friendLink from './zh-CN/friendLink';
import menu from './zh-CN/menu';
export default {
...common,
@ -16,4 +17,5 @@ export default {
...policyManage,
...userQuestion,
...friendLink,
...menu,
};

30
src/locales/zh-CN/menu.ts Normal file
View File

@ -0,0 +1,30 @@
export default {
'menu.首页': '首页',
'menu.供应商评价': '供应商评价',
'menu.模板管理': '模板管理',
'menu.任务管理': '任务管理',
'menu.评价打分': '评价打分',
'menu.评价结果': '评价结果',
'menu.评价结果审批': '评价结果审批',
'menu.评价结果详情': '评价结果详情',
'menu.评价结果得分明细': '评价结果得分明细',
'menu.评价结果打分情况': '评价结果打分情况',
'menu.评价审批详情': '评价审批详情',
'menu.供应商年度': '供应商年度',
'menu.年度模板管理': '年度模板管理',
'menu.年度任务管理': '年度任务管理',
'menu.年度查询': '年度查询',
'menu.年度结果': '年度结果',
'menu.用户管理': '用户管理',
'menu.下载管理': '下载管理',
'menu.公告管理': '公告管理',
'menu.政策法规管理': '政策法规管理',
'menu.关于我们': '关于我们',
'menu.帮助中心': '帮助中心',
'menu.已读问题': '已读问题',
'menu.未读问题': '未读问题',
'menu.友情链接分类': '友情链接分类',
'menu.友情链接管理': '友情链接管理',
};

View File

@ -179,7 +179,7 @@ const SupplierEvaluateResult: React.FC = () => {
// 查看详情 - 修改为跳转到详情页
const handleViewDetail = (record: SupplierEvaluate.EvaluateResultRecord) => {
history.push({
pathname: '/supplierEvaluateResult/supplierEvaluateResultInfo',
pathname: 'supplierEvaluateResultInfo',
state: { record }
});
};

View File

@ -180,7 +180,7 @@ const SupplierEvaluateResultInfo: React.FC = () => {
// 查看得分明细
const handleViewScoreDetail = (record: SupplierEvaluate.EvaluateResultDetailRecord) => {
history.push({
pathname: '/supplierEvaluateResult/supplierEvaluateResultScoreDetail',
pathname: 'supplierEvaluateResultScoreDetail',
state: { record }
});
};
@ -188,7 +188,7 @@ const SupplierEvaluateResultInfo: React.FC = () => {
// 查看打分情况
const handleViewScoring = (record: SupplierEvaluate.EvaluateResultDetailRecord) => {
history.push({
pathname: '/supplierEvaluateResult/supplierEvaluateResultScoreByList',
pathname: 'supplierEvaluateResultScoreByList',
state: { record }
});
};

View File

@ -165,7 +165,7 @@ const SupplierEvaluateResultScoreByList: React.FC = () => {
// 查看评价详情
const handleViewDetail = (record: any) => {
history.push({
pathname: '/supplierEvaluateResult/supplierEvaluateResultByZb',
pathname: 'supplierEvaluateResultByZb',
state: { record }
});
};

View File

@ -281,7 +281,7 @@ const SupplierTaskManage: React.FC = () => {
// 处理添加
const handleAdd = () => {
// 跳转到新增页面
history.push('/supplierTaskManage/supplierTaskManageAdd');
history.push('supplierTaskManageAdd');
};
// 处理搜索

View File

@ -135,7 +135,7 @@ const SupplierTemplateManage: React.FC = () => {
const handleView = (record: SupplierEvaluate.TemplateRecord) => {
// 跳转到详情页面
history.push({
pathname: '/supplierTemplateManage/supplierTemplateManageDetail',
pathname: 'supplierTemplateManageDetail',
state: {
id: record.id,
}
@ -146,7 +146,7 @@ const SupplierTemplateManage: React.FC = () => {
const handleEdit = (record: SupplierEvaluate.TemplateRecord) => {
// 跳转到新增页面并传递编辑数据
history.push({
pathname: '/supplierTemplateManage/supplierTemplateManageAdd',
pathname: 'supplierTemplateManageAdd',
state: {
isEdit: true,
editData: record
@ -248,7 +248,7 @@ const SupplierTemplateManage: React.FC = () => {
// 处理添加
const handleAdd = () => {
// 跳转到新增页面
history.push('/supplierTemplateManage/supplierTemplateManageAdd');
history.push('supplierTemplateManageAdd');
};
// 处理搜索