Browse Source

Merge remote-tracking branch 'origin/master'

master
xueyinfei 2 days ago
parent
commit
e437ec550f
  1. 114
      vue-fastapi-backend/module_admin/controller/metadata_config_controller.py
  2. 6
      vue-fastapi-backend/module_admin/dao/datastd_dao.py
  3. 137
      vue-fastapi-backend/module_admin/dao/metadata_config_dao.py
  4. 29
      vue-fastapi-backend/module_admin/entity/do/metadata_config_do.py
  5. 109
      vue-fastapi-backend/module_admin/entity/vo/metadata_config_vo.py
  6. 139
      vue-fastapi-backend/module_admin/service/metadata_config_service.py
  7. 94
      vue-fastapi-frontend/src/api/metadataConfig/metadataConfig.js
  8. 8
      vue-fastapi-frontend/src/views/datastd/stdcode/index.vue
  9. 8
      vue-fastapi-frontend/src/views/datastd/stddict/AddEditForm.vue
  10. 15
      vue-fastapi-frontend/src/views/datastd/stddict/index.vue
  11. 272
      vue-fastapi-frontend/src/views/metadataConfig/bizConfig/index.vue
  12. 392
      vue-fastapi-frontend/src/views/metadataConfig/bizPermiConfig/index.vue

114
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 fastapi import APIRouter, Depends, Request, Form
from pydantic_validation_decorator import ValidateFields from pydantic_validation_decorator import ValidateFields
from sqlalchemy.ext.asyncio import AsyncSession 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 module_admin.service.metadata_config_service import MetadataConfigService
from config.get_db import get_db from config.get_db import get_db
from utils.response_util import ResponseUtil from utils.response_util import ResponseUtil
@ -143,3 +155,103 @@ async def get_metadata_sec_detail(
result = await MetadataConfigService.get_metadata_sec_detail_services(query_db, sec_id) 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) 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)

6
vue-fastapi-backend/module_admin/dao/datastd_dao.py

@ -337,10 +337,8 @@ class DataStdDao:
DataStdMain.data_std_busi_ownership_prsn.label("data_std_busi_ownership_prsn") DataStdMain.data_std_busi_ownership_prsn.label("data_std_busi_ownership_prsn")
) )
.outerjoin( # 使用left outer join确保即使没有关联code也能返回主表数据 .outerjoin(DataStdMain, DataStdDict.data_std_no == DataStdMain.data_std_no) # 正确方向的左连接
DataStdDict,
DataStdMain.data_std_no == DataStdDict.data_std_no
)
.where(*filters) .where(*filters)
.order_by(desc(DataStdDict.create_time)) # 按创建时间降序排序 .order_by(desc(DataStdDict.create_time)) # 按创建时间降序排序
) )

137
vue-fastapi-backend/module_admin/dao/metadata_config_dao.py

@ -1,9 +1,12 @@
from datetime import datetime, time 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 sqlalchemy.ext.asyncio import AsyncSession
from module_admin.entity.do.meta_do import MetadataClas # ORM 类 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: class MetadataConfigDao:
""" """
@ -49,7 +52,6 @@ class MetadataConfigDao:
if query_object.begin_time and query_object.end_time else True, if query_object.begin_time and query_object.end_time else True,
).order_by(MetadataClas.clas_onum).distinct() ).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) return await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
@classmethod @classmethod
@ -114,3 +116,130 @@ class MetadataConfigDao:
@classmethod @classmethod
async def delete_metadata_sec_dao(cls, db: AsyncSession, onum_list: list[str]): async def delete_metadata_sec_dao(cls, db: AsyncSession, onum_list: list[str]):
await db.execute(delete(MetadataSec).where(MetadataSec.onum.in_(onum_list))) 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_name.like(f"%{query_object.obj_name}%") if query_object.obj_name 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)))

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

@ -1,5 +1,5 @@
from datetime import datetime 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 from config.database import Base
@ -31,3 +31,30 @@ class MetadataSec(Base):
sec_level_name = Column(String(50), default=None, comment='等级名称') sec_level_name = Column(String(50), default=None, comment='等级名称')
sec_level_desc = Column(String(200), default=None, comment='等级说明') sec_level_desc = Column(String(200), default=None, comment='等级说明')
sec_level_summary = Column(String(200), comment='等级简介') 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="更新时间")

109
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 import BaseModel, ConfigDict, Field
from pydantic.alias_generators import to_camel from pydantic.alias_generators import to_camel
from pydantic_validation_decorator import NotBlank, Size 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 from module_admin.annotation.pydantic_annotation import as_query
@ -104,3 +104,110 @@ class MetadataSecPageQueryModel(MetadataSecQueryModel):
page_num: int = Field(default=1, description='当前页码') page_num: int = Field(default=1, description='当前页码')
page_size: int = Field(default=10, description='每页记录数') page_size: int = Field(default=10, description='每页记录数')
# ----------- 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: Optional[str] = Field(default=None, description='角色值')
obj_name: str = Field(..., description='角色名称')
isStop: Optional[bool] = Field(default=False, description='是否停用(false:运行 true:停用)')
@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_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='每页记录数')

139
vue-fastapi-backend/module_admin/service/metadata_config_service.py

@ -1,10 +1,12 @@
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from module_admin.dao.metadata_config_dao import MetadataConfigDao from module_admin.dao.metadata_config_dao import MetadataConfigDao
from module_admin.entity.vo.common_vo import CrudResponseModel 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 utils.common_util import CamelCaseUtil
from exceptions.exception import ServiceException from exceptions.exception import ServiceException
import uuid import uuid
from typing import List
from datetime import datetime
class MetadataConfigService: class MetadataConfigService:
""" """
@ -160,3 +162,138 @@ class MetadataConfigService:
return MetadataSecModel(**CamelCaseUtil.transform_result(result)) return MetadataSecModel(**CamelCaseUtil.transform_result(result))
else: else:
return MetadataSecModel(**dict()) 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())

94
vue-fastapi-frontend/src/api/metadataConfig/metadataConfig.js

@ -86,3 +86,97 @@ export function delMetadataSec(secIds) {
method: 'delete' method: 'delete'
}) })
} }
// 查询业务配置列表,带分页
export function listBizConfigAll(query) {
return request({
url: '/default-api/metadataConfig/bizConfig/listall',
method: 'get',
params: query
})
}
export function listBizConfig(query) {
return request({
url: '/default-api/metadataConfig/bizConfig/list',
method: 'get',
params: 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',
params: 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 }
})
}

8
vue-fastapi-frontend/src/views/datastd/stdcode/index.vue

@ -148,7 +148,7 @@
</el-table> </el-table>
<!-- 分页 --> <!-- 分页 -->
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="handlePagination" /> <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-col> </el-col>
</el-row> </el-row>
@ -214,11 +214,7 @@ const defaultProps = {
const dialogVisible2 = ref(false); const dialogVisible2 = ref(false);
const dialogTitle2 = ref('标准代码'); const dialogTitle2 = ref('标准代码');
const selectedRow = ref(null); // codeItem const selectedRow = ref(null); // codeItem
const handlePagination = (pageNum, pageSize) => {
queryParams.value.pageNum = pageNum;
queryParams.value.pageSize = pageSize;
handleQuery();
};
const getSrcSysName = (id) => { const getSrcSysName = (id) => {
const match = dbResourceOldList.value.find(item => item.id === id); const match = dbResourceOldList.value.find(item => item.id === id);
return match ? match.name : id; return match ? match.name : id;

8
vue-fastapi-frontend/src/views/datastd/stddict/AddEditForm.vue

@ -31,8 +31,8 @@
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="数据字典类型" prop="dictType"> <el-form-item label="数据字典类型" prop="dataDictType">
<el-select v-model="formData.dictType" placeholder="请选择数据字典类型"> <el-select v-model="formData.dataDictType" placeholder="请选择数据字典类型">
<el-option label="基础数据" value="0" /> <el-option label="基础数据" value="0" />
<el-option label="指标数据" value="1" /> <el-option label="指标数据" value="1" />
</el-select> </el-select>
@ -108,7 +108,7 @@ const props = defineProps({
// //
const formRules = ref({ const formRules = ref({
dataDictVest: [{ required: true, message: '请选择字典归属', trigger: 'blur' }], dataDictVest: [{ required: true, message: '请选择字典归属', trigger: 'blur' }],
dictType: [{ required: true, message: '请选择数据字典类型', trigger: 'blur' }], dataDictType: [{ required: true, message: '请选择数据字典类型', trigger: 'blur' }],
dataStdBusiOwnershipDept: [{ required: true, message: '请选择业务认责部门', trigger: 'blur' }], dataStdBusiOwnershipDept: [{ required: true, message: '请选择业务认责部门', trigger: 'blur' }],
dataStdItOwnershipDept: [{ required: true, message: '请选择技术认责部门', trigger: 'blur' }], dataStdItOwnershipDept: [{ required: true, message: '请选择技术认责部门', trigger: 'blur' }],
dataDictNo: [{ required: true, message: '请输入数据字典编号', trigger: 'blur' }], dataDictNo: [{ required: true, message: '请输入数据字典编号', trigger: 'blur' }],
@ -172,6 +172,8 @@ const handleSubmit = () => {
const apiCall = props.isEdit ? updateStdDict(formData.value) : addStdDict(formData.value); const apiCall = props.isEdit ? updateStdDict(formData.value) : addStdDict(formData.value);
apiCall apiCall
.then(() => { .then(() => {
proxy.$modal.msgSuccess("提交审批流程成功!");
emit('refresh'); emit('refresh');
handleClose(); handleClose();
}) })

15
vue-fastapi-frontend/src/views/datastd/stddict/index.vue

@ -105,7 +105,7 @@
</el-table-column> </el-table-column>
<el-table-column label="类型" align="center"> <el-table-column label="类型" align="center">
<template #default="{ row }"> <template #default="{ row }">
{{ row.dictType == 0 ? "基础数据" : "指标数据" }} {{ row.dataDictType == 0 ? "基础数据" : "指标数据" }}
</template> </template>
</el-table-column> </el-table-column>
<!-- <el-table-column label="来源系统" width="150" align="center" prop="sysName" /> --> <!-- <el-table-column label="来源系统" width="150" align="center" prop="sysName" /> -->
@ -212,7 +212,7 @@
:total="total" :total="total"
v-model:page="queryParams.pageNum" v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
@pagination="handlePagination" @pagination="getList"
/> />
</el-col> </el-col>
</el-row> </el-row>
@ -258,7 +258,7 @@ const { std_code_status, std_code_appr } = proxy.useDict(
const queryParams = ref({ const queryParams = ref({
dataDictNo: "", dataDictNo: "",
dataDictCnName: "", dataDictCnName: "",
dictType: "", dataDictType: "",
sysName: "", sysName: "",
classId: "dict", classId: "dict",
sysId: "", sysId: "",
@ -296,11 +296,6 @@ const handleStdClick = (code) => {
}); });
}; };
const handlePagination = (pageNum, pageSize) => {
queryParams.value.pageNum = pageNum;
queryParams.value.pageSize = pageSize;
handleQuery();
};
const transCodetoId = (dataStdNo) => { const transCodetoId = (dataStdNo) => {
const match = stdList.value.find(item => item.dataStdNo === dataStdNo); const match = stdList.value.find(item => item.dataStdNo === dataStdNo);
@ -346,7 +341,7 @@ const resetQuery = () => {
queryParams.value = { queryParams.value = {
dataDictNo: "", dataDictNo: "",
dataDictCnName: "", dataDictCnName: "",
dictType: "", dataDictType: "",
sysName: "", sysName: "",
sysId: undefined, sysId: undefined,
pageNum: 1, pageNum: 1,
@ -380,7 +375,7 @@ const handleAdd = () => {
dataDictVest: "company", dataDictVest: "company",
sysId: 10000, sysId: 10000,
sysName: "公司级", sysName: "公司级",
dictType: "", dataDictType: "",
dataDictNo: "", dataDictNo: "",
dataDictEngName: "", dataDictEngName: "",
dataDictCnName: "", dataDictCnName: "",

272
vue-fastapi-frontend/src/views/metadataConfig/bizConfig/index.vue

@ -0,0 +1,272 @@
<template>
<div class="app-container">
<el-row :gutter="10" class="mb8">
<el-form :inline="true" :model="queryForm" >
<el-form-item label="业务域名称">
<el-input v-model="queryForm.bizName" placeholder="请输入业务域名称" clearable />
</el-form-item>
<el-form-item label="风险等级">
<el-input v-model="queryForm.riskLvl" 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>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="openAddDialog">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="Edit"
:disabled="selectedRows.length !== 1"
@click="openEditDialog(selectedRows[0])"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="selectedRows.length === 0"
@click="deleteSelected"
>删除</el-button>
</el-col>
</el-row>
<el-table
v-loading="loading"
:data="bizList"
@selection-change="handleSelectionChange"
style="width: 100%"
border
stripe
>
<el-table-column type="selection" width="55" />
<el-table-column prop="bizName" label="业务域名称" />
<el-table-column prop="riskLvl" label="风险等级" />
<el-table-column prop="isStop" label="是否停用">
<template #default="{ row }">
<el-tag :type="row.isStop === 0 ? 'success' : 'info'">
{{ row.isStop === 0 ? '运行' : '停用' }}
</el-tag>
</template>
</el-table-column>
<el-table-column prop="createBy" label="创建者" />
<el-table-column prop="createTime" label="创建时间" width="180" />
<el-table-column prop="updateBy" label="更新者" />
<el-table-column prop="updateTime" label="更新时间" width="180" />
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryForm.pageNum"
v-model:limit="queryForm.pageSize"
@pagination="getList"
/>
<el-dialog
:title="title"
v-model="open"
width="600px"
append-to-body
:before-close="handleClose"
>
<el-form
ref="bizFormRef"
:model="form"
:rules="rules"
label-width="130px"
size="small"
>
<el-form-item label="业务域名称" prop="bizName">
<el-input v-model="form.bizName" />
</el-form-item>
<el-form-item label="风险等级" prop="riskLvl">
<el-input v-model="form.riskLvl" />
</el-form-item>
<el-form-item label="是否停用" prop="isStop">
<el-select v-model="form.isStop" placeholder="请选择状态">
<el-option label="运行" :value="0" />
<el-option label="停用" :value="1" />
</el-select>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="open = false">取消</el-button>
<el-button type="primary" @click="submitForm">保存</el-button>
</template>
</el-dialog>
</div>
</template>
<script setup>
import { ref, reactive, onMounted } from 'vue'
import { ElMessageBox, ElMessage } from 'element-plus'
import {
listSecuBizConfig,
addSecuBizConfig,
updateSecuBizConfig,
delSecuBizConfig
} from '@/api/metadataConfig/metadataConfig'
const queryForm = reactive({
bizName: '',
riskLvl: '',
pageNum: 1,
pageSize: 10
})
const bizList = ref([])
const total = ref(0)
const loading = ref(false)
const open = ref(false)
const title = ref('')
const bizFormRef = ref(null)
const form = reactive({
onum: null,
bizName: '',
riskLvl: '',
isStop: null
})
const rules = {
bizName: [{ required: true, message: '请输入业务域名称', trigger: 'blur' }],
riskLvl: [{ required: true, message: '请输入风险等级', trigger: 'blur' }],
isStop: [{ required: true, message: '请选择状态', trigger: 'change' }]
}
const selectedRows = ref([])
function handleSelectionChange(val) {
selectedRows.value = val
}
async function getList() {
loading.value = true
try {
const res = await listSecuBizConfig(queryForm)
bizList.value = res.rows || []
total.value = res.total || 0
} catch (error) {
ElMessage.error('获取列表失败,请重试')
} finally {
loading.value = false
}
}
function resetQuery() {
queryForm.bizName = ''
queryForm.riskLvl = ''
queryForm.pageNum = 1
getList()
}
function handleSearch() {
queryForm.pageNum = 1
getList()
}
function openAddDialog() {
title.value = '新增业务域配置'
Object.assign(form, {
onum: null,
bizName: '',
riskLvl: '',
isStop: null
})
open.value = true
}
function openEditDialog(row) {
if (!row) {
ElMessage.warning('请选择一条记录进行编辑')
return
}
title.value = '编辑业务域配置'
Object.assign(form, row)
open.value = true
}
function submitForm() {
bizFormRef.value.validate(async (valid) => {
if (!valid) return
const submitData = { ...form }
try {
if (title.value.includes('新增')) {
await addSecuBizConfig(submitData)
ElMessage.success('新增成功')
} else {
await updateSecuBizConfig(submitData)
ElMessage.success('编辑成功')
}
open.value = false
getList()
} catch (error) {
ElMessage.error('操作失败,请重试')
}
})
}
function deleteRow(onum) {
ElMessageBox.confirm('确定删除该条记录吗?', '提示', { type: 'warning' })
.then(async () => {
try {
await delSecuBizConfig(onum)
ElMessage.success('删除成功')
getList()
} catch (error) {
ElMessage.error('删除失败,请重试')
}
})
.catch(() => {})
}
function deleteSelected() {
if (selectedRows.value.length === 0) {
ElMessage.warning('请至少选择一条记录删除')
return
}
ElMessageBox.confirm(`确定删除选中的 ${selectedRows.value.length} 条记录吗?`, '提示', { type: 'warning' })
.then(async () => {
try {
for (const row of selectedRows.value) {
await delSecuBizConfig(row.onum)
}
ElMessage.success('删除成功')
getList()
} catch (error) {
ElMessage.error('删除失败,请重试')
}
})
.catch(() => {})
}
function handleClose(done) {
bizFormRef.value.resetFields()
done()
}
onMounted(() => {
getList()
})
</script>
<style scoped>
.app-container {
padding: 20px;
}
.mb8 {
margin-bottom: 8px;
}
</style>

392
vue-fastapi-frontend/src/views/metadataConfig/bizPermiConfig/index.vue

@ -0,0 +1,392 @@
<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.objType" placeholder="请选择对象类型" style="width: 180px" clearable>
<el-option label="角色" value="0" />
<el-option label="用户" value="1" />
</el-select>
</el-form-item>
<el-form-item label="对象名称">
<el-input v-model="queryForm.objName" placeholder="请输入对象名称" style="width: 180px" 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>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="openAddDialog">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="Edit"
:disabled="selectedRows.length !== 1"
@click="openEditDialog(selectedRows[0])"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="selectedRows.length === 0"
@click="deleteSelected"
>删除</el-button>
</el-col>
</el-row>
<el-table
v-loading="loading"
:data="permList"
@selection-change="handleSelectionChange"
style="width: 100%"
border
stripe
>
<el-table-column type="selection" width="55" />
<el-table-column prop="bizName" label="业务域" />
<el-table-column prop="objType" label="对象类型">
<template #default="{ row }">
{{ row.objType === '0' || row.objType === 0 ? '角色' : '用户' }}
</template>
</el-table-column> <el-table-column prop="objName" label="对象名称" />
<el-table-column prop="isStop" label="是否停用">
<template #default="{ row }">
<el-tag :type="row.isStop? 'success' : 'info'">
{{ row.isStop ? '运行' : '停用' }}
</el-tag>
</template>
</el-table-column>
<el-table-column prop="secLevelSummary" label="安全等级" />
<el-table-column prop="createBy" label="创建者" />
<el-table-column prop="createTime" label="创建时间" width="180" />
<el-table-column prop="updateBy" label="更新者" />
<el-table-column prop="updateTime" label="更新时间" width="180" />
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryForm.pageNum"
v-model:limit="queryForm.pageSize"
@pagination="getList"
/>
<el-dialog
:title="title"
v-model="open"
width="600px"
append-to-body
:before-close="handleClose"
>
<el-form
ref="permFormRef"
:model="form"
:rules="rules"
label-width="130px"
size="small"
>
<el-form-item label="业务域" prop="bizOnum">
<el-select
v-model="form.bizOnum"
:multiple="isAddMode"
placeholder="请选择业务域"
filterable
clearable
>
<el-option
v-for="dict in bizOnumList"
:key="dict.onum"
:label="dict.bizName"
:value="dict.onum"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="对象类型" prop="objType">
<el-select v-model="form.objType" placeholder="请选择对象类型" @change="changeMetaSecurityObj"
>
<el-option label="角色" value="0" />
<el-option label="用户" value="1" />
</el-select>
</el-form-item>
<!-- @change="handleObjValueChange" -->
<el-form-item label="对象名称" prop="objName">
<el-select
v-model="form.objName"
placeholder="请选择"
maxlength="30"
>
<el-option
v-for="dict in userOrRoleList"
:key="dict.id"
:label="dict.name"
:value="dict.name"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="是否停用" prop="isStop">
<el-select v-model="form.isStop" placeholder="请选择状态">
<el-option label="运行" :value=true />
<el-option label="停用" :value=false />
</el-select>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="open = false">取消</el-button>
<el-button type="primary" @click="submitForm">保存</el-button>
</template>
</el-dialog>
</div>
</template>
<script setup>
import { ref, reactive, onMounted } from 'vue'
import { ElMessageBox, ElMessage } from 'element-plus'
import {
listBizPermiConfig,
addBizPermiConfig,
updateBizPermiConfig,
listBizConfigAll,
delBizPermiConfig
} from '@/api/metadataConfig/metadataConfig'
import { listUser} from "@/api/system/user";
import { listRole} from "@/api/system/role";
const queryForm = reactive({
objType: '',
objName: '',
pageNum: 1,
pageSize: 10
})
const permList = ref([])
const total = ref(0)
const loading = ref(false)
const open = ref(false)
const title = ref('')
// const handleObjValueChange = (selectedValues) => {
// //
// const sourceList = form.value.objType === '0'
// ? userList.value
// : roleList.value;
// //
// const names = selectedValues.map(value => {
// const item = sourceList.find(item => item.id === value);
// return item ? item.name : '';
// });
// }
const roleList = ref([]);
const userList = ref([]);
const userOrRoleList = ref([]);
const bizOnumList = ref([]);
function getRoleOrUserList() {
listRole().then(response => {
response.rows.forEach(item => {
roleList.value.push({id:item.roleId.toString(),name:item.roleName})
});
});
listUser().then(response => {
response.rows.forEach(item => {
userList.value.push({id:item.userId.toString(),name:item.nickName})
});
});
}
const permFormRef = ref(null)
const form = reactive({
onum: null,
bizOnum: null,
objType: '',
objName: '',
isStop: null
})
function changeMetaSecurityObj(data){
form.objName=""
if(data=="1"){
userOrRoleList.value=userList.value
}else {
userOrRoleList.value=roleList.value
}
}
const rules = {
bizOnum: [{ required: true, message: '请输入业务域', trigger: 'blur' }],
objType: [{ required: true, message: '请选择对象类型', trigger: 'change' }],
objName: [{ required: true, message: '请输入对象名称', trigger: 'blur' }],
isStop: [{ required: true, message: '请选择状态', trigger: 'change' }]
}
const selectedRows = ref([])
function handleSelectionChange(val) {
selectedRows.value = val
}
async function getList() {
loading.value = true
try {
console.log(queryForm,"queryForm")
const res = await listBizPermiConfig(queryForm)
permList.value = res.rows || []
total.value = res.total || 0
} catch (error) {
ElMessage.error('获取列表失败,请重试')
} finally {
loading.value = false
}
}
async function getBizList() {
loading.value = true
try {
const res = await listBizConfigAll()
bizOnumList.value = res.data || []
} catch (error) {
ElMessage.error('获取业务域列表失败,请重试')
} finally {
loading.value = false
}
}
function resetQuery() {
queryForm.objType = ''
queryForm.objName = ''
queryForm.pageNum = 1
getList()
}
function handleSearch() {
queryForm.pageNum = 1
getList()
}
const isAddMode = ref(true)
function openAddDialog() {
isAddMode.value = true
title.value = '新增业务域权限配置'
Object.assign(form, {
onum: null,
bizOnum: [],
objType: '',
objName: '',
isStop: null
})
open.value = true
}
function openEditDialog(row) {
if (!row) {
ElMessage.warning('请选择一条记录进行编辑')
return
}
isAddMode.value = false
title.value = '编辑业务域权限配置'
Object.assign(form, row)
if(form.objType=="0"){
userOrRoleList.value=roleList.value
}else{
userOrRoleList.value=userList.value
}
open.value = true
}
function submitForm() {
permFormRef.value.validate(async (valid) => {
if (!valid) return
try {
if (title.value.includes('新增')) {
const submitData = {
bizOnumList: form.bizOnum, //
objType: form.objType,
objName: form.objName,
isStop: form.isStop,
}
await addBizPermiConfig(submitData)
ElMessage.success('新增成功')
} else {
const submitData = {
onum: form.onum, //
bizOnum: form.bizOnum, //
objType: form.objType,
objName: form.objName,
isStop: form.isStop,
}
await updateBizPermiConfig(submitData)
ElMessage.success('编辑成功')
}
open.value = false
getList()
} catch (error) {
ElMessage.error('操作失败,请重试')
}
})
}
function deleteRow(onum) {
ElMessageBox.confirm('确定删除该条记录吗?', '提示', { type: 'warning' })
.then(async () => {
try {
await delBizPermiConfig(onum)
ElMessage.success('删除成功')
getList()
} catch (error) {
ElMessage.error('删除失败,请重试')
}
})
.catch(() => {})
}
function deleteSelected() {
if (selectedRows.value.length === 0) {
ElMessage.warning('请至少选择一条记录删除')
return
}
const onumStr = selectedRows.value.map(row => row.onum).join(',')
ElMessageBox.confirm(`确定删除选中的 ${selectedRows.value.length} 条记录吗?`, '提示', { type: 'warning' })
.then(async () => {
try {
await delBizPermiConfig(onumStr)
ElMessage.success('删除成功')
getList()
} catch (error) {
ElMessage.error('删除失败,请重试')
}
})
.catch(() => {})
}
function handleClose(done) {
permFormRef.value.resetFields()
done()
}
onMounted(() => {
getList()
getRoleOrUserList();
getBizList();
})
</script>
<style scoped>
.app-container {
padding: 20px;
}
.mb8 {
margin-bottom: 8px;
}
</style>
Loading…
Cancel
Save