mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-09-20 20:39:55 +00:00
feat: 统一状态字段类型为字符串并重构基础类型
refactor: 重构前后端状态字段类型从布尔值改为字符串 feat: 新增基础类型定义和通用类型接口 refactor: 移除不必要的时间范围字段并统一使用created_time style: 更新前端组件以匹配新的字段命名 docs: 更新接口文档和类型定义
This commit is contained in:
@@ -25,7 +25,7 @@ class JobCreateSchema(BaseModel):
|
||||
start_date: Optional[str] = Field(default=None, description='开始时间')
|
||||
end_date: Optional[str] = Field(default=None, description='结束时间')
|
||||
description: Optional[str] = Field(default=None, max_length=255, description='描述')
|
||||
status: Optional[bool] = Field(default=False, description='任务状态:启动,停止')
|
||||
status: Optional[str] = Field(default=False, description='任务状态:启动,停止')
|
||||
|
||||
@field_validator('trigger')
|
||||
@classmethod
|
||||
@@ -77,7 +77,7 @@ class JobLogCreateSchema(BaseModel):
|
||||
job_trigger: Optional[str] = Field(default=None, description='任务触发器')
|
||||
job_message: Optional[str] = Field(default=None, description='日志信息')
|
||||
exception_info: Optional[str] = Field(default=None, description='异常信息')
|
||||
status: Optional[bool] = Field(default=False, description='任务状态:正常,失败')
|
||||
status: Optional[str] = Field(default=False, description='任务状态:正常,失败')
|
||||
create_time: Optional[DateTimeStr] = Field(default=None, description='创建时间')
|
||||
|
||||
|
||||
@@ -99,10 +99,9 @@ class JobQueryParam:
|
||||
def __init__(
|
||||
self,
|
||||
name: Optional[str] = Query(None, description="任务名称"),
|
||||
status: Optional[bool] = Query(None, description="状态: 启动,停止"),
|
||||
status: Optional[str] = Query(None, description="状态: 启动,停止"),
|
||||
creator: Optional[int] = Query(None, description="创建人"),
|
||||
start_time: Optional[DateTimeStr] = Query(None, description="开始时间", example="2025-01-01 00:00:00"),
|
||||
end_time: Optional[DateTimeStr] = Query(None, description="结束时间", example="2025-12-31 23:59:59"),
|
||||
created_time: Optional[list[DateTimeStr]] = Query(None, description="创建时间范围", example=["2025-01-01 00:00:00", "2025-12-31 23:59:59"]),
|
||||
) -> None:
|
||||
|
||||
# 模糊查询字段
|
||||
@@ -113,8 +112,8 @@ class JobQueryParam:
|
||||
self.status = status
|
||||
|
||||
# 时间范围查询
|
||||
if start_time and end_time:
|
||||
self.created_time = ("between", (start_time, end_time))
|
||||
if created_time and len(created_time) == 2:
|
||||
self.created_time = ("between", (created_time[0], created_time[1]))
|
||||
|
||||
|
||||
class JobLogQueryParam:
|
||||
@@ -124,9 +123,8 @@ class JobLogQueryParam:
|
||||
self,
|
||||
job_id: Optional[int] = Query(None, description="定时任务ID"),
|
||||
job_name: Optional[str] = Query(None, description="任务名称"),
|
||||
status: Optional[bool] = Query(None, description="状态: 正常,失败"),
|
||||
start_time: Optional[DateTimeStr] = Query(None, description="开始时间", example="2025-01-01 00:00:00"),
|
||||
end_time: Optional[DateTimeStr] = Query(None, description="结束时间", example="2025-12-31 23:59:59"),
|
||||
status: Optional[str] = Query(None, description="状态: 正常,失败"),
|
||||
created_time: Optional[list[DateTimeStr]] = Query(None, description="创建时间范围", example=["2025-01-01 00:00:00", "2025-12-31 23:59:59"]),
|
||||
) -> None:
|
||||
# 定时任务ID查询
|
||||
self.job_id = job_id
|
||||
@@ -135,5 +133,5 @@ class JobLogQueryParam:
|
||||
# 精确查询字段
|
||||
self.status = status
|
||||
# 时间范围查询
|
||||
if start_time and end_time:
|
||||
self.create_time = ("between", (start_time, end_time))
|
||||
if created_time and len(created_time) == 2:
|
||||
self.created_time = ("between", (created_time[0], created_time[1]))
|
||||
|
||||
@@ -83,7 +83,7 @@ class ApplicationCRUD(CRUDBase[ApplicationModel, ApplicationCreateSchema, Applic
|
||||
"""
|
||||
return await self.delete(ids=ids)
|
||||
|
||||
async def set_available_crud(self, ids: List[int], status: bool) -> None:
|
||||
async def set_available_crud(self, ids: List[int], status: str) -> None:
|
||||
"""
|
||||
批量设置可用状态
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ class ApplicationCreateSchema(BaseModel):
|
||||
name: str = Field(..., max_length=64, description='应用名称')
|
||||
access_url: str = Field(..., max_length=255, description="访问地址")
|
||||
icon_url: Optional[str] = Field(None, max_length=300, description="应用图标URL")
|
||||
status: bool = Field(True, description="是否启用(True:启用 False:禁用)")
|
||||
status: str = Field(True, description="是否启用(True:启用 False:禁用)")
|
||||
description: Optional[str] = Field(default=None, max_length=255, description="描述")
|
||||
|
||||
@field_validator('access_url')
|
||||
@@ -58,10 +58,9 @@ class ApplicationQueryParam:
|
||||
def __init__(
|
||||
self,
|
||||
name: Optional[str] = Query(None, description="应用名称"),
|
||||
status: Optional[bool] = Query(None, description="是否启用"),
|
||||
status: Optional[str] = Query(None, description="是否启用"),
|
||||
created_id: Optional[int] = Query(None, description="创建人"),
|
||||
start_time: Optional[DateTimeStr] = Query(None, description="开始时间", example="2025-01-01 00:00:00"),
|
||||
end_time: Optional[DateTimeStr] = Query(None, description="结束时间", example="2025-12-31 23:59:59"),
|
||||
created_time: Optional[list[DateTimeStr]] = Query(None, description="创建时间范围", example=["2025-01-01 00:00:00", "2025-12-31 23:59:59"]),
|
||||
) -> None:
|
||||
|
||||
# 模糊查询字段
|
||||
@@ -72,5 +71,5 @@ class ApplicationQueryParam:
|
||||
self.created_id = created_id
|
||||
|
||||
# 时间范围查询
|
||||
if start_time and end_time:
|
||||
self.created_time = ("between", (start_time, end_time))
|
||||
if created_time and len(created_time) == 2:
|
||||
self.created_time = ("between", (created_time[0], created_time[1]))
|
||||
|
||||
@@ -85,7 +85,7 @@ class DemoCRUD(CRUDBase[DemoModel, DemoCreateSchema, DemoUpdateSchema]):
|
||||
"""
|
||||
return await self.delete(ids=ids)
|
||||
|
||||
async def set_available_crud(self, ids: List[int], status: bool) -> None:
|
||||
async def set_available_crud(self, ids: List[int], status: str) -> None:
|
||||
"""
|
||||
批量设置可用状态
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ from app.core.base_schema import BaseSchema, UserBySchema, TenantSchema, Custome
|
||||
class DemoCreateSchema(BaseModel):
|
||||
"""新增模型"""
|
||||
name: str = Field(..., min_length=2, max_length=50, description='名称')
|
||||
status: bool = Field(True, description="是否启用(True:启用 False:禁用)")
|
||||
status: str = Field(True, description="是否启用(True:启用 False:禁用)")
|
||||
description: Optional[str] = Field(default=None, max_length=255, description="描述")
|
||||
|
||||
@field_validator('name')
|
||||
@@ -56,10 +56,9 @@ class DemoQueryParam:
|
||||
def __init__(
|
||||
self,
|
||||
name: Optional[str] = Query(None, description="名称"),
|
||||
status: Optional[bool] = Query(None, description="是否启用"),
|
||||
status: Optional[str] = Query(None, description="是否启用"),
|
||||
created_id: Optional[int] = Query(None, description="创建人"),
|
||||
start_time: Optional[DateTimeStr] = Query(None, description="开始时间", example="2025-01-01 00:00:00"),
|
||||
end_time: Optional[DateTimeStr] = Query(None, description="结束时间", example="2025-12-31 23:59:59"),
|
||||
created_time: Optional[list[DateTimeStr]] = Query(None, description="创建时间范围", example=["2025-01-01 00:00:00", "2025-12-31 23:59:59"]),
|
||||
) -> None:
|
||||
|
||||
# 模糊查询字段
|
||||
@@ -70,7 +69,7 @@ class DemoQueryParam:
|
||||
self.status = status
|
||||
|
||||
# 时间范围查询
|
||||
if start_time and end_time:
|
||||
self.created_time = ("between", (start_time, end_time))
|
||||
if created_time and len(created_time) == 2:
|
||||
self.created_time = ("between", (created_time[0], created_time[1]))
|
||||
|
||||
|
||||
|
||||
@@ -5,11 +5,11 @@ from sqlalchemy.orm import Mapped, mapped_column, relationship, validates
|
||||
from sqlalchemy.sql import expression
|
||||
|
||||
from app.config.setting import settings
|
||||
from app.core.base_model import ModelMixin, UserMixin, TenantMixin
|
||||
from app.core.base_model import ModelMixin
|
||||
from app.utils.common_util import SqlalchemyUtil
|
||||
|
||||
|
||||
class GenTableModel(ModelMixin, UserMixin, TenantMixin):
|
||||
class GenTableModel(ModelMixin):
|
||||
"""
|
||||
代码生成表
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ from typing import List, Optional
|
||||
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
||||
from fastapi import Query
|
||||
|
||||
from app.core.base_schema import BaseSchema, UserBySchema, TenantSchema
|
||||
from app.core.base_schema import BaseSchema
|
||||
|
||||
|
||||
class GenDBTableSchema(BaseModel):
|
||||
@@ -52,7 +52,7 @@ class GenTableSchema(BaseModel):
|
||||
return v
|
||||
|
||||
|
||||
class GenTableOutSchema(GenTableSchema, BaseSchema, UserBySchema, TenantSchema):
|
||||
class GenTableOutSchema(GenTableSchema, BaseSchema):
|
||||
"""业务表输出模型(面向控制器/前端)。
|
||||
"""
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
@@ -90,7 +90,7 @@ class GenTableColumnSchema(BaseModel):
|
||||
sort: int = Field(default=0, description='排序')
|
||||
|
||||
|
||||
class GenTableColumnOutSchema(GenTableColumnSchema, BaseSchema, UserBySchema, TenantSchema):
|
||||
class GenTableColumnOutSchema(GenTableColumnSchema, BaseSchema):
|
||||
"""
|
||||
业务表字段输出模型
|
||||
"""
|
||||
|
||||
@@ -84,7 +84,7 @@ class {{ class_name }}CRUD(CRUDBase[{{ class_name }}Model, {{ class_name }}Creat
|
||||
"""
|
||||
return await self.delete(ids=ids)
|
||||
|
||||
async def set_available_{{ business_name }}_crud(self, ids: List[int], status: bool) -> None:
|
||||
async def set_available_{{ business_name }}_crud(self, ids: List[int], status: str) -> None:
|
||||
"""
|
||||
批量设置可用状态
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@ const {{ class_name }}API = {
|
||||
});
|
||||
},
|
||||
// 批量启用/停用
|
||||
batchAvailable{{ class_name }}(body: { ids: number[]; status: boolean }) {
|
||||
batchAvailable{{ class_name }}(body: { ids: number[]; status: strean }) {
|
||||
return request<ApiResponse>({
|
||||
url: `${API_PATH}/available/setting`,
|
||||
method: "patch",
|
||||
|
||||
@@ -577,7 +577,7 @@ async function handleDelete(ids: number[]) {
|
||||
}
|
||||
|
||||
// 批量启用/停用
|
||||
async function handleMoreClick(status: boolean) {
|
||||
async function handleMoreClick(status: strean) {
|
||||
if (selectIds.value.length) {
|
||||
ElMessageBox.confirm(`确认${status ? '启用' : '停用'}该项数据?`, '警告', {
|
||||
confirmButtonText: '确定',
|
||||
|
||||
@@ -85,7 +85,7 @@ class CustomerCRUD(CRUDBase[CustomerModel, CustomerCreateSchema, CustomerUpdateS
|
||||
"""
|
||||
return await self.delete(ids=ids)
|
||||
|
||||
async def set_available_crud(self, ids: List[int], status: bool) -> None:
|
||||
async def set_available_crud(self, ids: List[int], status: str) -> None:
|
||||
"""
|
||||
批量设置可用状态
|
||||
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
from datetime import datetime
|
||||
from sqlalchemy import DateTime, String
|
||||
from sqlalchemy import String
|
||||
from sqlalchemy.orm import Mapped, mapped_column, relationship, validates
|
||||
|
||||
from app.core.base_model import ModelMixin, UserMixin, TenantMixin
|
||||
@@ -32,8 +31,6 @@ class CustomerModel(ModelMixin, UserMixin, TenantMixin):
|
||||
|
||||
name: Mapped[str] = mapped_column(String(64), nullable=False, comment='客户名称')
|
||||
code: Mapped[str] = mapped_column(String(20), nullable=False, index=True, comment='客户编码')
|
||||
start_time: Mapped[datetime | None] = mapped_column(DateTime, nullable=True, default=None, comment='开始时间')
|
||||
end_time: Mapped[datetime | None] = mapped_column(DateTime, nullable=True, default=None, comment='结束时间')
|
||||
|
||||
users: Mapped[list["UserModel"]] = relationship(
|
||||
back_populates="customer",
|
||||
|
||||
@@ -12,9 +12,7 @@ class CustomerCreateSchema(BaseModel):
|
||||
"""新增模型"""
|
||||
name: str = Field(..., max_length=64, description='客户名称')
|
||||
code: Optional[str] = Field(default=None, max_length=20, description='客户编码')
|
||||
start_time: Optional[DateTimeStr] = Field(default=None, description="开始时间", example="2025-01-01 00:00:00")
|
||||
end_time: Optional[DateTimeStr] = Field(default=None, description="结束时间", example="2025-12-31 23:59:59")
|
||||
status: bool = Field(True, description="是否启用(True:启用 False:禁用)")
|
||||
status: str = Field(True, description="是否启用(True:启用 False:禁用)")
|
||||
description: Optional[str] = Field(default=None, max_length=255, description="描述")
|
||||
|
||||
@field_validator('name')
|
||||
@@ -56,10 +54,9 @@ class CustomerQueryParam:
|
||||
def __init__(
|
||||
self,
|
||||
name: Optional[str] = Query(None, description="客户名称"),
|
||||
status: Optional[bool] = Query(None, description="状态用(True:启用 False:禁用)"),
|
||||
status: Optional[str] = Query(None, description="状态用(True:启用 False:禁用)"),
|
||||
created_id: Optional[int] = Query(None, description="创建人"),
|
||||
start_time: Optional[DateTimeStr] = Query(None, description="开始时间", example="2025-01-01 00:00:00"),
|
||||
end_time: Optional[DateTimeStr] = Query(None, description="结束时间", example="2025-12-31 23:59:59"),
|
||||
created_time: Optional[list[DateTimeStr]] = Query(None, description="创建时间范围", example=["2025-01-01 00:00:00", "2025-12-31 23:59:59"]),
|
||||
) -> None:
|
||||
|
||||
# 模糊查询字段
|
||||
@@ -70,5 +67,5 @@ class CustomerQueryParam:
|
||||
self.status = status
|
||||
|
||||
# 时间范围查询
|
||||
if start_time and end_time:
|
||||
self.created_time = ("between", (start_time, end_time))
|
||||
if created_time and len(created_time) == 2:
|
||||
self.created_time = ("between", (created_time[0], created_time[1]))
|
||||
|
||||
@@ -179,6 +179,7 @@ class CustomerService:
|
||||
mapping_dict = {
|
||||
'id': '编号',
|
||||
'name': '名称',
|
||||
'code': '编码',
|
||||
'status': '状态',
|
||||
'description': '备注',
|
||||
'created_time': '创建时间',
|
||||
|
||||
@@ -61,7 +61,7 @@ class DeptCRUD(CRUDBase[DeptModel, DeptCreateSchema, DeptUpdateSchema]):
|
||||
"""
|
||||
return await self.tree_list(search=search, order_by=order_by, children_attr='children', preload=preload)
|
||||
|
||||
async def set_available_crud(self, ids: List[int], status: bool) -> None:
|
||||
async def set_available_crud(self, ids: List[int], status: str) -> None:
|
||||
"""
|
||||
批量设置部门可用状态。
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ class DeptCreateSchema(BaseModel):
|
||||
phone: Optional[str] = Field(default=None, max_length=11, description="手机")
|
||||
email: Optional[str] = Field(default=None, max_length=64, description="邮箱")
|
||||
parent_id: Optional[int] = Field(default=None, ge=0, description="父部门ID")
|
||||
status: bool = Field(default=True, description="是否启用(True:启用 False:禁用)")
|
||||
status: str = Field(default=True, description="是否启用(True:启用 False:禁用)")
|
||||
description: Optional[str] = Field(default=None, max_length=255, description="备注说明")
|
||||
|
||||
@field_validator('name')
|
||||
@@ -58,12 +58,10 @@ class DeptQueryParam:
|
||||
"""部门管理查询参数"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
name: Optional[str] = Query(None, description="部门名称"),
|
||||
status: Optional[bool] = Query(None, description="部门状态(True正常 False停用)"),
|
||||
start_time: Optional[DateTimeStr] = Query(None, description="开始时间", example="2025-01-01 00:00:00"),
|
||||
end_time: Optional[DateTimeStr] = Query(None, description="结束时间", example="2025-12-31 23:59:59"),
|
||||
|
||||
self,
|
||||
name: Optional[str] = Query(None, description="部门名称"),
|
||||
status: Optional[str] = Query(None, description="部门状态(True正常 False停用)"),
|
||||
created_time: Optional[list[DateTimeStr]] = Query(None, description="创建时间范围", example=["2025-01-01 00:00:00", "2025-12-31 23:59:59"]),
|
||||
) -> None:
|
||||
|
||||
# 模糊查询字段
|
||||
@@ -73,5 +71,5 @@ class DeptQueryParam:
|
||||
self.status = status
|
||||
|
||||
# 时间范围查询
|
||||
if start_time and end_time:
|
||||
self.created_time = ("between", (start_time, end_time))
|
||||
if created_time and len(created_time) == 2:
|
||||
self.created_time = ("between", (created_time[0], created_time[1]))
|
||||
|
||||
@@ -91,7 +91,7 @@ class DictTypeCRUD(CRUDBase[DictTypeModel, DictTypeCreateSchema, DictTypeUpdateS
|
||||
"""
|
||||
return await self.delete(ids=ids)
|
||||
|
||||
async def set_obj_available_crud(self, ids: List[int], status: bool) -> None:
|
||||
async def set_obj_available_crud(self, ids: List[int], status: str) -> None:
|
||||
"""
|
||||
设置数据字典类型的可用状态
|
||||
|
||||
@@ -226,7 +226,7 @@ class DictDataCRUD(CRUDBase[DictDataModel, DictDataCreateSchema, DictDataUpdateS
|
||||
"""
|
||||
return await self.delete(ids=ids)
|
||||
|
||||
async def set_obj_available_crud(self, ids: List[int], status: bool) -> None:
|
||||
async def set_obj_available_crud(self, ids: List[int], status: str) -> None:
|
||||
"""
|
||||
设置数据字典数据的可用状态
|
||||
|
||||
@@ -289,7 +289,7 @@ class DictDataCRUD(CRUDBase[DictDataModel, DictDataCreateSchema, DictDataUpdateS
|
||||
await self.delete(ids=ids)
|
||||
return len(ids)
|
||||
|
||||
async def get_obj_list_by_dict_type_crud(self, dict_type: str, status: Optional[bool] = True) -> List[DictDataModel]:
|
||||
async def get_obj_list_by_dict_type_crud(self, dict_type: str, status: Optional[str] = True) -> List[DictDataModel]:
|
||||
"""
|
||||
根据字典类型获取字典数据列表
|
||||
|
||||
|
||||
@@ -14,31 +14,10 @@ class DictTypeCreateSchema(BaseModel):
|
||||
字典类型表对应pydantic模型
|
||||
"""
|
||||
|
||||
dict_name: str = Field(
|
||||
...,
|
||||
min_length=1,
|
||||
max_length=100,
|
||||
description='字典名称',
|
||||
example='用户状态'
|
||||
)
|
||||
dict_type: str = Field(
|
||||
...,
|
||||
min_length=1,
|
||||
max_length=100,
|
||||
description='字典类型',
|
||||
example='sys_user_status'
|
||||
)
|
||||
status: Optional[bool] = Field(
|
||||
default=None,
|
||||
description='状态(1正常 0停用)',
|
||||
example=True
|
||||
)
|
||||
description: Optional[str] = Field(
|
||||
default=None,
|
||||
max_length=255,
|
||||
description="描述",
|
||||
example="用户账号状态管理"
|
||||
)
|
||||
dict_name: str = Field(..., min_length=1, max_length=100, description='字典名称', example='用户状态')
|
||||
dict_type: str = Field(..., min_length=1, max_length=100, description='字典类型', example='sys_user_status')
|
||||
status: Optional[str] = Field(default=None, description='状态(1正常 0停用)', example=True)
|
||||
description: Optional[str] = Field(default=None, max_length=255, description="描述", example="用户账号状态管理")
|
||||
|
||||
@field_validator('dict_name')
|
||||
def validate_dict_name(cls, value: str):
|
||||
@@ -63,32 +42,18 @@ class DictTypeUpdateSchema(DictTypeCreateSchema):
|
||||
|
||||
class DictTypeOutSchema(DictTypeCreateSchema, BaseSchema):
|
||||
"""字典类型响应模型"""
|
||||
model_config = ConfigDict(
|
||||
from_attributes=True,
|
||||
json_schema_extra={
|
||||
"example": {
|
||||
"id": 1,
|
||||
"dict_name": "用户状态",
|
||||
"dict_type": "sys_user_status",
|
||||
"status": True,
|
||||
"description": "用户账号状态管理",
|
||||
"created_at": "2024-01-01T00:00:00Z",
|
||||
"updated_at": "2024-01-01T00:00:00Z"
|
||||
}
|
||||
}
|
||||
)
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
|
||||
class DictTypeQueryParam:
|
||||
"""字典类型查询参数"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
dict_name: Optional[str] = Query(None, description="字典名称", max_length=100, example="用户"),
|
||||
dict_type: Optional[str] = Query(None, description="字典类型", max_length=100, example="sys_user"),
|
||||
status: Optional[bool] = Query(None, description="状态(1正常 0停用)", example=True),
|
||||
start_time: Optional[DateTimeStr] = Query(None, description="开始时间", example="2025-01-01 00:00:00"),
|
||||
end_time: Optional[DateTimeStr] = Query(None, description="结束时间", example="2025-12-31 23:59:59"),
|
||||
self,
|
||||
dict_name: Optional[str] = Query(None, description="字典名称", max_length=100, example="用户"),
|
||||
dict_type: Optional[str] = Query(None, description="字典类型", max_length=100, example="sys_user"),
|
||||
status: Optional[str] = Query(None, description="状态(1正常 0停用)", example=True),
|
||||
created_time: Optional[list[DateTimeStr]] = Query(None, description="创建时间范围", example=["2025-01-01 00:00:00", "2025-12-31 23:59:59"]),
|
||||
) -> None:
|
||||
super().__init__()
|
||||
|
||||
@@ -100,71 +65,24 @@ class DictTypeQueryParam:
|
||||
self.status = status
|
||||
|
||||
# 时间范围查询
|
||||
if start_time and end_time:
|
||||
self.created_time = ("between", (start_time, end_time))
|
||||
if created_time and len(created_time) == 2:
|
||||
self.created_time = ("between", (created_time[0], created_time[1]))
|
||||
|
||||
|
||||
class DictDataCreateSchema(BaseModel):
|
||||
"""
|
||||
字典数据表对应pydantic模型
|
||||
"""
|
||||
dict_sort: int = Field(
|
||||
...,
|
||||
ge=1,
|
||||
le=999,
|
||||
description='字典排序',
|
||||
example=1
|
||||
)
|
||||
dict_label: str = Field(
|
||||
...,
|
||||
max_length=100,
|
||||
description='字典标签',
|
||||
example='正常'
|
||||
)
|
||||
dict_value: str = Field(
|
||||
...,
|
||||
max_length=100,
|
||||
description='字典键值',
|
||||
example='0'
|
||||
)
|
||||
dict_type: str = Field(
|
||||
...,
|
||||
max_length=100,
|
||||
description='字典类型',
|
||||
example='sys_user_status'
|
||||
)
|
||||
dict_type_id: int = Field(
|
||||
...,
|
||||
description='字典类型ID',
|
||||
example=1
|
||||
)
|
||||
css_class: Optional[str] = Field(
|
||||
default=None,
|
||||
max_length=100,
|
||||
description='样式属性(其他样式扩展)',
|
||||
example='label-success'
|
||||
)
|
||||
list_class: Optional[str] = Field(
|
||||
default=None,
|
||||
description='表格回显样式',
|
||||
example='success'
|
||||
)
|
||||
is_default: Optional[bool] = Field(
|
||||
default=None,
|
||||
description='是否默认(Y是 N否)',
|
||||
example=True
|
||||
)
|
||||
status: Optional[bool] = Field(
|
||||
default=None,
|
||||
description='状态(1正常 0停用)',
|
||||
example=True
|
||||
)
|
||||
description: Optional[str] = Field(
|
||||
default=None,
|
||||
max_length=255,
|
||||
description="描述",
|
||||
example="正常状态的用户"
|
||||
)
|
||||
dict_sort: int = Field(..., ge=1, le=999, description='字典排序', example=1)
|
||||
dict_label: str = Field(..., max_length=100, description='字典标签', example='正常')
|
||||
dict_value: str = Field(..., max_length=100, description='字典键值', example='0')
|
||||
dict_type: str = Field(..., max_length=100, description='字典类型', example='sys_user_status')
|
||||
dict_type_id: int = Field(..., description='字典类型ID', example=1)
|
||||
css_class: Optional[str] = Field(default=None, max_length=100, description='样式属性(其他样式扩展)', example='label-success')
|
||||
list_class: Optional[str] = Field(default=None, description='表格回显样式', example='success')
|
||||
is_default: Optional[bool] = Field(default=None, description='是否默认(Y是 N否)', example=True)
|
||||
status: Optional[str] = Field(default=None, description='状态(1正常 0停用)', example=True)
|
||||
description: Optional[str] = Field(default=None, max_length=255, description="描述", example="正常状态的用户")
|
||||
|
||||
@model_validator(mode='after')
|
||||
def validate_after(self):
|
||||
@@ -192,39 +110,19 @@ class DictDataUpdateSchema(DictDataCreateSchema):
|
||||
|
||||
class DictDataOutSchema(DictDataCreateSchema, BaseSchema):
|
||||
"""字典数据响应模型"""
|
||||
model_config = ConfigDict(
|
||||
from_attributes=True,
|
||||
json_schema_extra={
|
||||
"example": {
|
||||
"id": 1,
|
||||
"dict_sort": 1,
|
||||
"dict_label": "正常",
|
||||
"dict_value": "0",
|
||||
"dict_type": "sys_user_status",
|
||||
"dict_type_id": 1,
|
||||
"css_class": "label-success",
|
||||
"list_class": "success",
|
||||
"is_default": True,
|
||||
"status": True,
|
||||
"description": "正常状态的用户",
|
||||
"created_at": "2024-01-01T00:00:00Z",
|
||||
"updated_at": "2024-01-01T00:00:00Z"
|
||||
}
|
||||
}
|
||||
)
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
|
||||
class DictDataQueryParam:
|
||||
"""字典数据查询参数"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
dict_label: Optional[str] = Query(None, description="字典标签", max_length=100, example="正常"),
|
||||
dict_type: Optional[str] = Query(None, description="字典类型", max_length=100, example="sys_user_status"),
|
||||
dict_type_id: Optional[int] = Query(None, description="字典类型ID", example=1),
|
||||
status: Optional[bool] = Query(None, description="状态(1正常 0停用)", example=True),
|
||||
start_time: Optional[DateTimeStr] = Query(None, description="开始时间", example="2025-01-01 00:00:00"),
|
||||
end_time: Optional[DateTimeStr] = Query(None, description="结束时间", example="2025-12-31 23:59:59"),
|
||||
self,
|
||||
dict_label: Optional[str] = Query(None, description="字典标签", max_length=100, example="正常"),
|
||||
dict_type: Optional[str] = Query(None, description="字典类型", max_length=100, example="sys_user_status"),
|
||||
dict_type_id: Optional[int] = Query(None, description="字典类型ID", example=1),
|
||||
status: Optional[str] = Query(None, description="状态(1正常 0停用)", example=True),
|
||||
created_time: Optional[list[DateTimeStr]] = Query(None, description="创建时间范围", example=["2025-01-01 00:00:00", "2025-12-31 23:59:59"]),
|
||||
) -> None:
|
||||
|
||||
# 模糊查询字段
|
||||
@@ -236,5 +134,5 @@ class DictDataQueryParam:
|
||||
self.status = status
|
||||
|
||||
# 时间范围查询
|
||||
if start_time and end_time:
|
||||
self.created_time = ("between", (start_time, end_time))
|
||||
if created_time and len(created_time) == 2:
|
||||
self.created_time = ("between", (created_time[0], created_time[1]))
|
||||
|
||||
@@ -22,7 +22,7 @@ class OperationLogCreateSchema(BaseModel):
|
||||
response_code: Optional[int] = Field(default=None, description="响应状态码")
|
||||
response_json: Optional[str] = Field(default=None, description="响应 JSON 数据")
|
||||
process_time: Optional[str] = Field(default=None, description="处理时间")
|
||||
status: Optional[bool] = Field(default=True, description="是否成功")
|
||||
status: Optional[str] = Field(default=True, description="是否成功")
|
||||
description: Optional[str] = Field(default=None, max_length=255, description="描述")
|
||||
created_id: Optional[int] = Field(default=None, description="创建人ID")
|
||||
|
||||
@@ -73,8 +73,7 @@ class OperationLogQueryParam:
|
||||
request_ip: Optional[str] = Query(None, description="请求IP"),
|
||||
response_code: Optional[int] = Query(None, description="响应状态码"),
|
||||
created_id: Optional[int] = Query(None, description="创建人"),
|
||||
start_time: Optional[DateTimeStr] = Query(None, description="开始时间", example="2025-01-01 00:00:00"),
|
||||
end_time: Optional[DateTimeStr] = Query(None, description="结束时间", example="2025-12-31 23:59:59"),
|
||||
created_time: Optional[list[DateTimeStr]] = Query(None, description="创建时间范围", example=["2025-01-01 00:00:00", "2025-12-31 23:59:59"]),
|
||||
) -> None:
|
||||
|
||||
# 模糊查询字段
|
||||
@@ -88,9 +87,5 @@ class OperationLogQueryParam:
|
||||
self.type = type
|
||||
|
||||
# 时间范围查询 - 增加对单个时间参数的处理
|
||||
if start_time and end_time:
|
||||
self.created_time = ("between", (start_time, end_time))
|
||||
elif start_time:
|
||||
self.created_time = (">=", start_time)
|
||||
elif end_time:
|
||||
self.created_time = ("<=", end_time)
|
||||
if created_time and len(created_time) == 2:
|
||||
self.created_time = ("between", (created_time[0], created_time[1]))
|
||||
|
||||
@@ -61,7 +61,7 @@ class MenuCRUD(CRUDBase[MenuModel, MenuCreateSchema, MenuUpdateSchema]):
|
||||
"""
|
||||
return await self.tree_list(search=search, order_by=order_by, children_attr='children', preload=preload)
|
||||
|
||||
async def set_available_crud(self, ids: List[int], status: bool) -> None:
|
||||
async def set_available_crud(self, ids: List[int], status: str) -> None:
|
||||
"""
|
||||
批量设置菜单可用状态。
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ class MenuCreateSchema(BaseModel):
|
||||
params: Optional[list[dict[str, str]]] = Field(default=None, description="路由参数,格式为[{key: string, value: string}]")
|
||||
affix: bool = Field(default=False, description="是否固定标签页(True:是 False:否)")
|
||||
parent_id: Optional[int] = Field(default=None, ge=1, description="父菜单ID")
|
||||
status: bool = Field(default=True, description="是否启用(True:启用 False:禁用)")
|
||||
status: str = Field(default=True, description="是否启用(True:启用 False:禁用)")
|
||||
description: Optional[str] = Field(default=None, max_length=255, description="描述")
|
||||
|
||||
@model_validator(mode='before')
|
||||
@@ -87,9 +87,8 @@ class MenuQueryParam:
|
||||
component_path: Optional[str] = Query(None, description="组件路径"),
|
||||
type: Optional[Literal['M', 'C', 'F']] = Query(None, description="菜单类型(M目录 C菜单 F按钮)"),
|
||||
permission: Optional[str] = Query(None, description="权限标识"),
|
||||
status: Optional[bool] = Query(None, description="菜单状态(True正常 False停用)"),
|
||||
start_time: Optional[DateTimeStr] = Query(None, description="开始时间", example="2025-01-01 00:00:00"),
|
||||
end_time: Optional[DateTimeStr] = Query(None, description="结束时间", example="2025-12-31 23:59:59"),
|
||||
status: Optional[str] = Query(None, description="菜单状态(True正常 False停用)"),
|
||||
created_time: Optional[list[DateTimeStr]] = Query(None, description="创建时间范围", example=["2025-01-01 00:00:00", "2025-12-31 23:59:59"]),
|
||||
) -> None:
|
||||
|
||||
# 模糊查询字段
|
||||
@@ -103,5 +102,5 @@ class MenuQueryParam:
|
||||
self.status = status
|
||||
|
||||
# 时间范围查询
|
||||
if start_time and end_time:
|
||||
self.created_time = ("between", (start_time, end_time))
|
||||
if created_time and len(created_time) == 2:
|
||||
self.created_time = ("between", (created_time[0], created_time[1]))
|
||||
|
||||
@@ -164,9 +164,7 @@ async def export_obj_list_controller(
|
||||
return StreamResponse(
|
||||
data=bytes2file_response(export_result),
|
||||
media_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
||||
headers = {
|
||||
'Content-Disposition': 'attachment; filename=notice.xlsx'
|
||||
}
|
||||
headers = {'Content-Disposition': 'attachment; filename=notice.xlsx'}
|
||||
)
|
||||
|
||||
@NoticeRouter.get("/available", summary="获取全局启用公告", description="获取全局启用公告")
|
||||
|
||||
@@ -86,7 +86,7 @@ class NoticeCRUD(CRUDBase[NoticeModel, NoticeCreateSchema, NoticeUpdateSchema]):
|
||||
"""
|
||||
return await self.delete(ids=ids)
|
||||
|
||||
async def set_available_crud(self, ids: List[int], status: bool) -> None:
|
||||
async def set_available_crud(self, ids: List[int], status: str) -> None:
|
||||
"""
|
||||
设置公告的可用状态。
|
||||
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
from sqlalchemy import String, Text
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
|
||||
@@ -38,5 +36,3 @@ class NoticeModel(ModelMixin, UserMixin, TenantMixin, CustomerMixin):
|
||||
notice_title: Mapped[str] = mapped_column(String(50), nullable=False, comment='公告标题')
|
||||
notice_type: Mapped[str] = mapped_column(String(50), nullable=False, comment='公告类型(1通知 2公告)')
|
||||
notice_content: Mapped[str | None] = mapped_column(Text, nullable=True, comment='公告内容')
|
||||
start_time: Mapped[Optional[datetime]] = mapped_column(nullable=True, comment='开始时间')
|
||||
end_time: Mapped[Optional[datetime]] = mapped_column(nullable=True, comment='结束时间')
|
||||
|
||||
@@ -6,7 +6,7 @@ from pydantic import BaseModel, ConfigDict, Field, field_validator, model_valida
|
||||
from fastapi import Query
|
||||
|
||||
from app.core.validator import DateTimeStr
|
||||
from app.core.base_schema import BaseSchema, UserBySchema, TenantSchema
|
||||
from app.core.base_schema import BaseSchema, UserBySchema, TenantSchema, CustomerSchema
|
||||
|
||||
|
||||
class NoticeCreateSchema(BaseModel):
|
||||
@@ -14,10 +14,8 @@ class NoticeCreateSchema(BaseModel):
|
||||
notice_title: str = Field(..., max_length=50, description='公告标题')
|
||||
notice_type: str = Field(..., description='公告类型(1通知 2公告)')
|
||||
notice_content: str = Field(..., description='公告内容')
|
||||
status: bool = Field(default=True, description="是否启用(True:启用 False:禁用)")
|
||||
status: str = Field(default=True, description="是否启用(True:启用 False:禁用)")
|
||||
description: Optional[str] = Field(default=None, max_length=255, description="描述")
|
||||
start_time: Optional[datetime] = Field(default=None, description="开始时间")
|
||||
end_time: Optional[datetime] = Field(default=None, description="结束时间")
|
||||
|
||||
@field_validator("notice_type")
|
||||
@classmethod
|
||||
@@ -44,7 +42,7 @@ class NoticeUpdateSchema(NoticeCreateSchema):
|
||||
...
|
||||
|
||||
|
||||
class NoticeOutSchema(NoticeCreateSchema, BaseSchema, UserBySchema, TenantSchema):
|
||||
class NoticeOutSchema(NoticeCreateSchema, BaseSchema, UserBySchema, TenantSchema, CustomerSchema):
|
||||
"""公告通知响应模型"""
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
@@ -56,12 +54,9 @@ class NoticeQueryParam:
|
||||
self,
|
||||
notice_title: Optional[str] = Query(None, description="公告标题"),
|
||||
notice_type: Optional[str] = Query(None, description="公告类型"),
|
||||
status: Optional[bool] = Query(None, description="是否可用"),
|
||||
status: Optional[str] = Query(None, description="是否可用"),
|
||||
created_id: Optional[int] = Query(None, description="创建人"),
|
||||
start_time: Optional[DateTimeStr] = Query(None, description="创建开始时间", example="2025-01-01 00:00:00"),
|
||||
end_time: Optional[DateTimeStr] = Query(None, description="创建结束时间", example="2025-12-31 23:59:59"),
|
||||
notice_start_time: Optional[DateTimeStr] = Query(None, description="公告开始时间", example="2025-01-01 00:00:00"),
|
||||
notice_end_time: Optional[DateTimeStr] = Query(None, description="公告结束时间", example="2025-12-31 23:59:59"),
|
||||
created_time: Optional[list[DateTimeStr]] = Query(None, description="创建时间范围", example=["2025-01-01 00:00:00", "2025-12-31 23:59:59"]),
|
||||
) -> None:
|
||||
|
||||
# 模糊查询字段
|
||||
@@ -73,11 +68,5 @@ class NoticeQueryParam:
|
||||
self.notice_type = notice_type
|
||||
|
||||
# 时间范围查询
|
||||
if start_time and end_time:
|
||||
self.created_time = ("between", (start_time, end_time))
|
||||
|
||||
# 公告有效期查询
|
||||
if notice_start_time:
|
||||
self.start_time = ("ge", notice_start_time)
|
||||
if notice_end_time:
|
||||
self.end_time = ("le", notice_end_time)
|
||||
if created_time and len(created_time) == 2:
|
||||
self.created_time = ("between", (created_time[0], created_time[1]))
|
||||
|
||||
@@ -44,14 +44,8 @@ class NoticeService:
|
||||
返回:
|
||||
- List[Dict]: 可用公告详情字典列表。
|
||||
"""
|
||||
# 构建搜索条件,包括状态为可用和当前时间在有效期内
|
||||
current_time = datetime.now()
|
||||
search = {
|
||||
'status': True,
|
||||
'and': [
|
||||
{'or': [{'start_time': None}, {'start_time': {'le': current_time}}]},
|
||||
{'or': [{'end_time': None}, {'end_time': {'ge': current_time}}]}
|
||||
]
|
||||
}
|
||||
|
||||
notice_obj_list = await NoticeCRUD(auth).get_list_crud(search=search)
|
||||
@@ -171,8 +165,6 @@ class NoticeService:
|
||||
'notice_content': '公告内容',
|
||||
'status': '状态',
|
||||
'description': '备注',
|
||||
'start_time': '开始时间',
|
||||
'end_time': '结束时间',
|
||||
'created_time': '创建时间',
|
||||
'updated_time': '更新时间',
|
||||
'created_id': '创建者ID',
|
||||
|
||||
@@ -14,7 +14,7 @@ class ParamsCreateSchema(BaseModel):
|
||||
config_key: str = Field(..., max_length=500, description="参数键名")
|
||||
config_value: Optional[str] = Field(default=None, description="参数键值")
|
||||
config_type: bool = Field(default=False, description="系统内置(True:是 False:否)")
|
||||
status: bool = Field(default=True, description="状态(True:正常 False:停用)")
|
||||
status: str = Field(default=True, description="状态(True:正常 False:停用)")
|
||||
description: Optional[str] = Field(default=None, max_length=500, description="描述")
|
||||
|
||||
|
||||
@@ -42,12 +42,11 @@ class ParamsQueryParam:
|
||||
"""配置管理查询参数"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
config_name: Optional[str] = Query(None, description="配置名称"),
|
||||
config_key: Optional[str] = Query(None, description="配置键名"),
|
||||
config_type: Optional[bool] = Query(None, description="系统内置((True:是 False:否))"),
|
||||
start_time: Optional[DateTimeStr] = Query(None, description="开始时间", example="2025-01-01 00:00:00"),
|
||||
end_time: Optional[DateTimeStr] = Query(None, description="结束时间", example="2025-12-31 23:59:59"),
|
||||
self,
|
||||
config_name: Optional[str] = Query(None, description="配置名称"),
|
||||
config_key: Optional[str] = Query(None, description="配置键名"),
|
||||
config_type: Optional[bool] = Query(None, description="系统内置((True:是 False:否))"),
|
||||
created_time: Optional[list[DateTimeStr]] = Query(None, description="创建时间范围", example=["2025-01-01 00:00:00", "2025-12-31 23:59:59"]),
|
||||
) -> None:
|
||||
|
||||
# 模糊查询字段
|
||||
@@ -58,7 +57,7 @@ class ParamsQueryParam:
|
||||
self.config_type = config_type
|
||||
|
||||
# 时间范围查询
|
||||
if start_time and end_time:
|
||||
self.created_time = ("between", (start_time, end_time))
|
||||
if created_time and len(created_time) == 2:
|
||||
self.created_time = ("between", (created_time[0], created_time[1]))
|
||||
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ class PositionCRUD(CRUDBase[PositionModel, PositionCreateSchema, PositionUpdateS
|
||||
"""
|
||||
return await self.list(search=search, order_by=order_by, preload=preload)
|
||||
|
||||
async def set_available_crud(self, ids: List[int], status: bool) -> None:
|
||||
async def set_available_crud(self, ids: List[int], status: str) -> None:
|
||||
"""
|
||||
批量设置岗位可用状态。
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ class PositionCreateSchema(BaseModel):
|
||||
"""岗位创建模型"""
|
||||
name: str = Field(..., max_length=40, description="岗位名称")
|
||||
order: Optional[int] = Field(default=1, ge=1, description='显示排序')
|
||||
status: bool = Field(default=True, description="是否启用(True:启用 False:禁用)")
|
||||
status: str = Field(default=True, description="是否启用(True:启用 False:禁用)")
|
||||
description: Optional[str] = Field(default=None, max_length=255, description="描述")
|
||||
|
||||
@field_validator('name')
|
||||
@@ -41,10 +41,9 @@ class PositionQueryParam:
|
||||
def __init__(
|
||||
self,
|
||||
name: Optional[str] = Query(None, description="岗位名称"),
|
||||
status: Optional[bool] = Query(None, description="是否可用"),
|
||||
status: Optional[str] = Query(None, description="是否可用"),
|
||||
created_id: Optional[int] = Query(None, description="创建人"),
|
||||
start_time: Optional[DateTimeStr] = Query(None, description="开始时间", example="2025-01-01 00:00:00"),
|
||||
end_time: Optional[DateTimeStr] = Query(None, description="结束时间", example="2025-12-31 23:59:59"),
|
||||
created_time: Optional[list[DateTimeStr]] = Query(None, description="创建时间范围", example=["2025-01-01 00:00:00", "2025-12-31 23:59:59"]),
|
||||
) -> None:
|
||||
|
||||
# 模糊查询字段
|
||||
@@ -55,5 +54,5 @@ class PositionQueryParam:
|
||||
self.status = status
|
||||
|
||||
# 时间范围查询
|
||||
if start_time and end_time:
|
||||
self.created_time = ("between", (start_time, end_time))
|
||||
if created_time and len(created_time) == 2:
|
||||
self.created_time = ("between", (created_time[0], created_time[1]))
|
||||
|
||||
@@ -104,7 +104,7 @@ class RoleCRUD(CRUDBase[RoleModel, RoleCreateSchema, RoleUpdateSchema]):
|
||||
relationship.extend(depts)
|
||||
await self.db.flush()
|
||||
|
||||
async def set_available_crud(self, ids: List[int], status: bool) -> None:
|
||||
async def set_available_crud(self, ids: List[int], status: str) -> None:
|
||||
"""
|
||||
设置角色的可用状态
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ class RoleCreateSchema(BaseModel):
|
||||
code: Optional[str] = Field(default=None, max_length=40, description="角色编码")
|
||||
order: Optional[int] = Field(default=1, ge=1, description='显示排序')
|
||||
data_scope: Optional[int] = Field(default=1, ge=1, le=5, description='数据权限范围')
|
||||
status: bool = Field(default=True, description="是否启用")
|
||||
status: str = Field(default=True, description="是否启用")
|
||||
description: Optional[str] = Field(default=None, max_length=255, description="描述")
|
||||
|
||||
@field_validator("code")
|
||||
@@ -65,10 +65,9 @@ class RoleQueryParam:
|
||||
def __init__(
|
||||
self,
|
||||
name: Optional[str] = Query(None, description="角色名称"),
|
||||
status: Optional[bool] = Query(None, description="是否可用"),
|
||||
status: Optional[str] = Query(None, description="是否可用"),
|
||||
created_id: Optional[int] = Query(None, description="创建人"),
|
||||
start_time: Optional[DateTimeStr] = Query(None, description="开始时间", example="2025-01-01 00:00:00"),
|
||||
end_time: Optional[DateTimeStr] = Query(None, description="结束时间", example="2025-12-31 23:59:59"),
|
||||
created_time: Optional[list[DateTimeStr]] = Query(None, description="创建时间范围", example=["2025-01-01 00:00:00", "2025-12-31 23:59:59"]),
|
||||
) -> None:
|
||||
|
||||
# 模糊查询字段
|
||||
@@ -79,5 +78,5 @@ class RoleQueryParam:
|
||||
self.status = status
|
||||
|
||||
# 时间范围查询
|
||||
if start_time and end_time:
|
||||
self.created_time = ("between", (start_time, end_time))
|
||||
if created_time and len(created_time) == 2:
|
||||
self.created_time = ("between", (created_time[0], created_time[1]))
|
||||
|
||||
@@ -85,7 +85,7 @@ class TenantCRUD(CRUDBase[TenantModel, TenantCreateSchema, TenantUpdateSchema]):
|
||||
"""
|
||||
return await self.delete(ids=ids)
|
||||
|
||||
async def set_available_crud(self, ids: List[int], status: bool) -> None:
|
||||
async def set_available_crud(self, ids: List[int], status: str) -> None:
|
||||
"""
|
||||
批量设置可用状态
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ class TenantCreateSchema(BaseModel):
|
||||
"""新增模型"""
|
||||
name: str = Field(..., max_length=64, description='租户名称')
|
||||
code: Optional[str] = Field(default=None, max_length=20, description='租户编码')
|
||||
status: bool = Field(True, description="是否启用(True:启用 False:禁用)")
|
||||
status: str = Field(True, description="是否启用(True:启用 False:禁用)")
|
||||
description: Optional[str] = Field(default=None, max_length=255, description="描述")
|
||||
start_time: Optional[DateTimeStr] = Field(default=None, description="开始时间")
|
||||
end_time: Optional[DateTimeStr] = Field(default=None, description="结束时间")
|
||||
@@ -65,9 +65,8 @@ class TenantQueryParam:
|
||||
def __init__(
|
||||
self,
|
||||
name: Optional[str] = Query(None, description="租户名称"),
|
||||
status: Optional[bool] = Query(None, description="状态用(True:启用 False:禁用)"),
|
||||
start_time: Optional[DateTimeStr] = Query(None, description="开始时间", example="2025-01-01 00:00:00"),
|
||||
end_time: Optional[DateTimeStr] = Query(None, description="结束时间", example="2025-12-31 23:59:59"),
|
||||
status: Optional[str] = Query(None, description="状态用(True:启用 False:禁用)"),
|
||||
created_time: Optional[list[DateTimeStr]] = Query(None, description="创建时间范围", example=["2025-01-01 00:00:00", "2025-12-31 23:59:59"]),
|
||||
) -> None:
|
||||
|
||||
# 模糊查询字段
|
||||
@@ -77,6 +76,6 @@ class TenantQueryParam:
|
||||
self.status = status
|
||||
|
||||
# 时间范围查询
|
||||
if start_time and end_time:
|
||||
self.created_time = ("between", (start_time, end_time))
|
||||
if created_time and len(created_time) == 2:
|
||||
self.created_time = ("between", (created_time[0], created_time[1]))
|
||||
|
||||
|
||||
@@ -105,7 +105,7 @@ class UserCRUD(CRUDBase[UserModel, UserCreateSchema, UserUpdateSchema]):
|
||||
"""
|
||||
return await self.update(id=id, data={"last_login": datetime.now()})
|
||||
|
||||
async def set_available_crud(self, ids: List[int], status: bool) -> None:
|
||||
async def set_available_crud(self, ids: List[int], status: str) -> None:
|
||||
"""
|
||||
批量设置用户可用状态
|
||||
|
||||
|
||||
@@ -94,7 +94,7 @@ class UserCreateSchema(CurrentUserUpdateSchema):
|
||||
|
||||
username: Optional[str] = Field(default=None, max_length=32, description="用户名")
|
||||
password: Optional[str] = Field(default=None, max_length=128, description="密码哈希值")
|
||||
status: bool = Field(default=True, description="是否可用")
|
||||
status: str = Field(default=True, description="是否可用")
|
||||
description: Optional[str] = Field(default=None, max_length=255, description="备注")
|
||||
user_type: Optional[str] = Field(default="0", max_length=32, description="用户类型")
|
||||
|
||||
@@ -136,9 +136,8 @@ class UserQueryParam:
|
||||
mobile: Optional[str] = Query(None, description="手机号", pattern=r'^1[3-9]\d{9}$'),
|
||||
email: Optional[str] = Query(None, description="邮箱", pattern=r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'),
|
||||
dept_id: Optional[int] = Query(None, description="部门ID"),
|
||||
status: Optional[bool] = Query(None, description="是否可用"),
|
||||
start_time: Optional[DateTimeStr] = Query(None, description="开始时间", example="2025-01-01 00:00:00"),
|
||||
end_time: Optional[DateTimeStr] = Query(None, description="结束时间", example="2025-12-31 23:59:59"),
|
||||
status: Optional[str] = Query(None, description="是否可用"),
|
||||
created_time: Optional[list[DateTimeStr]] = Query(None, description="创建时间范围", example=["2025-01-01 00:00:00", "2025-12-31 23:59:59"]),
|
||||
created_id: Optional[int] = Query(None, description="创建人"),
|
||||
) -> None:
|
||||
|
||||
@@ -154,5 +153,5 @@ class UserQueryParam:
|
||||
self.status = status
|
||||
|
||||
# 时间范围查询
|
||||
if start_time and end_time:
|
||||
self.created_time = ("between", (start_time, end_time))
|
||||
if created_time and len(created_time) == 2:
|
||||
self.created_time = ("between", (created_time[0], created_time[1]))
|
||||
|
||||
Reference in New Issue
Block a user