feat(crm): support datetime column sort on customer list.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
1 parent
e6af68a2c3
commit
72a8f97bd1
2 files changed
+24
-2
No files matched your search
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in new issue
Block a user