e7af0e15ab
新增: - 今日纪要 (6分类+彩色标签+时间选择器) - 客户经理PC端工作台 (我的数据,5模块CRUD) - 用户管理页 (支局长修改角色) - 客户备注/收支费用(金额+单位)/联系人管理 - 拜访人姓名+电话字段 - 客户导入导出/旧周报导入模板下载 - 序号列+分页(25/50/100) 修复/优化: - Hash路由→HTML5 History, Casdoor回调正常 - 时区统一为Asia/Shanghai (today_cst) - 数据库懒加载→selectinload预加载 - 日期解析兼容ISO datetime字符串 - 文件上传定位修复 (position:relative) - 表单button type='button'防止误提交 - 分管领导权限(只读客户档案,不可编辑) - 侧边栏折叠+SVG图标 - 拜访方式/紧急度统一chip风格 - 时间范围统一为el-time-picker(is-range) - 全局CSS设计变量+box-sizing修复滚动条 Co-Authored-By: Claude <noreply@anthropic.com>
67 lines
1.7 KiB
Python
67 lines
1.7 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] = []
|
|
photos: list[str] = []
|
|
|
|
|
|
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
|
|
photos: Optional[list[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
|
|
photos: Optional[list[str]] = None
|
|
manager_id: uuid.UUID
|
|
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}
|