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

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
wuzilongandCursor committed 2026-09-08 21:39:26 +08:00
1 parent e6af68a2c3
commit 72a8f97bd1
2 files changed
+24 -2

No files matched your search

+20 -2
View File
@@ -18,6 +18,7 @@ from app.crud.crm.data_scope_helpers import (
ensure_crm_owner_row_in_scope,
)
from app.services.crm.customer_list_filters import build_customer_column_filters
from app.services.crm.list_sort import resolve_datetime_order_by
from app.utils.pinyin_abbr import resolve_name_pinyin_abbr
@@ -285,9 +286,26 @@ def list_customers(
cap = max_page_size if max_page_size is not None else 500
page_size = min(max(1, page_size), cap)
order_by = CrmCustomer.create_time.desc()
default_order = CrmCustomer.create_time.desc()
if view_mode == "toFollow":
order_by = CrmCustomer.next_time.asc()
default_order = CrmCustomer.next_time.asc()
_customer_sort_whitelist = {
"lastTime": CrmCustomer.last_time,
"nextTime": CrmCustomer.next_time,
"dealTime": CrmCustomer.deal_time,
"intoPoolTime": CrmCustomer.into_pool_time,
"claimTime": CrmCustomer.claim_time,
"protectTime": CrmCustomer.protect_time,
"createTime": CrmCustomer.create_time,
"updateTime": CrmCustomer.update_time,
}
order_by = resolve_datetime_order_by(
filter_params.get("sort_field") or filter_params.get("sortField"),
filter_params.get("sort_order") or filter_params.get("sortOrder"),
_customer_sort_whitelist,
default_order,
)
rows = (
q.order_by(order_by)
+4
View File
@@ -202,6 +202,8 @@ class CustomerListBody(CustomerColumnFilterMixin):
ids: Optional[List[str]] = Field(default=None, description="导出指定ID列表")
columns: Optional[List[str]] = Field(default=None, description="导出列(前端 visibleColumns)")
sort_field: Optional[str] = Field(default=None, alias="sortField", description="日期列排序字段(prop)")
sort_order: Optional[str] = Field(default=None, alias="sortOrder", description="asc|desc")
def to_list_kwargs(self, *, view_mode_override: Optional[str] = None) -> dict:
"""解析列表查询参数,供 API 与 CRUD 共用。"""
@@ -210,6 +212,8 @@ class CustomerListBody(CustomerColumnFilterMixin):
kwargs = {
"keyword": keyword,
"view_mode": view_mode,
"sort_field": (self.sort_field or "").strip() or None,
"sort_order": (self.sort_order or "").strip() or None,
**self.column_filter_kwargs(),
}
# createTimeRange 优先于 begin/end / createTimeFrom/To