SuperAdminService.py 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. import uuid
  2. from django.forms import model_to_dict
  3. from DCbackend.utils.common import success, fail, pageData, handle_uploaded_file, oss_upload_file
  4. from DCbackend.utils.token import decrypt, encrypt
  5. from backend.Form.SuperAdminForm import SuperAdminForm
  6. from backend.Form.SuperSettingsForm import SuperSettingsForm
  7. from backend.Form.UserForm import UserForm
  8. from backend.models import ProjectCategory, DefaultStatus, Project, Admin, SuperAdmin, SuperSettings, AuthMenu
  9. from django.core.cache import cache
  10. class SuperAdminService:
  11. @staticmethod
  12. def createPassword(request):
  13. password = request.POST.get("password")
  14. password = encrypt(password)
  15. return success(password)
  16. @staticmethod
  17. def createAccount(request):
  18. form = SuperAdminForm(request.POST)
  19. if form.is_valid():
  20. form.instance.password = encrypt(form.instance.password)
  21. form.save()
  22. return success("新建账号成功")
  23. else:
  24. return fail(form.errors)
  25. @staticmethod
  26. def superLogin(request):
  27. username = request.POST.get("username", "")
  28. password = request.POST.get("password", "")
  29. adminInfo = SuperAdmin.objects.filter(username=username).first()
  30. if adminInfo is not None:
  31. if password == decrypt(adminInfo.password):
  32. # 检查是否存在有效的 token
  33. existing_token = SuperAdminService.get_existing_supertoken(adminInfo.id)
  34. if existing_token:
  35. # 如果存在有效的 token,直接返回
  36. return success({"token": existing_token})
  37. else:
  38. # 如果不存在有效的 token,生成新的
  39. new_token = uuid.uuid4().hex
  40. cache.set(f"superadmin_token:{new_token}", adminInfo.id, timeout=60 * 60 * 24)
  41. cache.set(f"superadmin_id_to_token:{adminInfo.id}", new_token, timeout=60 * 60 * 24)
  42. return success({"token": new_token})
  43. else:
  44. return fail("登录密码不正确")
  45. else:
  46. return fail("登录失败,管理员用户名不存在")
  47. @staticmethod
  48. def get_existing_supertoken(admin_id):
  49. # 尝试从缓存中获取该管理员的 token
  50. token = cache.get(f"superadmin_id_to_token:{admin_id}")
  51. if token:
  52. # 如果找到 token,检查它是否仍然有效
  53. if cache.get(f"superadmin_token:{token}"):
  54. return token
  55. return None
  56. @staticmethod
  57. def verify_token(token):
  58. admin_id = cache.get(f"superadmin_token:{token}")
  59. if admin_id:
  60. return SuperAdmin.objects.filter(id=admin_id).first()
  61. return None
  62. #获取配置信息
  63. @staticmethod
  64. def selcetSetting(request):
  65. token = request.POST.get("token")
  66. if not token:
  67. return fail("token为空")
  68. superInfo = SuperAdminService.verify_token(token)
  69. if not superInfo:
  70. return fail("用户不存在")
  71. setting = SuperSettings.objects.filter(id=superInfo).first()
  72. superInfo_dict = model_to_dict(setting)
  73. return success(superInfo_dict)
  74. @staticmethod
  75. def insertSetting(request):
  76. count = SuperSettings.objects.filter().count()
  77. if count > 0:
  78. return fail("已存在配置参数,请勿重复添加")
  79. form = SuperSettingsForm(request.POST)
  80. if form.is_valid():
  81. form.save()
  82. return success("新增成功")
  83. else:
  84. return fail(form.errors)
  85. @staticmethod
  86. def updateSettings(request):
  87. data = SuperSettings.objects.filter(id=request.POST.get("id")).first()
  88. if data is not None:
  89. data.logo = request.POST.get("logo")
  90. data.name = request.POST.get("name")
  91. data.sidebar_color = request.POST.get("sidebar_color")
  92. data.internal_color = request.POST.get("internal_color")
  93. data.button_color = request.POST.get("button_color")
  94. data.log_color = request.POST.get("log_color")
  95. data.log_color_url = request.POST.get("log_color_url")
  96. data.head_color = request.POST.get("head_color")
  97. data.save()
  98. return success("更新成功")
  99. else:
  100. return fail("更新源数据失败")
  101. @staticmethod
  102. def deleteSettings(request):
  103. id = request.POST.get("id")
  104. SuperSettings.objects.filter(id=id).delete()
  105. return success("物理删除成功")
  106. @staticmethod
  107. def getSuperMenu(request):
  108. token = request.POST.get("token")
  109. if not token:
  110. return fail("token为空")
  111. superInfo = SuperAdminService.verify_token(token)
  112. if not superInfo:
  113. return fail("用户不存在")
  114. parent_menus = AuthMenu.objects.filter(parent_id=0).order_by("id")
  115. dataList = []
  116. for parent in parent_menus:
  117. # 查询每个一级菜单项的子菜单项
  118. child_menus = AuthMenu.objects.filter(parent_id=parent.id).order_by("id")
  119. # 将一级菜单及其子菜单存储在字典中
  120. children = []
  121. for child in child_menus:
  122. children.append({
  123. "id": child.id,
  124. "name": child.name,
  125. "code": child.code,
  126. "parent_id": child.parent_id,
  127. "sort": child.sort,
  128. "status": child.status,
  129. "path": child.path,
  130. "type": child.type
  131. })
  132. dataList.append({
  133. "id": parent.id,
  134. "name": parent.name,
  135. "code": parent.code,
  136. "parent_id": parent.parent_id,
  137. "sort": parent.sort,
  138. "status": parent.status,
  139. "path": parent.path,
  140. "type": parent.type,
  141. "children": children
  142. })
  143. return success(dataList)
  144. @staticmethod
  145. def creatAdmin(request):
  146. form = UserForm(request.POST)
  147. if form.is_valid():
  148. form.instance.password = encrypt(form.instance.password)
  149. new_admin = form.save()
  150. return success("创建admin成功")
  151. else:
  152. return fail(form.errors)