123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- import json
- from django.core.paginator import Paginator
- from django.db.models import Q
- from backend.Form.AuthMenuForm import AuthMenuForm
- from DCbackend.utils.common import success, fail, pageData
- from backend.models import AuthMenu, Admin, AuthUserMenu
- from django.core.cache import cache
- class AuthMenuService:
- @staticmethod
- def verify_token(token):
- admin_id = cache.get(f"admin_token:{token}")
- if admin_id:
- return Admin.objects.filter(id=admin_id).first()
- return None
- # 根据token查询菜单
- @staticmethod
- def menuList(request):
- adminInfo = AuthMenuService.verify_token(request.POST.get("token"))
- if adminInfo is not None:
- rolaId = adminInfo.role_id
- return success(AuthMenuService.menuInfo(rolaId))
- else:
- return fail()
- @staticmethod
- def menuInfo(roleId):
- userMenus = AuthUserMenu.objects.filter(rola_id=roleId)
- results = []
- if userMenus.exists():
- for menu in userMenus:
- menuid = menu.menu_id
- menu = AuthMenu.objects.filter(id=menuid).first()
- if menu is not None:
- results.append({
- "id": menuid,
- "name": menu.name,
- "code": menu.code,
- "parent_id": menu.parent_id,
- "sort": menu.sort,
- "status": menu.status,
- "path": menu.path,
- "type": menu.type
- })
- return results;
- #角色权限返回菜单
- @staticmethod
- def search(request):
- parent_menus = AuthMenu.objects.filter(parent_id=0).order_by("-id")
- # 创建一个字典来存储一级菜单及其对应的二级菜单
- dataList = []
- for parent in parent_menus:
- # 查询每个一级菜单项的子菜单项
- child_menus = AuthMenu.objects.filter(parent_id=parent.id).order_by("-id")
- # 将一级菜单及其子菜单存储在字典中
- for child in child_menus:
- dataList.append({
- "id": child.id,
- "name": child.name,
- "code": child.code,
- "parent_id": child.parent_id,
- "sort": child.sort,
- "status": child.status,
- "path": child.path,
- "type": child.type
- })
- return success(dataList)
- #创建菜单
- @staticmethod
- def create(request):
- form = AuthMenuForm(request.POST)
- if form.is_valid():
- menu = form.save(commit=False) # 创建模型实例但不保存到数据库
- if menu.parent_id is None:
- menu.parent_id = 0
- menu.save() # 现在保存到数据库
- return success("成功")
- else:
- return fail(form.errors)
- @staticmethod
- def update(request):
- data = AuthMenu.objects.filter(id=request.POST.get("id")).first()
- if data is not None:
- data.name = request.POST.get("name")
- data.code = request.POST.get("code")
- data.parent_id = request.POST.get("parent_id")
- data.status = request.POST.get("status")
- data.sort = request.POST.get("sort")
- data.path = request.POST.get("path")
- data.type = request.POST.get("type")
- data.save()
- return success("成功")
- else:
- return fail("更新源数据失败")
- @staticmethod
- def delete(request):
- AuthMenu.objects.filter(id=request.POST.get("id")).update(status=4)
- return success("成功")
- @staticmethod
- def info(request):
- info = AuthMenu.objects.filter(id=request.POST.get("id")).first()
- return success(AuthMenuService.getDetail(info))
- #分页查询菜单
- @staticmethod
- def listpage(request):
- # 从POST请求中获取数据
- page = int(request.POST.get('page', 1))
- page_size = int(request.POST.get('page_size', 10))
- # 获取额外的筛选参数
- name = request.POST.get('name', '')
- code = request.POST.get('code', '')
- type = request.POST.get('type', '')
- status = request.POST.get('status', '')
- # 查询所有父级菜单
- parent_menus = AuthMenu.objects.filter(parent_id=0).order_by("-id")
- dataList = []
- for parent in parent_menus:
- # 构建子菜单的多条件查询
- child_query = Q(parent_id=parent.id)
- # 根据提供的参数添加筛选条件
- if name:
- child_query &= Q(name__icontains=name)
- if code:
- child_query &= Q(code__icontains=code)
- if type:
- child_query &= Q(type__icontains=type)
- if status:
- child_query &= Q(status__icontains=status)
- # 使用构建的条件查询子菜单
- child_menus = AuthMenu.objects.filter(child_query).order_by("-id")
- for child in child_menus:
- dataList.append({
- "id": child.id,
- "name": child.name,
- "code": child.code,
- "parent_id": child.parent_id,
- "sort": child.sort,
- "status": child.status,
- "path": child.path,
- "create_time": child.create_time,
- "type": child.type
- })
- # 对结果进行分页
- paginator = Paginator(dataList, page_size)
- page_obj = paginator.get_page(page)
- # 构建响应数据
- response_data = {
- "total": paginator.count,
- "page": page,
- "page_size": page_size,
- "data": list(page_obj)
- }
- return success(response_data)
- @staticmethod
- def getDetail(item: AuthMenu):
- return {
- "id": item.id,
- 'code': item.code,
- 'name': item.name,
- 'parent_id': item.parent_id,
- 'status': item.status,
- 'sort': item.sort,
- 'path': item.path,
- 'type': item.type
- }
|