UNPKG

@charrue/layout

Version:

基于vue2与element-ui, 解决中后台布局的问题,提供自动生成菜单与定制页面布局, 提供自动生成菜单与定制页面布局

1 lines 56.9 kB
{"version":3,"file":"index.min.mjs","sources":["../../layout-internal/src/utils.js","../../../node_modules/.pnpm/path-to-regexp@6.2.1/node_modules/path-to-regexp/dist.es2015/index.js","../../layout-internal/src/SidebarItem.vue","../../layout-internal/src/LayoutSidebar.vue","../../layout-internal/src/LayoutContent.vue","../../layout-internal/src/Hamburger.vue","../../layout-internal/src/Layout.vue","../../layout-internal/src/index.js","../index.js"],"sourcesContent":["/* eslint-disable no-param-reassign */\nexport function cleanPath(path) {\n return path.replace(/\\/\\//g, \"/\");\n}\n\nexport const inBrowser = window != null;\n\nexport function isFunction(val) {\n return typeof val === \"function\";\n}\n\nconst HttpReg =\n // eslint-disable-next-line no-useless-escape\n /(((^https?:(?:\\/\\/)?)(?:[-;:&=\\+\\$,\\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\\+\\$,\\w]+@)[A-Za-z0-9.-]+)((?:\\/[\\+~%\\/.\\w-_]*)?\\??(?:[-\\+=&;%@.\\w_]*)#?(?:[\\w]*))?)$/g;\n\nexport function isUrl(path) {\n return HttpReg.test(path);\n}\n\nexport function urlToList(url) {\n const segments = url.split(\"/\").filter((i) => i);\n return segments.map(\n (_, index) => `/${segments.slice(0, index + 1).join(\"/\")}`\n );\n}\n/**\n * 1. 补全path的路径\n * 2. 补全redirect的路径 如果一个菜单数据设置了redirect 那么在$route.path 匹配到该path时,会指向redirect所指向的path\n *\n * @param { RegisterMenuData } data\n * @returns { RegisterMenuData }\n */\nexport function menuDataFormatter(data, parentPath = \"\") {\n return data.map((item) => {\n let { path } = item;\n parentPath = cleanPath(parentPath);\n\n if (path && !isUrl(path)) {\n const isRootPath = path[0] === \"/\";\n if (path) {\n path = parentPath && isRootPath ? path : `${parentPath}/${path}`;\n }\n }\n\n path = cleanPath(path);\n\n const result = {\n ...item,\n path,\n parentPath,\n };\n if (item.children) {\n result.children = menuDataFormatter(\n item.children,\n `${parentPath}/${item.path}`\n );\n }\n return result;\n });\n}\n\n/**\n * @param { RegisterMenuData[] } processedMenuData\n */\nexport function getMenuDataPathMapping(menuList) {\n const mapping = {};\n\n const setMapping = (list) => {\n const itemList = [];\n list.forEach((item) => {\n mapping[item.path] = item;\n if (\n item.children &&\n Array.isArray(item.children) &&\n item.children.length > 0\n ) {\n itemList.push(...item.children);\n }\n });\n return itemList;\n };\n\n let list = setMapping(menuList);\n while (list && list.length > 0) {\n list = setMapping(list);\n }\n\n return mapping;\n}\n","/**\n * Tokenize input string.\n */\nfunction lexer(str) {\n var tokens = [];\n var i = 0;\n while (i < str.length) {\n var char = str[i];\n if (char === \"*\" || char === \"+\" || char === \"?\") {\n tokens.push({ type: \"MODIFIER\", index: i, value: str[i++] });\n continue;\n }\n if (char === \"\\\\\") {\n tokens.push({ type: \"ESCAPED_CHAR\", index: i++, value: str[i++] });\n continue;\n }\n if (char === \"{\") {\n tokens.push({ type: \"OPEN\", index: i, value: str[i++] });\n continue;\n }\n if (char === \"}\") {\n tokens.push({ type: \"CLOSE\", index: i, value: str[i++] });\n continue;\n }\n if (char === \":\") {\n var name = \"\";\n var j = i + 1;\n while (j < str.length) {\n var code = str.charCodeAt(j);\n if (\n // `0-9`\n (code >= 48 && code <= 57) ||\n // `A-Z`\n (code >= 65 && code <= 90) ||\n // `a-z`\n (code >= 97 && code <= 122) ||\n // `_`\n code === 95) {\n name += str[j++];\n continue;\n }\n break;\n }\n if (!name)\n throw new TypeError(\"Missing parameter name at \".concat(i));\n tokens.push({ type: \"NAME\", index: i, value: name });\n i = j;\n continue;\n }\n if (char === \"(\") {\n var count = 1;\n var pattern = \"\";\n var j = i + 1;\n if (str[j] === \"?\") {\n throw new TypeError(\"Pattern cannot start with \\\"?\\\" at \".concat(j));\n }\n while (j < str.length) {\n if (str[j] === \"\\\\\") {\n pattern += str[j++] + str[j++];\n continue;\n }\n if (str[j] === \")\") {\n count--;\n if (count === 0) {\n j++;\n break;\n }\n }\n else if (str[j] === \"(\") {\n count++;\n if (str[j + 1] !== \"?\") {\n throw new TypeError(\"Capturing groups are not allowed at \".concat(j));\n }\n }\n pattern += str[j++];\n }\n if (count)\n throw new TypeError(\"Unbalanced pattern at \".concat(i));\n if (!pattern)\n throw new TypeError(\"Missing pattern at \".concat(i));\n tokens.push({ type: \"PATTERN\", index: i, value: pattern });\n i = j;\n continue;\n }\n tokens.push({ type: \"CHAR\", index: i, value: str[i++] });\n }\n tokens.push({ type: \"END\", index: i, value: \"\" });\n return tokens;\n}\n/**\n * Parse a string for the raw tokens.\n */\nexport function parse(str, options) {\n if (options === void 0) { options = {}; }\n var tokens = lexer(str);\n var _a = options.prefixes, prefixes = _a === void 0 ? \"./\" : _a;\n var defaultPattern = \"[^\".concat(escapeString(options.delimiter || \"/#?\"), \"]+?\");\n var result = [];\n var key = 0;\n var i = 0;\n var path = \"\";\n var tryConsume = function (type) {\n if (i < tokens.length && tokens[i].type === type)\n return tokens[i++].value;\n };\n var mustConsume = function (type) {\n var value = tryConsume(type);\n if (value !== undefined)\n return value;\n var _a = tokens[i], nextType = _a.type, index = _a.index;\n throw new TypeError(\"Unexpected \".concat(nextType, \" at \").concat(index, \", expected \").concat(type));\n };\n var consumeText = function () {\n var result = \"\";\n var value;\n while ((value = tryConsume(\"CHAR\") || tryConsume(\"ESCAPED_CHAR\"))) {\n result += value;\n }\n return result;\n };\n while (i < tokens.length) {\n var char = tryConsume(\"CHAR\");\n var name = tryConsume(\"NAME\");\n var pattern = tryConsume(\"PATTERN\");\n if (name || pattern) {\n var prefix = char || \"\";\n if (prefixes.indexOf(prefix) === -1) {\n path += prefix;\n prefix = \"\";\n }\n if (path) {\n result.push(path);\n path = \"\";\n }\n result.push({\n name: name || key++,\n prefix: prefix,\n suffix: \"\",\n pattern: pattern || defaultPattern,\n modifier: tryConsume(\"MODIFIER\") || \"\",\n });\n continue;\n }\n var value = char || tryConsume(\"ESCAPED_CHAR\");\n if (value) {\n path += value;\n continue;\n }\n if (path) {\n result.push(path);\n path = \"\";\n }\n var open = tryConsume(\"OPEN\");\n if (open) {\n var prefix = consumeText();\n var name_1 = tryConsume(\"NAME\") || \"\";\n var pattern_1 = tryConsume(\"PATTERN\") || \"\";\n var suffix = consumeText();\n mustConsume(\"CLOSE\");\n result.push({\n name: name_1 || (pattern_1 ? key++ : \"\"),\n pattern: name_1 && !pattern_1 ? defaultPattern : pattern_1,\n prefix: prefix,\n suffix: suffix,\n modifier: tryConsume(\"MODIFIER\") || \"\",\n });\n continue;\n }\n mustConsume(\"END\");\n }\n return result;\n}\n/**\n * Compile a string to a template function for the path.\n */\nexport function compile(str, options) {\n return tokensToFunction(parse(str, options), options);\n}\n/**\n * Expose a method for transforming tokens into the path function.\n */\nexport function tokensToFunction(tokens, options) {\n if (options === void 0) { options = {}; }\n var reFlags = flags(options);\n var _a = options.encode, encode = _a === void 0 ? function (x) { return x; } : _a, _b = options.validate, validate = _b === void 0 ? true : _b;\n // Compile all the tokens into regexps.\n var matches = tokens.map(function (token) {\n if (typeof token === \"object\") {\n return new RegExp(\"^(?:\".concat(token.pattern, \")$\"), reFlags);\n }\n });\n return function (data) {\n var path = \"\";\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (typeof token === \"string\") {\n path += token;\n continue;\n }\n var value = data ? data[token.name] : undefined;\n var optional = token.modifier === \"?\" || token.modifier === \"*\";\n var repeat = token.modifier === \"*\" || token.modifier === \"+\";\n if (Array.isArray(value)) {\n if (!repeat) {\n throw new TypeError(\"Expected \\\"\".concat(token.name, \"\\\" to not repeat, but got an array\"));\n }\n if (value.length === 0) {\n if (optional)\n continue;\n throw new TypeError(\"Expected \\\"\".concat(token.name, \"\\\" to not be empty\"));\n }\n for (var j = 0; j < value.length; j++) {\n var segment = encode(value[j], token);\n if (validate && !matches[i].test(segment)) {\n throw new TypeError(\"Expected all \\\"\".concat(token.name, \"\\\" to match \\\"\").concat(token.pattern, \"\\\", but got \\\"\").concat(segment, \"\\\"\"));\n }\n path += token.prefix + segment + token.suffix;\n }\n continue;\n }\n if (typeof value === \"string\" || typeof value === \"number\") {\n var segment = encode(String(value), token);\n if (validate && !matches[i].test(segment)) {\n throw new TypeError(\"Expected \\\"\".concat(token.name, \"\\\" to match \\\"\").concat(token.pattern, \"\\\", but got \\\"\").concat(segment, \"\\\"\"));\n }\n path += token.prefix + segment + token.suffix;\n continue;\n }\n if (optional)\n continue;\n var typeOfMessage = repeat ? \"an array\" : \"a string\";\n throw new TypeError(\"Expected \\\"\".concat(token.name, \"\\\" to be \").concat(typeOfMessage));\n }\n return path;\n };\n}\n/**\n * Create path match function from `path-to-regexp` spec.\n */\nexport function match(str, options) {\n var keys = [];\n var re = pathToRegexp(str, keys, options);\n return regexpToFunction(re, keys, options);\n}\n/**\n * Create a path match function from `path-to-regexp` output.\n */\nexport function regexpToFunction(re, keys, options) {\n if (options === void 0) { options = {}; }\n var _a = options.decode, decode = _a === void 0 ? function (x) { return x; } : _a;\n return function (pathname) {\n var m = re.exec(pathname);\n if (!m)\n return false;\n var path = m[0], index = m.index;\n var params = Object.create(null);\n var _loop_1 = function (i) {\n if (m[i] === undefined)\n return \"continue\";\n var key = keys[i - 1];\n if (key.modifier === \"*\" || key.modifier === \"+\") {\n params[key.name] = m[i].split(key.prefix + key.suffix).map(function (value) {\n return decode(value, key);\n });\n }\n else {\n params[key.name] = decode(m[i], key);\n }\n };\n for (var i = 1; i < m.length; i++) {\n _loop_1(i);\n }\n return { path: path, index: index, params: params };\n };\n}\n/**\n * Escape a regular expression string.\n */\nfunction escapeString(str) {\n return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n}\n/**\n * Get the flags for a regexp from the options.\n */\nfunction flags(options) {\n return options && options.sensitive ? \"\" : \"i\";\n}\n/**\n * Pull out keys from a regexp.\n */\nfunction regexpToRegexp(path, keys) {\n if (!keys)\n return path;\n var groupsRegex = /\\((?:\\?<(.*?)>)?(?!\\?)/g;\n var index = 0;\n var execResult = groupsRegex.exec(path.source);\n while (execResult) {\n keys.push({\n // Use parenthesized substring match if available, index otherwise\n name: execResult[1] || index++,\n prefix: \"\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\",\n });\n execResult = groupsRegex.exec(path.source);\n }\n return path;\n}\n/**\n * Transform an array into a regexp.\n */\nfunction arrayToRegexp(paths, keys, options) {\n var parts = paths.map(function (path) { return pathToRegexp(path, keys, options).source; });\n return new RegExp(\"(?:\".concat(parts.join(\"|\"), \")\"), flags(options));\n}\n/**\n * Create a path regexp from string input.\n */\nfunction stringToRegexp(path, keys, options) {\n return tokensToRegexp(parse(path, options), keys, options);\n}\n/**\n * Expose a function for taking tokens and returning a RegExp.\n */\nexport function tokensToRegexp(tokens, keys, options) {\n if (options === void 0) { options = {}; }\n var _a = options.strict, strict = _a === void 0 ? false : _a, _b = options.start, start = _b === void 0 ? true : _b, _c = options.end, end = _c === void 0 ? true : _c, _d = options.encode, encode = _d === void 0 ? function (x) { return x; } : _d, _e = options.delimiter, delimiter = _e === void 0 ? \"/#?\" : _e, _f = options.endsWith, endsWith = _f === void 0 ? \"\" : _f;\n var endsWithRe = \"[\".concat(escapeString(endsWith), \"]|$\");\n var delimiterRe = \"[\".concat(escapeString(delimiter), \"]\");\n var route = start ? \"^\" : \"\";\n // Iterate over the tokens and create our regexp string.\n for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {\n var token = tokens_1[_i];\n if (typeof token === \"string\") {\n route += escapeString(encode(token));\n }\n else {\n var prefix = escapeString(encode(token.prefix));\n var suffix = escapeString(encode(token.suffix));\n if (token.pattern) {\n if (keys)\n keys.push(token);\n if (prefix || suffix) {\n if (token.modifier === \"+\" || token.modifier === \"*\") {\n var mod = token.modifier === \"*\" ? \"?\" : \"\";\n route += \"(?:\".concat(prefix, \"((?:\").concat(token.pattern, \")(?:\").concat(suffix).concat(prefix, \"(?:\").concat(token.pattern, \"))*)\").concat(suffix, \")\").concat(mod);\n }\n else {\n route += \"(?:\".concat(prefix, \"(\").concat(token.pattern, \")\").concat(suffix, \")\").concat(token.modifier);\n }\n }\n else {\n if (token.modifier === \"+\" || token.modifier === \"*\") {\n route += \"((?:\".concat(token.pattern, \")\").concat(token.modifier, \")\");\n }\n else {\n route += \"(\".concat(token.pattern, \")\").concat(token.modifier);\n }\n }\n }\n else {\n route += \"(?:\".concat(prefix).concat(suffix, \")\").concat(token.modifier);\n }\n }\n }\n if (end) {\n if (!strict)\n route += \"\".concat(delimiterRe, \"?\");\n route += !options.endsWith ? \"$\" : \"(?=\".concat(endsWithRe, \")\");\n }\n else {\n var endToken = tokens[tokens.length - 1];\n var isEndDelimited = typeof endToken === \"string\"\n ? delimiterRe.indexOf(endToken[endToken.length - 1]) > -1\n : endToken === undefined;\n if (!strict) {\n route += \"(?:\".concat(delimiterRe, \"(?=\").concat(endsWithRe, \"))?\");\n }\n if (!isEndDelimited) {\n route += \"(?=\".concat(delimiterRe, \"|\").concat(endsWithRe, \")\");\n }\n }\n return new RegExp(route, flags(options));\n}\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n */\nexport function pathToRegexp(path, keys, options) {\n if (path instanceof RegExp)\n return regexpToRegexp(path, keys);\n if (Array.isArray(path))\n return arrayToRegexp(path, keys, options);\n return stringToRegexp(path, keys, options);\n}\n//# sourceMappingURL=index.js.map","<template>\n <div class=\"charrue-sidebar-menu-children\">\n <component\n :is=\"subMenuComponent\"\n v-if=\"menuItem.children && menuItem.children.length > 0\"\n :index=\"menuItem.path\"\n popper-append-to-body\n >\n <template #title>\n <div\n class=\"charrue-submenu-title\"\n :class=\"[menuItem.icon ? 'charrue-submenu-title-with-icon' : '']\"\n >\n <i\n class=\"charrue-sidebar-menu-icon\"\n :class=\"[prefixIconClass, menuItem.icon]\"\n ></i>\n <span class=\"charrue-sidebar-menu-title\" :class=\"[menuTextClass]\">{{\n menuItem.title\n }}</span>\n </div>\n </template>\n\n <sidebar-item\n v-for=\"child in menuItem.children\"\n :key=\"child.path\"\n :route=\"route\"\n :is-nest=\"true\"\n :menu-item=\"child\"\n :sub-menu-component=\"subMenuComponent\"\n />\n </component>\n <template v-else>\n <router-link\n v-if=\"route\"\n :to=\"menuItem.path\"\n class=\"charrue-menu-router-link\"\n >\n <el-menu-item :index=\"menuItem.path\">\n <i\n class=\"charrue-sidebar-menu-icon\"\n :class=\"[prefixIconClass, menuItem.icon]\"\n ></i>\n <template #title>\n <span class=\"charrue-sidebar-menu-title\" :class=\"[menuTextClass]\">{{\n menuItem.title\n }}</span>\n </template>\n </el-menu-item>\n </router-link>\n <el-menu-item v-else :index=\"menuItem.path\">\n <i\n class=\"charrue-sidebar-menu-icon\"\n :class=\"[prefixIconClass, menuItem.icon]\"\n ></i>\n <template #title>\n <span class=\"charrue-sidebar-menu-title\" :class=\"[menuTextClass]\">{{\n menuItem.title\n }}</span>\n </template>\n </el-menu-item>\n </template>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"SidebarItem\",\n props: {\n menuItem: {\n type: Object,\n required: true,\n },\n prefixIconClass: String,\n menuTextClass: String,\n route: Boolean,\n },\n computed: {\n subMenuComponent() {\n return this.charrueLayoutConfig.subMenu;\n },\n },\n};\n</script>\n","<template>\n <div class=\"charrue-sidebar-root\">\n <div class=\"charrue-sidebar-placeholder\" :style=\"{ width }\"></div>\n <div\n class=\"charrue-sidebar-inner\"\n :style=\"{ width, position: absolute ? 'absolute' : 'fixed' }\"\n >\n <div v-if=\"logo || title\" class=\"charrue-logo-container\">\n <router-link :to=\"homeUrl\" class=\"menu-router-link\">\n <img v-if=\"logo\" :src=\"logo\" alt=\"logo\" />\n <h1 v-if=\"title\">{{ title }}</h1>\n </router-link>\n </div>\n <slot name=\"sidebar-top\"></slot>\n <el-menu\n class=\"charrue-sidebar-menu-root\"\n mode=\"vertical\"\n unique-opened\n :collapse=\"collapsed\"\n :default-active=\"activeRoutePath\"\n :default-openeds=\"openKeys\"\n >\n <sidebar-item\n v-for=\"item in computedMenuData\"\n :key=\"item.path\"\n :route=\"route\"\n :menu-item=\"item\"\n ></sidebar-item>\n </el-menu>\n <slot name=\"sidebar-bottom\"></slot>\n </div>\n </div>\n</template>\n\n<script>\nimport {\n urlToList,\n menuDataFormatter,\n getMenuDataPathMapping,\n isFunction,\n} from \"./utils\";\nimport { pathToRegexp } from \"path-to-regexp\";\nimport SidebarItem from \"./SidebarItem.vue\";\n\nexport default {\n name: \"GlobalAside\",\n components: {\n SidebarItem,\n },\n props: {\n // 导航菜单数据源\n data: {\n type: Array,\n default() {\n return [];\n },\n },\n // 控制菜单的收起和展开\n collapsed: {\n type: Boolean,\n default: false,\n },\n // 侧边栏的左上角的logo的url\n logo: String,\n // 导航菜单标题区域的标题文字\n title: String,\n // 是否启用路由模式\n route: {\n type: Boolean,\n default: true,\n },\n // 是否将侧边栏设置为position: absolute, 使得可以相对于其他容器进行定位\n absolute: {\n type: Boolean,\n default: false,\n },\n // 控制导航菜单的展示\n // ({ menu, index, deep, path, parent }) => AsideMenuData[]\n authorized: Function,\n // 设置导航菜单折叠、展开时的宽度\n sidebarWidth: {\n type: Array,\n default() {\n return [54, 200];\n },\n },\n // 设置多路由对应一个菜单项,匹配模式参考 path-to-regexp\n regexToPath: {\n type: Object,\n },\n homeUrl: {\n type: String,\n default: \"/\",\n },\n },\n data() {\n return {\n openKeys: [],\n activeRoutePath: \"\",\n menuData: [],\n menuDataPathMapping: {},\n };\n },\n computed: {\n width() {\n return this.collapsed\n ? `${this.sidebarWidth[0]}px`\n : `${this.sidebarWidth[1]}px`;\n },\n computedMenuData() {\n const menuData = [];\n this.menuData.forEach((menu, index) => {\n const formattedMenu = this.formatMenuData({\n menu,\n index,\n deep: 0,\n path: menu.path,\n parent: null,\n });\n if (formattedMenu) {\n menuData.push(formattedMenu);\n }\n });\n\n return menuData;\n },\n },\n watch: {\n data: {\n handler() {\n this.filterAsideMenuData();\n },\n immediate: true,\n deep: true,\n },\n },\n created() {\n if (this.route) {\n this.$watch(\n \"$route.path\",\n (currentRoute) => {\n const matchedRegex = this.regexToPath\n ? Object.keys(this.regexToPath).find((reg) =>\n pathToRegexp(reg).test(currentRoute)\n )\n : null;\n\n if (matchedRegex) {\n this.activeRoutePath = this.regexToPath[matchedRegex];\n } else {\n this.activeRoutePath = currentRoute;\n }\n\n // 菜单栏展开项包括当前url,以及由当前url所解析出来的父级url\n const openKeys = urlToList(this.activeRoutePath);\n const currentRouteMenuData =\n this.menuDataPathMapping[this.activeRoutePath];\n if (currentRouteMenuData && currentRouteMenuData.parentPath) {\n // 查找到当前菜单项的父级,将父级的path segments添加到openKeys中\n urlToList(currentRouteMenuData.parentPath).forEach((path) => {\n if (!openKeys.includes(path)) {\n openKeys.push(path);\n }\n });\n }\n this.openKeys = openKeys;\n },\n {\n immediate: true,\n }\n );\n }\n },\n methods: {\n filterAsideMenuData() {\n const _menuData = this.data\n .filter((t) => t.title && !t.hide)\n .map((t) => {\n if (this.authorized && this.authorized(t.authority, t)) {\n return t;\n }\n return t;\n })\n .filter((t) => !!t);\n\n this.menuData = menuDataFormatter(_menuData);\n this.menuDataPathMapping = getMenuDataPathMapping(this.menuData);\n },\n /**\n * @private\n * 对菜单数据进行格式化\n */\n _formatMenuData({ menu, deep, index, path, parent } = {}) {\n const menuCopy = menu ? { ...menu } : {};\n if (!this.authorized) return menuCopy;\n if (\n isFunction(this.authorized) &&\n !this.authorized({ menu: menuCopy, deep, index, path, parent })\n ) {\n return false;\n }\n\n menuCopy.children = menuCopy.children || [];\n if (Array.isArray(menuCopy.children) && menuCopy.children.length > 0) {\n menuCopy.children = menuCopy.children\n .map((child) => {\n const currentPath = path.startsWith(\"/\")\n ? child.path\n : `${path}/${child.path}`;\n return this._formatMenuData({\n menu: child,\n deep: deep + 1,\n index,\n path: currentPath,\n parent: menuCopy,\n });\n })\n .filter((t) => t);\n }\n\n return menuCopy;\n },\n formatMenuData({ menu, deep, index, path, parent } = {}) {\n const menuCopy = menu ? { ...menu } : {};\n if (!this.authorized) return menuCopy;\n if (\n isFunction(this.authorized) &&\n !this.authorized({ menu: menuCopy, deep, index, path, parent })\n ) {\n return false;\n }\n\n menuCopy.children = menuCopy.children || [];\n if (Array.isArray(menuCopy.children) && menuCopy.children.length > 0) {\n menuCopy.children = menuCopy.children\n .map((child) => {\n const currentPath = path.startsWith(\"/\")\n ? child.path\n : `${path}/${child.path}`;\n return this.formatMenuData({\n menu: child,\n deep: deep + 1,\n index,\n path: currentPath,\n parent: menuCopy,\n });\n })\n .filter((t) => t);\n }\n\n return menuCopy;\n },\n },\n};\n</script>\n","<template>\n <section class=\"charrue-content\">\n <div class=\"charrue-content-header\">\n <slot name=\"content-header\"></slot>\n </div>\n <div class=\"charrue-content-body\">\n <template v-if=\"animation\">\n <transition name=\"fade-transform\" mode=\"out-in\">\n <slot name=\"content\"></slot>\n </transition>\n </template>\n <template v-else>\n <slot name=\"content\"></slot>\n </template>\n </div>\n <div class=\"charrue-content-footer\">\n <slot name=\"content-footer\"></slot>\n </div>\n </section>\n</template>\n\n<script>\nexport default {\n name: \"LayoutContent\",\n props: {\n animation: {\n type: Boolean,\n default: true,\n },\n },\n};\n</script>\n","<template>\n <div class=\"charrue-layout-trigger\" @click=\"toggleClick\">\n <svg\n :class=\"{ 'is-active': isActive }\"\n class=\"charrue-layout-default-trigger\"\n viewBox=\"0 0 1024 1024\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"64\"\n height=\"64\"\n >\n <path\n d=\"M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z\"\n />\n </svg>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"HamburgerTrigger\",\n props: {\n isActive: {\n type: Boolean,\n default: false,\n },\n },\n emits: [\"toggle-click\"],\n methods: {\n toggleClick() {\n this.$emit(\"toggle-click\", this.isActive);\n },\n },\n};\n</script>\n","<template>\n <div\n class=\"charrue-layout\"\n :class=\"[\n collapsed ? 'charrue-layout--collapsed' : 'charrue-layout--opened',\n ]\"\n >\n <layout-sidebar\n :collapsed=\"innerCollapse\"\n :data=\"data\"\n :logo=\"logo\"\n :title=\"title\"\n :route=\"route\"\n :absolute=\"absolute\"\n :authorized=\"authorized\"\n :sidebar-width=\"sidebarWidth\"\n :home-url=\"homeUrl\"\n :regex-to-path=\"regexToPath\"\n >\n <template #sidebar-top>\n <slot name=\"sidebar-top\"></slot>\n </template>\n <template #sidebar-bottom>\n <slot name=\"sidebar-bottom\"></slot>\n </template>\n </layout-sidebar>\n\n <div class=\"charrue-layout-body\" :style=\"mainWidthStyle\">\n <div\n class=\"charrue-header\"\n :class=\"{ 'fixed-header': fixedHeader }\"\n :style=\"headerWidthStyle\"\n >\n <div class=\"charrue-header-inner\">\n <div class=\"charrue-header-left\">\n <slot name=\"header-left\">\n <hamburger @toggle-click=\"toggleSideBar\" />\n </slot>\n </div>\n <div class=\"charrue-header-right\">\n <slot name=\"header-right\"></slot>\n </div>\n </div>\n </div>\n\n <layout-content :animation=\"animation\">\n <template #content-header>\n <slot name=\"content-header\"></slot>\n </template>\n <template #content>\n <slot></slot>\n </template>\n <template #content-footer>\n <slot name=\"content-footer\"></slot>\n </template>\n </layout-content>\n </div>\n </div>\n</template>\n\n<script>\nimport LayoutSidebar from \"./LayoutSidebar.vue\";\nimport LayoutContent from \"./LayoutContent.vue\";\nimport Hamburger from \"./Hamburger.vue\";\n\nexport default {\n name: \"CharrueLayout\",\n components: {\n LayoutSidebar,\n LayoutContent,\n Hamburger,\n },\n props: {\n collapsed: {\n type: Boolean,\n default: false,\n },\n fixedHeader: {\n type: Boolean,\n default: true,\n },\n data: {\n type: Array,\n required: true,\n default() {\n return [];\n },\n },\n logo: String,\n title: String,\n sidebarWidth: {\n type: Array,\n default() {\n return [54, 200];\n },\n },\n animation: {\n type: Boolean,\n default: true,\n },\n absolute: {\n type: Boolean,\n default: false,\n },\n route: {\n type: Boolean,\n default: true,\n },\n authorized: Function,\n homeUrl: {\n type: String,\n default: \"/\",\n },\n // 设置多路由对应一个菜单项,匹配模式参考 path-to-regexp\n regexToPath: {\n type: Object,\n },\n },\n emits: [\"update:collapsed\"],\n data() {\n return {\n innerCollapse: false,\n };\n },\n computed: {\n mainWidthStyle() {\n return {\n width: `calc(100% - ${\n this.collapsed ? this.sidebarWidth[0] : this.sidebarWidth[1]\n }px)`,\n };\n },\n headerWidthStyle() {\n let width = \"100%\";\n if (this.fixedHeader) {\n width = `calc(100% - ${\n this.collapsed ? this.sidebarWidth[0] : this.sidebarWidth[1]\n }px)`;\n }\n\n return {\n width,\n };\n },\n },\n watch: {\n collapsed: {\n handler(val) {\n this.innerCollapse = val;\n },\n immediate: true,\n },\n innerCollapse(val) {\n this.$emit(\"update:collapsed\", val);\n },\n },\n methods: {\n toggleSideBar() {\n this.innerCollapse = !this.innerCollapse;\n },\n },\n};\n</script>\n","import _Layout from \"./Layout.vue\";\n\nexport default {\n install(Vue) {\n const version = Vue.version.charAt(0);\n if (version === \"2\") {\n Vue.prototype.charrueLayoutConfig = {\n subMenu: \"el-submenu\",\n };\n Vue.component(_Layout.name, _Layout);\n } else {\n Vue.config.globalProperties.charrueLayoutConfig = {\n subMenu: \"el-sub-menu\",\n };\n Vue.component(_Layout.name, _Layout);\n }\n },\n};\n\nexport const Layout = _Layout;\n","import Plugins, { Layout as _Layout } from \"@charrue/layout-internal\";\n\nexport const Layout = _Layout;\nexport default Plugins;\n"],"names":["__defProp","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues","__vue_script__","script","__vue_render__","Layout","_Layout"],"mappings":"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