From 1dbdc816af27920061d77b6ebc503cc99f7a725d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A5=BD=E5=A5=87=E5=AE=9D=E5=AE=9D?= Date: Mon, 27 May 2024 16:30:31 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E6=9D=83=E9=99=90=E6=8E=A5=E5=8F=A3=E6=89=B9=E9=87=8F=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/dvadmin/system/views/menu_button.py | 27 ++++++++++++++++++- .../menu/components/MenuButtonCom/api.ts | 9 +++++++ .../menu/components/MenuButtonCom/crud.tsx | 18 +++++++++++++ 3 files changed, 53 insertions(+), 1 deletion(-) diff --git a/backend/dvadmin/system/views/menu_button.py b/backend/dvadmin/system/views/menu_button.py index 2a6c7428b..a845606bb 100644 --- a/backend/dvadmin/system/views/menu_button.py +++ b/backend/dvadmin/system/views/menu_button.py @@ -80,4 +80,29 @@ class MenuButtonViewSet(CustomModelViewSet): else: role_id = request.user.role.values_list('id', flat=True) queryset = RoleMenuButtonPermission.objects.filter(role__in=role_id).values_list('menu_button__value',flat=True).distinct() - return DetailResponse(data=queryset) \ No newline at end of file + return DetailResponse(data=queryset) + + @action(methods=['post'], detail=False, permission_classes=[IsAuthenticated]) + def batch_create(self, request, *args, **kwargs): + """ + 批量创建菜单“增删改查查”权限 + 创建的数据来源于菜单,需要规范创建菜单参数 + value:菜单的component_name:method + api:菜单的web_path增加'/api/'前缀,并根据method增加{id} + """ + menu_obj = Menu.objects.filter(id=request.data['menu']).first() + result_list = [ + {'menu': menu_obj.id, 'name': '新增', 'value': f'{menu_obj.component_name}:Create', 'api': f'/api/{menu_obj.web_path}/', + 'method': 0}, + {'menu': menu_obj.id, 'name': '删除', 'value': f'{menu_obj.component_name}:Delete', 'api': f'/api/{menu_obj.web_path}/{{id}}/', + 'method': 3}, + {'menu': menu_obj.id, 'name': '修改', 'value': f'{menu_obj.component_name}:Update', 'api': f'/api/{menu_obj.web_path}/{{id}}/', + 'method': 2}, + {'menu': menu_obj.id, 'name': '查询', 'value': f'{menu_obj.component_name}:Search', 'api': f'/api/{menu_obj.web_path}/', + 'method': 0}, + {'menu': menu_obj.id, 'name': '详情', 'value': f'{menu_obj.component_name}:Retrieve', 'api': f'/api/{menu_obj.web_path}/{{id}}/', + 'method': 0}] + serializer = self.get_serializer(data=result_list, many=True) + serializer.is_valid(raise_exception=True) + serializer.save() + return SuccessResponse(serializer.data, msg="批量创建成功") diff --git a/web/src/views/system/menu/components/MenuButtonCom/api.ts b/web/src/views/system/menu/components/MenuButtonCom/api.ts index bc473fcec..d91f920b5 100644 --- a/web/src/views/system/menu/components/MenuButtonCom/api.ts +++ b/web/src/views/system/menu/components/MenuButtonCom/api.ts @@ -39,3 +39,12 @@ export function DelObj(id: DelReq) { data: { id }, }); } + +export function BatchAdd(obj: AddReq) { + return request({ + url: apiPrefix + 'batch_create/', + method: 'post', + data: obj, + }); +} + diff --git a/web/src/views/system/menu/components/MenuButtonCom/crud.tsx b/web/src/views/system/menu/components/MenuButtonCom/crud.tsx index c1a7a1f01..908cf2a97 100644 --- a/web/src/views/system/menu/components/MenuButtonCom/crud.tsx +++ b/web/src/views/system/menu/components/MenuButtonCom/crud.tsx @@ -2,6 +2,8 @@ import {AddReq, DelReq, EditReq, dict, CreateCrudOptionsRet, CreateCrudOptionsPr import * as api from './api'; import {auth} from '/@/utils/authFunction' import {request} from '/@/utils/service'; +import { successNotification } from '/@/utils/message'; +import { ElMessage } from 'element-plus'; //此处为crudOptions配置 export const createCrudOptions = function ({crudExpose, context}: CreateCrudOptionsProps): CreateCrudOptionsRet { const pageRequest = async () => { @@ -40,6 +42,22 @@ export const createCrudOptions = function ({crudExpose, context}: CreateCrudOpti add: { show: auth('btn:Create') }, + batchAdd: { + show: true, + type: 'primary', + text: '批量生成', + click: async () => { + if (context!.selectOptions.value.id == undefined) { + ElMessage.error('请选择菜单'); + return; + } + const result = await api.BatchAdd({ menu: context!.selectOptions.value.id }); + if (result.code == 2000) { + successNotification(result.msg); + crudExpose.doRefresh(); + } + }, + }, }, }, rowHandle: { -- Gitee From bee0d672b398ca327cd2ba14c6015b3a5825a982 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A5=BD=E5=A5=87=E5=AE=9D=E5=AE=9D?= Date: Tue, 28 May 2024 11:52:56 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=96=B9=E6=B3=95=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/dvadmin/system/views/menu_button.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/dvadmin/system/views/menu_button.py b/backend/dvadmin/system/views/menu_button.py index a845606bb..14e26272b 100644 --- a/backend/dvadmin/system/views/menu_button.py +++ b/backend/dvadmin/system/views/menu_button.py @@ -93,7 +93,7 @@ class MenuButtonViewSet(CustomModelViewSet): menu_obj = Menu.objects.filter(id=request.data['menu']).first() result_list = [ {'menu': menu_obj.id, 'name': '新增', 'value': f'{menu_obj.component_name}:Create', 'api': f'/api/{menu_obj.web_path}/', - 'method': 0}, + 'method': 1}, {'menu': menu_obj.id, 'name': '删除', 'value': f'{menu_obj.component_name}:Delete', 'api': f'/api/{menu_obj.web_path}/{{id}}/', 'method': 3}, {'menu': menu_obj.id, 'name': '修改', 'value': f'{menu_obj.component_name}:Update', 'api': f'/api/{menu_obj.web_path}/{{id}}/', -- Gitee From 92fa2f2d7689b83ea732b9f331b4467e12bd278c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A5=BD=E5=A5=87=E5=AE=9D=E5=AE=9D?= <11259906+haoqibb@user.noreply.gitee.com> Date: Wed, 5 Jun 2024 00:56:38 +0000 Subject: [PATCH 3/3] update backend/dvadmin/system/views/menu_button.py. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 好奇宝宝 <11259906+haoqibb@user.noreply.gitee.com> --- backend/dvadmin/system/views/menu_button.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/backend/dvadmin/system/views/menu_button.py b/backend/dvadmin/system/views/menu_button.py index 14e26272b..f91839a8d 100644 --- a/backend/dvadmin/system/views/menu_button.py +++ b/backend/dvadmin/system/views/menu_button.py @@ -88,19 +88,19 @@ class MenuButtonViewSet(CustomModelViewSet): 批量创建菜单“增删改查查”权限 创建的数据来源于菜单,需要规范创建菜单参数 value:菜单的component_name:method - api:菜单的web_path增加'/api/'前缀,并根据method增加{id} + api:菜单的web_path增加'/api'前缀,并根据method增加{id} """ menu_obj = Menu.objects.filter(id=request.data['menu']).first() result_list = [ - {'menu': menu_obj.id, 'name': '新增', 'value': f'{menu_obj.component_name}:Create', 'api': f'/api/{menu_obj.web_path}/', + {'menu': menu_obj.id, 'name': '新增', 'value': f'{menu_obj.component_name}:Create', 'api': f'/api{menu_obj.web_path}/', 'method': 1}, - {'menu': menu_obj.id, 'name': '删除', 'value': f'{menu_obj.component_name}:Delete', 'api': f'/api/{menu_obj.web_path}/{{id}}/', + {'menu': menu_obj.id, 'name': '删除', 'value': f'{menu_obj.component_name}:Delete', 'api': f'/api{menu_obj.web_path}/{{id}}/', 'method': 3}, - {'menu': menu_obj.id, 'name': '修改', 'value': f'{menu_obj.component_name}:Update', 'api': f'/api/{menu_obj.web_path}/{{id}}/', + {'menu': menu_obj.id, 'name': '修改', 'value': f'{menu_obj.component_name}:Update', 'api': f'/api{menu_obj.web_path}/{{id}}/', 'method': 2}, - {'menu': menu_obj.id, 'name': '查询', 'value': f'{menu_obj.component_name}:Search', 'api': f'/api/{menu_obj.web_path}/', + {'menu': menu_obj.id, 'name': '查询', 'value': f'{menu_obj.component_name}:Search', 'api': f'/api{menu_obj.web_path}/', 'method': 0}, - {'menu': menu_obj.id, 'name': '详情', 'value': f'{menu_obj.component_name}:Retrieve', 'api': f'/api/{menu_obj.web_path}/{{id}}/', + {'menu': menu_obj.id, 'name': '详情', 'value': f'{menu_obj.component_name}:Retrieve', 'api': f'/api{menu_obj.web_path}/{{id}}/', 'method': 0}] serializer = self.get_serializer(data=result_list, many=True) serializer.is_valid(raise_exception=True) -- Gitee