diff --git a/apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchDelete.ts b/apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchDelete.ts new file mode 100644 index 000000000..1dda13c93 --- /dev/null +++ b/apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchDelete.ts @@ -0,0 +1,40 @@ +import { useState, useCallback } from "react" +import { message } from "antd" +import { batchDeleteAssets, type BatchOperationResult } from "@/api/assets" + +interface UseBatchDeleteOptions { + selectedIds: Set + invalidateAssets: () => void + showResult: (result: BatchOperationResult, title: string, clear?: boolean) => void +} + +export const useBatchDelete = ({ + selectedIds, + invalidateAssets, + showResult, +}: UseBatchDeleteOptions) => { + const [batchLoading, setBatchLoading] = useState(false) + + const handleBatchDelete = useCallback(async () => { + const ids = Array.from(selectedIds) + setBatchLoading(true) + try { + const result = await batchDeleteAssets(ids) + invalidateAssets() + showResult(result, "批量删除") + if (result.failure_count === 0) { + message.success(`成功删除 ${result.success_count} 个素材`) + } else { + message.warning( + `删除完成:成功 ${result.success_count} 个,失败 ${result.failure_count} 个`, + ) + } + } catch { + message.error("批量删除失败,请重试") + } finally { + setBatchLoading(false) + } + }, [selectedIds, invalidateAssets, showResult]) + + return { batchLoading, handleBatchDelete } +} \ No newline at end of file