index.vue 1.11 KB
<script setup lang="ts">
import { defineEmits } from "vue";

// 每个属性都必传,不带默认值
// defineProps<{
//   total: number;
//   currentPage: number;
//   pageSizes: number[];
//   pageSize: number;
// }>();

// 可以带默认值
interface Props {
  total: number;
  pageSizes?: number[];
  pageSize?: number;
  currentPage?: number;
  tagName?: string
}
const props = withDefaults(defineProps<Props>(), {
  total: 0,
  pageSizes: () => [10, 20, 50, 100],
  pageSize: 10,
  currentPage: 1,
});


const handleSizeChange = (val) => {
  emit("pageChange", props.currentPage, val, props.tagName)
}
const handleCurrentChange = (val) => {
  emit('pageChange', val, props.pageSize, props.tagName)
}
const emit= defineEmits<{
  (e: 'pageChange', curPage: number, curSize: number, tagName: string): void
}>()
</script>

<template>
  <el-pagination
    v-model:currentPage="currentPage"
    :page-sizes="pageSizes"
    :page-size="pageSize"
    layout="total, sizes, prev, pager, next, jumper"
    :total="total"
    @size-change="handleSizeChange"
    @current-change="handleCurrentChange"
  >
  </el-pagination>
</template>