import { defineComponent, type Slots } from 'vue'
/**
* @description 基础组件
* @example
* ```tsx
*
* 左侧头部内容
* 右侧头部内容
* 完整头部内容
* 主要内容
* 左侧底部内容
* 右侧底部内容
* 完整底部内容
* 弹窗内容
*
* ```
*/
export default defineComponent({
name: 'BaseComponent',
setup(_, { slots }: { slots: Slots }) {
// 获取插槽内容,支持驼峰和短横线两种命名方式
const slotHL = slots['header-left'] || slots.headerLeft
const slotHR = slots['header-right'] || slots.headerRight
const slotHeader = slots.header // 新增对 #header 插槽的支持
const slotFL = slots['footer-left'] || slots.footerLeft
const slotFR = slots['footer-right'] || slots.footerRight
const slotFooter = slots.footer // 新增对 #footer 插槽的支持
return () => (
{/* 头部区域: 优先使用 #header 插槽,如果不存在则尝试 #header-left 和 #header-right */}
{slotHeader ? (
{slotHeader()}
) : (
(slotHL || slotHR) && (
{slotHL && slotHL()}
{slotHR && slotHR()}
)
)}
{/* 内容区域 */}
{slots.content && slots.content()}
{/* 底部区域: 优先使用 #footer 插槽,如果不存在则尝试 #footer-left 和 #footer-right */}
{slotFooter ? (
{slotFooter()}
) : (
(slotFL || slotFR) && (
{slotFL && slotFL()}
{slotFR && slotFR()}
)
)}
{/* 弹窗区域 */}
{slots.popup && slots.popup()}
)
},
})