From 03df05633cbafa254f4deff32805e72418f4f671 Mon Sep 17 00:00:00 2001 From: H0nGzA1 <2505811377@qq.com> Date: Thu, 9 Apr 2026 20:21:22 +0800 Subject: [PATCH] refactor(menu): align batch ops with MenuFieldCom pattern - pagination slots MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Rewrite index.vue: use pagination-left (circular delete btn) + pagination-right (selected count popover) like MenuFieldCom - Remove selectAll/selectNone from actionbar (table header checkbox handles selection) - Simplify handleBatchDelete: pluck ids → selectedRows.value = [] → doRefresh() (no clearSelection) - Simplify crud.tsx: remove batchDelete/selectAll/selectNone from actionbar, remove ElMessageBox import - Add buttons.selectedCount i18n key for zh-CN/en/zh-TW - Use height: 72vh wrapper like MenuFieldCom for consistent table height Co-Authored-By: Claude Opus 4.6 --- web/src/i18n/pages/menu/en.ts | 1 + web/src/i18n/pages/menu/zh-cn.ts | 1 + web/src/i18n/pages/menu/zh-tw.ts | 1 + .../menu/components/MenuButtonCom/crud.tsx | 48 +------------ .../menu/components/MenuButtonCom/index.vue | 68 +++++++++++++------ 5 files changed, 53 insertions(+), 66 deletions(-) diff --git a/web/src/i18n/pages/menu/en.ts b/web/src/i18n/pages/menu/en.ts index 4ff389b..1b2da3d 100644 --- a/web/src/i18n/pages/menu/en.ts +++ b/web/src/i18n/pages/menu/en.ts @@ -163,6 +163,7 @@ export default { clearSelection: 'Clear Selection', selectedTip: '{count} selected', totalCount: '{count} items total', + selectedCount: '{count} selected', }, scan: { title: 'Auto Scan API Permissions', diff --git a/web/src/i18n/pages/menu/zh-cn.ts b/web/src/i18n/pages/menu/zh-cn.ts index f531454..36e09df 100644 --- a/web/src/i18n/pages/menu/zh-cn.ts +++ b/web/src/i18n/pages/menu/zh-cn.ts @@ -163,6 +163,7 @@ export default { clearSelection: '取消选择', selectedTip: '已选择 {count} 项', totalCount: '共 {count} 条', + selectedCount: '已选择 {count} 项', }, scan: { title: '自动扫描接口权限', diff --git a/web/src/i18n/pages/menu/zh-tw.ts b/web/src/i18n/pages/menu/zh-tw.ts index 84ad504..9e77388 100644 --- a/web/src/i18n/pages/menu/zh-tw.ts +++ b/web/src/i18n/pages/menu/zh-tw.ts @@ -163,6 +163,7 @@ export default { clearSelection: '取消選擇', selectedTip: '已選擇 {count} 項', totalCount: '共 {count} 條', + selectedCount: '已選擇 {count} 項', }, scan: { title: '自動掃描接口權限', diff --git a/web/src/views/system/menu/components/MenuButtonCom/crud.tsx b/web/src/views/system/menu/components/MenuButtonCom/crud.tsx index c34a6d7..4809c64 100644 --- a/web/src/views/system/menu/components/MenuButtonCom/crud.tsx +++ b/web/src/views/system/menu/components/MenuButtonCom/crud.tsx @@ -3,7 +3,7 @@ import { useI18n } from 'vue-i18n'; import * as api from './api'; import {auth} from '/@/utils/authFunction' import {request} from '/@/utils/service'; -import { ElMessage, ElMessageBox } from 'element-plus'; +import { ElMessage } from 'element-plus'; import { nextTick, ref } from 'vue'; import XEUtils from 'xe-utils'; //此处为crudOptions配置 @@ -98,52 +98,6 @@ export const createCrudOptions = function ({crudExpose, context}: CreateCrudOpti } }, }, - batchDelete: { - 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') } - ); - const ids = XEUtils.pluck(selectedRows.value, 'id'); - // 清空表格勾选状态 - crudExpose.getBaseTableRef().clearSelection(); - // 手动清空 selectedRows(clearSelection 不保证触发 onSelectionChange) - selectedRows.value = []; - // 再调接口 + 刷新 - await api.BatchDelete(ids); - ElMessage.success(t('message.pages.menu.messages.deleteSuccess')); - crudExpose.doRefresh(); - }, - }, - selectAll: { - 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: true, - text: t('message.pages.menu.buttons.selectNone'), - disabled: () => selectedRows.value.length === 0, - click: () => { - crudExpose.getBaseTableRef().clearSelection(); - selectedRows.value = []; - }, - }, }, }, rowHandle: { diff --git a/web/src/views/system/menu/components/MenuButtonCom/index.vue b/web/src/views/system/menu/components/MenuButtonCom/index.vue index f41ce35..b5960d2 100644 --- a/web/src/views/system/menu/components/MenuButtonCom/index.vue +++ b/web/src/views/system/menu/components/MenuButtonCom/index.vue @@ -1,15 +1,35 @@ - -