import Vue from 'vue' import Router from 'vue-router' import Store from './store' import Layout from './views/Layout.vue' import fileNotFound from './views/errors/fileNotFound.vue' import NProgress from 'nprogress' import 'nprogress/nprogress.css' NProgress.configure({ showSpinner: false }) Vue.use(Router); const originalPush = VueRouter.prototype.push VueRouter.prototype.push = function push(location, onResolve, onReject) { if (onResolve || onReject) return originalPush.call(this, location, onResolve, onReject) return originalPush.call(this, location).catch(err => err) } const router = new Router({ routes: [ builder('/authentication', 'login/authentication'), builder('/login', 'login/login'), builder('/sso', 'SSO'), { path: '/', name: 'layout', component: Layout, meta: { requiresAuth: true }, children: [ ...restBuilder('oper/log', 'system/log'), // 系统管理-操作日志 ...restBuilder('validcode', 'system/validcode'), // 接入管理-接入信息 ...restBuilder('menu', 'system/menu'), // 系统管理--菜单管理 ...restBuilder('resource', 'system/resource'), // 系统管理--资源管理 ...restBuilder('role', 'system/role'), // 系统管理--角色管理 ...restBuilder('user', 'system/user'), // 用户管理 -- 管理用户 ...restBuilder('param', 'system/param'), // 系统管理--参数管理 ...restBuilder('task', 'system/task'), // 系统管理--任务管理 //部门 ...restBuilder('dept', 'dept'),//部门 ...restBuilder('staff', 'staff'),//花名册 员工信息 ...restBuilder('staff/care', 'staff/care'),// 员工关怀信息 ...restBuilder('care/template', 'care/template'),// 关怀问候信息 ...restBuilder('staff/black', 'staff/black'),// 员工黑名单信息 ...restBuilder('job', 'job'),// 职位信息 ...restBuilder('staff/adjust/log', 'staff/adjust/log'),// 员工调岗信息 ...restBuilder('staff/regular', 'staff/regular'),// 员工转正信息 ...restBuilder('staff/leave', 'staff/leave'),// 员工离职信息 ...restBuilder('staff/contract', 'staff/contract'),// 员工合同信息 ...restBuilder('attendance/record/hik', 'attendance/record/hik'),// 海康考勤 ...restBuilder('attendance/record/error', 'attendance/record/error'),// 考勤打卡记录异常信息 ...restBuilder('attendance/stat', 'attendance/stat'),// 考勤汇总信息 ...restBuilder('attendance/staff/stat', 'attendance/staff/stat'),// 考勤人员汇总信息 ...restBuilder('attendance/record', 'attendance/record'),// 考勤打卡记录信息 ...restBuilder('attendance/record/detail', 'attendance/record/detail'),// 考勤打卡记录详细信息 ...restBuilder('attendance/group', 'attendance/group'),// 考勤组信息 ...restBuilder('attendance/class', 'attendance/class'),// 考勤班次信息 ...restBuilder('attendance/leave/record', 'attendance/leave/record'),// 请假记录信息 ...restBuilder('attendance/vacation/balance', 'attendance/vacation/balance'),// 员工假期余额信息 //以下为基础路由配置 builder('blank', 'blank'), builder('', 'Home'), builder('index', 'Home'), builder('login/updatePwd', 'login/updatePwd'), builder('403', 'errors/403'), builder('*', 'errors/404'), ] }, ] }) /** * rest路由生成器 * * @param {string} path 路径 * @param {string} [component=path] 文件地址 * @returns {array} [] reset路由数组,包含list/edit/add/view */ function restBuilder(path, component = path) { let arr = []; arr.push(builder(`${path}/list`, `${component}/list`)); arr.push(builder(`${path}/edit`, `${component}/show`)); arr.push(builder(`${path}/add`, `${component}/show`)); arr.push(builder(`${path}/view`, `${component}/view`)); return arr; } /** * 路由生成器 * * @param {string} path 路径 * @param {string} [component=path] 文件地址 * @param {boolean} [requiresAuth=false] 是否登录后才能访问 * @returns {any} {} 路由对象 */ function builder(path, component = path, requiresAuth = false) { return { path: path, name: path || 'homepage', component: getComponent(component), meta: { requiresAuth: requiresAuth }, } } function getComponent(fileName) { try { return require('./views/' + fileName).default } catch (error) { return fileNotFound; } } //检查是否跳转到sso地址 function ssoCheck(to, from, next) { console.log("to", to) console.log("from", from) console.log("next", next) let redirect = (to.path === '/login/updatePwd') ? '/#/updatePwd' : '' redirect = (redirect === '' && to.path === '/login') ? (location.protocol + '//' + location.host + '/#' + from.fullPath) : redirect if (redirect != '') { next(false) window.location.href = '//' + location.host + '/m/login/logout?redirect=' + encodeURIComponent(redirect) return true; } return false; } router.afterEach(() => { document.body.scrollTop = 0 document.documentElement.scrollTop = 0 NProgress.done() }) // 路由鉴权 router.beforeEach((to, from, next) => { // if (ssoCheck(to, from, next)) { //sso鉴权检查 // return // } NProgress.start() if (to.matched.some(record => record.meta.requiresAuth)) { if (Store.state.isLogin) { next(); } else { next({ path: '/authentication', query: { redirect: to.fullPath } }) } } else { next(); } }) export default router;