AuthMenuService.py 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. import json
  2. from django.core.paginator import Paginator
  3. from django.db.models import Q
  4. from backend.Form.AuthMenuForm import AuthMenuForm
  5. from DCbackend.utils.common import success, fail, pageData
  6. from backend.models import AuthMenu, Admin, AuthUserMenu
  7. from django.core.cache import cache
  8. class AuthMenuService:
  9. @staticmethod
  10. def verify_token(token):
  11. admin_id = cache.get(f"admin_token:{token}")
  12. if admin_id:
  13. return Admin.objects.filter(id=admin_id).first()
  14. return None
  15. # 根据token查询菜单
  16. @staticmethod
  17. def menuList(request):
  18. adminInfo = AuthMenuService.verify_token(request.POST.get("token"))
  19. if adminInfo is not None:
  20. rolaId = adminInfo.role_id
  21. return success(AuthMenuService.menuInfo(rolaId))
  22. else:
  23. return fail()
  24. @staticmethod
  25. def menuInfo(roleId):
  26. userMenus = AuthUserMenu.objects.filter(rola_id=roleId)
  27. results = []
  28. if userMenus.exists():
  29. for menu in userMenus:
  30. menuid = menu.menu_id
  31. menu = AuthMenu.objects.filter(id=menuid).first()
  32. if menu is not None:
  33. results.append({
  34. "id": menuid,
  35. "name": menu.name,
  36. "code": menu.code,
  37. "parent_id": menu.parent_id,
  38. "sort": menu.sort,
  39. "status": menu.status,
  40. "path": menu.path,
  41. "type": menu.type
  42. })
  43. return results;
  44. #角色权限返回菜单
  45. @staticmethod
  46. def search(request):
  47. parent_menus = AuthMenu.objects.filter(parent_id=0).order_by("-id")
  48. # 创建一个字典来存储一级菜单及其对应的二级菜单
  49. dataList = []
  50. for parent in parent_menus:
  51. # 查询每个一级菜单项的子菜单项
  52. child_menus = AuthMenu.objects.filter(parent_id=parent.id).order_by("-id")
  53. # 将一级菜单及其子菜单存储在字典中
  54. for child in child_menus:
  55. dataList.append({
  56. "id": child.id,
  57. "name": child.name,
  58. "code": child.code,
  59. "parent_id": child.parent_id,
  60. "sort": child.sort,
  61. "status": child.status,
  62. "path": child.path,
  63. "type": child.type
  64. })
  65. return success(dataList)
  66. #创建菜单
  67. @staticmethod
  68. def create(request):
  69. form = AuthMenuForm(request.POST)
  70. if form.is_valid():
  71. menu = form.save(commit=False) # 创建模型实例但不保存到数据库
  72. if menu.parent_id is None:
  73. menu.parent_id = 0
  74. menu.save() # 现在保存到数据库
  75. return success("成功")
  76. else:
  77. return fail(form.errors)
  78. @staticmethod
  79. def update(request):
  80. data = AuthMenu.objects.filter(id=request.POST.get("id")).first()
  81. if data is not None:
  82. data.name = request.POST.get("name")
  83. data.code = request.POST.get("code")
  84. data.parent_id = request.POST.get("parent_id")
  85. data.status = request.POST.get("status")
  86. data.sort = request.POST.get("sort")
  87. data.path = request.POST.get("path")
  88. data.type = request.POST.get("type")
  89. data.save()
  90. return success("成功")
  91. else:
  92. return fail("更新源数据失败")
  93. @staticmethod
  94. def delete(request):
  95. AuthMenu.objects.filter(id=request.POST.get("id")).update(status=4)
  96. return success("成功")
  97. @staticmethod
  98. def info(request):
  99. info = AuthMenu.objects.filter(id=request.POST.get("id")).first()
  100. return success(AuthMenuService.getDetail(info))
  101. #分页查询菜单
  102. @staticmethod
  103. def listpage(request):
  104. # 从POST请求中获取数据
  105. page = int(request.POST.get('page', 1))
  106. page_size = int(request.POST.get('page_size', 10))
  107. # 获取额外的筛选参数
  108. name = request.POST.get('name', '')
  109. code = request.POST.get('code', '')
  110. type = request.POST.get('type', '')
  111. status = request.POST.get('status', '')
  112. # 查询所有父级菜单
  113. parent_menus = AuthMenu.objects.filter(parent_id=0).order_by("-id")
  114. dataList = []
  115. for parent in parent_menus:
  116. # 构建子菜单的多条件查询
  117. child_query = Q(parent_id=parent.id)
  118. # 根据提供的参数添加筛选条件
  119. if name:
  120. child_query &= Q(name__icontains=name)
  121. if code:
  122. child_query &= Q(code__icontains=code)
  123. if type:
  124. child_query &= Q(type__icontains=type)
  125. if status:
  126. child_query &= Q(status__icontains=status)
  127. # 使用构建的条件查询子菜单
  128. child_menus = AuthMenu.objects.filter(child_query).order_by("-id")
  129. for child in child_menus:
  130. dataList.append({
  131. "id": child.id,
  132. "name": child.name,
  133. "code": child.code,
  134. "parent_id": child.parent_id,
  135. "sort": child.sort,
  136. "status": child.status,
  137. "path": child.path,
  138. "create_time": child.create_time,
  139. "type": child.type
  140. })
  141. # 对结果进行分页
  142. paginator = Paginator(dataList, page_size)
  143. page_obj = paginator.get_page(page)
  144. # 构建响应数据
  145. response_data = {
  146. "total": paginator.count,
  147. "page": page,
  148. "page_size": page_size,
  149. "data": list(page_obj)
  150. }
  151. return success(response_data)
  152. @staticmethod
  153. def getDetail(item: AuthMenu):
  154. return {
  155. "id": item.id,
  156. 'code': item.code,
  157. 'name': item.name,
  158. 'parent_id': item.parent_id,
  159. 'status': item.status,
  160. 'sort': item.sort,
  161. 'path': item.path,
  162. 'type': item.type
  163. }