Files
qiji/backend/app/schemas/visit.py
T
v6ole e7af0e15ab feat: 完整功能迭代 — 移动端+PC端全面优化
新增:
- 今日纪要 (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>
2026-06-24 08:30:12 +08:00

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}