You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
5.2 KiB
145 lines
5.2 KiB
<template>
|
|
<div>
|
|
<div class="page-header" v-if="showHeader">
|
|
<div class="breadcrumb" v-if="breadCrumbInfo.length > 0 && breadCrumb">
|
|
<a-breadcrumb>
|
|
<a-breadcrumb-item>
|
|
<router-link to="/home">首页</router-link>
|
|
</a-breadcrumb-item>
|
|
<a-breadcrumb-item>{{breadCrumbInfo[2].title}}</a-breadcrumb-item>
|
|
<a-breadcrumb-item>{{breadCrumbInfo[1].title}}</a-breadcrumb-item>
|
|
<a-breadcrumb-item>{{breadCrumbInfo[0].title}}</a-breadcrumb-item>
|
|
<!--<router-link :to="breadCrumbInfo[0].path">{{breadCrumbInfo[0].title}}</router-link>-->
|
|
</a-breadcrumb>
|
|
</div>
|
|
<div class="detail">
|
|
<div class="main">
|
|
<div class="row">
|
|
<h1 v-if="pageTitle.trim() != '' && showTitle" class="title">{{ pageTitle }}</h1>
|
|
<h1 v-else-if="showTitle" class="title">{{ defaultPageTitle }}</h1>
|
|
<div class="action">
|
|
<slot name="action"></slot>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div v-if="this.$slots.content" class="content">
|
|
<slot name="content"></slot>
|
|
</div>
|
|
<div v-if="this.$slots.extra" class="extra">
|
|
<slot name="extra"></slot>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="page-header page-header-none" v-else></div>
|
|
<div class="page-header page-header-none"></div>
|
|
|
|
<div class="wrapper-main">
|
|
<div class="wrapper-content"
|
|
:class="{ 'hidden':pageLoading}">
|
|
<div class="layout-content">
|
|
<div class="content-title" v-if="this.$slots.contentTitle || this.$slots.contentAction">
|
|
<slot name="contentTitle"></slot>
|
|
<div class="content-action">
|
|
<slot name="contentAction"></slot>
|
|
</div>
|
|
</div>
|
|
<slot></slot>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</template>
|
|
<script>
|
|
import {mapState} from 'vuex'
|
|
import {getStore} from '@/assets/js/storage'
|
|
import {getClassObj} from '@/assets/js/utils'
|
|
import $ from 'jquery'
|
|
import ABreadcrumb from 'ant-design-vue/es/breadcrumb'
|
|
|
|
const ABreadcrumbItem = ABreadcrumb.Item;
|
|
|
|
|
|
export default {
|
|
components: {
|
|
ABreadcrumb,
|
|
ABreadcrumbItem,
|
|
},
|
|
props: {
|
|
pageTitle: {
|
|
default: ''
|
|
},
|
|
showTitle: {
|
|
default: true
|
|
},
|
|
showHeader: {
|
|
default: true
|
|
},
|
|
breadCrumb: {
|
|
default: true
|
|
},
|
|
},
|
|
mounted() {
|
|
//用户权限资源检测
|
|
/* function TraversalObject(obj, value) {
|
|
for (let a in obj) {
|
|
if (typeof (obj[a]) === "object") {
|
|
TraversalObject(obj[a], value); //递归遍历
|
|
}
|
|
else {
|
|
if (a === 'name' && obj[a] === value) {
|
|
window.permission = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
const auth_list = getStore('auth_list', true);
|
|
const permissions = $("a[permission]");
|
|
if (permissions) {
|
|
$.each(permissions, function (k, v) {
|
|
let permission = $(v).attr('permission');
|
|
window.permission = false;
|
|
TraversalObject(auth_list, permission);
|
|
if (!window.permission) {
|
|
$(v).remove()
|
|
}
|
|
});
|
|
}
|
|
this.$nextTick(function () {
|
|
// 挂载时隐藏所有父级页面的内容区
|
|
const ClassElements = getClassObj('wrapper-main');
|
|
if (ClassElements.length > 1) {
|
|
for (let i = 0; i < ClassElements.length - 1; i++) {
|
|
ClassElements[i].style.display = "none"
|
|
}
|
|
}
|
|
})*/
|
|
},
|
|
computed: {
|
|
...mapState({
|
|
pageLoading: state => state.pageLoading,
|
|
breadCrumbInfo: state => state.menu.breadCrumbInfo,
|
|
}),
|
|
defaultPageTitle: {
|
|
get() {
|
|
return this.$route.meta.info.title
|
|
}
|
|
},
|
|
wrapper_content_class: function () {
|
|
}
|
|
},
|
|
destroyed: function () {
|
|
this.$nextTick(function () {
|
|
const ClassElements = getClassObj('wrapper-main');
|
|
for (let i = 0; i < ClassElements.length; i++) {
|
|
ClassElements[i].removeAttribute("style");
|
|
}
|
|
})
|
|
},
|
|
}
|
|
</script>
|