From ff6ce3c49a79d2b47af44a9d7b165617d75b11d3 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Wed, 29 Jul 2026 22:40:48 +0800 Subject: [PATCH] =?UTF-8?q?refactor(assets):=20=E6=8B=86=E5=88=86=20batchO?= =?UTF-8?q?perations=20=E5=AD=90=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../asset-operations/batch/useBatchDelete.ts | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchDelete.ts 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