feat: 地图列表批量删除 — checkbox多选+POST batch-delete API

This commit is contained in:
Hermes CI Fix
2026-07-14 15:39:36 +08:00
parent 966c9808ec
commit 61d37bc31c
3 changed files with 41 additions and 2 deletions
+16
View File
@@ -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:
+1
View File
@@ -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),
}
+23 -1
View File
@@ -2,9 +2,13 @@
<div>
<div style="display:flex;justify-content:space-between;margin-bottom:16px;">
<h3>战略地图</h3>
<div>
<el-button type="danger" size="small" :disabled="selectedIds.length === 0" @click="batchDelete">批量删除{{ selectedIds.length }}</el-button>
<el-button type="primary" @click="showForm=true;form={}">新建地图</el-button>
</div>
<el-table :data="maps" style="width:100%">
</div>
<el-table :data="maps" style="width:100%" @selection-change="onSelectionChange">
<el-table-column type="selection" width="40" />
<el-table-column prop="title" label="地图名称" min-width="200" />
<el-table-column prop="version" label="版本" width="80" />
<el-table-column prop="status" label="状态" width="80">
@@ -66,6 +70,24 @@ const showForm = ref(false)
const editingMap = ref<any>(null)
const form = ref<any>({})
const createMode = ref("blank")
const selectedIds = ref<number[]>([])
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) {}