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 | 149 ++++++++++++++++++++++--------------------------- 1 files changed, 66 insertions(+), 83 deletions(-) diff --git a/src/components/Pagination/index.vue b/src/components/Pagination/index.vue index 38de953..ac02193 100644 --- a/src/components/Pagination/index.vue +++ b/src/components/Pagination/index.vue @@ -1,9 +1,9 @@ <template> - <div :class="{ 'hidden': hidden }" class="pagination-container"> + <div :class="{ hidden: hidden }" class="pagination-container"> <el-pagination - :background="background" v-model:current-page="currentPage" v-model:page-size="pageSize" + :background="background" :layout="layout" :page-sizes="pageSizes" :pager-count="pagerCount" @@ -14,92 +14,75 @@ </div> </template> -<script setup> -import { scrollTo } from '@/utils/scroll-to' - -const props = defineProps({ - total: { - required: true, - type: Number - }, - page: { - type: Number, - default: 1 - }, - limit: { - type: Number, - default: 20 - }, - pageSizes: { - type: Array, - default() { - return [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 - } -}) - -const emit = defineEmits(); -const currentPage = computed({ - get() { - return props.page - }, - set(val) { - emit('update:page', val) - } -}) -const pageSize = computed({ - get() { - return props.limit - }, - set(val){ - emit('update:limit', val) - } -}) -function handleSizeChange(val) { - if (currentPage.value * val > props.total) { - currentPage.value = 1 - } - emit('pagination', { page: currentPage.value, limit: val }) - if (props.autoScroll) { - scrollTo(0, 800) - } -} -function handleCurrentChange(val) { - emit('pagination', { page: val, limit: pageSize.value }) - if (props.autoScroll) { - scrollTo(0, 800) - } -} - +<script lang="ts"> +export default { + name: 'Pagination' +}; </script> -<style scoped> +<script setup lang="ts"> +import { scrollTo } from '@/utils/scroll-to'; +import { propTypes } from '@/utils/propTypes'; + +const props = defineProps({ + total: propTypes.number, + page: propTypes.number.def(1), + limit: propTypes.number.def(20), + pageSizes: { + type: Array, + default: () => [10, 20, 30, 50] + }, + // 绉诲姩绔〉鐮佹寜閽殑鏁伴噺绔粯璁ゅ��5 + 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; + }, + set(val) { + emit('update:page', val); + } +}); +const pageSize = computed({ + get() { + return props.limit; + }, + set(val) { + emit('update:limit', val); + } +}); +function handleSizeChange(val: number) { + if (currentPage.value * val > props.total) { + currentPage.value = 1; + } + emit('pagination', { page: currentPage.value, limit: val }); + if (props.autoScroll) { + scrollTo(0, 800); + } +} +function handleCurrentChange(val: number) { + emit('pagination', { page: val, limit: pageSize.value }); + if (props.autoScroll) { + scrollTo(0, 800); + } +} +</script> + +<style lang="scss" scoped> .pagination-container { - background: #fff; padding: 32px 16px; + .el-pagination { + float: v-bind(float); + } } .pagination-container.hidden { display: none; } -</style> \ No newline at end of file +</style> -- Gitblit v1.9.3