diff --git a/backend/dvadmin/system/views/menu.py b/backend/dvadmin/system/views/menu.py index ae74af8..3566dde 100644 --- a/backend/dvadmin/system/views/menu.py +++ b/backend/dvadmin/system/views/menu.py @@ -53,9 +53,6 @@ class MenuCreateSerializer(CustomModelSerializer): read_only_fields = ["id"] - - - class WebRouterSerializer(CustomModelSerializer): """ 前端菜单路由的简单序列化器 @@ -63,11 +60,11 @@ class WebRouterSerializer(CustomModelSerializer): path = serializers.CharField(source="web_path") title = serializers.CharField(source="name") - class Meta: model = Menu - fields = ('id', 'parent', 'icon', 'sort', 'path', 'name', 'title', 'is_link', 'is_catalog', 'web_path', 'component', - 'component_name', 'cache', 'visible') + fields = ( + 'id', 'parent', 'icon', 'sort', 'path', 'name', 'title', 'is_link', 'is_catalog', 'web_path', 'component', + 'component_name', 'cache', 'visible', 'status') read_only_fields = ["id"] @@ -86,6 +83,7 @@ class MenuViewSet(CustomModelViewSet): update_serializer_class = MenuCreateSerializer search_fields = ['name', 'status'] filter_fields = ['parent', 'name', 'status', 'is_link', 'visible', 'cache', 'is_catalog'] + # extra_filter_class = [] @action(methods=['GET'], detail=False, permission_classes=[]) @@ -101,12 +99,25 @@ class MenuViewSet(CustomModelViewSet): data = serializer.data return SuccessResponse(data=data, total=len(data), msg="获取成功") - def list(self,request): + @action(methods=['GET'], detail=False, permission_classes=[]) + def get_all_menu(self, request): + """用于菜单管理获取所有的菜单""" + user = request.user + queryset = self.queryset.all() + if not user.is_superuser: + role_list = user.role.values_list('id', flat=True) + menu_list = RoleMenuPermission.objects.filter(role__in=role_list).values_list('menu_id') + queryset = Menu.objects.filter(id__in=menu_list) + serializer = WebRouterSerializer(queryset, many=True, request=request) + data = serializer.data + return SuccessResponse(data=data, total=len(data), msg="获取成功") + + def list(self, request): """懒加载""" request.query_params._mutable = True params = request.query_params parent = params.get('parent', None) - page = params.get('page',None) + page = params.get('page', None) limit = params.get('limit', None) if page: del params['page'] diff --git a/web/src/views/system/menu/api.ts b/web/src/views/system/menu/api.ts index 1df5890..8dbaf69 100644 --- a/web/src/views/system/menu/api.ts +++ b/web/src/views/system/menu/api.ts @@ -6,12 +6,20 @@ export function GetList(query: PageQuery) { return request({ url: apiPrefix, method: 'get', - params: query + params: query, }); } +export function GetAllMenu(query: PageQuery) { + return request({ + url: apiPrefix + 'get_all_menu/', + method: 'get', + params: query, + }); +} + export function GetObj(id: InfoReq) { return request({ - url: apiPrefix + id+'/', + url: apiPrefix + id + '/', method: 'get', }); } @@ -32,10 +40,9 @@ export function UpdateObj(obj: EditReq) { }); } -export function DelObj(id: DelReq) { +export function DelObj(obj: DelReq) { return request({ - url: apiPrefix + id + '/', + url: apiPrefix + obj.id + '/', method: 'delete', - data: { id }, }); } diff --git a/web/src/views/system/menu/crud.tsx b/web/src/views/system/menu/crud.tsx index 9727a3d..659698d 100644 --- a/web/src/views/system/menu/crud.tsx +++ b/web/src/views/system/menu/crud.tsx @@ -3,7 +3,7 @@ import { dict, PageQuery, AddReq, DelReq, EditReq, CrudExpose, CrudOptions } fro import { dictionary } from '/@/utils/dictionary'; import { eIconPicker, eIcon } from 'e-icon-picker'; import { useCompute } from '@fast-crud/fast-crud'; -import { inject,computed } from 'vue'; +import { inject, computed } from 'vue'; import { apiPrefix as menuPrefix } from './api'; import XEUtils from 'xe-utils'; import { request } from '/@/utils/service'; @@ -81,9 +81,20 @@ export const createCrudOptions = function ({ crudExpose, menuButtonRef }: { crud }, }, rowHandle: { - fixed: "right", - width: 310, + fixed: 'right', + width: 200, buttons: { + view: { + show: false, + }, + edit: { + iconRight: 'Edit', + type: 'text', + }, + remove: { + iconRight: 'Delete', + type: 'text', + }, custom: { text: '按钮配置', type: 'warning', @@ -104,15 +115,15 @@ export const createCrudOptions = function ({ crudExpose, menuButtonRef }: { crud menuButtonRef.value.initGet(); }, }, - addChildren:{ - text: "添加子级", - type:"warning", - click(context){ - const rowId =context.row.id - crudExpose.openAdd({ row: { parent: rowId } }) - } - } - } + addChildren: { + text: '添加子级', + type: 'text', + click(context) { + const rowId = context.row.id; + crudExpose.openAdd({ row: { parent: rowId } }); + }, + }, + }, }, columns: { _index: { diff --git a/web/src/views/system/menu/index.vue b/web/src/views/system/menu/index.vue index 1680ba0..88769b5 100644 --- a/web/src/views/system/menu/index.vue +++ b/web/src/views/system/menu/index.vue @@ -1,30 +1,303 @@ + +