Commit 1e298c0b authored by 李纪文's avatar 李纪文

feat: 集成登录切换站点,正常打开tab保留的菜单

parent c5cde05e
Pipeline #96849 waiting for manual action with stages
......@@ -120,9 +120,9 @@
"@wisdom-map/util":"1.2.9",
"@wisdom-map/gis-utils": "^1.0.47",
"@wisdom-map/pd-map": "^1.0.148",
"@wisdom-utils/components": "0.1.376",
"@wisdom-utils/components": "0.1.378",
"@wisdom-utils/runtime": "0.0.51",
"@wisdom-utils/utils": "0.1.412",
"@wisdom-utils/utils": "0.1.414",
"animate.css": "^4.1.1",
"antd": "4.21.2",
"bcryptjs": "2.4.3",
......
/* eslint-disable global-require */
import React, { useEffect, Suspense } from 'react';
import { actionCreators } from '@/containers/App/store';
import { Helmet } from 'react-helmet';
import { connect } from 'react-redux';
import { Router, Switch } from '@wisdom-utils/runtime';
import { helpers, event } from '@wisdom-utils/utils';
import { helpers, event, store } from '@wisdom-utils/utils';
import { AliveScope } from 'react-activation';
import defaultSetting from '@wisdom-utils/components/lib/AppLayout/layouts/defaultSettings';
// eslint-disable-next-line import/extensions
......@@ -14,9 +14,78 @@ const { renderRoutes } = helpers;
const config = require('../../../config/config');
const App = props => {
const querySkipUrl = (data, url) => {
let res = null;
for (let i = 0; i < data.length; i += 1) {
if (data[i].url === url) {
res = data[i];
return data[i];
}
if (data[i].widgets && data[i].widgets.length > 0) {
res = querySkipUrl(data[i].widgets, url);
}
if (res) break;
}
return res;
};
const addOpenedMenus = (menus, client, allWidgets) => {
const breadcrumbMap = `集成登录${Date.now()}`;
const data = {
breadcrumbMap,
config: null,
hideInMenu: true,
icon: '',
label: breadcrumbMap,
nodeId: Date.now(),
product: null,
shortName: '',
url: null,
widgetId: `widget_${client}_${breadcrumbMap}`,
};
const widgets = [];
menus.forEach((item, index) => {
const { pathname } = item.location;
const convertArray = pathname.split('/');
const params = helpers.params.getParamsV1(pathname);
const url = convertArray.slice(2, convertArray.length).join('/');
const list = querySkipUrl(allWidgets, url);
if (list || list?.label === '首页' || item?.name === '首页' || !(params?.widget * 1)) return false;
widgets.push({
breadcrumbMap: `widget/${client}/${breadcrumbMap}/${item.name}`,
config: '',
hideInMenu: true,
icon: '',
label: item?.name,
nodeId: params?.widget * 1,
product: convertArray[1],
shortName: '',
url: convertArray.slice(2, convertArray.length).join('/'),
widgetId: `widget_${client}_${breadcrumbMap}_${item?.name}`,
widgets: null,
});
});
data.widgets = widgets.reduce((acc, item) => {
if (!acc.some(i => i.url === item.url)) {
acc.push(item);
}
return acc;
}, []);
if (widgets.length) return props.updateOpenedMenus && props.updateOpenedMenus(data);
props.updateOpenedMenus && props.updateOpenedMenus(null);
};
useEffect(() => {
event.emit('loading', props.loading);
}, [props.loading]);
useEffect(() => {
if (props.global.isIntegration < 1) return false;
const menus = store.get('event:openedMenus');
if (!menus?.current) return false;
addOpenedMenus(Array.from(menus.current.values()), props.global?.client, props.global?.widgets);
}, [props.global?.client, store.get('event:openedMenus'), props.global?.widgets, props.global.isIntegration]);
const metaSecurity = /https/.test(window.location.protocol) ? (
<meta httpEquiv="Content-Security-Policy" content="upgrade-insecure-requests" />
) : null;
......@@ -75,7 +144,13 @@ const mapStateToProps = state => ({
products: state.getIn(['global', 'products']),
flatMenu: state.getIn(['global', 'flatMenu']),
});
const mapDispatchToProps = dispatch => ({
// eslint-disable-next-line no-shadow
updateOpenedMenus(data) {
dispatch(actionCreators.updateOpenedMenus(data));
},
});
export default connect(
mapStateToProps,
null,
mapDispatchToProps,
)(App);
......@@ -26,6 +26,7 @@ import {
AMAP_VIEW,
PD_VIEW,
CONFIG_INTEGRATED,
OPENED_MENUS,
} from './constants';
export function getConfig(data) {
return {
......@@ -193,6 +194,13 @@ export function updateIntegratedConfig(data) {
};
}
export function updateOpenedMenus(data) {
return {
type: OPENED_MENUS,
data,
};
}
export function logout(data) {
// eslint-disable-next-line no-undef
createStoreage.remove('PANDA_STORE');
......
......@@ -23,3 +23,4 @@ export const MAP_VIEW = 'App/MAP_VIEW';
export const AMAP_VIEW = 'App/AMAP_VIEW';
export const PD_VIEW = 'App/PD_VIEW';
export const CONFIG_INTEGRATED = 'App/CONFIG_INTEGRATED';
export const OPENED_MENUS = 'App/OPENED_MENUS';
......@@ -34,6 +34,7 @@ import {
AMAP_VIEW,
PD_VIEW,
CONFIG_INTEGRATED,
OPENED_MENUS,
} from './constants';
const { generMainRoutes, generFlatRoutes, transformWidgets } = helpers;
......@@ -75,6 +76,7 @@ export const initialState = fromJS({
mapView: null,
amapView: {},
integratedConfig: JSON.parse(localStorage.getItem('integrationConfig') || '{}'),
openedMenus: null,
});
/* eslint-disable default-case, no-param-reassign */
......@@ -127,6 +129,8 @@ const appReducer = (state = initialState, action) => {
window.globalConfig.products.map(item => {
modulePkg[item.PackageName] = item;
});
const openedMenus = state.toJS().openedMenus;
openedMenus && config.widgets.push(openedMenus);
config.widgets = transformWidgets(config.widgets);
// const pickMenus = memoized(() => )
const generMenu = generMainRoutes(config.widgets || [], null, 0, modulePkg);
......@@ -296,6 +300,10 @@ const appReducer = (state = initialState, action) => {
return state.merge({
integratedConfig: fromJS(action.data || {}),
});
case OPENED_MENUS:
return state.merge({
openedMenus: action.data,
});
default:
return state;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment