mirror of
https://gitee.com/lab1024/smart-admin.git
synced 2025-11-20 01:23:47 +08:00
smart-admin-h5
This commit is contained in:
131
smart-admin-h5/src/router/index.js
Normal file
131
smart-admin-h5/src/router/index.js
Normal file
@@ -0,0 +1,131 @@
|
||||
import Vue from 'vue';
|
||||
import Router from 'vue-router';
|
||||
import { routers } from './routers';
|
||||
import cookie from '@/lib/cookie';
|
||||
import { ROUTER_PERMISSION_TYPE } from './router-const';
|
||||
import NProgress from 'nprogress';
|
||||
import 'nprogress/nprogress.css';
|
||||
|
||||
const projectConfig = require('@/config/index.js');
|
||||
|
||||
Vue.use(Router);
|
||||
|
||||
const router = new Router({
|
||||
routes: routers
|
||||
});
|
||||
|
||||
// 解决路由跳转相同的地址报错
|
||||
const originalPush = Router.prototype.push;
|
||||
Router.prototype.push = function(location) {
|
||||
try {
|
||||
return originalPush.call(this, location).catch(err => err);
|
||||
} catch (error) {
|
||||
// TODO zhuoda sentry
|
||||
console.error(error);
|
||||
}
|
||||
};
|
||||
|
||||
const LOGIN_PAGE_NAME = 'Login';
|
||||
|
||||
router.beforeEach((to, from, next) => {
|
||||
// 加载进度条
|
||||
NProgress.start();
|
||||
|
||||
// 权限
|
||||
const permissionType = to.meta.permissionType;
|
||||
// 不需要验证,直接放行
|
||||
if (permissionType === ROUTER_PERMISSION_TYPE.NO_VALID.value) {
|
||||
next();
|
||||
return;
|
||||
}
|
||||
|
||||
const token = cookie.getToken();
|
||||
// 需要登录
|
||||
if (permissionType === ROUTER_PERMISSION_TYPE.NEED_LOGIN.value) {
|
||||
if (token) {
|
||||
next();
|
||||
} else {
|
||||
next({
|
||||
name: LOGIN_PAGE_NAME
|
||||
});
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// 需要登录,且验证权限
|
||||
if (permissionType === ROUTER_PERMISSION_TYPE.VALIDATE_PERMISSION.value) {
|
||||
if (!token) {
|
||||
// TODO 验证权限
|
||||
next({
|
||||
name: LOGIN_PAGE_NAME
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
next({
|
||||
name: 'Error404'
|
||||
});
|
||||
});
|
||||
|
||||
router.afterEach(to => {
|
||||
NProgress.done();
|
||||
window.scrollTo(0, 0);
|
||||
if (to.meta.title) {
|
||||
console.log(to.meta);
|
||||
document.title = to.meta.title + ' ' + projectConfig.title;
|
||||
}
|
||||
});
|
||||
|
||||
const tempCheckObj = {
|
||||
checkRouterNameMap: new Map(),
|
||||
checkRouterPathMap: new Map()
|
||||
};
|
||||
|
||||
function recursionCheckRouter(routerArray) {
|
||||
for (const routerItem of routerArray) {
|
||||
if (!routerItem.name) {
|
||||
console.error('没有配置router name', routerItem);
|
||||
} else {
|
||||
const existNameRouter = tempCheckObj.checkRouterNameMap.get(
|
||||
routerItem.name
|
||||
);
|
||||
if (typeof existNameRouter !== 'undefined') {
|
||||
console.error('存在相同的router name', routerItem, existNameRouter);
|
||||
} else {
|
||||
tempCheckObj.checkRouterNameMap.set(routerItem.name, routerItem);
|
||||
}
|
||||
}
|
||||
|
||||
if (!routerItem.path) {
|
||||
console.error('没有配置router path', routerItem);
|
||||
} else {
|
||||
// path必须以 / 开头
|
||||
if (routerItem.path !== '*' && routerItem.path.indexOf('/') !== 0) {
|
||||
console.error('path 没有以/开头 ', routerItem);
|
||||
}
|
||||
|
||||
const existPathRouter = tempCheckObj.checkRouterPathMap.get(
|
||||
routerItem.path
|
||||
);
|
||||
if (typeof existPathRouter !== 'undefined') {
|
||||
console.error('存在相同的router path', routerItem, existPathRouter);
|
||||
} else {
|
||||
tempCheckObj.checkRouterPathMap.set(routerItem.path, routerItem);
|
||||
}
|
||||
}
|
||||
|
||||
if (routerItem.children) {
|
||||
recursionCheckRouter(routerItem.children);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 如果是开发环境,需要检测router的规范性
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
recursionCheckRouter(routers);
|
||||
delete tempCheckObj.checkRouterNameMap;
|
||||
delete tempCheckObj.checkRouterPathMap;
|
||||
}
|
||||
|
||||
export default router;
|
||||
15
smart-admin-h5/src/router/other/develop.js
Normal file
15
smart-admin-h5/src/router/other/develop.js
Normal file
@@ -0,0 +1,15 @@
|
||||
import { ROUTER_PERMISSION_TYPE } from '@/router/router-const';
|
||||
|
||||
export const develop = [
|
||||
{
|
||||
path: '/develop/config',
|
||||
name: 'DevelopConfig',
|
||||
meta: {
|
||||
title: '开发专用配置',
|
||||
permissionType: ROUTER_PERMISSION_TYPE.NEED_LOGIN.value
|
||||
},
|
||||
component: () =>
|
||||
import('@/views/develop/config')
|
||||
}
|
||||
];
|
||||
|
||||
37
smart-admin-h5/src/router/other/error.js
Normal file
37
smart-admin-h5/src/router/other/error.js
Normal file
@@ -0,0 +1,37 @@
|
||||
// 错误页
|
||||
import { ROUTER_PERMISSION_TYPE } from '@/router/router-const';
|
||||
|
||||
export const error = [
|
||||
{
|
||||
path: '/404',
|
||||
name: 'Error404',
|
||||
meta: {
|
||||
hideInMenu: true,
|
||||
access: true,
|
||||
permissionType: ROUTER_PERMISSION_TYPE.NO_VALID.value
|
||||
},
|
||||
component: () => import('@/views/error/404.vue')
|
||||
},
|
||||
{
|
||||
path: '/500',
|
||||
name: 'Error500',
|
||||
meta: {
|
||||
hideInMenu: true,
|
||||
access: true,
|
||||
noValidatePrivilege: true,
|
||||
permissionType: ROUTER_PERMISSION_TYPE.NO_VALID.value
|
||||
},
|
||||
component: () => import('@/views/error/404.vue')
|
||||
},
|
||||
{
|
||||
path: '*',
|
||||
name: 'http://localhost:8080/#employee/role-employee-manage',
|
||||
meta: {
|
||||
hideInMenu: true,
|
||||
access: true,
|
||||
noValidatePrivilege: true,
|
||||
permissionType: ROUTER_PERMISSION_TYPE.NO_VALID.value
|
||||
},
|
||||
component: () => import('@/views/error/404.vue')
|
||||
}
|
||||
];
|
||||
25
smart-admin-h5/src/router/other/index.js
Normal file
25
smart-admin-h5/src/router/other/index.js
Normal file
@@ -0,0 +1,25 @@
|
||||
/**
|
||||
* 其他路由
|
||||
*/
|
||||
|
||||
import { user } from './user';
|
||||
import { ROUTER_PERMISSION_TYPE } from '@/router/router-const';
|
||||
import { develop } from '@/router/other/develop';
|
||||
import { school } from '@/router/other/school';
|
||||
import { contactCompany } from '@/router/other/erp/contact-company';
|
||||
|
||||
export const otherRouter = [
|
||||
{
|
||||
path: '/other-main',
|
||||
meta: {
|
||||
keepAlive: true,
|
||||
permissionType: ROUTER_PERMISSION_TYPE.NO_VALID.value
|
||||
},
|
||||
component: () => import('views/main/other-main'),
|
||||
children: [
|
||||
...user,
|
||||
...develop,
|
||||
...school,
|
||||
...contactCompany
|
||||
]
|
||||
}];
|
||||
41
smart-admin-h5/src/router/other/school.js
Normal file
41
smart-admin-h5/src/router/other/school.js
Normal file
@@ -0,0 +1,41 @@
|
||||
import { ROUTER_PERMISSION_TYPE } from '@/router/router-const';
|
||||
|
||||
export const school = [
|
||||
{
|
||||
path: '/school/detail',
|
||||
name: 'SchoolDetail',
|
||||
meta: {
|
||||
title: '学校详情',
|
||||
permissionType: ROUTER_PERMISSION_TYPE.NEED_LOGIN.value
|
||||
},
|
||||
component: () => import('@/views/crm/school/school-detail')
|
||||
},
|
||||
{
|
||||
path: '/school/track/add',
|
||||
name: 'SchoolTrackAdd',
|
||||
meta: {
|
||||
title: '学校拜访记录添加',
|
||||
permissionType: ROUTER_PERMISSION_TYPE.NEED_LOGIN.value
|
||||
},
|
||||
component: () => import('@/views/crm/school/add-track')
|
||||
},
|
||||
{
|
||||
path: '/school/track/detail',
|
||||
name: 'SchoolTrackDetail',
|
||||
meta: {
|
||||
title: '学校拜访记录详情',
|
||||
permissionType: ROUTER_PERMISSION_TYPE.NEED_LOGIN.value
|
||||
},
|
||||
component: () => import('@/views/crm/school/track-detail')
|
||||
},
|
||||
{
|
||||
path: '/school/update',
|
||||
name: 'SchoolUpdate',
|
||||
meta: {
|
||||
title: '更新学校',
|
||||
permissionType: ROUTER_PERMISSION_TYPE.NEED_LOGIN.value
|
||||
},
|
||||
component: () => import('@/views/crm/school/update-school')
|
||||
}
|
||||
];
|
||||
|
||||
15
smart-admin-h5/src/router/other/user.js
Normal file
15
smart-admin-h5/src/router/other/user.js
Normal file
@@ -0,0 +1,15 @@
|
||||
import { ROUTER_PERMISSION_TYPE } from '@/router/router-const';
|
||||
|
||||
export const user = [
|
||||
{
|
||||
path: '/user/change-password',
|
||||
name: 'UserChangePassword',
|
||||
meta: {
|
||||
title: '修改密码',
|
||||
permissionType: ROUTER_PERMISSION_TYPE.NEED_LOGIN.value
|
||||
},
|
||||
component: () =>
|
||||
import('@/views/mine/change-password')
|
||||
}
|
||||
];
|
||||
|
||||
23
smart-admin-h5/src/router/router-const.js
Normal file
23
smart-admin-h5/src/router/router-const.js
Normal file
@@ -0,0 +1,23 @@
|
||||
/**
|
||||
* 权限类型
|
||||
*/
|
||||
export const ROUTER_PERMISSION_TYPE = {
|
||||
/**
|
||||
* 不 验 证
|
||||
*/
|
||||
NO_VALID: {
|
||||
value: 1
|
||||
},
|
||||
/**
|
||||
* 需要登录
|
||||
*/
|
||||
NEED_LOGIN: {
|
||||
value: 2
|
||||
},
|
||||
/**
|
||||
* 需要验证权限
|
||||
*/
|
||||
VALIDATE_PERMISSION: {
|
||||
value: 3
|
||||
}
|
||||
};
|
||||
24
smart-admin-h5/src/router/routers.js
Normal file
24
smart-admin-h5/src/router/routers.js
Normal file
@@ -0,0 +1,24 @@
|
||||
import { tabbarRouter } from './tabbar';
|
||||
import { otherRouter } from '@/router/other';
|
||||
import { error } from './other/error';
|
||||
import { ROUTER_PERMISSION_TYPE } from '@/router/router-const';
|
||||
|
||||
// 登录模块
|
||||
export const login = {
|
||||
path: '/login',
|
||||
name: 'Login',
|
||||
meta: {
|
||||
title: '登录',
|
||||
keepAlive: false,
|
||||
permissionType: ROUTER_PERMISSION_TYPE.NO_VALID.value
|
||||
},
|
||||
component: () => import('@/views/login/login.vue')
|
||||
};
|
||||
|
||||
// 全部路由
|
||||
export const routers = [
|
||||
login,
|
||||
...tabbarRouter,
|
||||
...otherRouter,
|
||||
...error
|
||||
];
|
||||
49
smart-admin-h5/src/router/tabbar/index.js
Normal file
49
smart-admin-h5/src/router/tabbar/index.js
Normal file
@@ -0,0 +1,49 @@
|
||||
import { ROUTER_PERMISSION_TYPE } from '../router-const';
|
||||
|
||||
/**
|
||||
* 主要用于 tabbar 的路由
|
||||
*/
|
||||
export const tabbarRouter = [
|
||||
{
|
||||
path: '/',
|
||||
redirect: '/contact-company',
|
||||
meta: {
|
||||
title: '首页',
|
||||
keepAlive: true,
|
||||
permissionType: ROUTER_PERMISSION_TYPE.NEED_LOGIN.value
|
||||
},
|
||||
component: () => import('views/main/tabbar-main'),
|
||||
children: [
|
||||
{
|
||||
path: '/home',
|
||||
name: 'Home',
|
||||
meta: {
|
||||
title: '首页',
|
||||
keepAlive: true,
|
||||
permissionType: ROUTER_PERMISSION_TYPE.NEED_LOGIN.value
|
||||
},
|
||||
component: () => import('@/views/home/index')
|
||||
},
|
||||
{
|
||||
path: '/business',
|
||||
name: 'Business',
|
||||
meta: {
|
||||
title: '业务中心',
|
||||
keepAlive: false,
|
||||
permissionType: ROUTER_PERMISSION_TYPE.NEED_LOGIN.value
|
||||
},
|
||||
component: () => import('@/views/business/index')
|
||||
},
|
||||
{
|
||||
path: '/mine',
|
||||
name: 'Mine',
|
||||
meta: {
|
||||
title: '关于我',
|
||||
keepAlive: false,
|
||||
permissionType: ROUTER_PERMISSION_TYPE.NEED_LOGIN.value
|
||||
},
|
||||
component: () => import('@/views/mine/index')
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
Reference in New Issue
Block a user