From 61d37bc31c09e26a49fde3a384d3433dbdf2c7e3 Mon Sep 17 00:00:00 2001 From: Hermes CI Fix Date: Tue, 14 Jul 2026 15:39:36 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=9C=B0=E5=9B=BE=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E5=88=A0=E9=99=A4=20=E2=80=94=20checkbox?= =?UTF-8?q?=E5=A4=9A=E9=80=89+POST=20batch-delete=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/api/maps.py | 16 ++++++++++++++++ frontend/src/api/index.ts | 1 + frontend/src/views/MapList.vue | 26 ++++++++++++++++++++++++-- 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/backend/app/api/maps.py b/backend/app/api/maps.py index c4e0cfd6..6dd20f85 100644 --- a/backend/app/api/maps.py +++ b/backend/app/api/maps.py @@ -123,6 +123,22 @@ def delete_map(map_id: int, db: Session = Depends(get_db)): return {"message": "已删除"} +@router.post("/batch-delete") +def batch_delete_maps(data: dict, db: Session = Depends(get_db)): + """批量删除战略地图""" + ids = data.get("ids", []) + if not ids: + raise HTTPException(400, "请选择要删除的地图") + deleted = 0 + for mid in ids: + m = db.query(StrategicMap).filter(StrategicMap.id == mid).first() + if m: + db.delete(m) + deleted += 1 + db.commit() + return {"message": f"已删除 {deleted} 个地图", "deleted": deleted} + + # ── 连线管理 ───────────────────────────────── def _get_connections(m: StrategicMap) -> list: diff --git a/frontend/src/api/index.ts b/frontend/src/api/index.ts index e48f51d8..564855c9 100644 --- a/frontend/src/api/index.ts +++ b/frontend/src/api/index.ts @@ -43,6 +43,7 @@ export const mapApi = { create: (data: any) => api.post('/maps', data), update: (id: number, data: any) => api.put(`/maps/${id}`, data), delete: (id: number) => api.delete(`/maps/${id}`), + batchDelete: (ids: number[]) => api.post('/maps/batch-delete', { ids }), createWithTemplate: (data: any) => api.post('/maps/create-with-template', data), } diff --git a/frontend/src/views/MapList.vue b/frontend/src/views/MapList.vue index 0928444e..70a0f4d7 100644 --- a/frontend/src/views/MapList.vue +++ b/frontend/src/views/MapList.vue @@ -2,9 +2,13 @@

战略地图

- 新建地图 +
+ 批量删除({{ selectedIds.length }}) + 新建地图 +
- + + @@ -66,6 +70,24 @@ const showForm = ref(false) const editingMap = ref(null) const form = ref({}) const createMode = ref("blank") +const selectedIds = ref([]) + +function onSelectionChange(rows: any[]) { + selectedIds.value = rows.map(r => r.id) +} + +async function batchDelete() { + if (selectedIds.value.length === 0) return + try { + await ElMessageBox.confirm(`确定删除选中的 ${selectedIds.value.length} 个地图?`, "批量删除") + await mapApi.batchDelete(selectedIds.value) + ElMessage.success(`已删除 ${selectedIds.value.length} 个地图`) + selectedIds.value = [] + load() + } catch (e: any) { + if (e !== "cancel") ElMessage.error("批量删除失败") + } +} async function load() { try { const r: any = await mapApi.list(); maps.value = r.data || [] } catch (e) {}