From 771baa66ee34812691b8a28047e702113aeada42 Mon Sep 17 00:00:00 2001 From: yangjianbo Date: Sun, 18 Jan 2026 14:31:22 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E7=95=8C=E9=9D=A2):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=88=86=E9=A1=B5=E8=B7=B3=E8=BD=AC=E4=B8=8E=E9=A1=B5=E5=A4=A7?= =?UTF-8?q?=E5=B0=8F=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 分页组件支持隐藏每页条数选择器并新增跳转页输入 清理任务列表启用跳转页并固定每页 5 条 补充中英文分页文案 --- .../admin/usage/UsageCleanupDialog.vue | 43 ++++++++++++++++++- frontend/src/components/common/Pagination.vue | 38 ++++++++++++++-- frontend/src/i18n/locales/en.ts | 5 ++- frontend/src/i18n/locales/zh.ts | 5 ++- 4 files changed, 85 insertions(+), 6 deletions(-) diff --git a/frontend/src/components/admin/usage/UsageCleanupDialog.vue b/frontend/src/components/admin/usage/UsageCleanupDialog.vue index 91a43ecd..d5e81e72 100644 --- a/frontend/src/components/admin/usage/UsageCleanupDialog.vue +++ b/frontend/src/components/admin/usage/UsageCleanupDialog.vue @@ -66,6 +66,19 @@ + + @@ -108,6 +121,7 @@ import { useI18n } from 'vue-i18n' import { useAppStore } from '@/stores/app' import BaseDialog from '@/components/common/BaseDialog.vue' import ConfirmDialog from '@/components/common/ConfirmDialog.vue' +import Pagination from '@/components/common/Pagination.vue' import UsageFilters from '@/components/admin/usage/UsageFilters.vue' import { adminUsageAPI } from '@/api/admin/usage' import type { AdminUsageQueryParams, UsageCleanupTask, CreateUsageCleanupTaskRequest } from '@/api/admin/usage' @@ -131,6 +145,9 @@ const localEndDate = ref('') const tasks = ref([]) const tasksLoading = ref(false) +const tasksPage = ref(1) +const tasksPageSize = ref(5) +const tasksTotal = ref(0) const submitting = ref(false) const confirmVisible = ref(false) const cancelConfirmVisible = ref(false) @@ -146,6 +163,8 @@ const resetFilters = () => { localEndDate.value = props.endDate localFilters.value.start_date = localStartDate.value localFilters.value.end_date = localEndDate.value + tasksPage.value = 1 + tasksTotal.value = 0 } const startPolling = () => { @@ -219,8 +238,18 @@ const loadTasks = async () => { if (!props.show) return tasksLoading.value = true try { - const res = await adminUsageAPI.listCleanupTasks({ page: 1, page_size: 5 }) + const res = await adminUsageAPI.listCleanupTasks({ + page: tasksPage.value, + page_size: tasksPageSize.value + }) tasks.value = res.items || [] + tasksTotal.value = res.total || 0 + if (res.page) { + tasksPage.value = res.page + } + if (res.page_size) { + tasksPageSize.value = res.page_size + } } catch (error) { console.error('Failed to load cleanup tasks:', error) appStore.showError(t('admin.usage.cleanup.loadFailed')) @@ -229,6 +258,18 @@ const loadTasks = async () => { } } +const handleTaskPageChange = (page: number) => { + tasksPage.value = page + loadTasks() +} + +const handleTaskPageSizeChange = (size: number) => { + if (!Number.isFinite(size) || size <= 0) return + tasksPageSize.value = size + tasksPage.value = 1 + loadTasks() +} + const openConfirm = () => { confirmVisible.value = true } diff --git a/frontend/src/components/common/Pagination.vue b/frontend/src/components/common/Pagination.vue index 728bc0d3..3365a186 100644 --- a/frontend/src/components/common/Pagination.vue +++ b/frontend/src/components/common/Pagination.vue @@ -37,7 +37,7 @@

-
+
{{ t('pagination.perPage') }}: @@ -49,6 +49,22 @@ />
+ +
+ {{ t('pagination.jumpTo') }} + + +
@@ -102,7 +118,7 @@