feat: 高级列表

This commit is contained in:
2025-09-13 17:56:13 +08:00
parent e42e1c01fb
commit 9d5a289929
18 changed files with 1301 additions and 6739 deletions

View File

@@ -0,0 +1,116 @@
// hooks/useEnhancedTable.ts
import { useRef, useState, useCallback } from "react";
import { ActionType } from "@ant-design/pro-components";
import { message } from "antd";
import {
UseEnhancedTableOptions,
UseEnhancedTableReturn,
} from "@/components/EnhancedProTable/types";
export function useEnhancedTable<T>(
options: UseEnhancedTableOptions<T> = {}
): UseEnhancedTableReturn<T> {
const actionRef = useRef<ActionType>(undefined);
const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([]);
const [selectedRows, setSelectedRows] = useState<T[]>([]);
const [loading, setLoading] = useState(false);
const { onAdd, onEdit, onDelete, onView, onExport, onBatchDelete } = options;
// 刷新表格
const reload = useCallback(() => {
actionRef.current?.reload();
}, []);
// 重置表格
const reset = useCallback(() => {
actionRef.current?.reset?.();
setSelectedRowKeys([]);
setSelectedRows([]);
}, []);
// 清空选择
const clearSelection = useCallback(() => {
setSelectedRowKeys([]);
setSelectedRows([]);
}, []);
// 处理删除
const handleDelete = useCallback(
async (record: T) => {
if (!onDelete) return;
setLoading(true);
try {
const success = await onDelete(record);
if (success) {
message.success("删除成功");
reload();
}
} finally {
setLoading(false);
}
},
[onDelete, reload]
);
// 处理批量删除
const handleBatchDelete = useCallback(
async (keys: React.Key[]) => {
if (!onBatchDelete || keys.length === 0) return;
setLoading(true);
try {
const success = await onBatchDelete(keys);
if (success) {
message.success("批量删除成功");
clearSelection();
reload();
}
} catch (error) {
message.error("批量删除失败");
} finally {
setLoading(false);
}
},
[onBatchDelete, clearSelection, reload]
);
// 处理导出
const handleExport = useCallback(
(rows: T[]) => {
if (!onExport) return;
if (rows.length === 0) {
message.warning("请选择要导出的数据");
return;
}
onExport(rows);
},
[onExport]
);
return {
actionRef,
selectedRowKeys,
selectedRows,
loading,
setSelectedRowKeys,
setSelectedRows,
reload,
reset,
clearSelection,
handleDelete,
handleBatchDelete,
handleExport,
actions: {
add: onAdd,
edit: onEdit,
delete: handleDelete,
view: onView,
export: handleExport,
batchDelete: handleBatchDelete,
},
};
}
export type { UseEnhancedTableOptions, UseEnhancedTableReturn };