index.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <template>
  2. <el-pagination
  3. class="cip-pagination"
  4. :class="{'cip-pagination__compact':compact}"
  5. :background="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. background: { type: Boolean, default: true },
  32. pageSizes: {
  33. type: Array,
  34. default: () => [5, 8, 10, 15, 20]
  35. }
  36. },
  37. emits: ['update:limit', 'update:offset', 'refresh'],
  38. setup (props, context) {
  39. // 每页条数变化事件
  40. const handleSizeChange = (size) => {
  41. const offset = 0 // (props.currentPage - 1) * size
  42. context.emit('update:limit', size)
  43. context.emit('update:offset', offset)
  44. context.emit('refresh')
  45. }
  46. // 当前页变化事件
  47. const handlePageChange = (page) => {
  48. const offset = (page - 1) * props.limit
  49. context.emit('update:offset', offset)
  50. context.emit('refresh', offset)
  51. }
  52. // 样式模式
  53. const cipConfig = useCipConfig()
  54. const usingPageSizes = computed(() => {
  55. return getUsingConfig(props.pageSizes, cipConfig.pageSizes)
  56. })
  57. const compact = computed(() => {
  58. return cipConfig.paginationCompact ?? ''
  59. })
  60. return {
  61. handleSizeChange,
  62. handlePageChange,
  63. compact,
  64. usingPageSizes
  65. }
  66. }
  67. })
  68. </script>
  69. <style lang="less">
  70. // el-pagination 组件样式与数据中台统一
  71. // el-pagination 紧凑型样式(数据中台)
  72. .cip-pagination{
  73. .btn-prev,.btn-next{
  74. i{
  75. margin: 0 auto;
  76. }
  77. }
  78. }
  79. .cip-pagination__compact{
  80. &.el-pagination.is-background{
  81. .btn-prev,.btn-next{
  82. margin: 0;
  83. background: #fff;
  84. }
  85. .btn-prev{
  86. border: 1px solid rgb(217, 217, 217);
  87. border-right:none;
  88. border-radius: 0;
  89. }
  90. .btn-next{
  91. border: 1px solid rgb(217, 217, 217);
  92. border-radius: 0;
  93. }
  94. .el-pager li:not(.disabled).number.active{
  95. background: #ecf5ff;
  96. color: @primary;
  97. }
  98. .el-pager li.more{
  99. background: #fff;
  100. border: 1px solid rgb(217, 217, 217);
  101. border-right:none;
  102. border-radius: 0;
  103. margin: 0;
  104. color: #a6a6a6;
  105. }
  106. .el-pager{
  107. .number{
  108. background: #fff;
  109. border: 1px solid rgb(217, 217, 217);
  110. border-right:none;
  111. border-radius: 0;
  112. margin: 0;
  113. color: #a6a6a6;
  114. }
  115. }
  116. }
  117. }
  118. </style>