UNPKG

lixin-web

Version:

vue and bootstrap

167 lines (164 loc) 4.75 kB
(function($) { $.pagination = function(options) { var language = $.extend({}, $.pagination.language, options.language); var opts = $.extend({}, $.pagination.defaults, options); var render = $(opts.render); var page = 1, size = opts.pageSize; var load = function() { var data = opts.ajaxData; if($.isFunction(data)) { data = data(); } data = $.extend({}, data, {page: (page - 1) , size: size}); $.ajax({ type: opts.ajaxType, url: opts.ajaxUrl, data: data, dataType: 'json', beforeSend: opts.beforeSend, complete: opts.complete, success: function(response) { if(response.error == 0) { if(response.data.totalCount && response.data.totalCount > 0) { update(response.data.totalCount); if(response.data.list && response.data.list.length > 0) { opts.success(response.data.list); } else { if(page > 1) { page--; load(); } } } else { opts.emptyData(); render.empty(); } } else { opts.pageError(response); } } }); }; var update = function(totalCount) { if(totalCount == 0) return; var pageCount = Math.ceil(totalCount/size); var pagination = $('<div class="easyweb-pagination">'); var infos = $('<div class="infos">'); infos.append(language.infos.replace('${currPage}', '<span class="p">' + page + '</span>').replace('${totalPage}', '<span class="p">' + pageCount + '</span>').replace('${start}', '<span class="s">' + ((page - 1) * size + 1) + '</span>').replace('${end}', '<span class="e">' + (page * size > totalCount ? totalCount : page * size) + '</span>').replace('${total}', '<span class="t">' + totalCount + '</span>')); var pages = $('<div class="pages">'); pages.append($('<a class="top">').html(language.top)); pages.append($('<a class="prev">').html(language.prev)); var pageLength = opts.pageLength; if(pageCount < pageLength) { pageLength = pageCount; } var startPage = page - (Math.ceil(pageLength/2) - 1); var endPage = page + Math.floor(pageLength/2); if(startPage < 1) { startPage = 1; endPage = pageLength; }else if(endPage > pageCount) { startPage = pageCount - pageLength + 1; endPage = pageCount; } for (var i = startPage; i <= endPage; i++) { var thisPage = $('<a class="page">').html(i); if(i == page) { thisPage.addClass('selected'); } pages.append(thisPage); } pages.append($('<a class="next">').html(language.next)); pages.append($('<a class="end">').html(language.end)); pages.find('.page').click(function() { var idx = $(this).html(); idx = parseInt(idx); if(idx != page) { page = idx; load(); } }); pages.find('.top').click(function() { if(page > 1) { page = 1; load(); } }); pages.find('.prev').click(function() { if(page > 1) { page--; load(); } }); pages.find('.end').click(function() { if(page < pageCount) { page = pageCount; load(); } }); pages.find('.next').click(function() { if(page < pageCount) { page++; load(); } }); var go = $('<div class="go">').append($('<input type="text" />').val(page)).append($('<a class="btn-go">').html(language.go)); go.find('.btn-go').click(function() { var idx = go.find('input[type="text"]').val(); idx = parseInt(idx); if(idx > 0 && idx <= pageCount) { if(idx != page) { page = idx; load(); } } else { opts.pageError(language.msg); } }); if(!opts.hideInfos) { pagination.append(infos); } pagination.append(pages); if(!opts.hideGo) { pagination.append(go); } render.html(pagination); }; var init = function() { page = 1; load(); }; return { init: init, reload: load }; }; $.pagination.language = { //infos: '当前第${currPage}/${totalPage}页,显示${start}至${end}条数据,总计${total}条数据。', infos: '记录总数:${total},页数:${currPage}/${totalPage}', top: '首页', end: '尾页', prev: '上一页', next: '下一页', go: '搜索', msg: '请输入正确的页数。' }; $.pagination.defaults = { render: '.pagination', hideInfos: false, hideGo: false, pageLength: 6, pageSize: 10, ajaxType: 'post', ajaxUrl: '', ajaxData: {}, beforeSend: function() {}, complete: function() {}, success: function(list) {}, pageError: function(response) { alert(response.message); }, emptyData: function() { } }; })(jQuery);