import request from '@/utils/request'; import { getSSOConfig, setPlatformToken, setSysMenuConfigID, refreshTitle } from '@/utils/auth'; import { defaults, omit } from 'lodash-es'; const baseURL = process.env.VUE_APP_BASE_API; const APP_PORT = process.env.port || process.env.npm_config_port || 8008; // 端口 const PTS_PORT = 7000; const locationUrl = location.protocol + '//' + location.hostname; let isUpdatedSSOConfig = false; export let ssoConfig = { appId: process.env.VUE_APP_SYS_ID, ssoEnabled: process.env.VUE_APP_SSO_ENABLED === 'TRUE', verifyTokenUrl: '/sso/verifyToken', ssoLoginUrl: `${locationUrl}:${PTS_PORT}/portal/login?redirect=`, appRedirectUrl: `${locationUrl}:${APP_PORT}/fms/index`, appLocalUrl: `/fms/index`, isRedirect: false }; const updateSSOConfig = () => { if (isUpdatedSSOConfig) { return; } try { let configInfo = getSSOConfig(); if (configInfo) { configInfo = JSON.parse(configInfo); } const { ssoEnabled, appName, ssoLoginUrl } = configInfo || {}; ssoConfig = defaults( { appId: appName, ssoEnabled: process.env.NODE_ENV === 'development' ? undefined : ssoEnabled === '1', ssoLoginUrl: process.env.NODE_ENV === 'development' ? undefined : ssoLoginUrl }, ssoConfig ); //alert("开关=" + ssoConfig.ssoEnabled); isUpdatedSSOConfig = true; } catch (error) { alert('解析ssoConfig错误=' + error); console.error(error, '解析configinfo 出错'); } }; const parseTarget = (target) => { if (/(http|https):\/\/([\w.]+\/?)\S*/.test(target)) { return target; } return target; }; const goTarget = function (href) { window.open(href, '_blank'); }; const goUrl = function (href) { window.location.href = href; }; // 获取portal配置 export async function getSsoInfo() { let res = await axios({ method: 'get', url: baseURL + '/portal/cfg/cfg' }); let cfg = res.status === 200 && res.data && res.data.code === '000000' && res.data.data; return cfg; } const getQueryData = () => { let oSearchItem = {}; let searchString = window.location.search; let reg = /[?&][^?&]+=[^?&]+/g; let arr = searchString.match(reg); if (arr) { arr.forEach((item) => { let tempArr = item.substring(1).split('='); let key = decodeURIComponent(tempArr[0]); let value = decodeURIComponent(tempArr[1]); oSearchItem[key] = value; }); } return oSearchItem; }; export function authSSoToken(ssoToken) { //alert( "请求ssoToken=" + ssoToken ); return request({ url: ssoConfig.verifyTokenUrl, method: 'post', data: { ptsToken: ssoToken, sysName: ssoConfig.appId, sysId: ssoConfig.appId } }); } export function resdirectApp(redirect, ssoToken) { if (ssoConfig.appId === 'PTS') { if (/(http|https):\/\/([\w.]+\/?)\S*/.test(redirect)) { return redirect + '?token=' + ssoToken; } return redirect + ''; } else { return parseTarget('/'); } } export function getResdirectAppUrl(ssoToken) { updateSSOConfig(); if (!ssoToken) { const currentUrl = location.href; const isIndex = location.pathname === '/index' || location.pathname === '/fms'; let backUrl = '/'; if (ssoConfig.isRedirect) { backUrl = isIndex ? '/' : currentUrl || ssoConfig.appRedirectUrl; } let redirectUrl = ssoConfig.ssoEnabled ? parseTarget( ssoConfig.ssoLoginUrl + backUrl + `&appid=${ssoConfig.appId}` ) : process.env.VUE_APP_SYS_BASE_URL + '/login'; // alert( ssoConfig.ssoEnabled ); // alert(redirectUrl); // alert(ssoConfig.ssoLoginUrl); goUrl(redirectUrl); } } export function parseSSoToken(store, next, to, router, subName) { updateSSOConfig(); const { token, siblingToken, subid } = to.query; if (subid) { setSysMenuConfigID(subid); } if (subName) { setSysTitle(subName, subid); } refreshTitle(); if (token) { let ssoToken = token; // alert('全局ssoToken=' + ssoToken); if (typeof ssoToken === 'undefined') { if (ssoConfig.appId !== 'PTS') { if (ssoConfig.ssoEnabled) { goUrl( `${ssoConfig.ssoLoginUrl}${ssoConfig.appRedirectUrl}${to.fullPath}` ); // 否则全部重定向到登录页 } else { } } } else { setPlatformToken(ssoToken); return store.dispatch('SaveBindToken', ssoToken).then(() => { router.replace({ path: to.path, query: omit(to.query, ['token', 'siblingToken', 'subid', 'subName']) }); return true; }); } } else if (siblingToken) { setPlatformToken(siblingToken); // return store.dispatch('SaveSiblingToken', siblingToken).then(() => { router.replace({ path: to.path, query: omit(to.query, ['token', 'siblingToken', 'subid', 'subName']), replace: true }); return true; }); } else { return Promise.resolve(false); } } export function refreshTitle() { // document.title = getSysTitle(); }