vxe-table
Version:
A PC-end table component based on Vxe UI, supporting copy-paste, data pivot table, and high-performance virtual list table solution.
1 lines • 4.6 kB
JavaScript
Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _vue=require("vue"),_comp=require("../../../ui/src/comp"),_ui=require("../../../ui"),_utils=require("../../../ui/src/utils"),_dom=require("../../../ui/src/dom"),_vn=require("../../../ui/src/vn"),_log=require("../../../ui/src/log"),_xeUtils=_interopRequireDefault(require("xe-utils"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let{getI18n,getIcon,renderer,renderEmptyElement}=_ui.VxeUI;var _default=exports.default=(0,_comp.defineVxeComponent)({name:"VxeTableFilterPanel",props:{filterStore:{type:Object,default:()=>({})}},setup(_,e){var t=_xeUtils.default.uniqueId();let f=(0,_vue.inject)("$xeTable",{}),{reactData:p,internalData:m,getComputeMaps:l}=f,h=l().computeFilterOpts,b=(0,_vue.ref)(),r={refElem:b},x={xID:t,props:_,context:e,getRefMaps:()=>r},C=(0,_vue.computed)(()=>{var e=_.filterStore,e=e.column;return e&&e.filters&&e.filters.some(e=>e.checked)}),i=(e,t)=>{var l=_.filterStore,r=l.column;r&&r.filters&&r.filters.forEach(e=>{e._checked=t,e.checked=t}),l.isAllSelected=t,l.isIndeterminate=!1},g=e=>{var t=_.filterStore;e||(0,_log.warnLog)("vxe.error.delFunc",["confirmFilter","saveFilterPanelByEvent"]),f.handleFilterConfirmFilter(e||new Event("click"),t.column||null)};let E=e=>{var t=_.filterStore;f.handleFilterResetFilter(e,t.column||null)};let F=(e,t,l)=>{f.handleFilterChangeOption(e,t,l)},I=(e,t)=>{var l=_.filterStore,l=l.column;l&&l.filterMultiple?i(0,t):E(e)};t={changeRadioOption:(e,t,l)=>{f.handleFilterChangeRadioOption(e,t,l)},changeMultipleOption:(e,t,l)=>{f.handleFilterChangeMultipleOption(e,t,l)},changeAllOption:I,changeOption:F,confirmFilter:g,resetFilter:E};Object.assign(x,t);return x.renderVN=()=>{var e,t,l,r,i,a,n,s,o,u=_.filterStore,c=p.initStore,{visible:d,column:v}=u;return v?(i=(t=(e=v?v.filterRender:null)&&(0,_utils.isEnableConf)(e)?renderer.get(e.name):null)?t.tableFilterClassName||t.filterClassName:"",n=Object.assign({},m._currFilterParams,{$panel:x,$table:f}),l=f.props,a=f.getComputeMaps().computeSize,a=a.value,{transfer:s,destroyOnClose:r,className:o}=h.value,(0,_vue.h)(_vue.Teleport,{to:"body",disabled:!s},[(0,_vue.h)("div",{ref:b,class:["vxe-table--filter-wrapper","filter--prevent-default",o,(0,_dom.getPropClass)(i,n),{["size--"+a]:a,"is--animat":l.animat,"is--multiple":v.filterMultiple,"is--active":d}],style:u.style},c.filter&&(!r||d)&&v?((e,t)=>{let l=_.filterStore;var{column:r,maxHeight:i}=l;if(!r)return[];let{filterMultiple:a,filters:n,slots:s}=r;var r=n||[],o=s?s.filter:null,u=Object.assign({},m._currFilterParams,{option:r[0],$panel:x,$table:f}),t=t?t.renderTableFilter||t.renderFilter:null;return o?[(0,_vue.h)("div",{class:"vxe-table--filter-template",style:i?{maxHeight:(0,_dom.toCssUnit)(i)}:{}},f.callSlot(o,u))]:e&&t?[(0,_vue.h)("div",{class:"vxe-table--filter-template",style:i?{maxHeight:(0,_dom.toCssUnit)(i)}:{}},(0,_vn.getSlotVNs)(t(e,u)))]:(o=a?l.isAllSelected:!r.some(e=>e._checked),t=a&&l.isIndeterminate,[(0,_vue.h)("ul",{class:"vxe-table--filter-header"},[(0,_vue.h)("li",{class:["vxe-table--filter-option",{"is--checked":o,"is--indeterminate":t}],title:getI18n(a?"vxe.table.allTitle":"vxe.table.allFilter"),onClick:e=>{I(e,!l.isAllSelected)}},(a?[(0,_vue.h)("span",{class:["vxe-checkbox--icon",t?getIcon().TABLE_CHECKBOX_INDETERMINATE:o?getIcon().TABLE_CHECKBOX_CHECKED:getIcon().TABLE_CHECKBOX_UNCHECKED]})]:[]).concat([(0,_vue.h)("span",{class:"vxe-checkbox--label"},getI18n("vxe.table.allFilter"))]))]),(0,_vue.h)("ul",{class:"vxe-table--filter-body",style:i?{maxHeight:(0,_dom.toCssUnit)(i)}:{}},r.map(t=>{var e=t._checked;return(0,_vue.h)("li",{class:["vxe-table--filter-option",{"is--checked":t._checked}],title:t.label,onClick:e=>{F(e,!t._checked,t)}},(a?[(0,_vue.h)("span",{class:["vxe-checkbox--icon",e?getIcon().TABLE_CHECKBOX_CHECKED:getIcon().TABLE_CHECKBOX_UNCHECKED]})]:[]).concat([(0,_vue.h)("span",{class:"vxe-checkbox--label"},(0,_utils.formatText)(t.label,1))]))}))])})(e,t).concat((s=_.filterStore,(o=s.column)&&(i=h.value,n=C.value,{filterRender:o,filterMultiple:a}=o,o=(0,_utils.isEnableConf)(o)?renderer.get(o.name):null,n=!n&&!s.isAllSelected&&!s.isIndeterminate,o?!1!==o.showTableFilterFooter&&!1!==o.showFilterFooter&&!1!==o.isFooter:a)?[(0,_vue.h)("div",{class:"vxe-table--filter-footer"},[(0,_vue.h)("button",{class:{"is--disabled":n},disabled:n,onClick:g},i.confirmButtonText||getI18n("vxe.table.confirmFilter")),(0,_vue.h)("button",{onClick:E},i.resetButtonText||getI18n("vxe.table.resetFilter"))])]:[])):[])])):renderEmptyElement(x)},x},render(){return this.renderVN()}});