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.83 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 warnLog=(0,_log.createComponentLog)("table").warnLog,{getI18n,getIcon,renderer,renderEmptyElement}=_ui.VxeUI;var _default=exports.default=(0,_comp.defineVxeComponent)({name:"VxeTableFilterPanel",props:{filterStore:{type:Object,default:()=>({})}},setup(m,e){var t=_xeUtils.default.uniqueId();let _=(0,_vue.inject)("$xeTable",{}),{reactData:p,internalData:f,getComputeMaps:l}=_,{computeFilterOpts:h,computeRendererOpts:b}=l(),x=(0,_vue.ref)(),r={refElem:x},g={xID:t,props:m,context:e,getRefMaps:()=>r},C=(0,_vue.computed)(()=>{var e=m.filterStore,e=e.column;return e&&e.filters&&e.filters.some(e=>e.checked)}),i=(e,t)=>{var l=m.filterStore,r=l.column;r&&r.filters&&r.filters.forEach(e=>{e._checked=t,e.checked=t}),l.isAllSelected=t,l.isIndeterminate=!1},E=e=>{var t=m.filterStore;e||warnLog("vxe.error.delFunc",["confirmFilter","saveFilterPanelByEvent"]),_.handleFilterConfirmFilter(e||new Event("click"),t.column||null)};let F=e=>{var t=m.filterStore;_.handleFilterResetFilter(e,t.column||null)};let O=(e,t,l)=>{_.handleFilterChangeOption(e,t,l)},I=(e,t)=>{var l=m.filterStore,l=l.column;l&&l.filterMultiple?i(0,t):F(e)};t={changeRadioOption:(e,t,l)=>{_.handleFilterChangeRadioOption(e,t,l)},changeMultipleOption:(e,t,l)=>{_.handleFilterChangeMultipleOption(e,t,l)},changeAllOption:I,changeOption:O,confirmFilter:E,resetFilter:F};Object.assign(g,t);return g.renderVN=()=>{var e,t,l,r,i,a,n,o,s,u=m.filterStore,c=p.initStore,{visible:v,column:d}=u;return d?(t=b.value,l=(t=(e=d?d.filterRender:null)&&(0,_utils.isEnableConf)(e)&&e.name?t[e.name]||renderer.get(e.name):null)?t.tableFilterClassName||t.filterClassName:"",r=Object.assign({},f._currFilterParams,{$panel:g,$table:_}),i=_.props,a=_.getComputeMaps().computeSize,a=a.value,{transfer:n,destroyOnClose:o,className:s}=h.value,(0,_vue.h)(_vue.Teleport,{to:"body",disabled:!n},[(0,_vue.h)("div",{ref:x,class:["vxe-table--filter-wrapper","filter--prevent-default",s,(0,_dom.getPropClass)(l,r),{["size--"+a]:a,"is--animat":i.animat,"is--multiple":d.filterMultiple,"is--active":v}],style:u.style},c.filter&&(!o||v)&&d?((e,t)=>{let l=m.filterStore;var{column:r,maxHeight:i}=l;if(!r)return[];let{filterMultiple:a,filters:n,slots:o}=r;var r=n||[],s=o?o.filter:null,u=Object.assign({},f._currFilterParams,{option:r[0],$panel:g,$table:_}),t=t?t.renderTableFilter||t.renderFilter:null;return s?[(0,_vue.h)("div",{class:"vxe-table--filter-template",style:i?{maxHeight:(0,_dom.toCssUnit)(i)}:{}},_.callSlot(s,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)))]:(s=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":s,"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:s?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=>{O(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((()=>{var e=m.filterStore,t=e.column;if(!t)return[];var l=h.value,r=b.value,i=C.value,{filterRender:t,filterMultiple:a}=t,{confirmButtonText:l,resetButtonText:n,showFooter:o}=l,r=t&&(0,_utils.isEnableConf)(t)&&t.name?r[t.name]||renderer.get(t.name):null,t=!i&&!e.isAllSelected&&!e.isIndeterminate;let s=!!a;return _xeUtils.default.isBoolean(o)?s=o:r&&(s=!(!1===r.showTableFilterFooter||!1===r.showFilterFooter||!1===r.isFooter)),s?[(0,_vue.h)("div",{class:"vxe-table--filter-footer"},[(0,_vue.h)("button",{class:{"is--disabled":t},disabled:t,onClick:E},l||getI18n("vxe.table.confirmFilter")),(0,_vue.h)("button",{onClick:F},n||getI18n("vxe.table.resetFilter"))])]:[]})()):[])])):renderEmptyElement(g)},g},render(){return this.renderVN()}});