__init__.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from fastapi import APIRouter, Request, Depends,Query,HTTPException
  4. from database import get_db
  5. from sqlalchemy.orm import Session
  6. from fastapi.responses import JSONResponse
  7. from models import *
  8. from utils import *
  9. from utils.ry_system_util import *
  10. from common.security import valid_access_token
  11. import traceback
  12. router = APIRouter()
  13. @router.post('')
  14. async def rolecreate(
  15. db: Session = Depends(get_db),
  16. user_id: int = Depends(valid_access_token),
  17. body = Depends(remove_xss_json)
  18. ):
  19. try:
  20. role.role_key = body['roleKey']
  21. role.role_name = body['roleName']
  22. role.role_sort = body['roleSort']
  23. role.status = body['status']
  24. role.remark = body['remark']
  25. menuCheckStrictly = body['menuCheckStrictly']
  26. if menuCheckStrictly:
  27. role.menu_check_strictly = 1
  28. else:
  29. role.menu_check_strictly = 0
  30. menuIds = body['menuIds']
  31. # 清除当前用户的所有角色关联
  32. db.query(SysRoleMenu).filter(SysRoleMenu.role_id == roleId).delete()
  33. # 创建新的用户角色关联
  34. new_role_menus = [SysRoleMenu(role_id=roleId, menu_id=menu_id) for menu_id in menuIds]
  35. db.add_all(new_role_menus)
  36. db.commit()
  37. return {"code": 200, "msg": "更新成功", "data": None}
  38. except Exception as e:
  39. traceback.print_exc()
  40. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  41. @router.put('')
  42. async def roleupdate(
  43. db: Session = Depends(get_db),
  44. user_id: int = Depends(valid_access_token),
  45. body = Depends(remove_xss_json)
  46. ):
  47. try:
  48. roleId = body['roleId']
  49. query = db.query(SysRole)
  50. query = query.filter(SysRole.del_flag != '2')
  51. query = query.filter(SysRole.role_id == roleId)
  52. role = query.first()
  53. if not role :
  54. return JSONResponse(status_code=410, content={
  55. 'errcode': 410,
  56. 'errmsg': f'角色{roleId}不存在'
  57. })
  58. role.role_key = body['roleKey']
  59. role.role_name = body['roleName']
  60. role.role_sort = body['roleSort']
  61. role.status = body['status']
  62. role.remark = body['remark']
  63. menuCheckStrictly = body['menuCheckStrictly']
  64. if menuCheckStrictly:
  65. role.menu_check_strictly = 1
  66. else:
  67. role.menu_check_strictly = 0
  68. menuIds = body['menuIds']
  69. # 清除当前用户的所有角色关联
  70. db.query(SysRoleMenu).filter(SysRoleMenu.role_id == roleId).delete()
  71. # 创建新的用户角色关联
  72. new_role_menus = [SysRoleMenu(role_id=roleId, menu_id=menu_id) for menu_id in menuIds]
  73. db.add_all(new_role_menus)
  74. db.commit()
  75. return {"code": 200, "msg": "更新成功", "data": None}
  76. except Exception as e:
  77. traceback.print_exc()
  78. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  79. @router.get('/list')
  80. async def rolelist( roleName: int = Query(None ,description='角色名称'),
  81. roleKey: str = Query(None, description='权限字符'),
  82. status: int = Query(None, description='角色状态'),
  83. # beginTime: str = Depends(get_time_params),
  84. # endTime: str = Depends(get_time_params),
  85. page: int = Query(1, gt=0, description='页码'),
  86. pageSize: int = Query(10, gt=0, description='每页条目数量'),
  87. db: Session = Depends(get_db),
  88. user_id: int = Depends(valid_access_token)):
  89. try:
  90. # 构建查询
  91. query = db.query(SysRole)
  92. query = query.filter(SysRole.del_flag != '2')
  93. # 应用查询条件
  94. # if beginTime:
  95. # query = query.filter(SysUser.create_time >= beginTime)
  96. # if endTime:
  97. # query = query.filter(SysUser.create_time <= endTime)
  98. # if params:
  99. # query = query.filter(SysUser.create_time >= params.get("beginTime"))
  100. # query = query.filter(SysUser.create_time <= params.get("endTime"))
  101. if roleName:
  102. query =query.filter(SysRole.role_name.like(f'%{roleName}%'))
  103. if status:
  104. query =query.filter(SysRole.status==status)
  105. if roleKey:
  106. query =query.filter(SysRole.role_key.like(f'%{roleKey}%'))
  107. # 计算总条目数
  108. total_items = query.count()
  109. # 排序
  110. query = query.order_by(SysRole.create_time.desc())
  111. # 执行分页查询
  112. roles = query.offset((page - 1) * pageSize).limit(pageSize).all()
  113. # 将查询结果转换为列表形式的字典
  114. role_list = role_list_to_dict(roles,[])
  115. # 返回结果
  116. return {
  117. "code": 200,
  118. "msg": "成功",
  119. "rows": role_list,
  120. "total": total_items,
  121. "page": page,
  122. "pageSize": pageSize,
  123. "totalPages": (total_items + pageSize - 1) // pageSize
  124. }
  125. except Exception as e:
  126. traceback.print_exc()
  127. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  128. @router.get('/{roleId}')
  129. async def rolelist( roleId:int,
  130. db: Session = Depends(get_db),
  131. user_id: int = Depends(valid_access_token)):
  132. try:
  133. # 构建查询
  134. query = db.query(SysRole)
  135. query = query.filter(SysRole.del_flag != '2')
  136. # 应用查询条件
  137. query = query.filter(SysRole.role_id==roleId)
  138. roles = query.all()
  139. # 将查询结果转换为列表形式的字典
  140. role_list = role_list_to_dict(roles,[])
  141. # 返回结果
  142. return {
  143. "code": 200,
  144. "msg": "成功",
  145. "data": role_list[0]
  146. }
  147. except Exception as e:
  148. traceback.print_exc()
  149. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")