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