diff --git a/src/App.svelte b/src/App.svelte index 454ca3b..760f3ae 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -4,6 +4,7 @@ import type { Media } from './lib/interfaces'; import MediaItem from './lib/MediaItem.svelte'; import MediaFormModal from './lib/MediaFormModal.svelte'; + import DeleteConfirmModal from './lib/DeleteConfirmModal.svelte'; // 类型定义 interface ApiResponse { @@ -37,6 +38,7 @@ // 模态框状态 let showCreateModal = $state(false); let editingMedia = $state(null); + let deletingMedia = $state(null); // 类别选项 const categories = [ @@ -57,7 +59,7 @@ params: { type: 'game', currentPage: 1, - pageSize: 10 + pageSize: pageSize } }); @@ -132,7 +134,7 @@ params: { type: 'game', currentPage: 1, - pageSize: 10 + pageSize: pageSize } }); @@ -192,6 +194,29 @@ function handleEditClick(media: Media) { editingMedia = media; } + + // 处理删除按钮点击 + function handleDeleteClick(media: Media) { + deletingMedia = media; + } + + // 处理删除确认 + async function handleDeleteConfirm() { + if (!deletingMedia?.id) return; + + try { + const response = await request.delete>(`/media/deleteById/${deletingMedia.id}`); + + if (response.data.code === 0) { + deletingMedia = null; + await fetchMediaList(); + } else { + error = response.data.message || 'Failed to delete media'; + } + } catch (e: any) { + error = e.message || 'Failed to delete media'; + } + } @@ -263,7 +288,7 @@ {:else}
-
+
@@ -296,9 +321,9 @@
{:else} -
+
{#each mediaList as media} - + {/each}
@@ -336,6 +361,7 @@ handleClose={() => showCreateModal = false} submitMedia={handleCreate} mode="add" + itemType={currentCategory} media={null} /> @@ -344,9 +370,17 @@ handleClose={() => editingMedia = null} submitMedia={handleEdit} mode="edit" + itemType="" media={editingMedia} /> + deletingMedia = null} +/> + \ No newline at end of file diff --git a/src/lib/interfaces.ts b/src/lib/interfaces.ts index d08e3ff..5111a2b 100644 --- a/src/lib/interfaces.ts +++ b/src/lib/interfaces.ts @@ -2,7 +2,6 @@ export interface Media { id?: number; title: string; type: string; - status: 'completed' | 'in_progress' | 'plan_to_watch'; rating?: number; notes?: string; platform?: string;