Exemple #1
0
    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
Exemple #2
0
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}
Exemple #3
0
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,
    }
Exemple #6
0
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}