fix: honor table defaults and preserve dispatch mappings

This commit is contained in:
IanShaw027
2026-04-10 17:55:37 +08:00
parent b6bc042302
commit 67a05dfccd
9 changed files with 163 additions and 130 deletions

View File

@@ -0,0 +1,21 @@
import { afterEach, describe, expect, it } from 'vitest'
import { getPersistedPageSize } from '@/composables/usePersistedPageSize'
describe('usePersistedPageSize', () => {
afterEach(() => {
localStorage.clear()
delete window.__APP_CONFIG__
})
it('uses the system table default instead of stale localStorage state', () => {
window.__APP_CONFIG__ = {
table_default_page_size: 1000,
table_page_size_options: [20, 50, 1000]
} as any
localStorage.setItem('table-page-size', '50')
localStorage.setItem('table-page-size-source', 'user')
expect(getPersistedPageSize()).toBe(1000)
})
})

View File

@@ -1,49 +1,9 @@
import { getConfiguredTableDefaultPageSize, normalizeTablePageSize } from '@/utils/tablePreferences'
const STORAGE_KEY = 'table-page-size'
const SOURCE_KEY = 'table-page-size-source'
/**
* 从 localStorage 读取/写入 pageSize
* 全局共享一个 key所有表格统一偏好
* 读取当前系统配置的表格默认每页条数。
* 不再使用本地持久化缓存,所有页面统一以通用表格设置为准。
*/
export function getPersistedPageSize(fallback = getConfiguredTableDefaultPageSize()): number {
try {
const stored = localStorage.getItem(STORAGE_KEY)
if (stored) {
return normalizeTablePageSize(stored)
}
} catch {
// localStorage 不可用(隐私模式等)
}
return normalizeTablePageSize(fallback)
}
export function setPersistedPageSize(size: number): void {
try {
localStorage.setItem(STORAGE_KEY, String(normalizeTablePageSize(size)))
localStorage.setItem(SOURCE_KEY, 'user')
} catch {
// 静默失败
}
}
export function syncPersistedPageSizeWithSystemDefault(defaultSize = getConfiguredTableDefaultPageSize()): void {
try {
const normalizedDefault = normalizeTablePageSize(defaultSize)
const stored = localStorage.getItem(STORAGE_KEY)
const source = localStorage.getItem(SOURCE_KEY)
const normalizedStored = stored ? normalizeTablePageSize(stored) : null
if ((source === 'user' || (source === null && stored !== null)) && stored) {
localStorage.setItem(STORAGE_KEY, String(normalizedStored ?? normalizedDefault))
localStorage.setItem(SOURCE_KEY, 'user')
return
}
localStorage.setItem(STORAGE_KEY, String(normalizedDefault))
localStorage.setItem(SOURCE_KEY, 'system')
} catch {
// 静默失败
}
return normalizeTablePageSize(getConfiguredTableDefaultPageSize() || fallback)
}

View File

@@ -1,7 +1,7 @@
import { ref, reactive, onUnmounted, toRaw } from 'vue'
import { useDebounceFn } from '@vueuse/core'
import type { BasePaginationResponse, FetchOptions } from '@/types'
import { getPersistedPageSize, setPersistedPageSize } from './usePersistedPageSize'
import { getPersistedPageSize } from './usePersistedPageSize'
interface PaginationState {
page: number
@@ -88,7 +88,6 @@ export function useTableLoader<T, P extends Record<string, any>>(options: TableL
const handlePageSizeChange = (size: number) => {
pagination.page_size = size
pagination.page = 1
setPersistedPageSize(size)
load()
}