浏览代码

用户列表页面,支持通过左侧机构导航过滤不同结构下面的用户(MYSQL CTE递归查询)

zisokal 1 年之前
父节点
当前提交
cfcac3ca0a
共有 2 个文件被更改,包括 23 次插入4 次删除
  1. 2 2
      README.md
  2. 21 2
      app/routes/user.py

+ 2 - 2
README.md

@@ -23,7 +23,7 @@
 
 
 **如果有需要详细设计电子书的同学,10元一本,一杯奶茶不到的价格,写作不容易。**
 **如果有需要详细设计电子书的同学,10元一本,一杯奶茶不到的价格,写作不容易。**
 
 
-**另外针对一些特别基础的小白,有偿提供咨询服务,咨询费29.9元,同时提供详细设计电子书一本。**
+**另外针对一些特别基础的小白,有偿提供咨询服务,咨询费39.9元,同时提供详细设计电子书一本。**
 
 
 **支持有偿系统定制,学生编程作业、毕业设计都可以,和本系统无关也行,根据具体情况,几百几千不等,具体可以微信私聊。**
 **支持有偿系统定制,学生编程作业、毕业设计都可以,和本系统无关也行,根据具体情况,几百几千不等,具体可以微信私聊。**
 
 
@@ -84,7 +84,7 @@
 
 
 后端启动:
 后端启动:
 
 
-1. mysql创建名为authbase的数据库
+1. mysql创建名为authbase的数据库(因为机构查询用到了CTE,所以MYSQL需要8.0以上版本)
 2. 导入根目录下db.sql数据库脚本到authbase数据库中
 2. 导入根目录下db.sql数据库脚本到authbase数据库中
 3. pip3 install -r requirements.txt
 3. pip3 install -r requirements.txt
 4. 更改config.py DevelopmentConfig类下的数据库连接,提供用户名密码。
 4. 更改config.py DevelopmentConfig类下的数据库连接,提供用户名密码。

+ 21 - 2
app/routes/user.py

@@ -11,6 +11,7 @@ from .. import  db
 import uuid
 import uuid
 from sqlalchemy import asc, true
 from sqlalchemy import asc, true
 from sqlalchemy import desc
 from sqlalchemy import desc
+from sqlalchemy import text
 import flask_excel as excel
 import flask_excel as excel
 from .. import permission
 from .. import permission
 
 
@@ -89,8 +90,26 @@ def user_grid():
 
 
     page = request.args.get('pageNum', 1, type=int)
     page = request.args.get('pageNum', 1, type=int)
     rows = request.args.get('pageSize', 10, type=int)
     rows = request.args.get('pageSize', 10, type=int)
-    pagination = User.query.filter(*filters).order_by(*order_by).paginate(
-        page=page, per_page=rows, error_out=False)
+    if 'deptId' in request.args:
+        # Define a recursive CTE
+        dept_cte = (
+            db.session.query(Organization.ID)
+            .filter(Organization.ID == request.args['deptId'])
+            .cte('dept_tree', recursive=True)
+        )
+        
+        # Recursive part of the CTE
+        dept_cte = dept_cte.union_all(
+            db.session.query(Organization.ID)
+            .join(dept_cte, Organization.SYORGANIZATION_ID == dept_cte.c.ID)
+        )
+        pagination = User.query.join(Organization, User.organizations).join(
+            dept_cte, Organization.ID == dept_cte.c.ID).filter(*filters).params(
+            dept_id=request.args['deptId']).order_by(*order_by).paginate(
+            page=page, per_page=rows, error_out=False)
+    else:
+        pagination = User.query.filter(*filters).order_by(*order_by).paginate(
+            page=page, per_page=rows, error_out=False)
     users = pagination.items
     users = pagination.items
 
 
     return jsonify({'rows': [user.to_json() for user in users], 'total': pagination.total, 'code': 200, 'msg': '查询成功'})
     return jsonify({'rows': [user.to_json() for user in users], 'total': pagination.total, 'code': 200, 'msg': '查询成功'})