ExtPage.vue 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <template>
  2. <el-row style="margin-top: 8px;">
  3. <el-col :span="24">
  4. <el-pagination
  5. :current-page="state.page.pageNum"
  6. :page-size="state.page.pageSize"
  7. :page-sizes="[10, 20, 50, 100]"
  8. :small="true"
  9. :background="true"
  10. layout="total, sizes, prev, pager, next"
  11. :total="state.page.total"
  12. @size-change="handleSizeChange"
  13. @current-change="handleCurrentChange"
  14. />
  15. </el-col>
  16. </el-row>
  17. </template>
  18. <script setup lang="ts" name="ExtPage">
  19. import {reactive, onMounted, nextTick,watch} from 'vue';
  20. const emit = defineEmits(['change', 'update:value']);
  21. const props = defineProps({
  22. value: {
  23. type: Object,
  24. default: () => {
  25. }
  26. },
  27. })
  28. const state = reactive({
  29. page: {
  30. pageNum: 1,
  31. pageSize: 20,
  32. total: 0
  33. } as IPage
  34. })
  35. // 监听双向绑定值改变,用于回显
  36. watch(
  37. () => props.value,
  38. (val, oldVal) => {
  39. setupPage();
  40. },
  41. {deep: true,}
  42. );
  43. onMounted(() => {
  44. nextTick(() => {
  45. setupPage();
  46. })
  47. })
  48. const setupPage = () => {
  49. if (props.value) {
  50. state.page.pageNum = props.value.pageIndex;
  51. state.page.pageSize = props.value.pageSize;
  52. state.page.total = props.value.total;
  53. }
  54. }
  55. const handleSizeChange = (val: number) => {
  56. state.page.pageSize = val;
  57. emit("update:value", state.page)
  58. emit("change", state.page)
  59. console.log(`${val} items per page`)
  60. }
  61. const handleCurrentChange = (val: number) => {
  62. state.page.pageNum = val;
  63. emit("update:value", state.page)
  64. emit("change", state.page)
  65. console.log(`current page: ${val}`)
  66. }
  67. </script>