diff --git a/backend/dvadmin/system/views/menu_button.py b/backend/dvadmin/system/views/menu_button.py index 2a6c7428bd6d13ede4ecdb2b2d8f565e4404a5c0..f91839a8d794737af6ea73aef0f8e4b82d124cac 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': 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}}/', + '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 bc473fcec02b1f5b867891abbd89140f06104c44..d91f920b5bbbb0d7ff96bf5ba86d1fd04418f5a9 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 c1a7a1f01dc159387bc957008398f6bd34a4f649..908cf2a97582582d4ceed75b235af1c68e024a3b 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: {