yuang-framework-ui-pc
Version:
yuang-framework-ui-pc Library
597 lines (596 loc) • 27.7 kB
JavaScript
import { defineComponent, shallowRef, computed, shallowReactive, provide, watch, nextTick, onMounted, resolveComponent, createBlock, openBlock, normalizeStyle, normalizeClass, withCtx, createElementVNode, renderSlot, createCommentVNode, mergeProps, createSlots, renderList, normalizeProps, guardReactiveProps, createElementBlock, createVNode, Fragment, toDisplayString } from "vue";
import { ElScrollbar } from "element-plus";
import { useTimer } from "../utils/hook";
import EleMenus from "../ele-menus/index";
import EleBreadcrumb from "../ele-breadcrumb/index";
import EleBacktop from "../ele-backtop/index";
import LayoutSkeleton from "./components/layout-skeleton";
import LayoutTabs from "./components/layout-tabs";
import { adminLayoutEmits, adminLayoutProps, LAYOUT_KEY } from "./props";
const tabSlots = ["tabTitle", "tabExtra", "tabHome"];
const ownSlots = ["logo", "logoTitle", "left", "right", "center", "breadcrumb", "top", "bottom", "boxTop", "boxBottom", "body", ...tabSlots];
const _sfc_main = defineComponent({
name: "EleAdminLayout",
components: {
ElScrollbar,
EleMenus,
EleBreadcrumb,
EleBacktop,
LayoutSkeleton,
LayoutTabs
},
props: adminLayoutProps,
emits: adminLayoutEmits,
setup(props, { emit }) {
const [startDisableTransitionTimer] = useTimer(100);
const [startSidebarMenuTimer, stopSidebarMenuTimer] = useTimer(420);
const [startSideboxMenuTimer, stopSideboxMenuTimer] = useTimer(420);
const [startHeaderHoverTimer, stopHeaderHoverTimer] = useTimer(300);
let isHeaderhover = false;
const sidebarMenuRef = shallowRef(null);
const sideboxMenuRef = shallowRef(null);
const contentRef = shallowRef(null);
const modalsRef = shallowRef(null);
const isDisableTransition = shallowRef(false);
const layoutHeight = computed(() => typeof props.height === "number" ? `${props.height}px` : props.height);
const isFixedHeader = computed(() => !props.fixedBody && props.fixedHeader);
const isFixedSidebar = computed(() => !props.fixedBody && props.fixedSidebar);
const isTopLayout = computed(() => props.layout === "top");
const isSideLayout = computed(() => props.layout === "side");
const isBoxSidebar = computed(() => props.sidebarLayout === "box");
const isMixSidebar = computed(() => !isTopLayout.value && (props.sidebarLayout === "mix" || isBoxSidebar.value));
const isMobile = computed(() => props.mobile && !isTopLayout.value);
const isHeaderLogo = computed(() => (props.logoInHeader || isTopLayout.value) && !isSideLayout.value && !isMobile.value);
const showHeaderMenus = computed(() => isTopLayout.value || props.layout === "mix");
const showHeaderTabs = computed(() => props.tabBar === "header");
const isDarkHeader = computed(() => props.headerStyle === "dark");
const isPrimaryHeader = computed(() => props.headerStyle === "primary");
const isButtonTab = computed(() => props.tabStyle === "button");
const isDarkSidebar = computed(() => props.sidebarStyle === "dark");
const isDarkMixSidebar = computed(() => isMixSidebar.value && !isHeaderLogo.value && isDarkSidebar.value && (isDarkHeader.value || isPrimaryHeader.value));
const isGhostHeader = computed(() => !isDarkHeader.value && !isPrimaryHeader.value && showHeaderTabs.value && isButtonTab.value);
const isGhostSidebar = computed(() => isGhostHeader.value && !isDarkSidebar.value);
const isCollapseSidebar = computed(() => !isMobile.value && props.collapse);
const isCollapseMobile = computed(() => isMobile.value && props.collapse);
const getContentEl = () => {
return contentRef.value;
};
const getModalsEl = () => {
return modalsRef.value;
};
const getBodyWrapperEl = () => {
const contentEl = getContentEl();
return contentEl == null ? void 0 : contentEl.parentElement;
};
const sidebarScrollToActive = () => {
stopSidebarMenuTimer();
if (!props.menuScrollToActive || sidebarMenuRef.value == null || isCollapseMobile.value || isMixSidebar.value && isCollapseSidebar.value) {
return;
}
startSidebarMenuTimer(() => {
sidebarMenuRef.value && sidebarMenuRef.value.scrollToActive();
});
};
const sideboxScrollToActive = () => {
stopSideboxMenuTimer();
if (!props.menuScrollToActive || sideboxMenuRef.value == null || isCollapseMobile.value) {
return;
}
startSideboxMenuTimer(() => {
sideboxMenuRef.value && sideboxMenuRef.value.scrollToActive();
});
};
const updateCollapse = (value) => {
const collapse = typeof value === "boolean" ? value : !props.collapse;
if (collapse !== props.collapse) {
emit("update:collapse", collapse);
}
};
const handleLogoClick = (e) => {
emit("logoClick", e);
};
const handleHeadMenuOpen = (index2, indexPath) => {
emit("headMenuOpen", index2, indexPath);
};
const handleHeadMenuClose = (index2, indexPath) => {
emit("headMenuClose", index2, indexPath);
};
const handleHeadMenuItemClick = (item, e) => {
emit("headMenuItemClick", item, e);
};
const handleHeadMenuItemMouseenter = (item, e) => {
emit("headMenuItemMouseenter", item, e);
handleHeadMouseenter(e);
};
const handleHeadMenuItemMouseleave = (item, e) => {
emit("headMenuItemMouseleave", item, e);
handleHeadMouseleave(e);
};
const handleHeadMouseenter = (e) => {
stopHeaderHoverTimer();
if (!isHeaderhover) {
isHeaderhover = true;
emit("headMouseenter", e);
}
};
const handleHeadMouseleave = (e) => {
startHeaderHoverTimer(() => {
isHeaderhover = false;
emit("headMouseleave", e);
});
};
const handleBoxMenuItemClick = (item, e) => {
emit("boxMenuItemClick", item, e);
};
const handleBoxMenuItemMouseenter = (item, e) => {
emit("boxMenuItemMouseenter", item, e);
};
const handleBoxMenuItemMouseleave = (item, e) => {
emit("boxMenuItemMouseleave", item, e);
};
const handleBoxMouseEnter = (e) => {
emit("boxMouseenter", e);
};
const handleBoxMouseLeave = (e) => {
emit("boxMouseleave", e);
};
const handleSideMenuOpen = (index2, indexPath) => {
emit("sideMenuOpen", index2, indexPath);
};
const handleSideMenuClose = (index2, indexPath) => {
emit("sideMenuClose", index2, indexPath);
};
const handleSideMenuItemClick = (item, e) => {
emit("sideMenuItemClick", item, e);
};
const handleSideMouseEnter = (e) => {
emit("sideMouseenter", e);
};
const handleSideMouseLeave = (e) => {
emit("sideMouseleave", e);
};
const handleTabClick = (option) => {
emit("tabClick", option);
};
const handleTabRemove = (name) => {
emit("tabRemove", name);
};
const handleTabContextMenu = (option) => {
emit("tabContextMenu", option);
};
const handleTabSortChange = (data) => {
emit("tabSortChange", data);
};
const layoutProvide = shallowReactive({
layout: props.layout,
maximized: props.maximized,
fixedHeader: isFixedHeader.value,
fixedBody: props.fixedBody,
modalsEl: null,
getModalsEl,
getBodyWrapperEl
});
provide(LAYOUT_KEY, layoutProvide);
watch([() => props.layout, () => props.sidebarLayout, () => props.fixedSidebar, () => props.fixedBody, () => props.logoInHeader, () => props.maximized, isFixedHeader, isMobile], () => {
isDisableTransition.value = true;
startDisableTransitionTimer(() => {
isDisableTransition.value = false;
});
if (layoutProvide.layout !== props.layout) {
layoutProvide.layout = props.layout;
}
if (layoutProvide.maximized !== props.maximized) {
layoutProvide.maximized = props.maximized;
}
if (layoutProvide.fixedHeader !== isFixedHeader.value) {
layoutProvide.fixedHeader = isFixedHeader.value;
}
if (layoutProvide.fixedBody !== props.fixedBody) {
layoutProvide.fixedBody = props.fixedBody;
}
});
watch([() => props.sidebarActive, () => props.collapse], () => {
nextTick(() => {
sidebarScrollToActive();
});
});
watch([() => props.sideboxActive, () => props.compact], () => {
nextTick(() => {
sideboxScrollToActive();
});
});
onMounted(() => {
sideboxScrollToActive();
sidebarScrollToActive();
const modalsEl = getModalsEl();
layoutProvide.modalsEl = modalsEl;
const contentEl = getContentEl();
if (contentEl != null && modalsEl != null) {
emit("contentMounted", contentEl, modalsEl);
}
});
return {
ownSlots,
tabSlots,
sidebarMenuRef,
sideboxMenuRef,
contentRef,
modalsRef,
isDisableTransition,
layoutHeight,
isFixedHeader,
isFixedSidebar,
isTopLayout,
isSideLayout,
isBoxSidebar,
isMixSidebar,
isMobile,
isHeaderLogo,
showHeaderMenus,
showHeaderTabs,
isDarkHeader,
isPrimaryHeader,
isButtonTab,
isDarkSidebar,
isDarkMixSidebar,
isGhostHeader,
isGhostSidebar,
isCollapseSidebar,
isCollapseMobile,
getContentEl,
getModalsEl,
updateCollapse,
handleLogoClick,
handleHeadMenuOpen,
handleHeadMenuClose,
handleHeadMenuItemClick,
handleHeadMenuItemMouseenter,
handleHeadMenuItemMouseleave,
handleHeadMouseenter,
handleHeadMouseleave,
handleBoxMenuItemClick,
handleBoxMenuItemMouseenter,
handleBoxMenuItemMouseleave,
handleBoxMouseEnter,
handleBoxMouseLeave,
handleSideMenuOpen,
handleSideMenuClose,
handleSideMenuItemClick,
handleSideMouseEnter,
handleSideMouseLeave,
handleTabClick,
handleTabRemove,
handleTabContextMenu,
handleTabSortChange
};
}
});
const _export_sfc = (sfc, props) => {
const target = sfc.__vccOpts || sfc;
for (const [key, val] of props) {
target[key] = val;
}
return target;
};
const _hoisted_1 = ["src"];
const _hoisted_2 = {
key: 1,
class: "ele-admin-tools"
};
const _hoisted_3 = {
key: 2,
class: "ele-admin-breadcrumb"
};
const _hoisted_4 = {
key: 5,
class: "ele-admin-tools"
};
const _hoisted_5 = ["src"];
const _hoisted_6 = ["src"];
const _hoisted_7 = {
ref: "modalsRef",
class: "ele-admin-modals"
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_EleBreadcrumb = resolveComponent("EleBreadcrumb");
const _component_EleMenus = resolveComponent("EleMenus");
const _component_LayoutTabs = resolveComponent("LayoutTabs");
const _component_ElScrollbar = resolveComponent("ElScrollbar");
const _component_EleBacktop = resolveComponent("EleBacktop");
const _component_LayoutSkeleton = resolveComponent("LayoutSkeleton");
return openBlock(), createBlock(_component_LayoutSkeleton, {
isHeaderLogo: _ctx.isHeaderLogo,
class: normalizeClass([{ "is-fixed-body": _ctx.fixedBody }, { "is-transition-disabled": _ctx.isDisableTransition }, { "is-maximized": _ctx.maximized }, { "is-expanded": _ctx.maximized === "expanded" }, { "is-mobile": _ctx.isMobile }, { "is-collapse": _ctx.isCollapseMobile }]),
style: normalizeStyle({
minHeight: _ctx.layoutHeight,
height: _ctx.fixedBody ? _ctx.layoutHeight : void 0
})
}, {
head: withCtx(() => [
!_ctx.isSideLayout ? (openBlock(), createElementBlock("div", {
key: 0,
class: normalizeClass(["ele-admin-header", { "is-dark": _ctx.isDarkHeader }, { "is-primary": _ctx.isPrimaryHeader }, { "is-ghost": _ctx.isGhostHeader }, { "show-divider": _ctx.tabBar && !_ctx.showHeaderTabs && !_ctx.isButtonTab }, { "is-fixed": _ctx.isFixedHeader }]),
style: normalizeStyle(_ctx.headerCustomStyle),
onMouseenter: _cache[0] || (_cache[0] = (...args) => _ctx.handleHeadMouseenter && _ctx.handleHeadMouseenter(...args)),
onMouseleave: _cache[1] || (_cache[1] = (...args) => _ctx.handleHeadMouseleave && _ctx.handleHeadMouseleave(...args))
}, [
_ctx.isHeaderLogo && (_ctx.logoSrc || _ctx.logoTitle || _ctx.$slots.logo || _ctx.$slots.logoTitle) ? (openBlock(), createElementBlock("div", {
key: 0,
class: "ele-admin-logo",
style: normalizeStyle(_ctx.logoStyle)
}, [
_ctx.logoSrc || _ctx.$slots.logo ? renderSlot(_ctx.$slots, "logo", { key: 0 }, () => [
createElementVNode("img", { src: _ctx.logoSrc }, null, 8, _hoisted_1)
]) : createCommentVNode("", true),
_ctx.logoTitle || _ctx.$slots.logoTitle ? renderSlot(_ctx.$slots, "logoTitle", { key: 1 }, () => [
createElementVNode("h1", null, toDisplayString(_ctx.logoTitle), 1)
]) : createCommentVNode("", true)
], 4)) : createCommentVNode("", true),
_ctx.$slots.left ? (openBlock(), createElementBlock("div", _hoisted_2, [
renderSlot(_ctx.$slots, "left")
])) : createCommentVNode("", true),
_ctx.breadcrumb ? (openBlock(), createElementBlock("div", _hoisted_3, [
renderSlot(_ctx.$slots, "breadcrumb", {}, () => [
_ctx.levels && _ctx.levels.length ? (openBlock(), createBlock(_component_EleBreadcrumb, mergeProps({ key: 0 }, _ctx.breadcrumb === true ? {} : _ctx.breadcrumb, { items: _ctx.levels }), null, 16, ["items"])) : createCommentVNode("", true)
])
])) : createCommentVNode("", true),
renderSlot(_ctx.$slots, "center"),
!_ctx.showHeaderTabs || _ctx.showHeaderMenus ? (openBlock(), createElementBlock("div", {
key: 3,
class: "ele-admin-menus",
style: normalizeStyle(_ctx.headerMenusStyle)
}, [
_ctx.showHeaderMenus && _ctx.headerMenus ? (openBlock(), createBlock(_component_EleMenus, mergeProps({
key: 0,
mode: "horizontal",
theme: _ctx.isDarkHeader || _ctx.isPrimaryHeader ? "dark" : "light",
popupTheme: _ctx.isDarkHeader ? "dark" : "light",
defaultActive: _ctx.headerActive
}, _ctx.headerMenuProps || {}, {
items: _ctx.headerMenus,
onOpen: _ctx.handleHeadMenuOpen,
onClose: _ctx.handleHeadMenuClose,
onItemClick: _ctx.handleHeadMenuItemClick,
onItemMouseenter: _ctx.handleHeadMenuItemMouseenter,
onItemMouseleave: _ctx.handleHeadMenuItemMouseleave
}), createSlots({ _: 2 }, [
_ctx.headerIconSlot && !_ctx.ownSlots.includes(_ctx.headerIconSlot) && _ctx.$slots[_ctx.headerIconSlot] ? {
name: "icon",
fn: withCtx((slotProps) => [
renderSlot(_ctx.$slots, _ctx.headerIconSlot, normalizeProps(guardReactiveProps(slotProps || {})))
]),
key: "0"
} : void 0,
_ctx.headerTitleSlot && !_ctx.ownSlots.includes(_ctx.headerTitleSlot) && _ctx.$slots[_ctx.headerTitleSlot] ? {
name: "title",
fn: withCtx((slotProps) => [
renderSlot(_ctx.$slots, _ctx.headerTitleSlot, normalizeProps(guardReactiveProps(slotProps || {})))
]),
key: "1"
} : void 0
]), 1040, ["theme", "popupTheme", "defaultActive", "items", "onOpen", "onClose", "onItemClick", "onItemMouseenter", "onItemMouseleave"])) : createCommentVNode("", true)
], 4)) : createCommentVNode("", true),
_ctx.showHeaderTabs ? (openBlock(), createBlock(_component_LayoutTabs, {
key: 4,
tabs: _ctx.tabs,
active: _ctx.tabActive,
fixedHome: _ctx.fixedHome,
homePath: _ctx.homePath,
isHome: _ctx.isHome,
tabStyle: _ctx.tabStyle,
tabContextMenu: _ctx.tabContextMenu,
tabContextMenus: _ctx.tabContextMenus,
tabSortable: _ctx.tabSortable,
class: normalizeClass([{ "is-fixed-home": _ctx.fixedHome }]),
style: normalizeStyle(_ctx.tabsCustomStyle),
onTabClick: _ctx.handleTabClick,
onTabRemove: _ctx.handleTabRemove,
onTabContextMenu: _ctx.handleTabContextMenu,
onTabSortChange: _ctx.handleTabSortChange
}, createSlots({ _: 2 }, [
renderList(Object.keys(_ctx.$slots).filter((k) => _ctx.tabSlots.includes(k)), (name) => {
return {
name,
fn: withCtx((slotProps) => [
renderSlot(_ctx.$slots, name, normalizeProps(guardReactiveProps(slotProps || {})))
])
};
})
]), 1032, ["tabs", "active", "fixedHome", "homePath", "isHome", "tabStyle", "tabContextMenu", "tabContextMenus", "tabSortable", "class", "style", "onTabClick", "onTabRemove", "onTabContextMenu", "onTabSortChange"])) : createCommentVNode("", true),
_ctx.$slots.right ? (openBlock(), createElementBlock("div", _hoisted_4, [
renderSlot(_ctx.$slots, "right")
])) : createCommentVNode("", true)
], 38)) : createCommentVNode("", true)
]),
side: withCtx(() => [
!_ctx.isTopLayout ? (openBlock(), createElementBlock("div", {
key: 0,
class: normalizeClass(["ele-admin-side", { "is-fixed": _ctx.isFixedSidebar }, { "show-placeholder": _ctx.isFixedSidebar && _ctx.isHeaderLogo }, { "is-collapse": !_ctx.isMobile && !_ctx.isBoxSidebar && _ctx.isCollapseSidebar }, { "is-mix": !_ctx.isMobile && !_ctx.isBoxSidebar && _ctx.isMixSidebar }, { "is-compact": !_ctx.isMobile && _ctx.compact }, { "is-box": !_ctx.isMobile && _ctx.isBoxSidebar }]),
style: normalizeStyle({ height: _ctx.isFixedSidebar ? _ctx.layoutHeight : void 0 })
}, [
_ctx.isMixSidebar ? (openBlock(), createElementBlock("div", {
key: 0,
class: normalizeClass(["ele-admin-sidebox", { "is-dark": _ctx.isDarkSidebar }, { "is-ghost": _ctx.isGhostSidebar }, { "show-divider": !_ctx.isCollapseSidebar && !_ctx.isBoxSidebar }, { "is-compact": _ctx.compact }]),
style: normalizeStyle(_ctx.sideboxCustomStyle),
onMouseenter: _cache[2] || (_cache[2] = (...args) => _ctx.handleBoxMouseEnter && _ctx.handleBoxMouseEnter(...args)),
onMouseleave: _cache[3] || (_cache[3] = (...args) => _ctx.handleBoxMouseLeave && _ctx.handleBoxMouseLeave(...args))
}, [
!_ctx.isHeaderLogo && (_ctx.logoSrc || _ctx.$slots.logo) ? (openBlock(), createElementBlock("div", {
key: 0,
class: "ele-admin-logo",
style: normalizeStyle(_ctx.logoStyle)
}, [
renderSlot(_ctx.$slots, "logo", {}, () => [
createElementVNode("img", { src: _ctx.logoSrc }, null, 8, _hoisted_5)
])
], 4)) : createCommentVNode("", true),
renderSlot(_ctx.$slots, "boxTop"),
createVNode(_component_ElScrollbar, {
class: "ele-admin-menus",
style: normalizeStyle(_ctx.sideboxMenusStyle)
}, {
default: withCtx(() => [
_ctx.sideboxMenus ? (openBlock(), createBlock(_component_EleMenus, mergeProps({
key: 0,
ref: "sideboxMenuRef",
mode: "compact",
uniqueOpened: true,
collapseTransition: false,
theme: _ctx.sidebarStyle,
defaultActive: _ctx.sideboxActive,
collapse: _ctx.compact
}, _ctx.sideboxMenuProps || {}, {
items: _ctx.sideboxMenus,
onItemClick: _ctx.handleBoxMenuItemClick,
onItemMouseenter: _ctx.handleBoxMenuItemMouseenter,
onItemMouseleave: _ctx.handleBoxMenuItemMouseleave
}), createSlots({ _: 2 }, [
_ctx.sideboxIconSlot && !_ctx.ownSlots.includes(_ctx.sideboxIconSlot) && _ctx.$slots[_ctx.sideboxIconSlot] ? {
name: "icon",
fn: withCtx((slotProps) => [
renderSlot(_ctx.$slots, _ctx.sideboxIconSlot, normalizeProps(guardReactiveProps(slotProps || {})))
]),
key: "0"
} : void 0,
_ctx.sideboxTitleSlot && !_ctx.ownSlots.includes(_ctx.sideboxTitleSlot) && _ctx.$slots[_ctx.sideboxTitleSlot] ? {
name: "title",
fn: withCtx((slotProps) => [
renderSlot(_ctx.$slots, _ctx.sideboxTitleSlot, normalizeProps(guardReactiveProps(slotProps || {})))
]),
key: "1"
} : void 0
]), 1040, ["theme", "defaultActive", "collapse", "items", "onItemClick", "onItemMouseenter", "onItemMouseleave"])) : createCommentVNode("", true)
]),
_: 3
}, 8, ["style"]),
renderSlot(_ctx.$slots, "boxBottom")
], 38)) : createCommentVNode("", true),
!_ctx.isBoxSidebar ? (openBlock(), createElementBlock("div", {
key: 1,
class: normalizeClass(["ele-admin-sidebar", { "is-dark": _ctx.isMixSidebar ? _ctx.isDarkMixSidebar : _ctx.isDarkSidebar }, { "is-ghost": _ctx.isGhostSidebar }, { "is-mix": _ctx.isMixSidebar }, { "is-collapse": _ctx.isCollapseSidebar }]),
style: normalizeStyle(_ctx.sidebarCustomStyle),
onMouseenter: _cache[4] || (_cache[4] = (...args) => _ctx.handleSideMouseEnter && _ctx.handleSideMouseEnter(...args)),
onMouseleave: _cache[5] || (_cache[5] = (...args) => _ctx.handleSideMouseLeave && _ctx.handleSideMouseLeave(...args))
}, [
_ctx.isMixSidebar ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
!_ctx.isHeaderLogo && (_ctx.logoTitle || _ctx.$slots.logoTitle) ? (openBlock(), createElementBlock("div", {
key: 0,
class: "ele-admin-logo-title",
style: normalizeStyle(_ctx.logoTitleStyle)
}, [
renderSlot(_ctx.$slots, "logoTitle", {}, () => [
createElementVNode("h1", null, toDisplayString(_ctx.logoTitle), 1)
])
], 4)) : createCommentVNode("", true)
], 64)) : !_ctx.isHeaderLogo && (_ctx.logoSrc || _ctx.logoTitle || _ctx.$slots.logo || _ctx.$slots.logoTitle) ? (openBlock(), createElementBlock("div", {
key: 1,
class: "ele-admin-logo",
style: normalizeStyle(_ctx.logoStyle)
}, [
_ctx.logoSrc || _ctx.$slots.logo ? renderSlot(_ctx.$slots, "logo", { key: 0 }, () => [
createElementVNode("img", { src: _ctx.logoSrc }, null, 8, _hoisted_6)
]) : createCommentVNode("", true),
_ctx.logoTitle || _ctx.$slots.logoTitle ? renderSlot(_ctx.$slots, "logoTitle", { key: 1 }, () => [
createElementVNode("h1", null, toDisplayString(_ctx.logoTitle), 1)
]) : createCommentVNode("", true)
], 4)) : createCommentVNode("", true),
renderSlot(_ctx.$slots, "top"),
createVNode(_component_ElScrollbar, {
class: "ele-admin-menus",
style: normalizeStyle(_ctx.sidebarMenusStyle)
}, {
default: withCtx(() => [
_ctx.sidebarMenus ? (openBlock(), createBlock(_component_EleMenus, mergeProps({
key: 0,
ref: "sidebarMenuRef",
uniqueOpened: true,
collapseTransition: false,
theme: _ctx.isMixSidebar && !_ctx.isDarkMixSidebar ? void 0 : _ctx.sidebarStyle,
defaultActive: _ctx.sidebarActive,
collapse: _ctx.isMixSidebar ? false : _ctx.isCollapseSidebar
}, _ctx.sidebarMenuProps || {}, {
items: _ctx.sidebarMenus,
onOpen: _ctx.handleSideMenuOpen,
onClose: _ctx.handleSideMenuClose,
onItemClick: _ctx.handleSideMenuItemClick
}), createSlots({ _: 2 }, [
_ctx.sidebarIconSlot && !_ctx.ownSlots.includes(_ctx.sidebarIconSlot) && _ctx.$slots[_ctx.sidebarIconSlot] ? {
name: "icon",
fn: withCtx((slotProps) => [
renderSlot(_ctx.$slots, _ctx.sidebarIconSlot, normalizeProps(guardReactiveProps(slotProps || {})))
]),
key: "0"
} : void 0,
_ctx.sidebarTitleSlot && !_ctx.ownSlots.includes(_ctx.sidebarTitleSlot) && _ctx.$slots[_ctx.sidebarTitleSlot] ? {
name: "title",
fn: withCtx((slotProps) => [
renderSlot(_ctx.$slots, _ctx.sidebarTitleSlot, normalizeProps(guardReactiveProps(slotProps || {})))
]),
key: "1"
} : void 0
]), 1040, ["theme", "defaultActive", "collapse", "items", "onOpen", "onClose", "onItemClick"])) : createCommentVNode("", true)
]),
_: 3
}, 8, ["style"]),
renderSlot(_ctx.$slots, "bottom")
], 38)) : createCommentVNode("", true)
], 6)) : createCommentVNode("", true)
]),
tabs: withCtx(() => [
_ctx.tabBar && !_ctx.showHeaderTabs ? (openBlock(), createBlock(_component_LayoutTabs, {
key: 0,
tabs: _ctx.tabs,
active: _ctx.tabActive,
fixedHome: _ctx.fixedHome,
homePath: _ctx.homePath,
isHome: _ctx.isHome,
tabStyle: _ctx.tabStyle,
tabContextMenu: _ctx.tabContextMenu,
tabContextMenus: _ctx.tabContextMenus,
tabSortable: _ctx.tabSortable,
class: normalizeClass([{ "is-fixed-home": _ctx.fixedHome }, { "is-fixed": _ctx.isFixedHeader }, { "is-fixed-top": _ctx.isFixedHeader && (_ctx.isSideLayout || _ctx.maximized) }]),
style: normalizeStyle(_ctx.tabsCustomStyle),
onTabClick: _ctx.handleTabClick,
onTabRemove: _ctx.handleTabRemove,
onTabContextMenu: _ctx.handleTabContextMenu,
onTabSortChange: _ctx.handleTabSortChange
}, createSlots({ _: 2 }, [
renderList(Object.keys(_ctx.$slots).filter((k) => _ctx.tabSlots.includes(k)), (name) => {
return {
name,
fn: withCtx((slotProps) => [
renderSlot(_ctx.$slots, name, normalizeProps(guardReactiveProps(slotProps || {})))
])
};
})
]), 1032, ["tabs", "active", "fixedHome", "homePath", "isHome", "tabStyle", "tabContextMenu", "tabContextMenus", "tabSortable", "class", "style", "onTabClick", "onTabRemove", "onTabContextMenu", "onTabSortChange"])) : createCommentVNode("", true)
]),
body: withCtx(() => [
createElementVNode("div", {
ref: "contentRef",
class: "ele-admin-content",
style: normalizeStyle(_ctx.contentCustomStyle)
}, [
renderSlot(_ctx.$slots, "default")
], 4),
renderSlot(_ctx.$slots, "body"),
_ctx.backTop ? (openBlock(), createBlock(_component_EleBacktop, mergeProps({
key: 0,
target: _ctx.fixedBody && _ctx.contentRef ? _ctx.contentRef : void 0,
style: _ctx.fixedBody ? { position: "absolute" } : void 0
}, _ctx.backTop === true ? {} : _ctx.backTop), null, 16, ["target", "style"])) : createCommentVNode("", true),
createElementVNode("div", _hoisted_7, null, 512)
]),
default: withCtx(() => [
createElementVNode("div", {
class: "ele-admin-mask",
onClick: _cache[6] || (_cache[6] = ($event) => _ctx.updateCollapse())
})
]),
_: 3
}, 8, ["isHeaderLogo", "class", "style"]);
}
const index = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
export {
index as default
};