smart-admin-h5

This commit is contained in:
zhuoda
2020-11-29 23:35:57 +08:00
parent fb33580397
commit 49da08dfc1
80 changed files with 8181 additions and 1 deletions

View 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;

View 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')
}
];

View 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')
}
];

View 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
]
}];

View 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')
}
];

View 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')
}
];

View File

@@ -0,0 +1,23 @@
/**
* 权限类型
*/
export const ROUTER_PERMISSION_TYPE = {
/**
* 不 验 证
*/
NO_VALID: {
value: 1
},
/**
* 需要登录
*/
NEED_LOGIN: {
value: 2
},
/**
* 需要验证权限
*/
VALIDATE_PERMISSION: {
value: 3
}
};

View 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
];

View 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')
}
]
}
];