feat: 表格分页支持统一配置并记忆各表格每页条数
- 后端新增聚合用户偏好 paginationPrefs(每页条数候选列表与默认每页条数),提供 GET/PUT /api/setting/pagination-prefs,默认候选 [10,20,50,100]、默认每页 20,非法值自动过滤并回退 - 后端新增 /category/page、/tag/page、/channel/page、/email-bill/configs/page、/email-bill/sender-rules/page 分页接口,原全量接口保持不变以免影响下拉、筛选、AI 与导出 - 前端新增共享 composables/usePageSizeOptions.ts 与 useTablePageSize.ts,所有表格统一取用候选列表并记住各自上次选择的每页条数,优先级为表格记忆 > 全局默认 > 20 - 各表格上次选择以聚合偏好 finance.pagination.tablePageSizes 存于本机 localStorage,收支记录页旧的 filterPrefs.pageSize 自动迁移 - 设置页外观设置新增「表格每页条数选项」分组,可增删候选值并配置默认每页条数,保存后全局即时生效 - 路由守卫在已登录时预加载分页偏好,保证表格页首次渲染即使用配置值 - 前端分类、标签、渠道、邮箱配置、发件人规则表格接入后端分页 - 补充中文、英文、日文三语文案
This commit is contained in:
@@ -24,6 +24,8 @@ export const STORAGE_KEYS = {
|
||||
transactionRemarkHistory: 'finance.transaction.remarkHistory',
|
||||
// 收支记录筛选偏好(收支记录页与统计面板共用)
|
||||
transactionFilterPrefs: 'finance.transaction.filterPrefs',
|
||||
// 各表格每页大小偏好(聚合 JSON,按表格键区分,本机记忆)
|
||||
paginationTablePageSizes: 'finance.pagination.tablePageSizes',
|
||||
// 账单关系类型
|
||||
transactionRelationType: 'finance.transaction.relationType',
|
||||
// 收支记录 AI 查询历史
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
// 各表格每页大小偏好:以聚合 JSON 记录每个表格上次选择的每页条数,本机记忆
|
||||
import { readJson, writeJson } from './storage'
|
||||
import { STORAGE_KEYS } from './storageKeys'
|
||||
|
||||
/** 表格键到每页大小的映射 */
|
||||
export type TablePageSizes = Record<string, number>
|
||||
|
||||
/** 读取全部表格的每页大小偏好,仅保留合法正整数 */
|
||||
export function readTablePageSizes(): TablePageSizes {
|
||||
const raw = readJson<Record<string, unknown>>(STORAGE_KEYS.paginationTablePageSizes, {})
|
||||
const result: TablePageSizes = {}
|
||||
if (raw && typeof raw === 'object') {
|
||||
for (const [key, value] of Object.entries(raw)) {
|
||||
const size = Number(value)
|
||||
if (Number.isInteger(size) && size > 0) {
|
||||
result[key] = size
|
||||
}
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
/** 读取指定表格上次选择的每页大小,无有效值时返回 null */
|
||||
export function readTablePageSize(tableKey: string): number | null {
|
||||
const all = readTablePageSizes()
|
||||
return all[tableKey] ?? null
|
||||
}
|
||||
|
||||
/** 写入指定表格的每页大小,保留其它表格的值 */
|
||||
export function writeTablePageSize(tableKey: string, size: number): void {
|
||||
const all = readTablePageSizes()
|
||||
all[tableKey] = size
|
||||
writeJson(STORAGE_KEYS.paginationTablePageSizes, all)
|
||||
}
|
||||
Reference in New Issue
Block a user