def instance_data(self): post = self.db.query( models.User_Dict.user_id.label("user_id"), models.Dict_Data.label.label("post")).join( models.Dict_Data, models.Dict_Data.id == models.User_Dict.dict_id).join( models.Dict_Type, models.Dict_Type.id == models.Dict_Data.type_id).filter( models.Dict_Type.code == "post").subquery() query = self.db.query(models.User, models.Department, post).outerjoin( models.User_Department, models.User_Department.user_id == models.User.id).outerjoin( models.Department, models.Department.id == models.User_Department.department_id).outerjoin( post, post.c.user_id == models.User.id) if self.query_params.get("username"): query = query.filter( models.User.username.like("%" + self.query_params.get("username") + "%")) if self.query_params.get("nickname"): query = query.filter( models.User.nickname.like("%" + self.query_params.get("nickname") + "%")) if self.query_params.get("nickname"): query = query.filter( models.User.status == self.query_params.get("status")) # 根据部门ID筛选部门及部门下级所有员工 if self.query_params.get("deptId"): departments = self.db.query(models.Department).filter( models.Department.id, models.Department.status == 1).all() tree = list_to_tree([dep.dict() for dep in departments], root_id=self.query_params.get("deptId")) # 递归获取部门及部门下级 def get_list_id_by_tree(nodes): ids = [ nodes["id"], ] if nodes.get("children"): for node in nodes["children"]: ids = ids + get_list_id_by_tree(node) return ids tree_ids = get_list_id_by_tree(tree) query = query.filter( models.User_Department.department_id.in_(tree_ids)) rows = query.all() data = [] for row in rows: data_row = [ row.User.username, row.User.nickname, row.Department.name, row.User.identity_card, row.User.phone, row.User.sex, row.User.status, row[3] ] data.append(data_row) return data
def read_routes(title: Optional[str] = None, db: Session = Depends(deps.get_db)) -> Any: """菜单管理-查询""" menus = db.query(models.Menu) if title: menus = menus.filter(models.Menu.title.like('%' + title + '%')) # 暂时前端不进行title查询,前端不知道如何展示 menus = menus.all() menus = list_to_tree([menu.dict() for menu in menus], order="order") return {"code": 20000, "data": menus}
def read_roles(db: Session = Depends(deps.get_db)) -> Any: """角色权限""" role_infos = [] def deal_menu(menu): meta = { 'title': menu.title, } menu = menu.dict() menu['meta'] = meta return menu # 先取出所有数据再组成树结构 roles = db.query(models.Role).options( joinedload(models.Role.role_menu).joinedload( models.Role_Menu.menu)).order_by(models.Role.order.asc()).all() for role in roles: role_menus_list = list_to_tree( [deal_menu(role_menu.menu) for role_menu in role.role_menu], order="order") role_info = { "id": role.id, "name": role.name, "description": role.description, "order": role.order, "routes": role_menus_list } role_infos.append(role_info) return {"code": 20000, "data": role_infos}
def read_users( *, db: Session = Depends(deps.get_db), limit: int, page: int, deptId: Optional[int] = None, username: Optional[str] = None, nickname: Optional[str] = None, status: Optional[str] = None, ) -> Any: """用户管理-查询""" query = db.query(models.User, models.Department).outerjoin( models.User_Department, models.User_Department.user_id == models.User.id).outerjoin( models.Department, models.Department.id == models.User_Department.department_id) if username: query = query.filter(models.User.username.like("%" + username + "%")) if nickname: query = query.filter(models.User.nickname.like("%" + nickname + "%")) if status: query = query.filter(models.User.status == status) # 根据部门ID筛选部门及部门下级所有员工 if deptId: departments = db.query(models.Department).filter( models.Department.id, models.Department.status == 1).all() tree = list_to_tree([dep.dict() for dep in departments], root_id=deptId) # 递归获取部门及部门下级 def get_list_id_by_tree(nodes): ids = [ nodes["id"], ] if nodes.get("children"): for node in nodes["children"]: ids = ids + get_list_id_by_tree(node) return ids tree_ids = get_list_id_by_tree(tree) query = query.filter( models.User_Department.department_id.in_(tree_ids)) total = query.count() users = query.order_by(models.User.username).limit(limit).offset( (page - 1) * limit).all() user_list = [] for user in users: user_info = user[0].dict() user_info["department"] = user[1].dict() user_list.append(user_info) return { "code": 20000, "data": { "items": user_list, 'total': total }, }
def get_department_exclude_id( *, db: Session = Depends(deps.get_db), id: int, ) -> Any: """返回一个排除了子节点的树结构""" departments = db.query(models.Department).all() departments = list_to_tree( [department.dict() for department in departments], order="order", exclude=id) return { "code": 20000, "data": departments, }
def routes(db: Session = Depends(deps.get_db)) -> Any: """get all routes info""" menus = db.query(models.Menu).options(joinedload( models.Menu.role_menu)).all() def deal_menu(menu): meta = { 'title': menu.title, "icon": menu.icon, "noCache": menu.no_cache, "affix": menu.affix, "order": menu.order, "roles": [role.role_id for role in menu.role_menu] } menu = menu.dict() # menu["hidden"] = False menu["alwaysShow"] = True if not menu['parent_id'] else False menu['meta'] = meta return menu menus = list_to_tree([deal_menu(menu) for menu in menus], order="order") return {"code": 20000, "data": menus}
def get_departments(db: Session = Depends(deps.get_db), ) -> Any: """部门管理-查询""" departments = db.query(models.Department).all() departments = list_to_tree( [department.dict() for department in departments]) return {"code": 20000, "data": departments}