From 48aef9f233babf43c681074da17a2189e6168f9d Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Sun, 27 Sep 2026 18:36:28 +0800 Subject: [PATCH] feat(api): filter vehicle options by mineVehicles personnel Limit GET /transport/vehicle to plates linked via pl_vehicle_personnel for the current user. Co-authored-by: Cursor --- backend/app/api/pl/base_data.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/backend/app/api/pl/base_data.py b/backend/app/api/pl/base_data.py index bc25e7a50..da3fd9acf 100644 --- a/backend/app/api/pl/base_data.py +++ b/backend/app/api/pl/base_data.py @@ -443,6 +443,11 @@ def list_vehicles( alias="excludeIneligibleCarrier", description="排除资质不全或协议过期的承运商车辆", ), + mine_vehicles: Optional[bool] = Query( + default=None, + alias="mineVehicles", + description="仅返回当前用户关联驾押人员所挂靠车辆", + ), page: int = Query(default=1, ge=1), page_size: int = Query(default=20, ge=1, le=500, alias="pageSize"), db: Session = Depends(get_db), @@ -455,6 +460,7 @@ def list_vehicles( vehicleType=vehicle_type, carrierId=carrier_id, vehicleStatus=vehicle_status, + mineVehicles=mine_vehicles, ) query = db.query(PlVehicle).filter( PlVehicle.tenant_no == tenant_no, @@ -483,6 +489,18 @@ def list_vehicles( if column_filters: query = query.filter(*column_filters) + mine_flag = _param_get(params, "mineVehicles", "mine_vehicles") + if mine_flag is True or ( + mine_flag is not None + and str(mine_flag).strip().lower() in {"1", "true", "yes", "y"} + ): + from app.services.pl_vehicle_mine_vehicles import license_plates_for_user_personnel + + plates = license_plates_for_user_personnel(db, tenant_no, user.id) + if not plates: + return VehicleListResponse(total=0, list=[]) + query = query.filter(PlVehicle.license_plate.in_(list(plates))) + # 车辆为主数据,列表不做 create_by 数据范围过滤 query = query.order_by( case((PlVehicle.order_num.is_(None), 1), else_=0).asc(),