diff --git a/vue-fastapi-backend/module_admin/controller/metadata_config_controller.py b/vue-fastapi-backend/module_admin/controller/metadata_config_controller.py
index 8198c75..c1f5b45 100644
--- a/vue-fastapi-backend/module_admin/controller/metadata_config_controller.py
+++ b/vue-fastapi-backend/module_admin/controller/metadata_config_controller.py
@@ -2,7 +2,19 @@ from datetime import datetime
from fastapi import APIRouter, Depends, Request, Form
from pydantic_validation_decorator import ValidateFields
from sqlalchemy.ext.asyncio import AsyncSession
-from module_admin.entity.vo.metadata_config_vo import MetadataClasModel, MetadataClasPageQueryModel,MetadataSecModel,MetadataSecPageQueryModel
+from module_admin.entity.vo.metadata_config_vo import (
+ MetadataClasModel,
+ MetadataClasPageQueryModel,
+ MetadataSecModel,
+ MetadataSecPageQueryModel,
+ SecuBizConfigModel,
+ SecuBizConfigPageQueryModel,
+ SecuBizConfigQueryModel,
+ SecuBizPermiConfigModel,
+ SecuBizPermiConfigBatchModel,
+ SecuBizPermiConfigPageQueryModel,
+ SecuBizPermiConfigQueryModel
+)
from module_admin.service.metadata_config_service import MetadataConfigService
from config.get_db import get_db
from utils.response_util import ResponseUtil
@@ -142,4 +154,104 @@ async def get_metadata_sec_detail(
):
result = await MetadataConfigService.get_metadata_sec_detail_services(query_db, sec_id)
logger.info(f"获取数据安全配置 onum={sec_id} 详情成功")
- return ResponseUtil.success(data=result)
\ No newline at end of file
+ return ResponseUtil.success(data=result)
+
+# ---------- t_secu_biz_config 接口(改造后) ----------
+
+@metadataConfigController.get("/bizConfig/list", response_model=PageResponseModel)
+async def get_biz_config_list(
+ request: Request,
+ query: SecuBizConfigQueryModel = Depends(SecuBizConfigPageQueryModel.as_query),
+ db: AsyncSession = Depends(get_db),
+):
+ result = await MetadataConfigService.get_biz_config_list_services(db, query, is_page=True)
+ return ResponseUtil.success(model_content=result)
+@metadataConfigController.get("/bizConfig/listall")
+async def get_biz_config_list_all(
+ request: Request,
+ query: SecuBizConfigQueryModel = Depends(SecuBizConfigPageQueryModel.as_query),
+ db: AsyncSession = Depends(get_db),
+):
+ 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", "securityLevel", "applyType"])
+async def add_biz_config(
+ item: SecuBizConfigModel,
+ db: AsyncSession = Depends(get_db),
+ current_user: CurrentUserModel = Depends(LoginService.get_current_user),
+):
+ item.create_by = current_user.user.user_name
+ item.create_time = datetime.now()
+ result = await MetadataConfigService.add_biz_config_services(db, item)
+ return ResponseUtil.success(msg=result.message)
+
+
+@metadataConfigController.post("/bizConfig/edit")
+@ValidateFields(["onum"])
+async def edit_biz_config(
+ item: SecuBizConfigModel,
+ 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()
+ result = await MetadataConfigService.edit_biz_config_services(db, item)
+ return ResponseUtil.success(msg=result.message)
+
+
+@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")
+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)
+
+
+# ---------- t_secu_biz_permi_config 接口 ----------
+
+@metadataConfigController.get("/bizPermiConfig/list", response_model=PageResponseModel)
+async def get_biz_permi_config_list(
+ request: Request,
+ query: SecuBizConfigModel = Depends(SecuBizPermiConfigPageQueryModel.as_query),
+ query_db: AsyncSession = Depends(get_db),
+):
+ 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")
+async def add_biz_permi_config(
+ item: SecuBizPermiConfigBatchModel,
+ db: AsyncSession = Depends(get_db),
+ 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)):
+ item.update_by = current_user.user.user_name
+ item.update_time = datetime.now()
+
+ result = await MetadataConfigService.edit_biz_permi_config_services(db, item)
+ return ResponseUtil.success(msg=result.message)
+
+
+@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")
+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)
\ No newline at end of file
diff --git a/vue-fastapi-backend/module_admin/dao/metadata_config_dao.py b/vue-fastapi-backend/module_admin/dao/metadata_config_dao.py
index 282f5b0..27463be 100644
--- a/vue-fastapi-backend/module_admin/dao/metadata_config_dao.py
+++ b/vue-fastapi-backend/module_admin/dao/metadata_config_dao.py
@@ -1,9 +1,12 @@
from datetime import datetime, time
-from sqlalchemy import delete, select, update
+from sqlalchemy import delete, select, update,and_
from sqlalchemy.ext.asyncio import AsyncSession
from module_admin.entity.do.meta_do import MetadataClas # ORM 类
-from module_admin.entity.do.metadata_config_do import MetadataSec # ORM 类
-
+from module_admin.entity.do.metadata_config_do import MetadataSec,SecuBizConfig,SecuBizPermiConfig # ORM 类
+from typing import List
+from sqlalchemy.orm import joinedload
+from sqlalchemy.sql import true
+from utils.page_util import PageUtil
class MetadataConfigDao:
"""
@@ -49,7 +52,6 @@ class MetadataConfigDao:
if query_object.begin_time and query_object.end_time else True,
).order_by(MetadataClas.clas_onum).distinct()
- from utils.page_util import PageUtil
return await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
@classmethod
@@ -113,4 +115,130 @@ class MetadataConfigDao:
@classmethod
async def delete_metadata_sec_dao(cls, db: AsyncSession, onum_list: list[str]):
- await db.execute(delete(MetadataSec).where(MetadataSec.onum.in_(onum_list)))
\ No newline at end of file
+ await db.execute(delete(MetadataSec).where(MetadataSec.onum.in_(onum_list)))
+ # ------------- t_secu_biz_config 相关方法 --------------
+
+ @classmethod
+ async def get_biz_config_detail_by_id(cls, db: AsyncSession, onum: int):
+ result = await db.execute(select(SecuBizConfig).where(SecuBizConfig.onum == onum))
+ return result.scalars().first()
+
+ @classmethod
+ async def get_biz_config_list(cls, db: AsyncSession, query_object, is_page: bool = False):
+ query = select(SecuBizConfig).where(
+ SecuBizConfig.risk_lvl.like(f"%{query_object.risk_lvl}%") if query_object.risk_lvl else True,
+ SecuBizConfig.isStop == query_object.isStop if query_object.isStop is not None else True,
+ SecuBizConfig.create_time.between(
+ datetime.combine(datetime.strptime(query_object.begin_time, '%Y-%m-%d'), time.min),
+ datetime.combine(datetime.strptime(query_object.end_time, '%Y-%m-%d'), time.max),
+ ) if query_object.begin_time and query_object.end_time else True,
+ ).order_by(SecuBizConfig.create_time.desc())
+
+ from utils.page_util import PageUtil
+ return await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
+
+ @classmethod
+ async def add_biz_config(cls, db: AsyncSession, obj):
+ db_obj = SecuBizConfig(**obj.model_dump())
+ db.add(db_obj)
+ await db.flush()
+ return db_obj
+
+ @classmethod
+ async def edit_biz_config(cls, db: AsyncSession, onum: int, update_data: dict):
+ await db.execute(
+ update(SecuBizConfig).where(SecuBizConfig.onum == onum).values(**update_data)
+ )
+
+ @classmethod
+ async def delete_biz_config(cls, db: AsyncSession, onum_list: list[int]):
+ await db.execute(delete(SecuBizConfig).where(SecuBizConfig.onum.in_(onum_list)))
+ @classmethod
+ async def add_biz_permi_config_batch(cls, db: AsyncSession, records: List[SecuBizPermiConfig]):
+ orm_objs = []
+ for rec in records:
+ orm_obj = SecuBizPermiConfig(
+ biz_onum=rec.biz_onum,
+ obj_type=rec.obj_type,
+ obj_value=rec.obj_value,
+ obj_name=rec.obj_name,
+ isStop=rec.isStop,
+ create_by=rec.create_by,
+ create_time=rec.create_time,
+ update_by=rec.update_by,
+ update_time=rec.update_time,
+ )
+ orm_objs.append(orm_obj)
+ db.add_all(orm_objs)
+ # ------------- t_secu_biz_permi_config 相关方法 --------------
+
+ @classmethod
+ async def get_biz_permi_config_detail_by_id(cls, db: AsyncSession, onum: int):
+ result = await db.execute(select(SecuBizPermiConfig).where(SecuBizPermiConfig.onum == onum))
+ return result.scalars().first()
+
+ # @classmethod
+ # async def get_biz_permi_config_list(cls, db: AsyncSession, query_object, is_page: bool = False):
+ # query = select(SecuBizPermiConfig).where(
+ # SecuBizPermiConfig.obj_value.like(f"%{query_object.obj_value}%") if query_object.obj_value else True,
+ # SecuBizPermiConfig.obj_type == query_object.obj_type if query_object.obj_type else True,
+ # SecuBizPermiConfig.isStop == query_object.isStop if query_object.isStop is not None else True,
+ # SecuBizPermiConfig.create_time.between(
+ # datetime.combine(datetime.strptime(query_object.begin_time, '%Y-%m-%d'), time.min),
+ # datetime.combine(datetime.strptime(query_object.end_time, '%Y-%m-%d'), time.max),
+ # ) if query_object.begin_time and query_object.end_time else True,
+ # ).order_by(SecuBizPermiConfig.create_time.desc())
+
+ # from utils.page_util import PageUtil
+ # return await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
+ @classmethod
+ async def get_biz_permi_config_list(cls, db: AsyncSession, query_object, is_page: bool = False):
+ # 构建基础查询
+ query = (
+ select(
+ SecuBizPermiConfig.onum,
+ SecuBizPermiConfig.biz_onum,
+ SecuBizPermiConfig.obj_type,
+ SecuBizPermiConfig.obj_value,
+ SecuBizPermiConfig.obj_name,
+ SecuBizPermiConfig.isStop,
+ SecuBizPermiConfig.create_by,
+ SecuBizPermiConfig.create_time,
+ SecuBizPermiConfig.update_by,
+ SecuBizPermiConfig.update_time,
+ SecuBizConfig.biz_name,
+ MetadataSec.sec_level_summary
+ )
+ .join(SecuBizConfig, SecuBizPermiConfig.biz_onum == SecuBizConfig.onum, isouter=True)
+ .join(MetadataSec, SecuBizConfig.risk_lvl == MetadataSec.onum, isouter=True)
+ .where(
+ SecuBizPermiConfig.obj_value.like(f"%{query_object.obj_value}%") if query_object.obj_value else true(),
+ SecuBizPermiConfig.obj_type == query_object.obj_type if query_object.obj_type else true(),
+ SecuBizPermiConfig.isStop == query_object.isStop if query_object.isStop is not None else true(),
+ SecuBizPermiConfig.create_time.between(
+ datetime.combine(datetime.strptime(query_object.begin_time, '%Y-%m-%d'), time.min),
+ datetime.combine(datetime.strptime(query_object.end_time, '%Y-%m-%d'), time.max),
+ ) if query_object.begin_time and query_object.end_time else true()
+ )
+ .order_by(SecuBizPermiConfig.create_time.desc())
+ )
+
+ return await PageUtil.paginate(
+ db, query, query_object.page_num, query_object.page_size, is_page
+ )
+ @classmethod
+ async def add_biz_permi_config(cls, db: AsyncSession, obj):
+ db_obj = SecuBizPermiConfig(**obj.model_dump())
+ db.add(db_obj)
+ await db.flush()
+ return db_obj
+
+ @classmethod
+ async def edit_biz_permi_config(cls, db: AsyncSession, onum: int, update_data: dict):
+ await db.execute(
+ update(SecuBizPermiConfig).where(SecuBizPermiConfig.onum == onum).values(**update_data)
+ )
+
+ @classmethod
+ async def delete_biz_permi_config(cls, db: AsyncSession, onum_list: list[int]):
+ await db.execute(delete(SecuBizPermiConfig).where(SecuBizPermiConfig.onum.in_(onum_list)))
\ No newline at end of file
diff --git a/vue-fastapi-backend/module_admin/entity/do/metadata_config_do.py b/vue-fastapi-backend/module_admin/entity/do/metadata_config_do.py
index 23c6a56..162f306 100644
--- a/vue-fastapi-backend/module_admin/entity/do/metadata_config_do.py
+++ b/vue-fastapi-backend/module_admin/entity/do/metadata_config_do.py
@@ -1,5 +1,5 @@
from datetime import datetime
-from sqlalchemy import Column, String, Integer, DateTime, TIMESTAMP, func
+from sqlalchemy import Column, String, Integer, DateTime, TIMESTAMP,Boolean, func
from config.database import Base
@@ -30,4 +30,31 @@ class MetadataSec(Base):
upd_time = Column(TIMESTAMP, default=func.now(), onupdate=func.now(), nullable=True, comment='更新时间')
sec_level_name = Column(String(50), default=None, comment='等级名称')
sec_level_desc = Column(String(200), default=None, comment='等级说明')
- sec_level_summary = Column(String(200), comment='等级简介')
\ No newline at end of file
+ sec_level_summary = Column(String(200), comment='等级简介')
+
+
+class SecuBizPermiConfig(Base):
+ __tablename__ = "t_secu_biz_permi_config"
+
+ onum = Column(Integer, primary_key=True, autoincrement=True, comment="序号")
+ biz_onum = Column(Integer, nullable=True, comment="业务域的序号,可关联业务域定义表")
+ obj_type = Column(String(1), nullable=True, comment="对象类型(0:角色 1:用户)")
+ obj_value = Column(String(50), nullable=True, comment="角色值")
+ obj_name = Column(String(50), nullable=True, comment="角色值")
+ isStop = Column(Boolean, nullable=True, comment="是否停用(0:运行 1:停用)")
+ create_by = Column(String(20), nullable=True, comment="创建者")
+ create_time = Column(DateTime, nullable=True, comment="创建时间")
+ update_by = Column(String(20), nullable=True, comment="更新者")
+ update_time = Column(DateTime, nullable=True, comment="更新时间")
+
+class SecuBizConfig(Base):
+ __tablename__ = "t_secu_biz_config"
+
+ onum = Column(Integer, primary_key=True, autoincrement=True, comment="序号")
+ biz_name = Column(String(255), nullable=True, comment="业务域名称") # 这里你给的是int,实际是否应该varchar?
+ risk_lvl = Column(String(50), nullable=True, comment="可关联安全等级序号")
+ isStop = Column(Boolean, nullable=True, comment="是否停用(0:运行 1:停用)")
+ create_by = Column(String(20), nullable=True, comment="创建者")
+ create_time = Column(DateTime, nullable=True, comment="创建时间")
+ update_by = Column(String(20), nullable=True, comment="更新者")
+ update_time = Column(DateTime, nullable=True, comment="更新时间")
\ No newline at end of file
diff --git a/vue-fastapi-backend/module_admin/entity/vo/metadata_config_vo.py b/vue-fastapi-backend/module_admin/entity/vo/metadata_config_vo.py
index fa17988..6fd018a 100644
--- a/vue-fastapi-backend/module_admin/entity/vo/metadata_config_vo.py
+++ b/vue-fastapi-backend/module_admin/entity/vo/metadata_config_vo.py
@@ -2,7 +2,7 @@ from datetime import datetime
from pydantic import BaseModel, ConfigDict, Field
from pydantic.alias_generators import to_camel
from pydantic_validation_decorator import NotBlank, Size
-from typing import Literal, Optional
+from typing import Literal, Optional,List
from module_admin.annotation.pydantic_annotation import as_query
@@ -103,4 +103,115 @@ class MetadataSecPageQueryModel(MetadataSecQueryModel):
"""
page_num: int = Field(default=1, description='当前页码')
page_size: int = Field(default=10, description='每页记录数')
-
\ No newline at end of file
+
+
+# ----------- t_secu_biz_config 表对应模型 --------------
+
+class SecuBizConfigModel(BaseModel):
+ """
+ 业务域配置对应 Pydantic 模型
+ """
+ model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
+
+ onum: Optional[int] = Field(default=None, description='序号')
+ biz_name: Optional[str] = Field(default=None, description='业务域名称')
+ risk_lvl: Optional[str] = Field(default=None, description='可关联安全等级序号')
+ isStop: Optional[Literal[0, 1]] = Field(default=None, description='是否停用(0:运行 1:停用)')
+ create_by: Optional[str] = Field(default=None, description='创建者')
+ create_time: Optional[datetime] = Field(default=None, description='创建时间')
+ update_by: Optional[str] = Field(default=None, description='更新者')
+ update_time: Optional[datetime] = Field(default=None, description='更新时间')
+
+ @NotBlank(field_name='risk_lvl', message='安全等级不能为空')
+ @Size(field_name='risk_lvl', max_length=50, message='安全等级长度不能超过50')
+ def get_risk_lvl(self):
+ return self.risk_lvl
+
+ def validate_fields(self):
+ self.get_risk_lvl()
+
+class DeleteSecuBizConfigModel(BaseModel):
+ """
+ 删除业务域配置模型
+ """
+ model_config = ConfigDict(alias_generator=to_camel)
+ onums: str = Field(..., description='需要删除的唯一编号(多个用逗号分隔)')
+
+class SecuBizConfigQueryModel(SecuBizConfigModel):
+ """
+ 业务域配置不分页查询模型
+ """
+ begin_time: Optional[str] = Field(default=None, description='开始时间')
+ end_time: Optional[str] = Field(default=None, description='结束时间')
+
+@as_query
+class SecuBizConfigPageQueryModel(SecuBizConfigQueryModel):
+ """
+ 业务域配置分页查询模型
+ """
+ page_num: int = Field(default=1, description='当前页码')
+ page_size: int = Field(default=10, description='每页记录数')
+
+
+# ----------- t_secu_biz_permi_config 表对应模型 --------------
+
+class SecuBizPermiConfigModel(BaseModel):
+ """
+ 业务域权限配置对应 Pydantic 模型
+ """
+ model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
+
+ onum: Optional[int] = Field(default=None, description='序号')
+ biz_onum: Optional[int] = Field(default=None, description='业务域的序号,可关联业务域定义表')
+ obj_type: Optional[str] = Field(default=None, description='对象类型(0:角色 1:用户)')
+ obj_value: Optional[str] = Field(default=None, description='角色值')
+ obj_name: Optional[str] = Field(default=None, description='角色名称')
+ isStop: Optional[bool] = Field(default=None, description='是否停用(false:运行 true:停用)')
+ create_by: Optional[str] = Field(default=None, description='创建者')
+ create_time: Optional[datetime] = Field(default=None, description='创建时间')
+ update_by: Optional[str] = Field(default=None, description='更新者')
+ update_time: Optional[datetime] = Field(default=None, description='更新时间')
+class SecuBizPermiConfigBatchModel(BaseModel):
+ model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
+
+ biz_onum_list: List[int] = Field(..., description='业务域编号列表')
+ obj_type: str = Field(..., description='对象类型(0:角色 1:用户)')
+ obj_value: str = Field(..., description='角色值')
+ obj_name: str = Field(..., description='角色名称')
+ isStop: Optional[bool] = Field(default=False, description='是否停用(false:运行 true:停用)')
+
+ @NotBlank(field_name='obj_value', message='角色值不能为空')
+ @Size(field_name='obj_value', max_length=50, message='角色值长度不能超过50个字符')
+ def get_obj_value(self):
+ return self.obj_value
+
+ @NotBlank(field_name='obj_name', message='角色名称不能为空')
+ @Size(field_name='obj_name', max_length=50, message='角色名称长度不能超过50个字符')
+ def get_obj_name(self):
+ return self.obj_name
+
+ def validate_fields(self):
+ self.get_obj_value()
+ self.get_obj_name()
+
+class DeleteSecuBizPermiConfigModel(BaseModel):
+ """
+ 删除业务域权限配置模型
+ """
+ model_config = ConfigDict(alias_generator=to_camel)
+ onums: str = Field(..., description='需要删除的唯一编号(多个用逗号分隔)')
+
+class SecuBizPermiConfigQueryModel(SecuBizPermiConfigModel):
+ """
+ 业务域权限配置不分页查询模型
+ """
+ begin_time: Optional[str] = Field(default=None, description='开始时间')
+ end_time: Optional[str] = Field(default=None, description='结束时间')
+
+@as_query
+class SecuBizPermiConfigPageQueryModel(SecuBizPermiConfigQueryModel):
+ """
+ 业务域权限配置分页查询模型
+ """
+ page_num: int = Field(default=1, description='当前页码')
+ page_size: int = Field(default=10, description='每页记录数')
\ No newline at end of file
diff --git a/vue-fastapi-backend/module_admin/service/metadata_config_service.py b/vue-fastapi-backend/module_admin/service/metadata_config_service.py
index 62a0ec4..b5911a4 100644
--- a/vue-fastapi-backend/module_admin/service/metadata_config_service.py
+++ b/vue-fastapi-backend/module_admin/service/metadata_config_service.py
@@ -1,10 +1,12 @@
from sqlalchemy.ext.asyncio import AsyncSession
from module_admin.dao.metadata_config_dao import MetadataConfigDao
from module_admin.entity.vo.common_vo import CrudResponseModel
-from module_admin.entity.vo.metadata_config_vo import MetadataClasModel, MetadataClasPageQueryModel,MetadataSecModel,MetadataSecPageQueryModel
+from module_admin.entity.vo.metadata_config_vo import MetadataClasModel, SecuBizPermiConfigBatchModel,MetadataClasPageQueryModel,MetadataSecModel,MetadataSecPageQueryModel,SecuBizConfigModel ,SecuBizConfigQueryModel,SecuBizPermiConfigModel, SecuBizPermiConfigQueryModel
from utils.common_util import CamelCaseUtil
from exceptions.exception import ServiceException
import uuid
+from typing import List
+from datetime import datetime
class MetadataConfigService:
"""
@@ -159,4 +161,139 @@ class MetadataConfigService:
if result:
return MetadataSecModel(**CamelCaseUtil.transform_result(result))
else:
- return MetadataSecModel(**dict())
\ No newline at end of file
+ return MetadataSecModel(**dict())
+ # ----------- t_secu_biz_config 服务方法 -----------
+
+ @classmethod
+ async def get_biz_config_list_services(
+ cls, db: AsyncSession, query_object: SecuBizConfigQueryModel, is_page: bool = False
+ ):
+ result = await MetadataConfigDao.get_biz_config_list(db, query_object, is_page)
+ return result
+
+ @classmethod
+ async def add_biz_config_services(cls, db: AsyncSession, page_object: SecuBizConfigModel):
+ try:
+ await MetadataConfigDao.add_biz_config(db, page_object)
+ await db.commit()
+ return CrudResponseModel(is_success=True, message="新增成功")
+ except Exception as e:
+ await db.rollback()
+ raise e
+
+ @classmethod
+ async def edit_biz_config_services(cls, db: AsyncSession, page_object: SecuBizConfigModel):
+ edit_data = page_object.model_dump(exclude_unset=True)
+ info = await cls.get_biz_config_detail_services(db, page_object.onum)
+ if info.onum:
+ try:
+ await MetadataConfigDao.edit_biz_config(db, page_object.onum, edit_data)
+ await db.commit()
+ return CrudResponseModel(is_success=True, message="更新成功")
+ except Exception as e:
+ await db.rollback()
+ raise e
+ else:
+ raise ServiceException(message="业务配置不存在")
+
+ @classmethod
+ async def delete_biz_config_services(cls, db: AsyncSession, onum_list: str):
+ if not onum_list:
+ raise ServiceException(message="传入的编号为空")
+
+ id_list = [onum.strip() for onum in onum_list.split(",") if onum.strip()]
+ if not id_list:
+ raise ServiceException(message="无效的编号列表")
+
+ try:
+ await MetadataConfigDao.delete_biz_config(db, id_list)
+ await db.commit()
+ return CrudResponseModel(is_success=True, message="删除成功")
+ except Exception as e:
+ await db.rollback()
+ raise e
+
+ @classmethod
+ async def get_biz_config_detail_services(cls, db: AsyncSession, onum: str):
+ result = await MetadataConfigDao.get_biz_config_detail_by_id(db, onum)
+ if result:
+ return SecuBizConfigModel(**CamelCaseUtil.transform_result(result))
+ else:
+ return SecuBizConfigModel(**dict())
+
+
+ # ----------- t_secu_biz_permi_config 服务方法 -----------
+
+ @classmethod
+ async def get_biz_permi_config_list_services(
+ cls, db: AsyncSession, query_object: SecuBizPermiConfigQueryModel, is_page: bool = False
+ ):
+ result = await MetadataConfigDao.get_biz_permi_config_list(db, query_object, is_page)
+ return result
+ @classmethod
+ async def add_biz_permi_config_services(
+ cls,
+ db: AsyncSession,
+ batch_model: SecuBizPermiConfigBatchModel,
+ create_by: str,
+ create_time: datetime
+ ) -> CrudResponseModel:
+ try:
+ records: List[SecuBizPermiConfigModel] = []
+ for biz_onum in batch_model.biz_onum_list:
+ record = SecuBizPermiConfigModel()
+ record.biz_onum = biz_onum
+ record.obj_type = batch_model.obj_type
+ record.obj_value = batch_model.obj_value
+ record.obj_name = batch_model.obj_name
+ record.isStop = batch_model.isStop
+ record.create_by = create_by
+ record.create_time = create_time
+ records.append(record)
+
+ await MetadataConfigDao.add_biz_permi_config_batch(db, records)
+ await db.commit()
+ return CrudResponseModel(is_success=True, message="新增成功")
+ except Exception as e:
+ await db.rollback()
+ raise e
+
+ @classmethod
+ async def edit_biz_permi_config_services(cls, db: AsyncSession, page_object: SecuBizPermiConfigModel):
+ edit_data = page_object.model_dump(exclude_unset=True)
+ info = await cls.get_biz_permi_config_detail_services(db, page_object.onum)
+ if info.onum:
+ try:
+ await MetadataConfigDao.edit_biz_permi_config(db, page_object.onum, edit_data)
+ await db.commit()
+ return CrudResponseModel(is_success=True, message="更新成功")
+ except Exception as e:
+ await db.rollback()
+ raise e
+ else:
+ raise ServiceException(message="权限配置不存在")
+
+ @classmethod
+ async def delete_biz_permi_config_services(cls, db: AsyncSession, onum_list: str):
+ if not onum_list:
+ raise ServiceException(message="传入的编号为空")
+
+ id_list = [onum.strip() for onum in onum_list.split(",") if onum.strip()]
+ if not id_list:
+ raise ServiceException(message="无效的编号列表")
+
+ try:
+ await MetadataConfigDao.delete_biz_permi_config(db, id_list)
+ await db.commit()
+ return CrudResponseModel(is_success=True, message="删除成功")
+ except Exception as e:
+ await db.rollback()
+ raise e
+
+ @classmethod
+ async def get_biz_permi_config_detail_services(cls, db: AsyncSession, onum: str):
+ result = await MetadataConfigDao.get_biz_permi_config_detail_by_id(db, onum)
+ if result:
+ return SecuBizPermiConfigModel(**CamelCaseUtil.transform_result(result))
+ else:
+ return SecuBizPermiConfigModel(**dict())
\ No newline at end of file
diff --git a/vue-fastapi-frontend/src/api/metadataConfig/metadataConfig.js b/vue-fastapi-frontend/src/api/metadataConfig/metadataConfig.js
index 0491c4a..77f2209 100644
--- a/vue-fastapi-frontend/src/api/metadataConfig/metadataConfig.js
+++ b/vue-fastapi-frontend/src/api/metadataConfig/metadataConfig.js
@@ -85,4 +85,98 @@ export function delMetadataSec(secIds) {
url: '/default-api/metadataConfig/sec/' + secIds,
method: 'delete'
})
-}
\ No newline at end of file
+}
+// 查询业务配置列表,带分页
+export function listBizConfigAll(query) {
+ return request({
+ url: '/default-api/metadataConfig/bizConfig/listall',
+ method: 'get',
+ data: query
+ })
+}
+export function listBizConfig(query) {
+ return request({
+ url: '/default-api/metadataConfig/bizConfig/list',
+ method: 'get',
+ data: query
+ })
+}
+// 查询业务配置详情
+export function getBizConfig(onum) {
+ return request({
+ url: '/default-api/metadataConfig/bizConfig/detail',
+ method: 'get',
+ params: { onum }
+ })
+}
+
+// 新增业务配置
+export function addBizConfig(data) {
+ return request({
+ url: '/default-api/metadataConfig/bizConfig/add',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改业务配置
+export function updateBizConfig(data) {
+ return request({
+ url: '/default-api/metadataConfig/bizConfig/edit',
+ method: 'post',
+ data: data
+ })
+}
+
+// 删除业务配置(支持批量,逗号分隔)
+export function delBizConfig(onumStr) {
+ return request({
+ url: '/default-api/metadataConfig/bizConfig/delete',
+ method: 'delete',
+ params: { onums: onumStr }
+ })
+}
+// 查询权限配置列表,带分页
+export function listBizPermiConfig(query) {
+ return request({
+ url: '/default-api/metadataConfig/bizPermiConfig/list',
+ method: 'get',
+ data: query
+ })
+}
+
+// 查询权限配置详情
+export function getBizPermiConfig(onum) {
+ return request({
+ url: '/default-api/metadataConfig/bizPermiConfig/detail',
+ method: 'get',
+ params: { onum }
+ })
+}
+
+// 新增权限配置
+export function addBizPermiConfig(data) {
+ return request({
+ url: '/default-api/metadataConfig/bizPermiConfig/add',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改权限配置
+export function updateBizPermiConfig(data) {
+ return request({
+ url: '/default-api/metadataConfig/bizPermiConfig/edit',
+ method: 'post',
+ data: data
+ })
+}
+
+// 删除权限配置(支持批量,逗号分隔)
+export function delBizPermiConfig(onumStr) {
+ return request({
+ url: '/default-api/metadataConfig/bizPermiConfig/delete',
+ method: 'delete',
+ params: { onums: onumStr }
+ })
+}
diff --git a/vue-fastapi-frontend/src/views/metadataConfig/bizConfig/index.vue b/vue-fastapi-frontend/src/views/metadataConfig/bizConfig/index.vue
new file mode 100644
index 0000000..5e51b19
--- /dev/null
+++ b/vue-fastapi-frontend/src/views/metadataConfig/bizConfig/index.vue
@@ -0,0 +1,272 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+
+ 新增
+
+
+ 修改
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+ {{ row.isStop === 0 ? '运行' : '停用' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+ 保存
+
+
+
+
+
+
+
+
diff --git a/vue-fastapi-frontend/src/views/metadataConfig/bizPermiConfig/index.vue b/vue-fastapi-frontend/src/views/metadataConfig/bizPermiConfig/index.vue
new file mode 100644
index 0000000..4fffb9f
--- /dev/null
+++ b/vue-fastapi-frontend/src/views/metadataConfig/bizPermiConfig/index.vue
@@ -0,0 +1,392 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+
+ 新增
+
+
+ 修改
+
+
+ 删除
+
+
+
+
+
+
+
+
+ {{ row.objType === '0' || row.objType === 0 ? '角色' : '用户' }}
+
+
+
+
+
+ {{ row.isStop ? '运行' : '停用' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+ 保存
+
+
+
+
+
+
+
+