@vrx-arco/pro-layout
Version:
<p align="center"> <img src="https://vrx-arco.github.io/arco-design-pro/favicon.svg" width="200" height="250"> </p>
64 lines (63 loc) • 2.7 kB
JavaScript
import { style } from "../style/var.js";
import { ProMenu } from "./components/Menu/Menu.js";
import { NavBar } from "./components/NavBar/index.js";
import { createVNode, defineComponent } from "vue";
import { Drawer, Layout, LayoutContent, LayoutHeader, LayoutSider, Scrollbar, Spin } from "@arco-design/web-vue";
import { useShareBreakpoints } from "@vrx-arco/use";
import { RouterView } from "vue-router";
import { useToggle } from "@vueuse/core";
const ProLayout = /* @__PURE__ */ defineComponent({
name: "vrx-arco-pro-layout",
props: {
menus: {
type: Array,
default: () => []
},
title: String,
logo: String,
loading: {
type: Boolean,
default: false
}
},
slots: Object,
setup: (props, { slots }) => {
const { bemClass } = style("pro-layout");
const breakpoints = useShareBreakpoints();
const isSmallerLg = breakpoints.smaller("lg");
const [menuModelVisible, setMenuModelVisible] = useToggle(false);
return () => {
const { title, logo, menus, loading } = props;
return createVNode(Spin, {
"loading": loading,
"class": bemClass("__spin"),
"size": 30
}, { default: () => [createVNode(Layout, { "class": bemClass() }, { default: () => [createVNode(LayoutHeader, { "class": bemClass("__header") }, { default: () => [createVNode(NavBar, {
"title": title,
"logo": logo,
"onMenuClick": () => {
setMenuModelVisible(true);
}
}, {
default: () => [slots.headerToolbox?.()],
logo: slots.logo,
title: slots.title,
logoContainer: slots.logoContainer,
content: slots.navContent
})] }), createVNode(LayoutContent, { "class": bemClass("__wrap-container") }, { default: () => [createVNode(Layout, { "class": bemClass("__wrap") }, { default: () => [isSmallerLg.value ? createVNode(Drawer, {
"class": bemClass("__smaller-menu-drawer"),
"placement": "left",
"visible": menuModelVisible.value,
"onUpdate:visible": ($event) => menuModelVisible.value = $event,
"footer": false,
"header": false,
"maskClosable": true,
"closable": false
}, { default: () => [createVNode(Scrollbar, { "outerClass": bemClass("__menu-scrollbar") }, { default: () => [createVNode(ProMenu, { "menu": menus }, { icon: slots.menuIcon })] })] }) : createVNode(LayoutSider, {
"breakpoint": "xl",
"collapsible": true
}, { default: () => [createVNode(Scrollbar, { "outerClass": bemClass("__menu-scrollbar") }, { default: () => [createVNode(ProMenu, { "menu": menus }, { icon: slots.menuIcon })] })] }), createVNode(LayoutContent, { "class": bemClass("__content") }, { default: () => [slots.default?.() || createVNode(RouterView, null, null)] })] })] })] })] });
};
}
});
export { ProLayout };