import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties"; import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2"; var _excluded = ["pure", "onCollapse", "onOpenKeys", "onSelect", "onMenuClick"]; import { Fragment as _Fragment, createVNode as _createVNode } from "vue"; import SiderMenu, { siderMenuProps } from '../SiderMenu/SiderMenu'; import { computed, defineComponent, provide, reactive, watchEffect, toRefs } from 'vue'; import { defaultSettingProps } from '../defaultSettings'; import { baseHeaderProps } from '../TopHeader'; import Header, { headerViewProps } from './Header'; import useConfigInject from "ant-design-vue/es/_util/hooks/useConfigInject"; import { pick } from 'lodash-es'; import { defaultRouteContext, routeContextInjectKey } from '../RouteContext'; import { getMenuFirstChildren, getSlot } from '../util'; import { Layout, LayoutContent } from '../../components'; export var basicLayoutProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, defaultSettingProps), siderMenuProps), baseHeaderProps), headerViewProps), {}, { pure: Boolean, loading: Boolean, locale: { type: [Function, Boolean], default: function _default() { return function (s) { return s; }; } }, /** * 是否禁用移动端模式,有的管理系统不需要移动端模式,此属性设置为true即可 */ disableMobile: { type: Boolean, required: false }, isChildrenLayout: { type: Boolean, required: false }, /** * 兼用 content 的 margin */ disableContentMargin: { type: Boolean, required: false }, colSize: { type: Number, required: false }, contentStyle: { type: [String, Object], default: function _default() { return null; } }, breadcrumb: { type: [Object, Function], default: function _default() { return null; } }, collapsedButtonRender: { type: [Function, Object, Boolean], default: function _default() { return undefined; } }, breadcrumbRender: { type: [Object, Function, Boolean], default: function _default() { return null; } }, headerContentRender: { type: [Function, Object, Boolean], default: function _default() { return undefined; } }, headerRender: { type: [Object, Function, Boolean], default: function _default() { return undefined; } } }); export default defineComponent({ name: 'JProLayout', inheritAttrs: false, props: basicLayoutProps, emits: ['update:collapsed', 'update:open-keys', 'update:selected-keys', 'collapse', 'openKeys', 'select', 'menuHeaderClick', 'menuClick', 'backClick'], setup: function setup(props, _ref) { var emit = _ref.emit, attrs = _ref.attrs, slots = _ref.slots; var _useConfigInject = useConfigInject('layout', {}), prefixCls = _useConfigInject.prefixCls; var isTop = computed(function () { return props.layout === 'top'; }); var hasSide = computed(function () { return props.layout === 'mix' || props.layout === 'side' || false; }); var hasSplitMenu = computed(function () { return props.layout === 'mix' && props.splitMenus; }); var hasFlatMenu = computed(function () { return hasSide.value && hasSplitMenu.value; }); var siderWidth = computed(function () { return props.collapsed ? props.collapsedWidth : props.siderWidth; }); var onCollapse = function onCollapse(collapsed) { emit('update:collapsed', collapsed); emit('collapse', collapsed); }; var onOpenKeys = function onOpenKeys(openKeys) { emit('update:open-keys', openKeys); emit('openKeys', openKeys); }; var onSelect = function onSelect(selectedKeys) { emit('update:selected-keys', selectedKeys); emit('select', selectedKeys); }; var onMenuHeaderClick = function onMenuHeaderClick(e) { emit('menuHeaderClick', e); }; var onMenuClick = function onMenuClick(args) { emit('menuClick', args); }; var onBack = function onBack(args) { emit('backClick', args); }; var baseClassName = computed(function () { return "".concat(props.prefixCls, "-basicLayout"); }); var className = computed(function () { var _ref2; return _ref2 = {}, _defineProperty(_ref2, baseClassName.value, true), _defineProperty(_ref2, "".concat(baseClassName.value, "-top-menu"), isTop.value), _defineProperty(_ref2, "".concat(baseClassName.value, "-is-children"), props.isChildrenLayout), _defineProperty(_ref2, "".concat(baseClassName.value, "-fix-siderbar"), props.fixSiderbar), _defineProperty(_ref2, "".concat(baseClassName.value, "-").concat(props.layout), props.layout), _ref2; }); var genLayoutStyle = reactive({ position: 'relative' }); watchEffect(function () { if (props.isChildrenLayout || props.contentStyle && props.contentStyle.minHeight) { genLayoutStyle.minHeight = 0; } }); var headerRender = function headerRender(p, matchMenuKeys) { if (p.headerRender === false || p.pure) { return null; } return _createVNode(Header, _objectSpread(_objectSpread({}, p), {}, { "matchMenuKeys": matchMenuKeys || [] }), null); }; var breadcrumb = computed(function () { return _objectSpread(_objectSpread({}, props.breadcrumb), {}, { itemRender: getSlot(slots, props, 'breadcrumbRender') }); }); var flatMenuData = computed(function () { return hasFlatMenu.value && props.selectedKeys && getMenuFirstChildren(props.menuData, props.selectedKeys[0]) || []; }); var routeContext = reactive(_objectSpread(_objectSpread(_objectSpread({}, defaultRouteContext), pick(toRefs(props), ['pure', 'locale', 'menuData', 'openKeys', 'selectedKeys', 'contentWidth', 'disableMobile', 'fixSiderbar', 'fixedHeader', 'headerHeight'])), {}, { siderWidth: siderWidth, breadcrumb: breadcrumb, flatMenuData: flatMenuData, hasSide: hasSide, back: onBack, hasHeader: true, flatMenu: hasFlatMenu })); provide(routeContextInjectKey, routeContext); return function () { var _slots$default, _slots$default2; var pure = props.pure, propsOnCollapse = props.onCollapse, propsOnOpenKeys = props.onOpenKeys, propsOnSelect = props.onSelect, propsOnMenuClick = props.onMenuClick, restProps = _objectWithoutProperties(props, _excluded); var collapsedButtonRender = getSlot(slots, props, 'collapsedButtonRender'); var headerContentRender = getSlot(slots, props, 'headerContentRender'); var rightContentRender = getSlot(slots, props, 'rightContentRender'); var customHeaderRender = getSlot(slots, props, 'headerRender'); // menu var menuHeaderRender = getSlot(slots, props, 'menuHeaderRender'); var menuExtraRender = getSlot(slots, props, 'menuExtraRender'); var menuContentRender = getSlot(slots, props, 'menuContentRender'); var menuItemRender = getSlot(slots, props, 'menuItemRender'); var subMenuItemRender = getSlot(slots, props, 'subMenuItemRender'); var headerDom = computed(function () { return headerRender(_objectSpread(_objectSpread({}, props), {}, { menuItemRender: menuItemRender, subMenuItemRender: subMenuItemRender, hasSiderMenu: !isTop.value, menuData: props.menuData, onCollapse: onCollapse, onOpenKeys: onOpenKeys, onSelect: onSelect, onMenuHeaderClick: onMenuHeaderClick, rightContentRender: rightContentRender, collapsedButtonRender: collapsedButtonRender, headerTitleRender: menuHeaderRender, menuExtraRender: menuExtraRender, menuContentRender: menuContentRender, headerContentRender: headerContentRender, headerRender: customHeaderRender, theme: (props.theme || 'dark').toLocaleLowerCase().includes('dark') ? 'dark' : 'light' }), props.matchMenuKeys); }); routeContext.hasHeader = !!headerDom.value; var contentClassName = computed(function () { var _ref3; return _ref3 = {}, _defineProperty(_ref3, "".concat(baseClassName.value, "-content"), true), _defineProperty(_ref3, "".concat(baseClassName.value, "-has-header"), headerDom), _defineProperty(_ref3, "".concat(baseClassName.value, "-content-disable-margin"), props.disableContentMargin), _ref3; }); return _createVNode(_Fragment, null, [pure ? (_slots$default = slots.default) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots) : _createVNode("div", { "class": className.value }, [_createVNode(Layout, { "style": _objectSpread({ minHeight: '100vh' }, attrs.style || {}) }, { default: function _default() { return [headerDom.value, _createVNode(Layout, { "style": genLayoutStyle, "class": prefixCls.value }, { default: function _default() { return [!isTop.value && _createVNode(SiderMenu, _objectSpread(_objectSpread({}, restProps), {}, { "menuHeaderRender": menuHeaderRender, "menuExtraRender": menuExtraRender, "menuContentRender": menuContentRender, "menuItemRender": menuItemRender, "subMenuItemRender": subMenuItemRender, "collapsedButtonRender": collapsedButtonRender, "onCollapse": onCollapse, "onSelect": onSelect, "onOpenKeys": onOpenKeys, "onMenuClick": onMenuClick }), null), _createVNode(Layout, null, { default: function _default() { return [_createVNode(LayoutContent, null, { default: function _default() { return [(_slots$default2 = slots.default) === null || _slots$default2 === void 0 ? void 0 : _slots$default2.call(slots)]; } })]; } })]; } })]; } })])]); }; } });