Files
shanxia2.0/backend/app/schemas/crm/contact.py
T
2026-08-22 09:08:05 +08:00

90 lines
4.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""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")