From 1a5d32ee47a086247dec5cd7f3fde28700c6b187 Mon Sep 17 00:00:00 2001 From: zhang_12370 <z2864490065@outlook.com> Date: 星期三, 02 七月 2025 20:39:41 +0800 Subject: [PATCH] 提交设备管理模块 --- src/components/Table/Pagination.vue | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 100 insertions(+), 0 deletions(-) diff --git a/src/components/Table/Pagination.vue b/src/components/Table/Pagination.vue new file mode 100644 index 0000000..7639e64 --- /dev/null +++ b/src/components/Table/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: 16px 0; + margin-top: 0; +} +.pagination-container.hidden { + display: none; +} +</style> \ No newline at end of file -- Gitblit v1.9.3