From 31164aadd75a52870d15db44ce43a6e53c77ffaa Mon Sep 17 00:00:00 2001 From: H0nGzA1 <2505811377@qq.com> Date: Thu, 9 Apr 2026 20:12:00 +0800 Subject: [PATCH] refactor(menu): move batch ops back to actionbar, remove template toolbar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove batch toolbar from template (fixes toolbar not hiding after delete) - Restore selectAll/selectNone/batchDelete buttons in Fast-CRUD actionbar - batchDelete: fix order — pluck ids BEFORE clearing selectedRows - selectAll: remove unnecessary nextTick, toggleAllSelection then sync selectedRows - Template simplifies to just fs-crud + pagination-right total count Co-Authored-By: Claude Opus 4.6 --- .../menu/components/MenuButtonCom/crud.tsx | 41 +++++++++- .../menu/components/MenuButtonCom/index.vue | 80 +------------------ 2 files changed, 40 insertions(+), 81 deletions(-) diff --git a/web/src/views/system/menu/components/MenuButtonCom/crud.tsx b/web/src/views/system/menu/components/MenuButtonCom/crud.tsx index 911b19e..dfea9cb 100644 --- a/web/src/views/system/menu/components/MenuButtonCom/crud.tsx +++ b/web/src/views/system/menu/components/MenuButtonCom/crud.tsx @@ -99,13 +99,48 @@ export const createCrudOptions = function ({crudExpose, context}: CreateCrudOpti }, }, batchDelete: { - show: false, + show: auth('menu:DeleteButton'), + type: 'danger', + text: t('message.pages.menu.buttons.batchDelete'), + disabled: () => selectedRows.value.length === 0, + click: async () => { + if (selectedRows.value.length === 0) { + ElMessage.warning(t('message.pages.menu.messages.selectMenu')); + return; + } + await ElMessageBox.confirm( + t('message.pages.menu.messages.batchDeleteConfirm', { count: selectedRows.value.length }), + t('message.pages.menu.buttons.confirm'), + { type: 'warning', confirmButtonText: t('message.pages.menu.buttons.confirm'), cancelButtonText: t('message.pages.menu.buttons.cancel') } + ); + // 先拿到 ids,再清空表格选择 + const ids = XEUtils.pluck(selectedRows.value, 'id'); + crudExpose.getBaseTableRef().clearSelection(); + selectedRows.value = []; + await api.BatchDelete(ids); + ElMessage.success(t('message.pages.menu.messages.deleteSuccess')); + crudExpose.doRefresh(); + }, }, selectAll: { - show: false, + show: true, + text: t('message.pages.menu.buttons.selectAll'), + disabled: () => !context!.selectOptions.value.id, + click: () => { + const tableRef = crudExpose.getBaseTableRef(); + const tableData = crudExpose.getTableData(); + tableRef.toggleAllSelection(); + selectedRows.value = [...tableData]; + }, }, selectNone: { - show: false, + show: true, + text: t('message.pages.menu.buttons.selectNone'), + disabled: () => selectedRows.value.length === 0, + click: () => { + crudExpose.getBaseTableRef().clearSelection(); + selectedRows.value = []; + }, }, }, }, diff --git a/web/src/views/system/menu/components/MenuButtonCom/index.vue b/web/src/views/system/menu/components/MenuButtonCom/index.vue index 127ceaf..f41ce35 100644 --- a/web/src/views/system/menu/components/MenuButtonCom/index.vue +++ b/web/src/views/system/menu/components/MenuButtonCom/index.vue @@ -1,19 +1,5 @@