index.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. "use strict";
  2. exports.__esModule = true;
  3. exports["default"] = void 0;
  4. var _utils = require("../utils");
  5. var _use = (0, _utils.use)('pagination'),
  6. sfc = _use[0],
  7. bem = _use[1],
  8. t = _use[2];
  9. function makePage(number, text, active) {
  10. return {
  11. number: number,
  12. text: text,
  13. active: active
  14. };
  15. }
  16. var _default = sfc({
  17. props: {
  18. value: Number,
  19. prevText: String,
  20. nextText: String,
  21. pageCount: Number,
  22. totalItems: Number,
  23. forceEllipses: Boolean,
  24. mode: {
  25. type: String,
  26. "default": 'multi'
  27. },
  28. itemsPerPage: {
  29. type: Number,
  30. "default": 10
  31. },
  32. showPageSize: {
  33. type: Number,
  34. "default": 5
  35. }
  36. },
  37. computed: {
  38. count: function count() {
  39. var count = this.pageCount || Math.ceil(this.totalItems / this.itemsPerPage);
  40. return Math.max(1, count);
  41. },
  42. pages: function pages() {
  43. var pages = [];
  44. var pageCount = this.count;
  45. if (this.mode !== 'multi') {
  46. return pages;
  47. } // Default page limits
  48. var startPage = 1;
  49. var endPage = pageCount;
  50. var isMaxSized = this.showPageSize !== undefined && this.showPageSize < pageCount; // recompute if showPageSize
  51. if (isMaxSized) {
  52. // Current page is displayed in the middle of the visible ones
  53. startPage = Math.max(this.value - Math.floor(this.showPageSize / 2), 1);
  54. endPage = startPage + this.showPageSize - 1; // Adjust if limit is exceeded
  55. if (endPage > pageCount) {
  56. endPage = pageCount;
  57. startPage = endPage - this.showPageSize + 1;
  58. }
  59. } // Add page number links
  60. for (var number = startPage; number <= endPage; number++) {
  61. var page = makePage(number, number, number === this.value);
  62. pages.push(page);
  63. } // Add links to move between page sets
  64. if (isMaxSized && this.showPageSize > 0 && this.forceEllipses) {
  65. if (startPage > 1) {
  66. var previousPageSet = makePage(startPage - 1, '...', false);
  67. pages.unshift(previousPageSet);
  68. }
  69. if (endPage < pageCount) {
  70. var nextPageSet = makePage(endPage + 1, '...', false);
  71. pages.push(nextPageSet);
  72. }
  73. }
  74. return pages;
  75. }
  76. },
  77. watch: {
  78. value: {
  79. handler: function handler(page) {
  80. this.select(page || this.value);
  81. },
  82. immediate: true
  83. }
  84. },
  85. methods: {
  86. select: function select(page) {
  87. page = Math.min(this.count, Math.max(1, page));
  88. if (this.value !== page) {
  89. this.$emit('input', page);
  90. this.$emit('change', page);
  91. }
  92. }
  93. },
  94. render: function render(h) {
  95. var _this = this;
  96. var value = this.value;
  97. var simple = this.mode !== 'multi';
  98. var onSelect = function onSelect(value) {
  99. return function () {
  100. _this.select(value);
  101. };
  102. };
  103. return h("ul", {
  104. "class": bem({
  105. simple: simple
  106. })
  107. }, [h("li", {
  108. "class": [bem('item', {
  109. disabled: value === 1
  110. }), bem('prev'), 'van-hairline'],
  111. "on": {
  112. "click": onSelect(value - 1)
  113. }
  114. }, [this.prevText || t('prev')]), this.pages.map(function (page) {
  115. return h("li", {
  116. "class": [bem('item', {
  117. active: page.active
  118. }), bem('page'), 'van-hairline'],
  119. "on": {
  120. "click": onSelect(page.number)
  121. }
  122. }, [page.text]);
  123. }), simple && h("li", {
  124. "class": bem('page-desc')
  125. }, [this.slots('pageDesc') || value + "/" + this.count]), h("li", {
  126. "class": [bem('item', {
  127. disabled: value === this.count
  128. }), bem('next'), 'van-hairline'],
  129. "on": {
  130. "click": onSelect(value + 1)
  131. }
  132. }, [this.nextText || t('next')])]);
  133. }
  134. });
  135. exports["default"] = _default;