From 728f7406b60dad57b741bd93d5947e85c83eb67c Mon Sep 17 00:00:00 2001 From: "haoxuan.huang" Date: Mon, 3 Nov 2025 14:29:14 +0800 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=A4=9A?= =?UTF-8?q?=E9=80=89=E6=89=B9=E9=87=8F=E5=AF=BC=E5=87=BA=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web/package.json | 2 + .../editor/post-slider/PostItem.vue | 74 ++++---- .../components/editor/post-slider/index.vue | 158 +++++++++++++++++- .../src/components/ui/check-box/CheckBox.vue | 32 ++++ pnpm-lock.yaml | 14 ++ 5 files changed, 236 insertions(+), 44 deletions(-) create mode 100644 apps/web/src/components/ui/check-box/CheckBox.vue diff --git a/apps/web/package.json b/apps/web/package.json index 027e99e8b..6c94b5534 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -52,6 +52,7 @@ "highlight.js": "^11.11.1", "html-to-image": "^1.11.13", "isomorphic-dompurify": "^2.28.0", + "jszip": "^3.10.1", "juice": "^11.0.3", "lucide-vue-next": "^0.544.0", "marked": "^16.3.0", @@ -85,6 +86,7 @@ "@types/buffer-from": "^1.1.3", "@types/codemirror": "^5.60.15", "@types/crypto-js": "^4.2.2", + "@types/jszip": "^3.4.1", "@types/mdast": "^4.0.4", "@types/unist": "^3.0.3", "@vitejs/plugin-vue": "^6.0.1", diff --git a/apps/web/src/components/editor/post-slider/PostItem.vue b/apps/web/src/components/editor/post-slider/PostItem.vue index edaedb635..14dc3603e 100644 --- a/apps/web/src/components/editor/post-slider/PostItem.vue +++ b/apps/web/src/components/editor/post-slider/PostItem.vue @@ -48,6 +48,12 @@ const props = defineProps<{ handleDragEnd: () => void // 以添加子文章的方式打开对话框 openAddPostDialog: (parentId: string) => void + // 打开多选导出对话框 + isOpenMultipleMode: boolean + // 选中的文章 ID 集合 + selectedPosts: Set + // 切换文章选中状态 + togglePostSelection: (postId: string) => void }>() const store = useStore() @@ -84,11 +90,13 @@ function isHasChild(postId: string) {