|
|
|
@ -13,9 +13,30 @@
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
<ul class="navbar-nav ml-auto">
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
|
|
|
</nav>
|
|
|
|
|
<aside class="main-sidebar sidebar-dark-primary elevation-4">
|
|
|
|
|
<div class="brand-link" href="/">
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
<div class="sidebar">
|
|
|
|
|
<nav class="mt-2">
|
|
|
|
|
<ul class="nav nav-pills nav-sidebar flex-column nav-flat" data-widget="treeview" role="menu" data-accordion="nav-icon false">
|
|
|
|
|
<template v-if="getArea()==='default'">
|
|
|
|
|
<li class="nav-header">智慧校园</li>
|
|
|
|
|
<li class="nav-item">
|
|
|
|
|
<router-link to="/" :class="getLinkClass('default','/')">首页</router-link>
|
|
|
|
|
</li>
|
|
|
|
|
</template>
|
|
|
|
|
<template v-else>
|
|
|
|
|
<li v-for="item in getMenus()">
|
|
|
|
|
<router-link :to="getPath(item.number)" :class="getLinkClass(item.number,getPath(item.number))">{{item.name}}</router-link>
|
|
|
|
|
</li>
|
|
|
|
|
</template>
|
|
|
|
|
</ul>
|
|
|
|
|
</nav>
|
|
|
|
|
</div>
|
|
|
|
|
</aside>
|
|
|
|
|
<div class="content-wrapper">
|
|
|
|
|
<section class="content">
|
|
|
|
|
<div class="container-fluid">
|
|
|
|
@ -38,6 +59,7 @@
|
|
|
|
|
data: function () {
|
|
|
|
|
return {
|
|
|
|
|
url: config.baseUrl + 'Site/Layout',
|
|
|
|
|
viewPath:'/components/views/areas/'
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
mounted: function () {
|
|
|
|
@ -49,6 +71,14 @@
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
getArea: function () {
|
|
|
|
|
var path = this.$route.path === '/' ? (this.viewPath+'default/index.html') : this.$route.path;
|
|
|
|
|
path = path.substr(this.viewPath.length);
|
|
|
|
|
return path === '/' ? 'default' : path.substr(0, path.indexOf('/'));
|
|
|
|
|
},
|
|
|
|
|
getPath: function (area) {
|
|
|
|
|
return this.viewPath + area + '/index.html';
|
|
|
|
|
},
|
|
|
|
|
getModules: function () {
|
|
|
|
|
var numbers = Enumerable.from(store.state.layout.user.claims).where(o => o.type === store.state.layout.user.roleClaimType).select(o => o.value).toArray();
|
|
|
|
|
var modules = Enumerable.from(store.state.layout.modules)
|
|
|
|
@ -56,8 +86,16 @@
|
|
|
|
|
.orderBy(o => o.order).toArray();
|
|
|
|
|
return modules;
|
|
|
|
|
},
|
|
|
|
|
getPath: function (area) {
|
|
|
|
|
return '/components/views/' + area + '/index.html';
|
|
|
|
|
getMenus: function (area) {
|
|
|
|
|
area = area||this.getArea();
|
|
|
|
|
var module = Enumerable.from(store.state.layout.modules).firstOrDefault(o => o.number === area);
|
|
|
|
|
var numbers = Enumerable.from(store.state.layout.user.claims).where(o => o.type === store.state.layout.user.roleClaimType).select(o => o.value).toArray();
|
|
|
|
|
var permissions = Enumerable.from(module.permissionCategories)
|
|
|
|
|
.selectMany(o => o.permissions)
|
|
|
|
|
.where(o => Enumerable.from(numbers).any(n => n === o.number))
|
|
|
|
|
.orderBy(o => o.order)
|
|
|
|
|
.toArray()
|
|
|
|
|
return permissions;
|
|
|
|
|
},
|
|
|
|
|
getLinkClass: function (area) {
|
|
|
|
|
var cls = 'nav-link';
|
|
|
|
@ -66,7 +104,7 @@
|
|
|
|
|
cls += ' active';
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
if (path.indexOf('/components/views/'+area) === 0) {
|
|
|
|
|
if (path.indexOf(this.viewPath+area) === 0) {
|
|
|
|
|
cls += ' active';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|