layui/src/module/layout/index.vue

55 lines
1007 B
Vue
Raw Normal View History

2021-09-26 22:09:33 +00:00
<template>
<section :class="classes">
<slot />
</section>
2021-09-26 22:09:33 +00:00
</template>
<script lang="ts">
export default {
name: 'LayLayout',
}
</script>
<script setup lang="ts">
import { Component, computed, useSlots } from 'vue'
import Header from '../header/index.vue'
2021-09-26 22:09:33 +00:00
const props = withDefaults(
defineProps<{
isVertical?: boolean
}>(),
{
isVertical: false,
}
)
const slots = useSlots()
const isVertical = computed(() => {
if (!slots.default) return false
const vNodes = slots.default()
return vNodes.some((vNode) => {
const componentName = (vNode.type as Component).name
if (!componentName) return false
return [Header.name].includes(componentName)
})
})
const classes = computed(() => {
return ['layui-layout', { 'layui-layout-vertical': isVertical.value }]
})
</script>
<style>
.layui-layout {
display: flex;
flex: 1;
flex-basis: auto;
height: 100%;
width: 100%;
box-sizing: border-box;
}
.layui-layout-vertical {
flex-direction: column;
}
</style>