schema.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. from datetime import datetime
  2. from typing import Optional, List
  3. from pydantic import BaseModel, ConfigDict, Field
  4. class DepartmentCreateSchema(BaseModel):
  5. """创建部门请求"""
  6. enterprise_id: str = Field(..., description="企业ID")
  7. department_name: str = Field(..., description="部门名称")
  8. department_code: Optional[str] = Field(default=None, description="部门编码")
  9. parent_department_id: Optional[str] = Field(default=None, description="上级部门ID")
  10. sort_order: Optional[int] = Field(default=None, description="排序值")
  11. leader_employee_id: Optional[str] = Field(default=None, description="部门负责人ID")
  12. leader_employee_name: Optional[str] = Field(default=None, description="部门负责人姓名")
  13. class DepartmentUpdateSchema(BaseModel):
  14. """更新部门请求"""
  15. department_name: Optional[str] = Field(default=None, description="部门名称")
  16. department_code: Optional[str] = Field(default=None, description="部门编码")
  17. parent_department_id: Optional[str] = Field(default=None, description="上级部门ID")
  18. sort_order: Optional[int] = Field(default=None, description="排序值")
  19. leader_employee_id: Optional[str] = Field(default=None, description="部门负责人ID")
  20. leader_employee_name: Optional[str] = Field(default=None, description="部门负责人姓名")
  21. class DepartmentOutSchema(BaseModel):
  22. """部门响应模型"""
  23. model_config = ConfigDict(from_attributes=True)
  24. # id: int = Field(description="主键ID")
  25. department_id: str = Field(description="部门ID")
  26. department_name: str = Field(description="部门名称")
  27. department_code: Optional[str] = Field(default=None, description="部门编码")
  28. parent_department_id: Optional[str] = Field(default=None, description="上级部门ID")
  29. enterprise_id: str = Field(description="企业ID")
  30. status: str = Field(description="状态")
  31. sort_order: Optional[int] = Field(default=None, description="排序值")
  32. leader_employee_id: Optional[str] = Field(default=None, description="部门负责人ID")
  33. leader_employee_name: Optional[str] = Field(default=None, description="部门负责人姓名")
  34. # created_time: datetime = Field(description="创建时间")
  35. # updated_time: datetime = Field(description="更新时间")
  36. # tenant_id: int = Field(description="租户ID")
  37. class DepartmentListOutSchema(BaseModel):
  38. """部门列表响应"""
  39. model_config = ConfigDict(from_attributes=True)
  40. id: int = Field(description="主键ID")
  41. department_id: str = Field(description="部门ID")
  42. department_name: str = Field(description="部门名称")
  43. department_code: Optional[str] = Field(default=None, description="部门编码")
  44. parent_department_id: Optional[str] = Field(default=None, description="上级部门ID")
  45. enterprise_id: str = Field(description="企业ID")
  46. status: str = Field(description="状态")
  47. sort_order: Optional[int] = Field(default=None, description="排序值")
  48. leader_employee_name: Optional[str] = Field(default=None, description="部门负责人姓名")
  49. created_time: datetime = Field(description="创建时间")
  50. class DepartmentDetailOutSchema(BaseModel):
  51. """部门详情响应"""
  52. model_config = ConfigDict(from_attributes=True)
  53. department: DepartmentOutSchema = Field(description="部门信息")
  54. sub_departments: List[DepartmentOutSchema] = Field(default_factory=list, description="子部门列表")
  55. class DepartmentPageQuery(BaseModel):
  56. """部门分页查询参数"""
  57. page_no: int = Field(default=1, description="页码")
  58. page_size: int = Field(default=20, description="每页数量")
  59. enterprise_id: Optional[str] = Field(default=None, description="企业ID")
  60. department_name: Optional[str] = Field(default=None, description="部门名称")
  61. department_code: Optional[str] = Field(default=None, description="部门编码")
  62. parent_department_id: Optional[str] = Field(default=None, description="上级部门ID")
  63. status: Optional[str] = Field(default=None, description="状态")
  64. class DepartmentOperationOutSchema(BaseModel):
  65. """部门操作响应"""
  66. department_id: str = Field(description="部门ID")
  67. department_name: str = Field(description="部门名称")
  68. class DepartmentTreeOutSchema(BaseModel):
  69. """部门树形结构响应"""
  70. model_config = ConfigDict(from_attributes=True)
  71. # id: int = Field(description="主键ID")
  72. department_id: str = Field(description="部门ID")
  73. department_name: str = Field(description="部门名称")
  74. department_code: Optional[str] = Field(default=None, description="部门编码")
  75. parent_department_id: Optional[str] = Field(default=None, description="上级部门ID")
  76. status: str = Field(description="状态")
  77. sort_order: Optional[int] = Field(default=None, description="排序值")
  78. leader_employee_name: Optional[str] = Field(default=None, description="部门负责人姓名")
  79. children: List["DepartmentTreeOutSchema"] = Field(default_factory=list, description="子部门列表")
  80. # 递归更新类型提示
  81. DepartmentTreeOutSchema.model_rebuild()
  82. # 部门状态常量
  83. DEPARTMENT_STATUS = {
  84. "NORMAL": "正常",
  85. "DISABLED": "禁用"
  86. }
  87. # 部门状态标签类型
  88. DEPARTMENT_STATUS_TAG_TYPE = {
  89. "NORMAL": "success",
  90. "DISABLED": "warning"
  91. }
  92. # 部门状态标签
  93. DEPARTMENT_STATUS_LABEL = {
  94. "NORMAL": "正常",
  95. "DISABLED": "禁用"
  96. }