UNPKG

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 5.57 kB
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","saveFilterPanel","saveFilterPanelByEvent","resetFilterPanel","resetFilterPanelByEvent","getCheckedFilters","updateFilterOptionStatus"];hooks.add("tableFilterModule",{setupTable(_){let{props:d,reactData:h,internalData:n}=_,{refElem:i,refTableFilter:g}=_.getRefMaps(),{computeFilterOpts:k,computeMouseOpts:f}=_.getComputeMaps(),a=e=>{var t=h.filterStore;t.options.forEach(e=>{e.checked=e._checked}),_.confirmFilterEvent(e)},o=(e,t,l)=>{var r=h.filterStore;r.options.forEach(e=>{e._checked=!1}),l._checked=t,_.checkFilterOptions(),a(e)},u=(e,t,l)=>{l._checked=t,_.checkFilterOptions()},t=e=>{var t=h.filterStore;_.handleClearFilter(t.column),_.confirmFilterEvent(e),e&&_.dispatchEvent("clear-filter",{filterList:[]},e)};var e={checkFilterOptions(){var e=h.filterStore;e.isAllSelected=e.options.every(e=>e._checked),e.isIndeterminate=!e.isAllSelected&&e.options.some(e=>e._checked)},triggerFilterEvent(e,t,l){let{initStore:r,filterStore:m}=h,F=n.elemStore;if(m.column===t&&m.visible)m.visible=!1;else{let u=i.value,{scrollTop:s,scrollLeft:c,visibleHeight:d,visibleWidth:h}=(0,_dom.getDomNode)();let f=k.value.transfer,v=u.getBoundingClientRect(),p=e.currentTarget;_.handleFilterOptions(t),n._currFilterParams=l,m.style=null,m.visible=!0,r.filter=!0,(0,_vue.nextTick)(()=>{if((0,_util.getRefElem)(F["main-header-scroll"])){var r=g.value,r=r?r.getRefMaps().refElem.value:null;if(r){var i=p.getBoundingClientRect(),a=r.querySelector(".vxe-table--filter-header"),n=r.querySelector(".vxe-table--filter-footer"),r=r.offsetWidth,o=r/2;let e=0,t=0,l=0;f?(e=i.left-o+c,t=i.top+p.clientHeight+s,l=Math.min(Math.max(v.height,Math.floor(d/2)),Math.max(80,d-t-(a?a.clientHeight:0)-(n?n.clientHeight:0)-28)),e<16?e=16:e>h-r-16&&(e=h-r-16)):(e=i.left-v.left-o,t=i.top-v.top+p.clientHeight,l=Math.max(40,u.clientHeight-t-(a?a.clientHeight:0)-(n?n.clientHeight:0)-14),e<1?e=1:e>u.clientWidth-r-1&&(e=u.clientWidth-r-1)),m.style={top:(0,_dom.toCssUnit)(t),left:(0,_dom.toCssUnit)(e)},m.maxHeight=l}}})}_.dispatchEvent("filter-visible",{column:t,field:t.field,property:t.field,filterList:_.getCheckedFilters(),visible:m.visible},e)},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:_})}}},handleColumnConfirmFilter(e,t){var l=d.mouseConfig;let{scrollXLoad:r,scrollYLoad:i}=h;var a=k.value,n=f.value,o=e.field;let u=[],s=[];e.filters.forEach(e=>{e.checked&&(u.push(e.value),s.push(e.data))});var c=_.getCheckedFilters(),e={$table:_,$event:t,column:e,field:o,property:o,values:u,datas:s,filters:c,filterList:c};return a.remote||(_.handleTableData(!0),_.checkSelectionStatus()),l&&n.area&&_.handleFilterEvent&&_.handleFilterEvent(t,e),t&&_.dispatchEvent("filter-change",e,t),_.closeFilter(),_.updateFooter().then(()=>{var{scrollXLoad:e,scrollYLoad:t}=h;if(r||e||i||t)return(r||e)&&_.updateScrollXSpace(),(i||t)&&_.updateScrollYSpace(),_.refreshScroll()}).then(()=>(_.updateCellAreas(),_.recalculate(!0))).then(()=>{setTimeout(()=>_.recalculate(),50)})},confirmFilterEvent(e){var t=h.filterStore,t=t.column;_.handleColumnConfirmFilter(t,e)},handleFilterChangeRadioOption:o,handleFilterChangeMultipleOption:u,handleFilterChangeOption(e,t,l){var r=h.filterStore;r.multiple?u(0,t,l):o(e,t,l)},handleFilterConfirmFilter:a,handleFilterResetFilter:t};return Object.assign(Object.assign({},{openFilter(e){let r=(0,_util.handleFieldOrColumn)(_,e);if(r&&r.filters){let t=n.elemStore,l=r.fixed;return _.scrollToColumn(r).then(()=>{var e=(0,_util.getRefElem)(t[`${l||"main"}-header-wrapper`]||t["main-header-wrapper"]);e&&(e=e.querySelector(`.vxe-header--column.${r.id} .vxe-cell--filter`),(0,_dom.triggerEvent)(e,"click"))})}return(0,_vue.nextTick)()},setFilter(e,t,l){var r=h.filterStore,e=(0,_util.handleFieldOrColumn)(_,e);if(e&&e.filters){if(e.filters=(0,_util.toFilters)(t||[]),l)return _.handleColumnConfirmFilter(e,null);r.visible&&_.handleFilterOptions(e)}return(0,_vue.nextTick)()},clearFilter(e){var t=h.filterStore,l=n.tableFullColumn,r=k.value;let i;return e?(i=(0,_util.handleFieldOrColumn)(_,e))&&_.handleClearFilter(i):l.forEach(_.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)():_.updateData()},saveFilterPanel(){return a(null),(0,_vue.nextTick)()},saveFilterPanelByEvent(e){return a(e),(0,_vue.nextTick)()},resetFilterPanel(){return t(null),(0,_vue.nextTick)()},resetFilterPanelByEvent(e){return t(e),(0,_vue.nextTick)()},getCheckedFilters(){var e=n.tableFullColumn;let a=[];return e.forEach(e=>{var{field:t,filters:l}=e;let r=[],i=[];l&&l.length&&(l.forEach(e=>{e.checked&&(r.push(e.value),i.push(e.data))}),r.length)&&a.push({column:e,field:t,property:t,values:r,datas:i})}),a},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)}});