page.ejs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <style>
  2. ul.pagination {
  3. text-align: center!important;
  4. justify-content: center!important;
  5. }
  6. </style>
  7. <nav aria-label="Page navigation example">
  8. <ul class="pagination pagination-sm">
  9. </ul>
  10. </nav>
  11. <script type="text/javascript" src="/public/js/bootstrap/bootstrap-paginator.js"></script>
  12. <script type="text/javascript">
  13. let options = {
  14. bootstrapMajorVersion: 4,
  15. currentPage: "<%= pageInfo.page %>",
  16. totalPages: "<%= pageInfo.total %>",
  17. numberOfPages: 5,
  18. size: "small",
  19. itemContainerClass: function(type, page, current) {
  20. let className = 'page-item';
  21. this.currentPage = parseInt(this.currentPage);
  22. this.totalPages = parseInt(this.totalPages);
  23. switch (type) {
  24. case "first":
  25. className = this.currentPage === 1 ? className + ' disabled' : className;
  26. break;
  27. case "prev":
  28. className = this.currentPage === 1 ? className + ' disabled' : className;
  29. break;
  30. case "next":
  31. className = this.currentPage === this.totalPages ? className + ' disabled' : className;
  32. break;
  33. case "last":
  34. className = this.currentPage === this.totalPages ? className + ' disabled' : className;
  35. break;
  36. case "page":
  37. className = page === this.currentPage ? className + ' active' : className;
  38. break;
  39. }
  40. return className;
  41. },
  42. itemContentClass: function(type, page, current) {
  43. return 'page-link';
  44. },
  45. itemTexts: function(type, page, current) {
  46. switch (type) {
  47. case "first":
  48. return '<i class="fa fa-caret-left"></i>';
  49. case "prev":
  50. return '<i class="fa fa-angle-left"></i>';
  51. case "next":
  52. return '<i class="fa fa-angle-right"></i>';
  53. case "last":
  54. return '<i class="fa fa-caret-right"></i>';
  55. case "page":
  56. return page;
  57. case "more":
  58. return '...';
  59. }
  60. },
  61. shouldShowPage: function (type, page, current) {
  62. let result = true;
  63. switch (type) {
  64. case "first":
  65. break;
  66. case "prev":
  67. break;
  68. case "next":
  69. break;
  70. case "last":
  71. break;
  72. case "page":
  73. break;
  74. case "more":
  75. result = (page !== this.totalPages);
  76. break;
  77. }
  78. return result;
  79. },
  80. pageUrl: function(type, page, current){
  81. let queryData = JSON.parse('<%- pageInfo.queryData %>');
  82. <% if (pageInfo.pageSizeCacheKey) { %>
  83. queryData.pageSize = <%- pageInfo.pageSize %>;
  84. <% } %>
  85. // 如果没有附带查询条件则直接返回
  86. if (Object.keys(queryData).length <= 0) {
  87. return "?page=" + page;
  88. }
  89. // 有其它数据则重新赋值page,然后组合字符串
  90. queryData.page = page;
  91. let queryArray = [];
  92. for(let tmp in queryData) {
  93. let tempString = tmp + '=' + queryData[tmp];
  94. queryArray.push(tempString);
  95. }
  96. let firstQuery = queryArray.shift();
  97. let queryString = queryArray.join('&');
  98. return queryString === '' ? '?' + firstQuery : '?' + firstQuery + '&' + queryString;
  99. }
  100. };
  101. const pageSizeSelect = <%- pageInfo.pageSizeSelect ? parseInt(pageInfo.pageSizeSelect) : 0 %>;
  102. if (options.totalPages > 1 || pageSizeSelect) {
  103. $(".pagination").bootstrapPaginator(options);
  104. setSelectPageSize(pageSizeSelect);
  105. } else {
  106. $(".pagination").hide();
  107. }
  108. function setSelectPageSize(psSelect) {
  109. if (psSelect === 1) {
  110. let queryData = JSON.parse('<%- pageInfo.queryData %>');
  111. // 有其它数据则重新赋值page,然后组合字符串
  112. delete queryData.page;
  113. delete queryData.pageSize;
  114. let queryArray = [];
  115. for(let tmp in queryData) {
  116. let tempString = tmp + '=' + queryData[tmp];
  117. queryArray.push(tempString);
  118. }
  119. let firstQuery = queryArray.shift();
  120. let queryString = queryArray.join('&');
  121. queryString = firstQuery ? (queryString === '' ? '?' + firstQuery : '?' + firstQuery + '&' + queryString) : '';
  122. const pshtml = '<li class="page-item disabled">\n' +
  123. ' <span class="page-link" >共' + <%- pageInfo.total_num %> + '条</span>\n' +
  124. ' </li>\n' +
  125. ' <li class="page-item">\n' +
  126. ' <span class="page-link" >\n' +
  127. ' <div class="btn-group">\n' +
  128. ' <a type="button" class="text-primary dropdown-toggle" data-toggle="dropdown" id="zhankai" >每页' + <%- pageInfo.pageSize %> + '条</a>\n' +
  129. ' <div class="dropdown-menu" id="zhankaiSelect" aria-labelledby="zhankai" style="">\n' +
  130. ' <a class="dropdown-item" data-size="15" href="'+ (queryString === '' ? '?pageSize=15' : queryString + '&pageSize=15') +'">每页15条</a>\n' +
  131. ' <a class="dropdown-item" data-size="30" href="'+ (queryString === '' ? '?pageSize=30' : queryString + '&pageSize=30') +'">每页30条</a>\n' +
  132. ' <a class="dropdown-item" data-size="50" href="'+ (queryString === '' ? '?pageSize=50' : queryString + '&pageSize=50') +'">每页50条</a>\n' +
  133. ' <a class="dropdown-item" data-size="100" href="'+ (queryString === '' ? '?pageSize=100' : queryString + '&pageSize=100') +'">每页100条</a>\n' +
  134. ' </div>\n' +
  135. ' </div>\n' +
  136. ' </span>\n' +
  137. ' </li>';
  138. $('.pagination').prepend(pshtml);
  139. }
  140. }
  141. $('#zhankaiSelect a').on('click', function () {
  142. try {
  143. setLocalCache(<%- JSON.stringify(pageInfo.pageSizeCacheKey || 'account-pageSize') %>, $(this).data('size'));
  144. } catch (err) {
  145. // 本地存储不可用时,仍可通过链接切换本次每页条数。
  146. }
  147. })
  148. </script>