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 • 7.47 kB
JavaScript
var _vue=require("vue"),_xeUtils=_interopRequireDefault(require("xe-utils")),_ui=require("../../../ui"),_util=require("../../src/util"),_dom=require("../../../ui/src/dom"),_utils=require("../../../ui/src/utils");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let{renderer,hooks}=_ui.VxeUI,tableFilterMethodKeys=["openFilter","setFilter","clearFilter","saveFilter","saveFilterByEvent","saveFilterPanel","saveFilterPanelByEvent","resetFilter","resetFilterByEvent","resetFilterPanel","resetFilterPanelByEvent","getCheckedFilters","updateFilterOptionStatus"],sourceType="table";hooks.add("tableFilterModule",{setupTable(b){let a=b.xeGrid,u=b.xeGantt,E=a||u,{props:s,reactData:h,internalData:S}=b,{refElem:i,refTableFilter:O}=b.getRefMaps(),{computeFilterOpts:y,computeMouseOpts:f}=b.getComputeMaps();var e={checkFilterOptions(){var e=h.filterStore,t=e.column;t&&(t=t.filters||[],e.isAllSelected=t.every(e=>e._checked),e.isIndeterminate=!e.isAllSelected&&t.some(e=>e._checked))},handleOpenFilterColumn(e,_,t,C,l){let{initStore:r,filterStore:x}=h,k=S.elemStore;if(x.column===C&&x.visible)x.visible=!1;else{let o=i.value,{scrollTop:d,scrollLeft:c,visibleHeight:s,visibleWidth:h}=(0,_dom.getDomNode)();let{maxHeight:f,transfer:F,zIndex:m}=y.value,v=_||t,p=o.getBoundingClientRect();t=C?C.filterRender:null;let g=t&&(0,_utils.isEnableConf)(t)?renderer.get(t.name):null;b.handleFilterOptions(C),S._currFilterParams=l,x.style=null,x.visible=!0,r.filter=!0,(0,_vue.nextTick)(()=>{if((0,_util.getRefElem)(k["main-header-scroll"])){var r=O.value,r=r?r.getRefMaps().refElem.value:null;if(r){var i=v.getBoundingClientRect(),n=r.querySelector(".vxe-table--filter-header"),a=r.querySelector(".vxe-table--filter-footer"),r=r.offsetWidth,u=_?r/2:(r-C.renderWidth)/2;let e=0,t=0,l=0;F?(e=i.left-u+c,t=i.top+v.clientHeight+d,l=Math.min(Math.max(p.height,Math.floor(s/2)),Math.max(80,s-t-(n?n.clientHeight:0)-(a?a.clientHeight:0)-28)),e<16?e=16:e>h-r-16&&(e=h-r-16)):(e=i.left-p.left-u,t=i.top-p.top+v.clientHeight,l=Math.max(40,o.clientHeight-t-(n?n.clientHeight:0)-(a?a.clientHeight:0)-14),e<1?e=1:e>o.clientWidth-r-1&&(e=o.clientWidth-r-1),E&&(u=E.getRefMaps().refElem.value)&&(i=u.getBoundingClientRect(),t+=p.top-i.top));n={top:(0,_dom.toCssUnit)(t),left:(0,_dom.toCssUnit)(e)};m&&(n.zIndex=m),x.style=n,g&&!g.tableFilterAutoHeight?l=0:f&&(l=f>l?l:f),x.maxHeight=l}}})}b.dispatchEvent("filter-visible",{column:C,field:C.field,property:C.field,filterList:b.getCheckedFilters(),visible:x.visible},e)},triggerFilterEvent(e,t,l){var r=S.elemStore,i=t.fixed,i=(0,_util.getRefElem)(r[`${i||"main"}-header-wrapper`]||r["main-header-wrapper"]),r=e.currentTarget,i=i?i.querySelector(".vxe-header--column."+t.id):null;b.handleOpenFilterColumn(e,r,i||r,t,l)},handleClearFilter(e){if(e){var{filters:l,filterRender:r}=e;if(l){r=(0,_utils.isEnableConf)(r)?renderer.get(r.name):null;let t=e.filterResetMethod||(r?r.tableFilterResetMethod||r.filterResetMethod:null);l.forEach(e=>{e._checked=!1,e.checked=!1,t||(e.data=_xeUtils.default.clone(e.resetValue,!0))}),t&&t({options:l,column:e,$table:b})}}},handleColumnConfirmFilter(e,t){var l=s.mouseConfig;let{scrollXLoad:r,scrollYLoad:i}=h;var n=y.value,a=f.value,{field:u,filters:o}=e;let d=[],c=[];(o||[]).forEach(e=>{e.checked&&(d.push(e.value),c.push(e.data))});o=b.getCheckedFilters(),e={$table:b,$event:t,column:e,field:u,property:u,values:d,datas:c,filters:o,filterList:o};return n.remote||(b.handleTableData(!0),b.checkSelectionStatus()),l&&a.area&&b.handleFilterEvent&&b.handleFilterEvent(t,e),t&&b.dispatchEvent("filter-change",e,t),b.closeFilter(),b.updateFooter().then(()=>{var{scrollXLoad:e,scrollYLoad:t}=h;if(r||e||i||t)return(r||e)&&b.updateScrollXSpace(),(i||t)&&b.updateScrollYSpace(),b.refreshScroll()}).then(()=>(b.updateCellAreas(),b.recalculate(!0))).then(()=>{setTimeout(()=>b.recalculate(),50)})},confirmFilterEvent(e,t){t&&b.handleColumnConfirmFilter(t,e)},handleFilterChangeRadioOption(e,t,l){var r=h.filterStore,r=r.column;r&&((r.filters||[]).forEach(e=>{e._checked=!1}),l._checked=t,b.checkFilterOptions(),b.handleFilterConfirmFilter(e,r))},handleFilterChangeMultipleOption(e,t,l){l._checked=t,b.checkFilterOptions()},handleFilterChangeOption(e,t,l){var r=h.filterStore,i=S.fullColumnIdData;let n=r.column;n||(i=i[l._colId])&&(n=i.column,r.column=n),n&&(n.filterMultiple?b.handleFilterChangeMultipleOption(e,t,l):b.handleFilterChangeRadioOption(e,t,l))},handleFilterConfirmFilter(e,t){t&&((t.filters||[]).forEach(e=>{e.checked=e._checked}),b.confirmFilterEvent(e,t))},handleFilterResetFilter(e,t){t&&(b.handleClearFilter(t),b.confirmFilterEvent(e,t),e)&&b.dispatchEvent("clear-filter",{filterList:[]},e)}};return Object.assign(Object.assign({},{openFilter(e){let n=(0,_util.handleFieldOrColumn)(b,e);if(n&&n.filters){let e=S.elemStore,{fixed:r,filters:i}=n;return b.scrollToColumn(n).then(()=>{var t=(0,_util.getRefElem)(e[`${r||"main"}-header-wrapper`]||e["main-header-wrapper"]);if(t){var l=t.querySelector(`.vxe-header--column.${n.id} .vxe-cell--filter`);if(l)(0,_dom.triggerEvent)(l,"click");else{l=t.querySelector(".vxe-header--column."+n.id);if(l){let e=null;i&&(e=i[0]);t={$table:b,$grid:a,$gantt:u,$rowIndex:-1,column:n,columnIndex:b.getColumnIndex(n),$columnIndex:b.getVMColumnIndex(n),_columnIndex:b.getVTColumnIndex(n),firstFilterOption:e,fixed:r,source:sourceType,type:"header"};b.handleOpenFilterColumn(new Event("click"),null,l,n,t)}}}})}return(0,_vue.nextTick)()},setFilter(e,t,l){var r=h.filterStore,e=(0,_util.handleFieldOrColumn)(b,e);if(e&&e.filters){if(e.filters=(0,_util.toFilters)(t||[],e.id),l)return b.handleColumnConfirmFilter(e,null);r.visible&&b.handleFilterOptions(e)}return(0,_vue.nextTick)()},clearFilter(e){var t=h.filterStore,l=S.tableFullColumn,r=y.value;let i;return e?(i=(0,_util.handleFieldOrColumn)(b,e))&&b.handleClearFilter(i):l.forEach(b.handleClearFilter),e&&i===t.column||Object.assign(t,{isAllSelected:!1,isIndeterminate:!1,style:null,options:[],column:null,multiple:!1,visible:!1}),r.remote?(0,_vue.nextTick)():b.updateData()},saveFilter(e){return e&&(e=(0,_util.handleFieldOrColumn)(b,e),b.handleFilterConfirmFilter(null,e)),(0,_vue.nextTick)()},saveFilterByEvent(e,t){return t&&(t=(0,_util.handleFieldOrColumn)(b,t),b.handleFilterConfirmFilter(e,t)),(0,_vue.nextTick)()},resetFilter(e){return e&&(e=(0,_util.handleFieldOrColumn)(b,e),b.handleFilterResetFilter(null,e)),(0,_vue.nextTick)()},resetFilterByEvent(e,t){return t&&(t=(0,_util.handleFieldOrColumn)(b,t),b.handleFilterResetFilter(e,t)),(0,_vue.nextTick)()},saveFilterPanel(){var e=h.filterStore;return b.handleFilterConfirmFilter(null,e.column||null),(0,_vue.nextTick)()},saveFilterPanelByEvent(e){var t=h.filterStore;return b.handleFilterConfirmFilter(e,t.column||null),(0,_vue.nextTick)()},resetFilterPanel(){var e=h.filterStore;return b.handleFilterResetFilter(null,e.column||null),(0,_vue.nextTick)()},resetFilterPanelByEvent(e){var t=h.filterStore;return b.handleFilterResetFilter(e,t.column||null),(0,_vue.nextTick)()},getCheckedFilters(){var e=S.tableFullColumn;let n=[];return e.forEach(e=>{var{field:t,filters:l}=e,l=l||[];let r=[],i=[];l&&(l.forEach(e=>{e.checked&&(r.push(e.value),i.push(e.data))}),r.length)&&n.push({column:e,field:t,property:t,values:r,datas:i})}),n},updateFilterOptionStatus(e,t){return e._checked=t,e.checked=t,(0,_vue.nextTick)()}}),e)},setupGrid(e){return e.extendTableMethods(tableFilterMethodKeys)},setupGantt(e){return e.extendTableMethods(tableFilterMethodKeys)}});