diff --git a/frontend/src/components/common/Pagination.vue b/frontend/src/components/common/Pagination.vue index 2bfc6872..9b4ac200 100644 --- a/frontend/src/components/common/Pagination.vue +++ b/frontend/src/components/common/Pagination.vue @@ -123,6 +123,7 @@ import { useI18n } from 'vue-i18n' import Icon from '@/components/icons/Icon.vue' import Select from './Select.vue' import { getConfiguredTablePageSizeOptions, normalizeTablePageSize } from '@/utils/tablePreferences' +import { setPersistedPageSize } from '@/composables/usePersistedPageSize' const { t } = useI18n() @@ -224,6 +225,7 @@ const goToPage = (newPage: number) => { const handlePageSizeChange = (value: string | number | boolean | null) => { if (value === null || typeof value === 'boolean') return const newPageSize = normalizeTablePageSize(typeof value === 'string' ? parseInt(value, 10) : value) + setPersistedPageSize(newPageSize) emit('update:pageSize', newPageSize) } diff --git a/frontend/src/composables/usePersistedPageSize.ts b/frontend/src/composables/usePersistedPageSize.ts index 366619ea..972373d1 100644 --- a/frontend/src/composables/usePersistedPageSize.ts +++ b/frontend/src/composables/usePersistedPageSize.ts @@ -1,9 +1,29 @@ import { getConfiguredTableDefaultPageSize, normalizeTablePageSize } from '@/utils/tablePreferences' -/** - * 读取当前系统配置的表格默认每页条数。 - * 不再使用本地持久化缓存,所有页面统一以通用表格设置为准。 - */ +const STORAGE_KEY = 'table-page-size' + export function getPersistedPageSize(fallback = getConfiguredTableDefaultPageSize()): number { + if (typeof window !== 'undefined') { + try { + const stored = window.localStorage.getItem(STORAGE_KEY) + if (stored !== null) { + const parsed = Number(stored) + if (Number.isFinite(parsed)) { + return normalizeTablePageSize(parsed) + } + } + } catch (error) { + console.warn('Failed to read persisted page size:', error) + } + } return normalizeTablePageSize(getConfiguredTableDefaultPageSize() || fallback) } + +export function setPersistedPageSize(size: number): void { + if (typeof window === 'undefined') return + try { + window.localStorage.setItem(STORAGE_KEY, String(size)) + } catch (error) { + console.warn('Failed to persist page size:', error) + } +} diff --git a/frontend/src/composables/useTableLoader.ts b/frontend/src/composables/useTableLoader.ts index c288f42e..67c1dcdb 100644 --- a/frontend/src/composables/useTableLoader.ts +++ b/frontend/src/composables/useTableLoader.ts @@ -1,7 +1,7 @@ import { ref, reactive, onUnmounted, toRaw } from 'vue' import { useDebounceFn } from '@vueuse/core' import type { BasePaginationResponse, FetchOptions } from '@/types' -import { getPersistedPageSize } from './usePersistedPageSize' +import { getPersistedPageSize, setPersistedPageSize } from './usePersistedPageSize' interface PaginationState { page: number @@ -88,6 +88,7 @@ export function useTableLoader>(options: TableL const handlePageSizeChange = (size: number) => { pagination.page_size = size pagination.page = 1 + setPersistedPageSize(size) load() }