feat: add batch-delete API endpoint, replace N+1 frontend calls

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-12 21:45:28 +08:00
parent 3a49780d8d
commit 17c45cab3f
4 changed files with 56 additions and 24 deletions
+8 -8
View File
@@ -272,15 +272,15 @@ async function batchDownload() {
async function batchDelete() {
try {
await ElMessageBox.confirm(`确定删除选中的 ${selected.value.length} 个文件?`, '确认')
for (const row of selected.value) {
if (row.input_image) {
await api.delete(`/files/input/${encodeURIComponent(row.input_image)}`)
}
if (row.id) {
await api.delete('/files/relations', { data: { ids: [row.id] } })
}
const files = selected.value
.filter(r => r.input_image)
.map(r => ({ directory: 'input', filename: r.input_image }))
const res = await api.post('/files/batch-delete', { files })
if (res.data.errors?.length) {
ElMessage.warning(`删除完成,${res.data.errors.length} 个文件失败`)
} else {
ElMessage.success('批量删除完成')
}
ElMessage.success('批量删除完成')
loadData()
} catch (err: any) {
if (err !== 'cancel') ElMessage.error('批量删除失败')
+8 -8
View File
@@ -223,15 +223,15 @@ async function batchDownload() {
async function batchDelete() {
try {
await ElMessageBox.confirm(`确定删除选中的 ${selected.value.length} 个文件?`, '确认')
for (const row of selected.value) {
if (row.result_purchase) {
await api.delete(`/files/result/${encodeURIComponent(row.result_purchase)}`)
}
if (row.id) {
await api.delete('/files/relations', { data: { ids: [row.id] } })
}
const files = selected.value
.filter(r => r.result_purchase)
.map(r => ({ directory: 'result', filename: r.result_purchase }))
const res = await api.post('/files/batch-delete', { files })
if (res.data.errors?.length) {
ElMessage.warning(`删除完成,${res.data.errors.length} 个文件失败`)
} else {
ElMessage.success('批量删除完成')
}
ElMessage.success('批量删除完成')
loadData()
} catch (err: any) {
if (err !== 'cancel') ElMessage.error('批量删除失败')
+8 -8
View File
@@ -231,15 +231,15 @@ async function batchProcess() {
async function batchDelete() {
try {
await ElMessageBox.confirm(`确定删除选中的 ${selected.value.length} 个文件?`, '确认')
for (const row of selected.value) {
if (row.output_excel) {
await api.delete(`/files/output/${encodeURIComponent(row.output_excel)}`)
}
if (row.id) {
await api.delete('/files/relations', { data: { ids: [row.id] } })
}
const files = selected.value
.filter(r => r.output_excel)
.map(r => ({ directory: 'output', filename: r.output_excel }))
const res = await api.post('/files/batch-delete', { files })
if (res.data.errors?.length) {
ElMessage.warning(`删除完成,${res.data.errors.length} 个文件失败`)
} else {
ElMessage.success('批量删除完成')
}
ElMessage.success('批量删除完成')
loadData()
} catch (err: any) {
if (err !== 'cancel') ElMessage.error('批量删除失败')