vuux
Version:
Vue3 Nuxt3 Nuxt4 组件库
2 lines (1 loc) • 2.73 kB
JavaScript
;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("vue"),M=require("@vuux/utils"),w=(e,S,h)=>{const o=i.ref(!1),N=i.computed(()=>e.modelValue!=""&&e.modelValue!=null),O=()=>{e.disabled||(o.value=!o.value)},m=i.ref(!1),c=i.ref([]),D=i.computed(()=>({"app-cascader":!0,"is-opend":o.value,"is-disabled":e.disabled?e.disabled:!1,"has-content":N.value})),C=t=>{let l=0;if(e.fields){const d=(a,u)=>{for(let n=0;n<a.length;n++){const s=a[n];u>l&&(l=u),s[e.fields.children]&&s[e.fields.children].length>0&&d(s[e.fields.children],u+1)}};d(t,1)}return l},g=(t,l)=>{const d=[];if(e.fields)for(let a=0;a<t.length;a++){const u=t[a];d.push({value:u[e.fields.value],label:u[e.fields.label],children:u[e.fields.children]??!1,orginData:u})}return d},v=i.ref(),x=(t,l,d)=>{const a=t[d].data,u=t[d].selectIndex,n=a[u];n&&l.push(n),n&&n.children&&n.children.length>0&&x(t,l,d+1)},V=(t,l,d,a=null)=>{c.value[d].selectIndex=l,t.children&&t.children.length>0&&(c.value[d+1].selectIndex=null,c.value[d+1].data=g(t.children));const u=d+2;for(let n=u;n<c.value.length;n++)c.value[n].selectIndex=null,c.value[n].data=[];if(!t.children||t.children.length===0){const n=[];x(c.value,n,0);const s=n.map(f=>f.label).join(`${e.decollator}`);if(!e.last)v.value=s;else{const f=n.map(J=>J.label);v.value=f[f.length-1]}const r=n.map(f=>f.value).join(e.decollator);if(a==="click"&&(e.last?h("update:modelValue",r.split(e.decollator).at(-1)):h("update:modelValue",r.split(e.decollator)),o.value=!1),a==="click"&&m.value){const f={display:v.value,value:r,label:s,currentSelect:JSON.parse(JSON.stringify(t.orginData))};h("change",f)}}},k=(t,l)=>{const d=(a,u)=>{const n=[...u,a.value];if(a.value===l)return n;if(a.children)for(const s of a.children){const r=d(s,n);if(r)return r}return null};for(const a of t){const u=d(a,[]);if(u)return u}return[]},b=()=>{if(e.modelValue){let t=e.modelValue;typeof e.modelValue=="string"&&(t=k(e.data,e.modelValue));for(let l=0;l<t.length;l++){const d=t[l],a=c.value[l].data.findIndex(u=>u.value===d);if(a==-1)break;V(c.value[l].data[a],a,l)}}},y=()=>{const t=C(e.data);for(let l=0;l<t;l++)l==0?c.value[0]={selectIndex:null,data:g(e.data)}:c.value[l]={selectIndex:null,data:[]};b()},I=()=>{v.value="";const t=JSON.parse(JSON.stringify(c.value));for(let l=0;l<t.length;l++)t[l].selectIndex=null,l!==0&&(t[l].data=[]);c.value=t,h("update:modelValue",void 0)};return M.Utils.useClickOutside(S,()=>{e.disabled||(o.value=!1)}),i.watch(()=>e.data,()=>{y()}),i.watch(()=>e.modelValue,()=>{e.modelValue===null||e.modelValue===""?I():b()}),i.onMounted(()=>{y(),m.value=!0}),{openState:o,treeData:c,classNames:D,displayValue:v,handleOpen:O,handleSelectBar:V,handleClear:I}};exports.useCascader=w;