menu.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. # -*- coding: utf-8 -*-
  2. # @Author : YY
  3. from ruoyi_common.constant import UserConstants
  4. from ruoyi_common.base.model import AjaxResponse
  5. from ruoyi_common.domain.entity import SysMenu
  6. from ruoyi_common.domain.enum import BusinessType
  7. from ruoyi_common.descriptor.serializer import JsonSerializer
  8. from ruoyi_common.descriptor.validator import BodyValidator, QueryValidator,PathValidator
  9. from ruoyi_common.utils import security_util as SecurityUtil
  10. from ruoyi_system.service.sys_menu import SysMenuService
  11. from ruoyi_framework.descriptor.log import Log
  12. from ruoyi_framework.descriptor.permission import HasPerm, PreAuthorize
  13. from ... import reg
  14. @reg.api.route("/system/menu/list", methods=["GET"])
  15. @QueryValidator()
  16. @PreAuthorize(HasPerm("system:menu:list"))
  17. @JsonSerializer()
  18. def system_menu_list(dto:SysMenu):
  19. '''
  20. 获取菜单列表
  21. '''
  22. rows = SysMenuService.select_menu_list(dto,SecurityUtil.get_user_id())
  23. ajax_response = AjaxResponse.from_success(data=rows)
  24. return ajax_response
  25. @reg.api.route("/system/menu/<int:id>", methods=["GET"])
  26. @PathValidator()
  27. @PreAuthorize(HasPerm("system:menu:query"))
  28. @JsonSerializer()
  29. def system_menu(id:int):
  30. '''
  31. 获取菜单详情
  32. '''
  33. menu = SysMenuService.select_menu_by_id(id)
  34. ajax_response = AjaxResponse.from_success(data=menu)
  35. return ajax_response
  36. @reg.api.route("/system/menu/treeselect", methods=["GET"])
  37. @QueryValidator()
  38. @JsonSerializer()
  39. def system_menu_treeselect(dto:SysMenu):
  40. '''
  41. 获取菜单下拉树
  42. '''
  43. rows = SysMenuService.select_menu_list(dto,SecurityUtil.get_user_id())
  44. ajax_response = AjaxResponse.from_success(
  45. data=SysMenuService.build_menu_tree_select(rows)
  46. )
  47. return ajax_response
  48. @reg.api.route("/system/menu/roleMenuTreeselect/<int:id>", methods=["GET"])
  49. @PathValidator()
  50. @JsonSerializer()
  51. def system_menu_roletreeselect(id:int):
  52. '''
  53. 获取角色的菜单下拉树
  54. '''
  55. rows = SysMenuService.select_menu_list_by_user_id(
  56. SecurityUtil.get_user_id()
  57. )
  58. ajax_response = AjaxResponse.from_success()
  59. setattr(ajax_response, "checked_keys",
  60. SysMenuService.select_menu_list_by_role_id(id)
  61. )
  62. setattr(ajax_response, "menus",
  63. SysMenuService.build_menu_tree_select(rows)
  64. )
  65. return ajax_response
  66. @reg.api.route("/system/menu", methods=["POST"])
  67. @BodyValidator()
  68. @PreAuthorize(HasPerm("system:menu:add"))
  69. @Log(title="菜单管理",business_type=BusinessType.INSERT)
  70. @JsonSerializer()
  71. def system_menu_create(dto:SysMenu):
  72. '''
  73. 新增菜单
  74. '''
  75. if UserConstants.NOT_UNIQUE == SysMenuService.check_menu_name_unique(dto):
  76. return AjaxResponse.from_error("菜单名称已存在")
  77. elif UserConstants.YES_FRAME == dto.is_frame and not dto.path:
  78. return AjaxResponse.from_error(
  79. "新增菜单'{}'失败,地址必须以http(s)://开头".format(dto.menu_name)
  80. )
  81. dto.create_by_user(SecurityUtil.get_username())
  82. SysMenuService.insert_menu(dto)
  83. ajax_response = AjaxResponse.from_success()
  84. return ajax_response
  85. @reg.api.route("/system/menu", methods=["PUT"])
  86. @BodyValidator()
  87. @PreAuthorize(HasPerm("system:menu:edit"))
  88. @Log(title="菜单管理",business_type=BusinessType.UPDATE)
  89. @JsonSerializer()
  90. def system_menu_update(dto:SysMenu):
  91. '''
  92. 修改菜单
  93. '''
  94. if UserConstants.UNIQUE != SysMenuService.check_menu_name_unique(dto):
  95. return AjaxResponse.from_error("菜单名称已存在")
  96. elif dto.parent_id == dto.menu_id:
  97. return AjaxResponse.from_error("上级菜单不能是自己")
  98. elif UserConstants.YES_FRAME == dto.is_frame and not dto.path:
  99. return AjaxResponse.from_error(
  100. "新增菜单'{}'失败,地址必须以http(s)://开头".format(dto.menu_name)
  101. )
  102. dto.update_by_user(SecurityUtil.get_username())
  103. flag = SysMenuService.update_menu(dto)
  104. return AjaxResponse.from_success() if flag else AjaxResponse.from_error()
  105. @reg.api.route("/system/menu/<int:id>", methods=["DELETE"])
  106. @PathValidator()
  107. @PreAuthorize(HasPerm("system:menu:remove"))
  108. @Log(title="菜单管理",business_type=BusinessType.DELETE)
  109. @JsonSerializer()
  110. def system_menu_delete(id:int):
  111. '''
  112. 删除菜单
  113. '''
  114. if SysMenuService.has_child_by_menu_id(id):
  115. return AjaxResponse.from_error("该菜单存在下级菜单,不允许删除")
  116. if SysMenuService.check_menu_exist_role(id):
  117. return AjaxResponse.from_error("该菜单存已分配角色,不允许删除")
  118. flag = SysMenuService.delete_menu_by_id(id)
  119. return AjaxResponse.from_success() if flag else AjaxResponse.from_error()