From be05be920877735f7f76be9b72b2843784d68792 Mon Sep 17 00:00:00 2001 From: hanwenlu2016 <370389480@qq.com> Date: Sun, 8 Jun 2025 01:04:23 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20api=20=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E8=AF=B7=E6=B1=82=E6=96=B9=E5=BC=8F=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E/=E4=BF=AE=E6=94=B9=E6=9E=9A=E4=B8=BE=E9=80=89?= =?UTF-8?q?=E6=8B=A9/=E5=A2=9E=E5=8A=A0=E6=9F=A5=E8=AF=A2=E9=80=89?= =?UTF-8?q?=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化 审计日记排序体验 --- app/api/v1/apis/apis.py | 3 ++ app/api/v1/auditlog/auditlog.py | 29 ++++++++----- web/src/components/table/CrudTable.vue | 58 +++++++++++++++++++------ web/src/views/system/api/index.vue | 18 +++++++- web/src/views/system/auditlog/index.vue | 28 +++++++++++- 5 files changed, 107 insertions(+), 29 deletions(-) diff --git a/app/api/v1/apis/apis.py b/app/api/v1/apis/apis.py index 9cdca28b..ef26f1d6 100644 --- a/app/api/v1/apis/apis.py +++ b/app/api/v1/apis/apis.py @@ -15,6 +15,7 @@ async def list_api( path: str = Query(None, description="API路径"), summary: str = Query(None, description="API简介"), tags: str = Query(None, description="API模块"), + method: str = Query(None, description="请求方式"), ): q = Q() if path: @@ -23,6 +24,8 @@ async def list_api( q &= Q(summary__contains=summary) if tags: q &= Q(tags__contains=tags) + if method: + q &= Q(method=method) total, api_objs = await api_controller.list(page=page, page_size=page_size, search=q, order=["tags", "id"]) data = [await obj.to_dict() for obj in api_objs] return SuccessExtra(data=data, total=total, page=page, page_size=page_size) diff --git a/app/api/v1/auditlog/auditlog.py b/app/api/v1/auditlog/auditlog.py index 7dbff092..2f32b04e 100644 --- a/app/api/v1/auditlog/auditlog.py +++ b/app/api/v1/auditlog/auditlog.py @@ -4,22 +4,22 @@ from app.models.admin import AuditLog from app.schemas import SuccessExtra -from app.schemas.apis import * router = APIRouter() @router.get("/list", summary="查看操作日志") async def get_audit_log_list( - page: int = Query(1, description="页码"), - page_size: int = Query(10, description="每页数量"), - username: str = Query("", description="操作人名称"), - module: str = Query("", description="功能模块"), - method: str = Query("", description="请求方法"), - summary: str = Query("", description="接口描述"), - status: int = Query(None, description="状态码"), - start_time: datetime = Query("", description="开始时间"), - end_time: datetime = Query("", description="结束时间"), + page: int = Query(1, description="页码"), + page_size: int = Query(10, description="每页数量"), + username: str = Query("", description="操作人名称"), + module: str = Query("", description="功能模块"), + method: str = Query("", description="请求方法"), + summary: str = Query("", description="接口描述"), + status: int = Query(None, description="状态码"), + start_time: datetime = Query("", description="开始时间"), + end_time: datetime = Query("", description="结束时间"), + created_at_order: str = Query("desc", description="创建时间排序方式 asc/desc") ): q = Q() if username: @@ -39,7 +39,14 @@ async def get_audit_log_list( elif end_time: q &= Q(created_at__lte=end_time) - audit_log_objs = await AuditLog.filter(q).offset((page - 1) * page_size).limit(page_size).order_by("-created_at") + order_by_field = "-created_at" + if created_at_order and created_at_order.lower() == "asc": + order_by_field = "created_at" + + # Apply ordering before pagination + query = AuditLog.filter(q).order_by(order_by_field) + + audit_log_objs = await query.offset((page - 1) * page_size).limit(page_size) total = await AuditLog.filter(q).count() data = [await audit_log.to_dict() for audit_log in audit_log_objs] return SuccessExtra(data=data, total=total, page=page, page_size=page_size) diff --git a/web/src/components/table/CrudTable.vue b/web/src/components/table/CrudTable.vue index e8ca0369..f796c631 100644 --- a/web/src/components/table/CrudTable.vue +++ b/web/src/components/table/CrudTable.vue @@ -12,13 +12,17 @@ :scroll-x="scrollX" :row-key="(row) => row[rowKey]" :pagination="isPagination ? pagination : false" + :default-sort="props.defaultSort" + :sorter="sorterState" @update:checked-row-keys="onChecked" @update:page="onPageChange" + @update:sorter="onSorterChange" /> diff --git a/web/src/views/system/api/index.vue b/web/src/views/system/api/index.vue index 3f3f48e4..5246033e 100644 --- a/web/src/views/system/api/index.vue +++ b/web/src/views/system/api/index.vue @@ -1,6 +1,6 @@