fix: 删除菜单包括子级

This commit is contained in:
2026-07-09 13:52:53 +08:00
parent 5749b95327
commit 5486f6e79d
11 changed files with 75 additions and 22 deletions

View File

@@ -49,8 +49,8 @@ export async function updateMenu(data: SystemMenuApi.Menu) {
}
/** 删除菜单 */
export async function deleteMenu(id: number) {
return requestClient.delete(`/system/menu/delete?id=${id}`);
export async function deleteMenu(id: number, cascade?: boolean) {
return requestClient.delete(`/system/menu/delete?id=${id}&cascade=${cascade || false}`);
}
/** 批量删除菜单 */

View File

@@ -8,7 +8,7 @@ import { Page, useVbenModal } from '@vben/common-ui';
import { SystemMenuTypeEnum } from '@vben/constants';
import { IconifyIcon } from '@vben/icons';
import { message } from 'antdv-next';
import { message, Modal } from 'antdv-next';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deleteMenu, getMenuList } from '#/api/system/menu';
@@ -43,13 +43,35 @@ function handleEdit(row: SystemMenuApi.Menu) {
}
/** 删除菜单 */
async function handleDelete(row: SystemMenuApi.Menu) {
function handleDelete(row: SystemMenuApi.Menu) {
const hasChildren = (row as any).children?.length > 0;
if (hasChildren) {
Modal.confirm({
title: '提示',
content: '该菜单存在子菜单,是否连子级一起删除?',
okText: '是',
cancelText: '否',
onOk: () => doDelete(row, true),
});
} else {
Modal.confirm({
title: '提示',
content: $t('ui.actionMessage.deleteConfirm', [row.name]),
okText: '确认',
cancelText: '取消',
onOk: () => doDelete(row, false),
});
}
}
/** 执行菜单删除 */
async function doDelete(row: SystemMenuApi.Menu, cascade: boolean) {
const hideLoading = message.loading({
content: $t('ui.actionMessage.deleting', [row.name]),
duration: 0,
});
try {
await deleteMenu(row.id!);
await deleteMenu(row.id!, cascade);
message.success($t('ui.actionMessage.deleteSuccess', [row.name]));
handleRefresh();
} finally {
@@ -161,10 +183,7 @@ const [Grid, gridApi] = useVbenVxeGrid({
danger: true,
icon: ACTION_ICON.DELETE,
auth: ['system:menu:delete'],
popConfirm: {
title: $t('ui.actionMessage.deleteConfirm', [row.name]),
confirm: handleDelete.bind(null, row),
},
onClick: handleDelete.bind(null, row),
},
]"
/>