import { CtlGrid, GridRefreshMode } from './CtlGrid' export class CtlGridPage { public grid: CtlGrid public getPageData!: (currentPage: number, pageSize: number) => {} private _currentPage: number = 1 private _pageSize: number = 100 private _pageCount: number = 0 private _itemCount: number = 0 get currentPage() { return this._currentPage } set currentPage(cp: number) { this._currentPage = cp if (this._currentPage > this._pageCount) { this._currentPage = this._pageCount } if (this._currentPage <= 0 && this._pageCount > 0) { this._currentPage = 1 } this.refreshPageViewInfo() } get pageSize() { return this._pageSize } set pageSize(ps: number) { if (ps <= 0) { return } this._pageSize = ps this.refreshPageViewInfo() } get pageCount() { return this._pageCount } get itemCount() { return this._itemCount } set itemCount(ic: number) { this._itemCount = ic this.refreshPageViewInfo() } public refreshGrid() { this.getPageData(1, this.pageSize) } private dom: any private firstButtomDom: any private prevButtomDom: any private nextButtomDom: any private lastButtomDom: any private currenpageDom: any private gridpagerDom: any private itemcountDom: any private pageSizeDom: any private gridpagerLeft: any private gridpagerRight: any private gridpagerCenter: any constructor(grid: CtlGrid) { this.grid = grid this._pageSize = this.grid.pageSize /** 找到aggrid 自带的pageview 替换子dom节点 **/ var dom = this.grid.webix.$view.getElementsByClassName( 'ag-paging-panel ag-unselectable' ) var su_id = this.grid.webix.config.id if (dom.length <= 0) { return } /** 显示底部分页栏 **/ dom[0].className = 'ag-paging-panel ag-unselectable' dom[0].innerHTML = '
' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + '
' + ' ' + ' ' + ' ' + ' ' + ' \n' + ' ' + ' \n' + ' ' + ' ' + ' ' + ' ' + '
|219|
' + '
' + ' 41 - 60 共 4,367 条' + '
' + '
' this.dom = dom this.firstButtomDom = document.getElementById('first_' + su_id) this.prevButtomDom = document.getElementById('prev_' + su_id) this.nextButtomDom = document.getElementById('next_' + su_id) this.lastButtomDom = document.getElementById('last_' + su_id) this.currenpageDom = document.getElementById('currenpage_' + su_id) this.gridpagerDom = document.getElementById('gridpager_' + su_id) this.itemcountDom = document.getElementById('itemcount_' + su_id) this.pageSizeDom = document.getElementById('pagesize_' + su_id) this.gridpagerCenter = document.getElementById('gridpager_center_' + su_id) this.gridpagerLeft = document.getElementById('gridpager_left_' + su_id) this.gridpagerRight = document.getElementById('gridpager_right_' + su_id) if (!this.gridpagerCenter) { return; } if (this.grid.pagination) { this.gridpagerCenter.style.display = '' } else { this.gridpagerCenter.style.display = 'none' } this.refreshPageViewInfo() var me = this this.currenpageDom.onkeydown = function (event: any) { if (event.keyCode === 13) { // enter键 let cp = parseInt(event.srcElement.value) if (cp > me.pageCount) { cp = me.pageCount } if (cp <= 0) { cp = 1 } me.grid.refreshMode = GridRefreshMode.refreshWithFilter; me.getPageData(cp, me.pageSize) } else { if (event.keyCode !== 8 && (event.keyCode < 48 || event.keyCode > 57)) { return false } } } this.pageSizeDom.onchange = function (v: any) { me.pageSize = v.srcElement.value me.grid.paginationSetPageSize(me.pageSize) if (typeof me.getPageData === 'function') { me.grid.refreshMode = GridRefreshMode.refreshWithFilter; me.getPageData(1, me.pageSize) } } var buttons = dom[0].getElementsByClassName('ctl-grid-page ui-icon') var buttons1 = dom[0].getElementsByClassName( 'ctl-grid-page ui-icon-disable' ) buttons = _.union(buttons, buttons1) _.each(buttons, button => { button.onclick = function (q: any) { for (let i = 0; i < q.srcElement.classList.length; i++) { if (q.srcElement.classList[i] === 'ui-icon-disable') { return } } const pre = _.split(q.srcElement.id, '_' + me.grid.webix.config.id) let cp = me.currentPage switch (pre[0]) { case 'first': { cp = 1 break } case 'prev': { if (cp > 1) { cp -= 1 } break } case 'next': { if (cp < me.pageCount) { cp += 1 } break } case 'last': { cp = me.pageCount me.disableButton(q.srcElement) break } } if (typeof me.getPageData === 'function') { if (cp <= 0) { cp = 1 } me.grid.refreshMode = GridRefreshMode.refreshWithFilter; me.getPageData(cp, me.pageSize) } } }) } private disableButton(element: any) { if (element.className.includes('ui-icon-disable')) { return } element.className = _.replace( element.className, 'ui-icon', 'ui-icon-disable' ) } private activeButton(element: any) { if ( !element.className.includes('ui-icon-disable') && element.className.includes('ui-icon') ) { return } element.className = _.replace( element.className, 'ui-icon-disable', 'ui-icon' ) } private refreshPageViewInfo() { if (this.grid.pagination) { if (this._itemCount > 0 && this._pageSize > 0) { this._pageCount = Math.ceil(this._itemCount / this._pageSize) } this.pageSizeDom.value = this._pageSize this.currenpageDom.value = this._currentPage this.gridpagerDom.innerText = this._pageCount if (this.currentPage <= 0) { this.itemcountDom.innerText = '0 - 0 共 0 条' } else { let min = (this.currentPage - 1) * this.pageSize + 1 let max = this.currentPage * this.pageSize if (min > this._itemCount) { min = this._itemCount } if (max > this._itemCount) { max = this._itemCount } this.itemcountDom.innerText = min + ' - ' + max + ' 共 ' + this.itemCount + ' 条' } if (this.currentPage > 1) { this.activeButton(this.firstButtomDom) this.activeButton(this.prevButtomDom) } else { this.disableButton(this.firstButtomDom) this.disableButton(this.prevButtomDom) } if (this.currentPage < this.pageCount) { this.activeButton(this.nextButtomDom) this.activeButton(this.lastButtomDom) } else { this.disableButton(this.nextButtomDom) this.disableButton(this.lastButtomDom) } } else { this.itemcountDom.innerText = '共 ' + this.itemCount + ' 条' } } /** * hidden */ public hidden() { $(this.dom[0]).css("display", "none"); } }