UNPKG

vuux

Version:

Vue3 Nuxt3 Nuxt4 组件库

47 lines (46 loc) 1.55 kB
import { inject as f, computed as i } from "vue"; import { Utils as h } from "@vuux/utils"; const k = (a, u) => { const n = f("menuContext"), l = i(() => n?.props.skey), d = i(() => n?.props.trigger === "hover" && n?.props.mode !== "vertical" && !h.isMobile), v = i(() => n?.props.mode === "horizontal"), r = (e, t) => { e.disabled || n?.onOpenKeys(e[l.value], t); }; let o = null; return { menuContext: n, onMouseenter: (e) => { if (e.children?.length && d.value) { o && (clearTimeout(o), o = null); for (let t = 0; t < a.data.length; t++) { const s = a.data[t]; n?.openKeys.value.includes(s[l.value]) && s !== e && n?.onOpenKeys(s[l.value], !1); } r(e, !0); } }, onMouseleave: (e) => { !e.children?.length || !d.value || (o = window.setTimeout(() => r(e, !1), 100)); }, handleClick: (e, t) => { if (t.stopPropagation(), !e.disabled) { o && (clearTimeout(o), o = null); for (let s = 0; s < a.data.length; s++) { const c = a.data[s]; if (n?.openKeys.value.includes(c[l.value]) && c !== e) { n?.onOpenKeys(c[l.value], !1); break; } } e.children?.length ? r(e, !n?.openKeys.value.includes(e[l.value])) : (n?.onSelectKey(e[l.value]), v.value && (n.openKeys.value = [])), u("select", e), u("change", e); } }, onSelect: (e) => { u("select", e); }, onChange: (e) => { u("change", e); } }; }; export { k as useItemMenu };