Sfoglia il codice sorgente

微单点功能打通,全局跳转功能添加

asd26269546 2 anni fa
parent
commit
2620019339
7 ha cambiato i file con 68 aggiunte e 29 eliminazioni
  1. 1 1
      package.json
  2. 1 1
      public/index.html
  3. 1 1
      src/main - 628.js
  4. 41 23
      src/main.js
  5. 8 1
      src/permission.js
  6. 15 2
      src/router/axios.js
  7. 1 0
      src/store/modules/user.js

+ 1 - 1
package.json

@@ -1,5 +1,5 @@
 {
-  "name": "fjhxCloudVue",
+  "name": "iotPlatformRoom",
   "version": "2.8.2",
   "private": true,
   "scripts": {

+ 1 - 1
public/index.html

@@ -92,7 +92,7 @@
       很抱歉,如果没有 JavaScript 支持,Saber 将不能正常工作。请启用浏览器的 JavaScript 然后继续。
     </strong>
   </noscript>
-  <div id="fjhxCloudVue">
+  <div id="iotPlatformRoom">
     <div class="avue-home">
       <div class="avue-home__main">
         <img class="avue-home__loading" src="<%= BASE_URL %>svg/loading-spin.svg" alt="loading">

+ 1 - 1
src/main - 628.js

@@ -100,7 +100,7 @@ function render({ props = {} } = {}) {
 		i18n,
 		
 		render: h => h(App)
-	}).$mount(container ? container.querySelector('#fjhxCloudVue') : '#fjhxCloudVue');
+	}).$mount(container ? container.querySelector('#iotPlatformRoom') : '#iotPlatformRoom');
 	console.log(instance)
 }
 

+ 41 - 23
src/main.js

@@ -8,12 +8,12 @@ import './permission'; // 权限
 import './error'; // 日志
 import './cache';//页面缓存
 import store from './store';
-import {loadStyle} from './util/util'
+import { loadStyle } from './util/util'
 import * as urls from '@/config/env';
 import Element from 'element-ui';
 import {
-  iconfontUrl,
-  iconfontVersion
+	iconfontUrl,
+	iconfontVersion
 } from '@/config/env';
 import i18n from './lang'; // Internationalization
 import './styles/common.scss';
@@ -23,6 +23,7 @@ import thirdRegister from './components/third-register/main';
 import avueUeditor from 'avue-plugin-ueditor';
 import website from '@/config/website';
 import crudCommon from '@/mixins/crud';
+import { setToken } from '@/util/auth';
 
 //cdn迁移进src目录
 import './assets/cdn/element-ui/2.15.1/theme-chalk/index.css'
@@ -37,13 +38,13 @@ window.$crudCommon = crudCommon;
 Vue.use(router);
 Vue.use(VueAxios, axios);
 Vue.use(Element, {
-  i18n: (key, value) => i18n.t(key, value)
+	i18n: (key, value) => i18n.t(key, value)
 });
 Vue.use(window.AVUE, {
-  size: 'small',
-  tableSize: 'small',
-  calcHeight: 65,
-  i18n: (key, value) => i18n.t(key, value)
+	size: 'small',
+	tableSize: 'small',
+	calcHeight: 65,
+	i18n: (key, value) => i18n.t(key, value)
 });
 // 注册全局容器
 Vue.component('basicContainer', basicContainer);
@@ -52,56 +53,73 @@ Vue.component('thirdRegister', thirdRegister);
 Vue.component('avueUeditor', avueUeditor);
 // 加载相关url地址
 Object.keys(urls).forEach(key => {
-  Vue.prototype[key] = urls[key];
+	Vue.prototype[key] = urls[key];
 });
 // 加载website
 Vue.prototype.website = website;
 // 动态加载阿里云字体库
 iconfontVersion.forEach(ele => {
-  loadStyle(iconfontUrl.replace('$key', ele));
+	loadStyle(iconfontUrl.replace('$key', ele));
 });
 
 
-
+console.log(store)
 //乾坤代码
 Vue.config.productionTip = false;
 let instance = null;
 function render({ props = {} } = {}) {
+	console.log(props)
 	const { container } = props;
 	instance = new Vue({
 		router,
 		store,
 		i18n,
-		
+		data(){},
 		render: h => h(App)
-	}).$mount(container ? container.querySelector('#fjhxCloudVue') : '#fjhxCloudVue');
+	}).$mount(container ? container.querySelector('#iotPlatformRoom') : '#iotPlatformRoom');
 	console.log(instance)
-}
-
-
+} 
 // 独立运行时
 (function () {
 	console.log(window.__POWERED_BY_QIANKUN__)
 	if (window.__POWERED_BY_QIANKUN__) {
 		__webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;
-	} else{
+	} else {
 		render()
 	}
-	
 })()
-  
+
 
 
 
 export async function bootstrap() {
 	console.log('vue app bootstraped');
 }
+
 export async function mount(props) {
-	console.log('props from main framework', props.data);
-	render(props);
+	//设置token
+	console.log(props.data.token)
+	Vue.prototype.$parentRouter = props.data.router
+	if(props.data.token != null){
+		setToken(props.data.token.access_token)
+		//挂载父路由
+		
+		store.commit('SET_TOKEN',props.data.token.access_token)
+		store.commit('SET_REFRESH_TOKEN', props.data.token.refresh_token);
+		store.commit('SET_TENANT_ID', props.data.token.tenant_id);
+		store.commit('SET_USER_INFO', props.data.token);
+		//设置监听事件触发方法
+		props.onGlobalStateChange((state, prev) => {
+			// state: 变更后的状态; prev 变更前的状态
+			console.log(state, prev, '子组件监听');
+		});
+	}
+	//发送数据给全局
+	// props.setGlobalState({ token: 21312312 })
+	render(props)
 }
 export async function unmount() {
-	instance.$destroy();
+	// instance.$destroy();
 	instance.$el.innerHTML = "";
 	instance = null;
 	// router = null;
@@ -113,4 +131,4 @@ Vue.config.productionTip = false;
 //   store,
 //   i18n,
 //   render: h => h(App)
-// }).$mount('#fjhxCloudVue');
+// }).$mount('#iotPlatformRoom');

+ 8 - 1
src/permission.js

@@ -14,16 +14,23 @@ router.beforeEach((to, from, next) => {
   const meta = to.meta || {};
   const isMenu = meta.menu === undefined ? to.query.menu : meta.menu;
   store.commit('SET_IS_MENU', isMenu === undefined);
+  console.log(getToken())
   if (getToken()) {
     if (store.getters.isLock && to.path !== lockPage) { //如果系统激活锁屏,全部跳转到锁屏页
       next({path: lockPage})
     } else if (to.path === '/login') { //如果登录成功访问登录页跳转到主页
       next({path: '/'})
     } else {
+      console.log(store.getters)
       //如果用户信息为空则获取用户信息,获取用户信息失败,跳转到登录页
       if (store.getters.token.length === 0) {
         store.dispatch('FedLogOut').then(() => {
-          next({path: '/login'})
+          if(window.__POWERED_BY_QIANKUN__){
+            Vue.prototype.$parentRouter.push('/login')
+          }else{
+            next({path: '/login'})
+          }
+          
         })
       } else {
         const value = to.query.src || to.fullPath;

+ 15 - 2
src/router/axios.js

@@ -5,6 +5,7 @@
  * isSerialize是否开启form表单提交
  * isToken是否需要token
  */
+import Vue from 'vue';
 import axios from 'axios';
 import store from '@/store/';
 import router from '@/router/router';
@@ -28,6 +29,7 @@ axios.defaults.withCredentials = true;
 NProgress.configure({
   showSpinner: false
 });
+
 //http request拦截
 axios.interceptors.request.use(config => {
   //开启 progress bar
@@ -37,7 +39,8 @@ axios.interceptors.request.use(config => {
   config.headers['Authorization'] = `Basic ${Base64.encode(`${website.clientId}:${website.clientSecret}`)}`;
   //让每个请求携带token
   if (getToken() && !isToken) {
-    config.headers[website.tokenHeader] = 'bearer ' + JSON.parse(window.localStorage('saber-userInfo')).content.access_token
+    console.log(getToken())
+    config.headers[website.tokenHeader] = 'bearer ' + getToken()
   }
   //headers中配置text请求
   if (config.text === true) {
@@ -49,6 +52,7 @@ axios.interceptors.request.use(config => {
   }
   return config
 }, error => {
+  
   return Promise.reject(error)
 });
 //http response 拦截
@@ -62,7 +66,15 @@ axios.interceptors.response.use(res => {
   //如果在白名单里则自行catch逻辑处理
   if (statusWhiteList.includes(status)) return Promise.reject(res);
   //如果是401则跳转到登录页面
-  if (status === 401) store.dispatch('FedLogOut').then(() => router.push({path: '/login'}));
+  if (status === 401) store.dispatch('FedLogOut').then(() => {
+    alert('登出')
+    if(window.__POWERED_BY_QIANKUN__){
+      Vue.prototype.$parentRouter.push('/login')
+    }else{
+      router.push({path: '/login'})
+    }
+    
+  });
   // 如果请求为非200否者默认统一处理
   if (status !== 200) {
     Message({
@@ -78,3 +90,4 @@ axios.interceptors.response.use(res => {
 });
 
 export default axios;
+``

+ 1 - 0
src/store/modules/user.js

@@ -47,6 +47,7 @@ const user = {
   actions: {
     //根据用户名登录
     LoginByUsername({commit}, userInfo) {
+      console.log(commit)
       return new Promise((resolve, reject) => {
         loginByUsername(userInfo.tenantId, userInfo.deptId, userInfo.roleId, userInfo.username, md5(userInfo.password), userInfo.type, userInfo.key, userInfo.code).then(res => {
           const data = res.data;