6504a393e3
- customers 表新增 customer_type 列 (unit/individual) - 客户管理页:单位客户 | 个人用户 Tab 切换 - 个人用户 Tab: 直接内嵌4 Tab 显示所有个人用户的聚合数据 - 个人用户通过业务模块快速新建产生 (customer_type=individual) - 4个业务API新增 customer_type 筛选参数(JOIN customers) - 客户列表排序: 个人用户置顶 Co-Authored-By: Claude <noreply@anthropic.com>
126 lines
2.6 KiB
Python
126 lines
2.6 KiB
Python
from pydantic import BaseModel, Field
|
|
from typing import Optional
|
|
import uuid
|
|
from datetime import date, datetime
|
|
|
|
|
|
# ── User ──
|
|
class UserCreate(BaseModel):
|
|
name: str
|
|
role: str = "manager"
|
|
department: str = ""
|
|
wecom_userid: Optional[str] = None
|
|
|
|
|
|
class UserOut(BaseModel):
|
|
id: uuid.UUID
|
|
casdoor_id: str
|
|
name: str
|
|
role: str
|
|
department: str
|
|
wecom_userid: Optional[str] = None
|
|
require_report: bool = True
|
|
color: Optional[str] = None
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
# ── CustomerContact ──
|
|
class ContactCreate(BaseModel):
|
|
name: str
|
|
phone: str = ""
|
|
role_desc: str = ""
|
|
|
|
|
|
class ContactOut(BaseModel):
|
|
id: uuid.UUID
|
|
customer_id: uuid.UUID
|
|
name: str
|
|
phone: str
|
|
role_desc: str
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
# ── Customer ──
|
|
class CustomerCreate(BaseModel):
|
|
name: str
|
|
customer_type: str = "unit"
|
|
industry: str = ""
|
|
address: str = ""
|
|
in_use_services: str = ""
|
|
monthly_fee: str = ""
|
|
remarks: str = ""
|
|
contacts: list[ContactCreate] = []
|
|
assignee_id: Optional[uuid.UUID] = None
|
|
|
|
|
|
class CustomerUpdate(BaseModel):
|
|
name: Optional[str] = None
|
|
customer_type: Optional[str] = None
|
|
industry: Optional[str] = None
|
|
address: Optional[str] = None
|
|
in_use_services: Optional[str] = None
|
|
monthly_fee: Optional[str] = None
|
|
remarks: Optional[str] = None
|
|
assignee_id: Optional[uuid.UUID] = None
|
|
|
|
|
|
class CustomerOut(BaseModel):
|
|
id: uuid.UUID
|
|
name: str
|
|
customer_type: str = "unit"
|
|
industry: str
|
|
address: str
|
|
in_use_services: str
|
|
monthly_fee: str
|
|
remarks: str = ""
|
|
created_by: uuid.UUID
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
contacts: list[ContactOut] = []
|
|
primary_manager_name: Optional[str] = None
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class CustomerListOut(BaseModel):
|
|
id: uuid.UUID
|
|
name: str
|
|
customer_type: str = "unit"
|
|
industry: str
|
|
in_use_services: str
|
|
primary_manager_name: Optional[str] = None
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class CustomerListResponse(BaseModel):
|
|
items: list[CustomerListOut]
|
|
total: int
|
|
page: int
|
|
page_size: int
|
|
|
|
|
|
# ── CustomerAssignment ──
|
|
class AssignmentCreate(BaseModel):
|
|
customer_id: uuid.UUID
|
|
manager_id: uuid.UUID
|
|
role: str = "primary"
|
|
|
|
|
|
class AssignmentOut(BaseModel):
|
|
id: uuid.UUID
|
|
customer_id: uuid.UUID
|
|
manager_id: uuid.UUID
|
|
role: str
|
|
assigned_at: datetime
|
|
assigned_by: uuid.UUID
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class BatchAssignRequest(BaseModel):
|
|
customer_ids: list[uuid.UUID]
|
|
manager_id: uuid.UUID
|