| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- // 路由components映射
- import type { IRouteProps } from 'umi';
- import type { MenuItem } from '@/pages/system/Menu/typing';
- /** localStorage key */
- export const MENUS_DATA_CACHE = 'MENUS_DATA_CACHE';
- /** 路由Code */
- export const MENUS_CODE = {
- 'Analysis/CPU': 'Analysis/CPU',
- 'Analysis/DeviceChart': 'Analysis/DeviceChart',
- 'Analysis/DeviceMessage': 'Analysis/DeviceMessage',
- 'Analysis/Jvm': 'Analysis/Jvm',
- 'Analysis/MessageChart': 'Analysis/MessageChart',
- Analysis: 'Analysis',
- 'cloud/Aliyun': 'cloud/Aliyun',
- 'cloud/Ctwing': 'cloud/Ctwing',
- 'cloud/DuerOS': 'cloud/DuerOS',
- 'cloud/Onenet': 'cloud/Onenet',
- 'device/Alarm': 'device/Alarm',
- 'device/Category/Save': 'device/Category/Save',
- 'device/Category': 'device/Category',
- 'device/Command': 'device/Command',
- 'device/DataSource': 'device/DataSource',
- 'device/Firmware/Detail/History': 'device/Firmware/Detail/History',
- 'device/Firmware/Detail/Task/Detail': 'device/Firmware/Detail/Task/Detail',
- 'device/Firmware/Detail/Task/Release': 'device/Firmware/Detail/Task/Release',
- 'device/Firmware/Detail/Task/Save': 'device/Firmware/Detail/Task/Save',
- 'device/Firmware/Detail/Task': 'device/Firmware/Detail/Task',
- 'device/Firmware/Detail': 'device/Firmware/Detail',
- 'device/Firmware/Save': 'device/Firmware/Save',
- 'device/Firmware': 'device/Firmware',
- 'device/Instance/Detail/Config/Tags': 'device/Instance/Detail/Config/Tags',
- 'device/Instance/Detail/Config': 'device/Instance/Detail/Config',
- 'device/Instance/Detail/Functions': 'device/Instance/Detail/Functions',
- 'device/Instance/Detail/Info': 'device/Instance/Detail/Info',
- 'device/Instance/Detail/Log': 'device/Instance/Detail/Log',
- 'device/Instance/Detail/MetadataLog/Event': 'device/Instance/Detail/MetadataLog/Event',
- 'device/Instance/Detail/MetadataLog/Property': 'device/Instance/Detail/MetadataLog/Property',
- 'device/Instance/Detail/Running': 'device/Instance/Detail/Running',
- 'device/Instance/Detail': 'device/Instance/Detail',
- 'device/Instance': 'device/Instance',
- 'device/Location': 'device/Location',
- 'device/Product/Detail/BaseInfo': 'device/Product/Detail/BaseInfo',
- 'device/Product/Detail': 'device/Product/Detail',
- 'device/Product/Save': 'device/Product/Save',
- 'device/Product': 'device/Product',
- 'device/components/Alarm/Edit': 'device/components/Alarm/Edit',
- 'device/components/Alarm/Record': 'device/components/Alarm/Record',
- 'device/components/Alarm/Setting': 'device/components/Alarm/Setting',
- 'device/components/Alarm': 'device/components/Alarm',
- 'device/components/Metadata/Base/Edit': 'device/components/Metadata/Base/Edit',
- 'device/components/Metadata/Base': 'device/components/Metadata/Base',
- 'device/components/Metadata/Cat': 'device/components/Metadata/Cat',
- 'device/components/Metadata/Import': 'device/components/Metadata/Import',
- 'device/components/Metadata': 'device/components/Metadata',
- 'edge/Device': 'edge/Device',
- 'edge/Product': 'edge/Product',
- 'link/Certificate': 'link/Certificate',
- 'link/Gateway': 'link/Gateway',
- 'link/Opcua': 'link/Opcua',
- 'link/Protocol/Debug': 'link/Protocol/Debug',
- 'link/Protocol': 'link/Protocol',
- 'link/Type': 'link/Type',
- 'log/Access': 'log/Access',
- 'log/System': 'log/System',
- 'media/Cascade': 'media/Cascade',
- 'media/Config': 'media/Config',
- 'media/Device': 'media/Device',
- 'media/Reveal': 'media/Reveal',
- 'notice/Config': 'notice/Config',
- 'notice/Template': 'notice/Template',
- 'rule-engine/Instance': 'rule-engine/Instance',
- 'rule-engine/SQLRule': 'rule-engine/SQLRule',
- 'rule-engine/Scene': 'rule-engine/Scene',
- 'simulator/Device': 'simulator/Device',
- 'system/DataSource': 'system/DataSource',
- 'system/Department/Assets': 'system/Department/Assets',
- 'system/Department/Member': 'system/Department/Member',
- 'system/Department': 'system/Department',
- 'system/Menu/Detail': 'system/Menu/Detail',
- 'system/Menu': 'system/Menu',
- 'system/OpenAPI': 'system/OpenAPI',
- 'system/Permission': 'system/Permission',
- 'system/Role/Edit/Info': 'system/Role/Edit/Info',
- 'system/Role/Edit/UserManage': 'system/Role/Edit/UserManage',
- 'system/Role/Edit': 'system/Role/Edit',
- 'system/Role': 'system/Role',
- 'system/Tenant/Detail/Assets': 'system/Tenant/Detail/Assets',
- 'system/Tenant/Detail/Info': 'system/Tenant/Detail/Info',
- 'system/Tenant/Detail/Member': 'system/Tenant/Detail/Member',
- 'system/Tenant/Detail/Permission': 'system/Tenant/Detail/Permission',
- 'system/Tenant/Detail': 'system/Tenant/Detail',
- 'system/Tenant': 'system/Tenant',
- 'system/User/Save': 'system/User/Save',
- 'system/User': 'system/User',
- 'user/Login': 'user/Login',
- 'visualization/Category': 'visualization/Category',
- 'visualization/Configuration': 'visualization/Configuration',
- 'visualization/Screen': 'visualization/Screen',
- };
- const isRedirect = false;
- /**
- * 根据url获取映射的组件
- * @param files
- */
- const findComponents = (files: __WebpackModuleApi.RequireContext) => {
- const modules = {};
- files.keys().forEach((key) => {
- // 删除路径开头的./ 以及结尾的 /index;
- const str = key.replace(/(\.\/|\.tsx)/g, '').replace('/index', '');
- modules[str] = files(key).default;
- });
- return modules;
- };
- /**
- * 扁平化路由树
- * @param routes
- */
- export const flatRoute = (routes: MenuItem[]): MenuItem[] => {
- return routes.reduce<MenuItem[]>((pValue, currValue) => {
- const menu: MenuItem[] = [];
- const { children, ...extraRoute } = currValue;
- menu.push(extraRoute);
- return [...pValue, ...menu, ...flatRoute(children || [])];
- }, []);
- };
- /**
- * 处理为正确的路由格式
- * @param extraRoutes 后端菜单数据
- * @param level 路由层级
- */
- const getRoutes = (extraRoutes: MenuItem[], level: number = 1) => {
- const allComponents = findComponents(require.context('@/pages', true, /index(\.tsx)$/));
- const Menus: IRouteProps[] = [];
- extraRoutes.forEach((route) => {
- const component = allComponents[route.code] || null;
- const _route: IRouteProps = {
- key: route.url,
- name: route.name,
- path: route.url,
- };
- if (level === 1 && route.children) {
- _route.children = [
- ...getRoutes(flatRoute(route.children || []), level + 1),
- {
- path: _route.path,
- redirect: route.children[0].url,
- },
- ];
- Menus.push(_route);
- }
- if (component) {
- _route.component = component;
- _route.exact = true;
- Menus.push(_route);
- }
- });
- if (level === 1 && !isRedirect && extraRoutes.length) {
- Menus.push({
- path: '/',
- redirect: extraRoutes[0].url,
- });
- }
- return Menus;
- };
- export const getMenus = (extraRoutes: MenuItem[], level: number = 1): any[] => {
- return extraRoutes.map((route) => {
- const children =
- route.children && route.children.length ? getMenus(route.children, level + 1) : [];
- return {
- key: route.url,
- name: route.name,
- path: route.url,
- hideChildrenInMenu: level === 2,
- exact: true,
- state: {
- params: {
- id: 123,
- },
- },
- children: children,
- };
- });
- };
- /** 缓存路由数据,格式为 [{ code: url }] */
- export const saveMenusCache = (routes: MenuItem[]) => {
- const list: MenuItem[] = flatRoute(routes);
- const listObject = {};
- list.forEach((route) => {
- listObject[route.code] = route.url;
- });
- try {
- localStorage.setItem(MENUS_DATA_CACHE, JSON.stringify(listObject));
- } catch (e) {
- console.log(e);
- }
- };
- /**
- * 通过缓存的数据取出相应的路由url
- * @param code
- */
- export const getMenuPathByCode = (code: string): string => {
- const menusStr = localStorage.getItem(MENUS_DATA_CACHE) || '{}';
- const menusData = JSON.parse(menusStr);
- console.log(code, menusData);
- return menusData[code];
- };
- /**
- * 通过缓存的数据取出相应的路由url
- * @param code 路由Code
- * @param id 路由携带参数
- * @param regStr 路由参数code
- */
- export const getMenuPathByParams = (code: string, id: string, regStr: string = ':id') => {
- const menusData = getMenuPathByCode(code);
- return menusData.replace(regStr, id);
- };
- export default getRoutes;
|