ab20bc5a1f
# Conflicts: # backend/app/api/key_visits.py # backend/app/api/mini_business.py # backend/app/api/visits.py # backend/app/api/work_plans.py # backend/app/main.py # backend/app/models/__init__.py # backend/app/schemas/key_visit.py # backend/app/schemas/mini_business.py # backend/app/schemas/work_plan.py # backend/app/services/light_board.py # frontend/src/components/DesktopLayout.vue # frontend/src/stores/theme.ts # frontend/src/views/desktop/ManagerWorkspace.vue # frontend/src/views/desktop/WorkPlans.vue # frontend/src/views/mobile/KeyVisitForm.vue # frontend/src/views/mobile/LeaveForm.vue # frontend/src/views/mobile/PlansList.vue # frontend/src/views/mobile/VisitForm.vue # frontend/src/views/mobile/WorkPlanForm.vue
74 lines
2.0 KiB
Python
74 lines
2.0 KiB
Python
from pydantic import BaseModel, Field
|
|
from typing import Optional
|
|
import uuid
|
|
from datetime import date, datetime
|
|
|
|
|
|
class VisitCreate(BaseModel):
|
|
customer_id: uuid.UUID
|
|
visit_date: str # "YYYY-MM-DD"
|
|
visit_method: str = "上门"
|
|
time_range: str = ""
|
|
visitor_name: str = ""
|
|
visitor_phone: str = ""
|
|
communication_content: str = ""
|
|
customer_demand: str = ""
|
|
companions: list[uuid.UUID] = []
|
|
companion_names: list[str] = []
|
|
photos: list[str] = []
|
|
manager_id: Optional[uuid.UUID] = None # director/leader can specify
|
|
|
|
|
|
class VisitUpdate(BaseModel):
|
|
customer_id: Optional[uuid.UUID] = None
|
|
visit_date: Optional[str] = None
|
|
visit_method: Optional[str] = None
|
|
time_range: Optional[str] = None
|
|
visitor_name: Optional[str] = None
|
|
visitor_phone: Optional[str] = None
|
|
communication_content: Optional[str] = None
|
|
customer_demand: Optional[str] = None
|
|
companions: Optional[list[uuid.UUID]] = None
|
|
manager_id: Optional[uuid.UUID] = None
|
|
companion_names: Optional[list[str]] = None
|
|
photos: Optional[list[str]] = None
|
|
manager_id: Optional[str] = None
|
|
|
|
|
|
class VisitOut(BaseModel):
|
|
id: uuid.UUID
|
|
customer_id: uuid.UUID
|
|
visit_date: date
|
|
visit_method: str
|
|
time_range: str
|
|
visitor_name: str = ""
|
|
visitor_phone: str = ""
|
|
communication_content: str
|
|
customer_demand: str
|
|
companions: Optional[list[uuid.UUID]] = None
|
|
companion_names: list[str] = []
|
|
photos: Optional[list[str]] = None
|
|
manager_id: uuid.UUID
|
|
visit_group_id: Optional[str] = None
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
# Joined fields
|
|
customer_name: Optional[str] = None
|
|
manager_name: Optional[str] = None
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class VisitListOut(BaseModel):
|
|
id: uuid.UUID
|
|
customer_id: uuid.UUID
|
|
visit_date: date
|
|
visit_method: str
|
|
time_range: str
|
|
manager_id: uuid.UUID
|
|
customer_name: Optional[str] = None
|
|
manager_name: Optional[str] = None
|
|
has_photos: bool = False
|
|
|
|
model_config = {"from_attributes": True}
|