pageList.vue 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <script setup lang="ts">
  2. import { ref, reactive, computed } from "vue";
  3. import { VxeTableBar } from "@/components/ReVxeTableBar";
  4. const vxeTableRef = ref();
  5. const loading = ref(true);
  6. const tableData = ref([]);
  7. const getTableHeight = computed(() => {
  8. return (size: string) => {
  9. switch (size) {
  10. case "medium":
  11. return 531;
  12. case "small":
  13. return 482;
  14. case "mini":
  15. return 433;
  16. }
  17. };
  18. });
  19. const pagerConfig = reactive({
  20. total: 0,
  21. currentPage: 1,
  22. pageSize: 10,
  23. pageSizes: [5, 10, 15, 20]
  24. });
  25. const columns = [
  26. { type: "seq", field: "seq", title: "序号", width: 100 },
  27. { field: "name", title: "名称", sortable: true },
  28. { field: "role", title: "角色" },
  29. { field: "sex", title: "性别" }
  30. ];
  31. async function onSearch() {
  32. loading.value = true;
  33. // 模拟数据
  34. const mockList = [];
  35. for (let index = 0; index < 10; index++) {
  36. mockList.push({
  37. id: index,
  38. name: "Test" + index,
  39. role: "Developer",
  40. sex: "男"
  41. });
  42. }
  43. pagerConfig.total = 20;
  44. tableData.value = mockList;
  45. setTimeout(() => {
  46. loading.value = false;
  47. }, 500);
  48. }
  49. const handlePageChange = ({ currentPage, pageSize }) => {
  50. pagerConfig.currentPage = currentPage;
  51. pagerConfig.pageSize = pageSize;
  52. onSearch();
  53. };
  54. onSearch();
  55. </script>
  56. <template>
  57. <VxeTableBar
  58. :vxeTableRef="vxeTableRef"
  59. :columns="columns"
  60. title="分页表格"
  61. @refresh="onSearch"
  62. >
  63. <template v-slot="{ size, dynamicColumns }">
  64. <vxe-grid
  65. ref="vxeTableRef"
  66. v-loading="loading"
  67. show-overflow
  68. :height="getTableHeight(size)"
  69. :size="size"
  70. :column-config="{ resizable: true }"
  71. :columns="dynamicColumns"
  72. :pagerConfig="pagerConfig"
  73. :data="tableData"
  74. @page-change="handlePageChange"
  75. />
  76. </template>
  77. </VxeTableBar>
  78. </template>