wms-antdvue/.svn/pristine/05/0524ede1fcdbc1ee491e1b9b85b24abdc4b1cb8c.svn-base
2024-11-07 16:33:03 +08:00

55 lines
1.5 KiB
Plaintext

<template>
<div class="page-wrapper" :class="{ 'footer-space': showFooter && getShowFooter }">
<div class="mb-4 n-layout-page-header" v-if="title || content || $slots.headerContent">
<a-card :bordered="false" :title="title">
{{ content }}
<slot name="headerContent"></slot>
</a-card>
</div>
<div class="page-wrapper-content" :style="contentStyle" :class="contentClass">
<slot></slot>
</div>
<page-footer v-if="showFooter && getShowFooter" :style="getFooterWidth">
<template #left>
<slot name="leftFooter"></slot>
</template>
<template #right>
<slot name="rightFooter"></slot>
</template>
</page-footer>
</div>
</template>
<script lang="ts" setup>
import { computed, useSlots } from 'vue';
import { basicProps } from './wrapperProps';
import PageFooter from './PageFooter.vue';
import { useProjectSetting } from '@/hooks/setting/useProjectSetting';
const slots = useSlots();
defineProps({ ...basicProps });
const { getMenuCollapsed, getMenuMinWidth, getMenuWidth } = useProjectSetting();
const getShowFooter = computed(() => slots?.leftFooter || slots?.rightFooter);
const getFooterWidth = computed(() => {
const wh = getMenuCollapsed.value ? getMenuMinWidth.value : getMenuWidth.value;
return {
width: `calc(100% - ${wh}px)`,
};
});
</script>
<style lang="less" scoped>
.page-wrapper {
.mb-4 {
margin-bottom: 1rem;
}
}
.footer-space {
padding-bottom: 64px;
}
</style>