index.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <template>
  2. <el-pagination
  3. class="cip-pagination"
  4. :class="{'cip-pagination__compact':compact}"
  5. background
  6. @size-change="handleSizeChange"
  7. @current-change="handlePageChange"
  8. :layout="layout"
  9. :total="total"
  10. :current-page="currentPage"
  11. :page-sizes="usingPageSizes"
  12. :page-size="limit"
  13. :hide-on-single-page="hideOnSinglePage"
  14. />
  15. </template>
  16. <script>
  17. import { defineComponent, computed } from 'vue'
  18. import { ElPagination } from 'element-plus'
  19. import { useCipConfig } from '../hooks/use-cip-config'
  20. import { getUsingConfig } from '@cip/utils/util'
  21. export default defineComponent({
  22. name: 'CipPagination',
  23. components: { ElPagination },
  24. props: {
  25. currentPage: { type: Number, default: 1 },
  26. total: { type: Number, default: 0 },
  27. limit: { type: Number, default: 10 },
  28. offset: { type: Number, default: 0 },
  29. hideOnSinglePage: { type: Boolean },
  30. layout: { type: String, default: 'total, sizes, prev, pager, next, jumper' },
  31. pageSizes: {
  32. type: Array,
  33. default: () => [5, 8, 10, 15, 20]
  34. }
  35. },
  36. emits: ['update:limit', 'update:offset', 'refresh'],
  37. setup (props, context) {
  38. // 每页条数变化事件
  39. const handleSizeChange = (size) => {
  40. const offset = 0 // (props.currentPage - 1) * size
  41. context.emit('update:limit', size)
  42. context.emit('update:offset', offset)
  43. context.emit('refresh')
  44. }
  45. // 当前页变化事件
  46. const handlePageChange = (page) => {
  47. const offset = (page - 1) * props.limit
  48. context.emit('update:offset', offset)
  49. context.emit('refresh', offset)
  50. }
  51. // 样式模式
  52. const cipConfig = useCipConfig()
  53. const usingPageSizes = computed(() => {
  54. return getUsingConfig(props.pageSizes, cipConfig.pageSizes)
  55. })
  56. const compact = computed(() => {
  57. return cipConfig.paginationCompact ?? ''
  58. })
  59. return {
  60. handleSizeChange,
  61. handlePageChange,
  62. compact,
  63. usingPageSizes
  64. }
  65. }
  66. })
  67. </script>
  68. <style lang="less">
  69. // el-pagination 组件样式与数据中台统一
  70. // el-pagination 紧凑型样式(数据中台)
  71. .cip-pagination{
  72. .btn-prev,.btn-next{
  73. i{
  74. margin: 0 auto;
  75. }
  76. }
  77. }
  78. .cip-pagination__compact{
  79. &.el-pagination.is-background{
  80. .btn-prev,.btn-next{
  81. margin: 0;
  82. background: #fff;
  83. }
  84. .btn-prev{
  85. border: 1px solid rgb(217, 217, 217);
  86. border-right:none;
  87. border-radius: 0;
  88. }
  89. .btn-next{
  90. border: 1px solid rgb(217, 217, 217);
  91. border-radius: 0;
  92. }
  93. .el-pager li:not(.disabled).number.active{
  94. background: #ecf5ff;
  95. color: @primary;
  96. }
  97. .el-pager li.more{
  98. background: #fff;
  99. border: 1px solid rgb(217, 217, 217);
  100. border-right:none;
  101. border-radius: 0;
  102. margin: 0;
  103. color: #a6a6a6;
  104. }
  105. .el-pager{
  106. .number{
  107. background: #fff;
  108. border: 1px solid rgb(217, 217, 217);
  109. border-right:none;
  110. border-radius: 0;
  111. margin: 0;
  112. color: #a6a6a6;
  113. }
  114. }
  115. }
  116. }
  117. </style>