From df40f557a8262a4c186dbb19359f8f8b0fb8bd72 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Wed, 29 Jul 2026 22:40:47 +0800 Subject: [PATCH 01/15] =?UTF-8?q?refactor(assets):=20=E6=8B=86=E5=88=86=20?= =?UTF-8?q?batchOperations=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 --- .../src/pages/assets/hooks/asset-operations/batch/index.ts | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 apps/web/src/pages/assets/hooks/asset-operations/batch/index.ts diff --git a/apps/web/src/pages/assets/hooks/asset-operations/batch/index.ts b/apps/web/src/pages/assets/hooks/asset-operations/batch/index.ts new file mode 100644 index 000000000..201038469 --- /dev/null +++ b/apps/web/src/pages/assets/hooks/asset-operations/batch/index.ts @@ -0,0 +1,4 @@ +export { useBatchDelete } from "./useBatchDelete" +export { useBatchTag } from "./useBatchTag" +export { useBatchClassify } from "./useBatchClassify" +export { useBatchMark } from "./useBatchMark" \ No newline at end of file -- 2.54.0 From ff6ce3c49a79d2b47af44a9d7b165617d75b11d3 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Wed, 29 Jul 2026 22:40:48 +0800 Subject: [PATCH 02/15] =?UTF-8?q?refactor(assets):=20=E6=8B=86=E5=88=86=20?= =?UTF-8?q?batchOperations=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 -- 2.54.0 From 931daa6e9b792d6382ea772ba38aa757cab05b79 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Wed, 29 Jul 2026 22:40:48 +0800 Subject: [PATCH 03/15] =?UTF-8?q?refactor(assets):=20=E6=8B=86=E5=88=86=20?= =?UTF-8?q?batchOperations=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/useBatchTag.ts | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchTag.ts diff --git a/apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchTag.ts b/apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchTag.ts new file mode 100644 index 000000000..f55a14a5b --- /dev/null +++ b/apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchTag.ts @@ -0,0 +1,86 @@ +import { useState, useCallback } from "react" +import { message } from "antd" +import { batchTagAssets, type BatchOperationResult } from "@/api/assets" + +interface UseBatchTagOptions { + selectedIds: Set + queryClient: ReturnType + showResult: (result: BatchOperationResult, title: string, clear?: boolean) => void +} + +export const useBatchTag = ({ selectedIds, queryClient, showResult }: UseBatchTagOptions) => { + const [tagModalOpen, setTagModalOpen] = useState(false) + const [batchTagInput, setBatchTagInput] = useState("") + const [batchTags, setBatchTags] = useState([]) + const [tagMode, setTagMode] = useState<"add" | "replace">("add") + const [batchLoading, setBatchLoading] = useState(false) + + const handleBatchTag = useCallback(async () => { + if (batchTags.length === 0) { + message.warning("请至少输入一个标签") + return + } + const ids = Array.from(selectedIds) + setBatchLoading(true) + try { + const result = await batchTagAssets({ + asset_ids: ids, + tags: batchTags, + mode: tagMode, + }) + queryClient.invalidateQueries({ queryKey: ["assets"] }) + showResult(result, "批量打标签") + setTagModalOpen(false) + setBatchTags([]) + setBatchTagInput("") + setTagMode("add") + 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) + } + }, [batchTags, selectedIds, tagMode, queryClient, showResult]) + + const handleTagInputKeyDown = useCallback( + (e: React.KeyboardEvent) => { + if (e.key === "Enter" && batchTagInput.trim()) { + e.preventDefault() + const tag = batchTagInput.trim() + if (!batchTags.includes(tag)) { + setBatchTags([...batchTags, tag]) + } + setBatchTagInput("") + } + }, + [batchTagInput, batchTags], + ) + + const removeBatchTag = useCallback( + (tag: string) => { + setBatchTags(batchTags.filter((t) => t !== tag)) + }, + [batchTags], + ) + + return { + tagModalOpen, + setTagModalOpen, + batchTagInput, + setBatchTagInput, + batchTags, + setBatchTags, + tagMode, + setTagMode, + batchLoading, + handleBatchTag, + handleTagInputKeyDown, + removeBatchTag, + } +} \ No newline at end of file -- 2.54.0 From 5e51933d5ff5a6499efdc10f91a0c53c8794d7bc Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Wed, 29 Jul 2026 22:40:49 +0800 Subject: [PATCH 04/15] =?UTF-8?q?refactor(assets):=20=E6=8B=86=E5=88=86=20?= =?UTF-8?q?batchOperations=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 --- .../batch/useBatchClassify.ts | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchClassify.ts diff --git a/apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchClassify.ts b/apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchClassify.ts new file mode 100644 index 000000000..8f4ebd008 --- /dev/null +++ b/apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchClassify.ts @@ -0,0 +1,58 @@ +import { useState, useCallback } from "react" +import { message } from "antd" +import { batchClassifyAssets, type BatchOperationResult } from "@/api/assets" + +interface UseBatchClassifyOptions { + selectedIds: Set + queryClient: ReturnType + showResult: (result: BatchOperationResult, title: string, clear?: boolean) => void +} + +export const useBatchClassify = ({ + selectedIds, + queryClient, + showResult, +}: UseBatchClassifyOptions) => { + const [classifyModalOpen, setClassifyModalOpen] = useState(false) + const [batchCategory, setBatchCategory] = useState("") + const [batchLoading, setBatchLoading] = useState(false) + + const handleBatchClassify = useCallback(async () => { + if (!batchCategory) { + message.warning("请选择分类") + return + } + const ids = Array.from(selectedIds) + setBatchLoading(true) + try { + const result = await batchClassifyAssets({ + asset_ids: ids, + category: batchCategory, + }) + queryClient.invalidateQueries({ queryKey: ["assets"] }) + showResult(result, "批量改分类") + setClassifyModalOpen(false) + setBatchCategory("") + if (result.failure_count === 0) { + message.success(`成功将 ${result.success_count} 个素材改为「${batchCategory}」`) + } else { + message.warning( + `改分类完成:成功 ${result.success_count} 个,失败 ${result.failure_count} 个`, + ) + } + } catch { + message.error("批量改分类失败,请重试") + } finally { + setBatchLoading(false) + } + }, [batchCategory, selectedIds, queryClient, showResult]) + + return { + classifyModalOpen, + setClassifyModalOpen, + batchCategory, + setBatchCategory, + batchLoading, + handleBatchClassify, + } +} \ No newline at end of file -- 2.54.0 From c1772a9cd339318d26cfa48e3c7d76212051e9a7 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Wed, 29 Jul 2026 22:40:49 +0800 Subject: [PATCH 05/15] =?UTF-8?q?refactor(assets):=20=E6=8B=86=E5=88=86=20?= =?UTF-8?q?batchOperations=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/useBatchMark.ts | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchMark.ts diff --git a/apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchMark.ts b/apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchMark.ts new file mode 100644 index 000000000..aed7cb2d9 --- /dev/null +++ b/apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchMark.ts @@ -0,0 +1,53 @@ +import { useState, useCallback } from "react" +import { message } from "antd" +import { batchMarkAssets, type BatchOperationResult } from "@/api/assets" +import type { SmartViewType } from "../../../components/BatchMarkModal" +import { SMART_VIEW_LABELS } from "../constants" + +interface UseBatchMarkOptions { + selectedIds: Set + queryClient: ReturnType + showResult: (result: BatchOperationResult, title: string, clear?: boolean) => void +} + +export const useBatchMark = ({ selectedIds, queryClient, showResult }: UseBatchMarkOptions) => { + const [markModalOpen, setMarkModalOpen] = useState(false) + const [batchSmartView, setBatchSmartView] = useState("recommended") + const [batchLoading, setBatchLoading] = useState(false) + + const handleBatchMark = useCallback(async () => { + const ids = Array.from(selectedIds) + setBatchLoading(true) + try { + const result = await batchMarkAssets({ + asset_ids: ids, + smart_view: batchSmartView, + }) + queryClient.invalidateQueries({ queryKey: ["assets"] }) + showResult(result, "批量智能标记") + setMarkModalOpen(false) + if (result.failure_count === 0) { + message.success( + `成功将 ${result.success_count} 个素材标记为「${SMART_VIEW_LABELS[batchSmartView]}」`, + ) + } else { + message.warning( + `智能标记完成:成功 ${result.success_count} 个,失败 ${result.failure_count} 个`, + ) + } + } catch { + message.error("批量智能标记失败,请重试") + } finally { + setBatchLoading(false) + } + }, [batchSmartView, selectedIds, queryClient, showResult]) + + return { + markModalOpen, + setMarkModalOpen, + batchSmartView, + setBatchSmartView, + batchLoading, + handleBatchMark, + } +} \ No newline at end of file -- 2.54.0 From 5ffd6dfb2320698775a2a80e73b2680d853432eb Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Wed, 29 Jul 2026 22:41:03 +0800 Subject: [PATCH 06/15] =?UTF-8?q?refactor(assets):=20batchOperations=20?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=20re-export=20=E5=85=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assets/hooks/asset-operations/batchOperations.ts | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 apps/web/src/pages/assets/hooks/asset-operations/batchOperations.ts diff --git a/apps/web/src/pages/assets/hooks/asset-operations/batchOperations.ts b/apps/web/src/pages/assets/hooks/asset-operations/batchOperations.ts new file mode 100644 index 000000000..871281660 --- /dev/null +++ b/apps/web/src/pages/assets/hooks/asset-operations/batchOperations.ts @@ -0,0 +1,8 @@ +/** + * @deprecated 请从 ./batch/ 目录导入子模块 + * 保持向后兼容,re-export 所有批量操作 Hook + */ +export { useBatchDelete } from "./batch/useBatchDelete" +export { useBatchTag } from "./batch/useBatchTag" +export { useBatchClassify } from "./batch/useBatchClassify" +export { useBatchMark } from "./batch/useBatchMark" \ No newline at end of file -- 2.54.0 From b0d7d81a30aa5730d4ea1c65c52b556f814d3b48 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Wed, 29 Jul 2026 22:41:04 +0800 Subject: [PATCH 07/15] =?UTF-8?q?test:=20=E8=A1=A5=E5=85=85=20batchOperati?= =?UTF-8?q?ons=20=E5=AD=90=E6=A8=A1=E5=9D=97=20smoke=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web/src/test/pages/assets/smoke.test.tsx | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/apps/web/src/test/pages/assets/smoke.test.tsx b/apps/web/src/test/pages/assets/smoke.test.tsx index 0a514c1ce..a3175ddb7 100644 --- a/apps/web/src/test/pages/assets/smoke.test.tsx +++ b/apps/web/src/test/pages/assets/smoke.test.tsx @@ -36,15 +36,14 @@ import "@/pages/assets/hooks/useLibraryManagement" import "@/pages/assets/hooks/useAssetUpload" import "@/pages/assets/hooks/useAssetSelection" import "@/pages/assets/hooks/useAssetOperations" -import "@/pages/assets/hooks/asset-operations/batch-operations" -import "@/pages/assets/hooks/asset-operations/batch-operations/useBatchDelete" -import "@/pages/assets/hooks/asset-operations/batch-operations/useBatchTag" -import "@/pages/assets/hooks/asset-operations/batch-operations/useBatchClassify" -import "@/pages/assets/hooks/asset-operations/batch-operations/useBatchMark" +import "@/pages/assets/hooks/asset-operations/batch/useBatchDelete" +import "@/pages/assets/hooks/asset-operations/batch/useBatchTag" +import "@/pages/assets/hooks/asset-operations/batch/useBatchClassify" +import "@/pages/assets/hooks/asset-operations/batch/useBatchMark" describe("AssetLibrary module smoke test", () => { it("should load all asset modules", () => { // 纯模块加载测试,确保所有组件/工具函数能正常 import expect(true).toBe(true) }) -}) +}) \ No newline at end of file -- 2.54.0 From faf7b6958cd856c85eab513d056e532c02052398 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Thu, 30 Jul 2026 00:09:36 +0800 Subject: [PATCH 08/15] fix: prettier format index.ts --- apps/web/src/pages/assets/hooks/asset-operations/batch/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/pages/assets/hooks/asset-operations/batch/index.ts b/apps/web/src/pages/assets/hooks/asset-operations/batch/index.ts index 201038469..fb51f0659 100644 --- a/apps/web/src/pages/assets/hooks/asset-operations/batch/index.ts +++ b/apps/web/src/pages/assets/hooks/asset-operations/batch/index.ts @@ -1,4 +1,4 @@ export { useBatchDelete } from "./useBatchDelete" export { useBatchTag } from "./useBatchTag" export { useBatchClassify } from "./useBatchClassify" -export { useBatchMark } from "./useBatchMark" \ No newline at end of file +export { useBatchMark } from "./useBatchMark" -- 2.54.0 From b826332f5b7bad5403e9f79607923d4eca232ae9 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Thu, 30 Jul 2026 00:09:37 +0800 Subject: [PATCH 09/15] fix: prettier format useBatchClassify.ts --- .../assets/hooks/asset-operations/batch/useBatchClassify.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchClassify.ts b/apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchClassify.ts index 8f4ebd008..5ba8d6d37 100644 --- a/apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchClassify.ts +++ b/apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchClassify.ts @@ -55,4 +55,4 @@ export const useBatchClassify = ({ batchLoading, handleBatchClassify, } -} \ No newline at end of file +} -- 2.54.0 From 9758eb9e9b4bc4e5ef43c8e1f37a93312d9e2c37 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Thu, 30 Jul 2026 00:09:38 +0800 Subject: [PATCH 10/15] fix: prettier format useBatchDelete.ts --- .../pages/assets/hooks/asset-operations/batch/useBatchDelete.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 index 1dda13c93..b1243e1df 100644 --- a/apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchDelete.ts +++ b/apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchDelete.ts @@ -37,4 +37,4 @@ export const useBatchDelete = ({ }, [selectedIds, invalidateAssets, showResult]) return { batchLoading, handleBatchDelete } -} \ No newline at end of file +} -- 2.54.0 From 87357b97cb05b9e9eefc448b4fc3a4050b33308f Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Thu, 30 Jul 2026 00:09:41 +0800 Subject: [PATCH 11/15] fix: prettier format useBatchMark.ts --- .../pages/assets/hooks/asset-operations/batch/useBatchMark.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchMark.ts b/apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchMark.ts index aed7cb2d9..296888b1a 100644 --- a/apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchMark.ts +++ b/apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchMark.ts @@ -50,4 +50,4 @@ export const useBatchMark = ({ selectedIds, queryClient, showResult }: UseBatchM batchLoading, handleBatchMark, } -} \ No newline at end of file +} -- 2.54.0 From deffd976508857a77ed1105591a7f1465fa88296 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Thu, 30 Jul 2026 00:09:42 +0800 Subject: [PATCH 12/15] fix: prettier format useBatchTag.ts --- .../pages/assets/hooks/asset-operations/batch/useBatchTag.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchTag.ts b/apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchTag.ts index f55a14a5b..6f13ad359 100644 --- a/apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchTag.ts +++ b/apps/web/src/pages/assets/hooks/asset-operations/batch/useBatchTag.ts @@ -83,4 +83,4 @@ export const useBatchTag = ({ selectedIds, queryClient, showResult }: UseBatchTa handleTagInputKeyDown, removeBatchTag, } -} \ No newline at end of file +} -- 2.54.0 From 68c29c64b6069e33c664228f6cccd2d4924015af Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Thu, 30 Jul 2026 00:09:44 +0800 Subject: [PATCH 13/15] fix: prettier format batchOperations.ts --- .../src/pages/assets/hooks/asset-operations/batchOperations.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/pages/assets/hooks/asset-operations/batchOperations.ts b/apps/web/src/pages/assets/hooks/asset-operations/batchOperations.ts index 871281660..19399a7fb 100644 --- a/apps/web/src/pages/assets/hooks/asset-operations/batchOperations.ts +++ b/apps/web/src/pages/assets/hooks/asset-operations/batchOperations.ts @@ -5,4 +5,4 @@ export { useBatchDelete } from "./batch/useBatchDelete" export { useBatchTag } from "./batch/useBatchTag" export { useBatchClassify } from "./batch/useBatchClassify" -export { useBatchMark } from "./batch/useBatchMark" \ No newline at end of file +export { useBatchMark } from "./batch/useBatchMark" -- 2.54.0 From 329aa797f4d8a55c209097ff0f8fa311b72e42e8 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Thu, 30 Jul 2026 00:13:19 +0800 Subject: [PATCH 14/15] fix: prettier format smoke.test.tsx --- apps/web/src/test/pages/assets/smoke.test.tsx | 60 +++++++++---------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/apps/web/src/test/pages/assets/smoke.test.tsx b/apps/web/src/test/pages/assets/smoke.test.tsx index a3175ddb7..818387133 100644 --- a/apps/web/src/test/pages/assets/smoke.test.tsx +++ b/apps/web/src/test/pages/assets/smoke.test.tsx @@ -3,47 +3,47 @@ * 建立完整依赖链,确保 vitest related 模式能匹配到 * assets 目录下所有文件的改动(包括子组件、Hook 和工具函数) */ -import { describe, it, expect } from "vitest" +import { describe, it, expect } from "vitest"; // 主组件 -import "@/pages/assets/AssetLibrary" +import "@/pages/assets/AssetLibrary"; // 子组件 -import "@/pages/assets/components/AssetCard" -import "@/pages/assets/components/AssetFilterBar" -import "@/pages/assets/components/AssetSkeleton" -import "@/pages/assets/components/BatchClassifyModal" -import "@/pages/assets/components/BatchMarkModal" -import "@/pages/assets/components/BatchOperationBar" -import "@/pages/assets/components/BatchTagModal" -import "@/pages/assets/components/CreateLibraryModal" -import "@/pages/assets/components/LibrarySidebar" -import "@/pages/assets/components/PlayModal" -import "@/pages/assets/components/ResultDrawer" -import "@/pages/assets/components/UploadProgressModal" +import "@/pages/assets/components/AssetCard"; +import "@/pages/assets/components/AssetFilterBar"; +import "@/pages/assets/components/AssetSkeleton"; +import "@/pages/assets/components/BatchClassifyModal"; +import "@/pages/assets/components/BatchMarkModal"; +import "@/pages/assets/components/BatchOperationBar"; +import "@/pages/assets/components/BatchTagModal"; +import "@/pages/assets/components/CreateLibraryModal"; +import "@/pages/assets/components/LibrarySidebar"; +import "@/pages/assets/components/PlayModal"; +import "@/pages/assets/components/ResultDrawer"; +import "@/pages/assets/components/UploadProgressModal"; // 类型与常量 -import "@/pages/assets/types" -import "@/pages/assets/constants" +import "@/pages/assets/types"; +import "@/pages/assets/constants"; // 工具函数 -import "@/pages/assets/utils/format" -import "@/pages/assets/utils/asset" +import "@/pages/assets/utils/format"; +import "@/pages/assets/utils/asset"; // Hooks -import "@/pages/assets/hooks/useAssetsData" -import "@/pages/assets/hooks/useLibraryManagement" -import "@/pages/assets/hooks/useAssetUpload" -import "@/pages/assets/hooks/useAssetSelection" -import "@/pages/assets/hooks/useAssetOperations" -import "@/pages/assets/hooks/asset-operations/batch/useBatchDelete" -import "@/pages/assets/hooks/asset-operations/batch/useBatchTag" -import "@/pages/assets/hooks/asset-operations/batch/useBatchClassify" -import "@/pages/assets/hooks/asset-operations/batch/useBatchMark" +import "@/pages/assets/hooks/useAssetsData"; +import "@/pages/assets/hooks/useLibraryManagement"; +import "@/pages/assets/hooks/useAssetUpload"; +import "@/pages/assets/hooks/useAssetSelection"; +import "@/pages/assets/hooks/useAssetOperations"; +import "@/pages/assets/hooks/asset-operations/batch/useBatchDelete"; +import "@/pages/assets/hooks/asset-operations/batch/useBatchTag"; +import "@/pages/assets/hooks/asset-operations/batch/useBatchClassify"; +import "@/pages/assets/hooks/asset-operations/batch/useBatchMark"; describe("AssetLibrary module smoke test", () => { it("should load all asset modules", () => { // 纯模块加载测试,确保所有组件/工具函数能正常 import - expect(true).toBe(true) - }) -}) \ No newline at end of file + expect(true).toBe(true); + }); +}); -- 2.54.0 From 4e8eb6e9df99f06896879e581a836e1e281f8764 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Thu, 30 Jul 2026 00:18:58 +0800 Subject: [PATCH 15/15] fix: prettier format with project config (semi:false) --- apps/web/src/test/pages/assets/smoke.test.tsx | 60 +++++++++---------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/apps/web/src/test/pages/assets/smoke.test.tsx b/apps/web/src/test/pages/assets/smoke.test.tsx index 818387133..b898bf5f3 100644 --- a/apps/web/src/test/pages/assets/smoke.test.tsx +++ b/apps/web/src/test/pages/assets/smoke.test.tsx @@ -3,47 +3,47 @@ * 建立完整依赖链,确保 vitest related 模式能匹配到 * assets 目录下所有文件的改动(包括子组件、Hook 和工具函数) */ -import { describe, it, expect } from "vitest"; +import { describe, it, expect } from "vitest" // 主组件 -import "@/pages/assets/AssetLibrary"; +import "@/pages/assets/AssetLibrary" // 子组件 -import "@/pages/assets/components/AssetCard"; -import "@/pages/assets/components/AssetFilterBar"; -import "@/pages/assets/components/AssetSkeleton"; -import "@/pages/assets/components/BatchClassifyModal"; -import "@/pages/assets/components/BatchMarkModal"; -import "@/pages/assets/components/BatchOperationBar"; -import "@/pages/assets/components/BatchTagModal"; -import "@/pages/assets/components/CreateLibraryModal"; -import "@/pages/assets/components/LibrarySidebar"; -import "@/pages/assets/components/PlayModal"; -import "@/pages/assets/components/ResultDrawer"; -import "@/pages/assets/components/UploadProgressModal"; +import "@/pages/assets/components/AssetCard" +import "@/pages/assets/components/AssetFilterBar" +import "@/pages/assets/components/AssetSkeleton" +import "@/pages/assets/components/BatchClassifyModal" +import "@/pages/assets/components/BatchMarkModal" +import "@/pages/assets/components/BatchOperationBar" +import "@/pages/assets/components/BatchTagModal" +import "@/pages/assets/components/CreateLibraryModal" +import "@/pages/assets/components/LibrarySidebar" +import "@/pages/assets/components/PlayModal" +import "@/pages/assets/components/ResultDrawer" +import "@/pages/assets/components/UploadProgressModal" // 类型与常量 -import "@/pages/assets/types"; -import "@/pages/assets/constants"; +import "@/pages/assets/types" +import "@/pages/assets/constants" // 工具函数 -import "@/pages/assets/utils/format"; -import "@/pages/assets/utils/asset"; +import "@/pages/assets/utils/format" +import "@/pages/assets/utils/asset" // Hooks -import "@/pages/assets/hooks/useAssetsData"; -import "@/pages/assets/hooks/useLibraryManagement"; -import "@/pages/assets/hooks/useAssetUpload"; -import "@/pages/assets/hooks/useAssetSelection"; -import "@/pages/assets/hooks/useAssetOperations"; -import "@/pages/assets/hooks/asset-operations/batch/useBatchDelete"; -import "@/pages/assets/hooks/asset-operations/batch/useBatchTag"; -import "@/pages/assets/hooks/asset-operations/batch/useBatchClassify"; -import "@/pages/assets/hooks/asset-operations/batch/useBatchMark"; +import "@/pages/assets/hooks/useAssetsData" +import "@/pages/assets/hooks/useLibraryManagement" +import "@/pages/assets/hooks/useAssetUpload" +import "@/pages/assets/hooks/useAssetSelection" +import "@/pages/assets/hooks/useAssetOperations" +import "@/pages/assets/hooks/asset-operations/batch/useBatchDelete" +import "@/pages/assets/hooks/asset-operations/batch/useBatchTag" +import "@/pages/assets/hooks/asset-operations/batch/useBatchClassify" +import "@/pages/assets/hooks/asset-operations/batch/useBatchMark" describe("AssetLibrary module smoke test", () => { it("should load all asset modules", () => { // 纯模块加载测试,确保所有组件/工具函数能正常 import - expect(true).toBe(true); - }); -}); + expect(true).toBe(true) + }) +}) -- 2.54.0