51 lines
903 B
Vue
51 lines
903 B
Vue
<template>
|
|
<div class="page-container">
|
|
<div v-if="$slots.header" class="page-header">
|
|
<slot name="header" />
|
|
</div>
|
|
<div class="page-content">
|
|
<slot />
|
|
</div>
|
|
<div v-if="$slots.footer" class="page-footer">
|
|
<slot name="footer" />
|
|
</div>
|
|
</div>
|
|
</template>
|
|
<style scoped lang="scss">
|
|
.page-container {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
bottom: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
overflow: hidden;
|
|
padding: 16px;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.page-header {
|
|
flex-shrink: 0;
|
|
display: flex;
|
|
justify-content: flex-end;
|
|
align-items: center;
|
|
margin-bottom: 16px;
|
|
}
|
|
|
|
.page-content {
|
|
flex: 1;
|
|
min-height: 0;
|
|
overflow-y: auto;
|
|
}
|
|
|
|
.page-footer {
|
|
flex-shrink: 0;
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
margin-top: 16px;
|
|
padding-top: 16px;
|
|
border-top: 1px solid #ebeef5;
|
|
}
|
|
</style> |