117 lines
2.3 KiB
Python
117 lines
2.3 KiB
Python
from __future__ import annotations
|
|
|
|
from app.schemas.base import CamelModel
|
|
|
|
|
|
class PerformanceMetrics(CamelModel):
|
|
monthly_hours: float
|
|
monthly_salary: float
|
|
customer_balance: float
|
|
tasks_completed: int
|
|
perf_current: float
|
|
perf_target: float
|
|
|
|
|
|
class IncomeItem(CamelModel):
|
|
label: str
|
|
amount: str
|
|
color: str
|
|
|
|
|
|
class IncomeSection(CamelModel):
|
|
this_month: list[IncomeItem] = []
|
|
last_month: list[IncomeItem] = []
|
|
|
|
|
|
class CoachTaskItem(CamelModel):
|
|
type_label: str
|
|
type_class: str
|
|
customer_name: str
|
|
customer_id: int | None = None
|
|
note_count: int = 0
|
|
pinned: bool = False
|
|
notes: list[dict] | None = None
|
|
|
|
|
|
class AbandonedTask(CamelModel):
|
|
customer_name: str
|
|
reason: str
|
|
|
|
|
|
class TopCustomer(CamelModel):
|
|
id: int
|
|
name: str
|
|
initial: str
|
|
avatar_gradient: str
|
|
heart_emoji: str # ❤️ / 💛 / 🤍
|
|
score: str
|
|
score_color: str
|
|
service_count: int
|
|
balance: str
|
|
consume: str
|
|
|
|
|
|
class CoachServiceRecord(CamelModel):
|
|
customer_id: int | None = None
|
|
customer_name: str
|
|
initial: str
|
|
avatar_gradient: str
|
|
type: str
|
|
type_class: str
|
|
table: str | None = None
|
|
duration: str
|
|
income: str
|
|
date: str
|
|
perf_hours: str | None = None
|
|
|
|
|
|
class HistoryMonth(CamelModel):
|
|
month: str
|
|
estimated: bool
|
|
customers: str
|
|
hours: str
|
|
salary: str
|
|
callback_done: int
|
|
recall_done: int
|
|
|
|
|
|
class CoachNoteItem(CamelModel):
|
|
id: int
|
|
content: str
|
|
timestamp: str
|
|
score: int | None = None
|
|
customer_name: str
|
|
tag_label: str
|
|
created_at: str
|
|
|
|
|
|
class CoachDetailResponse(CamelModel):
|
|
"""COACH-1 响应。"""
|
|
# 基础信息
|
|
id: int
|
|
name: str
|
|
avatar: str
|
|
level: str
|
|
skills: list[str] = []
|
|
work_years: float = 0
|
|
customer_count: int = 0
|
|
hire_date: str | None = None
|
|
# 绩效
|
|
performance: PerformanceMetrics
|
|
# 收入
|
|
income: IncomeSection
|
|
# 档位
|
|
tier_nodes: list[float] = []
|
|
# 任务分组
|
|
visible_tasks: list[CoachTaskItem] = []
|
|
hidden_tasks: list[CoachTaskItem] = []
|
|
abandoned_tasks: list[AbandonedTask] = []
|
|
# TOP 客户
|
|
top_customers: list[TopCustomer] = []
|
|
# 近期服务记录
|
|
service_records: list[CoachServiceRecord] = []
|
|
# 历史月份
|
|
history_months: list[HistoryMonth] = []
|
|
# 备注
|
|
notes: list[CoachNoteItem] = []
|