@veltra/desktop 1.2.4 → 1.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/auto-complete/auto-complete.js +25 -13
- package/dist/components/auto-complete/auto-complete.js.map +1 -1
- package/dist/components/auto-complete/auto-complete.vue.d.ts +3 -2
- package/dist/components/batch-edit/batch-edit-form.js +33 -26
- package/dist/components/batch-edit/batch-edit-form.js.map +1 -1
- package/dist/components/batch-edit/batch-edit-list.js +4 -1
- package/dist/components/batch-edit/batch-edit-list.js.map +1 -1
- package/dist/components/batch-edit/batch-edit.js +29 -50
- package/dist/components/batch-edit/batch-edit.js.map +1 -1
- package/dist/components/batch-edit/batch-edit.vue.d.ts +3 -3
- package/dist/components/batch-edit/di.js.map +1 -1
- package/dist/components/batch-edit/style2.css +3 -0
- package/dist/components/batch-edit/use-edit.js +39 -71
- package/dist/components/batch-edit/use-edit.js.map +1 -1
- package/dist/components/batch-edit/use-features.js +38 -0
- package/dist/components/batch-edit/use-features.js.map +1 -0
- package/dist/components/cascade/cascade.vue.d.ts +1 -1
- package/dist/components/contextmenu/style2.css +7 -7
- package/dist/components/dual-nav/dual-nav-app.js +70 -0
- package/dist/components/dual-nav/dual-nav-app.js.map +1 -0
- package/dist/components/dual-nav/dual-nav.js +128 -0
- package/dist/components/dual-nav/dual-nav.js.map +1 -0
- package/dist/components/dual-nav/dual-nav.vue.d.ts +13 -0
- package/dist/components/dual-nav/helper.js +21 -0
- package/dist/components/dual-nav/helper.js.map +1 -0
- package/dist/components/dual-nav/index.d.ts +1 -0
- package/dist/components/dual-nav/style.js +5 -0
- package/dist/components/dual-nav/style2.css +174 -0
- package/dist/components/index.d.ts +23 -22
- package/dist/components/index.js +28 -26
- package/dist/components/index.js.map +1 -1
- package/dist/components/loading/loading.js +1 -1
- package/dist/components/loading/loading.js.map +1 -1
- package/dist/components/loading/style2.css +61 -81
- package/dist/components/nav/di.js +7 -0
- package/dist/components/nav/di.js.map +1 -0
- package/dist/components/nav/helper.js +18 -0
- package/dist/components/nav/helper.js.map +1 -0
- package/dist/components/nav/index.d.ts +3 -0
- package/dist/components/{menu/menu-icon.js → nav/nav-icon.js} +4 -4
- package/dist/components/nav/nav-icon.js.map +1 -0
- package/dist/components/{menu/menu-item-collapsed.js → nav/nav-item-collapsed.js} +23 -23
- package/dist/components/nav/nav-item-collapsed.js.map +1 -0
- package/dist/components/{menu/menu-item.js → nav/nav-item.js} +13 -13
- package/dist/components/nav/nav-item.js.map +1 -0
- package/dist/components/{menu/menu-item.vue.d.ts → nav/nav-item.vue.d.ts} +4 -4
- package/dist/components/{menu/menu-sub-collapsed.js → nav/nav-sub-collapsed.js} +19 -19
- package/dist/components/nav/nav-sub-collapsed.js.map +1 -0
- package/dist/components/{menu/menu-sub.js → nav/nav-sub.js} +24 -24
- package/dist/components/nav/nav-sub.js.map +1 -0
- package/dist/components/{menu/menu-sub.vue.d.ts → nav/nav-sub.vue.d.ts} +4 -4
- package/dist/components/{menu/menu.js → nav/nav.js} +45 -36
- package/dist/components/nav/nav.js.map +1 -0
- package/dist/components/nav/nav.vue.d.ts +18 -0
- package/dist/components/nav/style.d.ts +1 -0
- package/dist/components/{menu → nav}/style2.css +105 -105
- package/dist/components/{menu/use-menu-item.js → nav/use-nav-item.js} +11 -11
- package/dist/components/nav/use-nav-item.js.map +1 -0
- package/dist/components/{menu/walk-menu-path.js → nav/walk-nav-path.js} +5 -5
- package/dist/components/nav/walk-nav-path.js.map +1 -0
- package/dist/components/number/number.vue.d.ts +1 -1
- package/dist/components/select/style2.css +4 -4
- package/dist/components/steps/steps.vue.d.ts +2 -2
- package/dist/components/tabs/tabs-horizontal.vue.d.ts +2 -2
- package/dist/components/tabs/tabs-vertical.vue.d.ts +2 -2
- package/dist/components/tabs/tabs.vue.d.ts +2 -2
- package/dist/components/watermark/watermark.vue.d.ts +1 -1
- package/dist/index.d.ts +63 -61
- package/dist/index.js +56 -55
- package/dist/style.js +2 -1
- package/dist/types/auto-complete.d.ts +6 -1
- package/dist/types/batch-edit.d.ts +15 -2
- package/dist/types/dual-nav.d.ts +27 -0
- package/dist/types/index.d.ts +4 -3
- package/dist/types/loading.d.ts +1 -1
- package/dist/types/nav.d.ts +48 -0
- package/package.json +6 -6
- package/src/components/auto-complete/auto-complete.vue +24 -13
- package/src/components/batch-edit/batch-edit-form.vue +29 -18
- package/src/components/batch-edit/batch-edit-list.vue +6 -1
- package/src/components/batch-edit/batch-edit.vue +36 -73
- package/src/components/batch-edit/di.ts +3 -1
- package/src/components/batch-edit/style.scss +5 -0
- package/src/components/batch-edit/use-edit.ts +63 -116
- package/src/components/batch-edit/use-features.ts +58 -0
- package/src/components/contextmenu/style.scss +5 -5
- package/src/components/dual-nav/dual-nav-app.vue +61 -0
- package/src/components/dual-nav/dual-nav.vue +156 -0
- package/src/components/dual-nav/helper.ts +25 -0
- package/src/components/dual-nav/index.ts +1 -0
- package/src/components/dual-nav/style.scss +188 -0
- package/src/components/dual-nav/style.ts +5 -0
- package/src/components/index.ts +3 -1
- package/src/components/loading/loading.vue +1 -1
- package/src/components/loading/style.scss +68 -104
- package/src/components/nav/di.ts +17 -0
- package/src/components/nav/helper.ts +22 -0
- package/src/components/nav/index.ts +3 -0
- package/src/components/{menu/menu-icon.vue → nav/nav-icon.vue} +1 -1
- package/src/components/nav/nav-item-collapsed.vue +66 -0
- package/src/components/nav/nav-item.vue +36 -0
- package/src/components/{menu/menu-sub-collapsed.vue → nav/nav-sub-collapsed.vue} +15 -15
- package/src/components/{menu/menu-sub.vue → nav/nav-sub.vue} +19 -19
- package/src/components/{menu/menu.vue → nav/nav.vue} +42 -42
- package/src/components/{menu → nav}/style.scss +16 -14
- package/src/components/{menu/use-menu-item.ts → nav/use-nav-item.ts} +14 -14
- package/src/components/{menu/walk-menu-path.ts → nav/walk-nav-path.ts} +2 -2
- package/src/components/select/style.scss +4 -4
- package/src/style.ts +2 -1
- package/src/types/auto-complete.ts +6 -1
- package/src/types/batch-edit.ts +18 -1
- package/src/types/dual-nav.ts +28 -0
- package/src/types/index.ts +2 -1
- package/src/types/loading.ts +1 -1
- package/src/types/nav.ts +49 -0
- package/dist/components/menu/di.js +0 -7
- package/dist/components/menu/di.js.map +0 -1
- package/dist/components/menu/helper.js +0 -8
- package/dist/components/menu/helper.js.map +0 -1
- package/dist/components/menu/index.d.ts +0 -3
- package/dist/components/menu/menu-icon.js.map +0 -1
- package/dist/components/menu/menu-item-collapsed.js.map +0 -1
- package/dist/components/menu/menu-item.js.map +0 -1
- package/dist/components/menu/menu-sub-collapsed.js.map +0 -1
- package/dist/components/menu/menu-sub.js.map +0 -1
- package/dist/components/menu/menu.js.map +0 -1
- package/dist/components/menu/menu.vue.d.ts +0 -14
- package/dist/components/menu/use-menu-item.js.map +0 -1
- package/dist/components/menu/walk-menu-path.js.map +0 -1
- package/dist/types/menu.d.ts +0 -40
- package/src/components/menu/di.ts +0 -17
- package/src/components/menu/helper.ts +0 -3
- package/src/components/menu/index.ts +0 -3
- package/src/components/menu/menu-item-collapsed.vue +0 -66
- package/src/components/menu/menu-item.vue +0 -36
- package/src/components/menu/menu-node.ts +0 -6
- package/src/types/menu.ts +0 -41
- /package/dist/components/{menu → dual-nav}/style.d.ts +0 -0
- /package/dist/components/{menu → nav}/style.js +0 -0
- /package/src/components/{menu → nav}/style.ts +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"helper.js","names":[],"sources":["../../../src/components/menu/helper.ts"],"sourcesContent":["export function getKey(index: number, parentKey: string): string {\n return `${parentKey}-${index}`\n}\n"],"mappings":";AAAA,SAAgB,OAAO,OAAe,WAA2B;CAC/D,OAAO,GAAG,UAAU,GAAG;AACzB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"menu-icon.js","names":[],"sources":["../../../src/components/menu/menu-icon.vue"],"sourcesContent":["<template>\n <u-icon v-if=\"typeof icon !== 'string'\">\n <component :is=\"icon\" />\n </u-icon>\n\n <img :src=\"icon\" v-else alt=\"icon\" />\n</template>\n\n<script lang=\"ts\" setup>\nimport type { DefineComponent } from 'vue'\n\nimport { UIcon } from '../icon'\n\ndefineOptions({ name: 'MenuIcon' })\n\ndefineProps<{ icon: string | DefineComponent }>()\n</script>\n"],"mappings":";;;;;;;;;;iBACuB,QAAA,SAAI,YAAA,UAAA,GAAzB,YAES,MAAA,WAAA,GAAA,EAAA,KAAA,EAAA,GAAA;2BADiB,EAAA,UAAA,GAAxB,YAAwB,wBAAR,QAAA,IAAI,CAAA,EAAA,CAAA;;uBAGtB,mBAAqC,OAAA;;IAA/B,KAAK,QAAA;IAAa,KAAI"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"menu-item-collapsed.js","names":[],"sources":["../../../src/components/menu/menu-item-collapsed.vue"],"sourcesContent":["<template>\n <!-- 一级菜单 -->\n <u-tip v-if=\"depth === 0\" direction=\"right\" hide-arrow>\n <li\n :class=\"[\n collapsedCls.e('item'),\n bem.is('active', active),\n bem.is('first-level'),\n bem.is('disabled', menu.disabled ?? false)\n ]\"\n ref=\"item\"\n @click=\"handleClickMenu\"\n >\n <UMenuIcon v-if=\"menu.icon\" :icon=\"menu.icon\" :class=\"collapsedCls.e('icon')\" />\n <span v-else>{{ menu.title[0] }}</span>\n </li>\n\n <template #content>\n {{ menu.title }}\n </template>\n </u-tip>\n\n <!-- 二级以及二级以下菜单 -->\n <li\n v-else\n :class=\"[\n collapsedCls.e('item'),\n bem.is('active', active),\n bem.is('disabled', menu.disabled ?? false)\n ]\"\n ref=\"item\"\n @click=\"_handleClickMenu\"\n >\n <UMenuIcon v-if=\"menu.icon\" :icon=\"menu.icon\" :class=\"collapsedCls.e('icon')\" />\n\n <!-- 文本 -->\n <span :class=\"collapsedCls.e('item-title')\">\n {{ menu.title }}\n </span>\n </li>\n</template>\n\n<script setup lang=\"ts\">\nimport { bem } from '@veltra/utils'\nimport { useTemplateRef } from 'vue'\n\nimport type { MenuItem } from '../../types'\nimport { UTip } from '../tip'\nimport UMenuIcon from './menu-icon.vue'\nimport { useMenuItem } from './use-menu-item'\n\ndefineOptions({ name: 'MenuItemCollapsed' })\n\nconst props = defineProps<{ menu: MenuItem; depth: number }>()\n\nconst itemRef = useTemplateRef('item')\n\nconst emit = defineEmits(['click'])\n\nconst { collapsedCls, active, handleClickMenu } = useMenuItem({ itemProps: props, itemRef })\n\nfunction _handleClickMenu() {\n handleClickMenu()\n emit('click')\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;EAqDA,MAAM,QAAQ;EAEd,MAAM,UAAU,eAAe,MAAM;EAErC,MAAM,OAAO;EAEb,MAAM,EAAE,cAAc,QAAQ,oBAAoB,YAAY;GAAE,WAAW;GAAO;EAAQ,CAAC;EAE3F,SAAS,mBAAmB;GAC1B,gBAAgB;GAChB,KAAK,OAAO;EACd;;2DA/DE,mBAAA,QAAA,GACa,QAAA,UAAK,KAAA,UAAA,GAAlB,YAkBQ,MAAA,WAAA,GAAA;;IAlBkB,WAAU;IAAQ,cAAA;;IAe/B,SAAO,cACA,CAAA,gBAAA,gBAAb,QAAA,KAAK,KAAK,GAAA,CAAA,CAAA,CAAA;2BAHV,CAZL,mBAYK,MAAA;KAXF,OAAK,eAAA;MAAY,MAAA,YAAA,EAAa,EAAC,MAAA;MAAkB,MAAA,GAAA,EAAI,GAAE,UAAW,MAAA,MAAA,CAAM;MAAW,MAAA,GAAA,EAAI,GAAE,aAAA;MAAyB,MAAA,GAAA,EAAI,GAAE,YAAa,QAAA,KAAK,YAAQ,KAAA;;KAMnJ,KAAI;KACH,SAAK,OAAA,OAAA,OAAA,MAAA,GAAA,SAAE,MAAA,eAAA,KAAA,MAAA,eAAA,EAAA,GAAA,IAAA;QAES,QAAA,KAAK,QAAA,UAAA,GAAtB,YAAgF,aAAA;;KAAnD,MAAM,QAAA,KAAK;KAAO,OAAK,eAAE,MAAA,YAAA,EAAa,EAAC,MAAA,CAAA;oDACpE,mBAAuC,QAAA,YAAA,gBAAvB,QAAA,KAAK,MAAK,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,CAAA,CAAA;;uBAS9B,mBAgBK,UAAA,EAAA,KAAA,EAAA,GAAA,CAjBL,mBAAA,cAAA,GACA,mBAgBK,MAAA;IAdF,OAAK,eAAA;KAAU,MAAA,YAAA,EAAa,EAAC,MAAA;KAAgB,MAAA,GAAA,EAAI,GAAE,UAAW,MAAA,MAAA,CAAM;KAAS,MAAA,GAAA,EAAI,GAAE,YAAa,QAAA,KAAK,YAAQ,KAAA;;IAK9G,KAAI;IACH,SAAO;;IAES,QAAA,KAAK,QAAA,UAAA,GAAtB,YAAgF,aAAA;;KAAnD,MAAM,QAAA,KAAK;KAAO,OAAK,eAAE,MAAA,YAAA,EAAa,EAAC,MAAA,CAAA;;IAEpE,mBAAA,MAAA;IACA,mBAEO,QAAA,EAFA,OAAK,eAAE,MAAA,YAAA,EAAa,EAAC,YAAA,CAAA,EAAA,GAAA,gBACvB,QAAA,KAAK,KAAK,GAAA,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"menu-item.js","names":[],"sources":["../../../src/components/menu/menu-item.vue"],"sourcesContent":["<template>\n <li\n :class=\"[\n cls.e('item'),\n bem.is('first-level', depth === 0),\n bem.is('active', active),\n bem.is('disabled', menu.disabled ?? false)\n ]\"\n ref=\"item\"\n @click=\"handleClickMenu\"\n >\n <MenuIcon v-if=\"menu.icon\" :icon=\"menu.icon\" :class=\"cls.e('icon')\" />\n\n <!-- 文本 -->\n <span :class=\"cls.e('item-title')\">\n {{ menu.title }}\n </span>\n </li>\n</template>\n\n<script setup lang=\"ts\">\nimport { bem } from '@veltra/utils'\nimport { useTemplateRef } from 'vue'\n\nimport type { MenuItem } from '../../types'\nimport MenuIcon from './menu-icon.vue'\nimport { useMenuItem } from './use-menu-item'\n\ndefineOptions({ name: 'MenuItem' })\n\nconst props = defineProps<{ menu: MenuItem; depth: number }>()\n\nconst itemRef = useTemplateRef('item')\n\nconst { cls, active, handleClickMenu } = useMenuItem({ itemProps: props, itemRef })\n</script>\n"],"mappings":";;;;;;;;;;;;;EAkCA,MAAM,EAAE,KAAK,QAAQ,oBAAoB,YAAY;GAAE,WAAW;GAAO,SAFzD,eAAe,MAE0C;EAAQ,CAAC;;uBAjChF,mBAgBK,MAAA;IAfF,OAAK,eAAA;KAAU,MAAA,GAAA,EAAI,EAAC,MAAA;KAAgB,MAAA,GAAA,EAAI,GAAE,eAAgB,QAAA,UAAK,CAAA;KAAe,MAAA,GAAA,EAAI,GAAE,UAAW,MAAA,MAAA,CAAM;KAAS,MAAA,GAAA,EAAI,GAAE,YAAa,QAAA,KAAK,YAAQ,KAAA;;IAM/I,KAAI;IACH,SAAK,OAAA,OAAA,OAAA,MAAA,GAAA,SAAE,MAAA,eAAA,KAAA,MAAA,eAAA,EAAA,GAAA,IAAA;;IAEQ,QAAA,KAAK,QAAA,UAAA,GAArB,YAAsE,aAAA;;KAA1C,MAAM,QAAA,KAAK;KAAO,OAAK,eAAE,MAAA,GAAA,EAAI,EAAC,MAAA,CAAA;;IAE1D,mBAAA,MAAA;IACA,mBAEO,QAAA,EAFA,OAAK,eAAE,MAAA,GAAA,EAAI,EAAC,YAAA,CAAA,EAAA,GAAA,gBACd,QAAA,KAAK,KAAK,GAAA,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"menu-sub-collapsed.js","names":[],"sources":["../../../src/components/menu/menu-sub-collapsed.vue"],"sourcesContent":["<template>\n <u-tip\n hide-arrow\n direction=\"right\"\n alignment=\"start\"\n :class=\"[collapsedCls.m(size), collapsedCls.e('panel')]\"\n style=\"padding: 0\"\n v-model:visible=\"visible\"\n >\n <li :class=\"[collapsedCls.e('sub-content'), bem.is('first-level', depth === 0)]\">\n <MenuIcon v-if=\"menu.icon\" :icon=\"menu.icon\" :class=\"collapsedCls.e('icon')\" />\n\n <span v-else>{{ menu.title[0] }}</span>\n\n <template v-if=\"depth !== 0\">\n <span :class=\"collapsedCls.e('sub-title')\">\n {{ menu.title }}\n </span>\n\n <!-- 展开图标 -->\n <u-icon :class=\"[collapsedCls.e('sub-expand')]\">\n <ArrowRight />\n </u-icon>\n </template>\n </li>\n\n <template #content>\n <u-scroll tag=\"ul\" :class=\"collapsedCls.e('sub-list')\">\n <template v-for=\"(child, index) of menu.children!\" :key=\"getKey(index, parentKey)\">\n <UMenuItemCollapsed\n v-if=\"!child.children?.length\"\n :menu=\"child\"\n :depth=\"depth + 1\"\n @click=\"closeSubMenu\"\n />\n\n <MenuSubCollapsed\n v-else\n :menu=\"child\"\n :parent-key=\"getKey(index, parentKey)\"\n :depth=\"depth + 1\"\n />\n </template>\n </u-scroll>\n </template>\n </u-tip>\n</template>\n\n<script setup lang=\"ts\">\nimport { ArrowRight } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { inject, ref } from 'vue'\n\nimport type { MenuItem } from '../../types'\nimport { UIcon } from '../icon'\nimport { UScroll } from '../scroll'\nimport { UTip } from '../tip'\nimport { MenuDIKey } from './di'\nimport { getKey } from './helper'\nimport MenuIcon from './menu-icon.vue'\nimport UMenuItemCollapsed from './menu-item-collapsed.vue'\n\ndefineOptions({ name: 'MenuSubCollapsed' })\n\ndefineProps<{ menu: MenuItem; parentKey: string; depth: number }>()\n\nconst visible = ref(false)\n\nfunction closeSubMenu() {\n visible.value = false\n}\n\nconst { collapsedCls, size } = inject(MenuDIKey)!\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAkEA,MAAM,UAAU,IAAI,KAAK;EAEzB,SAAS,eAAe;GACtB,QAAQ,QAAQ;EAClB;EAEA,MAAM,EAAE,cAAc,SAAS,OAAO,SAAS;;;uBAvE7C,YA4CQ,MAAA,WAAA,GAAA;IA3CN,cAAA;IACA,WAAU;IACV,WAAU;IACT,OAAK,eAAA,CAAG,MAAA,YAAA,EAAa,EAAE,MAAA,IAAA,CAAI,GAAG,MAAA,YAAA,EAAa,EAAC,OAAA,CAAA,CAAA;IAC7C,OAAA,EAAA,WAAA,IAAA;IACQ,SAAS,QAAA;8DAAA,QAAO,QAAA;;IAmBb,SAAO,cAiBL,CAhBX,YAgBW,MAAA,WAAA,GAAA;KAhBD,KAAI;KAAM,OAAK,eAAE,MAAA,YAAA,EAAa,EAAC,UAAA,CAAA;;4BACW,EAAA,UAAA,IAAA,GAAlD,mBAcW,UAAA,MAAA,WAdwB,QAAA,KAAK,WAAtB,OAAO,UAAK;8DAA2B,MAAA,MAAA,EAAO,OAAO,QAAA,SAAS,EAAA,GAAA,CAAA,CAErE,MAAM,UAAU,UAAA,UAAA,GADzB,YAKE,aAAA;;OAHC,MAAM;OACN,OAAO,QAAA,QAAK;OACZ,SAAO;sDAGV,YAKE,6BAAA;;OAHC,MAAM;OACN,cAAY,MAAA,MAAA,EAAO,OAAO,QAAA,SAAS;OACnC,OAAO,QAAA,QAAK;;;;;;;;;2BAhBhB,CAfL,mBAeK,MAAA,EAfA,OAAK,eAAA,CAAG,MAAA,YAAA,EAAa,EAAC,aAAA,GAAiB,MAAA,GAAA,EAAI,GAAE,eAAgB,QAAA,UAAK,CAAA,CAAA,CAAA,EAAA,GAAA,CACrD,QAAA,KAAK,QAAA,UAAA,GAArB,YAA+E,aAAA;;KAAnD,MAAM,QAAA,KAAK;KAAO,OAAK,eAAE,MAAA,YAAA,EAAa,EAAC,MAAA,CAAA;oDAEnE,mBAAuC,QAAA,YAAA,gBAAvB,QAAA,KAAK,MAAK,EAAA,GAAA,CAAA,IAEV,QAAA,UAAK,KAAA,UAAA,GAArB,mBASW,UAAA,EAAA,KAAA,EAAA,GAAA;KART,mBAEO,QAAA,EAFA,OAAK,eAAE,MAAA,YAAA,EAAa,EAAC,WAAA,CAAA,EAAA,GAAA,gBACvB,QAAA,KAAK,KAAK,GAAA,CAAA;KAGf,mBAAA,QAAA;KACA,YAES,MAAA,WAAA,GAAA,EAFA,OAAK,eAAA,CAAG,MAAA,YAAA,EAAa,EAAC,YAAA,CAAA,CAAA,EAAA,GAAA;6BACf,CAAd,YAAc,MAAA,UAAA,CAAA,CAAA,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"menu-sub.js","names":[],"sources":["../../../src/components/menu/menu-sub.vue"],"sourcesContent":["<template>\n <li :class=\"[cls.e('sub'), bem.is('expanded', expanded)]\">\n <div\n :class=\"[\n cls.e('sub-content'),\n bem.is('first-level', depth === 0),\n bem.is('expanded', expanded),\n bem.is('branch-active', branchActive)\n ]\"\n @click=\"handleToggleExpand\"\n >\n <UMenuIcon v-if=\"menu.icon\" :icon=\"menu.icon\" :class=\"cls.e('icon')\" />\n\n <!-- 文本 -->\n <span :class=\"cls.e('sub-title')\">\n {{ menu.title }}\n </span>\n\n <!-- 展开图标 -->\n <u-icon :class=\"[cls.e('sub-expand'), bem.is('expanded', expanded)]\">\n <ArrowRight />\n </u-icon>\n </div>\n\n <!-- @vue-ignore -->\n <transition\n @enter=\"(el: Element) => expandTransition.enter(el as HTMLElement)\"\n @after-enter=\"(el: Element) => expandTransition.afterEnter(el as HTMLElement)\"\n @before-leave=\"(el: Element) => expandTransition.beforeLeave(el as HTMLElement)\"\n @leave=\"(el: Element) => expandTransition.leave(el as HTMLElement)\"\n @after-leave=\"(el: Element) => expandTransition.afterLeave(el as HTMLElement)\"\n >\n <ul :class=\"cls.e('sub-list')\" v-show=\"expanded\">\n <template v-for=\"(child, index) of menu.children!\" :key=\"getKey(index, parentKey)\">\n <UMenuItem v-if=\"!child.children?.length\" :menu=\"child\" :depth=\"depth + 1\" />\n <MenuSub v-else :menu=\"child\" :parent-key=\"getKey(index, parentKey)\" :depth=\"depth + 1\" />\n </template>\n </ul>\n </transition>\n </li>\n</template>\n\n<script setup lang=\"ts\">\nimport { ArrowRight } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { computed, inject } from 'vue'\n\nimport type { MenuItem } from '../../types'\nimport { UIcon } from '../icon'\nimport { MenuDIKey } from './di'\nimport { getKey } from './helper'\nimport UMenuIcon from './menu-icon.vue'\nimport UMenuItem from './menu-item.vue'\n\ndefineOptions({ name: 'MenuSub' })\n\nconst props = defineProps<{ menu: MenuItem; parentKey: string; depth: number }>()\n\nconst { cls, expandedPath, menuProps, expandTransition } = inject(MenuDIKey)!\n\nconst expanded = computed(() => expandedPath.has(props.menu.path))\n\nconst branchActive = computed(() => {\n const currentPath = menuProps.currentPath\n if (!currentPath) return false\n\n const check = (items?: MenuItem[]) => {\n return items?.some((item) => item.path === currentPath || check(item.children)) ?? false\n }\n\n return check(props.menu.children)\n})\n\nfunction handleToggleExpand() {\n const { menu } = props\n expandedPath.has(menu.path) ? expandedPath.delete(menu.path) : expandedPath.add(menu.path)\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAwDA,MAAM,QAAQ;EAEd,MAAM,EAAE,KAAK,cAAc,WAAW,qBAAqB,OAAO,SAAS;EAE3E,MAAM,WAAW,eAAe,aAAa,IAAI,MAAM,KAAK,IAAI,CAAC;EAEjE,MAAM,eAAe,eAAe;GAClC,MAAM,cAAc,UAAU;GAC9B,IAAI,CAAC,aAAa,OAAO;GAEzB,MAAM,SAAS,UAAuB;IACpC,OAAO,OAAO,MAAM,SAAS,KAAK,SAAS,eAAe,MAAM,KAAK,QAAQ,CAAC,KAAK;GACrF;GAEA,OAAO,MAAM,MAAM,KAAK,QAAQ;EAClC,CAAC;EAED,SAAS,qBAAqB;GAC5B,MAAM,EAAE,SAAS;GACjB,aAAa,IAAI,KAAK,IAAI,IAAI,aAAa,OAAO,KAAK,IAAI,IAAI,aAAa,IAAI,KAAK,IAAI;EAC3F;;;uBA3EE,mBAsCK,MAAA,EAtCA,OAAK,eAAA,CAAG,MAAA,GAAA,EAAI,EAAC,KAAA,GAAS,MAAA,GAAA,EAAI,GAAE,YAAa,SAAA,KAAQ,CAAA,CAAA,EAAA,GAAA;IACpD,mBAoBM,OAAA;KAnBH,OAAK,eAAA;MAAY,MAAA,GAAA,EAAI,EAAC,aAAA;MAAyB,MAAA,GAAA,EAAI,GAAE,eAAgB,QAAA,UAAK,CAAA;MAAiB,MAAA,GAAA,EAAI,GAAE,YAAa,SAAA,KAAQ;MAAW,MAAA,GAAA,EAAI,GAAE,iBAAkB,aAAA,KAAY;;KAMrK,SAAO;;KAES,QAAA,KAAK,QAAA,UAAA,GAAtB,YAAuE,aAAA;;MAA1C,MAAM,QAAA,KAAK;MAAO,OAAK,eAAE,MAAA,GAAA,EAAI,EAAC,MAAA,CAAA;;KAE3D,mBAAA,MAAA;KACA,mBAEO,QAAA,EAFA,OAAK,eAAE,MAAA,GAAA,EAAI,EAAC,WAAA,CAAA,EAAA,GAAA,gBACd,QAAA,KAAK,KAAK,GAAA,CAAA;KAGf,mBAAA,QAAA;KACA,YAES,MAAA,WAAA,GAAA,EAFA,OAAK,eAAA,CAAG,MAAA,GAAA,EAAI,EAAC,YAAA,GAAgB,MAAA,GAAA,EAAI,GAAE,YAAa,SAAA,KAAQ,CAAA,CAAA,EAAA,GAAA;6BACjD,CAAd,YAAc,MAAA,UAAA,CAAA,CAAA,CAAA;;;;IAIlB,mBAAA,eAAA;IACA,YAaa,YAAA;KAZV,SAAK,OAAA,OAAA,OAAA,MAAG,OAAgB,MAAA,gBAAA,EAAiB,MAAM,EAAE;KACjD,cAAW,OAAA,OAAA,OAAA,MAAG,OAAgB,MAAA,gBAAA,EAAiB,WAAW,EAAE;KAC5D,eAAY,OAAA,OAAA,OAAA,MAAG,OAAgB,MAAA,gBAAA,EAAiB,YAAY,EAAE;KAC9D,SAAK,OAAA,OAAA,OAAA,MAAG,OAAgB,MAAA,gBAAA,EAAiB,MAAM,EAAE;KACjD,cAAW,OAAA,OAAA,OAAA,MAAG,OAAgB,MAAA,gBAAA,EAAiB,WAAW,EAAE;KAL/D,WAAA;;4BAYO,CAAA,eALL,mBAKK,MAAA,EALA,OAAK,eAAE,MAAA,GAAA,EAAI,EAAC,UAAA,CAAA,EAAA,GAAA,EAAA,UAAA,IAAA,GACf,mBAGW,UAAA,MAAA,WAHwB,QAAA,KAAK,WAAtB,OAAO,UAAK;8DAA2B,MAAA,MAAA,EAAO,OAAO,QAAA,SAAS,EAAA,GAAA,CAAA,CAC5D,MAAM,UAAU,UAAA,UAAA,GAAlC,YAA6E,aAAA;;OAAlC,MAAM;OAAQ,OAAO,QAAA,QAAK;sDACrE,YAA0F,oBAAA;;OAAzE,MAAM;OAAQ,cAAY,MAAA,MAAA,EAAO,OAAO,QAAA,SAAS;OAAI,OAAO,QAAA,QAAK;;;;;;8BAH/C,SAAA,KAAQ,CAAA,CAAA,CAAA,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"menu.js","names":[],"sources":["../../../src/components/menu/menu.vue"],"sourcesContent":["<template>\n <u-scroll\n tag=\"ul\"\n :class=\"[menuCls.b, menuCls.m(size)]\"\n :container-class=\"menuCls.e('container')\"\n >\n <!-- 常规 -->\n <template v-if=\"!collapsed\">\n <template v-for=\"(menu, index) of menus\" :key=\"index\">\n <UMenuSub\n v-if=\"menu.children?.length\"\n :menu=\"menu\"\n :parent-key=\"String(index)\"\n :depth=\"0\"\n />\n <UMenuItem v-else :menu=\"menu\" :key=\"index\" :depth=\"0\" />\n </template>\n </template>\n\n <!-- 折叠 -->\n <template v-else>\n <template v-for=\"(menu, index) of menus\" :key=\"index\">\n <UMenuSubCollapsed\n v-if=\"menu.children?.length\"\n :menu=\"menu\"\n :parent-key=\"String(index)\"\n :depth=\"0\"\n />\n <UMenuItemCollapsed v-else :menu=\"menu\" :key=\"index\" :depth=\"0\" />\n </template>\n </template>\n </u-scroll>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps } from '@veltra/compositions'\nimport { bem, ExpandTransition } from '@veltra/utils'\nimport { computed, provide, shallowReactive, watch } from 'vue'\n\nimport type { MenuEmits, MenuProps, ComponentSize } from '../../types'\nimport { UScroll } from '../scroll'\nimport { MenuDIKey } from './di'\nimport UMenuItemCollapsed from './menu-item-collapsed.vue'\nimport UMenuItem from './menu-item.vue'\nimport UMenuSubCollapsed from './menu-sub-collapsed.vue'\nimport UMenuSub from './menu-sub.vue'\nimport { walkMenuWithPath } from './walk-menu-path'\n\ndefineOptions({ name: 'Menu' })\n\nconst props = withDefaults(defineProps<MenuProps>(), {\n expand: false,\n activeIndex: '',\n collapsed: false,\n uniqueOpened: false\n})\n\nconst emit = defineEmits<MenuEmits>()\n\nconst cls = bem('menu')\nconst collapsedCls = bem('collapsed-menu')\n\nconst menuCls = computed(() => {\n return props.collapsed ? collapsedCls : cls\n})\n\nconst expandTransition = new ExpandTransition({\n enterTransition:\n 'height 0.25s cubic-bezier(0.4, 0, 0.2, 1), padding-top 0.25s cubic-bezier(0.4, 0, 0.2, 1), padding-bottom 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.18s cubic-bezier(0.4, 0, 0.2, 1)',\n leaveTransition:\n 'height 0.2s cubic-bezier(0.4, 0, 1, 1), padding-top 0.2s cubic-bezier(0.4, 0, 1, 1), padding-bottom 0.2s cubic-bezier(0.4, 0, 1, 1), opacity 0.12s cubic-bezier(0.4, 0, 1, 1)',\n opacity: true\n})\n\nconst { size } = useFallbackProps([props], { size: 'default' as ComponentSize })\n\nconst expandedPath = shallowReactive(new Set<string>())\n\nwatch(\n [() => props.currentPath, () => props.menus],\n ([currentPath, menus]) => {\n if (!currentPath || !menus) return\n menus.forEach((menu) => {\n walkMenuWithPath(menu, (node, nodePath) => {\n if (node.path === currentPath) {\n nodePath.slice(0, -1).forEach((path) => {\n expandedPath.add(path.path)\n })\n return false\n }\n })\n })\n },\n { immediate: true }\n)\n\nprovide(MenuDIKey, {\n cls,\n collapsedCls,\n menuProps: props,\n menuEmit: emit,\n expandedPath,\n size,\n expandTransition\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkDA,MAAM,QAAQ;EAOd,MAAM,OAAO;EAEb,MAAM,MAAM,IAAI,MAAM;EACtB,MAAM,eAAe,IAAI,gBAAgB;EAEzC,MAAM,UAAU,eAAe;GAC7B,OAAO,MAAM,YAAY,eAAe;EAC1C,CAAC;EAED,MAAM,mBAAmB,IAAI,iBAAiB;GAC5C,iBACE;GACF,iBACE;GACF,SAAS;EACX,CAAC;EAED,MAAM,EAAE,SAAS,iBAAiB,CAAC,KAAK,GAAG,EAAE,MAAM,UAA2B,CAAC;EAE/E,MAAM,eAAe,gCAAgB,IAAI,IAAY,CAAC;EAEtD,MACE,OAAO,MAAM,mBAAmB,MAAM,KAAK,IAC1C,CAAC,aAAa,WAAW;GACxB,IAAI,CAAC,eAAe,CAAC,OAAO;GAC5B,MAAM,SAAS,SAAS;IACtB,iBAAiB,OAAO,MAAM,aAAa;KACzC,IAAI,KAAK,SAAS,aAAa;MAC7B,SAAS,MAAM,GAAG,EAAE,EAAE,SAAS,SAAS;OACtC,aAAa,IAAI,KAAK,IAAI;MAC5B,CAAC;MACD,OAAO;KACT;IACF,CAAC;GACH,CAAC;EACH,GACA,EAAE,WAAW,KAAK,CACpB;EAEA,QAAQ,WAAW;GACjB;GACA;GACA,WAAW;GACX,UAAU;GACV;GACA;GACA;EACF,CAAC;;uBAvGC,YA8BW,MAAA,WAAA,GAAA;IA7BT,KAAI;IACH,OAAK,eAAA,CAAG,QAAA,MAAQ,GAAG,QAAA,MAAQ,EAAE,MAAA,IAAA,CAAI,CAAA,CAAA;IACjC,mBAAiB,QAAA,MAAQ,EAAC,WAAA;;2BAEhB,CAAX,mBAAA,MAAA,GAAA,CACiB,QAAA,aAAA,UAAA,IAAA,GACf,mBAQW,UAAA,EAAA,KAAA,EAAA,GAAA,WARuB,QAAA,QAAhB,MAAM,UAAK;6DAAkB,MAAK,GAAA,CAE1C,KAAK,UAAU,UAAA,UAAA,GADvB,YAKE,aAAA;;MAHO;MACN,cAAY,OAAO,KAAK;MACxB,OAAO;0DAEV,YAAyD,aAAA;MAAhC;MAAO,KAAK;MAAQ,OAAO;;8BAKxD,mBAUW,UAAA,EAAA,KAAA,EAAA,GAAA,CAXX,mBAAA,MAAA,IAAA,UAAA,IAAA,GAEE,mBAQW,UAAA,MAAA,WARuB,QAAA,QAAhB,MAAM,UAAK;6DAAkB,MAAK,GAAA,CAE1C,KAAK,UAAU,UAAA,UAAA,GADvB,YAKE,aAAA;;MAHO;MACN,cAAY,OAAO,KAAK;MACxB,OAAO;0DAEV,YAAkE,aAAA;MAAhC;MAAO,KAAK;MAAQ,OAAO"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { MenuItem, MenuProps } from "../../types/menu.js";
|
|
2
|
-
//#region src/components/menu/menu.vue.d.ts
|
|
3
|
-
declare const __VLS_export: import("vue").DefineComponent<MenuProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
4
|
-
"item-click": (item: MenuItem) => any;
|
|
5
|
-
}, string, import("vue").PublicProps, Readonly<MenuProps> & Readonly<{
|
|
6
|
-
"onItem-click"?: ((item: MenuItem) => any) | undefined;
|
|
7
|
-
}>, {
|
|
8
|
-
collapsed: boolean;
|
|
9
|
-
uniqueOpened: boolean;
|
|
10
|
-
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
11
|
-
declare const _default: typeof __VLS_export;
|
|
12
|
-
//#endregion
|
|
13
|
-
export { _default };
|
|
14
|
-
//# sourceMappingURL=menu.vue.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-menu-item.js","names":[],"sources":["../../../src/components/menu/use-menu-item.ts"],"sourcesContent":["import { scrollIntoContainerView, type BEM } from '@veltra/utils'\nimport { computed, inject, watch, type ShallowRef, type ComputedRef } from 'vue'\n\nimport type { MenuItem } from '../../types'\nimport { MenuDIKey } from './di'\n\ninterface Options {\n itemProps: { menu: MenuItem; depth: number }\n itemRef: ShallowRef<HTMLElement | null>\n}\n\ninterface UseMenuItemReturned {\n cls: BEM<'menu'>\n collapsedCls: BEM<'collapsed-menu'>\n\n active: ComputedRef<boolean>\n handleClickMenu: () => void\n}\n\nexport function useMenuItem(options: Options): UseMenuItemReturned {\n const { itemProps, itemRef } = options\n const { cls, collapsedCls, menuProps, menuEmit } = inject(MenuDIKey)!\n\n const active = computed(() => {\n return menuProps.currentPath === itemProps.menu.path\n })\n\n let changedByClick = false\n watch([active, itemRef], ([active, itemEl]) => {\n if (changedByClick) {\n changedByClick = false\n return\n }\n if (!active || !itemEl) return\n scrollIntoContainerView(itemEl, null)\n })\n\n function handleClickMenu() {\n if (itemProps.menu.disabled) return\n changedByClick = true\n menuEmit('item-click', itemProps.menu)\n }\n\n return {\n cls,\n collapsedCls,\n\n active,\n handleClickMenu\n }\n}\n"],"mappings":";;;;AAmBA,SAAgB,YAAY,SAAuC;CACjE,MAAM,EAAE,WAAW,YAAY;CAC/B,MAAM,EAAE,KAAK,cAAc,WAAW,aAAa,OAAO,SAAS;CAEnE,MAAM,SAAS,eAAe;EAC5B,OAAO,UAAU,gBAAgB,UAAU,KAAK;CAClD,CAAC;CAED,IAAI,iBAAiB;CACrB,MAAM,CAAC,QAAQ,OAAO,IAAI,CAAC,QAAQ,YAAY;EAC7C,IAAI,gBAAgB;GAClB,iBAAiB;GACjB;EACF;EACA,IAAI,CAAC,UAAU,CAAC,QAAQ;EACxB,wBAAwB,QAAQ,IAAI;CACtC,CAAC;CAED,SAAS,kBAAkB;EACzB,IAAI,UAAU,KAAK,UAAU;EAC7B,iBAAiB;EACjB,SAAS,cAAc,UAAU,IAAI;CACvC;CAEA,OAAO;EACL;EACA;EAEA;EACA;CACF;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"walk-menu-path.js","names":[],"sources":["../../../src/components/menu/walk-menu-path.ts"],"sourcesContent":["/**\n * 深度优先 + 路径;回调返回 `false` 时剪枝当前节点子树(不中断兄弟)。\n * `@cat-kit/core` 的 `dfs` 在返回 `true` 时会终止整段遍历,语义不同,故保留此辅助。\n */\nexport function walkMenuWithPath<T extends Record<string, unknown>>(\n data: T,\n cb: (node: T, path: T[]) => void | false,\n childrenKey = 'children',\n prefix: T[] = []\n): void {\n const path = [...prefix, data]\n if (cb(data, path) === false) return\n const raw = data[childrenKey]\n if (!Array.isArray(raw)) return\n for (let i = 0; i < raw.length; i++) {\n walkMenuWithPath(raw[i] as T, cb, childrenKey, path)\n }\n}\n"],"mappings":";;;;;AAIA,SAAgB,iBACd,MACA,IACA,cAAc,YACd,SAAc,CAAC,GACT;CACN,MAAM,OAAO,CAAC,GAAG,QAAQ,IAAI;CAC7B,IAAI,GAAG,MAAM,IAAI,MAAM,OAAO;CAC9B,MAAM,MAAM,KAAK;CACjB,IAAI,CAAC,MAAM,QAAQ,GAAG,GAAG;CACzB,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAC9B,iBAAiB,IAAI,IAAS,IAAI,aAAa,IAAI;AAEvD"}
|
package/dist/types/menu.d.ts
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { DefineComponent } from "vue";
|
|
2
|
-
import { DeconstructValue } from "@veltra/utils";
|
|
3
|
-
|
|
4
|
-
//#region src/types/menu.d.ts
|
|
5
|
-
/** 菜单项 */
|
|
6
|
-
interface MenuItem {
|
|
7
|
-
/** 图标 */
|
|
8
|
-
icon?: string | DefineComponent;
|
|
9
|
-
/** 菜单标题 */
|
|
10
|
-
title: string;
|
|
11
|
-
/** 菜单路径 */
|
|
12
|
-
path: string;
|
|
13
|
-
/** 是否禁用 */
|
|
14
|
-
disabled?: boolean;
|
|
15
|
-
/** 子菜单 */
|
|
16
|
-
children?: MenuItem[];
|
|
17
|
-
[key: string]: any;
|
|
18
|
-
}
|
|
19
|
-
/** 菜单组件组件属性 */
|
|
20
|
-
interface MenuProps {
|
|
21
|
-
/** 当前路径 */
|
|
22
|
-
currentPath?: string;
|
|
23
|
-
/** 是否折叠 */
|
|
24
|
-
collapsed?: boolean;
|
|
25
|
-
/** 仅允许一个菜单可以打开 */
|
|
26
|
-
uniqueOpened?: boolean;
|
|
27
|
-
/** 菜单列表 */
|
|
28
|
-
menus?: MenuItem[];
|
|
29
|
-
}
|
|
30
|
-
/** 菜单组件组件定义的事件 */
|
|
31
|
-
interface MenuEmits {
|
|
32
|
-
(e: 'item-click', item: MenuItem): void;
|
|
33
|
-
}
|
|
34
|
-
/** 菜单组件组件暴露的属性和方法(组件内部使用) */
|
|
35
|
-
interface _MenuExposed {}
|
|
36
|
-
/** 菜单组件组件暴露的属性和方法(组件外部使用, 引用的值会被自动解构) */
|
|
37
|
-
type MenuExposed = DeconstructValue<_MenuExposed>;
|
|
38
|
-
//#endregion
|
|
39
|
-
export { MenuEmits, MenuExposed, MenuItem, MenuProps, _MenuExposed };
|
|
40
|
-
//# sourceMappingURL=menu.d.ts.map
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { type BEM, ExpandTransition } from '@veltra/utils'
|
|
2
|
-
import type { ComputedRef, InjectionKey } from 'vue'
|
|
3
|
-
|
|
4
|
-
import type { MenuProps, MenuEmits } from '../../types'
|
|
5
|
-
import type { ComponentSize } from '../../types'
|
|
6
|
-
|
|
7
|
-
export interface MenuContext {
|
|
8
|
-
cls: BEM<'menu', 'u-'>
|
|
9
|
-
collapsedCls: BEM<'collapsed-menu', 'u-'>
|
|
10
|
-
menuProps: MenuProps
|
|
11
|
-
menuEmit: MenuEmits
|
|
12
|
-
expandedPath: Set<string>
|
|
13
|
-
size: ComputedRef<ComponentSize>
|
|
14
|
-
expandTransition: ExpandTransition
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export const MenuDIKey: InjectionKey<MenuContext> = Symbol('MenuDIKey')
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<!-- 一级菜单 -->
|
|
3
|
-
<u-tip v-if="depth === 0" direction="right" hide-arrow>
|
|
4
|
-
<li
|
|
5
|
-
:class="[
|
|
6
|
-
collapsedCls.e('item'),
|
|
7
|
-
bem.is('active', active),
|
|
8
|
-
bem.is('first-level'),
|
|
9
|
-
bem.is('disabled', menu.disabled ?? false)
|
|
10
|
-
]"
|
|
11
|
-
ref="item"
|
|
12
|
-
@click="handleClickMenu"
|
|
13
|
-
>
|
|
14
|
-
<UMenuIcon v-if="menu.icon" :icon="menu.icon" :class="collapsedCls.e('icon')" />
|
|
15
|
-
<span v-else>{{ menu.title[0] }}</span>
|
|
16
|
-
</li>
|
|
17
|
-
|
|
18
|
-
<template #content>
|
|
19
|
-
{{ menu.title }}
|
|
20
|
-
</template>
|
|
21
|
-
</u-tip>
|
|
22
|
-
|
|
23
|
-
<!-- 二级以及二级以下菜单 -->
|
|
24
|
-
<li
|
|
25
|
-
v-else
|
|
26
|
-
:class="[
|
|
27
|
-
collapsedCls.e('item'),
|
|
28
|
-
bem.is('active', active),
|
|
29
|
-
bem.is('disabled', menu.disabled ?? false)
|
|
30
|
-
]"
|
|
31
|
-
ref="item"
|
|
32
|
-
@click="_handleClickMenu"
|
|
33
|
-
>
|
|
34
|
-
<UMenuIcon v-if="menu.icon" :icon="menu.icon" :class="collapsedCls.e('icon')" />
|
|
35
|
-
|
|
36
|
-
<!-- 文本 -->
|
|
37
|
-
<span :class="collapsedCls.e('item-title')">
|
|
38
|
-
{{ menu.title }}
|
|
39
|
-
</span>
|
|
40
|
-
</li>
|
|
41
|
-
</template>
|
|
42
|
-
|
|
43
|
-
<script setup lang="ts">
|
|
44
|
-
import { bem } from '@veltra/utils'
|
|
45
|
-
import { useTemplateRef } from 'vue'
|
|
46
|
-
|
|
47
|
-
import type { MenuItem } from '../../types'
|
|
48
|
-
import { UTip } from '../tip'
|
|
49
|
-
import UMenuIcon from './menu-icon.vue'
|
|
50
|
-
import { useMenuItem } from './use-menu-item'
|
|
51
|
-
|
|
52
|
-
defineOptions({ name: 'MenuItemCollapsed' })
|
|
53
|
-
|
|
54
|
-
const props = defineProps<{ menu: MenuItem; depth: number }>()
|
|
55
|
-
|
|
56
|
-
const itemRef = useTemplateRef('item')
|
|
57
|
-
|
|
58
|
-
const emit = defineEmits(['click'])
|
|
59
|
-
|
|
60
|
-
const { collapsedCls, active, handleClickMenu } = useMenuItem({ itemProps: props, itemRef })
|
|
61
|
-
|
|
62
|
-
function _handleClickMenu() {
|
|
63
|
-
handleClickMenu()
|
|
64
|
-
emit('click')
|
|
65
|
-
}
|
|
66
|
-
</script>
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<li
|
|
3
|
-
:class="[
|
|
4
|
-
cls.e('item'),
|
|
5
|
-
bem.is('first-level', depth === 0),
|
|
6
|
-
bem.is('active', active),
|
|
7
|
-
bem.is('disabled', menu.disabled ?? false)
|
|
8
|
-
]"
|
|
9
|
-
ref="item"
|
|
10
|
-
@click="handleClickMenu"
|
|
11
|
-
>
|
|
12
|
-
<MenuIcon v-if="menu.icon" :icon="menu.icon" :class="cls.e('icon')" />
|
|
13
|
-
|
|
14
|
-
<!-- 文本 -->
|
|
15
|
-
<span :class="cls.e('item-title')">
|
|
16
|
-
{{ menu.title }}
|
|
17
|
-
</span>
|
|
18
|
-
</li>
|
|
19
|
-
</template>
|
|
20
|
-
|
|
21
|
-
<script setup lang="ts">
|
|
22
|
-
import { bem } from '@veltra/utils'
|
|
23
|
-
import { useTemplateRef } from 'vue'
|
|
24
|
-
|
|
25
|
-
import type { MenuItem } from '../../types'
|
|
26
|
-
import MenuIcon from './menu-icon.vue'
|
|
27
|
-
import { useMenuItem } from './use-menu-item'
|
|
28
|
-
|
|
29
|
-
defineOptions({ name: 'MenuItem' })
|
|
30
|
-
|
|
31
|
-
const props = defineProps<{ menu: MenuItem; depth: number }>()
|
|
32
|
-
|
|
33
|
-
const itemRef = useTemplateRef('item')
|
|
34
|
-
|
|
35
|
-
const { cls, active, handleClickMenu } = useMenuItem({ itemProps: props, itemRef })
|
|
36
|
-
</script>
|
package/src/types/menu.ts
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import type { DeconstructValue } from '@veltra/utils'
|
|
2
|
-
import type { DefineComponent } from 'vue'
|
|
3
|
-
|
|
4
|
-
/** 菜单项 */
|
|
5
|
-
export interface MenuItem {
|
|
6
|
-
/** 图标 */
|
|
7
|
-
icon?: string | DefineComponent
|
|
8
|
-
/** 菜单标题 */
|
|
9
|
-
title: string
|
|
10
|
-
/** 菜单路径 */
|
|
11
|
-
path: string
|
|
12
|
-
/** 是否禁用 */
|
|
13
|
-
disabled?: boolean
|
|
14
|
-
/** 子菜单 */
|
|
15
|
-
children?: MenuItem[]
|
|
16
|
-
|
|
17
|
-
[key: string]: any
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/** 菜单组件组件属性 */
|
|
21
|
-
export interface MenuProps {
|
|
22
|
-
/** 当前路径 */
|
|
23
|
-
currentPath?: string
|
|
24
|
-
/** 是否折叠 */
|
|
25
|
-
collapsed?: boolean
|
|
26
|
-
/** 仅允许一个菜单可以打开 */
|
|
27
|
-
uniqueOpened?: boolean
|
|
28
|
-
/** 菜单列表 */
|
|
29
|
-
menus?: MenuItem[]
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/** 菜单组件组件定义的事件 */
|
|
33
|
-
export interface MenuEmits {
|
|
34
|
-
(e: 'item-click', item: MenuItem): void
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/** 菜单组件组件暴露的属性和方法(组件内部使用) */
|
|
38
|
-
export interface _MenuExposed {}
|
|
39
|
-
|
|
40
|
-
/** 菜单组件组件暴露的属性和方法(组件外部使用, 引用的值会被自动解构) */
|
|
41
|
-
export type MenuExposed = DeconstructValue<_MenuExposed>
|
|
File without changes
|
|
File without changes
|
|
File without changes
|