UNPKG

vuux

Version:

Vue3 Nuxt3 Nuxt4 组件库

100 lines (99 loc) 2.76 kB
import { ref as g, onMounted as I } from "vue"; const A = (c, d) => { const o = g(c.value), s = g([]), f = (e, t = null, l = 0) => { const n = []; for (let i = 0; i < e.length; i++) { const a = e[i], r = { ...a, isSelect: !1, isOpen: !1, isIndeterminate: !1, parent: t, level: l, children: [] }; s.value.push(r), a[c.children]?.length && (r.children = f(a[c.children], r, l + 1)), n.push(r); } return n; }, S = () => { s.value = [], f(c.data); }, h = (e) => { if (!e?.parent) return; const t = [], l = e.parent.children ?? []; for (let a = 0; a < l.length; a++) { const r = l[a]; r && !r.disabled && t.push(r); } const n = t.length ? t.every((a) => a.isSelect) : !1, i = t.length ? t.some((a) => a.isSelect || a.isIndeterminate) : !1; e.parent.isSelect = n, e.parent.isIndeterminate = !n && i, h(e.parent); }, v = (e) => { if (!e) return; const t = (n, i) => { if (!n || i === void 0) return; n.isSelect = i, n.isIndeterminate = !1; const a = n.children ?? []; for (let r = 0; r < a.length; r++) { const u = a[r]; u && !u.disabled && t(u, i); } }; t(e, e.isSelect), h(e); const l = []; for (let n = 0; n < s.value.length; n++) { const i = s.value[n]; i && i.isSelect && (c.returnParentData || !i.children?.length) && l.push(i[o.value]); } d("update:modelValue", l); }, p = () => { for (let e = 0; e < s.value.length; e++) { const t = s.value[e]; t && (t.isSelect = !1, t.isIndeterminate = !1); } d("update:modelValue", []); }, m = (e) => { if (p(), e && Array.isArray(e) && e.length) for (let t = 0; t < s.value.length; t++) { const l = s.value[t]; l && e.includes(l[o.value]) && (l.isSelect = !0, v(l)); } }, k = (e) => { for (let t = 0; t < s.value.length; t++) s.value[t].isOpen = !1; for (const t of e) { let l = s.value.find((n) => n[o.value] === t); for (; l && (l.isOpen = !0, !!l.parent); ) l = l.parent; } }, y = () => { const e = c.modelValue ?? []; if (e.length) for (const t of e) { let l = s.value.find((n) => n[o.value] === t); for (; l && (l.isOpen = !0, !!l.parent); ) l = l.parent; } }, b = () => { for (let e = 0; e < s.value.length; e++) { const t = s.value[e]; t.isOpen = !1; } }; return I(() => { S(); }), { flatTreeData: s, nodeKey: o, setSelect: m, updateSelect: v, clearAllSelect: p, expandToSelected: y, expandByKeys: k, collapseAll: b }; }; export { A as useTree };