From f084d30d6530cc76d76c9ff6a5cd20bb6628988e Mon Sep 17 00:00:00 2001 From: DaydreamCoding Date: Thu, 16 Apr 2026 21:23:19 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=81=A2=E5=A4=8D=E8=A1=A8=E6=A0=BC?= =?UTF-8?q?=E5=88=86=E9=A1=B5=E5=A4=A7=E5=B0=8F=20localStorage=20=E6=8C=81?= =?UTF-8?q?=E4=B9=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - usePersistedPageSize: 恢复 localStorage 读写,以系统配置为 fallback - useTableLoader: handlePageSizeChange 时写入 localStorage - Pagination.vue: handlePageSizeChange 时写入 localStorage Co-Authored-By: Claude Opus 4.6 (1M context) --- frontend/src/components/common/Pagination.vue | 2 ++ .../src/composables/usePersistedPageSize.ts | 28 ++++++++++++++++--- frontend/src/composables/useTableLoader.ts | 3 +- 3 files changed, 28 insertions(+), 5 deletions(-) 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() }