from pydantic import BaseModel, Field class SmsCodeRequest(BaseModel): phone: str = Field(min_length=6, max_length=32) class LoginRequest(BaseModel): phone: str = Field(min_length=6, max_length=32) code: str = Field(min_length=4, max_length=8) class WechatLoginRequest(BaseModel): # wx.login() 返回的 jscode,用于换 openid(可选,仅记录用途) js_code: str | None = None # button open-type="getPhoneNumber" 事件返回的 code,用于换手机号 phone_code: str | None = None # mock 模式或跳过手机号服务时,前端可直接传手机号(生产可禁用) phone: str | None = None class CurrentUserResponse(BaseModel): id: int phone: str name: str job_title: str | None = None unit_id: int | None = None unit_name: str | None = None department_id: int | None = None department_name: str | None = None status: str roles: list[str] permissions: list[str] is_superuser: bool class TokenResponse(BaseModel): access_token: str token_type: str = "bearer" user: CurrentUserResponse