| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- /**
- * Paging 组件
- * @description 基于laytpl 、laypage、layer 封装的组件
- *
- * @license MIT
- * @version 1.0.1
- */
- layui.define(['layer', 'laypage', 'laytpl'], function(exports) {
- "use strict";
- var $ = layui.jquery,
- layer = parent.layui.layer === undefined ? layui.layer : parent.layui.layer,
- laytpl = layui.laytpl;
- var Paging = function() {
- this.config = {
- url: undefined, //数据远程地址
- type: 'POST', //数据的获取方式 get or post
- elem: undefined, //内容容器
- params: {}, //获取数据时传递的额外参数
- openWait: false, //加载数据时是否显示等待框
- tempElem: undefined, //模板容器
- tempType: 0,
- paged: true,
- pageConfig: { //参数应该为object类型
- elem: undefined,
- pageSize: 15 //分页大小
- },
- success: undefined, //type:function
- fail: undefined, //type:function
- complate: undefined, //type:function
- serverError: function(xhr, status, error) { //ajax的服务错误
- throwError("错误提示: " + xhr.status + " " + xhr.statusText);
- }
- };
- };
- /**
- * 版本号
- */
- Paging.prototype.v = '1.0.2';
- /**
- * 设置
- * @param {Object} options
- */
- Paging.prototype.set = function(options) {
- var that = this;
- $.extend(true, that.config, options);
- return that;
- };
- /**
- * 初始化
- * @param {Object} options
- */
- Paging.prototype.init = function(options) {
- var that = this;
- $.extend(true, that.config, options);
- var _config = that.config;
- if(_config.url === undefined) {
- throwError('Paging Error:请配置远程URL!');
- }
- if(_config.elem === undefined) {
- throwError('Paging Error:请配置参数elem!');
- }
- if($(_config.elem).length === 0) {
- throwError('Paging Error:找不到配置的容器elem!');
- }
- if(_config.tempType === 0) {
- if(_config.tempElem === undefined) {
- throwError('Paging Error:请配置参数tempElem!');
- }
- if($(_config.tempElem).length === 0) {
- throwError('Paging Error:找不到配置的容器tempElem!');
- }
- }
- if(_config.paged) {
- var _pageConfig = _config.pageConfig;
- if(_pageConfig.elem === undefined) {
- throwError('Paging Error:请配置参数pageConfig.elem!');
- }
- }
- if(_config.type.toUpperCase() !== 'GET' && _config.type.toUpperCase() !== 'POST') {
- throwError('Paging Error:type参数配置出错,只支持GET或都POST');
- }
- that.get({
- pageIndex: 1,
- pageSize: _config.pageConfig.pageSize
- });
- return that;
- };
- /**
- * 获取数据
- * @param {Object} options
- */
- Paging.prototype.get = function(options) {
- var that = this;
- var _config = that.config;
- var loadIndex = undefined;
- if(_config.openWait) {
- loadIndex = layer.load(2);
- }
- //默认参数
- var df = {
- pageIndex: 1,
- pageSize: _config.pageConfig.pageSize
- };
- $.extend(true, _config.params, df, options);
- $.ajax({
- type: _config.type,
- url: _config.url,
- data: _config.params,
- dataType: 'json',
- success: function(result, status, xhr) {
- if(result.code === 0) {
- //获取模板
- var tpl = _config.tempType === 0 ? $(_config.tempElem).html(): _config.tempElem;
- //渲染数据
- laytpl(tpl).render(result, function(html) {
- $(_config.elem).html(html);
- });
- if(_config.paged) {
- if(result.count === null || result.count === 0) {
- throwError('Paging Error:请返回数据总数!');
- return;
- }
- var _pageConfig = _config.pageConfig;
- var pageSize = _pageConfig.pageSize;
- var pages = result.count % pageSize == 0 ?
- (result.count / pageSize) : (result.count / pageSize + 1);
- var defaults = {
- cont: $(_pageConfig.elem),
- curr: _config.params.pageIndex,
- pages: pages,
- jump: function(obj, first) {
- //得到了当前页,用于向服务端请求对应数据
- var curr = obj.curr;
- if(!first) {
- that.get({
- pageIndex: curr,
- pageSize: pageSize
- });
- }
- }
- };
- $.extend(defaults, _pageConfig); //参数合并
- layui.laypage(defaults);
- }
- if(_config.success) {
- _config.success(); //渲染成功
- }
- } else {
- if(_config.fail) {
- _config.fail(result.msg); //获取数据失败
- }
- }
- if(_config.complate) {
- _config.complate(); //渲染完成
- }
- if(loadIndex !== undefined)
- layer.close(loadIndex); //关闭等待层
- },
- error: function(xhr, status, error) {
- if(loadIndex !== undefined)
- layer.close(loadIndex); //关闭等待层
- _config.serverError(xhr, status, error); //服务器错误
- }
- });
- };
- /**
- * 抛出一个异常错误信息
- * @param {String} msg
- */
- function throwError(msg) {
- throw new Error(msg);
- };
- var paging = new Paging();
- exports('paging', function(options) {
- return paging.set(options);
- });
- });
|