Commit 15916b72 authored by 周宏民's avatar 周宏民

fix: 集成登录跳转前做菜单权限判断,获取子站优化

parent d6a25018
Pipeline #93634 waiting for manual action with stages
......@@ -14,6 +14,7 @@ import axios from 'axios';
import { defaultApp } from '@/micro';
import { useHistory } from '@wisdom-utils/runtime';
import LoadPage from '@/components/LoadPage';
import { getUserInfo, getWebSiteConfig } from '@/api/service/base';
import styles from './index.less';
const IntegratedSwitch = props => {
......@@ -74,29 +75,38 @@ const IntegratedSwitch = props => {
useEffect(() => {
// if (!window?.globalConfig?.userInfo?.OID || (!(window?.globalConfig?.isIntegration > 1) && window?.globalConfig?.Industry !== '集成登录')) return setDataList([]);
if (!window?.globalConfig?.userInfo?.OID || !(window?.globalConfig?.isIntegration >= 1)) return setDataList([]);
appService
.GetIntegrationConfig({
type: '集成登录',
userId: window?.globalConfig?.userInfo?.OID ?? null,
isEnable: true,
client:
localStorage.getItem('integrationClient') || sessionStorage.getItem('client') || props?.global?.client || '',
})
.then(res => {
setDataList(res?.data || []);
})
.catch(err => {
setDataList([]);
});
let list = localStorage.getItem('integrationData'); //
list = list ? JSON.parse(list) : [];
if (Array.isArray(list) && list?.length) {
setDataList(list || []);
} else {
appService
.GetIntegrationConfig({
type: '集成登录',
userId: window?.globalConfig?.userInfo?.OID ?? null,
isEnable: true,
client:
localStorage.getItem('integrationClient') ||
sessionStorage.getItem('client') ||
props?.global?.client ||
'',
})
.then(res => {
setDataList(res?.data || []);
})
.catch(err => {
setDataList([]);
});
}
}, []);
// 子站跳转
// eslint-disable-next-line no-shadow
const handlePage = useCallback((item, loginAction) => {
setJumpLoading(true);
jumpProgressStart();
startTiming(5);
if (item.subType === '外链') {
setJumpLoading(true);
jumpProgressStart();
startTiming(5);
// 营收
if (item.paramValue === 'ticket') {
// 获取临时token
......@@ -129,35 +139,56 @@ const IntegratedSwitch = props => {
}
}
} else if (item.subType === '内链') {
if (window.qiankunIsCache) {
store.set('event:dropCache');
}
const cli = item.appKey;
Cookies.set('client', cli, {
expires: 86400000 / (24 * 60 * 60 * 1000),
path: '/',
});
sessionStorage.setItem('client', cli);
const currentProduct = `__global__recent_productIndex__micro_${window.location.hostname}_${window.globalConfig
?.client ?? 'city'}`;
sessionStorage.removeItem(currentProduct);
const currentProductNew = `__global__recent_productIndex__micro_${window.location.hostname}_${cli || 'city'}`;
sessionStorage.setItem(currentProductNew, 0);
const token = props.global?.token || Cookies.get('token');
getWebSiteConfig({
identity: token,
client: cli,
}).then(res => {
if (!res?.data?.[0]?.widgets?.length) {
message.error({
duration: 3,
content: '您没有该板块权限,请联系管理员',
});
setClient(cli);
clientRef.current = cli;
const config = props.global;
config.uiwidgets = [];
config.widgets = [];
config.allWidgets = [];
window.qiankunStarted = false;
if (cli) {
config.client = cli;
}
return;
}
setJumpLoading(true);
jumpProgressStart();
startTiming(5);
if (window.qiankunIsCache) {
store.set('event:dropCache');
}
Cookies.set('client', cli, {
expires: 86400000 / (24 * 60 * 60 * 1000),
path: '/',
});
sessionStorage.setItem('client', cli);
const currentProduct = `__global__recent_productIndex__micro_${window.location.hostname}_${window.globalConfig
?.client ?? 'city'}`;
sessionStorage.removeItem(currentProduct);
const currentProductNew = `__global__recent_productIndex__micro_${window.location.hostname}_${cli || 'city'}`;
sessionStorage.setItem(currentProductNew, 0);
// props.instance && props.instance.updateConfig(config);
loginAction && loginAction.getUserInfoAndConfig('', true, item.type);
setClient(cli);
clientRef.current = cli;
const config = props.global;
config.uiwidgets = [];
config.widgets = [];
config.allWidgets = [];
window.qiankunStarted = false;
if (cli) {
config.client = cli;
}
// props.instance && props.instance.updateConfig(config);
loginAction && loginAction.getUserInfoAndConfig('', true, item.type);
});
} else {
setJumpLoading(true);
jumpProgressStart();
startTiming(5);
let { url } = item;
if (url?.indexOf('{userId}') >= 0) {
url = url.replace('{userId}', window.globalConfig?.userInfo?.OID);
......@@ -173,6 +204,9 @@ const IntegratedSwitch = props => {
} else {
window.open(res.data?.data, '_blank');
}
} else {
setJumpLoading(false);
jumpProgressEnd();
}
});
}
......@@ -220,18 +254,21 @@ const IntegratedSwitch = props => {
</Tooltip>
</div>
</li>
{dataList.map(item => (
<li className={styles.switchPageLi} key={item.name} onClick={event => handlePage(item, loginAction)}>
<div className={styles.switchPageList}>
<Tooltip placement="top" title={item.name}>
<img
src={`${window.location.origin}/${item.icon ? item.icon : 'center/images/科技风/二供.png'}`}
alt=""
/>
</Tooltip>
</div>
</li>
))}
{dataList.map(item => {
if (item.subType === '内链' && item.appKey === props?.global?.client) return null;
return (
<li className={styles.switchPageLi} key={item.name} onClick={event => handlePage(item, loginAction)}>
<div className={styles.switchPageList}>
<Tooltip placement="top" title={item.name}>
<img
src={`${window.location.origin}/${item.icon ? item.icon : 'center/images/科技风/二供.png'}`}
alt=""
/>
</Tooltip>
</div>
</li>
);
})}
</ul>
</div>
) : null;
......
......@@ -229,6 +229,7 @@ export function logout(data) {
sessionStorage.setItem('client', integrationClient);
}
localStorage.removeItem('integrationClient');
localStorage.removeItem('integrationData');
localStorage.removeItem('access_token');
localStorage.removeItem('password_token');
localStorage.removeItem('password_pwdRegex');
......
......@@ -61,7 +61,7 @@ const arrowSvg = ({ fillColor = '#fff' }) => (
<path
d="M511.700683 639.423111 191.917496 319.596945 319.830771 319.596945 511.700683 511.715521 703.570595 319.596945 831.48387 319.596945Z"
p-id="8626"
// fill={fillColor}
// fill={fillColor}
/>
</svg>
);
......@@ -97,7 +97,9 @@ const OnlyFocusStations = props => {
<div className={layoutStyles.focusStations} style={{ border: 'none' }}>
<ul>
{Array.isArray(data)
? data.map(item => StationsItem(item, props.action, props.setVisible, props.actionRef, props.setMenuLoading, props.data))
? data.map(item =>
StationsItem(item, props.action, props.setVisible, props.actionRef, props.setMenuLoading, props.data),
)
: null}
</ul>
</div>
......@@ -180,7 +182,7 @@ const renderSite = ({ data, config, loading, setLoading, action, actionRef, setM
const [visible, setVisible] = useState(false);
const [stationName, setStationName] = useState('');
useEffect(() => {
window.share.event.on('changeSiteVisible', (res) => {
window.share.event.on('changeSiteVisible', res => {
setStationName(res.currentStationName);
setVisible(res.visible);
});
......@@ -292,11 +294,11 @@ const Layout = props => {
// }, [location.pathname])
useEffect(() => {
// window.share.event.on('onTopMenuHeaderClick_', res => {
// window.share.event.on('onTopMenuHeaderClick_', res => {
// onTopMenuHeaderClick(res)
// });
// });
window.onTopMenuHeaderClick_=onTopMenuHeaderClick
window.onTopMenuHeaderClick_ = onTopMenuHeaderClick;
event.on('loading', ret => {
setSubLoading(ret);
......@@ -327,19 +329,19 @@ const Layout = props => {
? `&generateType=${generateType}`
: '';
const integrationClient = localStorage.getItem('integrationClient');
if(integrationClient) client = integrationClient
if (integrationClient) client = integrationClient;
if (!isLogin) {
history.push(`/user/login?client=${client}${generateType}`, { reload: true });
clear();
props.logout();
}
if(props.global.security === "1") {
if (props.global.security === '1') {
store.off('event:unauthorized');
} else {
store.on('event:unauthorized', () => {
store.off('event:unauthorized');
const key = `open${Date.now()}`;
if(notify) return false;
if (notify) return false;
notify = true;
notification.open({
description: '登录认证过期,即将跳转到登录页',
......@@ -354,8 +356,10 @@ const Layout = props => {
notify = null;
clear();
props.logout();
})
}}>确认
});
}}
>
确认
</Button>
),
key,
......@@ -388,26 +392,30 @@ const Layout = props => {
const GetIntegrationConfig = () => {
if (first) {
const integrationClient = localStorage.getItem('integrationClient');
appService
.GetIntegrationConfig({
type: '集成登录',
userId: window.globalConfig.userInfo?.OID ?? null,
isEnable: true,
client: integrationClient || props.global.client // 只有指定client才能获取集成登录信息
})
.then(res => {
setFirst(false);
const { code, data } = res;
if (code == '0') {
setIntegrationData(data);
} else {
setIntegrationData([]);
}
})
let list = localStorage.getItem('integrationData'); //
list = list ? JSON.parse(list) : [];
if (Array.isArray(list) && list?.length) {
setIntegrationData(list);
} else {
appService
.GetIntegrationConfig({
type: '集成登录',
userId: window.globalConfig.userInfo?.OID ?? null,
isEnable: true,
client: integrationClient || props.global.client, // 只有指定client才能获取集成登录信息
})
.then(res => {
setFirst(false);
const { code, data } = res;
if (code == '0') {
setIntegrationData(data);
} else {
setIntegrationData([]);
}
});
}
}
}
};
useEffect(() => {
if (window?.globalConfig?.isIntegration >= 1) {
......@@ -433,7 +441,7 @@ const Layout = props => {
window.share.event.removeAllListeners('updateSite');
loginAction.events.removeListener('toggleIndustry', handleToggleIndustry);
};
}, [GetIntegrationConfig, loginAction.events, props]);
}, [loginAction.events, props]);
useEffect(() => {
const needMark = () =>
......@@ -448,7 +456,7 @@ const Layout = props => {
return () => {
const marks = document.querySelectorAll('.pandawatermark_mask_div');
if (marks && marks.length) {
Array.prototype.forEach.call(marks, function (dom, index) {
Array.prototype.forEach.call(marks, function(dom, index) {
document.body.removeChild(dom);
});
}
......@@ -460,29 +468,31 @@ const Layout = props => {
const integrationClient = localStorage.getItem('integrationClient');
// integrationClient存在,则返回集成登录站点
if (window.globalConfig.isIntegration > 1 || integrationData.length > 1 || integrationClient) {
if(integrationClient){
if (integrationClient) {
Cookies.set(integrationClient, '', {
path: '/',
});
window.globalConfig.client = integrationClient;
props.updateConfig( Object.assign({}, window.globalConfig, {
client: integrationClient,
}))
props.updateConfig(
Object.assign({}, window.globalConfig, {
client: integrationClient,
}),
);
sessionStorage.setItem('client', integrationClient);
localStorage.removeItem('integrationClient');
// localStorage.removeItem('integrationData');
}
// window.qiankunIsCache = false;
history.push('/Industry');
}
// 非云平台不做响应
if (!props.global.get('userInfo.site')) {
if(props.global.get("isOpenTransitionPage")) {
if (props.global.get('isOpenTransitionPage')) {
if (window.qiankunIsCache) {
store.set('event:refreshCurrentMenu', {
dropCache: true,
action: 'closeAllTabs'
})
action: 'closeAllTabs',
});
}
history.push('/homePage');
}
......@@ -500,17 +510,17 @@ const Layout = props => {
// setMenuLoading(false);
// }, [props.menu]);
const onTopMenuHeaderClick = (index => {
const onTopMenuHeaderClick = index => {
props.updateCurrentIndex(index);
window.share && window.share.event.emit('trigger:updateMenuIndex', index);
store.set('updateMenuIndex', index);
});
};
const logo =
props.global && _.isFunction(props.global.get) && props.global.get('bannerLogo')
? props.global &&
_.isFunction(props.global.transformDevAssetsBaseURL) &&
props.global.transformDevAssetsBaseURL(props.global.get('bannerLogo'))
_.isFunction(props.global.transformDevAssetsBaseURL) &&
props.global.transformDevAssetsBaseURL(props.global.get('bannerLogo'))
: defaultSetting.logo;
// 添加一个路由跳转事件
......@@ -556,7 +566,7 @@ const Layout = props => {
if (url.indexOf('|') > -1) {
const params = url.split('|')[1];
params.split('&').map(function (item) {
params.split('&').map(function(item) {
return (ret[item.split('=')[0]] = item.split('=')[1]);
});
return ret;
......@@ -575,11 +585,11 @@ const Layout = props => {
// 渲染集成站点切换弹框
const renderIntegration = (inData, loginAction, props) => {
if (inData.length <= 1) {
return <></>
return <></>;
}
const choiceOne = inData?.find(function (a) {
return a.url?.indexOf(window?.globalConfig?.client) >= 0
})
const choiceOne = inData?.find(function(a) {
return a.url?.indexOf(window?.globalConfig?.client) >= 0;
});
// 切换集成站点
const checkIntegration = (val, loginAction, props) => {
......@@ -590,7 +600,7 @@ const Layout = props => {
if (res.code === 0) {
setVisible(false);
const url = `${val.url + (val.url.indexOf('?') > 0 ? '&' : '?') + val.paramName}=${res.data}`;
window.open(url, "_blank");
window.open(url, '_blank');
} else {
setVisible(false);
notification.error({
......@@ -602,15 +612,17 @@ const Layout = props => {
});
} else {
setVisible(false);
const url = `${val.url + (val.url.indexOf('?') > 0 ? '&' : '?') + val.paramName}=${window.globalConfig?.token}`;
window.open(url, "_blank");
const url = `${val.url + (val.url.indexOf('?') > 0 ? '&' : '?') + val.paramName}=${
window.globalConfig?.token
}`;
window.open(url, '_blank');
}
} else {
if (window.qiankunIsCache) {
store.set('event:refreshCurrentMenu', {
dropCache: true,
action: 'closeAllTabs'
})
action: 'closeAllTabs',
});
}
const cli = val.url?.indexOf('client=') >= 0 ? val.url.split('client=')[1] : '';
Cookies.set('client', cli, {
......@@ -618,7 +630,8 @@ const Layout = props => {
path: '/',
});
sessionStorage.setItem('client', cli);
const currentProduct = `__global__recent_productIndex__micro_${window.location.hostname}_${window.globalConfig?.client ?? 'city'}`;
const currentProduct = `__global__recent_productIndex__micro_${window.location.hostname}_${window.globalConfig
?.client ?? 'city'}`;
sessionStorage.removeItem(currentProduct);
const currentProductNew = `__global__recent_productIndex__micro_${window.location.hostname}_${cli || 'city'}`;
sessionStorage.setItem(currentProductNew, 0);
......@@ -637,7 +650,7 @@ const Layout = props => {
// props.updateCurrentIndex(0);
// defaultApp();
}
}
};
return (
<>
......@@ -647,14 +660,8 @@ const Layout = props => {
visible={visible}
content={
<div className={layoutStyles.integrationList}>
{
<Loading loading={integrationLoading} />
}
{
inData && inData.map((val) => (
<p onClick={() => checkIntegration(val, loginAction, props)}>{val.name}</p>
))
}
{<Loading loading={integrationLoading} />}
{inData && inData.map(val => <p onClick={() => checkIntegration(val, loginAction, props)}>{val.name}</p>)}
</div>
}
arrowPointAtCenter
......@@ -675,8 +682,8 @@ const Layout = props => {
) : null}
</Popover>
</>
)
}
);
};
// 菜单比对方法
const querySkipUrl = (data, url) => {
......@@ -759,11 +766,9 @@ const Layout = props => {
}}
headerSiteRender={() =>
window?.globalConfig?.isIntegration >= 1
?
// renderIntegration(integrationData, loginAction, props)
? // renderIntegration(integrationData, loginAction, props)
null
:
renderSite({
: renderSite({
data: cityData,
config: props.global,
loading: siteLoading,
......@@ -783,13 +788,14 @@ const Layout = props => {
{dom}
</a>
)}
menuSuffixRender={() => (
props.global?.variableTheme?.navTheme === 'chinaWater' ?
(<img src={require('../assets/basic/chinaWater.png')} style={{width: '100%'}} alt="" />)
: <></>
)}
menuSuffixRender={() =>
props.global?.variableTheme?.navTheme === 'chinaWater' ? (
<img src={require('../assets/basic/chinaWater.png')} style={{ width: '100%' }} alt="" />
) : (
<></>
)
}
>
<div id="micro-container" className="subapp-container">
{props.children}
</div>
......
......@@ -9,6 +9,7 @@ import { connect } from 'react-redux';
import { actionCreators } from '@/containers/App/store';
import axios from 'axios';
import { getImageUrl } from '@/utils/utils';
import { getUserInfo, getWebSiteConfig } from '@/api/service/base';
import { FullscreenExitOutlined, FullscreenOutlined } from '@ant-design/icons';
import { message, Button } from 'antd';
......@@ -100,7 +101,7 @@ const IntegrationNew = props => {
})
.then(res1 => {
const list = res1.data || [];
list.length && localStorage.setItem('integrationData', JSON.stringify(list));
setIntegrationData(list);
});
};
......@@ -175,11 +176,24 @@ const IntegrationNew = props => {
}
};
const toClient = (item, loginA) => {
const toClient = async (item, loginA) => {
const token = props.global?.token || Cookies.get('token');
const cli = item.appKey;
const res = await getWebSiteConfig({
identity: token,
client: cli,
});
if (!res?.data?.[0]?.widgets?.length) {
message.error({
duration: 3,
content: '您没有该板块权限,请联系管理员',
});
return;
}
if (window.qiankunIsCache) {
store.set('event:dropCache');
}
const cli = item.appKey;
Cookies.set('client', cli, {
expires: 86400000 / (24 * 60 * 60 * 1000),
path: '/',
......
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