Browse Source

查询新增分页器

baoyubo 11 months ago
parent
commit
0f6a98ff99
1 changed files with 39 additions and 22 deletions
  1. 39 22
      routers/api/emergencyPlans/__init__.py

+ 39 - 22
routers/api/emergencyPlans/__init__.py

@@ -16,6 +16,8 @@ async def get_emergency_plan_list(
     plan_type: str = Query(None, description='预案类型'),
     publish_date: datetime = Query(None, description='发布日期'),
     plan_name: str = Query(None, description='预案名称'),
+    page: int = Query(1, gt=0, description='页码'),
+    page_size: int = Query(10, gt=0, description='每页条目数量'),
     db: Session = Depends(get_db)
 ):
     try:
@@ -30,29 +32,43 @@ async def get_emergency_plan_list(
         if plan_name:
             query = query.filter(EmergencyPlan.plan_name.like(f'%{plan_name}%'))
 
-        # 执行查询
-        emergency_plans = query.all()
-
-        # 将查询结果转换为列表形式的字典
-        emergency_plans_list = [
-            {
-                "plan_id": plan.plan_id,
-                "plan_number": plan.plan_number,
-                "plan_name": plan.plan_name,
-                "plan_type_desc": plan.plan_type_desc,
-                "organizing_unit": plan.organizing_unit,
-                "document_number": plan.document_number,
-                "publish_date": plan.publish_date.strftime('%Y-%m-%d %H:%M:%S')
+            # 计算总条目数
+            total_items = query.count()
+
+            # 执行分页查询
+            emergency_plans = query.offset((page - 1) * page_size).limit(page_size).all()
+
+            # 将查询结果转换为列表形式的字典
+            emergency_plans_list = [
+                {
+                    "plan_id": plan.plan_id,
+                    "plan_number": plan.plan_number,
+                    "plan_name": plan.plan_name,
+                    "plan_type_desc": plan.plan_type_desc,
+                    "organizing_unit": plan.organizing_unit,
+                    "document_number": plan.document_number,
+                    "publish_date": plan.publish_date.strftime('%Y-%m-%d %H:%M:%S')
+                }
+                for plan in emergency_plans
+            ]
+
+            # 构建分页信息
+            pagination_info = {
+                "total": total_items,
+                "page": page,
+                "page_size": page_size,
+                "total_pages": (total_items + page_size - 1) // page_size
             }
-            for plan in emergency_plans
-        ]
 
-        # 返回结果
-        return {
-            "code": 200,
-            "msg": "成功获取预案列表",
-            "data": emergency_plans_list
-        }
+            # 返回结果
+            return {
+                "code": 200,
+                "msg": "成功获取预案列表",
+                "data": {
+                    "list": emergency_plans_list
+                },
+                "pagination": pagination_info
+            }
     except Exception as e:
         # 处理异常
         raise HTTPException(status_code=500, detail=str(e))
@@ -170,4 +186,5 @@ async def delete_emergency_plan(
         # 处理异常
         if str(e) == '':
             e = detail
-        raise HTTPException(status_code=500, detail=str(e))
+        raise HTTPException(status_code=500, detail=str(e))
+