90 lines
4.9 KiB
Python
90 lines
4.9 KiB
Python
"""CRM 联系人 Pydantic Schemas"""
|
||
|
||
from typing import List, Optional
|
||
|
||
from pydantic import BaseModel, ConfigDict, Field
|
||
|
||
|
||
class ContactListBody(BaseModel):
|
||
model_config = ConfigDict(populate_by_name=True)
|
||
|
||
page: int = Field(default=1, ge=1, description="页码")
|
||
pageSize: int = Field(default=10, ge=1, le=500, description="每页条数")
|
||
keyword: Optional[str] = Field(default=None, description="搜索关键词(姓名/手机号/邮箱/职位 OR)")
|
||
contact_name: Optional[str] = Field(default=None, alias="contactName", description="联系人姓名(模糊)")
|
||
mobile: Optional[str] = Field(default=None, description="手机号(模糊)")
|
||
position: Optional[str] = Field(default=None, description="职位(模糊)")
|
||
customer_id: Optional[str] = Field(default=None, alias="customerId", description="客户ID")
|
||
is_key: Optional[int] = Field(default=None, alias="isKey", description="是否关键决策人(0/1)")
|
||
is_primary: Optional[int] = Field(default=None, alias="isPrimary", description="是否主要联系人(0/1)")
|
||
status: Optional[str] = Field(default=None, description="状态")
|
||
role: Optional[str] = Field(default=None, description="角色")
|
||
|
||
ids: Optional[List[str]] = Field(default=None, description="导出指定ID列表")
|
||
columns: Optional[List[str]] = Field(default=None, description="导出列(前端 visibleColumns)")
|
||
|
||
|
||
class ContactCreateBody(BaseModel):
|
||
model_config = ConfigDict(populate_by_name=True)
|
||
|
||
customer_id: str = Field(..., alias="customerId", description="客户ID")
|
||
customer_name: Optional[str] = Field(default=None, alias="customerName", description="客户名称(冗余)")
|
||
contact_name: str = Field(..., alias="contactName", description="联系人姓名")
|
||
gender: Optional[str] = Field(default=None, description="性别(male/female/unknown)")
|
||
mobile: Optional[str] = Field(default=None, description="手机号")
|
||
telephone: Optional[str] = Field(default=None, description="固定电话")
|
||
email: Optional[str] = Field(default=None, description="邮箱")
|
||
wechat: Optional[str] = Field(default=None, description="微信号")
|
||
qq: Optional[str] = Field(default=None, description="QQ号")
|
||
department: Optional[str] = Field(default=None, description="部门")
|
||
position: Optional[str] = Field(default=None, description="职位")
|
||
role: Optional[str] = Field(default=None, description="角色(decision/manager/user/other)")
|
||
birthday: Optional[str] = Field(default=None, description="生日(YYYY-MM-DD)")
|
||
address: Optional[str] = Field(default=None, description="住址")
|
||
is_key: Optional[int] = Field(default=0, alias="isKey", description="是否关键决策人(0/1)")
|
||
is_primary: Optional[int] = Field(default=0, alias="isPrimary", description="是否主要联系人(0/1)")
|
||
status: Optional[str] = Field(default="active", description="状态(active/leave)")
|
||
remark: Optional[str] = Field(default=None, description="备注")
|
||
|
||
|
||
class ContactUpdateBody(BaseModel):
|
||
model_config = ConfigDict(populate_by_name=True)
|
||
|
||
id: str = Field(..., description="联系人ID")
|
||
customer_id: Optional[str] = Field(default=None, alias="customerId", description="客户ID")
|
||
customer_name: Optional[str] = Field(default=None, alias="customerName", description="客户名称(冗余)")
|
||
contact_name: Optional[str] = Field(default=None, alias="contactName", description="联系人姓名")
|
||
gender: Optional[str] = Field(default=None, description="性别")
|
||
mobile: Optional[str] = Field(default=None, description="手机号")
|
||
telephone: Optional[str] = Field(default=None, description="固定电话")
|
||
email: Optional[str] = Field(default=None, description="邮箱")
|
||
wechat: Optional[str] = Field(default=None, description="微信号")
|
||
qq: Optional[str] = Field(default=None, description="QQ号")
|
||
department: Optional[str] = Field(default=None, description="部门")
|
||
position: Optional[str] = Field(default=None, description="职位")
|
||
role: Optional[str] = Field(default=None, description="角色")
|
||
birthday: Optional[str] = Field(default=None, description="生日")
|
||
address: Optional[str] = Field(default=None, description="住址")
|
||
is_key: Optional[int] = Field(default=None, alias="isKey", description="是否关键决策人")
|
||
is_primary: Optional[int] = Field(default=None, alias="isPrimary", description="是否主要联系人")
|
||
status: Optional[str] = Field(default=None, description="状态")
|
||
remark: Optional[str] = Field(default=None, description="备注")
|
||
|
||
|
||
class ContactDeleteBody(BaseModel):
|
||
ids: List[str] = Field(..., description="联系人ID列表")
|
||
|
||
|
||
class ContactDetailBody(BaseModel):
|
||
id: str = Field(..., description="联系人ID")
|
||
|
||
|
||
class ContactByCustomerBody(BaseModel):
|
||
model_config = ConfigDict(populate_by_name=True)
|
||
|
||
customer_id: str = Field(..., alias="customerId", description="客户ID")
|
||
|
||
|
||
class ContactSetPrimaryBody(BaseModel):
|
||
id: str = Field(..., description="联系人ID")
|