wip: 客户评级弹窗化/公司信息精简/参数中文化/品牌站点同步(基于 927592b)
This commit is contained in:
1 parent
927592b472
commit
27533eb465
43 files changed
+2959
-434
No files matched your search
@@ -1,6 +1,7 @@
|
||||
"""客户管理的请求/响应模型(需求 2.1.3)。"""
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Literal
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, Field
|
||||
|
||||
@@ -13,6 +14,10 @@ class CustomerOut(BaseModel):
|
||||
owner_personnel_name 由 LEFT JOIN 带出:归属人员不可考(被物理删除的
|
||||
脏数据)时为 null,owner_personnel_id 仍返回原值供追溯 —— 与归属留痕
|
||||
「ID 固化、姓名随联表」同一口径。
|
||||
|
||||
rating_total / rating_grade_name 由 LEFT JOIN customer_ratings 带出
|
||||
(列表评级列免 N+1):未评级时均为 null;总分按分值红线以字符串出参,
|
||||
等级为保存时点的快照固化值(见 models/customer_rating.py)。
|
||||
"""
|
||||
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
@@ -28,6 +33,8 @@ class CustomerOut(BaseModel):
|
||||
owner_personnel_id: int | None = None
|
||||
owner_personnel_name: str | None = None
|
||||
remark: str | None = None
|
||||
rating_total: str | None = None
|
||||
rating_grade_name: str | None = None
|
||||
|
||||
|
||||
class CustomerCreateIn(BaseModel):
|
||||
@@ -97,6 +104,14 @@ class CustomerQuery(PageQuery):
|
||||
)
|
||||
customer_type: str | None = Field(default=None, max_length=32, description="客户分类筛选")
|
||||
owner_personnel_id: int | None = Field(default=None, ge=1, description="归属人员ID筛选")
|
||||
# 排序白名单(全项目首个列表排序参数):非法值由 Literal 拦下、经全局
|
||||
# 异常处理器转 400 —— 不把排序字段透传给 SQL,避免注入面
|
||||
order_field: Literal["rating"] | None = Field(
|
||||
default=None, description="排序字段白名单:rating=客户评级总分(等级由总分判定、同向)"
|
||||
)
|
||||
order_type: Literal["asc", "desc"] | None = Field(
|
||||
default=None, description="排序方向:asc 正序 / desc 倒序(未评级恒在末尾)"
|
||||
)
|
||||
|
||||
|
||||
class CustomerOwnershipIn(BaseModel):
|
||||
|
||||
Reference in new issue
Block a user