Browse Source

元数据标签配置

master
si@aidatagov.com 3 weeks ago
parent
commit
afa10f1754
  1. 204
      vue-fastapi-backend/module_admin/controller/metadata_config_controller.py
  2. 4
      vue-fastapi-backend/module_admin/dao/batch_label_config_dao.py
  3. 10
      vue-fastapi-backend/module_admin/entity/do/metadata_config_do.py
  4. 23
      vue-fastapi-backend/module_admin/entity/vo/metadata_config_vo.py
  5. 2
      vue-fastapi-backend/module_admin/service/batch_label_config_service.py
  6. 421
      vue-fastapi-frontend/src/views/metadataConfig/metaclas/index.vue

204
vue-fastapi-backend/module_admin/controller/metadata_config_controller.py

@ -17,7 +17,10 @@ from module_admin.entity.vo.metadata_config_vo import (
BatchBusiLabelConfigModel,
BatchDataopLabelConfigModel,
BatchDatatypeLabelConfigModel,
SecuBizPermiConfigQueryModel
BatchBusiLabelConfigPageQueryModel,
BatchDataopLabelModelPageQueryModel,
BatchDatatypeLabelConfigPageQueryModel,
SecuBizPermiConfigQueryModel,
)
from module_admin.service.metadata_config_service import MetadataConfigService
from module_admin.service.batch_label_config_service import BatchLabelConfigService
@ -28,27 +31,27 @@ from utils.log_util import logger
from module_admin.service.login_service import LoginService
from module_admin.entity.vo.user_vo import CurrentUserModel
metadataConfigController = APIRouter(prefix="/metadataConfig")
metadataConfigController = APIRouter(prefix='/metadataConfig')
@metadataConfigController.get("/clas/list", response_model=PageResponseModel)
@metadataConfigController.get('/clas/list', response_model=PageResponseModel)
async def get_metadata_clas_list(
request: Request,
query: MetadataClasPageQueryModel = Depends(MetadataClasPageQueryModel.as_query),
query_db: AsyncSession = Depends(get_db),
):
result = await MetadataConfigService.get_metadata_clas_list_services(query_db, query, is_page=True)
logger.info("获取元数据分类列表成功")
logger.info('获取元数据分类列表成功')
return ResponseUtil.success(model_content=result)
@metadataConfigController.post("/clas")
@ValidateFields(validate_model="add_metadata_clas")
@metadataConfigController.post('/clas')
@ValidateFields(validate_model='add_metadata_clas')
async def add_metadata_clas(
request: Request,
add_clas: MetadataClasModel,
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user),
):
add_clas.upd_time = datetime.now()
add_clas.rec_subm_prsn = current_user.user.user_name
@ -59,14 +62,13 @@ async def add_metadata_clas(
return ResponseUtil.success(msg=result.message)
@metadataConfigController.put("/clas")
@ValidateFields(validate_model="edit_metadata_clas")
@metadataConfigController.put('/clas')
@ValidateFields(validate_model='edit_metadata_clas')
async def edit_metadata_clas(
request: Request,
edit_clas: MetadataClasModel,
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user),
):
edit_clas.upd_time = datetime.now()
edit_clas.rec_subm_prsn = current_user.user.user_name
@ -75,7 +77,7 @@ async def edit_metadata_clas(
return ResponseUtil.success(msg=result.message)
@metadataConfigController.delete("/clas/{clas_ids}")
@metadataConfigController.delete('/clas/{clas_ids}')
async def delete_metadata_clas(
request: Request,
clas_ids: str,
@ -86,30 +88,33 @@ async def delete_metadata_clas(
return ResponseUtil.success(msg=result.message)
@metadataConfigController.get("/clas/{clas_id}", response_model=MetadataClasModel)
@metadataConfigController.get('/clas/{clas_id}', response_model=MetadataClasModel)
async def get_metadata_clas_detail(
request: Request,
clas_id: int,
query_db: AsyncSession = Depends(get_db),
):
result = await MetadataConfigService.get_metadata_clas_detail_services(query_db, clas_id)
logger.info(f"获取元数据分类ID={clas_id}详情成功")
logger.info(f'获取元数据分类ID={clas_id}详情成功')
return ResponseUtil.success(data=result)
# ------------------------ MetadataSec 控制接口 ------------------------ #
@metadataConfigController.get("/sec/list", response_model=PageResponseModel)
@metadataConfigController.get('/sec/list', response_model=PageResponseModel)
async def get_metadata_sec_list(
request: Request,
query: MetadataSecPageQueryModel = Depends(MetadataSecPageQueryModel.as_query),
query_db: AsyncSession = Depends(get_db),
):
result = await MetadataConfigService.get_metadata_sec_list_services(query_db, query, is_page=True)
logger.info("获取数据安全配置列表成功")
logger.info('获取数据安全配置列表成功')
return ResponseUtil.success(model_content=result)
@metadataConfigController.post("/sec")
@ValidateFields(validate_model="add_metadata_sec")
@metadataConfigController.post('/sec')
@ValidateFields(validate_model='add_metadata_sec')
async def add_metadata_sec(
request: Request,
add_sec: MetadataSecModel,
@ -124,8 +129,8 @@ async def add_metadata_sec(
return ResponseUtil.success(msg=result.message)
@metadataConfigController.put("/sec")
@ValidateFields(validate_model="edit_metadata_sec")
@metadataConfigController.put('/sec')
@ValidateFields(validate_model='edit_metadata_sec')
async def edit_metadata_sec(
request: Request,
edit_sec: MetadataSecModel,
@ -140,7 +145,7 @@ async def edit_metadata_sec(
return ResponseUtil.success(msg=result.message)
@metadataConfigController.delete("/sec/{sec_ids}")
@metadataConfigController.delete('/sec/{sec_ids}')
async def delete_metadata_sec(
request: Request,
sec_ids: str,
@ -151,19 +156,21 @@ async def delete_metadata_sec(
return ResponseUtil.success(msg=result.message)
@metadataConfigController.get("/sec/{sec_id}", response_model=MetadataSecModel)
@metadataConfigController.get('/sec/{sec_id}', response_model=MetadataSecModel)
async def get_metadata_sec_detail(
request: Request,
sec_id: str,
query_db: AsyncSession = Depends(get_db),
):
result = await MetadataConfigService.get_metadata_sec_detail_services(query_db, sec_id)
logger.info(f"获取数据安全配置 onum={sec_id} 详情成功")
logger.info(f'获取数据安全配置 onum={sec_id} 详情成功')
return ResponseUtil.success(data=result)
# ---------- t_secu_biz_config 接口(改造后) ----------
@metadataConfigController.get("/bizConfig/list", response_model=PageResponseModel)
@metadataConfigController.get('/bizConfig/list', response_model=PageResponseModel)
async def get_biz_config_list(
request: Request,
query: SecuBizConfigQueryModel = Depends(SecuBizConfigPageQueryModel.as_query),
@ -171,7 +178,9 @@ async def get_biz_config_list(
):
result = await MetadataConfigService.get_biz_config_list_services(db, query, is_page=True)
return ResponseUtil.success(model_content=result)
@metadataConfigController.get("/bizConfig/listall")
@metadataConfigController.get('/bizConfig/listall')
async def get_biz_config_list_all(
request: Request,
query: SecuBizConfigQueryModel = Depends(SecuBizConfigPageQueryModel.as_query),
@ -180,8 +189,9 @@ async def get_biz_config_list_all(
result = await MetadataConfigService.get_biz_config_list_services(db, query, is_page=False)
return ResponseUtil.success(data=result)
@metadataConfigController.post("/bizConfig/add")
@ValidateFields(["bizModule", "configType", "data_sec_lvl", "applyType"])
@metadataConfigController.post('/bizConfig/add')
@ValidateFields(['bizModule', 'configType', 'data_sec_lvl', 'applyType'])
async def add_biz_config(
item: SecuBizConfigAddModel,
db: AsyncSession = Depends(get_db),
@ -193,8 +203,8 @@ async def add_biz_config(
return ResponseUtil.success(msg=result.message)
@metadataConfigController.post("/bizConfig/edit")
@ValidateFields(["onum"])
@metadataConfigController.post('/bizConfig/edit')
@ValidateFields(['onum'])
async def edit_biz_config(
item: SecuBizConfigAddModel,
db: AsyncSession = Depends(get_db),
@ -206,13 +216,13 @@ async def edit_biz_config(
return ResponseUtil.success(msg=result.message)
@metadataConfigController.delete("/bizConfig/delete")
@metadataConfigController.delete('/bizConfig/delete')
async def delete_biz_config(onums: str, db: AsyncSession = Depends(get_db)):
result = await MetadataConfigService.delete_biz_config_services(db, onums)
return ResponseUtil.success(msg=result.message)
@metadataConfigController.get("/bizConfig/detail")
@metadataConfigController.get('/bizConfig/detail')
async def get_biz_config_detail(onum: str, db: AsyncSession = Depends(get_db)):
data = await MetadataConfigService.get_biz_config_detail_services(db, onum)
return ResponseUtil.success(data=data)
@ -220,7 +230,8 @@ async def get_biz_config_detail(onum: str, db: AsyncSession = Depends(get_db)):
# ---------- t_secu_biz_permi_config 接口 ----------
@metadataConfigController.get("/bizPermiConfig/list", response_model=PageResponseModel)
@metadataConfigController.get('/bizPermiConfig/list', response_model=PageResponseModel)
async def get_biz_permi_config_list(
request: Request,
query: SecuBizConfigModel = Depends(SecuBizPermiConfigPageQueryModel.as_query),
@ -229,20 +240,26 @@ async def get_biz_permi_config_list(
result = await MetadataConfigService.get_biz_permi_config_list_services(query_db, query, is_page=True)
return ResponseUtil.success(model_content=result)
@metadataConfigController.post("/bizPermiConfig/add")
@metadataConfigController.post('/bizPermiConfig/add')
async def add_biz_permi_config(
item: SecuBizPermiConfigBatchModel,
db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user)
current_user: CurrentUserModel = Depends(LoginService.get_current_user),
):
create_by = current_user.user.user_name
create_time = datetime.now()
result = await MetadataConfigService.add_biz_permi_config_services(db, item, create_by, create_time)
return ResponseUtil.success(msg=result.message)
@metadataConfigController.post("/bizPermiConfig/edit")
@ValidateFields(["onum"])
async def edit_biz_permi_config(item: SecuBizPermiConfigModel, db: AsyncSession = Depends(get_db), current_user: CurrentUserModel = Depends(LoginService.get_current_user)):
@metadataConfigController.post('/bizPermiConfig/edit')
@ValidateFields(['onum'])
async def edit_biz_permi_config(
item: SecuBizPermiConfigModel,
db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user),
):
item.update_by = current_user.user.user_name
item.update_time = datetime.now()
@ -250,58 +267,72 @@ async def edit_biz_permi_config(item: SecuBizPermiConfigModel, db: AsyncSession
return ResponseUtil.success(msg=result.message)
@metadataConfigController.delete("/bizPermiConfig/delete")
@metadataConfigController.delete('/bizPermiConfig/delete')
async def delete_biz_permi_config(onums: str, db: AsyncSession = Depends(get_db)):
result = await MetadataConfigService.delete_biz_permi_config_services(db, onums)
return ResponseUtil.success(msg=result.message)
@metadataConfigController.get("/bizPermiConfig/detail")
@metadataConfigController.get('/bizPermiConfig/detail')
async def get_biz_permi_config_detail(onum: str, db: AsyncSession = Depends(get_db)):
data = await MetadataConfigService.get_biz_permi_config_detail_services(db, onum)
return ResponseUtil.success(data=data)
@metadataConfigController.get("/bizConfigRela/list/{bizOnum}")
async def get_biz_rela_config_list(bizOnum: int, query_db: AsyncSession = Depends(get_db),
):
@metadataConfigController.get('/bizConfigRela/list/{bizOnum}')
async def get_biz_rela_config_list(
bizOnum: int,
query_db: AsyncSession = Depends(get_db),
):
ai_chat_list_result = await MetadataConfigService.get_biz_config_rela_list_services(query_db, bizOnum)
logger.info('获取成功')
return ResponseUtil.success(data=ai_chat_list_result)
@metadataConfigController.get("/busiLabel/list", response_model=PageResponseModel)
@metadataConfigController.get('/busiLabel/list', response_model=PageResponseModel)
async def get_busi_label_list(
request: Request,
query: BatchBusiLabelConfigModel ,
query: BatchBusiLabelConfigModel = Depends(BatchBusiLabelConfigPageQueryModel.as_query),
query_db: AsyncSession = Depends(get_db),
):
result = await BatchLabelConfigService.get_busi_list_services(query_db, query, is_page=True)
logger.info("获取业务标签配置列表成功")
return ResponseUtil.success(model_content=result)
result = await BatchLabelConfigService.get_busi_list_services(query_db, query, False)
logger.info('获取业务标签配置列表成功')
return ResponseUtil.success(data=result)
@metadataConfigController.post("/busiLabel")
@ValidateFields(validate_model="add_busi_label")
@metadataConfigController.post('/busiLabel')
@ValidateFields(validate_model='add_busi_label')
async def add_busi_label(
request: Request,
model: BatchBusiLabelConfigModel,
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user),
):
model.upd_by = current_user.user.user_name
model.upd_time = datetime.now()
result = await BatchLabelConfigService.add_busi_services(query_db, model)
logger.info(result.message)
return ResponseUtil.success(msg=result.message)
@metadataConfigController.put("/busiLabel")
@ValidateFields(validate_model="edit_busi_label")
@metadataConfigController.put('/busiLabel')
@ValidateFields(validate_model='edit_busi_label')
async def edit_busi_label(
request: Request,
model: BatchBusiLabelConfigModel,
query_db: AsyncSession = Depends(get_db),
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user),
):
model.upd_by = current_user.user.user_name
model.upd_time = datetime.now()
result = await BatchLabelConfigService.edit_busi_services(query_db, model)
logger.info(result.message)
return ResponseUtil.success(msg=result.message)
@metadataConfigController.delete("/busiLabel/{onum_list}")
@metadataConfigController.delete('/busiLabel/{onum_list}')
async def delete_busi_label(
request: Request,
onum_list: str,
@ -312,51 +343,61 @@ async def delete_busi_label(
return ResponseUtil.success(msg=result.message)
@metadataConfigController.get("/busiLabel/{onum}", response_model=BatchBusiLabelConfigModel)
@metadataConfigController.get('/busiLabel/{onum}', response_model=BatchBusiLabelConfigModel)
async def get_busi_label_detail(
request: Request,
onum: str,
query_db: AsyncSession = Depends(get_db),
):
result = await BatchLabelConfigService.get_busi_detail_services(query_db, onum)
logger.info(f"获取业务标签配置 onum={onum} 详情成功")
logger.info(f'获取业务标签配置 onum={onum} 详情成功')
return ResponseUtil.success(data=result)
@metadataConfigController.get("/dataopLabel/list", response_model=PageResponseModel)
@metadataConfigController.get('/dataopLabel/list', response_model=PageResponseModel)
async def get_dataop_label_list(
request: Request,
query: BatchDataopLabelConfigModel ,
query: BatchDataopLabelConfigModel,
query_db: AsyncSession = Depends(get_db),
):
result = await BatchLabelConfigService.get_dataop_list_services(query_db, query, is_page=True)
logger.info("获取操作标签配置列表成功")
logger.info('获取操作标签配置列表成功')
return ResponseUtil.success(model_content=result)
@metadataConfigController.post("/dataopLabel")
@ValidateFields(validate_model="add_dataop_label")
@metadataConfigController.post('/dataopLabel')
@ValidateFields(validate_model='add_dataop_label')
async def add_dataop_label(
request: Request,
model: BatchDataopLabelConfigModel,
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user),
):
model.upd_by = current_user.user.user_name
model.upd_time = datetime.now()
result = await BatchLabelConfigService.add_dataop_services(query_db, model)
logger.info(result.message)
return ResponseUtil.success(msg=result.message)
@metadataConfigController.put("/dataopLabel")
@ValidateFields(validate_model="edit_dataop_label")
@metadataConfigController.put('/dataopLabel')
@ValidateFields(validate_model='edit_dataop_label')
async def edit_dataop_label(
request: Request,
model: BatchDataopLabelConfigModel,
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user),
):
model.upd_by = current_user.user.user_name
model.upd_time = datetime.now()
result = await BatchLabelConfigService.edit_dataop_services(query_db, model)
logger.info(result.message)
return ResponseUtil.success(msg=result.message)
@metadataConfigController.delete("/dataopLabel/{onum_list}")
@metadataConfigController.delete('/dataopLabel/{onum_list}')
async def delete_dataop_label(
request: Request,
onum_list: str,
@ -367,51 +408,62 @@ async def delete_dataop_label(
return ResponseUtil.success(msg=result.message)
@metadataConfigController.get("/dataopLabel/{onum}", response_model=BatchDataopLabelConfigModel)
@metadataConfigController.get('/dataopLabel/{onum}', response_model=BatchDataopLabelConfigModel)
async def get_dataop_label_detail(
request: Request,
onum: str,
query_db: AsyncSession = Depends(get_db),
):
result = await BatchLabelConfigService.get_dataop_detail_services(query_db, onum)
logger.info(f"获取操作标签配置 onum={onum} 详情成功")
logger.info(f'获取操作标签配置 onum={onum} 详情成功')
return ResponseUtil.success(data=result)
@metadataConfigController.get("/datatypeLabel/list", response_model=PageResponseModel)
@metadataConfigController.get('/datatypeLabel/list', response_model=PageResponseModel)
async def get_datatype_label_list(
request: Request,
query: BatchDatatypeLabelConfigModel,
query: BatchDatatypeLabelConfigModel = Depends(BatchDatatypeLabelConfigPageQueryModel.as_query),
query_db: AsyncSession = Depends(get_db),
):
result = await BatchLabelConfigService.get_datatype_list_services(query_db, query, is_page=True)
logger.info("获取数据类型标签配置列表成功")
return ResponseUtil.success(model_content=result)
result = await BatchLabelConfigService.get_datatype_list_services(query_db, query,False)
logger.info('获取数据类型标签配置列表成功')
return ResponseUtil.success(data=result)
@metadataConfigController.post("/datatypeLabel")
@ValidateFields(validate_model="add_datatype_label")
@metadataConfigController.post('/datatypeLabel')
@ValidateFields(validate_model='add_datatype_label')
async def add_datatype_label(
request: Request,
model: BatchDatatypeLabelConfigModel,
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user),
):
model.upd_by = current_user.user.user_name
model.upd_time = datetime.now()
result = await BatchLabelConfigService.add_datatype_services(query_db, model)
logger.info(result.message)
return ResponseUtil.success(msg=result.message)
@metadataConfigController.put("/datatypeLabel")
@ValidateFields(validate_model="edit_datatype_label")
@metadataConfigController.put('/datatypeLabel')
@ValidateFields(validate_model='edit_datatype_label')
async def edit_datatype_label(
request: Request,
model: BatchDatatypeLabelConfigModel,
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user),
):
model.upd_by = current_user.user.user_name
model.upd_time = datetime.now()
result = await BatchLabelConfigService.edit_datatype_services(query_db, model)
logger.info(result.message)
return ResponseUtil.success(msg=result.message)
@metadataConfigController.delete("/datatypeLabel/{onum_list}")
@metadataConfigController.delete('/datatypeLabel/{onum_list}')
async def delete_datatype_label(
request: Request,
onum_list: str,
@ -422,12 +474,12 @@ async def delete_datatype_label(
return ResponseUtil.success(msg=result.message)
@metadataConfigController.get("/datatypeLabel/{onum}", response_model=BatchDatatypeLabelConfigModel)
@metadataConfigController.get('/datatypeLabel/{onum}', response_model=BatchDatatypeLabelConfigModel)
async def get_datatype_label_detail(
request: Request,
onum: str,
query_db: AsyncSession = Depends(get_db),
):
result = await BatchLabelConfigService.get_datatype_detail_services(query_db, onum)
logger.info(f"获取数据类型标签配置 onum={onum} 详情成功")
logger.info(f'获取数据类型标签配置 onum={onum} 详情成功')
return ResponseUtil.success(data=result)

4
vue-fastapi-backend/module_admin/dao/batch_label_config_dao.py

@ -16,8 +16,8 @@ class BatchLabelConfigDAO:
@classmethod
async def get_busi_list(cls, db: AsyncSession, query_object, is_page: bool = False):
query = select(BatchBusiLabelConfig).where(
BatchBusiLabelConfig.regex_name.like(f"%{query_object.regex_name}%") if query_object.regex_name else True,
BatchBusiLabelConfig.mdl_name == query_object.mdl_name if query_object.mdl_name else True,
BatchBusiLabelConfig.ssys_cd == query_object.ssys_cd if query_object.ssys_cd else True,
).order_by(BatchBusiLabelConfig.upd_time.desc())
return await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
@ -82,8 +82,8 @@ class BatchLabelConfigDAO:
@classmethod
async def get_datatype_list(cls, db: AsyncSession, query_object, is_page: bool = False):
query = select(BatchDatatypeLabelConfig).where(
BatchDatatypeLabelConfig.datatype.like(f"%{query_object.datatype}%") if query_object.datatype else True,
BatchDatatypeLabelConfig.mdl_name == query_object.mdl_name if query_object.mdl_name else True,
BatchDatatypeLabelConfig.ssys_cd == query_object.ssys_cd if query_object.ssys_cd else True,
).order_by(BatchDatatypeLabelConfig.upd_time.desc())
return await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)

10
vue-fastapi-backend/module_admin/entity/do/metadata_config_do.py

@ -77,10 +77,11 @@ class BatchBusiLabelConfig(Base):
onum = Column(Integer, primary_key=True, autoincrement=True, comment="唯一编号")
regex_name = Column(String(255), nullable=True, comment="正则表达式名称")
regex_pattern = Column(String(255), nullable=True, comment="正则表达式")
upd_time = Column(DateTime, nullable=True, comment="更新时间")
ssys_cd = Column(String(50), nullable=True)
mdl_name = Column(String(50), nullable=True)
ratio = Column(DECIMAL(10, 4), nullable=True)
upd_by = Column(String(50), nullable=True)
upd_time = Column(DateTime, nullable=True, comment='更新时间')
class BatchDataopLabelConfig(Base):
"""
批处理数据操作标签配置表 ORM 映射类对应表 t_batch_dataop_label_config
@ -98,6 +99,8 @@ class BatchDataopLabelConfig(Base):
config7 = Column(DECIMAL(10, 4), nullable=True, comment="参数7")
ssys_cd = Column(String(50), nullable=True)
mdl_name = Column(String(50), nullable=True)
upd_by = Column(String(50), nullable=True)
upd_time = Column(DateTime, nullable=True, comment='更新时间')
class BatchDatatypeLabelConfig(Base):
"""
批处理字段类型标签配置表 ORM 映射类对应表 t_batch_datatype_label_config
@ -107,6 +110,7 @@ class BatchDatatypeLabelConfig(Base):
onum = Column(Integer, primary_key=True, autoincrement=True, comment="唯一编号")
datatype = Column(String(100), nullable=True, comment="字段类型")
ratio = Column(DECIMAL(10, 4), nullable=True, comment="比率")
upd_time = Column(DateTime, nullable=True, comment="更新时间")
ssys_cd = Column(String(50), nullable=True)
mdl_name = Column(String(50), nullable=True)
mdl_name = Column(String(50), nullable=True)
upd_by = Column(String(50), nullable=True)
upd_time = Column(DateTime, nullable=True, comment='更新时间')

23
vue-fastapi-backend/module_admin/entity/vo/metadata_config_vo.py

@ -255,7 +255,8 @@ class BatchDataopLabelConfigModel(BaseModel):
config7: Optional[float] = Field(default=None, description='参数7')
ssys_cd: Optional[str] = Field(default=None, description='系统代码')
mdl_name: Optional[str] = Field(default=None, description='模块名称')
upd_by: Optional[str] = Field(default=None, description='更新人员')
upd_time: Optional[datetime] = Field(default=None, description='更新时间')
class BatchDatatypeLabelConfigModel(BaseModel):
"""
批处理字段类型标签配置 Pydantic 模型
@ -265,9 +266,10 @@ class BatchDatatypeLabelConfigModel(BaseModel):
onum: Optional[int] = Field(default=None, description='唯一编号')
datatype: Optional[str] = Field(default=None, description='字段类型')
ratio: Optional[float] = Field(default=None, description='比率')
upd_time: Optional[datetime] = Field(default=None, description='更新时间')
ssys_cd: Optional[str] = Field(default=None, description='系统代码')
mdl_name: Optional[str] = Field(default=None, description='模块名称')
upd_by: Optional[str] = Field(default=None, description='更新人员')
upd_time: Optional[datetime] = Field(default=None, description='更新时间')
class BatchBusiLabelConfigModel(BaseModel):
"""
@ -278,8 +280,21 @@ class BatchBusiLabelConfigModel(BaseModel):
onum: Optional[int] = Field(default=None, description='唯一编号')
regex_name: Optional[str] = Field(default=None, description='正则表达式名称')
regex_pattern: Optional[str] = Field(default=None, description='正则表达式')
upd_time: Optional[datetime] = Field(default=None, description='更新时间')
ssys_cd: Optional[str] = Field(default=None, description='系统代码')
mdl_name: Optional[str] = Field(default=None, description='模块名称')
ratio: Optional[float] = Field(default=None, description='比率')
upd_by: Optional[str] = Field(default=None, description='更新人员')
upd_time: Optional[datetime] = Field(default=None, description='更新时间')
@as_query
class BatchDataopLabelModelPageQueryModel(BatchDataopLabelConfigModel):
page_num: int = Field(default=1, description='当前页码')
page_size: int = Field(default=10, description='每页记录数')
@as_query
class BatchDatatypeLabelConfigPageQueryModel(BatchDatatypeLabelConfigModel):
page_num: int = Field(default=1, description='当前页码')
page_size: int = Field(default=10, description='每页记录数')
@as_query
class BatchBusiLabelConfigPageQueryModel(BatchBusiLabelConfigModel):
page_num: int = Field(default=1, description='当前页码')
page_size: int = Field(default=10, description='每页记录数')

2
vue-fastapi-backend/module_admin/service/batch_label_config_service.py

@ -20,7 +20,6 @@ class BatchLabelConfigService:
@classmethod
async def add_busi_services(cls, db: AsyncSession, page_object):
try:
page_object.onum = str(uuid.uuid4())
await BatchLabelConfigDAO.add_busi(db, page_object)
await db.commit()
return CrudResponseModel(is_success=True, message="新增成功")
@ -130,7 +129,6 @@ class BatchLabelConfigService:
@classmethod
async def add_datatype_services(cls, db: AsyncSession, page_object):
try:
page_object.onum = str(uuid.uuid4())
await BatchLabelConfigDAO.add_datatype(db, page_object)
await db.commit()
return CrudResponseModel(is_success=True, message="新增成功")

421
vue-fastapi-frontend/src/views/metadataConfig/metaclas/index.vue

@ -0,0 +1,421 @@
<template>
<div class="app-container">
<el-row :gutter="10" class="mb8">
<el-form :inline="true" :model="queryForm">
<el-form-item label="归属系统">
<el-select v-model="queryForm.ssysCd" placeholder="请选择系统" clearable allow-create filterable style="width: 180px">
<el-option v-for="item in dsSysList" :key="item.id" :label="item.name" :value="item.name" />
</el-select>
</el-form-item>
<el-form-item label="模式名">
<el-input
v-model="queryForm.mdlName"
placeholder="请输入模式名"
clearable
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleSearch"
>搜索</el-button
>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
</el-row>
<span> 值类型参数调整</span>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="openAddDialog1"
>新增</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="Edit"
:disabled="selectedRows1.length !== 1"
@click="openEditDialog1(selectedRows1[0])"
>修改</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="selectedRows1.length === 0"
@click="deleteSelected1"
>删除</el-button
>
</el-col>
</el-row>
<el-table
v-loading="loading"
:data="configList1"
@selection-change="handleSelectionChange1"
style="width: 100%"
height="500"
border
stripe
>
<el-table-column type="selection" width="55" />
<el-table-column prop="datatype" label="值类型" width="200" />
<el-table-column prop="ratio" label="阈值" width="150" />
<el-table-column prop="updBy" label="更新人" width="150" />
<el-table-column prop="updTime" label="更新时间" width="180" />
</el-table>
<span> 业务类型参数调整</span>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="openAddDialog2"
>新增</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="Edit"
:disabled="selectedRows2.length !== 1"
@click="openEditDialog2(selectedRows2[0])"
>修改</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="selectedRows2.length === 0"
@click="deleteSelected2"
>删除</el-button
>
</el-col>
</el-row>
<el-table
v-loading="loading"
:data="configList2"
@selection-change="handleSelectionChange2"
style="width: 100%"
height="500"
border
stripe
>
<el-table-column type="selection" width="55" />
<el-table-column prop="regexName" label="业务类型" width="200" />
<el-table-column prop="regexPattern" label="正则表达式" width="200" />
<el-table-column prop="ratio" label="阈值" width="150" />
<el-table-column prop="updBy" label="更新人" width="150" />
<el-table-column prop="updTime" label="更新时间" width="180" />
</el-table>
<span> 字段处理类型参数调整</span>
<el-dialog
:title="title"
v-model="open1"
width="500px"
append-to-body
:before-close="handleClose1"
>
<el-form
ref="clasFormRef1"
:model="form1"
:rules="rules1"
label-width="120px"
size="small"
>
<el-form-item label="值类型" prop="datatype">
<el-input v-model="form1.datatype" autocomplete="off" />
</el-form-item>
<el-form-item label="阈值" prop="ratio">
<el-input v-model.number="form1.ratio" autocomplete="off" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="open1 = false">取消</el-button>
<el-button type="primary" @click="submitForm1">保存</el-button>
</template>
</el-dialog>
<el-dialog
:title="title"
v-model="open2"
width="500px"
append-to-body
:before-close="handleClose2"
>
<el-form
ref="clasFormRef2"
:model="form2"
:rules="rules2"
label-width="120px"
size="small"
>
<el-form-item label="业务类型" prop="regexName">
<el-input v-model="form2.regexName" autocomplete="off" />
</el-form-item>
<el-form-item label="正则表达式" prop="regexPattern">
<el-input v-model="form2.regexPattern" autocomplete="off" />
</el-form-item>
<el-form-item label="阈值" prop="ratio">
<el-input v-model.number="form2.ratio" autocomplete="off" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="open2 = false">取消</el-button>
<el-button type="primary" @click="submitForm2">保存</el-button>
</template>
</el-dialog>
</div>
</template>
<script setup>
import { ref, reactive, onMounted } from "vue";
import { ElMessageBox, ElMessage } from "element-plus";
import {
deleteDatatypeLabel,
editDatatypeLabel,
addDatatypeLabel,
getDatatypeLabelList,
deleteBusiLabel,
editBusiLabel,
addBusiLabel,
getBusiLabelList
} from "@/api/metadataConfig/metadataConfig";
import useUserStore from '@/store/modules/user';
const userStore = useUserStore();
const dsSysList = userStore.dsSysList;
const queryForm = reactive({
ssysCd: "*",
mdlName: "*",
});
const configList1 = ref([]); //
const configList2 = ref([]); //
const loading = ref(false);
const open1 = ref(false); //
const open2 = ref(false); //
const title = ref("");
const clasFormRef1 = ref(null); // formRef
const clasFormRef2 = ref(null); // formRef
const form1 = reactive({
datatype: "",
ratio: null,
});
const form2 = reactive({
regexName: "",
regexPattern: "",
ratio: null,
});
const rules1 = {
datatype: [{ required: true, message: "请输入值类型", trigger: "blur" }],
ratio: [{ required: true, message: "请输入阈值", trigger: "blur" }],
};
const rules2 = {
regexName: [{ required: true, message: "请输入业务类型", trigger: "blur" }],
regexPattern: [{ required: true, message: "请输入正则表达式", trigger: "blur" }],
ratio: [{ required: true, message: "请输入阈值", trigger: "blur" }],
};
const selectedRows1 = ref([]);
const selectedRows2 = ref([]);
function handleSelectionChange1(val) {
selectedRows1.value = val;
}
function handleSelectionChange2(val) {
selectedRows2.value = val;
}
async function getList1() {
loading.value = true;
try {
const res = await getDatatypeLabelList(queryForm);
configList1.value = res.data || [];
} catch (error) {
ElMessage.error("获取值类型列表失败");
} finally {
loading.value = false;
}
}
async function getList2() {
loading.value = true;
try {
const res = await getBusiLabelList(queryForm);
configList2.value = res.data || [];
} catch (error) {
ElMessage.error("获取业务类型列表失败");
} finally {
loading.value = false;
}
}
function resetQuery() {
queryForm.ssysCd = "*";
queryForm.mdlName = "*";
getList1();
getList2();
}
function handleSearch() {
getList1();
getList2();
}
// ===== =====
function openAddDialog1() {
title.value = "新增值类型参数";
Object.assign(form1, { datatype: "", ratio: null });
open1.value = true;
}
function openEditDialog1(row) {
if (!row) {
ElMessage.warning("请选择一条记录进行编辑");
return;
}
title.value = "编辑值类型参数";
Object.assign(form1, row);
open1.value = true;
}
function submitForm1() {
clasFormRef1.value.validate(async (valid) => {
if (!valid) return;
const submitData = { ...form1,ssysCd:queryForm.ssysCd,mdlName:queryForm.mdlName };
try {
if (title.value.includes("新增")) {
await addDatatypeLabel(submitData);
ElMessage.success("新增成功");
} else {
await editDatatypeLabel(submitData);
ElMessage.success("编辑成功");
}
open1.value = false;
getList1();
} catch (error) {
ElMessage.error("操作失败,请重试");
}
});
}
function deleteSelected1() {
if (selectedRows1.value.length === 0) {
ElMessage.warning("请至少选择一条记录删除");
return;
}
ElMessageBox.confirm(
`确定删除选中的 ${selectedRows1.value.length} 条值类型参数吗?`,
"提示",
{ type: "warning" }
).then(async () => {
try {
for (const row of selectedRows1.value) {
await deleteDatatypeLabel(row.clasOnum);
}
ElMessage.success("删除成功");
getList1();
} catch {
ElMessage.error("删除失败,请重试");
}
});
}
function handleClose1(done) {
clasFormRef1.value.resetFields();
done();
}
// ===== =====
function openAddDialog2() {
title.value = "新增业务类型参数";
Object.assign(form2, {
regexName: "",
regexPattern: "",
ratio: null,
});
open2.value = true;
}
function openEditDialog2(row) {
if (!row) {
ElMessage.warning("请选择一条记录进行编辑");
return;
}
title.value = "编辑业务类型参数";
Object.assign(form2, row);
open2.value = true;
}
function submitForm2() {
clasFormRef2.value.validate(async (valid) => {
if (!valid) return;
const submitData = { ...form2,ssysCd:queryForm.ssysCd,mdlName:queryForm.mdlName};
try {
if (title.value.includes("新增")) {
await addBusiLabel(submitData);
ElMessage.success("新增成功");
} else {
await editBusiLabel(submitData);
ElMessage.success("编辑成功");
}
open2.value = false;
getList2();
} catch {
ElMessage.error("操作失败,请重试");
}
});
}
function deleteSelected2() {
if (selectedRows2.value.length === 0) {
ElMessage.warning("请至少选择一条记录删除");
return;
}
ElMessageBox.confirm(
`确定删除选中的 ${selectedRows2.value.length} 条业务类型参数吗?`,
"提示",
{ type: "warning" }
).then(async () => {
try {
for (const row of selectedRows2.value) {
await deleteBusiLabel(row.onum);
}
ElMessage.success("删除成功");
getList2();
} catch {
ElMessage.error("删除失败,请重试");
}
});
}
function handleClose2(done) {
clasFormRef2.value.resetFields();
done();
}
onMounted(() => {
getList1();
getList2();
});
</script>
Loading…
Cancel
Save