refactor: 重构分页逻辑并统一代码风格

1. 新增分页数据处理hook和工具函数,实现分页状态统一管理
2. 替换所有页面的表格分页配置为标准current/page模式
3. 统一项目内字符串引号风格为双引号
4. 调整权限树面板样式和布局代码格式
This commit is contained in:
2026-07-02 11:50:07 +08:00
parent 9362625b4e
commit 526052d633
13 changed files with 884 additions and 809 deletions

20
src/hooks/pageData.ts Normal file
View File

@@ -0,0 +1,20 @@
import type { PageData } from '../api/types';
type PageQuery = {
page: number;
pageSize: number;
};
export function resolvePageData<T>(
response: PageData<T>,
query: PageQuery,
): PageData<T> {
return {
list: response.list,
pagination: {
...response.pagination,
page: query.page,
pageSize: query.pageSize,
},
};
}

View File

@@ -1,31 +1,51 @@
import { useEffect, useState } from 'react';
import { fetchPage } from '../api/client';
import type { PageData } from '../api/types';
import { useEffect, useState } from "react";
import { fetchPage } from "../api/client";
import type { PageData } from "../api/types";
import { resolvePageData } from "./pageData";
type PageQuery = {
page: number;
pageSize: number;
};
export function usePageData<T>(url: string, enabled = true) {
const [loading, setLoading] = useState(false);
const [data, setData] = useState<PageData<T>>({
list: [],
pagination: { page: 1, pageSize: 20, total: 0 },
});
const [loading, setLoading] = useState(false);
const [pageQuery, setPageQuery] = useState<PageQuery>({
page: 1,
pageSize: 20,
});
const [data, setData] = useState<PageData<T>>({
list: [],
pagination: { page: 1, pageSize: 20, total: 0 },
});
const load = async () => {
if (!enabled) {
return;
}
setLoading(true);
try {
setData(await fetchPage<T>(url));
} finally {
setLoading(false);
}
};
const load = async (query = pageQuery) => {
if (!enabled) {
return;
}
setLoading(true);
try {
const response = await fetchPage<T>(url, query);
setData(resolvePageData(response, query));
} finally {
setLoading(false);
}
};
useEffect(() => {
if (enabled) {
void load();
}
}, [url, enabled]);
const changePage = (page: number, pageSize: number) => {
setPageQuery({ page, pageSize });
};
return { data, loading, reload: load };
useEffect(() => {
if (enabled) {
void load(pageQuery);
}
}, [url, enabled, pageQuery.page, pageQuery.pageSize]);
return {
data,
loading,
reload: () => load(pageQuery),
changePage,
};
}