si@aidatagov.com
11 hours ago
10 changed files with 1802 additions and 3 deletions
@ -0,0 +1,178 @@ |
|||||
|
from datetime import datetime |
||||
|
from fastapi import APIRouter, Depends, Request |
||||
|
from pydantic_validation_decorator import ValidateFields |
||||
|
from sqlalchemy.ext.asyncio import AsyncSession |
||||
|
from config.enums import BusinessType |
||||
|
from config.get_db import get_db |
||||
|
from module_admin.entity.vo.user_vo import CurrentUserModel |
||||
|
from module_admin.annotation.log_annotation import Log |
||||
|
from module_admin.aspect.interface_auth import CheckUserInterfaceAuth |
||||
|
from module_admin.entity.vo.metasecurity_vo import MetaSecurityColModel, MetaSecurityRowModel, MetaSecurityColPageQueryModel, MetaSecurityRowPageQueryModel, DeleteMetaSecurityModel |
||||
|
from module_admin.service.metasecurity_service import MetaSecurityService |
||||
|
from module_admin.service.login_service import LoginService |
||||
|
from utils.common_util import bytes2file_response |
||||
|
from utils.log_util import logger |
||||
|
from utils.page_util import PageResponseModel |
||||
|
from utils.response_util import ResponseUtil |
||||
|
import uuid |
||||
|
|
||||
|
metaSecurityController = APIRouter(prefix='/meta/metaSecurity', dependencies=[Depends(LoginService.get_current_user)]) |
||||
|
|
||||
|
|
||||
|
# MetaSecurity Column相关API |
||||
|
@metaSecurityController.get( |
||||
|
'/col/list', response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('meta:metaSecurityCol:list'))] |
||||
|
) |
||||
|
async def get_meta_security_col_list( |
||||
|
request: Request, |
||||
|
col_page_query: MetaSecurityColPageQueryModel = Depends(MetaSecurityColPageQueryModel.as_query), |
||||
|
query_db: AsyncSession = Depends(get_db), |
||||
|
): |
||||
|
col_page_query_result = await MetaSecurityService.get_meta_security_col_list_services(query_db, col_page_query, is_page=True) |
||||
|
logger.info('获取列配置列表成功') |
||||
|
return ResponseUtil.success(model_content=col_page_query_result) |
||||
|
@metaSecurityController.get('/row/list', response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('meta:metaSecurityRow:list'))] |
||||
|
) |
||||
|
async def get_meta_security_row_list( |
||||
|
request: Request, |
||||
|
row_page_query: MetaSecurityRowPageQueryModel = Depends(MetaSecurityRowPageQueryModel.as_query), |
||||
|
query_db: AsyncSession = Depends(get_db), |
||||
|
): |
||||
|
row_page_query_result = await MetaSecurityService.get_meta_security_row_list_services(query_db, row_page_query, is_page=True) |
||||
|
logger.info('获取行配置列表成功') |
||||
|
return ResponseUtil.success(model_content=row_page_query_result) |
||||
|
@metaSecurityController.get( |
||||
|
'/row/{row_id}', response_model=MetaSecurityRowModel, dependencies=[Depends(CheckUserInterfaceAuth('meta:metaSecurityRow:query'))] |
||||
|
) |
||||
|
async def query_detail_row(request: Request, row_id: str, query_db: AsyncSession = Depends(get_db)): |
||||
|
config_detail_result = await MetaSecurityService.row_detail_services(query_db, row_id) |
||||
|
logger.info(f'获取config_id为{row_id}的信息成功') |
||||
|
|
||||
|
return ResponseUtil.success(data=config_detail_result) |
||||
|
@metaSecurityController.get( |
||||
|
'/col/{col_id}', response_model=MetaSecurityColModel, dependencies=[Depends(CheckUserInterfaceAuth('meta:metaSecurityCol:query'))] |
||||
|
) |
||||
|
async def query_detail_col(request: Request, col_id: str, query_db: AsyncSession = Depends(get_db)): |
||||
|
config_detail_result = await MetaSecurityService.col_detail_services(query_db, col_id) |
||||
|
logger.info(f'获取config_id为{col_id}的信息成功') |
||||
|
|
||||
|
return ResponseUtil.success(data=config_detail_result) |
||||
|
@metaSecurityController.post('/col', dependencies=[Depends(CheckUserInterfaceAuth('meta:metaSecurityCol:add'))]) |
||||
|
@ValidateFields(validate_model='add_meta_security_col') |
||||
|
@Log(title='列配置管理', business_type=BusinessType.INSERT) |
||||
|
async def add_meta_security_col( |
||||
|
request: Request, |
||||
|
add_meta_security_col: MetaSecurityColModel, |
||||
|
query_db: AsyncSession = Depends(get_db), |
||||
|
current_user: CurrentUserModel = Depends(LoginService.get_current_user), |
||||
|
): |
||||
|
|
||||
|
add_meta_security_col.create_by = current_user.user.user_name |
||||
|
add_meta_security_col.create_time = datetime.now() |
||||
|
add_meta_security_col.update_by = current_user.user.user_name |
||||
|
add_meta_security_col.update_time = datetime.now() |
||||
|
add_meta_security_col_result = await MetaSecurityService.add_meta_security_col_services(request, query_db, add_meta_security_col) |
||||
|
logger.info(add_meta_security_col_result.message) |
||||
|
return ResponseUtil.success(msg=add_meta_security_col_result.message) |
||||
|
|
||||
|
|
||||
|
@metaSecurityController.put('/col', dependencies=[Depends(CheckUserInterfaceAuth('meta:metaSecurityCol:edit'))]) |
||||
|
@ValidateFields(validate_model='edit_meta_security_col') |
||||
|
@Log(title='列配置管理', business_type=BusinessType.UPDATE) |
||||
|
async def edit_meta_security_col( |
||||
|
request: Request, |
||||
|
edit_meta_security_col: MetaSecurityColModel, |
||||
|
query_db: AsyncSession = Depends(get_db), |
||||
|
current_user: CurrentUserModel = Depends(LoginService.get_current_user), |
||||
|
): |
||||
|
edit_meta_security_col.update_by = current_user.user.user_name |
||||
|
edit_meta_security_col.update_time = datetime.now() |
||||
|
edit_meta_security_col_result = await MetaSecurityService.edit_meta_security_col_services(request, query_db, edit_meta_security_col) |
||||
|
logger.info(edit_meta_security_col_result.message) |
||||
|
return ResponseUtil.success(msg=edit_meta_security_col_result.message) |
||||
|
|
||||
|
|
||||
|
@metaSecurityController.delete('/col/{col_ids}', dependencies=[Depends(CheckUserInterfaceAuth('meta:metaSecurityCol:remove'))]) |
||||
|
@Log(title='列配置管理', business_type=BusinessType.DELETE) |
||||
|
async def delete_meta_security_col( |
||||
|
request: Request, |
||||
|
col_ids: str, |
||||
|
query_db: AsyncSession = Depends(get_db), |
||||
|
): |
||||
|
delete_meta_security_col = DeleteMetaSecurityModel(metasecurityIds =col_ids) |
||||
|
delete_meta_security_col_result = await MetaSecurityService.delete_meta_security_col_services(request, query_db, delete_meta_security_col) |
||||
|
logger.info(delete_meta_security_col_result.message) |
||||
|
return ResponseUtil.success(msg=delete_meta_security_col_result.message) |
||||
|
|
||||
|
|
||||
|
# @metaSecurityController.get('/col/{col_id}', response_model=MetaSecurityColModel, dependencies=[Depends(CheckUserInterfaceAuth('meta:metaSecurityCol:query'))]) |
||||
|
# async def query_meta_security_col_detail( |
||||
|
# request: Request, |
||||
|
# col_id: str, |
||||
|
# query_db: AsyncSession = Depends(get_db), |
||||
|
# ): |
||||
|
# col_detail_result = await MetaSecurityService.get_meta_security_col_by_id_services(query_db, col_id) |
||||
|
# logger.info(f'获取col_id为{col_id}的列配置信息成功') |
||||
|
# return ResponseUtil.success(data=col_detail_result) |
||||
|
|
||||
|
|
||||
|
# MetaSecurity Row相关API |
||||
|
|
||||
|
|
||||
|
|
||||
|
@metaSecurityController.post('/row', dependencies=[Depends(CheckUserInterfaceAuth('meta:metaSecurityRow:add'))]) |
||||
|
@ValidateFields(validate_model='add_meta_security_row') |
||||
|
@Log(title='行配置管理', business_type=BusinessType.INSERT) |
||||
|
async def add_meta_security_row( |
||||
|
request: Request, |
||||
|
add_meta_security_row: MetaSecurityRowModel, |
||||
|
query_db: AsyncSession = Depends(get_db), |
||||
|
current_user: CurrentUserModel = Depends(LoginService.get_current_user), |
||||
|
): |
||||
|
add_meta_security_row.create_by = current_user.user.user_name |
||||
|
add_meta_security_row.create_time = datetime.now() |
||||
|
add_meta_security_row.update_by = current_user.user.user_name |
||||
|
add_meta_security_row.update_time = datetime.now() |
||||
|
add_meta_security_row_result = await MetaSecurityService.add_meta_security_row_services(request, query_db, add_meta_security_row) |
||||
|
logger.info(add_meta_security_row_result.message) |
||||
|
return ResponseUtil.success(msg=add_meta_security_row_result.message) |
||||
|
|
||||
|
|
||||
|
@metaSecurityController.put('/row', dependencies=[Depends(CheckUserInterfaceAuth('meta:metaSecurityRow:edit'))]) |
||||
|
@ValidateFields(validate_model='edit_meta_security_row') |
||||
|
@Log(title='行配置管理', business_type=BusinessType.UPDATE) |
||||
|
async def edit_meta_security_row( |
||||
|
request: Request, |
||||
|
edit_meta_security_row: MetaSecurityRowModel, |
||||
|
query_db: AsyncSession = Depends(get_db), |
||||
|
current_user: CurrentUserModel = Depends(LoginService.get_current_user), |
||||
|
): |
||||
|
edit_meta_security_row.update_by = current_user.user.user_name |
||||
|
edit_meta_security_row.update_time = datetime.now() |
||||
|
edit_meta_security_row_result = await MetaSecurityService.edit_meta_security_row_services(request, query_db, edit_meta_security_row) |
||||
|
logger.info(edit_meta_security_row_result.message) |
||||
|
return ResponseUtil.success(msg=edit_meta_security_row_result.message) |
||||
|
|
||||
|
|
||||
|
@metaSecurityController.delete('/row/{row_ids}', dependencies=[Depends(CheckUserInterfaceAuth('meta:metaSecurityRow:remove'))]) |
||||
|
@Log(title='行配置管理', business_type=BusinessType.DELETE) |
||||
|
async def delete_meta_security_row( |
||||
|
request: Request, |
||||
|
row_ids: str, |
||||
|
query_db: AsyncSession = Depends(get_db), |
||||
|
): |
||||
|
delete_meta_security_row = DeleteMetaSecurityModel(metasecurityIds=row_ids) |
||||
|
delete_meta_security_row_result = await MetaSecurityService.delete_meta_security_row_services(request, query_db, delete_meta_security_row) |
||||
|
logger.info(delete_meta_security_row_result.message) |
||||
|
return ResponseUtil.success(msg=delete_meta_security_row_result.message) |
||||
|
|
||||
|
|
||||
|
@metaSecurityController.get('/row/{row_id}', response_model=MetaSecurityRowModel, dependencies=[Depends(CheckUserInterfaceAuth('meta:metaSecurityRow:query'))]) |
||||
|
async def query_meta_security_row_detail( |
||||
|
request: Request, |
||||
|
row_id: int, |
||||
|
query_db: AsyncSession = Depends(get_db), |
||||
|
): |
||||
|
row_detail_result = await MetaSecurityService.get_meta_security_row_by_id_services(query_db, row_id) |
||||
|
logger.info(f'获取row_id为{row_id}的行配置信息成功') |
||||
|
return ResponseUtil.success(data=row_detail_result) |
@ -0,0 +1,136 @@ |
|||||
|
from sqlalchemy import delete, select, update, desc |
||||
|
from sqlalchemy.ext.asyncio import AsyncSession |
||||
|
from module_admin.entity.do.metasecurity_do import MetaSecurityCol, MetaSecurityRow |
||||
|
from module_admin.entity.vo.metasecurity_vo import MetaSecurityColModel, MetaSecurityRowModel |
||||
|
from utils.page_util import PageUtil |
||||
|
|
||||
|
|
||||
|
class MetaSecurityDao: |
||||
|
""" |
||||
|
数据源安全管理模块数据库操作层 |
||||
|
""" |
||||
|
|
||||
|
@classmethod |
||||
|
async def get_meta_security_col_list(cls, db: AsyncSession, query_object: MetaSecurityColModel, is_page: bool = False): |
||||
|
""" |
||||
|
获取 MetaSecurityCol 的列表信息,支持模糊查询和分页 |
||||
|
:param db: ORM对象 |
||||
|
:param query_object: 查询参数对象 |
||||
|
:param is_page: 是否开启分页 |
||||
|
:return: 列表信息 |
||||
|
""" |
||||
|
# 构建查询条件 |
||||
|
filters = [] |
||||
|
if query_object.dbCName: |
||||
|
filters.append(MetaSecurityCol.dbCName.like(f"%{query_object.dbCName}%")) |
||||
|
if query_object.obj_value: |
||||
|
filters.append(MetaSecurityCol.obj_value.like(f"%{query_object.obj_value}%")) |
||||
|
if query_object.dbTName: |
||||
|
filters.append(MetaSecurityCol.dbTName.like(f"%{query_object.dbTName}%")) |
||||
|
if query_object.dbSName: |
||||
|
filters.append(MetaSecurityCol.dbSName.like(f"%{query_object.dbSName}%")) |
||||
|
if query_object.dbRID: |
||||
|
filters.append(MetaSecurityCol.dbRID==query_object.dbRID) |
||||
|
# 构建查询语句 |
||||
|
query = ( |
||||
|
select(MetaSecurityCol) |
||||
|
.where(*filters) |
||||
|
.order_by(desc(MetaSecurityCol.create_time)) # 按创建时间降序排序 |
||||
|
) |
||||
|
|
||||
|
# 分页处理 |
||||
|
col_list = await PageUtil.paginate( |
||||
|
db, query, query_object.page_num, query_object.page_size, is_page |
||||
|
) |
||||
|
return col_list |
||||
|
|
||||
|
|
||||
|
|
||||
|
@classmethod |
||||
|
async def get_meta_security_row_list(cls, db: AsyncSession, query_object: MetaSecurityRowModel, is_page: bool = False): |
||||
|
""" |
||||
|
获取 MetaSecurityRow 的列表信息,支持模糊查询和分页 |
||||
|
:param db: ORM对象 |
||||
|
:param query_object: 查询参数对象 |
||||
|
:param is_page: 是否开启分页 |
||||
|
:return: 列表信息 |
||||
|
""" |
||||
|
# 构建查询条件 |
||||
|
filters = [] |
||||
|
if query_object.dbCName: |
||||
|
filters.append(MetaSecurityRow.dbCName.like(f"%{query_object.dbCName}%")) |
||||
|
if query_object.obj_value: |
||||
|
filters.append(MetaSecurityRow.obj_value.like(f"%{query_object.obj_value}%")) |
||||
|
if query_object.dbTName: |
||||
|
filters.append(MetaSecurityRow.dbTName.like(f"%{query_object.dbTName}%")) |
||||
|
if query_object.dbSName: |
||||
|
filters.append(MetaSecurityRow.dbSName.like(f"%{query_object.dbSName}%")) |
||||
|
if query_object.dbRID: |
||||
|
filters.append(MetaSecurityRow.dbRID==query_object.dbRID) |
||||
|
# 构建查询语句 |
||||
|
query = ( |
||||
|
select(MetaSecurityRow) |
||||
|
.where(*filters) |
||||
|
.order_by(desc(MetaSecurityRow.create_time)) # 按创建时间降序排序 |
||||
|
) |
||||
|
|
||||
|
# 分页处理 |
||||
|
row_list = await PageUtil.paginate( |
||||
|
db, query, query_object.page_num, query_object.page_size, is_page |
||||
|
) |
||||
|
return row_list |
||||
|
|
||||
|
|
||||
|
@classmethod |
||||
|
async def get_meta_security_col_by_id(cls, db: AsyncSession, colId: str): |
||||
|
col = ( |
||||
|
await db.execute( |
||||
|
select(MetaSecurityCol) |
||||
|
.where(MetaSecurityCol.colId == colId) |
||||
|
) |
||||
|
).scalars().first() |
||||
|
return col |
||||
|
|
||||
|
@classmethod |
||||
|
async def get_meta_security_row_by_id(cls, db: AsyncSession, rowId: str): |
||||
|
row = ( |
||||
|
await db.execute( |
||||
|
select(MetaSecurityRow) |
||||
|
.where(MetaSecurityRow.rowId == rowId) |
||||
|
) |
||||
|
).scalars().first() |
||||
|
return row |
||||
|
|
||||
|
@classmethod |
||||
|
async def add_meta_security_col(cls, db: AsyncSession,colModel:MetaSecurityColModel): |
||||
|
col = MetaSecurityCol( |
||||
|
**colModel.model_dump() |
||||
|
) |
||||
|
db.add(col) |
||||
|
await db.flush() |
||||
|
return col |
||||
|
@classmethod |
||||
|
async def add_meta_security_row(cls, db: AsyncSession,rowModel:MetaSecurityRowModel): |
||||
|
row = MetaSecurityRow(**rowModel.model_dump()) |
||||
|
db.add(row) |
||||
|
await db.flush() |
||||
|
return row |
||||
|
|
||||
|
@classmethod |
||||
|
async def delete_meta_security_col(cls, db: AsyncSession, colId: str): |
||||
|
await db.execute(delete(MetaSecurityCol).where(MetaSecurityCol.colId == colId)) |
||||
|
|
||||
|
@classmethod |
||||
|
async def delete_meta_security_row(cls, db: AsyncSession, rowId: str): |
||||
|
await db.execute(delete(MetaSecurityRow).where(MetaSecurityRow.rowId == rowId)) |
||||
|
|
||||
|
@classmethod |
||||
|
async def update_meta_security_col(cls, db: AsyncSession, update_data: MetaSecurityColModel): |
||||
|
|
||||
|
await db.execute(update(MetaSecurityCol), [update_data]) |
||||
|
await db.flush() |
||||
|
|
||||
|
@classmethod |
||||
|
async def update_meta_security_row(cls, db: AsyncSession, update_data: MetaSecurityRowModel): |
||||
|
await db.execute(update(MetaSecurityRow), [update_data]) |
||||
|
await db.flush() |
@ -0,0 +1,54 @@ |
|||||
|
from sqlalchemy import Column, Integer, String, DateTime, Boolean |
||||
|
from config.database import Base |
||||
|
|
||||
|
|
||||
|
|
||||
|
class MetaSecurityCol(Base): |
||||
|
""" |
||||
|
数据源控制表 |
||||
|
""" |
||||
|
__tablename__ = 'meta_security_col' |
||||
|
|
||||
|
colId = Column(String(50), primary_key=True, comment='问答id') |
||||
|
create_by = Column(String(20), default='', comment='创建者') |
||||
|
create_time = Column(DateTime, nullable=True, default=None, comment='创建时间') |
||||
|
update_by = Column(String(20), default='', comment='更新者') |
||||
|
update_time = Column(DateTime, nullable=True, default=None, comment='更新时间') |
||||
|
dbRName = Column(String(50), default=None, comment='数据源名称') |
||||
|
dbRID = Column(Integer, nullable=True, default=None, comment='数据源ID') |
||||
|
dbSName = Column(String(50), default=None, comment='模式名称') |
||||
|
dbTName = Column(String(50), default=None, comment='表名称') |
||||
|
dbCName = Column(String(50), default=None, comment='字段名称') |
||||
|
ctrl_type = Column(String(1), default=None, comment='控制类型(0:反向 1:正向)') |
||||
|
obj_type = Column(String(1), default=None, comment='对象类型(0:角色 1:用户)') |
||||
|
obj_value = Column(Integer, default=None, comment='角色值') |
||||
|
isStop = Column(Boolean, nullable=True, default=None, comment='是否停用(0:运行 1:停用)') |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
class MetaSecurityRow(Base): |
||||
|
""" |
||||
|
数据源行控制表 |
||||
|
""" |
||||
|
__tablename__ = 'meta_security_row' |
||||
|
|
||||
|
rowId = Column(String(50), primary_key=True, comment='问答id') |
||||
|
create_by = Column(String(20), default='', comment='创建者') |
||||
|
create_time = Column(DateTime, nullable=True, default=None, comment='创建时间') |
||||
|
update_by = Column(String(20), default='', comment='更新者') |
||||
|
update_time = Column(DateTime, nullable=True, default=None, comment='更新时间') |
||||
|
dbRName = Column(String(50), default=None, comment='数据源名称') |
||||
|
dbRID = Column(Integer, nullable=True, default=None, comment='数据源ID') |
||||
|
dbSName = Column(String(50), default=None, comment='模式名称') |
||||
|
dbTName = Column(String(50), default=None, comment='表名称') |
||||
|
dbCName = Column(String(50), default=None, comment='字段名称') |
||||
|
ctrl_type = Column(String(1), default=None, comment='控制类型(0:控制值 1:控制表 2:控制程序)') |
||||
|
obj_type = Column(String(1), default=None, comment='对象类型(0:角色 1:用户)') |
||||
|
obj_value = Column(String(50), default=None, comment='角色值') |
||||
|
isStop = Column(Boolean, nullable=True, default=None, comment='是否停用(0:运行 1:停用)') |
||||
|
ctrl_value = Column(String(100), default=None, comment='控制值') |
||||
|
ctrl_table = Column(String(100), default=None, comment='控制表') |
||||
|
ctrl_col = Column(String(100), default=None, comment='控制字段') |
||||
|
ctrl_system = Column(String(100), default=None, comment='控制程序') |
||||
|
|
@ -0,0 +1,79 @@ |
|||||
|
from pydantic import BaseModel |
||||
|
from typing import Union, Optional, List |
||||
|
from datetime import datetime |
||||
|
from module_admin.annotation.pydantic_annotation import as_query |
||||
|
from pydantic import BaseModel, ConfigDict, Field |
||||
|
from pydantic.alias_generators import to_camel |
||||
|
|
||||
|
|
||||
|
class CrudMetaSecurityModel(BaseModel): |
||||
|
is_success: bool |
||||
|
message: str |
||||
|
|
||||
|
|
||||
|
class MetaSecurityRowModel(BaseModel): |
||||
|
""" |
||||
|
数据源行控制表对应Pydantic模型 |
||||
|
""" |
||||
|
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True) |
||||
|
rowId: Optional[str] = None |
||||
|
create_by: Optional[str] = None |
||||
|
create_time: Optional[datetime] = None |
||||
|
update_by: Optional[str] = None |
||||
|
update_time: Optional[datetime] = None |
||||
|
dbRName: Optional[str] = None |
||||
|
dbRID: Optional[int] = None |
||||
|
dbSName: Optional[str] = None |
||||
|
dbTName: Optional[str] = None |
||||
|
dbCName: Optional[str] = None |
||||
|
ctrl_type: Optional[str] = None # control type (e.g., '0', '1', '2') |
||||
|
obj_type: Optional[str] = None # object type (e.g., '0', '1') |
||||
|
obj_value: Optional[object] = None |
||||
|
isStop: Optional[bool] = None |
||||
|
ctrl_value: Optional[str] = None |
||||
|
ctrl_table: Optional[str] = None |
||||
|
ctrl_col: Optional[str] = None |
||||
|
ctrl_system: Optional[str] = None |
||||
|
|
||||
|
|
||||
|
|
||||
|
class MetaSecurityColModel(BaseModel): |
||||
|
""" |
||||
|
数据源控制表对应Pydantic模型 |
||||
|
""" |
||||
|
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True) |
||||
|
colId: Optional[str] = None |
||||
|
create_by: Optional[str] = None |
||||
|
create_time: Optional[datetime] = None |
||||
|
update_by: Optional[str] = None |
||||
|
update_time: Optional[datetime] = None |
||||
|
dbRName: Optional[str] = None |
||||
|
dbRID: Optional[int] = None |
||||
|
dbSName: Optional[str] = None |
||||
|
dbTName: Optional[str] = None |
||||
|
dbCName: Optional[str] = None |
||||
|
ctrl_type: Optional[str] = None # control type (e.g., '0', '1') |
||||
|
obj_type: Optional[str] = None # object type (e.g., '0', '1') |
||||
|
obj_value: Optional[object] = None |
||||
|
isStop: Optional[bool] = None |
||||
|
@as_query |
||||
|
class MetaSecurityRowPageQueryModel(MetaSecurityRowModel): |
||||
|
""" |
||||
|
元数据任务分页查询模型 |
||||
|
""" |
||||
|
page_num: int = Field(default=1, description='当前页码') |
||||
|
page_size: int = Field(default=10, description='每页记录数') |
||||
|
@as_query |
||||
|
class MetaSecurityColPageQueryModel(MetaSecurityColModel): |
||||
|
""" |
||||
|
元数据任务分页查询模型 |
||||
|
""" |
||||
|
page_num: int = Field(default=1, description='当前页码') |
||||
|
page_size: int = Field(default=10, description='每页记录数') |
||||
|
|
||||
|
class DeleteMetaSecurityModel(BaseModel): |
||||
|
""" |
||||
|
删除参数配置模型 |
||||
|
""" |
||||
|
model_config = ConfigDict(alias_generator=to_camel) |
||||
|
metaSecurity_ids: str = Field(description='需要删除的参数主键') |
@ -0,0 +1,270 @@ |
|||||
|
from fastapi import Request |
||||
|
from sqlalchemy.ext.asyncio import AsyncSession |
||||
|
from typing import List |
||||
|
from config.constant import CommonConstant |
||||
|
from exceptions.exception import ServiceException |
||||
|
from module_admin.dao.metaSecurity_dao import MetaSecurityDao |
||||
|
from module_admin.entity.vo.common_vo import CrudResponseModel |
||||
|
from module_admin.entity.vo.metasecurity_vo import MetaSecurityColModel, MetaSecurityRowModel,DeleteMetaSecurityModel |
||||
|
from utils.common_util import CamelCaseUtil |
||||
|
import uuid |
||||
|
|
||||
|
|
||||
|
class MetaSecurityService: |
||||
|
""" |
||||
|
数据源安全管理模块服务层 |
||||
|
""" |
||||
|
|
||||
|
@classmethod |
||||
|
async def get_meta_security_col_list_services( |
||||
|
cls, query_db: AsyncSession, query_object: MetaSecurityColModel, is_page: bool = False |
||||
|
): |
||||
|
""" |
||||
|
获取列配置列表信息service |
||||
|
|
||||
|
:param query_db: orm对象 |
||||
|
:param query_object: 查询参数对象 |
||||
|
:param is_page: 是否开启分页 |
||||
|
:return: 列配置列表信息对象 |
||||
|
""" |
||||
|
col_list_result = await MetaSecurityDao.get_meta_security_col_list(query_db, query_object, is_page) |
||||
|
return col_list_result |
||||
|
|
||||
|
@classmethod |
||||
|
async def get_meta_security_row_list_services( |
||||
|
cls, query_db: AsyncSession, query_object: MetaSecurityRowModel, is_page: bool = False |
||||
|
): |
||||
|
""" |
||||
|
获取行配置列表信息service |
||||
|
|
||||
|
:param query_db: orm对象 |
||||
|
:param query_object: 查询参数对象 |
||||
|
:param is_page: 是否开启分页 |
||||
|
:return: 行配置列表信息对象 |
||||
|
""" |
||||
|
row_list_result = await MetaSecurityDao.get_meta_security_row_list(query_db, query_object, is_page) |
||||
|
return row_list_result |
||||
|
|
||||
|
@classmethod |
||||
|
async def get_meta_security_col_by_id_services(cls, query_db: AsyncSession, colId: str): |
||||
|
""" |
||||
|
获取列配置详细信息service |
||||
|
|
||||
|
:param query_db: orm对象 |
||||
|
:param colId: 列配置ID |
||||
|
:return: 列配置详细信息对象 |
||||
|
""" |
||||
|
col = await MetaSecurityDao.get_meta_security_col_by_id(query_db, colId) |
||||
|
if col: |
||||
|
result = MetaSecurityColModel(**CamelCaseUtil.transform_result(col)) |
||||
|
else: |
||||
|
result = MetaSecurityColModel(**dict()) |
||||
|
return result |
||||
|
|
||||
|
@classmethod |
||||
|
async def get_meta_security_row_by_id_services(cls, query_db: AsyncSession, rowId: str): |
||||
|
""" |
||||
|
获取行配置详细信息service |
||||
|
|
||||
|
:param query_db: orm对象 |
||||
|
:param rowId: 行配置ID |
||||
|
:return: 行配置详细信息对象 |
||||
|
""" |
||||
|
row = await MetaSecurityDao.get_meta_security_row_by_id(query_db, rowId) |
||||
|
if row: |
||||
|
result = MetaSecurityRowModel(**CamelCaseUtil.transform_result(row)) |
||||
|
else: |
||||
|
result = MetaSecurityRowModel(**dict()) |
||||
|
return result |
||||
|
|
||||
|
@classmethod |
||||
|
async def add_meta_security_col_services(cls, request: Request, query_db: AsyncSession, page_object: MetaSecurityColModel): |
||||
|
""" |
||||
|
新增列配置服务 |
||||
|
|
||||
|
:param request: Request对象 |
||||
|
:param query_db: orm对象 |
||||
|
:param page_object: 新增的列配置对象 |
||||
|
:return: 新增列配置校验结果 |
||||
|
""" |
||||
|
try: |
||||
|
if isinstance(page_object.obj_value, str) and page_object.obj_value: |
||||
|
obj_values = page_object.obj_value.split(",") |
||||
|
for value in obj_values: |
||||
|
# 创建新的 page_object 实例,避免修改原始对象 |
||||
|
new_page_object = MetaSecurityColModel(**page_object.model_dump(by_alias=True)) |
||||
|
new_page_object.obj_value = value.strip() # 去除空格并赋值 |
||||
|
new_page_object.colId = str(uuid.uuid4()) |
||||
|
# 调用 DAO 方法插入数据 |
||||
|
await MetaSecurityDao.add_meta_security_col(query_db, new_page_object) |
||||
|
await query_db.commit() |
||||
|
return CrudResponseModel(is_success=True, message='新增列配置成功') |
||||
|
except Exception as e: |
||||
|
await query_db.rollback() |
||||
|
raise e |
||||
|
|
||||
|
@classmethod |
||||
|
async def add_meta_security_row_services(cls, request: Request, query_db: AsyncSession, page_object: MetaSecurityRowModel): |
||||
|
""" |
||||
|
新增行配置服务 |
||||
|
|
||||
|
:param request: Request对象 |
||||
|
:param query_db: orm对象 |
||||
|
:param page_object: 新增的行配置对象 |
||||
|
:return: 新增行配置校验结果 |
||||
|
""" |
||||
|
try: |
||||
|
if isinstance(page_object.obj_value, str) and page_object.obj_value: |
||||
|
obj_values = page_object.obj_value.split(",") |
||||
|
for value in obj_values: |
||||
|
# 创建新的 page_object 实例,避免修改原始对象 |
||||
|
new_page_object = MetaSecurityRowModel(**page_object.model_dump(by_alias=True)) |
||||
|
new_page_object.obj_value = value.strip() # 去除空格并赋值 |
||||
|
new_page_object.rowId = str(uuid.uuid4()) |
||||
|
# 调用 DAO 方法插入数据 |
||||
|
await MetaSecurityDao.add_meta_security_row(query_db, new_page_object) |
||||
|
await query_db.commit() |
||||
|
|
||||
|
# 缓存相关操作,如果需要 |
||||
|
# await request.app.state.redis.set(...) |
||||
|
|
||||
|
return CrudResponseModel(is_success=True, message='新增行配置成功') |
||||
|
|
||||
|
except Exception as e: |
||||
|
await query_db.rollback() |
||||
|
raise e |
||||
|
@classmethod |
||||
|
async def col_detail_services(cls, query_db: AsyncSession, col: str): |
||||
|
""" |
||||
|
获取参数配置详细信息service |
||||
|
|
||||
|
:param query_db: orm对象 |
||||
|
:param config_id: 参数配置id |
||||
|
:return: 参数配置id对应的信息 |
||||
|
""" |
||||
|
config = await MetaSecurityDao.get_meta_security_col_by_id(query_db, col) |
||||
|
if config: |
||||
|
result = MetaSecurityColModel(**CamelCaseUtil.transform_result(config)) |
||||
|
else: |
||||
|
result = MetaSecurityColModel(**dict()) |
||||
|
|
||||
|
return result |
||||
|
@classmethod |
||||
|
async def row_detail_services(cls, query_db: AsyncSession, row_id: str): |
||||
|
""" |
||||
|
获取参数配置详细信息service |
||||
|
|
||||
|
:param query_db: orm对象 |
||||
|
:param config_id: 参数配置id |
||||
|
:return: 参数配置id对应的信息 |
||||
|
""" |
||||
|
config = await MetaSecurityDao.get_meta_security_row_by_id(query_db, row_id) |
||||
|
if config: |
||||
|
result = MetaSecurityRowModel(**CamelCaseUtil.transform_result(config)) |
||||
|
else: |
||||
|
result = MetaSecurityRowModel(**dict()) |
||||
|
|
||||
|
return result |
||||
|
@classmethod |
||||
|
async def edit_meta_security_col_services(cls, request: Request, query_db: AsyncSession, page_object: MetaSecurityColModel): |
||||
|
""" |
||||
|
编辑列配置服务 |
||||
|
|
||||
|
:param request: Request对象 |
||||
|
:param query_db: orm对象 |
||||
|
:param page_object: 编辑的列配置对象 |
||||
|
:return: 编辑列配置校验结果 |
||||
|
""" |
||||
|
edit_col = page_object.model_dump(exclude_unset=True) |
||||
|
col_info = await cls.get_meta_security_col_by_id_services(query_db, page_object.colId) |
||||
|
|
||||
|
if col_info: |
||||
|
try: |
||||
|
await MetaSecurityDao.update_meta_security_col(query_db, edit_col) |
||||
|
await query_db.commit() |
||||
|
|
||||
|
# 缓存更新,如果需要 |
||||
|
# await request.app.state.redis.set(...) |
||||
|
|
||||
|
return CrudResponseModel(is_success=True, message='编辑列配置成功') |
||||
|
except Exception as e: |
||||
|
await query_db.rollback() |
||||
|
raise e |
||||
|
else: |
||||
|
raise ServiceException(message=f'列配置{page_object.colId}不存在') |
||||
|
|
||||
|
@classmethod |
||||
|
async def edit_meta_security_row_services(cls, request: Request, query_db: AsyncSession, page_object: MetaSecurityRowModel): |
||||
|
""" |
||||
|
编辑行配置服务 |
||||
|
:param request: Request对象 |
||||
|
:param query_db: orm对象 |
||||
|
:param page_object: 编辑的行配置对象 |
||||
|
:return: 编辑行配置校验结果 |
||||
|
""" |
||||
|
edit_row = page_object.model_dump(exclude_unset=True) |
||||
|
row_info = await cls.get_meta_security_row_by_id_services(query_db, page_object.rowId) |
||||
|
if row_info: |
||||
|
try: |
||||
|
await MetaSecurityDao.update_meta_security_row(query_db, edit_row) |
||||
|
await query_db.commit() |
||||
|
return CrudResponseModel(is_success=True, message='编辑行配置成功') |
||||
|
except Exception as e: |
||||
|
await query_db.rollback() |
||||
|
raise e |
||||
|
else: |
||||
|
raise ServiceException(message=f'行配置{page_object.rowId}不存在') |
||||
|
|
||||
|
@classmethod |
||||
|
async def delete_meta_security_col_services(cls, request: Request, query_db: AsyncSession, page_object: DeleteMetaSecurityModel): |
||||
|
""" |
||||
|
删除列配置服务 |
||||
|
:param request: Request对象 |
||||
|
:param query_db: orm对象 |
||||
|
:param page_object: 删除列配置对象 |
||||
|
:return: 删除列配置校验结果 |
||||
|
""" |
||||
|
if page_object.metaSecurity_ids: |
||||
|
col_id_list = page_object.metaSecurity_ids.split(',') |
||||
|
try: |
||||
|
for col_id in col_id_list: |
||||
|
col_info = await cls.get_meta_security_col_by_id_services(query_db, col_id) |
||||
|
if col_info: |
||||
|
# 校验不能删除的系统内置列 |
||||
|
await MetaSecurityDao.delete_meta_security_col(query_db, col_id) |
||||
|
await query_db.commit() |
||||
|
|
||||
|
|
||||
|
return CrudResponseModel(is_success=True, message='删除列配置成功') |
||||
|
except Exception as e: |
||||
|
await query_db.rollback() |
||||
|
raise e |
||||
|
else: |
||||
|
raise ServiceException(message='传入列配置ID为空') |
||||
|
|
||||
|
@classmethod |
||||
|
async def delete_meta_security_row_services(cls, request: Request, query_db: AsyncSession, page_object: DeleteMetaSecurityModel): |
||||
|
""" |
||||
|
删除行配置服务 |
||||
|
|
||||
|
:param request: Request对象 |
||||
|
:param query_db: orm对象 |
||||
|
:param page_object: 删除行配置对象 |
||||
|
:return: 删除行配置校验结果 |
||||
|
""" |
||||
|
if page_object.metaSecurity_ids: |
||||
|
row_id_list = page_object.metaSecurity_ids.split(',') |
||||
|
try: |
||||
|
for row_id in row_id_list: |
||||
|
row_info = await cls.get_meta_security_row_by_id_services(query_db, row_id) |
||||
|
if row_info: |
||||
|
await MetaSecurityDao.delete_meta_security_row(query_db, row_id) |
||||
|
await query_db.commit() |
||||
|
return CrudResponseModel(is_success=True, message='删除行配置成功') |
||||
|
except Exception as e: |
||||
|
await query_db.rollback() |
||||
|
raise e |
||||
|
else: |
||||
|
raise ServiceException(message='传入行配置ID为空') |
||||
|
|
||||
|
|
@ -0,0 +1,108 @@ |
|||||
|
import request from '@/utils/request' |
||||
|
import { parseStrEmpty } from "@/utils/ruoyi"; |
||||
|
|
||||
|
// 查询列配置列表
|
||||
|
export function listMetaSecurityCol(query) { |
||||
|
return request({ |
||||
|
url: '/default-api/meta/metaSecurity/col/list', |
||||
|
method: 'get', |
||||
|
params: query |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 查询行配置列表
|
||||
|
export function listMetaSecurityRow(query) { |
||||
|
return request({ |
||||
|
url: '/default-api/meta/metaSecurity/row/list', |
||||
|
method: 'get', |
||||
|
params: query |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 查询列配置详情
|
||||
|
export function getMetaSecurityCol(colId) { |
||||
|
return request({ |
||||
|
url: '/default-api/meta/metaSecurity/col/' + parseStrEmpty(colId), |
||||
|
method: 'get' |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 查询行配置详情
|
||||
|
export function getMetaSecurityRow(rowId) { |
||||
|
return request({ |
||||
|
url: '/default-api/meta/metaSecurity/row/' + parseStrEmpty(rowId), |
||||
|
method: 'get' |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 新增列配置
|
||||
|
export function addMetaSecurityCol(data) { |
||||
|
return request({ |
||||
|
url: '/default-api/meta/metaSecurity/col', |
||||
|
method: 'post', |
||||
|
data: data |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 新增行配置
|
||||
|
export function addMetaSecurityRow(data) { |
||||
|
return request({ |
||||
|
url: '/default-api/meta/metaSecurity/row', |
||||
|
method: 'post', |
||||
|
data: data |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 修改列配置
|
||||
|
export function updateMetaSecurityCol(data) { |
||||
|
return request({ |
||||
|
url: '/default-api/meta/metaSecurity/col', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 修改行配置
|
||||
|
export function updateMetaSecurityRow(data) { |
||||
|
return request({ |
||||
|
url: '/default-api/meta/metaSecurity/row', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 删除列配置
|
||||
|
export function deleteMetaSecurityCol(colId) { |
||||
|
return request({ |
||||
|
url: '/default-api/meta/metaSecurity/col/' + colId, |
||||
|
method: 'delete' |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 删除行配置
|
||||
|
export function deleteMetaSecurityRow(rowId) { |
||||
|
return request({ |
||||
|
url: '/default-api/meta/metaSecurity/row/' + rowId, |
||||
|
method: 'delete' |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 批量删除列配置
|
||||
|
export function deleteMetaSecurityCols(colIds) { |
||||
|
return request({ |
||||
|
url: '/default-api/meta/metaSecurity/col/' + colIds, |
||||
|
method: 'delete' |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 批量删除行配置
|
||||
|
export function deleteMetaSecurityRows(rowIds) { |
||||
|
return request({ |
||||
|
url: '/default-api/meta/metaSecurity/row/' + rowIds, |
||||
|
method: 'delete' |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
@ -0,0 +1,485 @@ |
|||||
|
<template> |
||||
|
<div class="app-container"> |
||||
|
<el-row :gutter="20"> |
||||
|
<el-col :span="4" :xs="24"> |
||||
|
<div class="head-container"> |
||||
|
<el-input |
||||
|
v-model="dbResoursName" |
||||
|
placeholder="请输入数据源" |
||||
|
clearable |
||||
|
prefix-icon="search" |
||||
|
style="margin-bottom: 20px" |
||||
|
/> |
||||
|
</div> |
||||
|
<div class="head-container"> |
||||
|
<el-tree |
||||
|
:data="dbResourceOptions" |
||||
|
:props="defaultProps" |
||||
|
:expand-on-click-node="false" |
||||
|
:filter-node-method="filterNode" |
||||
|
ref="tree" |
||||
|
node-key="id" |
||||
|
default-expand-all |
||||
|
highlight-current |
||||
|
@node-click="handleNodeClick" |
||||
|
> |
||||
|
<template #default="{ node, data }"> |
||||
|
<span class="custom-tree-node"> |
||||
|
<i :class="getIconClass(data)"></i> |
||||
|
|
||||
|
<span>{{ data.name }}</span> |
||||
|
</span> |
||||
|
</template> |
||||
|
</el-tree> |
||||
|
</div> |
||||
|
</el-col> |
||||
|
|
||||
|
<el-col :span="20" :xs="24"> |
||||
|
<!-- 搜索框 --> |
||||
|
<el-form :model="queryParams" ref="queryRef" :inline="true" > |
||||
|
<el-form-item label="模式名" prop="dbSName"> |
||||
|
<el-input v-model="queryParams.dbSName" placeholder="请输入模式名称" clearable /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="表名" prop="dbTName"> |
||||
|
<el-input v-model="queryParams.dbTName" placeholder="请输入表名称" clearable /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="字段名" prop="dbCName"> |
||||
|
<el-input v-model="queryParams.dbCName" placeholder="请输入字段名称" clearable /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="对象编号" prop="objValue"> |
||||
|
<el-input v-model="queryParams.objValue" placeholder="请输入列名称" clearable /> |
||||
|
</el-form-item> |
||||
|
<el-form-item> |
||||
|
<el-button type="primary" @click="handleQuery">搜索</el-button> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
|
||||
|
<el-row :gutter="10" class="mb8"> |
||||
|
<el-col :span="1.5"> |
||||
|
<el-button |
||||
|
type="primary" |
||||
|
plain |
||||
|
icon="Plus" |
||||
|
@click="handleAdd" |
||||
|
v-hasPermi="['meta:metaSecurityCol:add']" |
||||
|
>新增</el-button> |
||||
|
</el-col> |
||||
|
<el-col :span="1.5"> |
||||
|
<el-button |
||||
|
type="success" |
||||
|
plain |
||||
|
icon="Edit" |
||||
|
:disabled="single" |
||||
|
@click="handleEdit" |
||||
|
v-hasPermi="['meta:metaSecurityCol:edit']" |
||||
|
>修改</el-button> |
||||
|
</el-col> |
||||
|
<el-col :span="1.5"> |
||||
|
<el-button |
||||
|
type="danger" |
||||
|
plain |
||||
|
icon="Delete" |
||||
|
:disabled="multiple" |
||||
|
@click="handleRemove" |
||||
|
v-hasPermi="['meta:metaSecurityCol:remove']" |
||||
|
>删除</el-button> |
||||
|
</el-col> |
||||
|
</el-row> |
||||
|
<!-- 表格展示 --> |
||||
|
<el-table v-loading="loading" :data="tableData" @selection-change="handleSelectionChange"> |
||||
|
<el-table-column type="selection" width="55" align="center" /> |
||||
|
|
||||
|
<el-table-column label="连接" align="center" prop="dbRName" /> |
||||
|
<el-table-column label="模式" align="center" prop="dbSName" /> |
||||
|
<el-table-column label="表名" align="center" prop="dbTName" /> |
||||
|
<el-table-column label="字段名" align="center" prop="dbCName" /> |
||||
|
<el-table-column label="是否可见" align="center" prop="ctrlType" > |
||||
|
<template #default="scope"> |
||||
|
<dict-tag |
||||
|
:options="metasecurity_ctr" |
||||
|
:value="scope.row.ctrlType" |
||||
|
/> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column label="对象类型" align="center" prop="objType" > |
||||
|
<template #default="scope"> |
||||
|
<dict-tag |
||||
|
:options="metasecurity_obj" |
||||
|
:value="scope.row.objType" |
||||
|
/> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column label="对象编号" align="center" prop="objValue" > |
||||
|
<template #default="scope"> |
||||
|
<span v-if="scope.row.objType === '0'"> |
||||
|
{{ getUserName(scope.row.objValue) }} |
||||
|
</span> |
||||
|
<span v-else-if="scope.row.objType === '1'"> |
||||
|
{{ getRoleName(scope.row.objValue) }} |
||||
|
</span> |
||||
|
<span v-else> |
||||
|
{{ scope.row.objValue }} |
||||
|
</span> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column label="是否停用" align="center" prop="isStop" /> |
||||
|
<el-table-column label="操作" align="center" width="180"> |
||||
|
<template #default="scope"> |
||||
|
<el-button @click="handleEdit(scope.row)" type="text" icon="Edit" /> |
||||
|
<el-button @click="handleRemove(scope.row)" type="text" icon="Delete" /> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
</el-table> |
||||
|
|
||||
|
<!-- 分页 --> |
||||
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="handlePagination" /> |
||||
|
|
||||
|
</el-col> |
||||
|
</el-row> |
||||
|
<!-- 添加或编辑列数据对话框 --> |
||||
|
<!-- 添加或编辑对话框 --> |
||||
|
<el-dialog :title="dialogTitle" v-model="dialogVisible" width="600px"> |
||||
|
<el-form :model="form" ref="formRef" label-width="120px" :rules="formRules"> |
||||
|
<el-form-item label="连接" prop="dbRID"> |
||||
|
<el-select |
||||
|
v-model="form.dbRID" |
||||
|
placeholder="请选择连接" |
||||
|
maxlength="30" |
||||
|
@change="dataChange" |
||||
|
> |
||||
|
<el-option |
||||
|
v-for="dict in dbResourceOldList" |
||||
|
:key="dict.id" |
||||
|
:label="dict.name" |
||||
|
:value="dict.id" |
||||
|
></el-option> |
||||
|
</el-select> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item label="模式" prop="dbSName"> |
||||
|
<el-input v-model="form.dbSName" placeholder="请输入模式名称" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="表名" prop="dbTName"> |
||||
|
<el-input v-model="form.dbTName" placeholder="请输入表名称" /> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item label="是否可见" prop="ctrlType"> |
||||
|
<el-select |
||||
|
v-model="form.ctrlType" |
||||
|
placeholder="请配置是否可见" |
||||
|
maxlength="30" |
||||
|
> |
||||
|
<el-option |
||||
|
v-for="dict in metasecurity_ctr" |
||||
|
:key="dict.value" |
||||
|
:label="dict.label" |
||||
|
:value="dict.value" |
||||
|
></el-option> |
||||
|
</el-select> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="字段名称" prop="dbCName"> |
||||
|
<el-input v-model="form.dbCName" placeholder="请输入字段名称" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="对象类型" prop="objType"> |
||||
|
<el-select |
||||
|
v-model="form.objType" |
||||
|
placeholder="请选择对象类型" |
||||
|
maxlength="30" |
||||
|
@change="changeMetaSecurityObj" |
||||
|
> |
||||
|
<el-option |
||||
|
v-for="dict in metasecurity_obj" |
||||
|
:key="dict.value" |
||||
|
:label="dict.label" |
||||
|
:value="dict.value" |
||||
|
></el-option> |
||||
|
</el-select> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="对象编号" prop="objValue"> |
||||
|
<el-select |
||||
|
v-model="form.objValue" |
||||
|
:multiple="dialogTitle === '添加列配置'" |
||||
|
placeholder="请选择" |
||||
|
maxlength="30" |
||||
|
> |
||||
|
<el-option |
||||
|
v-for="dict in userOrRoleList" |
||||
|
:key="dict.id" |
||||
|
:label="dict.name" |
||||
|
:value="dict.id" |
||||
|
></el-option> |
||||
|
</el-select> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="是否停用" prop="isStop"> |
||||
|
<el-switch v-model="form.isStop" /> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
<template #footer> |
||||
|
<el-button @click="handleCancel">取消</el-button> |
||||
|
<el-button type="primary" @click="handleSave">确定</el-button> |
||||
|
</template> |
||||
|
</el-dialog> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script setup> |
||||
|
import { ref, reactive, onMounted, toRefs } from 'vue'; |
||||
|
import { listMetaSecurityCol, addMetaSecurityCol,getMetaSecurityCol, updateMetaSecurityCol, deleteMetaSecurityCol } from "@/api/meta/metasercurity"; |
||||
|
import { datasourcetree } from "@/api/meta/metatask"; |
||||
|
import { listUser} from "@/api/system/user"; |
||||
|
import { listRole} from "@/api/system/role"; |
||||
|
|
||||
|
const { proxy } = getCurrentInstance(); |
||||
|
const { metasecurity_ctr, metasecurity_obj, metasecurity_type} = proxy.useDict("metasecurity_ctr", "metasecurity_obj", "metasecurity_type"); |
||||
|
|
||||
|
const queryParams = ref({ |
||||
|
dbCName: '', |
||||
|
dbTName: '', |
||||
|
objValue: '', |
||||
|
pageNum: 1, |
||||
|
pageSize: 10 |
||||
|
}); |
||||
|
const single = ref(true); |
||||
|
const multiple = ref(true); |
||||
|
const dbResoursName = ref(undefined); |
||||
|
const clickNode = ref(undefined); |
||||
|
const defaultProps = { |
||||
|
children: "children", |
||||
|
label: "name" |
||||
|
}; |
||||
|
const filterNode = (value, data) => { |
||||
|
if (!value) return true; |
||||
|
return data.name.indexOf(value) !== -1; |
||||
|
}; |
||||
|
const handleNodeClick = (data) => { |
||||
|
if( data.id==99999){ |
||||
|
queryParams.value.dbRID = ""; |
||||
|
}else{ |
||||
|
queryParams.value.dbRID = data.id; |
||||
|
} |
||||
|
|
||||
|
handleQuery(); |
||||
|
}; |
||||
|
const getIconClass = (data) => { |
||||
|
let icon="" |
||||
|
if (data.parentId == '0') icon= 'Monitor'; |
||||
|
if (data.parentId == '99999') icon= 'Coin'; |
||||
|
console.log(icon) |
||||
|
return icon; |
||||
|
}; |
||||
|
const dbResourceOptions = ref(undefined); |
||||
|
const form = ref({ |
||||
|
colId: '', |
||||
|
dbRName: '', |
||||
|
dbRID: 0, |
||||
|
dbSName: '', |
||||
|
dbTName: '', |
||||
|
dbCName: '', |
||||
|
ctrlType: '', |
||||
|
objType: '', |
||||
|
objValue: '', |
||||
|
isStop: false |
||||
|
}); |
||||
|
const ids = ref([]); |
||||
|
const loading = ref(true); |
||||
|
const tableData = ref([]); |
||||
|
const total = ref(0); |
||||
|
const dialogVisible = ref(false); |
||||
|
const dialogTitle = ref('添加列'); |
||||
|
const formRules = { |
||||
|
dbCName: [{ required: true, message: '字段不能为空', trigger: 'blur' }], |
||||
|
dbRName: [{ required: true, message: '连接不能为空', trigger: 'blur' }], |
||||
|
dbTName: [{ required: true, message: '表名不能为空', trigger: 'blur' }], |
||||
|
ctrlType: [{ required: true, message: '控制类型不能为空', trigger: 'change' }] |
||||
|
}; |
||||
|
const dbResourceOldList = ref([]); |
||||
|
|
||||
|
|
||||
|
// 获取数据列表 |
||||
|
const getList = async () => { |
||||
|
loading.value = true; |
||||
|
const response = await listMetaSecurityCol(queryParams.value); |
||||
|
tableData.value = response.rows; |
||||
|
total.value = response.total; |
||||
|
loading.value = false; |
||||
|
}; |
||||
|
function handleSelectionChange(selection) { |
||||
|
ids.value = selection.map(item => item.colId); |
||||
|
single.value = selection.length != 1; |
||||
|
multiple.value = !selection.length; |
||||
|
} |
||||
|
// 搜索 |
||||
|
const handleQuery = () => { |
||||
|
queryParams.pageNum = 1; |
||||
|
getList(); |
||||
|
}; |
||||
|
// 根据 objValue 查找用户名称 |
||||
|
const getUserName = (objValue) => { |
||||
|
if (!objValue) return ''; |
||||
|
const values = objValue.split(','); // 处理多选值 |
||||
|
const names = values.map(value => { |
||||
|
const user = userList.value.find(user => user.id === value); |
||||
|
return user ? user.name : value; |
||||
|
}); |
||||
|
return names.join(', '); |
||||
|
}; |
||||
|
|
||||
|
// 根据 objValue 查找角色名称 |
||||
|
const getRoleName = (objValue) => { |
||||
|
if (!objValue) return ''; |
||||
|
const values = objValue.split(','); // 处理多选值 |
||||
|
const names = values.map(value => { |
||||
|
const role = roleList.value.find(role => role.id == value); |
||||
|
return role ? role.name : value; |
||||
|
}); |
||||
|
return names.join(', '); |
||||
|
}; |
||||
|
function dataChange(data) { |
||||
|
|
||||
|
// 从 dbResourceOldList 中查找对应的 name |
||||
|
const selectedItem = dbResourceOldList.value.find(item => item.id === data); |
||||
|
if (selectedItem) { |
||||
|
// 如果找到对应的项,将 name 赋值给 form.value.dbRName |
||||
|
form.value.dbRName = selectedItem.name; |
||||
|
} else { |
||||
|
// 如果未找到,清空 form.value.dbRName |
||||
|
form.value.dbRName = ''; |
||||
|
} |
||||
|
} |
||||
|
// 翻页 |
||||
|
const handlePagination = (pageNum, pageSize) => { |
||||
|
queryParams.pageNum = pageNum; |
||||
|
queryParams.pageSize = pageSize; |
||||
|
getList(); |
||||
|
}; |
||||
|
const roleList = ref([]); |
||||
|
const userList = ref([]); |
||||
|
const userOrRoleList = 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}) |
||||
|
}); |
||||
|
}); |
||||
|
} |
||||
|
function changeMetaSecurityObj(data){ |
||||
|
if(data=="0"){ |
||||
|
userOrRoleList.value=userList.value |
||||
|
|
||||
|
}else { |
||||
|
userOrRoleList.value=roleList.value |
||||
|
|
||||
|
} |
||||
|
form.value.objValue = dialogTitle.value === '添加列配置' ? [] : ''; |
||||
|
|
||||
|
} |
||||
|
const getDeptTree = async () => { |
||||
|
|
||||
|
|
||||
|
const treeResponse = await datasourcetree(); |
||||
|
if (treeResponse.success && treeResponse.rows.length > 0) { |
||||
|
dbResourceOldList.value = treeResponse.rows; |
||||
|
const childrenList = dbResourceOldList.value.map(element => ({ ...element, parentId: "99999" })); |
||||
|
dbResourceOptions.value = [{ id: 99999, name: "数据源", parentId: 0, children: childrenList }]; |
||||
|
} |
||||
|
|
||||
|
}; |
||||
|
// 打开编辑对话框 |
||||
|
const handleEdit = (row) => { |
||||
|
reset(); |
||||
|
const colId = row.colId || ids.value; |
||||
|
getMetaSecurityCol(colId).then(response => { |
||||
|
form.value = response.data; |
||||
|
dialogVisible.value = true; |
||||
|
dialogTitle.value = "编辑列配置"; |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
// 保存数据 |
||||
|
|
||||
|
function handleSave() { |
||||
|
proxy.$refs["formRef"].validate(valid => { |
||||
|
if (valid) { |
||||
|
if (form.value.colId != undefined&&form.value.colId !="") { |
||||
|
updateMetaSecurityCol(form.value).then(response => { |
||||
|
proxy.$modal.msgSuccess("修改成功"); |
||||
|
dialogVisible.value = false; |
||||
|
getList(); |
||||
|
}); |
||||
|
} else { |
||||
|
const submitData = { ...form.value }; |
||||
|
submitData.objValue = submitData.objValue.join(','); |
||||
|
addMetaSecurityCol(submitData).then(response => { |
||||
|
proxy.$modal.msgSuccess("新增成功"); |
||||
|
dialogVisible.value = false; |
||||
|
getList(); |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
/** 表单重置 */ |
||||
|
function reset() { |
||||
|
form.value = { |
||||
|
colId: '', |
||||
|
dbRName: '', |
||||
|
dbRID: undefined, |
||||
|
dbSName: '', |
||||
|
dbTName: '', |
||||
|
dbCName: '', |
||||
|
ctrlType: '', |
||||
|
objType: '', |
||||
|
objValue: dialogTitle.value === '添加列配置' ? [] : '', // 根据模式初始化 |
||||
|
isStop: false |
||||
|
}; |
||||
|
proxy.resetForm("formRef"); |
||||
|
} |
||||
|
// 删除数据 |
||||
|
const handleRemove = async (row) => { |
||||
|
|
||||
|
|
||||
|
const colId = row.colId || ids.value; |
||||
|
proxy.$modal.confirm('是否确认删除ID为"' + colId + '"的数据项?').then(function () { |
||||
|
return deleteMetaSecurityCol(colId); |
||||
|
}).then(() => { |
||||
|
getList(); |
||||
|
proxy.$modal.msgSuccess("删除成功"); |
||||
|
}).catch(() => {}); |
||||
|
}; |
||||
|
const handleAdd = () => { |
||||
|
dialogTitle.value = '添加列配置'; |
||||
|
reset(); |
||||
|
dialogVisible.value = true; |
||||
|
}; |
||||
|
|
||||
|
// 取消编辑 |
||||
|
const handleCancel = () => { |
||||
|
dialogVisible.value = false; |
||||
|
form.value.colId = ''; |
||||
|
form.value.dbCName = ''; |
||||
|
form.value.ctrlType = ''; |
||||
|
form.value.ctrl_value = ''; |
||||
|
form.value.isStop = false; |
||||
|
}; |
||||
|
|
||||
|
onMounted(() => { |
||||
|
getList(); |
||||
|
getDeptTree(); |
||||
|
getRoleOrUserList(); |
||||
|
}); |
||||
|
watch(dbResoursName, (val) => { |
||||
|
|
||||
|
proxy.$refs["tree"].filter(val); |
||||
|
|
||||
|
|
||||
|
|
||||
|
}); |
||||
|
</script> |
||||
|
<style scoped> |
||||
|
/* 添加样式 */ |
||||
|
</style> |
@ -0,0 +1,489 @@ |
|||||
|
<template> |
||||
|
<div class="app-container"> |
||||
|
<el-row :gutter="20"> |
||||
|
<el-col :span="4" :xs="24"> |
||||
|
<div class="head-container"> |
||||
|
<el-input |
||||
|
v-model="dbResoursName" |
||||
|
placeholder="请输入数据源" |
||||
|
clearable |
||||
|
prefix-icon="search" |
||||
|
style="margin-bottom: 20px" |
||||
|
/> |
||||
|
</div> |
||||
|
<div class="head-container"> |
||||
|
<el-tree |
||||
|
:data="dbResourceOptions" |
||||
|
:props="defaultProps" |
||||
|
:expand-on-click-node="false" |
||||
|
:filter-node-method="filterNode" |
||||
|
ref="tree" |
||||
|
node-key="id" |
||||
|
default-expand-all |
||||
|
highlight-current |
||||
|
@node-click="handleNodeClick" |
||||
|
> |
||||
|
<template #default="{ node, data }"> |
||||
|
<span class="custom-tree-node"> |
||||
|
<i :class="getIconClass(data)"></i> |
||||
|
|
||||
|
<span>{{ data.name }}</span> |
||||
|
</span> |
||||
|
</template> |
||||
|
</el-tree> |
||||
|
</div> |
||||
|
</el-col> |
||||
|
|
||||
|
<el-col :span="20" :xs="24"> |
||||
|
<!-- 搜索框 --> |
||||
|
<el-form :model="queryParams" ref="queryRef" :inline="true" > |
||||
|
<el-form-item label="模式名" prop="dbSName"> |
||||
|
<el-input v-model="queryParams.dbSName" placeholder="请输入模式名称" clearable /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="表名" prop="dbTName"> |
||||
|
<el-input v-model="queryParams.dbTName" placeholder="请输入行名称" clearable /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="字段名" prop="dbCName"> |
||||
|
<el-input v-model="queryParams.dbCName" placeholder="请输入行名称" clearable /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="用户角色" prop="objValue"> |
||||
|
<el-input v-model="queryParams.objValue" placeholder="请输入行名称" clearable /> |
||||
|
</el-form-item> |
||||
|
<el-form-item> |
||||
|
<el-button type="primary" @click="handleQuery">搜索</el-button> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
|
||||
|
<el-row :gutter="10" class="mb8"> |
||||
|
<el-col :span="1.5"> |
||||
|
<el-button |
||||
|
type="primary" |
||||
|
plain |
||||
|
icon="Plus" |
||||
|
@click="handleAdd" |
||||
|
v-hasPermi="['meta:metaSecurityRow:add']" |
||||
|
>新增</el-button> |
||||
|
</el-col> |
||||
|
<el-col :span="1.5"> |
||||
|
<el-button |
||||
|
type="success" |
||||
|
plain |
||||
|
icon="Edit" |
||||
|
:disabled="single" |
||||
|
@click="handleEdit" |
||||
|
v-hasPermi="['meta:metaSecurityRow:edit']" |
||||
|
>修改</el-button> |
||||
|
</el-col> |
||||
|
<el-col :span="1.5"> |
||||
|
<el-button |
||||
|
type="danger" |
||||
|
plain |
||||
|
icon="Delete" |
||||
|
:disabled="multiple" |
||||
|
@click="handleRemove" |
||||
|
v-hasPermi="['meta:metaSecurityRow:remove']" |
||||
|
>删除</el-button> |
||||
|
</el-col> |
||||
|
|
||||
|
</el-row> |
||||
|
<!-- 表格展示 --> |
||||
|
<el-table v-loading="loading" :data="tableData" @selection-change="handleSelectionChange"> |
||||
|
<el-table-column type="selection" width="55" align="center" /> |
||||
|
|
||||
|
<el-table-column label="连接" align="center" prop="dbRName" /> |
||||
|
<el-table-column label="模式" align="center" prop="dbSName" /> |
||||
|
<el-table-column label="表名" align="center" prop="dbTName" /> |
||||
|
<el-table-column label="字段名" align="center" prop="dbCName" /> |
||||
|
<el-table-column label="控制方式" align="center" prop="ctrlType" > |
||||
|
<template #default="scope"> |
||||
|
<dict-tag |
||||
|
:options="metasecurity_type" |
||||
|
:value="scope.row.ctrlType" |
||||
|
/> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column label="控制值" align="center" prop="ctrlValue" /> |
||||
|
<el-table-column label="对象类型" align="center" prop="objType" > |
||||
|
<template #default="scope"> |
||||
|
<dict-tag |
||||
|
:options="metasecurity_obj" |
||||
|
:value="scope.row.objType" |
||||
|
/> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column label="对象编号" align="center" prop="objValue" > |
||||
|
<template #default="scope"> |
||||
|
<span v-if="scope.row.objType === '0'"> |
||||
|
{{ getUserName(scope.row.objValue) }} |
||||
|
</span> |
||||
|
<span v-else-if="scope.row.objType === '1'"> |
||||
|
{{ getRoleName(scope.row.objValue) }} |
||||
|
</span> |
||||
|
<span v-else> |
||||
|
{{ scope.row.objValue }} |
||||
|
</span> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column label="是否停用" align="center" prop="isStop" /> |
||||
|
<el-table-column label="操作" align="center" width="180"> |
||||
|
<template #default="scope"> |
||||
|
<el-button @click="handleEdit(scope.row)" type="text" icon="Edit" /> |
||||
|
<el-button @click="handleRemove(scope.row)" type="text" icon="Delete" /> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
</el-table> |
||||
|
|
||||
|
<!-- 分页 --> |
||||
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="handlePagination" /> |
||||
|
</el-col> |
||||
|
</el-row> |
||||
|
<!-- 添加或编辑行数据对话框 --> |
||||
|
<!-- 添加或编辑对话框 --> |
||||
|
<el-dialog :title="dialogTitle" v-model="dialogVisible" width="600px"> |
||||
|
<el-form :model="form" ref="formRef" label-width="120px" :rules="formRules"> |
||||
|
<el-form-item label="连接" prop="dbRID"> |
||||
|
<el-select |
||||
|
v-model="form.dbRID" |
||||
|
placeholder="请选择连接" |
||||
|
maxlength="30" |
||||
|
@change="dataChange" |
||||
|
> |
||||
|
<el-option |
||||
|
v-for="dict in dbResourceOldList" |
||||
|
:key="dict.id" |
||||
|
:label="dict.name" |
||||
|
:value="dict.id" |
||||
|
></el-option> |
||||
|
</el-select> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="模式" prop="dbSName"> |
||||
|
<el-input v-model="form.dbSName" placeholder="请输入模式" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="表名" prop="dbTName"> |
||||
|
<el-input v-model="form.dbTName" placeholder="请输入表名" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="字段名" prop="dbCName"> |
||||
|
<el-input v-model="form.dbCName" placeholder="请输入字段名" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="控制方式" prop="ctrlType"> |
||||
|
<el-select |
||||
|
v-model="form.ctrlType" |
||||
|
placeholder="请输入控制方式" |
||||
|
maxlength="30" |
||||
|
> |
||||
|
<el-option |
||||
|
v-for="dict in metasecurity_type" |
||||
|
:key="dict.value" |
||||
|
:label="dict.label" |
||||
|
:value="dict.value" |
||||
|
></el-option> |
||||
|
</el-select> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="控制值" prop="ctrlValue"> |
||||
|
<el-input v-model="form.ctrlValue" placeholder="请输入控制值" /> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item label="对象类型" prop="objType"> |
||||
|
<el-select |
||||
|
v-model="form.objType" |
||||
|
placeholder="请选择对象类型" |
||||
|
maxlength="30" |
||||
|
@change="changeMetaSecurityObj" |
||||
|
> |
||||
|
<el-option |
||||
|
v-for="dict in metasecurity_obj" |
||||
|
:key="dict.value" |
||||
|
:label="dict.label" |
||||
|
:value="dict.value" |
||||
|
></el-option> |
||||
|
</el-select> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="对象编号" prop="objValue"> |
||||
|
<el-select |
||||
|
v-model="form.objValue" |
||||
|
placeholder="请选择" |
||||
|
:multiple="dialogTitle === '添加行配置'" |
||||
|
maxlength="30" |
||||
|
> |
||||
|
<el-option |
||||
|
v-for="dict in userOrRoleList" |
||||
|
:key="dict.id" |
||||
|
:label="dict.name" |
||||
|
:value="dict.id" |
||||
|
></el-option> |
||||
|
</el-select></el-form-item> |
||||
|
<el-form-item label="是否停用" prop="isStop"> |
||||
|
<el-switch v-model="form.isStop" /> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
<template #footer> |
||||
|
<el-button @click="handleCancel">取消</el-button> |
||||
|
<el-button type="primary" @click="handleSave">确定</el-button> |
||||
|
</template> |
||||
|
</el-dialog> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script setup> |
||||
|
import { ref, reactive, onMounted, toRefs } from 'vue'; |
||||
|
import { listMetaSecurityRow, addMetaSecurityRow,getMetaSecurityRow, updateMetaSecurityRow, deleteMetaSecurityRow } from "@/api/meta/metasercurity"; |
||||
|
const { proxy } = getCurrentInstance(); |
||||
|
const { metasecurity_ctr, metasecurity_obj, metasecurity_type} = proxy.useDict("metasecurity_ctr", "metasecurity_obj", "metasecurity_type"); |
||||
|
import { datasourcetree } from "@/api/meta/metatask"; |
||||
|
import { listUser} from "@/api/system/user"; |
||||
|
import { listRole} from "@/api/system/role"; |
||||
|
const queryParams = ref({ |
||||
|
dbCName: '', |
||||
|
dbTName: '', |
||||
|
objValue: '', |
||||
|
pageNum: 1, |
||||
|
pageSize: 10 |
||||
|
}); |
||||
|
const single = ref(true); |
||||
|
const multiple = ref(true); |
||||
|
function dataChange(data) { |
||||
|
|
||||
|
// 从 dbResourceOldList 中查找对应的 name |
||||
|
const selectedItem = dbResourceOldList.value.find(item => item.id === data); |
||||
|
if (selectedItem) { |
||||
|
// 如果找到对应的项,将 name 赋值给 form.value.dbRName |
||||
|
form.value.dbRName = selectedItem.name; |
||||
|
} else { |
||||
|
// 如果未找到,清空 form.value.dbRName |
||||
|
form.value.dbRName = ''; |
||||
|
} |
||||
|
} |
||||
|
const dbResourceOptions = ref(undefined); |
||||
|
const form = ref({ |
||||
|
dbRName: '', // 连接 |
||||
|
ctrlSystem: '', // 连接 |
||||
|
dbRID: undefined, |
||||
|
dbSName: '', // 模式 |
||||
|
dbTName: '', // 表名 |
||||
|
ctrlType: '', // 控制方式 |
||||
|
ctrlValue: '', // 固定值 |
||||
|
ctrlTable: '', // 控制表 |
||||
|
ctrlCol: '', // 控制字段 |
||||
|
objType: '', // 对象类型 |
||||
|
objValue: '', // 对象 |
||||
|
isStop: false // 是否停用 |
||||
|
}); |
||||
|
const ids = ref([]); |
||||
|
const loading = ref(true); |
||||
|
const tableData = ref([]); |
||||
|
const total = ref(0); |
||||
|
const dialogVisible = ref(false); |
||||
|
const dialogTitle = ref('添加行'); |
||||
|
const formRules = { |
||||
|
dbRName: [{ required: true, message: '连接不能为空', trigger: 'blur' }], |
||||
|
dbSName: [{ required: true, message: '模式不能为空', trigger: 'blur' }], |
||||
|
dbTName: [{ required: true, message: '表名不能为空', trigger: 'blur' }], |
||||
|
dbCName: [{ required: true, message: '字段名不能为空', trigger: 'blur' }], |
||||
|
ctrlType: [{ required: true, message: '控制方式不能为空', trigger: 'blur' }], |
||||
|
}; |
||||
|
const dbResourceOldList = ref([]); |
||||
|
const roleList = ref([]); |
||||
|
const userList = ref([]); |
||||
|
const dbResoursName = ref(undefined); |
||||
|
const defaultProps = { |
||||
|
children: "children", |
||||
|
label: "name" |
||||
|
}; |
||||
|
const filterNode = (value, data) => { |
||||
|
if (!value) return true; |
||||
|
return data.name.indexOf(value) !== -1; |
||||
|
}; |
||||
|
const handleNodeClick = (data) => { |
||||
|
if( data.id==99999){ |
||||
|
queryParams.value.dbRID = ""; |
||||
|
}else{ |
||||
|
queryParams.value.dbRID = data.id; |
||||
|
} |
||||
|
|
||||
|
handleQuery(); |
||||
|
}; |
||||
|
const getIconClass = (data) => { |
||||
|
let icon="" |
||||
|
if (data.parentId == '0') icon= 'Monitor'; |
||||
|
if (data.parentId == '99999') icon= 'Coin'; |
||||
|
console.log(icon) |
||||
|
return icon; |
||||
|
}; |
||||
|
const userOrRoleList = 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}) |
||||
|
}); |
||||
|
}); |
||||
|
} |
||||
|
function changeMetaSecurityObj(data){ |
||||
|
if(data=="0"){ |
||||
|
userOrRoleList.value=userList.value |
||||
|
|
||||
|
}else { |
||||
|
userOrRoleList.value=roleList.value |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
form.value.objValue = dialogTitle.value === '添加行配置' ? [] : ''; |
||||
|
|
||||
|
} |
||||
|
const getDeptTree = async () => { |
||||
|
|
||||
|
|
||||
|
const treeResponse = await datasourcetree(); |
||||
|
if (treeResponse.success && treeResponse.rows.length > 0) { |
||||
|
dbResourceOldList.value = treeResponse.rows; |
||||
|
const childrenList = dbResourceOldList.value.map(element => ({ ...element, parentId: "99999" })); |
||||
|
dbResourceOptions.value = [{ id: 99999, name: "数据源", parentId: 0, children: childrenList }]; |
||||
|
} |
||||
|
}; |
||||
|
// 获取数据行表 |
||||
|
const getList = async () => { |
||||
|
loading.value = true; |
||||
|
const response = await listMetaSecurityRow(queryParams.value); |
||||
|
tableData.value = response.rows; |
||||
|
total.value = response.total; |
||||
|
loading.value = false; |
||||
|
}; |
||||
|
function handleSelectionChange(selection) { |
||||
|
ids.value = selection.map(item => item.rowId); |
||||
|
single.value = selection.length != 1; |
||||
|
multiple.value = !selection.length; |
||||
|
} |
||||
|
// 搜索 |
||||
|
const handleQuery = () => { |
||||
|
queryParams.pageNum = 1; |
||||
|
getList(); |
||||
|
}; |
||||
|
|
||||
|
// 翻页 |
||||
|
const handlePagination = (pageNum, pageSize) => { |
||||
|
queryParams.pageNum = pageNum; |
||||
|
queryParams.pageSize = pageSize; |
||||
|
getList(); |
||||
|
}; |
||||
|
|
||||
|
// 打开编辑对话框 |
||||
|
const handleEdit = (row) => { |
||||
|
reset(); |
||||
|
const rowId = row.rowId || ids.value; |
||||
|
getMetaSecurityRow(rowId).then(response => { |
||||
|
form.value = response.data; |
||||
|
dialogVisible.value = true; |
||||
|
dialogTitle.value = "编辑行配置"; |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
// 保存数据 |
||||
|
|
||||
|
function handleSave() { |
||||
|
proxy.$refs["formRef"].validate(valid => { |
||||
|
if (valid) { |
||||
|
if (form.value.rowId != undefined&&form.value.rowId !="") { |
||||
|
updateMetaSecurityRow(form.value).then(response => { |
||||
|
proxy.$modal.msgSuccess("修改成功"); |
||||
|
dialogVisible.value = false; |
||||
|
getList(); |
||||
|
}); |
||||
|
} else { |
||||
|
const submitData = { ...form.value }; |
||||
|
submitData.objValue = submitData.objValue.join(','); |
||||
|
addMetaSecurityRow(submitData).then(response => { |
||||
|
proxy.$modal.msgSuccess("新增成功"); |
||||
|
dialogVisible.value = false; |
||||
|
getList(); |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
/** 表单重置 */ |
||||
|
function reset() { |
||||
|
form.value = { |
||||
|
rowId: '', |
||||
|
dbRName: '', |
||||
|
dbRID: undefined, |
||||
|
dbSName: '', |
||||
|
dbTName: '', |
||||
|
dbCName: '', |
||||
|
ctrlType: '', |
||||
|
objType: '', |
||||
|
objValue: dialogTitle.value === '添加行配置' ? [] : '', // 根据模式初始化 |
||||
|
isStop: false |
||||
|
}; |
||||
|
proxy.resetForm("formRef"); |
||||
|
} |
||||
|
// 删除数据 |
||||
|
const handleRemove = async (row) => { |
||||
|
|
||||
|
|
||||
|
const rowId = row.rowId || ids.value; |
||||
|
proxy.$modal.confirm('是否确认删除ID为"' + rowId + '"的数据项?').then(function () { |
||||
|
return deleteMetaSecurityRow(rowId); |
||||
|
}).then(() => { |
||||
|
getList(); |
||||
|
proxy.$modal.msgSuccess("删除成功"); |
||||
|
}).catch(() => {}); |
||||
|
}; |
||||
|
const handleAdd = () => { |
||||
|
reset(); |
||||
|
dialogTitle.value = '添加行配置'; |
||||
|
dialogVisible.value = true; |
||||
|
form.value.objValue = []; // 新增时初始化为空数组 |
||||
|
}; |
||||
|
// 根据 objValue 查找用户名称 |
||||
|
const getUserName = (objValue) => { |
||||
|
if (!objValue) return ''; |
||||
|
const values = objValue.split(','); // 处理多选值 |
||||
|
const names = values.map(value => { |
||||
|
const user = userList.value.find(user => user.id === value); |
||||
|
return user ? user.name : value; |
||||
|
}); |
||||
|
return names.join(', '); |
||||
|
}; |
||||
|
|
||||
|
// 根据 objValue 查找角色名称 |
||||
|
const getRoleName = (objValue) => { |
||||
|
if (!objValue) return ''; |
||||
|
const values = objValue.split(','); // 处理多选值 |
||||
|
const names = values.map(value => { |
||||
|
const role = roleList.value.find(role => role.id == value); |
||||
|
return role ? role.name : value; |
||||
|
}); |
||||
|
return names.join(', '); |
||||
|
}; |
||||
|
// 取消编辑 |
||||
|
const handleCancel = () => { |
||||
|
dialogVisible.value = false; |
||||
|
form.value.rowId = ''; |
||||
|
form.value.dbCName = ''; |
||||
|
form.value.ctrlType = ''; |
||||
|
form.value.ctrl_value = ''; |
||||
|
form.value.isStop = false; |
||||
|
}; |
||||
|
|
||||
|
onMounted(() => { |
||||
|
getList(); |
||||
|
getDeptTree(); |
||||
|
getRoleOrUserList(); |
||||
|
}); |
||||
|
watch(dbResoursName, (val) => { |
||||
|
if (val) { |
||||
|
// Filter the department tree when dbResoursName changes |
||||
|
proxy.$refs["tree"].filter(val); |
||||
|
|
||||
|
|
||||
|
} |
||||
|
}); |
||||
|
</script> |
||||
|
<style scoped> |
||||
|
/* 添加样式 */ |
||||
|
</style> |
Loading…
Reference in new issue