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