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

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

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

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

@@ -35,6 +35,7 @@ from app.crud.crm.supplier_info import get_supplier_info
 from app.models.crm_models import CrmContract, CrmCustomer, CrmQuote, CrmQuoteApproval
 from app.models.models import SysUser
 from app.services.crm_quote_pdf import generate_quote_pdf
+from app.services.crm.list_sort import resolve_datetime_order_by
 from app.crud.crm.data_scope_helpers import apply_crm_owner_scope, ensure_crm_owner_row_in_scope
 
 _FMT = "%Y-%m-%d %H:%M:%S"
@@ -350,7 +351,19 @@ def _build_quote_filters(
             )
         )
 
-    return q.order_by(CrmQuote.create_time.desc())
+    default_order = CrmQuote.create_time.desc()
+    whitelist = {
+        "quoteDate": CrmQuote.quote_date,
+        "expireDate": CrmQuote.expire_date,
+        "lastViewTime": CrmQuote.last_view_time,
+        "createTime": CrmQuote.create_time,
+        "updateTime": CrmQuote.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 _fill_contract_linked_count(db: Session, rows: List[Dict[str, Any]]) -> None:

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

@@ -58,6 +58,8 @@ class QuoteListBody(BaseModel):
     endTime: Optional[str] = None
     approvedByUserId: Optional[str] = None
     pendingApprovalUserId: Optional[str] = None
+    sortField: Optional[str] = None
+    sortOrder: Optional[str] = None
 
     ids: Optional[List[str]] = Field(default=None, description="导出指定ID列表")
     columns: Optional[List[str]] = Field(default=None, description="导出列(前端 visibleColumns)")