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

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