@farris/ui-vue
Version:
Farris Vue, a Farris Design based Vue3 component library.
2 lines (1 loc) • 33 kB
JavaScript
(function(V,l){typeof exports=="object"&&typeof module<"u"?l(exports,require("vue"),require("../button-edit/index.umd.js"),require("../locale/index.umd.js"),require("../dynamic-resolver/index.umd.js"),require("../list-view/index.umd.js"),require("lodash-es"),require("../common/index.umd.js"),require("bignumber.js"),require("../../designer/button-edit/index.umd.js"),require("../property-panel/index.umd.js"),require("../designer-canvas/index.umd.js")):typeof define=="function"&&define.amd?define(["exports","vue","../button-edit/index.umd.js","../locale/index.umd.js","../dynamic-resolver/index.umd.js","../list-view/index.umd.js","lodash-es","../common/index.umd.js","bignumber.js","../../designer/button-edit/index.umd.js","../property-panel/index.umd.js","../designer-canvas/index.umd.js"],l):(V=typeof globalThis<"u"?globalThis:V||self,l(V["combo-list"]={},V.Vue,V.FButtonEdit,V.locale,V.dynamicResolver,V.FListView,V.LodashES,V.common,V.BigNumber,V.FButtonEditDesign,V.propertyPanel,V.designerCanvas))})(this,function(V,l,D,j,N,ee,te,B,Ie,ne,ie,le){"use strict";const q=new Map([["appearance",N.resolveAppearance]]),U={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://farris-design.gitee.io/combo-list.schema.json",title:"combo-list",description:"A Farris Input Component",type:"object",properties:{id:{description:"The unique identifier for a combo list",type:"string"},type:{description:"The type string of number combo list component",type:"string",default:"combo-list"},appearance:{description:"",type:"object",properties:{class:{type:"string"},style:{type:"string"}},default:{}},binding:{description:"",type:"object",default:{}},disabled:{description:"",type:"boolean",default:!1},enableClear:{description:"",type:"boolean",default:!1},editable:{description:"",type:"boolean",default:!1},enableLinkLabel:{description:"",type:"boolean",default:!1},label:{description:"",type:"string",default:""},lableWidth:{description:"",type:"number"},placeholder:{description:"",type:"string",default:"请选择"},idField:{description:"",type:"string",default:"id"},valueField:{description:"",type:"string",default:"id"},titleField:{description:"",type:"string",default:"name"},textField:{description:"",type:"string",default:"name"},dataSourceType:{description:"",type:"string",default:"static"},data:{description:"",type:"array"},dataSource:{description:"",type:"string"},remote:{description:"",type:"string"},readonly:{description:"",type:"boolean",default:!1},required:{description:"",type:"boolean",default:!1},tabindex:{description:"",type:"number",default:-1},textAlign:{description:"",type:"string",enum:["left","middle","right"],default:"left"},multiSelect:{description:"",type:"boolean",default:!1},maxLength:{description:"",type:"number",default:null},visible:{description:"",type:"boolean",default:!0},onBlur:{description:"",type:"string",default:""},onClickLinkLabel:{description:"",type:"string",default:""},maxHeight:{description:"",type:"number",default:350},minPanelWidth:{description:"",type:"number",default:160},popupOnClick:{description:"",type:"boolean",default:!0},separator:{description:"",type:"string",default:","},viewType:{description:"",type:"string",default:"tag"},enableSearch:{description:"启用搜索",type:"boolean",default:!0},enableHighlightSearch:{description:"启用高亮搜索",type:"boolean",default:!1},beforeOpen:{description:"打开下拉面板前回调",type:"string"},beforeHide:{description:"关闭下拉面板前回调",type:"string"},onShown:{description:"面板打开事件",type:"string"},onHidden:{description:"面板关闭事件",type:"string"},onChange:{description:"值变化事件",type:"string",default:""},onInput:{description:"输入事件",type:"string",default:""},onClear:{description:"清空事件",type:"string",default:""},onDataChanged:{description:"清空事件",type:"string",default:""},hideDisabledItems:{description:"隐藏禁用项",type:"boolean",default:!1},expandable:{description:"",type:"boolean",default:!1},expandMode:{description:"",type:"string",default:"text"},expandContent:{description:"",type:"string",default:""},expandDisabled:{description:"",type:"boolean",default:!1},onExpandClick:{description:"",type:"string",default:""}},required:["type"],ignore:["id","appearance","binding","visible"],events:{onClear:"清空事件",onShown:"面板打开事件",onHidden:"面板关闭事件",onChange:"值变化事件",beforeOpen:"打开面板前事件",beforeHide:"关闭面板前事件"}};function G(e,t,o){return t}function ae(){function e(t,o,a){const s={};return s.beforeOpen=f=>o.call("beforeOpen",t,[f,t],a),s}return{resolve:e}}var Y=(e=>(e.top="top",e.bottom="bottom",e.auto="auto",e))(Y||{});const A={id:{type:String},data:{type:Array,default:[]},disabled:{default:!1,type:Boolean},dropDownIcon:{type:String,default:'<span class="f-icon f-icon-arrow-chevron-down"></span>'},editable:{default:!1,type:Boolean},enableClear:{default:!0,type:Boolean},enableSearch:{type:Boolean,default:!1},enableTitle:{default:!0,type:Boolean},fitEditor:{default:!1,type:Boolean},forcePlaceholder:{default:!1,type:Boolean},hidePanelOnClear:{default:!0,type:Boolean},idField:{default:"id",type:String},mapFields:{type:Object},maxHeight:{default:350,type:Number},maxLength:{type:Number},multiSelect:{type:Boolean,default:!1},modelValue:{type:String,default:""},placeholder:{type:String,default:"请选择"},placement:{type:String,default:"auto"},readonly:{default:!1,type:Boolean},remote:{default:null,type:Object},remoteSearch:{default:!1,type:Boolean},separator:{default:",",type:String},tabIndex:{type:Number,default:-1},textField:{default:"name",type:String},titleField:{default:"name",type:String},valueField:{default:"id",type:String},viewType:{default:"tag",type:String},change:{type:Function,default:()=>{}},focusOnCreated:{type:Boolean,default:!1},selectOnCreated:{type:Boolean,default:!1},autoHeight:{type:Boolean,default:!0},beforeOpen:{type:Function,default:null},load:{type:Function},searchOption:{type:[Boolean,Function],default:!1},enableHighlightSearch:{type:Boolean,default:!0},minPanelWidth:{type:Number,default:160},popupOnClick:{type:Boolean,default:!0},expandable:{type:Boolean,default:!1},expandMode:{type:String,default:"text"},expandContent:{type:String,default:""},expandDisabled:{type:Boolean,default:!1},popupClass:{type:String,default:""},hideDisabledItems:{type:Boolean,default:!1}},W=Object.assign({},A,{readonly:{}}),oe=N.createPropsResolver(A,U,q,G),R=N.getPropsResolverGenerator(A,U,q,G),_=ae(),de={dataSource:{type:Array,default:[]},enableSearch:{type:Boolean,default:!1},idField:{type:String,default:"id"},multiSelect:{type:Boolean,default:!1},selectedValues:{type:String,default:""},separator:{type:String,default:","},textField:{type:String,default:"name"},titleField:{type:String,default:"name"},width:{type:Number},maxHeight:{type:Number},valueField:{type:String,default:"id"},onSelectionChange:{type:Function,default:()=>{}},searchOption:{type:[Boolean,Function],default:!1},enableHighlightSearch:{type:Boolean,default:!0}},z=l.defineComponent({name:"FComboListContainer",props:de,emits:["selectionChange"],setup(e,t){const o=l.ref(),a=l.ref(e.dataSource),s=l.ref(e.dataSource),f=l.ref([]),d=l.ref(e.separator),w=l.ref(e.width),b=l.ref(e.maxHeight),v=l.computed(()=>e.multiSelect),y=l.ref(e.multiSelect?String(e.selectedValues).split(d.value):[e.selectedValues]),g=l.computed(()=>({enableSelectRow:!0,multiSelect:e.multiSelect,multiSelectMode:"OnCheckAndClick",showCheckbox:v.value,showSelectAll:!1,showSelection:!0}));l.watch(e.dataSource,()=>{a.value=e.dataSource,s.value=e.dataSource}),l.computed(()=>e.enableSearch?"SearchBar":"ContentHeader");const x=l.computed(()=>{const n={};return w.value!==void 0&&(n.width=`${w.value}px`),b.value!==void 0&&b.value>0&&(n.maxHeight=`${b.value}px`),n});function S(n){o.value.search(n)}function T(n){f.value=n.map(c=>Object.assign({},c)),y.value=n.map(c=>c[e.idField]),t.emit("selectionChange",f.value)}function P(n){if(e.enableHighlightSearch)return;let c=[];const{searchOption:m}=e;typeof m=="function"?c=a.value.filter(r=>m(n,r)):c=a.value.filter(r=>r[e.valueField].indexOf(n)>-1||r[e.textField].indexOf(n)>-1),o.value.updateDataSource(c)}l.watch([()=>e.selectedValues],([n])=>{e.multiSelect?y.value=n.split(d.value):y.value=[n]});function I(n){o.value.activeRowById(n)}return l.onMounted(()=>{var n,c;if(!e.multiSelect){const m=(n=y.value)==null?void 0:n[0];let r=m;const i=a.value.map(u=>u[e.valueField||e.idField]);if(!te.isUndefined(m)&&i.includes(m)){const u=typeof m,h=typeof((c=a.value[0])==null?void 0:c[e.valueField||e.idField]);h==="number"&&u!==h&&(r=Number(m)),h==="boolean"&&u!==h&&(r=m==="true"?!0:m==="false"?!1:m),I(r)}}}),t.expose({search:S,activeRowById:I}),()=>l.createVNode("div",{class:"f-combo-list-container",style:x.value},[l.createVNode(ee,{ref:o,size:"small",itemClass:"f-combo-list-item",itemContentClass:"text-truncate",header:"ContentHeader",headerClass:"f-combo-list-search-box",data:a.value,idField:e.idField,textField:e.textField,titleField:e.titleField,multiSelect:e.multiSelect,selection:g.value,enableHighlightSearch:e.enableHighlightSearch,selectionValues:y.value,onSelectionUpdate:T,onAfterSearch:P},null)])}}),J={property:"all",duration:.3,timingFunction:"cubic-bezier(0.17, 0.89, 0.45, 1)",delay:0},ue=(e,t)=>{const o=e.lineHeight/2,a=B.useTouchMomentum({maxOverflowY:44}),s=l.reactive({...J}),f=r=>{t.emit("change",r)},d=l.reactive({value:0,max:0,min:0,start:0,index:0,currentItem:void 0,active:!1}),w=()=>{d.max=e.visiableOptionCount/2*e.lineHeight;const r=e.column.length*e.lineHeight;d.min=d.max-r+e.lineHeight},b=(r=0)=>{w(),d.index=r,d.value=d.max-r*e.lineHeight,d.currentItem=e.column[r]},v=r=>{const i=e.column.length-1,u=Math.min(d.index,i),h=e.column.findIndex(C=>C[e.valueField]===r);return h>=0?h:u},y=r=>{const i=e.column.length-1;return d.index>i?e.column[i]:e.column[r]},g=r=>{r&&(d.currentItem=r,s.duration=0);const i=d.currentItem[e.valueField],u=v(i),h=y(d.index)[e.valueField];b(u),i!==h&&setTimeout(()=>{f(d.currentItem)},s.duration*1e3)},x=()=>{const r=Array.isArray(e.value)?e.value[0]:e.value;b(v(r))};x(),l.watch(()=>e.value,()=>{e.multiSelect||x()}),l.watch(()=>e.column,()=>g());const S=(r,i=d.max,u=d.min)=>{const h=d.start+r;d.value=h>o?Math.min(h,i):Math.max(h,u),d.index=Math.round((d.max-d.value)/e.lineHeight),d.currentItem=y(d.index)},T=B.useTouch(),P=r=>{T.start(r),d.active=!0,d.start=d.value,a.start(d.start),s.duration=0},I=r=>{r.preventDefault(),T.move(r),S(T.deltaY.value,d.max+e.lineHeight,d.min-e.lineHeight),a.move(T.deltaY.value),s.duration=J.duration},n=r=>{const i=r<0,u=r%e.lineHeight>o?1:0,h=Math.floor(r/e.lineHeight);return(i?h-u:h+u)*e.lineHeight+o};return{translateY:d,transition:s,onTouchStart:P,onTouchMove:I,onTouchEnd:()=>{d.start=0;const r=a.end();let i=0;if(r){const{destination:u,duration:h}=a.get(d.value,d.min,d.max);i=u,s.duration=h/1e3}else i=d.value;S(n(i)),f(d.currentItem)},onTransitionend:()=>{d.active=!1},updateTranslate:g}},ce={column:{type:Array,default:()=>[]},valueField:{type:String,default:"value"},textField:{type:String,default:"text"},value:{type:[Array,String,Number],default:()=>[]},multiSelect:{type:Boolean,default:!1},showIcon:{type:Boolean,default:!1},lineHeight:{type:Number,default:0},visiableOptionCount:{type:Number,default:5}},re=l.defineComponent({props:ce,emits:["change","click"],setup(e,t){const{addUnit:o}=B.useCommonUtils(),{bem:a}=B.useBem("FComboTouchList"),{translateY:s,transition:f,onTouchStart:d,onTouchMove:w,onTouchEnd:b,onTransitionend:v}=ue(e,t),y=S=>{t.emit("click",S)},g=l.computed(()=>({transform:`translateY(${o(s.value)})`,transition:`all ${s.active?f.duration:0}s ${f.timingFunction} 0s`})),x=S=>e.showIcon?Array.isArray(e.value)&&e.value.includes(S[e.valueField]):!1;return()=>l.createVNode("div",{class:a("column"),style:g.value,onTouchstart:d,onTouchmove:w,onTouchend:b,onTransitionend:v},[e.column.map(S=>l.createVNode("div",{class:a("column-item"),onClick:()=>y(S)},[l.createVNode("span",null,[S[e.textField]]),x(S)&&l.createVNode("span",{class:`f-icon f-icon-check ${a("column-item-icon")}`},null)]))])}}),se={modelValue:{type:[String,Array],default:""},columns:{type:Array,default:()=>[]},title:{type:String,default:""},valueField:{type:String,default:"value"},textField:{type:String,default:"text"},childrenField:{type:String,default:"children"},multiSelect:{type:Boolean,default:!1},lineHeight:{type:Number,default:44},cancelText:{type:String,default:"取消"},confirmText:{type:String,default:"确定"},optionFormatter:{type:Function,default:void 0},visiableOptionCount:{type:Number,default:5},showToolbar:{type:Boolean,default:!0},separator:{type:String,default:","}},me=(e,t)=>{const{finalValue:o,initValue:a,setSelectedByIndex:s,getSelectedValueByIndex:f}=t,{isArray:d,isFunction:w,isObject:b}=B.useCommonUtils(),v=i=>i&&i[0],y=l.computed(()=>{var i;return((i=e.columns)==null?void 0:i.length)>0&&d(e.columns[0])}),g=i=>{if((i==null?void 0:i.length)===0)return!1;const u=v(i);return u&&d(u[e.childrenField])},x=(i,u)=>{const h=v(i),C=f(u);let M=i.find(k=>k[e.valueField]===C);M=M||h;const H=M[e.childrenField]||[];if(g(H)){const k=x(H,u+1);return[H,...k]}return[H]},S=()=>{const i=e.columns,u=x(i,0);return[i,...u]},T=(i,u)=>{const h=i[e.textField];return w(e.optionFormatter)?e.optionFormatter(u,i):h},P=(i,u)=>i.map(h=>{const C=b(h)?h:{[e.valueField]:h,[e.textField]:h};return C[e.textField]=T(C,u),C}),I=l.computed(()=>{let i=[];return y.value?i=e.columns:g(e.columns)?i=S():i=[e.columns],i.map(P)}),n=()=>I.value.map((i,u)=>{const h=o.value[u];return i.find(M=>M[e.valueField]===h)}).filter(i=>i),c=()=>n().map(i=>i[e.valueField]),m=()=>n().map(i=>i[e.textField]).join("-"),r=()=>{I.value.forEach((i,u)=>{if(e.multiSelect)o.value[u].forEach(C=>{const M=i.find(H=>H[e.valueField]===C);M&&s(u,M)});else{const h=o.value[u],C=i.find(M=>M[e.valueField]===h);C?s(u,C):s(u,v(i))}})};return l.watch(()=>e.modelValue,()=>{a(e.modelValue),r()},{immediate:!0}),{columns:I,getPickeds:n,getValue:c,getTextValue:m}},fe=e=>{const{isArray:t,isMultiArray:o,isString:a,isDef:s}=B.useCommonUtils(),f=n=>{let c=[];return t(n)?c=n:a(n)?c=n.split(e.separator):s(n)&&(c=[n]),e.multiSelect?o(c)?c:[c]:c},d=l.ref([]),w=n=>{d.value=f(n)},b=l.reactive([]),v=l.computed(()=>b.map(n=>n[e.valueField])),y=l.reactive([]),g=l.computed(()=>y.map(n=>n.map(c=>c[e.valueField])));return{finalValue:d,initValue:w,getSelected:()=>e.multiSelect?y:b,getSelectedValue:()=>e.multiSelect?g.value:v.value,setSelectedByIndex:(n,c)=>{if(e.multiSelect){const m=y[n]||[];m.includes(c)?y[n]=m.filter(r=>r!==c):y[n]=[...m,c]}else b[n]=c},getSelectedByIndex:n=>e.multiSelect?y[n]:b[n],getSelectedValueByIndex:n=>e.multiSelect?g.value[n]:v.value[n]}},K=l.defineComponent({props:se,emits:["change","confirm","cancel","update:modelValue"],setup(e,t){const{emit:o}=t,{addUnit:a}=B.useCommonUtils(),s=fe(e),{finalValue:f,getSelectedValue:d,getSelectedValueByIndex:w,getSelected:b,setSelectedByIndex:v}=s,{columns:y}=me(e,s),g=(m,r=!0)=>{const{value:i,index:u}=m;(r&&!e.multiSelect||!r&&e.multiSelect)&&(o("change",m),v(u,i))},x=()=>{f.value=d(),o("confirm",b()),o("update:modelValue",f.value)},S=()=>{o("cancel")},{bem:T}=B.useBem("FComboTouchList"),P=()=>l.createVNode("div",{class:T("toolbar")},[l.createVNode("div",{class:T("toolbar-left"),onClick:S},[l.createVNode("span",null,[e.cancelText])]),l.createVNode("div",{class:T("toolbar-title")},[l.createVNode("span",null,[e.title])]),l.createVNode("div",{class:T("toolbar-right"),onClick:x},[l.createVNode("span",null,[e.confirmText])])]),I=l.computed(()=>{const m=(e.visiableOptionCount+1)*e.lineHeight;return{height:a(m)}}),n=l.computed(()=>{const m=e.visiableOptionCount*e.lineHeight/2;return{backgroundSize:`100% ${a(m)}`}}),c=()=>l.createVNode("div",{class:T("content")},[l.createVNode("div",{class:T("columns"),style:I.value},[y.value.map((m,r)=>l.createVNode(re,{column:m,value:w(r),showIcon:e.multiSelect,textField:e.textField,multiSelect:e.multiSelect,valueField:e.valueField,lineHeight:e.lineHeight,visiableOptionCount:e.visiableOptionCount,onChange:i=>g({value:i,index:r}),onClick:i=>g({value:i,index:r},!1)},null)),!e.multiSelect&&l.createVNode("div",{class:T("mask"),style:n.value},null),l.createVNode("div",{class:T("frame")},null)])]);return()=>l.createVNode("div",{class:T("")},[e.showToolbar&&P(),c()])}});function Q(e,t){const o=l.ref(""),a=l.ref(e.modelValue),s=l.ref(e.data||[]),f=l.ref(e.editable),d=l.computed(()=>e.hideDisabledItems?s.value.filter(n=>!n.disabled):s.value);function w(n){const c=e.multiSelect?String(n).split(e.separator):[String(n)],m=c.map(u=>[u,!0]),r=new Map(m);return s.value.filter(u=>r.has(String(u[e.valueField]))).sort((u,h)=>{const C=c.indexOf(u[e.valueField]),M=c.indexOf(h[e.valueField]);return C-M})}function b(n){const c=w(n).map(m=>m[e.textField]).join(e.separator);o.value=f.value?c||n:c}function v(n){if(e.multiSelect){const c=n.split(e.separator).map(r=>[r,!0]),m=new Map(c);return s.value.filter(r=>m.has(r[e.textField]))}return s.value.filter(c=>""+c[e.textField]===n)}function y(n){const c={};return c[e.idField]=n,c[e.textField]=n,[c]}function g(n){let c=v(n);const m=c&&c.length>0;return f.value&&!m&&(c=y(n)),c}function x(){const{url:n,method:c="GET",headers:m={"Content-Type":"application/json;charset=utf-8;"},body:r=null}=e.remote;if(!n)return;const{basePath:i}=B.useFarrisConfig().value,u=c.toLowerCase()==="get"?{method:c,headers:m}:{method:c,headers:m,body:r};let h=!1;fetch(new Request(i+n,u)).then(C=>{var H,k;if(C.status===200)return h=!!((k=(H=C.headers)==null?void 0:H.get("content-type"))!=null&&k.includes("application/json")),h?C.text():C.json();throw C.status===405?new Error(j.LocaleService.getLocaleValue("comboList.remoteError")):new Error(C.statusText)}).then(C=>{C.length&&(s.value=h?JSON.parse(C):C,a.value&&b(a.value))}).catch(C=>{console.warn(C)})}e.remote&&(e.load?e.load().then(n=>{s.value=n}).catch(n=>{console.log(n)}):x()),l.watch(()=>e.data,()=>{s.value=e.data}),l.watch([s],([n],[c])=>{if(e.modelValue!=null&&!e.multiSelect){const m=n.find(r=>r[e.valueField]===a.value);m?m[e.valueField]!==a.value?(a.value=m[e.valueField],o.value=m[e.textField],t.emit("update:modelValue",m[e.valueField]),t.emit("change",[m],m[e.valueField])):o.value!==m[e.textField]&&(o.value=m[e.textField]):a.value!==""&&(a.value="",o.value="",t.emit("update:modelValue",""),t.emit("change",[],""))}}),l.watch(()=>e.modelValue,(n,c)=>{c!==n&&(a.value=n,b(n))});function S(n){s.value=n,t.emit("dataChanged",n)}function T(){return s.value}function P(){return o.value}async function I(){const n=typeof e.beforeOpen=="function";return!e.beforeOpen||!n?Promise.resolve(!0):Promise.resolve().then(()=>e.beforeOpen({instance:{updateDataSource:S,getData:T,getDisplayText:P}})).then(c=>typeof(c==null?void 0:c.canOpen)=="boolean"?c==null?void 0:c.canOpen:!0)}return b(e.modelValue),{dataSource:s,filteredDataSource:d,displayText:o,editable:f,modelValue:a,beforeOpenList:I,getItemsByDisplayText:v,getItemsByValue:w,getSelectedItemsByDisplayText:g}}const he=["moz","ms","webkit"];function ge(){let e=0;return t=>{const o=new Date().getTime(),a=Math.max(0,16-(o-e)),s=setTimeout(()=>{t(o+a)},a);return e=o+a,s}}function ye(){if(typeof window>"u")return()=>0;if(window.requestAnimationFrame)return window.requestAnimationFrame.bind(window);const e=he.filter(t=>`${t}RequestAnimationFrame`in window)[0];return e?window[`${e}RequestAnimationFrame`]:ge()}ye(),l.ref("");function X(){const e=navigator.userAgent||navigator.vendor||window.opera,t=[/iPhone/i,/iPod/i,/Android.*Mobile/i,/webOS/i,/BlackBerry/i,/IEMobile/i,/Opera Mini/i,/Harmony/i],o=[/iPad/i,/Android(?!.*Mobile)/i,/Tablet/i,/PlayBook/i,/Kindle/i,/Silk/i];for(const w of o)if(w.test(e))return!1;for(const w of t)if(w.test(e))return!0;const a="ontouchstart"in window||navigator.maxTouchPoints>0,s=screen.width,f=screen.height,d=Math.min(s,f);return!!(a&&d<=768)}const E=l.defineComponent({name:"FComboList",props:A,emits:["clear","update:modelValue","change","input","dataChanged","expandClick"],setup(e,t){const o=l.ref(),a=l.ref(),s=l.ref(e.disabled||e.readonly),f=l.ref(e.enableClear),d=l.ref(e.enableSearch),w=l.ref(e.readonly),{dataSource:b,displayText:v,editable:y,modelValue:g,filteredDataSource:x,getItemsByDisplayText:S,getItemsByValue:T,beforeOpenList:P}=Q(e,t),I=l.ref(e.dropDownIcon);I.value==='<span class="f-icon f-icon-arrow-chevron-down"></span>'&&(I.value='<span id="'+e.id+'-icon-dropdown" class="f-icon f-icon-arrow-chevron-down"></span>');const n=l.computed(()=>e.multiSelect),c=l.computed(()=>a.value?a.value.elementRef.getBoundingClientRect().width:0);function m(){!n.value&&a.value&&a.value.hidePopup()}function r(F){v.value=F.map(L=>L[e.textField]).join(e.separator)||g.value;let p="";F.length===1?p=F[0][e.valueField]:p=F.map(L=>L[e.valueField]).join(e.separator),g.value!==p&&(g.value=p,t.emit("update:modelValue",g.value),t.emit("change",F,g.value))}function i(){const F=T(g.value);r(F)}function u(){w.value||v.value}function h(F){var p;g.value="",(p=o.value)==null||p.activeRowById(""),t.emit("clear")}function C(F){var p,L;e.enableSearch&&e.enableHighlightSearch&&((p=o.value)==null||p.search(F)),(L=o.value)==null||L.activeRowById(F),t.emit("change",[g.value],g.value)}function M(F){if(e.multiSelect){const p=S(F);e.viewType;const O=p.map($=>$[e.idField||e.valueField]).join(e.separator);g.value!==O&&(g.value=O,t.emit("update:modelValue",g.value),t.emit("change",p,g.value))}else F!==g.value&&(g.value=F,t.emit("update:modelValue",g.value),t.emit("change",[],F))}function H(){return v.value}function k(F){const{value:p}=F.target;C(p),t.emit("input",p)}function Fe(){a.value.hidePopup()}function xe(F){b.value=F}function Te(){return b.value}const Ve={getDisplayText:H,hidePopup:Fe,updateDataSource:xe,getData:Te};t.expose(Ve),l.watch([()=>e.disabled,()=>e.editable,()=>e.enableClear,()=>e.enableSearch,()=>e.readonly],([F,p,L,O,$])=>{s.value=F,y.value=p,f.value=L,d.value=O,w.value=$});const we=()=>{t.emit("expandClick")};return()=>l.createVNode(D,{ref:a,id:e.id,disable:s.value,readonly:w.value,forcePlaceholder:e.forcePlaceholder,editable:y.value,buttonContent:I.value,placeholder:e.placeholder==="请选择"?j.LocaleService.getLocaleValue("comboList.placeholder"):e.placeholder,enableClear:f.value,maxLength:e.maxLength,tabIndex:e.tabIndex,enableTitle:e.enableTitle,multiSelect:e.multiSelect,inputType:e.multiSelect?e.viewType:"text",modelValue:v.value,"onUpdate:modelValue":F=>v.value=F,focusOnCreated:e.focusOnCreated,selectOnCreated:e.selectOnCreated,onClear:h,onClick:u,onChange:M,onBlur:i,onInput:k,beforeOpen:P,placement:X()?"bottom":e.placement,popupMinWidth:e.minPanelWidth,popupClass:"f-combo-list-wrapper",popupOnClick:e.popupOnClick,limitContentBySpace:!0,expandable:e.expandable,expandMode:e.expandMode,expandContent:e.expandContent,expandDisabled:e.expandDisabled,onExpandClick:we},{default:()=>[X()?l.createVNode(K,{modelValue:g.value,valueField:e.valueField,textField:e.textField,columns:b.value,multiSelect:e.multiSelect,separator:e.separator,onConfirm:F=>{const p=e.multiSelect?F[0]||[]:F;r(p),a==null||a.value.hidePopup()},onCancel:()=>{a==null||a.value.hidePopup()}},null):l.createVNode(z,{class:e.popupClass,ref:o,idField:e.idField,valueField:e.valueField,textField:e.textField,titleField:e.titleField,dataSource:x.value,selectedValues:g.value,separator:e.separator,multiSelect:e.multiSelect,enableSearch:d.value,maxHeight:e.maxHeight,enableHighlightSearch:e.enableHighlightSearch,width:e.fitEditor?c.value:void 0,onSelectionChange:F=>{r(F),m()}},null)]})}}),Z={convertFrom:(e,t)=>(e.editor.remote||{})[t],convertTo:(e,t,o)=>{e.editor.remote=e.editor.remote||{},e.editor.remote[t]=o}};class be extends ie.InputBaseProperty{constructor(t,o){super(t,o)}getCommonEditorProperties(t){var o,a,s;return{viewType:{visible:!!((o=t.editor)!=null&&o.multiSelect),description:"数据展示类型,有标签和文本两种方式",title:"数据展示类型",type:"enum",editor:{data:[{id:"tag",name:"标签"},{id:"text",name:"文本"}]},refreshPanelAfterChanged:!0},separator:{visible:!!((a=t.editor)!=null&&a.multiSelect)&&((s=t.editor)==null?void 0:s.viewType)==="text",description:"下拉列表启用多选且数据展示类型为文本时的分隔符",title:"分隔符",type:"enum",editor:{data:[{id:",",name:"逗号(,)"},{id:"#",name:"井号(#)"},{id:".",name:"句号(.)"},{id:"|",name:"竖线(|)"}]}},editable:{description:"",title:"允许编辑",type:"boolean",refreshPanelAfterChanged:!0,readonly:!0},hideDisabledItems:{description:"当数据项禁用时,隐藏数据项",title:"隐藏禁用项",type:"boolean",refreshPanelAfterChanged:!0}}}getEditorProperties(t){var b,v,y,g,x,S,T,P,I,n,c,m,r;const o=this;let a="";if(((b=t==null?void 0:t.binding)==null?void 0:b.type)==="Form"){const i=this.schemaService.getFieldByIDAndVMID(t.binding.field,this.viewModelId);(v=i==null?void 0:i.schemaField)!=null&&v.type&&(a=i.schemaField.type.$type)}const s=this.getPropertyEditorParams(t,["Variable"]),f=!t.editor.dataSourceType||t.editor.dataSourceType==="static",d=(((g=(y=this.designViewModelField)==null?void 0:y.type)==null?void 0:g.$type)===B.FormSchemaEntityFieldType$Type.StringType||!!this.formRule&&((x=this.designerHostService.schemaService.getFieldByID(t.binding.field))==null?void 0:x.type.$type)===B.FormSchemaEntityFieldType$Type.StringType)&&((S=t.editor)==null?void 0:S.type)==="combo-list"&&((T=t.editor)==null?void 0:T.dataSourceType)==="dynamic"&&!((I=(P=t.editor)==null?void 0:P.remote)!=null&&I.url)&&!((n=t.editor)!=null&&n.multiSelect);return o.getComponentConfig(t,{type:"combo-list"},{enableClear:{description:"是否显示清除按钮",title:"启用清除按钮",type:"boolean"},dataSourceType:{description:"",title:"数据源类型",type:"enum",editor:{default:"static",data:[{id:"static",name:"静态"},{id:"dynamic",name:"动态"}]},refreshPanelAfterChanged:!0},dataSource:{description:"动态数据源绑定变量",visible:d,title:"数据",editor:{...s,controlName:"",enableClear:!0},refreshPanelAfterChanged:!0},data:{description:"",title:"数据",type:"array",visible:f,...o.getItemCollectionEditor(t,t.editor.valueField,t.editor.textField),refreshPanelAfterChanged:!0},url:{visible:t.editor.dataSourceType==="dynamic"&&!((c=t.editor)!=null&&c.dataSource),$converter:Z,description:"",title:"服务端API",type:"string",refreshPanelAfterChanged:!0},body:{visible:!1,$converter:Z,description:"",title:"服务端API参数",type:"string"},textField:{description:"",title:"数据源显示字段",type:"string",readonly:t.editor.dataSourceType!=="dynamic"},valueField:{description:"",title:"数据源值字段",type:"string",readonly:t.editor.dataSourceType!=="dynamic"},multiSelect:{description:"",title:"启用多选",visible:!a||a==="StringType",readonly:((m=t.editor)==null?void 0:m.dataSourceType)==="dynamic"&&!!((r=t.editor)!=null&&r.dataSource),type:"boolean",refreshPanelAfterChanged:!0},maxLength:{description:"",title:"最大输入长度",type:"number",editor:{nullable:!0,min:0,useThousands:!1,needValid:!0}},...this.getCommonEditorProperties(t)},(i,u)=>{if(!i||!u.editor)return;const h=this;switch(i.propertyID){case"dataSourceType":{i.propertyValue==="static"?(u.editor.valueField="value",u.editor.textField="name",u.editor.remote=null):i.propertyValue==="dynamic"&&(u.editor.remote={method:"GET"},u.editor.valueField="value",u.editor.textField="name");break}case"data":{!h.checkEnumDataReadonly(u)&&u.formatter&&(u.formatter.data=[...i.propertyValue]);break}case"viewType":{i.propertyValue==="tag"&&(u.editor.editable=!1);break}case"dataSource":h.afterMutilEditorChanged(u,i);break}})}getGridFieldEdtiorProperties(t,o){var b,v,y,g,x,S,T,P,I,n,c,m,r;const a=this;let s="";if(((b=t==null?void 0:t.binding)==null?void 0:b.type)==="Form"){const i=this.schemaService.getFieldByIDAndVMID(t.binding.field,this.viewModelId);(v=i==null?void 0:i.schemaField)!=null&&v.type&&(s=i.schemaField.type.$type)}const f=((g=(y=this.designViewModelField)==null?void 0:y.type)==null?void 0:g.$type)===B.FormSchemaEntityFieldType$Type.StringType&&((x=t.editor)==null?void 0:x.type)==="combo-list"&&((S=t.editor)==null?void 0:S.dataSourceType)==="dynamic"&&!((T=t.editor)!=null&&T.multiSelect),d=this.getPropertyEditorParams(t,["Variable"]);return a.getComponentConfig(t,{type:"combo-list"},{enableClear:{description:"",title:"启用清空",type:"boolean"},dataSourceType:{description:"",title:"数据源类型",type:"enum",editor:{default:"static",data:[{id:"static",name:"静态"},{id:"dynamic",name:"动态"}]},refreshPanelAfterChanged:!0},dataSource:{description:"动态数据源绑定变量",visible:f,title:"数据",editor:{...d,controlName:"",enableClear:!0},refreshPanelAfterChanged:!0},data:{description:"",title:"数据",type:"array",visible:!((P=t.editor)!=null&&P.dataSourceType)||((I=t.editor)==null?void 0:I.dataSourceType)==="static",...a.getItemCollectionEditor(t,(n=t.editor)==null?void 0:n.valueField,(c=t.editor)==null?void 0:c.textField),refreshPanelAfterChanged:!0},textField:{description:"",title:"数据源显示字段",type:"string",readonly:!0},valueField:{description:"",title:"数据源值字段",type:"string",readonly:!0},multiSelect:{description:"",title:"启用多选",visible:s==="StringType",readonly:((m=t.editor)==null?void 0:m.dataSourceType)==="dynamic"&&!!((r=t.editor)!=null&&r.dataSource),type:"boolean",refreshPanelAfterChanged:!0},maxLength:{description:"",title:"最大输入长度",type:"number",editor:{nullable:!0,min:0,useThousands:!1,needValid:!0}},...this.getCommonEditorProperties(t)},(i,u)=>{if(!i||!u.editor)return;const h=this;switch(i.propertyID){case"dataSourceType":{i.propertyValue==="static"?(u.editor.valueField="value",u.editor.textField="name",u.editor.remote=null):i.propertyValue==="dynamic"&&(u.editor.remote={method:"GET"},u.editor.valueField="value",u.editor.textField="name");break}case"data":{!h.checkEnumDataReadonly(u)&&u.formatter&&(u.formatter.data=[...i.propertyValue]);break}case"dataSource":h.afterMutilEditorChanged(u,i)}})}setEditorPropertyRelates(t,o,a){if(!t||!o.editor)return;const s=this;switch(t.propertyID){case"dataSourceType":{t.propertyValue==="static"&&(o.editor.valueField="value",o.editor.textField="name",o.editor.remote={});break}case"data":{!s.checkEnumDataReadonly(o)&&o.formatter&&(o.formatter.data=[...t.propertyValue]);break}}}changeBindingField(t,o,a){var f;super.changeBindingField(t,o);const s=a;t.editor&&((f=s==null?void 0:s.type)==null?void 0:f.$type)===B.FormSchemaEntityFieldType$Type.EnumType&&(t.editor.data=s.type.enumValues||[])}getEventPropertyConfig(t,o="card",a,s){const f=this;let d=[{label:"onChange",name:"值变化事件"},{label:"beforeOpen",name:"打开面板前事件"},{label:"beforeHide",name:"关闭面板前事件"},{label:"onShown",name:"面板打开事件"},{label:"onHidden",name:"面板关闭事件"}];d=[...d,...this.getInputCommonEvents(t)],a&&(d=d.concat(a)),this.formRule&&(d=d.filter(y=>y.label!=="onChange")),this.appendFieldValueChangeEvents(t,d);const w=f.eventsEditorUtils.formProperties(t,f.viewModelId,d);return{title:"事件",hideTitle:!0,properties:f.createBaseEventProperty(w),tabId:B.EVENT_PROPERTY_TAB_IDS,tabName:"交互",setPropertyRelates(y,g){const x=y.propertyValue;delete t[f.viewModelId],x&&(x.setPropertyRelates=this.setPropertyRelates,f.eventsEditorUtils.saveRelatedParameters(t,f.viewModelId,x.events,x),f.updateLinkedLabel(x,g)),s&&s(y,g,x);const S=f.designViewModelUtils.getDgViewModel(f.viewModelId);S&&f.designViewModelField&&S.changeField(f.designViewModelField.id,{valueChanging:t.fieldValueChanging||"",valueChanged:t.fieldValueChanged||""}),t.editor.onShown=t.onShown,t.editor.onHidden=t.onHidden,t.editor.beforeHide=t.beforeHide,t.editor.beforeOpen=t.beforeOpen,t.editor.onChange=t.onChange,t.editor.onClear=t.onClear}}}}function ve(e,t){const o=e.schema;function a(s,f){return new be(s,t).getPropertyConfig(o,f)}return{getPropsConfig:a}}const Se=l.defineComponent({name:"FComboListDesign",props:W,emits:["clear","update:modelValue","change"],setup(e,t){const o=l.ref(),a=l.inject("designer-host-service"),s=l.inject("design-item-context"),f=ve(s,a),d=le.useDesignerComponent(o,s,f);return l.onMounted(()=>{o.value.componentInstance=d}),t.expose(d.value),()=>l.createVNode(ne,{ref:o,buttonContent:e.dropDownIcon,readonly:!0,editable:!1,forcePlaceholder:!0,placeholder:e.placeholder,expandable:e.expandable,expandMode:e.expandMode,expandContent:e.expandContent,expandDisabled:e.expandDisabled},null)}});E.register=(e,t,o,a,s)=>{e["combo-list"]=E,t["combo-list"]=R(s),a["combo-list"]={callbackResolver:_}},E.registerDesigner=(e,t,o,a)=>{e["combo-list"]=Se,t["combo-list"]=R(a)};const Ce=B.withInstall(E);V.FComboList=E,V.FComboListContainer=z,V.FTouchComboListContainer=K,V.Placement=Y,V.callbackResolver=_,V.comboListDesignProps=W,V.comboListProps=A,V.default=Ce,V.propsResolver=oe,V.propsResolverGenerator=R,V.useDataSource=Q,Object.defineProperties(V,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});