diff --git a/src/api/user.js b/src/api/user.js index ac07fc3..fbfdf17 100644 --- a/src/api/user.js +++ b/src/api/user.js @@ -15,6 +15,14 @@ export function heBeiToken(data) { params: data, }); } +// /超高压嵌入token校验 +export function productionManagementCheck(data) { + return request({ + url: "/pqs-auth/judgeToken/productionManagementCheck", + method: "post", + params: data, + }); +} //登录获取token export function login(data) { return request({ diff --git a/src/permission.js b/src/permission.js index 095b544..eea8552 100644 --- a/src/permission.js +++ b/src/permission.js @@ -3,8 +3,7 @@ import store from './store' import NProgress from 'nprogress' // progress bar import 'nprogress/nprogress.css' // progress bar style import getPageTitle from '@/utils/get-page-title' -import { logout } from '@/api/user.js' - +import { productionManagementCheck } from '@/api/user.js' // NProgress.configure({ showSpinner: false }) // NProgress Configuration // && from.path === '/agreement' && from.path === '/policy' const whiteList = ['/login', '/agreement', '/policy'] // no redirect whitelist @@ -87,7 +86,33 @@ router.beforeEach(async (to, from, next) => { // }) // } } else { - proceed(to, from, next) + const response = await fetch('/') + const flag = response.headers.get('X-Xbqr') + console.log('🚀 ~ flag:', flag) + + if (flag) { + // 超高压嵌入 接受父应用传参 + window.addEventListener( + 'message', + event => { + if (event.data && event.data.type === 'iframeNest') { + let { accessToken, displayMode, theme } = event.data + console.log('我是iframe,我接收到了数据:', accessToken) + productionManagementCheck({ + token: accessToken + }).then(res => { + console.log('🚀 ~ receiveMessageFromOutside ~ res:', res) + if (res.code == 'A0000') { + proceed(to, from, next) + } + }) + } + }, + false + ) + } else { + proceed(to, from, next) + } } // else { @@ -133,9 +158,13 @@ router.beforeEach(async (to, from, next) => { }) async function proceed(to, from, next, HB_NAME) { + // 打印当前 name 和 sessionStorage 中 cntoken 是否为空的日志 let name = HB_NAME || 'cdf' + // 检查 sessionStorage 中是否没有 cntoken console.log('🚀 ~ proceed ~ name:', name, window.sessionStorage.getItem('cntoken') == null) + // 定义默认密码 if (window.sessionStorage.getItem('cntoken') == null) { + // 初始化登录表单 let password = '@#001njcnpqs' let loginjmForm = { username: '', @@ -143,38 +172,53 @@ async function proceed(to, from, next, HB_NAME) { grant_type: 'captcha', verifyCode: 0, imageCode: '' + // 对 name 进行加密处理 } let username = encrypt(name) + // 设置登录表单的用户名 + // 将应用高度存储到 sessionStorage 中 loginjmForm.username = username + // 调用 gongkey 函数获取公钥 window.sessionStorage.setItem('appheight', document.body.offsetHeight - 10) await gongkey({ loginName: username }).then(async response => { window.publicKey = response.data + // 将公钥存储到全局变量和 localStorage 中 window.localStorage.setItem('publicKey', response.data) var sm3Pwd = sm3Digest(password) + // 使用 SM3 算法对密码进行摘要处理 var jiamipassword = '' + // 使用 SM2 算法对密码进行加密 jiamipassword = sm2(sm3Pwd + '|' + password, publicKey, 0) loginjmForm.password = jiamipassword + // 设置登录表单的加密密码 store + // 调用 Vuex 的 login 方法进行登录 .dispatch('user/login', loginjmForm) .then(async response => { if (response.code === 'A0101' && response.message === '登录认证,密码失效,请重置') { + // 如果登录响应需要重置密码 CodeSr().then(response => { + // 调用 CodeSr 函数获取验证码图片 let blob = new Blob([response], { type: 'image/jpg' }) let url = window.URL.createObjectURL(blob) }) } await store.dispatch('user/getInfo') + // 获取用户信息 // 根据角色生成可访问的路线图 const accessRoutes = await store.dispatch('permission/generateRoutes') // 动态添加可访问的路由 setTimeout(() => { router.addRoutes(accessRoutes) if (response.code === 'A0000') { + // 如果登录成功 loginjmForm.verifyCode = 0 + // 重置验证码 SysConfig() + // 调用 SysConfig 函数进行系统配置 // cgyList.indexOf(to.path) !== -1 store.dispatch('user/getmenu').then(async response => { await getmuen(response.data[0])