mirror of
				https://gitee.com/hhyykk/ipms-sjy-ui.git
				synced 2025-11-04 20:28:45 +08:00 
			
		
		
		
	vue3 重构:增加操作栏、搜索栏
This commit is contained in:
		
							
								
								
									
										107
									
								
								src/components/Pagination/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								src/components/Pagination/index.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,107 @@
 | 
			
		||||
<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>
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
// TODO 芋艿:ts 重写
 | 
			
		||||
// TODO 芋艿:scrollTo 接入
 | 
			
		||||
// 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>
 | 
			
		||||
 | 
			
		||||
<style scoped>
 | 
			
		||||
.pagination-container {
 | 
			
		||||
  background: #fff;
 | 
			
		||||
  padding: 32px 16px;
 | 
			
		||||
}
 | 
			
		||||
.pagination-container.hidden {
 | 
			
		||||
  display: none;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
		Reference in New Issue
	
	Block a user