From 3564c123a181f5d3654d9c17ee247f7507d46961 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 8 Sep 2025 13:12:57 +0800 Subject: [PATCH] =?UTF-8?q?reactor=EF=BC=9A=E3=80=90system=20=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E7=AE=A1=E7=90=86=E3=80=91menu=20=E8=BF=9B=E4=B8=80?= =?UTF-8?q?=E6=AD=A5=E7=BB=9F=E4=B8=80=E4=BB=A3=E7=A0=81=E9=A3=8E=E6=A0=BC?= =?UTF-8?q?=EF=BC=88=E6=9A=82=E6=97=B6=E5=8F=AA=E5=8C=85=E6=8B=AC=20elemen?= =?UTF-8?q?t-plus=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-ele/src/api/system/menu/index.ts | 5 + apps/web-ele/src/views/system/menu/data.ts | 42 +---- apps/web-ele/src/views/system/menu/index.vue | 153 ++++++++++++------ .../src/views/system/menu/modules/form.vue | 25 +-- 4 files changed, 131 insertions(+), 94 deletions(-) diff --git a/apps/web-ele/src/api/system/menu/index.ts b/apps/web-ele/src/api/system/menu/index.ts index 5d23e5230..754684fde 100644 --- a/apps/web-ele/src/api/system/menu/index.ts +++ b/apps/web-ele/src/api/system/menu/index.ts @@ -52,3 +52,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 deleteMenuList(ids: number[]) { + return requestClient.delete(`/system/menu/delete-list?ids=${ids.join(',')}`); +} \ No newline at end of file diff --git a/apps/web-ele/src/views/system/menu/data.ts b/apps/web-ele/src/views/system/menu/data.ts index de6d4ed5f..88c018a7a 100644 --- a/apps/web-ele/src/views/system/menu/data.ts +++ b/apps/web-ele/src/views/system/menu/data.ts @@ -1,12 +1,11 @@ import type { Recordable } from '@vben/types'; import type { VbenFormSchema } from '#/adapter/form'; -import type { OnActionClickFn, VxeTableGridOptions } from '#/adapter/vxe-table'; +import type { VxeTableGridOptions } from '#/adapter/vxe-table'; import type { SystemMenuApi } from '#/api/system/menu'; import { h } from 'vue'; -import { useAccess } from '@vben/access'; import { CommonStatusEnum, DICT_TYPE, @@ -21,8 +20,6 @@ import { getMenuList } from '#/api/system/menu'; import { $t } from '#/locales'; import { componentKeys } from '#/router/routes'; -const { hasAccessByCodes } = useAccess(); - /** 新增/修改的表单 */ export function useFormSchema(): VbenFormSchema[] { return [ @@ -63,6 +60,7 @@ export function useFormSchema(): VbenFormSchema[] { }, showSearch: true, treeDefaultExpandedKeys: [0], + allowClear: true, }, rules: 'selectRequired', renderComponentContent() { @@ -171,6 +169,7 @@ export function useFormSchema(): VbenFormSchema[] { component: 'AutoComplete', componentProps: { clearable: true, + allowClear: true, filterOption(input: string, option: { value: string }) { return option.value.toLowerCase().includes(input.toLowerCase()); }, @@ -270,10 +269,9 @@ export function useFormSchema(): VbenFormSchema[] { } /** 列表的字段 */ -export function useGridColumns( - onActionClick: OnActionClickFn, -): VxeTableGridOptions['columns'] { +export function useGridColumns(): VxeTableGridOptions['columns'] { return [ + { type: 'checkbox', width: 40 }, { field: 'name', title: '菜单名称', @@ -309,8 +307,8 @@ export function useGridColumns( }, { field: 'componentName', - minWidth: 200, title: '组件名称', + minWidth: 200, }, { field: 'status', @@ -322,34 +320,10 @@ export function useGridColumns( }, }, { - field: 'operation', title: '操作', - minWidth: 200, + width: 220, fixed: 'right', - align: 'center', - showOverflow: false, - cellRender: { - attrs: { - nameField: 'name', - onClick: onActionClick, - }, - name: 'CellOperation', - options: [ - { - code: 'append', - text: '新增下级', - show: hasAccessByCodes(['system:menu:create']), - }, - { - code: 'edit', - show: hasAccessByCodes(['system:menu:update']), - }, - { - code: 'delete', - show: hasAccessByCodes(['system:menu:delete']), - }, - ], - }, + slots: { default: 'actions' }, }, ]; } diff --git a/apps/web-ele/src/views/system/menu/index.vue b/apps/web-ele/src/views/system/menu/index.vue index d89914bc6..94a14ef6f 100644 --- a/apps/web-ele/src/views/system/menu/index.vue +++ b/apps/web-ele/src/views/system/menu/index.vue @@ -1,20 +1,18 @@ @@ -125,20 +136,33 @@ const [Grid, gridApi] = useVbenVxeGrid({ - - + + + diff --git a/apps/web-ele/src/views/system/menu/modules/form.vue b/apps/web-ele/src/views/system/menu/modules/form.vue index 42cb91047..0662193ea 100644 --- a/apps/web-ele/src/views/system/menu/modules/form.vue +++ b/apps/web-ele/src/views/system/menu/modules/form.vue @@ -59,27 +59,28 @@ const [Modal, modalApi] = useVbenModal({ return; } // 加载数据 - let data = modalApi.getData(); - if (!data) { + const data = modalApi.getData(); + if (!data || !data.id) { + // 设置上级 + await formApi.setValues(data); return; } - if (data.id) { - modalApi.lock(); - try { - data = await getMenu(data.id); - } finally { - modalApi.unlock(); + modalApi.lock(); + try { + formData.value = await getMenu(data.id); + // 设置到 values + if (formData.value) { + await formApi.setValues(formData.value); } + } finally { + modalApi.unlock(); } - // 设置到 values - formData.value = data; - await formApi.setValues(formData.value); }, });