song-ui-u
Version:
vue3 + js的PC前端组件库
1 lines • 7.79 kB
Source Map (JSON)
{"version":3,"file":"sub-menu.mjs","sources":["../../../../../packages/components/menu/src/sub-menu.jsx"],"sourcesContent":["// sub-menu.jsx\r\nimport { defineComponent, Transition, ref, inject, provide } from \"vue\";\r\nimport { useNamespace } from \"@ui-library/hook\";\r\nimport { XIcon } from \"@ui-library/components\";\r\nimport { ChevronRight, ChevronDown } from \"song-ui-pro-icon\";\r\nimport { MENU_KEY } from \"./constant\";\r\nimport { useMenu } from \"./hooks/use-menu\";\r\n\r\nexport default defineComponent({\r\n name: \"x-sub-menu\",\r\n\r\n props: {\r\n title: {\r\n type: String,\r\n default: \"\",\r\n },\r\n index: {\r\n type: String,\r\n default: \"\",\r\n },\r\n align: {\r\n type: String,\r\n default: \"left\", // 默认左对齐\r\n validator: (value) => [\"left\", \"right\"].includes(value),\r\n },\r\n },\r\n\r\n setup(props, { slots, emit }) {\r\n const ns = useNamespace(\"sub-menu\");\r\n const isOpen = ref(false);\r\n\r\n const { isActive, menuCtx } = useMenu();\r\n\r\n const timer = ref(null);\r\n const DELAY = 200;\r\n\r\n const mode = menuCtx.props?.mode;\r\n\r\n const clearTimer = () => {\r\n if (timer.value) {\r\n clearTimeout(timer.value);\r\n timer.value = null;\r\n }\r\n };\r\n\r\n const setOpenState = (state) => {\r\n if (mode === \"horizontal\") {\r\n clearTimer();\r\n timer.value = setTimeout(() => {\r\n isOpen.value = state;\r\n }, DELAY);\r\n } else {\r\n isOpen.value = state;\r\n }\r\n };\r\n\r\n const change = (e) => {\r\n // if (mode == \"horizontal\") return;\r\n e.stopPropagation();\r\n setOpenState(!isOpen.value);\r\n\r\n menuCtx.change(props.index);\r\n // 触发change事件\r\n };\r\n\r\n const handleMouseEnter = (e) => {\r\n if (mode !== \"horizontal\") return;\r\n e.stopPropagation();\r\n setOpenState(true);\r\n // 触发enter事件\r\n menuCtx.enter(props.index);\r\n };\r\n\r\n const handleMouseLeave = (e) => {\r\n if (mode !== \"horizontal\") return;\r\n e.stopPropagation();\r\n setOpenState(false);\r\n\r\n // 触发leave事件\r\n menuCtx.leave(props.index);\r\n };\r\n\r\n // 判断是否为嵌套子菜单\r\n const isNested = inject(\"isSubMenu\", false);\r\n\r\n // 为子组件提供标识\r\n provide(\"isSubMenu\", true);\r\n\r\n return () => (\r\n <li class={ns.b()}>\r\n <div\r\n class={[ns.e(\"title\"), ns.is(\"active\", isActive(props.index))]}\r\n onClick={change}\r\n onMouseenter={handleMouseEnter}\r\n onMouseleave={handleMouseLeave}\r\n >\r\n {props.title && <span>{props.title}</span>}\r\n\r\n {slots.title && !props.title && <span>{slots.title()}</span>}\r\n\r\n <XIcon\r\n class={[ns.e(\"icon\"), isOpen.value ? ns.m(\"icon\", \"open\") : \"\"]}\r\n >\r\n <ChevronRight />\r\n </XIcon>\r\n </div>\r\n <Transition name={ns.b()}>\r\n {isOpen.value && (\r\n <ul\r\n onMouseenter={handleMouseEnter}\r\n onMouseleave={handleMouseLeave}\r\n style={{\r\n backgroundColor: props.backgroundColor,\r\n }}\r\n class={[\r\n ns.e(\"menu\"),\r\n ns.is(\"nested\", isNested),\r\n ns.m(\"mode\", mode),\r\n ]}\r\n >\r\n {slots.default?.()}\r\n </ul>\r\n )}\r\n </Transition>\r\n </li>\r\n );\r\n },\r\n});\r\n"],"names":["name","props","title","type","String","default","index","align","validator","value","includes","setup","slots","emit","ns","useNamespace","isOpen","ref","isActive","menuCtx","useMenu","timer","DELAY","mode","clearTimer","clearTimeout","setOpenState","state","setTimeout","change","e","stopPropagation","handleMouseEnter","enter","handleMouseLeave","leave","isNested","inject","provide","_createVNode","b","is","XIcon","m","ChevronRight","Transition","backgroundColor"],"mappings":"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"}