vue-amazing-ui
Version:
An Amazing Vue3 UI Components Library, Using TypeScript.
2 lines (1 loc) • 4.36 kB
JavaScript
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const i=require("vue"),v=require("../select/index.cjs"),x=i.defineComponent({__name:"Cascader",props:{options:{default:()=>[]},label:{default:"label"},value:{default:"value"},children:{default:"children"},placeholder:{default:"请选择"},disabled:{type:[Boolean,Array],default:!1},width:{default:"auto"},height:{default:void 0},size:{default:"middle"},gap:{default:void 0},changeOnSelect:{type:Boolean,default:!1},allowClear:{type:Boolean,default:!1},search:{type:Boolean,default:!1},placement:{default:"bottom"},flip:{type:Boolean,default:!0},to:{type:[String,Boolean],default:"body"},filter:{type:[Function,Boolean],default:!0},maxDisplay:{default:6},scrollbarProps:{default:()=>({})},modelValue:{default:()=>[]}},emits:["update:modelValue","change"],setup(e,{emit:b}){const d=e,a=i.ref([]),r=i.ref([]),o=i.ref([]),f=i.ref([]),h=i.ref([]),c=b,y=i.computed(()=>{const l={small:4,middle:6,large:8};return d.gap!==void 0?`${d.gap}px`:`${l[d.size]}px`});i.watchEffect(()=>{o.value=[...d.options]}),i.watchEffect(()=>{a.value=[...d.modelValue]}),i.watchEffect(()=>{g(a.value),w(a.value)});function m(l,t){const u=l.length;for(let n=0;n<u;n++)if(l[n][d.value]===a.value[t])return l[n][d.children]||[];return[]}function g(l){f.value=m(o.value,0),h.value=[],l.length>1&&(h.value=m(f.value,1))}function s(l,t){const u=l.length;for(let n=0;n<u;n++)if(l[n][d.value]===a.value[t])return l[n][d.label];return a.value[t]}function w(l){r.value[0]=s(o.value,0),l.length>1&&(r.value[1]=s(f.value,1)),l.length>2&&(r.value[2]=s(h.value,2))}function A(l,t){d.changeOnSelect?(c("update:modelValue",[l]),c("change",[l],[t])):(a.value=[l],r.value=[t])}function V(l,t){d.changeOnSelect?(c("update:modelValue",[a.value[0],l]),c("change",[a.value[0],l],[r.value[0],t])):(a.value=[a.value[0],l],r.value=[r.value[0],t])}function C(l,t){c("update:modelValue",[...a.value.slice(0,2),l]),c("change",[...a.value.slice(0,2),l],[...r.value.slice(0,2),t])}return(l,t)=>(i.openBlock(),i.createElementBlock("div",{class:"cascader-wrap",style:i.normalizeStyle(`--cascader-select-gap: ${y.value};`)},[i.createVNode(i.unref(v.default),{options:o.value,label:e.label,value:e.value,placeholder:Array.isArray(e.placeholder)?e.placeholder[0]:e.placeholder,disabled:Array.isArray(e.disabled)?e.disabled[0]:e.disabled,width:Array.isArray(e.width)?e.width[0]:e.width,height:e.height,size:e.size,"allow-clear":e.allowClear,search:e.search,placement:e.placement,flip:e.flip,to:e.to,filter:e.filter,"max-display":e.maxDisplay,"scrollbar-props":e.scrollbarProps,modelValue:a.value[0],"onUpdate:modelValue":t[0]||(t[0]=u=>a.value[0]=u),onChange:A},null,8,["options","label","value","placeholder","disabled","width","height","size","allow-clear","search","placement","flip","to","filter","max-display","scrollbar-props","modelValue"]),i.createVNode(i.unref(v.default),{options:f.value,label:e.label,value:e.value,placeholder:Array.isArray(e.placeholder)?e.placeholder[1]:e.placeholder,disabled:Array.isArray(e.disabled)?e.disabled[1]:e.disabled,width:Array.isArray(e.width)?e.width[1]:e.width,height:e.height,size:e.size,"allow-clear":e.allowClear,search:e.search,placement:e.placement,flip:e.flip,to:e.to,filter:e.filter,"max-display":e.maxDisplay,"scrollbar-props":e.scrollbarProps,modelValue:a.value[1],"onUpdate:modelValue":t[1]||(t[1]=u=>a.value[1]=u),onChange:V},null,8,["options","label","value","placeholder","disabled","width","height","size","allow-clear","search","placement","flip","to","filter","max-display","scrollbar-props","modelValue"]),i.createVNode(i.unref(v.default),{options:h.value,label:e.label,value:e.value,placeholder:Array.isArray(e.placeholder)?e.placeholder[2]:e.placeholder,disabled:Array.isArray(e.disabled)?e.disabled[2]:e.disabled,width:Array.isArray(e.width)?e.width[2]:e.width,height:e.height,size:e.size,"allow-clear":e.allowClear,search:e.search,placement:e.placement,flip:e.flip,to:e.to,filter:e.filter,"max-display":e.maxDisplay,"scrollbar-props":e.scrollbarProps,modelValue:a.value[2],"onUpdate:modelValue":t[2]||(t[2]=u=>a.value[2]=u),onChange:C},null,8,["options","label","value","placeholder","disabled","width","height","size","allow-clear","search","placement","flip","to","filter","max-display","scrollbar-props","modelValue"])],4))}});exports.default=x;