From e0430e0b25d759f6505a4e4542562a69c93b1db5 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期三, 07 五月 2025 17:38:29 +0800
Subject: [PATCH] 客户档案页面开发

---
 src/components/PIMTable/Pagination.vue |  100 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 100 insertions(+), 0 deletions(-)

diff --git a/src/components/PIMTable/Pagination.vue b/src/components/PIMTable/Pagination.vue
new file mode 100644
index 0000000..26d4dbc
--- /dev/null
+++ b/src/components/PIMTable/Pagination.vue
@@ -0,0 +1,100 @@
+<template>
+  <div :class="{ hidden }" class="pagination-container">
+    <el-pagination
+      :background="background"
+      v-model:current-page="currentPage"
+      v-model:page-size="pageSize"
+      :layout="layout"
+      :page-sizes="pageSizes"
+      :pager-count="pagerCount"
+      :total="total"
+      v-bind="$attrs"
+      @size-change="handleSizeChange"
+      @current-change="handleCurrentChange"
+    />
+  </div>
+</template>
+
+<script setup>
+import { computed } from 'vue'
+import { scrollTo } from '@/utils/scroll-to'
+
+const props = defineProps({
+  total: {
+    type: Number,
+    required: true
+  },
+  page: {
+    type: Number,
+    default: 1
+  },
+  limit: {
+    type: Number,
+    default: 20
+  },
+  pageSizes: {
+    type: Array,
+    default: () => [10, 20, 30, 50, 100]
+  },
+  pagerCount: {
+    type: Number,
+    default: () => (document.body.clientWidth < 992 ? 5 : 7)
+  },
+  layout: {
+    type: String,
+    default: 'total, sizes, prev, pager, next, jumper'
+  },
+  background: {
+    type: Boolean,
+    default: true
+  },
+  autoScroll: {
+    type: Boolean,
+    default: true
+  },
+  hidden: {
+    type: Boolean,
+    default: false
+  }
+})
+
+const emit = defineEmits(['update:page', 'update:limit', 'pagination'])
+
+const currentPage = computed({
+  get: () => props.page,
+  set: (val) => emit('update:page', val)
+})
+
+const pageSize = computed({
+  get: () => props.limit,
+  set: (val) => emit('update:limit', val)
+})
+
+const handleSizeChange = (val) => {
+  if (currentPage.value * val > props.total) {
+    currentPage.value = 1
+  }
+  emit('pagination', { page: currentPage.value, limit: val })
+  if (props.autoScroll) {
+    scrollTo(0, 800)
+  }
+}
+
+const handleCurrentChange = (val) => {
+  emit('pagination', { page: val, limit: pageSize.value })
+  if (props.autoScroll) {
+    scrollTo(0, 800)
+  }
+}
+</script>
+
+<style scoped>
+.pagination-container {
+  background: #fff;
+  padding: 28px 16px;
+  margin-top: 10px;
+}
+.pagination-container.hidden {
+  display: none;
+}
+</style>
\ No newline at end of file

--
Gitblit v1.9.3