Просмотр исходного кода

feat(crm): support datetime column sort on contract list.

Co-authored-by: Cursor <cursoragent@cursor.com>
wuzilong 2 месяцев назад
Родитель
Сommit
f14a96b28d
2 измененных файлов с 16 добавлено и 1 удалено
  1. 14 1
      backend/app/crud/crm/contract.py
  2. 2 0
      backend/app/schemas/crm/contract.py

+ 14 - 1
backend/app/crud/crm/contract.py

@@ -30,6 +30,7 @@ from app.crud.crm.contract_product import (
 )
 from app.crud.crm.customer import get_customer
 from app.crud.crm.invoice_info import list_invoice_info_by_customer
+from app.services.crm.list_sort import resolve_datetime_order_by
 from app.services.crm_settlement_clause import default_settlement_clause
 from app.services.crm_supplier_hazard import assert_products_allowed_for_supplier
 from app.crud.crm.product import resolve_product_id_for_quote_item
@@ -445,7 +446,19 @@ def _build_contract_filters(
         else:
             q = q.filter(CrmContract.id == "__none__")
 
-    return q.order_by(CrmContract.create_time.desc())
+    default_order = CrmContract.create_time.desc()
+    whitelist = {
+        "signDate": CrmContract.sign_date,
+        "startDate": CrmContract.start_date,
+        "endDate": CrmContract.end_date,
+        "createTime": CrmContract.create_time,
+        "updateTime": CrmContract.update_time,
+    }
+    sort_field = _get_field(filters, "sort_field", "sortField")
+    sort_order = _get_field(filters, "sort_order", "sortOrder")
+    return q.order_by(
+        resolve_datetime_order_by(sort_field, sort_order, whitelist, default_order)
+    )
 
 
 def list_contracts(

+ 2 - 0
backend/app/schemas/crm/contract.py

@@ -84,6 +84,8 @@ class ContractListQuery(BaseModel):
     signDateEnd: Optional[str] = None
     beginTime: Optional[str] = None
     endTime: Optional[str] = None
+    sortField: Optional[str] = None
+    sortOrder: Optional[str] = None
 
 
 class ContractCreateBody(BaseModel):