重命名CubeListPager和CubeListToolbarSearch
Yann authored at 2025-07-28 22:53:20 Yann committed at 2025-07-28 23:04:14
2.69 KiB
cube-front
<!-- eslint-disable vue/multi-word-component-names -->
<script setup lang="ts">
interface Props {
  total?: number;
  pageSize?: number;
  currentPage?: number;
  pageSizes?: number[];
}

const props = withDefaults(defineProps<Props>(), {
  total: 1247,
  pageSize: 20,
  currentPage: 1,
  pageSizes: () => [10, 20, 50, 100],
});

const emit = defineEmits<{
  'update:currentPage': [page: number];
  'update:pageSize': [size: number];
}>();

function handleCurrentChange(page: number) {
  emit('update:currentPage', page);
}

function handleSizeChange(size: number) {
  emit('update:pageSize', size);
  emit('update:currentPage', 1);
}
</script>

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

<style lang="scss" scoped>
.list-pagination {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  background: var(--card);
  border: 1px solid var(--bd);
  border-radius: var(--r);
  box-shadow: var(--sh);
  padding: 10px 16px;
}

.lp-pagination {
  :deep(.el-pagination) {
    flex-wrap: wrap;
    justify-content: flex-end;
    gap: 8px 12px;
    font-family: 'Fira Sans', system-ui, sans-serif;
    color: var(--t3);
  }

  :deep(.el-pagination__total),
  :deep(.el-pagination__jump) {
    font-size: 13px;
    color: var(--t3);
  }

  :deep(.el-select .el-input__wrapper),
  :deep(.el-pagination__editor.el-input .el-input__wrapper) {
    border-radius: 6px;
    box-shadow: 0 0 0 1px var(--bd) inset;
    background: #fff;
  }

  :deep(.btn-prev),
  :deep(.btn-next),
  :deep(.el-pager li) {
    min-width: 32px;
    height: 32px;
    border-radius: 6px;
    border: 1px solid var(--bd);
    background: #fff;
    color: var(--t2);
    transition:
      background 0.13s var(--ease),
      border-color 0.13s var(--ease),
      color 0.13s var(--ease);
  }

  :deep(.btn-prev:disabled),
  :deep(.btn-next:disabled) {
    opacity: 0.4;
    background: #fff;
    border-color: var(--bd);
  }

  :deep(.btn-prev:not(:disabled):hover),
  :deep(.btn-next:not(:disabled):hover),
  :deep(.el-pager li:hover) {
    background: var(--ac-l);
    border-color: var(--ac-b);
    color: var(--ac);
  }

  :deep(.el-pager li.is-active) {
    background: var(--ac);
    border-color: var(--ac);
    color: #fff;
  }
}

@media (max-width: 768px) {
  .list-pagination {
    justify-content: flex-start;
  }

  .lp-pagination {
    width: 100%;

    :deep(.el-pagination) {
      justify-content: flex-start;
    }
  }
}
</style>