Browse Source

代码提交

master
si@aidatagov.com 5 days ago
parent
commit
616b5204a2
  1. 74
      vue-fastapi-backend/module_admin/controller/metadata_config_controller.py
  2. 73
      vue-fastapi-backend/module_admin/dao/metadata_config_dao.py
  3. 4
      vue-fastapi-backend/module_admin/entity/vo/metadata_config_vo.py
  4. 120
      vue-fastapi-backend/module_admin/service/metadata_config_service.py
  5. 63
      vue-fastapi-frontend/src/api/taskMetadataConfig/metadataConfig.js
  6. 352
      vue-fastapi-frontend/src/views/metadataConfig/taskBizConfig/index.vue

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

@ -10,9 +10,9 @@ from module_admin.entity.vo.metadata_config_vo import (
SecuBizConfigModel, SecuBizConfigModel,
SecuBizConfigPageQueryModel, SecuBizConfigPageQueryModel,
SecuBizConfigQueryModel, SecuBizConfigQueryModel,
SecuBizConfigAddModel,
SecuBizPermiConfigModel, SecuBizPermiConfigModel,
SecuBizPermiConfigBatchModel, SecuBizPermiConfigBatchModel,
SecuBizConfigAddModel,
SecuBizPermiConfigPageQueryModel, SecuBizPermiConfigPageQueryModel,
BatchBusiLabelConfigModel, BatchBusiLabelConfigModel,
BatchDataopLabelConfigModel, BatchDataopLabelConfigModel,
@ -23,6 +23,10 @@ from module_admin.entity.vo.metadata_config_vo import (
BatchDatatypeLabelConfigPageQueryModel, BatchDatatypeLabelConfigPageQueryModel,
DatasecConfigPageQueryModel, DatasecConfigPageQueryModel,
DatasecConfigModel, DatasecConfigModel,
TaskBizConfigModel,
TaskBizConfigPageQueryModel,
TaskBizConfigQueryModel,
TaskBizConfigAddModel,
) )
from module_admin.service.metadata_config_service import MetadataConfigService from module_admin.service.metadata_config_service import MetadataConfigService
from module_admin.service.batch_label_config_service import BatchLabelConfigService from module_admin.service.batch_label_config_service import BatchLabelConfigService
@ -593,7 +597,7 @@ async def DS_meta_metatask_detail(
return ResponseUtil.success(data=edit_config_result) return ResponseUtil.success(data=edit_config_result)
@metadataConfigController.delete('/DS') @metadataConfigController.delete('/DS')
async def DS_meta_metatask( async def DS_meta_metatask_delete(
request: Request, request: Request,
process: ParmScheduleVo, process: ParmScheduleVo,
query_db: AsyncSession = Depends(get_db), query_db: AsyncSession = Depends(get_db),
@ -603,3 +607,69 @@ async def DS_meta_metatask(
edit_config_result = await DatasecConfigService.ds_metatask_delete(request, query_db, process,current_user) edit_config_result = await DatasecConfigService.ds_metatask_delete(request, query_db, process,current_user)
return ResponseUtil.success(msg=edit_config_result) return ResponseUtil.success(msg=edit_config_result)
# ----------元数据标签调度任务 ----------
@metadataConfigController.get('/taskBizConfig/list', response_model=PageResponseModel)
async def get_task_biz_config_list(
request: Request,
query: TaskBizConfigQueryModel = Depends(TaskBizConfigPageQueryModel.as_query),
db: AsyncSession = Depends(get_db),
):
result = await MetadataConfigService.get_task_biz_config_list_services(db, query, is_page=True)
return ResponseUtil.success(model_content=result)
@metadataConfigController.get('/taskBizConfig/listall')
async def get_task_biz_config_list_all(
request: Request,
query: TaskBizConfigQueryModel = Depends(TaskBizConfigPageQueryModel.as_query),
db: AsyncSession = Depends(get_db),
):
result = await MetadataConfigService.get_task_biz_config_list_services(db, query, is_page=False)
return ResponseUtil.success(data=result)
@metadataConfigController.post('/taskBizConfig/add')
@ValidateFields(['bizModule', 'configType', 'data_sec_lvl', 'applyType'])
async def add_task_biz_config(
item: TaskBizConfigAddModel,
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_task_biz_config_services(db, item)
return ResponseUtil.success(msg=result.message)
@metadataConfigController.post('/taskBizConfig/edit')
@ValidateFields(['onum'])
async def edit_task_biz_config(
item: TaskBizConfigAddModel,
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_task_biz_config_services(db, item)
return ResponseUtil.success(msg=result.message)
@metadataConfigController.delete('/taskBizConfig/delete')
async def delete_task_biz_config(onums: str, db: AsyncSession = Depends(get_db)):
result = await MetadataConfigService.delete_task_biz_config_services(db, onums)
return ResponseUtil.success(msg=result.message)
@metadataConfigController.get('/taskBizConfig/detail')
async def get_task_biz_config_detail(onum: str, db: AsyncSession = Depends(get_db)):
data = await MetadataConfigService.get_task_biz_config_detail_services(db, onum)
return ResponseUtil.success(data=data)
@metadataConfigController.get('/taskBizConfigRela/list/{bizOnum}')
async def get_task_biz_rela_config_list(
bizOnum: int,
query_db: AsyncSession = Depends(get_db),
):
ai_chat_list_result = await MetadataConfigService.get_task_biz_config_rela_list_services(query_db, bizOnum)
logger.info('获取成功')
return ResponseUtil.success(data=ai_chat_list_result)

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

@ -2,7 +2,9 @@ from datetime import datetime, time
from sqlalchemy import delete, select, update,and_ 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,MetadataExtractInfo # ORM 类 from module_admin.entity.do.meta_do import MetadataClas,MetadataExtractInfo # ORM 类
from module_admin.entity.do.metadata_config_do import MetadataSec,SecuBizConfig,SecuBizPermiConfig,SecuBizConfigRela,DatasecConfig # ORM 类 from module_admin.entity.do.metadata_config_do import MetadataSec,SecuBizConfig,SecuBizPermiConfig,SecuBizConfigRela,DatasecConfig ,\
TaskBizConfigRela,TaskBizConfig
# ORM 类
from typing import List from typing import List
from sqlalchemy.orm import joinedload from sqlalchemy.orm import joinedload
@ -249,6 +251,9 @@ class MetadataConfigDao:
async def delete_biz_rela_dao(cls, db: AsyncSession, biz_onum: int): async def delete_biz_rela_dao(cls, db: AsyncSession, biz_onum: int):
await db.execute(delete(SecuBizConfigRela).where(SecuBizConfigRela.biz_onum == biz_onum) ) await db.execute(delete(SecuBizConfigRela).where(SecuBizConfigRela.biz_onum == biz_onum) )
@classmethod @classmethod
async def delete_biz_rela_batch(cls, db: AsyncSession, bonum_list: list[int]):
await db.execute(delete(SecuBizConfigRela).where(SecuBizConfigRela.biz_onum.in_(bonum_list)) )
@classmethod
async def add_batch_biz_rela_dao(cls, db: AsyncSession, rela_list: List[SecuBizConfigRela]): async def add_batch_biz_rela_dao(cls, db: AsyncSession, rela_list: List[SecuBizConfigRela]):
db.add_all(rela_list) db.add_all(rela_list)
await db.flush() await db.flush()
@ -311,3 +316,69 @@ class MetadataConfigDao:
批量删除任务配置 批量删除任务配置
""" """
await db.execute(delete(DatasecConfig).where(DatasecConfig.onum.in_(onum_list))) await db.execute(delete(DatasecConfig).where(DatasecConfig.onum.in_(onum_list)))
# ----------------------------------元数据标签调度------------------------------
@classmethod
async def get_task_biz_config_list(cls, db: AsyncSession, query_object, is_page: bool = False):
query = select(TaskBizConfig).where(
TaskBizConfig.risk_lvl.like(f"%{query_object.risk_lvl}%") if query_object.risk_lvl else True,
TaskBizConfig.isStop == query_object.isStop if query_object.isStop is not None else True,
TaskBizConfig.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(TaskBizConfig.create_time.desc())
return await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
@classmethod
async def add_task_biz_config(cls, db: AsyncSession, obj):
db_obj = TaskBizConfig(**obj.model_dump())
db.add(db_obj)
await db.flush()
return db_obj
@classmethod
async def edit_task_biz_config(cls, db: AsyncSession, onum: int, update_data: dict):
await db.execute(
update(TaskBizConfig).where(TaskBizConfig.onum == onum).values(**update_data)
)
@classmethod
async def delete_task_biz_config(cls, db: AsyncSession, onum_list: List[int]):
await db.execute(
delete(TaskBizConfig).where(TaskBizConfig.onum.in_(onum_list))
)
@classmethod
async def get_task_biz_config_detail_by_id(cls, db: AsyncSession, onum: int):
result = await db.execute(
select(TaskBizConfig).where(TaskBizConfig.onum == onum)
)
return result.scalars().first()
# ✅ 使用 TaskBizConfigRela 替代原来的 SecuBizConfigRela
@classmethod
async def delete_task_rela_dao(cls, db: AsyncSession, biz_onum: int):
await db.execute(
delete(TaskBizConfigRela).where(TaskBizConfigRela.biz_onum == biz_onum)
)
@classmethod
async def delete_task_rela_batch(cls, db: AsyncSession, bonum_list: List[int]):
await db.execute(
delete(TaskBizConfigRela).where(TaskBizConfigRela.biz_onum.in_(bonum_list))
)
@classmethod
async def add_batch_task_rela_dao(cls, db: AsyncSession, rela_list: List[TaskBizConfigRela]):
db.add_all(rela_list)
await db.flush()
@classmethod
async def get_task_rela_by_biz_id(cls, db: AsyncSession, biz_onum: int):
result = await db.execute(
select(MetadataExtractInfo)
.join(TaskBizConfigRela, MetadataExtractInfo.onum == TaskBizConfigRela.tab_onum)
.where(TaskBizConfigRela.biz_onum == biz_onum)
)
return result.scalars().all()

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

@ -362,6 +362,10 @@ class TaskBizConfigAddModel(BaseModel):
create_time: Optional[datetime] = Field(default=None, description='创建时间') create_time: Optional[datetime] = Field(default=None, description='创建时间')
update_by: Optional[str] = Field(default=None, description='更新者') update_by: Optional[str] = Field(default=None, description='更新者')
update_time: Optional[datetime] = Field(default=None, description='更新时间') update_time: Optional[datetime] = Field(default=None, description='更新时间')
status: Optional[str] = Field(default="N", description="状态")
ds_time: Optional[datetime] = Field(default=None, description="调度时间")
ds_ids: Optional[str] = Field(default=None, description="任务ID")
schId: Optional[str] = Field(default=None, description="调度id")
tab_onum_list: List[int] = Field(default=None, description='表id列表') tab_onum_list: List[int] = Field(default=None, description='表id列表')
class TaskBizConfigModel(BaseModel): class TaskBizConfigModel(BaseModel):
""" """

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

@ -2,9 +2,11 @@ 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,SecuBizConfigAddModel,SecuBizConfigRelaModel,\ from module_admin.entity.vo.metadata_config_vo import MetadataClasModel,SecuBizConfigAddModel,SecuBizConfigRelaModel,\
SecuBizPermiConfigBatchModel,MetadataClasPageQueryModel,MetadataSecModel,MetadataSecPageQueryModel,SecuBizConfigModel ,SecuBizConfigQueryModel,SecuBizPermiConfigModel, SecuBizPermiConfigQueryModel SecuBizPermiConfigBatchModel,MetadataClasPageQueryModel,MetadataSecModel,MetadataSecPageQueryModel,SecuBizConfigModel ,\
SecuBizConfigQueryModel,SecuBizPermiConfigModel, SecuBizPermiConfigQueryModel,\
TaskBizConfigAddModel, TaskBizConfigQueryModel,TaskBizConfigModel,TaskBizConfigRelaModel
from utils.common_util import CamelCaseUtil from utils.common_util import CamelCaseUtil
from module_admin.entity.do.metadata_config_do import SecuBizConfigRela # ORM 类 from module_admin.entity.do.metadata_config_do import SecuBizConfigRela,TaskBizConfigRela # ORM 类
from exceptions.exception import ServiceException from exceptions.exception import ServiceException
import uuid import uuid
from typing import List from typing import List
@ -250,6 +252,7 @@ class MetadataConfigService:
try: try:
await MetadataConfigDao.delete_biz_config(db, id_list) await MetadataConfigDao.delete_biz_config(db, id_list)
await MetadataConfigDao.delete_biz_rela_batch(db, id_list)
await db.commit() await db.commit()
return CrudResponseModel(is_success=True, message="删除成功") return CrudResponseModel(is_success=True, message="删除成功")
except Exception as e: except Exception as e:
@ -341,7 +344,116 @@ class MetadataConfigService:
else: else:
return SecuBizPermiConfigModel(**dict()) return SecuBizPermiConfigModel(**dict())
@classmethod @classmethod
async def get_biz_config_rela_list_services(cls, result_db: AsyncSession, biz_onum: int, async def get_biz_config_rela_list_services(cls, result_db: AsyncSession, biz_onum: int):
):
ai_session_list = await MetadataConfigDao.get_biz_rela_by_biz_id(result_db, biz_onum) # 查询最新的20条 ai_session_list = await MetadataConfigDao.get_biz_rela_by_biz_id(result_db, biz_onum) # 查询最新的20条
return CamelCaseUtil.transform_result(ai_session_list) return CamelCaseUtil.transform_result(ai_session_list)
# ----------元数据标签调度任务 ----------
@classmethod
async def get_task_biz_config_list_services(
cls, db: AsyncSession, query_object: TaskBizConfigQueryModel, is_page: bool = False
):
return await MetadataConfigDao.get_task_biz_config_list(db, query_object, is_page)
@classmethod
async def add_task_biz_config_services(cls, db: AsyncSession, page_object: TaskBizConfigAddModel):
try:
config = TaskBizConfigModel()
config.onum = page_object.onum
config.biz_name = page_object.biz_name
config.risk_lvl = page_object.risk_lvl
# config.status = page_object.status # 映射 data_sec_lvl
# config.ds_ids = page_object.ds_ids # 映射 applyType
config.isStop = page_object.isStop
config.create_by = page_object.create_by
config.create_time = page_object.create_time
config.update_by = page_object.update_by
config.update_time = page_object.update_time
obj = await MetadataConfigDao.add_task_biz_config(db, config)
# 添加关联信息
records: List[TaskBizConfigRela] = []
for tab_onum in page_object.tab_onum_list:
record = TaskBizConfigRela()
record.biz_onum = obj.onum
record.tab_onum = tab_onum
record.create_by = obj.create_by
record.create_time = obj.create_time
records.append(record)
await MetadataConfigDao.add_batch_task_rela_dao(db, records)
await db.commit()
return CrudResponseModel(is_success=True, message="新增成功")
except Exception as e:
await db.rollback()
raise e
@classmethod
async def edit_task_biz_config_services(cls, db: AsyncSession, page_object: TaskBizConfigAddModel):
config = TaskBizConfigModel()
config.onum = page_object.onum
config.biz_name = page_object.biz_name
config.risk_lvl = page_object.risk_lvl
# config.status = page_object.status # 映射 data_sec_lvl
# config.ds_ids = page_object.ds_ids # 映射 applyType
config.isStop = page_object.isStop
config.create_by = page_object.create_by
config.create_time = page_object.create_time
config.update_by = page_object.update_by
config.update_time = page_object.update_time
edit_data = config.model_dump(exclude_unset=True)
info = await cls.get_task_biz_config_detail_services(db, page_object.onum)
if info.onum:
try:
await MetadataConfigDao.edit_task_biz_config(db, page_object.onum, edit_data)
await MetadataConfigDao.delete_task_rela_dao(db, page_object.onum)
records: List[TaskBizConfigRela] = []
for tab_onum in page_object.tab_onum_list:
record = TaskBizConfigRela()
record.biz_onum = page_object.onum
record.tab_onum = tab_onum
record.create_by = page_object.update_by
record.create_time = page_object.update_time
records.append(record)
await MetadataConfigDao.add_batch_task_rela_dao(db, records)
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_task_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_task_biz_config(db, id_list)
await MetadataConfigDao.delete_task_rela_batch(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_task_biz_config_detail_services(cls, db: AsyncSession, onum: str):
result = await MetadataConfigDao.get_task_biz_config_detail_by_id(db, onum)
if result:
return TaskBizConfigModel(**CamelCaseUtil.transform_result(result))
else:
return TaskBizConfigModel(**dict())
@classmethod
async def get_task_biz_config_rela_list_services(cls, result_db: AsyncSession, biz_onum: int):
ai_session_list = await MetadataConfigDao.get_task_rela_by_biz_id(result_db, biz_onum) # 查询最新的20条
return CamelCaseUtil.transform_result(ai_session_list)

63
vue-fastapi-frontend/src/api/taskMetadataConfig/metadataConfig.js

@ -0,0 +1,63 @@
import request from '@/utils/request'
// 查询业务配置列表,带分页
// 查询任务业务配置列表(分页)
export function listTaskBizConfig(query) {
return request({
url: '/default-api/metadataConfig/taskBizConfig/list',
method: 'get',
params: query
})
}
// 查询任务业务配置列表(不分页)
export function listTaskBizConfigAll(query) {
return request({
url: '/default-api/metadataConfig/taskBizConfig/listall',
method: 'get',
params: query
})
}
// 查询任务业务配置详情
export function getTaskBizConfig(onum) {
return request({
url: '/default-api/metadataConfig/taskBizConfig/detail',
method: 'get',
params: { onum }
})
}
// 新增任务业务配置
export function addTaskBizConfig(data) {
return request({
url: '/default-api/metadataConfig/taskBizConfig/add',
method: 'post',
data: data
})
}
// 修改任务业务配置
export function updateTaskBizConfig(data) {
return request({
url: '/default-api/metadataConfig/taskBizConfig/edit',
method: 'post',
data: data
})
}
// 删除任务业务配置(支持批量)
export function delTaskBizConfig(onumStr) {
return request({
url: '/default-api/metadataConfig/taskBizConfig/delete',
method: 'delete',
params: { onums: onumStr }
})
}
// 查询任务业务配置关联表列表
export function getTaskBizRelaList(onum) {
return request({
url: '/default-api/metadataConfig/taskBizConfigRela/list/' + onum,
method: 'get'
})
}

352
vue-fastapi-frontend/src/views/metadataConfig/taskBizConfig/index.vue

@ -0,0 +1,352 @@
<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 style="width: 200px" />
</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="createBy" label="创建者" />
<el-table-column prop="createTime" label="创建时间" width="180">
<template #default="{ row }">
{{ formatDateTime(row.createTime) }}
</template>
</el-table-column>
<el-table-column prop="updateBy" label="更新者" />
<el-table-column prop="updateTime" label="更新时间" width="180">
<template #default="{ row }">
{{ formatDateTime(row.updateTime) }}
</template>
</el-table-column>
</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="1600px" append-to-body :before-close="handleClose">
<el-form ref="bizFormRef" :model="form" :rules="rules" label-width="130px">
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="业务域名称" prop="bizName">
<el-input v-model="form.bizName" style="width: 200px" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-row :gutter="20" style="margin-top: 20px">
<el-col :span="10">
<el-form :model="leftQueryForm" inline size="small">
<el-form-item label="系统名">
<el-select v-model="leftQueryForm.ssysCd" placeholder="请选择系统" clearable filterable style="width: 180px">
<el-option v-for="item in dsSysList" :key="item.id" :label="item.name" :value="item.name" />
</el-select>
</el-form-item>
<el-form-item label="表名">
<el-input v-model="leftQueryForm.tabName" placeholder="请输入表名" clearable style="width: 180px" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="loadLeftTable">查询</el-button>
</el-form-item>
</el-form>
<el-table :data="leftTableData" height="300" border style="margin-top: 10px" @selection-change="handleLeftSelect">
<el-table-column type="selection" width="50" />
<el-table-column prop="ssysCd" label="系统名" />
<el-table-column prop="mdlName" label="模式名" />
<el-table-column prop="tabEngName" label="表名" />
</el-table>
<pagination v-show="leftTotal > 0" :total="leftTotal" v-model:page="leftQueryForm.pageNum" v-model:limit="leftQueryForm.pageSize" @pagination="loadLeftTable" />
</el-col>
<el-col :span="4" class="flex-col-center">
<el-button type="primary" @click="moveToRight" :disabled="leftSelected.length === 0"> > </el-button>
<el-button type="danger" style="margin-top: 10px" @click="moveToLeft" :disabled="rightSelected.length === 0"> < </el-button>
</el-col>
<el-col :span="10">
<el-table :data="rightTableData" height="360" border @selection-change="handleRightSelect">
<el-table-column type="selection" width="50" />
<el-table-column prop="ssysCd" label="系统名" />
<el-table-column prop="mdlName" label="模式名" />
<el-table-column prop="tabEngName" label="表名" />
</el-table>
</el-col>
</el-row>
<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 useUserStore from '@/store/modules/user'
import { getMetaDataList } from '@/api/meta/metaInfo'
const userStore = useUserStore()
const dsSysList = userStore.dsSysList
import {
listTaskBizConfig,
addTaskBizConfig,
updateTaskBizConfig,
getTaskBizRelaList,
delTaskBizConfig
} from '@/api/taskMetadataConfig/metadataConfig'
const queryForm = reactive({
bizName: '',
riskLvl: '',
pageNum: 1,
pageSize: 10
})
const leftQueryForm = reactive({
ssysCd: '',
tabName: '',
pageNum: 1,
pageSize: 10
})
const bizList = ref([])
const secList = 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 listTaskBizConfig(queryForm)
bizList.value = res.rows || []
total.value = res.total || 0
} catch (error) {
ElMessage.error('获取列表失败,请重试')
} finally {
loading.value = false
}
}
async function getSecList() {
// TODO:
}
function getSecLevelName(value) {
const item = secList.value.find((d) => d.onum === value)
return item ? item.secLevelSummary : value
}
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
})
rightTableData.value = []
open.value = true
}
function openEditDialog(row) {
if (!row) {
ElMessage.warning('请选择一条记录进行编辑')
return
}
title.value = '编辑业务域配置'
loadRightTable(row.onum)
Object.assign(form, row)
open.value = true
}
function submitForm() {
bizFormRef.value.validate(async (valid) => {
if (!valid) return
let tabonums = []
rightTableData.value.forEach(item => {
tabonums.push(item.onum)
})
const submitData = { ...form, tabOnumList: tabonums }
try {
if (title.value.includes('新增')) {
await addTaskBizConfig(submitData)
ElMessage.success('新增成功')
} else {
await updateTaskBizConfig(submitData)
ElMessage.success('编辑成功')
}
open.value = false
getList()
} catch (error) {
ElMessage.error('操作失败,请重试')
}
})
}
function deleteRow(onum) {
ElMessageBox.confirm('确定删除该条记录吗?', '提示', { type: 'warning' })
.then(async () => {
try {
await delTaskBizConfig(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 delTaskBizConfig(row.onum)
}
ElMessage.success('删除成功')
getList()
} catch (error) {
ElMessage.error('删除失败,请重试')
}
})
.catch(() => { })
}
function handleClose(done) {
bizFormRef.value.resetFields()
done()
}
// ==== 穿 ====
const leftTableData = ref([])
const leftTotal = ref(0)
const leftSelected = ref([])
const rightTableData = ref([])
const rightSelected = ref([])
function handleLeftSelect(rows) {
leftSelected.value = rows
}
function handleRightSelect(rows) {
rightSelected.value = rows
}
async function loadLeftTable() {
const res = await getMetaDataList(leftQueryForm)
leftTableData.value = res.data.rows || []
leftTotal.value = res.data.total || 0
}
async function loadRightTable(onum) {
const res = await getTaskBizRelaList(onum)
rightTableData.value = res.data || []
}
function buildKey(row) {
return `${row.ssysCd}||${row.mdlName}||${row.tabEngName}`
}
function moveToRight() {
const existingKeys = new Set(rightTableData.value.map(buildKey))
leftSelected.value.forEach(item => {
if (!existingKeys.has(buildKey(item))) {
let additem = item
additem.onum = item.extractOnum
rightTableData.value.push(item)
}
})
}
function moveToLeft() {
const removeKeys = new Set(rightSelected.value.map(buildKey))
rightTableData.value = rightTableData.value.filter(item => !removeKeys.has(buildKey(item)))
}
onMounted(() => {
getList()
getSecList()
loadLeftTable()
})
</script>
<style scoped>
.app-container {
padding: 20px;
}
.mb8 {
margin-bottom: 8px;
}
.flex-col-center {
display: flex;
flex-direction: column;
margin-top: 150px;
justify-content: center;
align-items: center;
height: 100%;
}
</style>
Loading…
Cancel
Save