feat: 统一后端分页查询与前端服务层适配

后端新增通用分页模块,为报销单、员工、预算、agent 资产等
端点统一接入分页参数和游标查询,优化 repository 层分页实
现,前端服务层适配分页响应结构,完善预算图表和全局样式,
优化侧边栏和企业选择器组件,引入 Element Plus 插件注册。
This commit is contained in:
caoxiaozhu
2026-05-29 14:11:06 +08:00
parent e080105f9f
commit 678f64d772
43 changed files with 1863 additions and 378 deletions

View File

@@ -7,7 +7,8 @@ from fastapi.responses import Response
from sqlalchemy.orm import Session
from app.api.deps import get_db
from app.schemas.common import ErrorResponse
from app.api.pagination import PageNumber, PageSize, page_payload, wants_page
from app.schemas.common import ErrorResponse, PaginatedResponse
from app.schemas.employee import (
EmployeeCreate,
EmployeeImportResultRead,
@@ -16,6 +17,7 @@ from app.schemas.employee import (
EmployeeUpdate,
)
from app.services.employee import EmployeeService
from app.services.employee_pagination import EmployeePaginationService
router = APIRouter()
DbSession = Annotated[Session, Depends(get_db)]
@@ -33,7 +35,7 @@ def get_employee_meta(db: DbSession) -> EmployeeMetaRead:
@router.get(
"",
response_model=list[EmployeeRead],
response_model=list[EmployeeRead] | PaginatedResponse[EmployeeRead],
summary="查询员工列表",
description="按状态和关键字筛选员工目录。",
)
@@ -47,7 +49,18 @@ def list_employees(
str | None,
Query(description="姓名、工号、邮箱等关键字模糊查询。"),
] = None,
) -> list[EmployeeRead]:
page: PageNumber = None,
page_size: PageSize = None,
) -> list[EmployeeRead] | PaginatedResponse[EmployeeRead]:
if wants_page(page, page_size):
return page_payload(
EmployeePaginationService(db).list_employees_page(
status=status_filter,
keyword=keyword,
page=page,
page_size=page_size,
)
)
return EmployeeService(db).list_employees(status=status_filter, keyword=keyword)