import Vue from 'vue' import VueRouter from 'vue-router' import store from '@/store/index' import AppLayout from '@/layouts/AppLayout' import * as dd from "dingtalk-jsapi" import { getUserInfo } from '@/api/system/common' import { getCode } from '@/utils/dLogin' const Login = () => import('@/views/login') const autoLogin = () => import('@/views/autoLogin') const autoLoginDemo = () => import('@/views/autoLoginDemo') const autoLoginEdgp = () => import('@/views/autoLoginEdgp') const autoLoginDemoEdgp = () => import('@/views/autoLoginDemoEdgp') const ErrorNoPermissions = () => import('@/views/no-permissions') const Error404 = () => import('@/views/not-found') Vue.use(VueRouter) const router = new VueRouter({ base: process.env.VUE_APP_CONTEXT_PATH + (process.env.VUE_APP_ROUTER_MODE === 'hash' ? '#' : ''), mode: process.env.VUE_APP_ROUTER_MODE, routes: [ // 登录 { name: 'login', path: '/login', component: Login }, // 自动登录 { name: 'autoLogin', path: '/autoLogin', component: autoLogin }, // 自动登录 { name: 'autoLoginDemo', path: '/autoLoginDemo', component: autoLoginDemo }, // 自动登录 { name: 'autoLoginEdgp', path: '/autoLoginEdgp', component: autoLoginEdgp }, // 自动登录 { name: 'autoLoginDemoEdgp', path: '/autoLoginDemoEdgp', component: autoLoginDemoEdgp }, // 无权限 { name: 'no-permissions', path: '/no-permissions', component: ErrorNoPermissions }, // 404 { name: 'not-found', path: '/not-found', component: Error404 }, // 内容页(动态加载) { name: 'layout', path: '', component: AppLayout, children: [] } ] }) router.beforeEach(async(to, from, next) => { // alert(to.query.companyId) // console.log('router.beforeEach', to, from); // 判断路径是否有companyId有就存储起来 if (to.query.companyId) { // alert(to.query.companyId) await store.commit('setCompanyId', to.query.companyId) } // 无权访问&404页面可直接访问 if (to.name === 'no-permissions' || to.name === 'not-found' || to.name === 'autoLogin' || to.name === 'autoLoginDemo' || to.name === 'autoLoginEdgp' || to.name === 'autoLoginDemoEdgp') { next() return } // 如果访问的是layout(回退时可能存在该情况),直奔index if (to.name === 'layout') { next({ name: 'index' }) return } // 验证用户是否登录 const userInfo = router.app.$options.store.state.userInfo if (userInfo != null) { // 如果用户不存在权限 if (userInfo.permissions.length === 0) { next({ name: 'no-permissions' }) return } // 如果访问的是登录页面,则直接跳转至首页 if (to.name === 'login') { next({ name: 'index' }) return } next() return } getUserInfo() .then(userInfo => { // console.log('返回信息', userInfo) // 如果用户不存在权限 if (userInfo.permissions.length === 0) { next({ name: 'no-permissions' }) return } // 已登录,存储userInfo router.app.$store.commit('setUserInfo', userInfo) router.app.$store.commit('setCompanyId', userInfo.company && userInfo.company.id) // console.log(router.app.$store.companyId); // 如果访问的是登录页面,则直接跳转至首页 if (to.name === 'login') { next({ name: 'index' }) return } next() }) .catch(e => { // const login = process.env.VUE_APP_ROUTER_MODE === 'history' ? 'login' : '/doumeeplant_web/#/login' console.log('未登录', store.state.companyId) if (dd.env.platform !== "notInDingTalk") { getCode(store.state.companyId, userInfo => { if (userInfo.permissions.length === 0) { next({ name: 'no-permissions' }) return } // 已登录,存储userInfo router.app.$store.commit('setUserInfo', userInfo) // 如果访问的是登录页面,则直接跳转至首页 if (to.name === 'login') { next({ name: 'index' }) return } next() }) // getCode(userInfo=>{ // if (userInfo.permissions.length === 0) {W // next({ name: 'no-permissions' }) // return // } // // 已登录,存储userInfo // router.app.$store.commit('setUserInfo', userInfo) // // 如果访问的是登录页面,则直接跳转至首页 // if (to.name === 'login') { // next({ name: 'index' }) // return // } // next() // }) } else { const login = 'login' if (to.name === login) { next() } else { next({ name: login }) } } // 如果访问的是登录页面,则直接放行 }) }) export default router