c-pages.vue 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <template>
  2. <div id="c-pages">
  3. <el-row justify="center" class="c-pages" v-loading="loading">
  4. <el-pagination
  5. background
  6. layout="total, prev, pager, next"
  7. :page-sizes="[10, 20, 50, 100, 200]"
  8. :total="total"
  9. :page-size="limit"
  10. v-model:current-page="currentPage"
  11. @current-change="changePage"
  12. @size-change="sizeChange"
  13. >
  14. </el-pagination>
  15. </el-row>
  16. </div>
  17. </template>
  18. <script setup lang="ts">
  19. // 基础
  20. import type { Ref } from 'vue';
  21. import { onMounted, ref, toRefs } from 'vue';
  22. const props = defineProps({
  23. total: { type: Number, default: () => 0 },
  24. limit: { type: Number, default: () => 10 }
  25. });
  26. const { total } = toRefs(props);
  27. const { limit } = toRefs(props);
  28. const emit = defineEmits(['toSelect', 'query']);
  29. // 加载中
  30. const loading: Ref<any> = ref(false);
  31. const currentPage: Ref<number> = ref(1);
  32. // 分页
  33. const changePage = (page: number = currentPage.value) => {
  34. emit('query', { skip: (page - 1) * limit.value, limit: limit.value });
  35. };
  36. const sizeChange = (limits: number) => {
  37. console.log(limits);
  38. };
  39. // 请求
  40. onMounted(async () => {
  41. loading.value = true;
  42. loading.value = false;
  43. });
  44. </script>
  45. <style scoped lang="scss"></style>