vuux
Version:
Vue3 Nuxt3 Nuxt4 组件库
2 lines (1 loc) • 1.91 kB
JavaScript
;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("vue"),O=(c,f)=>{const o=d.ref(c.value),s=d.ref([]),h=(e,t=null,l=0)=>{const n=[];for(let a=0;a<e.length;a++){const i=e[a],r={...i,isSelect:!1,isOpen:!1,isIndeterminate:!1,parent:t,level:l,children:[]};s.value.push(r),i[c.children]?.length&&(r.children=h(i[c.children],r,l+1)),n.push(r)}return n},S=()=>{s.value=[],h(c.data)},v=e=>{if(!e?.parent)return;const t=[],l=e.parent.children??[];for(let i=0;i<l.length;i++){const r=l[i];r&&!r.disabled&&t.push(r)}const n=t.length?t.every(i=>i.isSelect):!1,a=t.length?t.some(i=>i.isSelect||i.isIndeterminate):!1;e.parent.isSelect=n,e.parent.isIndeterminate=!n&&a,v(e.parent)},g=e=>{if(!e)return;const t=(n,a)=>{if(!n||a===void 0)return;n.isSelect=a,n.isIndeterminate=!1;const i=n.children??[];for(let r=0;r<i.length;r++){const u=i[r];u&&!u.disabled&&t(u,a)}};t(e,e.isSelect),v(e);const l=[];for(let n=0;n<s.value.length;n++){const a=s.value[n];a&&a.isSelect&&(c.returnParentData||!a.children?.length)&&l.push(a[o.value])}f("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)}f("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,g(l))}},y=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}},b=()=>{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}},k=()=>{for(let e=0;e<s.value.length;e++){const t=s.value[e];t.isOpen=!1}};return d.onMounted(()=>{S()}),{flatTreeData:s,nodeKey:o,setSelect:m,updateSelect:g,clearAllSelect:p,expandToSelected:b,expandByKeys:y,collapseAll:k}};exports.useTree=O;