From e181f04c642204e79749af93fa921875ff6c21ba Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期二, 20 五月 2025 10:46:35 +0800 Subject: [PATCH] refactor(qms): 重构趋势图展示逻辑 --- src/components/Pagination/index.vue | 118 ++++++++++++++++++++++------------------------------------- 1 files changed, 44 insertions(+), 74 deletions(-) diff --git a/src/components/Pagination/index.vue b/src/components/Pagination/index.vue index 40bc584..ac02193 100644 --- a/src/components/Pagination/index.vue +++ b/src/components/Pagination/index.vue @@ -1,114 +1,84 @@ +<template> + <div :class="{ hidden: hidden }" class="pagination-container"> + <el-pagination + v-model:current-page="currentPage" + v-model:page-size="pageSize" + :background="background" + :layout="layout" + :page-sizes="pageSizes" + :pager-count="pagerCount" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> +</template> + <script lang="ts"> export default { name: 'Pagination' -} +}; </script> <script setup lang="ts"> -import { scrollTo } from '@/utils/scroll-to' -import { PropType } from "vue"; +import { scrollTo } from '@/utils/scroll-to'; +import { propTypes } from '@/utils/propTypes'; const props = defineProps({ - total: { - required: true, - type: Number - }, - page: { - type: Number, - default: 1 - }, - limit: { - type: Number, - default: 20 - }, + total: propTypes.number, + page: propTypes.number.def(1), + limit: propTypes.number.def(20), pageSizes: { - type: Array as PropType<number[]>, - default() { - return [10, 20, 30, 50] - } + type: Array, + default: () => [10, 20, 30, 50] }, // 绉诲姩绔〉鐮佹寜閽殑鏁伴噺绔粯璁ゅ��5 - 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 - }, - float: { - type: String, - default: 'right' - } -}) + pagerCount: propTypes.number.def(document.body.clientWidth < 992 ? 5 : 7), + layout: propTypes.string.def('total, sizes, prev, pager, next, jumper'), + background: propTypes.bool.def(true), + autoScroll: propTypes.bool.def(true), + hidden: propTypes.bool.def(false), + float: propTypes.string.def('right') +}); const emit = defineEmits(['update:page', 'update:limit', 'pagination']); const currentPage = computed({ get() { - return props.page + return props.page; }, set(val) { - emit('update:page', val) + emit('update:page', val); } -}) +}); const pageSize = computed({ get() { - return props.limit + return props.limit; }, - set(val){ - emit('update:limit', val) + set(val) { + emit('update:limit', val); } -}) +}); function handleSizeChange(val: number) { if (currentPage.value * val > props.total) { - currentPage.value = 1 + currentPage.value = 1; } - emit('pagination', { page: currentPage.value, limit: val }) + emit('pagination', { page: currentPage.value, limit: val }); if (props.autoScroll) { - scrollTo(0, 800) + scrollTo(0, 800); } } function handleCurrentChange(val: number) { - emit('pagination', { page: val, limit: pageSize.value }) + emit('pagination', { page: val, limit: pageSize.value }); if (props.autoScroll) { - scrollTo(0, 800) + scrollTo(0, 800); } } </script> -<template> - <div :class="{ 'hidden': 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" - @size-change="handleSizeChange" - @current-change="handleCurrentChange" - /> - </div> -</template> - <style lang="scss" scoped> .pagination-container { - background: #fff; padding: 32px 16px; - .el-pagination{ + .el-pagination { float: v-bind(float); } } -- Gitblit v1.9.3