From 26e6cc433b0f549e9cebd616f3ea5ea5e480f19e Mon Sep 17 00:00:00 2001 From: long <452591453@qq.com> Date: Fri, 3 Jul 2026 12:01:49 +0800 Subject: [PATCH] Add bulk asset resource deletion --- admin/src/views/asset/resource/index.vue | 29 +++++++++++++++++-- .../asset/AssetResourceController.php | 11 +++++-- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/admin/src/views/asset/resource/index.vue b/admin/src/views/asset/resource/index.vue index 5af785ab..149deb03 100644 --- a/admin/src/views/asset/resource/index.vue +++ b/admin/src/views/asset/resource/index.vue @@ -32,8 +32,12 @@ -
+
上传资源 + + 批量删除 + + 已选 {{ selectedIds.length }} 条
@@ -42,7 +46,8 @@ - + + @@ -129,8 +134,9 @@ import MaterialPicker from '@/components/material/picker.vue' import Upload from '@/components/upload/index.vue' const loading = ref(false) -const tableData = ref([]) +const tableData = ref([]) const total = ref(0) +const selectedIds = ref([]) const searchData = reactive({ title: '', @@ -198,6 +204,7 @@ const getList = async () => { const res = await apiAssetResourceList(buildQueryParams()) tableData.value = res.lists total.value = res.count + selectedIds.value = [] } catch (e) { console.error(e) } finally { @@ -269,6 +276,22 @@ const handleDelete = async (row: any) => { } } +const handleSelectionChange = (rows: any[]) => { + selectedIds.value = rows.map((row) => Number(row.id)).filter((id) => id > 0) +} + +const handleBatchDelete = async () => { + if (!selectedIds.value.length) return + try { + await ElMessageBox.confirm(`确定要删除选中的 ${selectedIds.value.length} 个资源吗?用户将无法再看到。`, '提示', { type: 'warning' }) + await apiAssetResourceDelete({ id: selectedIds.value }) + ElMessage.success('删除成功') + getList() + } catch (e) { + // canceled + } +} + const submitForm = async () => { if (!formRef.value) return await formRef.value.validate(async (valid: boolean) => { diff --git a/server/app/adminapi/controller/asset/AssetResourceController.php b/server/app/adminapi/controller/asset/AssetResourceController.php index a8f52c7d..2c9dbea4 100644 --- a/server/app/adminapi/controller/asset/AssetResourceController.php +++ b/server/app/adminapi/controller/asset/AssetResourceController.php @@ -169,14 +169,19 @@ class AssetResourceController extends BaseAdminController public function delete() { $id = $this->request->post('id'); - if (empty($id)) { + $ids = is_array($id) ? $id : [$id]; + $ids = array_values(array_unique(array_filter(array_map('intval', $ids), static function (int $item): bool { + return $item > 0; + }))); + + if (empty($ids)) { return $this->fail('缺少参数'); } Db::startTrans(); try { - AssetResource::destroy($id); - AssetUserResource::where('resource_id', $id)->delete(); + AssetResource::destroy($ids); + AssetUserResource::whereIn('resource_id', $ids)->delete(); Db::commit(); return $this->success('删除成功'); } catch (\Exception $e) {