Browse Source

代码提交ds数据安全标签

master
si@aidatagov.com 2 weeks ago
parent
commit
ac8ecb7392
  1. 8
      vue-fastapi-backend/module_admin/controller/metadata_config_controller.py
  2. 13
      vue-fastapi-backend/module_admin/dao/datasec_config_dao.py
  3. 2
      vue-fastapi-backend/module_admin/entity/vo/metadata_config_vo.py
  4. 168
      vue-fastapi-backend/module_admin/service/datasec_config_service.py
  5. 2
      vue-fastapi-frontend/src/views/meta/metatask/index.vue
  6. 749
      vue-fastapi-frontend/src/views/meta/metatask/secConfig.vue

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

@ -492,9 +492,9 @@ async def get_datasec_config_list(
query: DatasecConfigModel = Depends(DatasecConfigPageQueryModel.as_query), query: DatasecConfigModel = Depends(DatasecConfigPageQueryModel.as_query),
query_db: AsyncSession = Depends(get_db), query_db: AsyncSession = Depends(get_db),
): ):
result = await DatasecConfigService.get_datasec_list_services(query_db, query, False) result = await DatasecConfigService.get_datasec_list_services(query_db, query, True)
logger.info("获取数据安全参数配置列表成功") logger.info("获取数据安全参数配置列表成功")
return ResponseUtil.success(data=result) return ResponseUtil.success(model_content=result)
@metadataConfigController.post("/datasecConfig") @metadataConfigController.post("/datasecConfig")
@ -507,7 +507,7 @@ async def add_datasec_config(
): ):
model.create_by = current_user.user.user_name model.create_by = current_user.user.user_name
model.create_time = datetime.now() model.create_time = datetime.now()
result = await DatasecConfigService.add_datasec_services(query_db, model) result = await DatasecConfigService.add_datasec_services(query_db, model,current_user,request)
logger.info(result.message) logger.info(result.message)
return ResponseUtil.success(msg=result.message) return ResponseUtil.success(msg=result.message)
@ -522,7 +522,7 @@ async def edit_datasec_config(
): ):
model.update_by = current_user.user.user_name model.update_by = current_user.user.user_name
model.update_time = datetime.now() model.update_time = datetime.now()
result = await DatasecConfigService.edit_datasec_services(query_db, model) result = await DatasecConfigService.edit_datasec_services(query_db, model,current_user,request)
logger.info(result.message) logger.info(result.message)
return ResponseUtil.success(msg=result.message) return ResponseUtil.success(msg=result.message)

13
vue-fastapi-backend/module_admin/dao/datasec_config_dao.py

@ -64,3 +64,16 @@ class DatasecConfigDao:
批量删除任务配置 批量删除任务配置
""" """
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 check_name_or_param_exist(cls, db: AsyncSession, metatask_name: str, metatask_param: str, exclude_onum: int = None):
"""
检查是否存在相同的任务名称或参数字段排除指定 onum用于编辑
"""
stmt = select(DatasecConfig).where(
(DatasecConfig.metatask_name == metatask_name) | (DatasecConfig.metatask_param == metatask_param)
)
if exclude_onum:
stmt = stmt.where(DatasecConfig.onum != exclude_onum)
result = await db.execute(stmt)
return result.scalars().first() is not None

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

@ -336,3 +336,5 @@ class DatasecConfigModel(BaseModel):
class DatasecConfigPageQueryModel(DatasecConfigModel): class DatasecConfigPageQueryModel(DatasecConfigModel):
page_num: int = Field(default=1, description='当前页码') page_num: int = Field(default=1, description='当前页码')
page_size: int = Field(default=10, description='每页记录数') page_size: int = Field(default=10, description='每页记录数')
begin_time: Optional[str]= Field(default=None, description='开始时间')
end_time: Optional[str]= Field(default=None, description='结束时间')

168
vue-fastapi-backend/module_admin/service/datasec_config_service.py

@ -4,7 +4,15 @@ from module_admin.entity.vo.metadata_config_vo import DatasecConfigModel
from module_admin.entity.vo.common_vo import CrudResponseModel from module_admin.entity.vo.common_vo import CrudResponseModel
from exceptions.exception import ServiceException from exceptions.exception import ServiceException
from utils.common_util import CamelCaseUtil from utils.common_util import CamelCaseUtil
from module_admin.entity.vo.metaprocessconfig_vo import MetaprocessconfigQueryModel,MetaprocessconfigModel
from module_admin.service.metaprocessconfig_service import MetaprocessconfigService
import requests
import json
import re
from config.enums import RedisInitKeyConfig
from fastapi import Request,Depends
from config.env import AppConfig
from module_admin.entity.vo.user_vo import CurrentUserModel
class DatasecConfigService: class DatasecConfigService:
""" """
@ -19,27 +27,115 @@ class DatasecConfigService:
return await DatasecConfigDao.get_list(db, query_object, is_page) return await DatasecConfigDao.get_list(db, query_object, is_page)
@classmethod @classmethod
async def add_datasec_services(cls, db: AsyncSession, page_object: DatasecConfigModel): async def add_datasec_services(cls, db: AsyncSession, page_object: DatasecConfigModel, current_user: CurrentUserModel, request: Request):
""" """
新增配置 新增配置
""" """
try: try:
# 检查任务名称或参数是否已存在
exists = await DatasecConfigDao.check_name_or_param_exist(db, page_object.metatask_name, page_object.metatask_param)
if exists:
raise ServiceException(message="任务名称或参数字段已存在")
# 获取流程配置
processconfig = MetaprocessconfigQueryModel()
processconfig.db_type = "SecConfig"
processConfigList = await MetaprocessconfigService.get_metaprocessconfig_list_services(db, processconfig, False)
# 调用流程定义创建逻辑
message = await cls.sec_process_defind_change_add(request, processConfigList, page_object, current_user)
if "成功" not in message:
await db.rollback()
raise ServiceException(message=f'新增数据安全_批次标签任务 {page_object.metatask_name} 失败,dolphinscheduler 创建失败'+message)
# 添加记录并提交
await DatasecConfigDao.add(db, page_object) await DatasecConfigDao.add(db, page_object)
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:
await db.rollback() await db.rollback()
raise e raise e
@classmethod @classmethod
async def edit_datasec_services(cls, db: AsyncSession, page_object: DatasecConfigModel): async def sec_process_defind_change_add(cls,request: Request, processConfigList: list[MetaprocessconfigModel],page_object:DatasecConfigModel,current_user: CurrentUserModel):
projectCode = await request.app.state.redis.get(f'{RedisInitKeyConfig.SYS_CONFIG.key}:sys.ds.projectcode')
url = f'{AppConfig.ds_server_url}/dolphinscheduler/projects/'+projectCode+'/task-definition/gen-task-codes?genNum=5'
headers = {'dashUserName': current_user.user.user_name, 'dashPassword': current_user.user.password}
# 新增接口
url2=f'{AppConfig.ds_server_url}/dolphinscheduler/projects/'+projectCode+'/process-definition'
headers2 = {'dashUserName': current_user.user.user_name, 'dashPassword': current_user.user.password, 'Content-Type': 'application/x-www-form-urlencoded'}
response = requests.get(url, headers=headers, verify=False)
if response.reason == 'OK':
intdsids=[]
message=''
dstypes=[]
response_text = response.text
data = json.loads(response_text)
code_list = data["data"]
str_list = list(map(str, code_list))
for config in processConfigList:
modified_json_str = config.taskDefinitionJson.replace("18093081592672", str_list[0]).replace("sh /home/xx/code/remote_python_sec.sh", "sh /home/xx/code/remote_python_sec.sh "+page_object.metatask_param)
modified_json_str2=config.taskRelationJson.replace("18093081592672", str_list[0])
modified_json_str3=config.locations.replace("18093081592672", str_list[0])
metaprocessconfig_dict = MetaprocessconfigModel(taskDefinitionJson=modified_json_str,# 替换taskDefinitionJson
description="", # 替换工作流备注
locations=modified_json_str3,# 替换locations
name =page_object.metatask_name,# 替换工作流名称
timeout=config.timeout,
globalParams =config.globalParams ,
tenantCode =config.tenantCode ,
taskRelationJson =modified_json_str2,# 替换taskRelationJson
executionType =config.executionType ,
releaseState=config.releaseState
).model_dump(exclude_unset=True, by_alias=True)
form_data = {key: str(value) for key, value in metaprocessconfig_dict.items()}
response_post0 = requests.post(url2, headers=headers2,data=form_data,verify=False)
text= response_post0.text
responsJson = json.loads(text)
if responsJson['msg'] == 'success':
dstypes.append('1')
intdsids.append(responsJson['data']['code'])
if message:
message += ", "
message += page_object.metatask_name + "-数据安全_批次标签新增成功"
else:
if message:
message += ", "
message += page_object.metatask_name + "-数据安全_批次标签新增失败"
if len(intdsids)>0:
page_object.ds_ids=','.join([str(i) for i in intdsids])
return message
@classmethod
async def edit_datasec_services(cls, db: AsyncSession, page_object: DatasecConfigModel,current_user: CurrentUserModel,request: Request,):
""" """
编辑配置 编辑配置
""" """
edit_data = page_object.model_dump(exclude_unset=True) edit_data = page_object.model_dump(exclude_unset=True)
# 获取原始数据
info = await cls.get_datasec_detail_services(db, page_object.onum) info = await cls.get_datasec_detail_services(db, page_object.onum)
if info and info.onum: if info and info.onum:
# 检查任务名称或参数是否重复(排除自身)
exists = await DatasecConfigDao.check_name_or_param_exist(
db,
metatask_name=page_object.metatask_name,
metatask_param=page_object.metatask_param,
exclude_onum=page_object.onum
)
if exists:
raise ServiceException(message="任务名称或参数字段已存在")
try: try:
# 调用流程定义创建逻辑
message= await cls.sec_process_defind_change_update(request,page_object,info,current_user)
if "成功" not in message:
await db.rollback()
raise ServiceException(message=f'更新数据安全_批次标签任务 {page_object.metatask_name} 失败,dolphinscheduler 创建失败'+message)
await DatasecConfigDao.edit(db, page_object.onum, edit_data) await DatasecConfigDao.edit(db, page_object.onum, edit_data)
await db.commit() await db.commit()
return CrudResponseModel(is_success=True, message="更新成功") return CrudResponseModel(is_success=True, message="更新成功")
@ -48,6 +144,72 @@ class DatasecConfigService:
raise e raise e
else: else:
raise ServiceException(message="配置数据不存在") raise ServiceException(message="配置数据不存在")
@classmethod
async def sec_process_defind_change_update(cls,request: Request,page_object:DatasecConfigModel,metatask_old:DatasecConfigModel,current_user: CurrentUserModel):
projectCode = await request.app.state.redis.get(f'{RedisInitKeyConfig.SYS_CONFIG.key}:sys.ds.projectcode')
dsids=page_object.ds_ids.split(",")
result_list = [{'dstype': t, 'dsid': i} for t, i in zip(dsids, dsids)]
message=''
# 查询接口
url=f'{AppConfig.ds_server_url}/dolphinscheduler/projects/'+projectCode+'/process-definition'
headers = {'dashUserName': current_user.user.user_name, 'dashPassword': current_user.user.password, }
headers2 = {'dashUserName': current_user.user.user_name, 'dashPassword': current_user.user.password, 'Content-Type': 'application/x-www-form-urlencoded'}
for config in result_list:
response = requests.get(f"{url}/{config['dsid']}", headers=headers, verify=False)
text= response.text
responsJson = json.loads(text)
if responsJson['msg'] == 'success':
task_def_list = responsJson['data']['taskDefinitionList']
# 遍历修改 rawScript
task_def_list = responsJson['data']['taskDefinitionList']
for task in task_def_list:
task_params = task.get("taskParams")
if task_params and isinstance(task_params, dict):
raw_script = task_params.get("rawScript")
if raw_script and raw_script.startswith("sh /home/xx/code/remote_python_sec.sh"):
task_params["rawScript"] = f"sh /home/xx/code/remote_python_sec.sh {page_object.metatask_param}"
# 再序列化为 JSON 字符串
modified_json_str = json.dumps(task_def_list, ensure_ascii=False, indent=0)
getTaskRelationList=responsJson['data']['processTaskRelationList']
putTaskRelationList=[]
for item in getTaskRelationList:
new_item = {
"name": item['name'],
"preTaskCode":item['preTaskCode'] ,
"preTaskVersion":item['preTaskVersion'] ,
"postTaskCode":item['postTaskCode'] ,
"conditionType":item['conditionType'] ,
"conditionParams":item['conditionParams']
}
putTaskRelationList.append(new_item)
modified_json_str2= json.dumps(putTaskRelationList, ensure_ascii=False, indent=0)
modified_json_str2=re.sub(r'\s+', '', modified_json_str2)
metaprocessconfig_dict = MetaprocessconfigModel(taskDefinitionJson=modified_json_str,# 替换taskDefinitionJson
description="", # 替换工作流备注
locations=responsJson['data']['processDefinition']['locations'] ,# 替换locations
name =page_object.metatask_name,# 替换工作流名称
tenantCode =responsJson['data']['processDefinition']['tenantCode'] ,
taskRelationJson =modified_json_str2,# 替换taskRelationJson
).model_dump(exclude_unset=True, by_alias=True)
form_data = {key: str(value) for key, value in metaprocessconfig_dict.items()}
response_put0 = requests.put(f"{url}/{config['dsid']}", headers=headers2,data=form_data,verify=False)
putText= response_put0.text
responsPutJson=json.loads(putText)
if responsPutJson['msg'] == 'success':
if message:
message += ", "
message += page_object.metatask_name + "-数据安全_批次标签成功"
else:
if message:
message += ", "
message += page_object.metatask_name + "-数据安全_批次标签修改失败"
return message
@classmethod @classmethod
async def delete_datasec_services(cls, db: AsyncSession, onum_list: str): async def delete_datasec_services(cls, db: AsyncSession, onum_list: str):

2
vue-fastapi-frontend/src/views/meta/metatask/index.vue

@ -297,7 +297,7 @@
width="100" width="100"
> >
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.updateTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column

749
vue-fastapi-frontend/src/views/meta/metatask/secConfig.vue

@ -0,0 +1,749 @@
<template>
<div class="app-container">
<el-row :gutter="20">
<el-col :span="24" :xs="24">
<el-form
:model="queryParams"
ref="queryForm"
:inline="true"
v-show="showSearch"
label-width="68px"
>
<el-form-item label="任务名称" prop="metataskName">
<el-input
v-model="queryParams.metataskName"
placeholder="请输入任务名称"
clearable
style="width: 240px"
/>
</el-form-item>
<el-form-item label="任务类型" prop="metataskType">
<el-select
v-model="queryParams.metataskType"
placeholder="任务类型"
clearable
style="width: 240px"
>
<el-option
v-for="dict in meta_task_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker
v-model="dateRange"
style="width: 240px"
value-format="YYYY-MM-DD"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</el-form-item>
<el-form-item>
<el-button
type="primary"
icon="search"
@click="handleQuery"
>搜索</el-button
>
<el-button icon="refresh" @click="resetQuery"
>重置</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:metatask:add']"
>新建任务</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="edit"
:disabled="singleOne"
@click="handleUpdate"
v-hasPermi="['meta:metatask:edit']"
>修改</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="top"
:disabled="singleOne"
@click="handleUp"
v-hasPermi="['meta:metatask:up']"
>上线</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="bottom"
:disabled="singleTwo"
@click="handleDown"
v-hasPermi="['meta:metatask:down']"
>下线</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="AlarmClock"
:disabled="singleTwo"
@click="handleDS"
v-hasPermi="['meta:metatask:ds']"
>调度</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="video-play"
:disabled="singleTwo"
@click="handleRun"
v-hasPermi="['meta:metatask:run']"
>运行</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="edit"
:disabled="single"
@click="handleLog"
v-hasPermi="['meta:metatask:log']"
>日志</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="delete"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['meta:metatask:delete']"
>删除</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="delete"
:disabled="singleTwo"
@click="handleDeleteSche"
v-hasPermi="['meta:metatask:ds']"
>删除调度</el-button
>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table
v-loading="loading"
:data="userList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="50" align="center" />
<el-table-column
label="任务名称"
align="center"
key="metataskName"
prop="metataskName"
v-if="columns[1].visible"
:show-overflow-tooltip="true"
/>
<el-table-column
label="参数"
align="center"
key="metataskParam"
prop="metataskParam"
v-if="columns[2].visible"
:show-overflow-tooltip="true"
/>
<el-table-column
label="状态"
align="center"
key="status"
prop="status"
v-if="columns[3].visible"
:show-overflow-tooltip="true"
>
<template #default="scope">
<dict-tag
:options="meta_task_status"
:value="scope.row.status"
/>
</template>
</el-table-column>
<el-table-column
label="调度ID"
align="center"
prop="schId"
v-if="columns[4].visible"
width="100"
>
<template #default="scope">
<span>{{scope.row.schId}}</span>
</template>
</el-table-column>
<el-table-column
label="创建时间"
align="center"
prop="createTime"
v-if="columns[5].visible"
>
<template #default="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column
label="更新时间"
align="center"
prop="updateTime"
v-if="columns[6].visible"
>
<template #default="scope">
<span>{{ parseTime(scope.row.updateTime) }}</span>
</template>
</el-table-column>
<el-table-column
label="创建人"
align="center"
key="createBy"
prop="createBy"
v-if="columns[8].visible"
:show-overflow-tooltip="true"
/>
<el-table-column
label="修改人"
align="center"
key="updateBy"
prop="updateBy"
v-if="columns[9].visible"
:show-overflow-tooltip="true"
/>
<el-table-column
label="操作"
align="center"
width="200"
class-name="small-padding fixed-width"
>
<template #default="{ row }">
<el-button
link
type="primary"
:disabled="row.status === 'ONLINE'"
icon="Edit"
@click="handleUpdate(row)"
v-hasPermi="['meta:metatask:edit']"
>
修改
</el-button>
<el-button
link
type="primary"
icon="Delete"
:disabled="row.status === 'ONLINE'"
@click="handleDelete(row)"
v-hasPermi="['meta:metatask:delete']"
>
删除
</el-button>
<el-dropdown
link
@command="(command) => handleCommand(command, row)"
>
<el-button link type="primary" icon="d-arrow-right">
更多
</el-button>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item
command="handleUp"
icon="circle-check"
:disabled="row.status === 'ONLINE'"
v-hasPermi="['meta:metatask:up']"
>
上线
</el-dropdown-item>
<el-dropdown-item
command="handleDown"
icon="circle-check"
:disabled="row.status === 'OFFLINE'"
v-hasPermi="['meta:metatask:down']"
>
下线
</el-dropdown-item>
<el-dropdown-item
command="handleDS"
icon="circle-check"
:disabled="row.status === 'OFFLINE'"
v-hasPermi="['meta:metatask:ds']"
>
调度
</el-dropdown-item>
<el-dropdown-item
command="handleRun"
icon="circle-check"
:disabled="row.status === 'OFFLINE'"
v-hasPermi="['meta:metatask:run']"
>
运行
</el-dropdown-item>
<el-dropdown-item
command="handleLog"
icon="circle-check"
v-hasPermi="['meta:metatask:log']"
>
日志
</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</el-col>
</el-row>
<el-dialog v-model="open" width="600px" append-to-body>
<el-form ref="taskForm" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-col :span="24">
<el-form-item label="任务名称" prop="metataskName">
<el-input
v-model="form.metataskName"
placeholder="请输入任务名称"
maxlength="30"
style="width: 80%"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="参数" prop="metataskParam">
<el-input
v-model="form.metataskParam"
placeholder="请输入任务参数"
maxlength="30"
style="width: 80%"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
<run-dialog ref="rundialog"
:warningGroupList="warningGroupList"
:environmentList="environmentList"
:workerGroupList="workerGroupList"
:processDefinitionCode="dsIds"
/>
<ds-dialog ref="dsdialog"
:warningGroupList="warningGroupList"
:environmentList="environmentList"
:workerGroupList="workerGroupList"
:processDefinitionCode="dsIds"
:getList="getList"
/>
<log-dialog ref="logdialog"
:defindName="defindName"
/>
</div>
</template>
<style scoped>
.custom-tree-node {
display: flex;
align-items: center;
}
.custom-tree-node i {
margin-right: 8px; /* 图标与文本之间的间距 */
}
</style>
<script setup name="MetaTask">
import { ref, reactive, onMounted, watch } from "vue";
import { downOrUpmetatask, dsmetataskdelete } from "@/api/meta/metatask";
import { getDatasecConfigList, getDatasecConfigDetail,editDatasecConfig, deleteDatasecConfig, addDatasecConfig } from "@/api/metadataConfig/metadataConfig";
import runDialog from "./runDialog";
import dsDialog from "./dsDialog";
import logDialog from "./logsDialog";
const { proxy } = getCurrentInstance();
const { meta_task_type, meta_task_acq, meta_task_status,meta_task_at } = proxy.useDict("meta_task_type", "meta_task_acq", "meta_task_status", "meta_task_at");
// Component setup
const activeTab = ref("dataSource");
const loading = ref(true);
const ids = ref([]);
const idnames = ref([]);
const dsIds = ref([]);
const single = ref(true);
const isEdit = ref(true);
const singleOne = ref(true); // Online, Edit, Delete
const singleTwo = ref(true); // Offline, Logs, Scheduling
const multiple = ref(true);
const showSearch = ref(true);
const total = ref(0);
const userList = ref(null);
const title = ref("");
const warningGroupList = ref(undefined);
const environmentList = ref(undefined);
const workerGroupList = ref(undefined);
const defindName = ref("");
const open = ref(false);
const clickNode = ref(undefined);
const dateRange = ref([]);
const data = reactive({
form: { onum: undefined,
metataskName: undefined,
metataskParam: undefined,
dbRName: undefined,
dbCode: undefined,
dbName: undefined,
dbRCode: undefined,
dbSName: undefined,
dbSCode: undefined,
remark: undefined,
acquisitionType: "0",
dsId: undefined,
acTarget: "0"},
queryParams: {
pageNum: 1,
pageSize: 10,
dbRcode: undefined,
dsId: undefined,
metataskName: undefined,
metataskType: undefined,
dbRCode: undefined
},
rules: {
metataskName: [
{ required: true, message: "任务名称不能为空", trigger: "blur" },
{ min: 2, max: 20, message: "任务名称长度必须介于 2 和 20 之间", trigger: "blur" }
],
dbSCode: [{ required: true, message: "模式列表不能为空", trigger: "blur" }],
acquisitionType: [{ required: true, message: "采集方式不能为空", trigger: "blur" }],
acTarget: [{ required: true, message: "采集目标不能为空", trigger: "blur" }]
}
});
const { queryParams, form, rules } = toRefs(data);
const defaultProps = {
children: "children",
label: "name"
};
const selectRowData = ref({});
const dbResourceOldList = ref([]);
const columns = [
{ key: 0, label: `任务ID`, visible: true },
{ key: 1, label: `任务名称`, visible: true },
{ key: 2, label: `参数`, visible: true },
{ key: 3, label: `状态`, visible: true },
{ key: 4, label: `调度Id`, visible: true },
{ key: 5, label: `创建时间`, visible: true },
{ key: 6, label: `更新时间`, visible: true },
{ key: 7, label: `描述`, visible: true },
{ key: 8, label: `创建人`, visible: true },
{ key: 9, label: `修改人`, visible: true }
];
const chooseRows = ref([]);
onMounted(() => {
getList();
});
const cancel = () => {
open.value = false;
reset();
};
const reset = () => {
form.value= {
onum: undefined,
metataskName: undefined,
metataskParam: undefined,
};
proxy.resetForm("taskForm");
};
const getList = async () => {
loading.value = true;
const response = await getDatasecConfigList(proxy.addDateRange(queryParams.value, dateRange.value));
userList.value = response.rows;
total.value = response.total;
loading.value = false;
};
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
};
const resetQuery = () => {
dateRange.value = [];
proxy.resetForm("queryForm");
queryParams.value.dbRCode = clickNode.value?.id;
proxy.tree.setCurrentKey(null);
handleQuery();
};
const handleSelectionChange = (selection) => {
selectRowData.value = selection[0];
chooseRows.value = selection;
ids.value = selection.map((item) => item.onum);
dsIds.value = selection.map((item) => item.dsIds);
idnames.value=selection.map((item) => item.metataskName);
singleOne.value = selection.length !== 1 || selectRowData.value.status === "ONLINE";
singleTwo.value = selection.length !== 1 || selectRowData.value.status === "OFFLINE";
single.value = selection.length !== 1;
multiple.value = selection.length === 0;
};
const handleCommand = (command, row) => {
switch (command) {
case "handleUp":
handleUp(row);
break;
case "handleDown":
handleDown(row);
break;
case "handleDS":
handleDSRow(row);
break;
case "handleRun":
handleRunRow(row);
break;
case "handleLog":
handleLogRow(row);
break;
default:
break;
}
};
const handleAdd = () => {
reset();
isEdit.value=false;
open.value = true;
};
const handleUpdate = async (row) => {
reset();
const onum = row.onum || ids.value;
const response = await getDatasecConfigDetail(onum);
form.value = response.data;
open.value = true;
isEdit.value=true;
};
const handleUp = async (row) => {
const onums = String(row.onum || ids.value);
const metataskNames = row.metataskName || idnames.value;
await proxy.$modal.confirm(`是否确认上线任务 "${metataskNames}"?`);
await downOrUpmetatask(onums, "ONLINE");
getList();
proxy.$modal.msgSuccess("上线成功");
};
const handleDown = async (row) => {
const onums = String(row.onum || ids.value);
const metataskNames = row.metataskName || idnames.value;
await proxy.$modal.confirm(`是否确认下线任务 "${metataskNames}"?`);
await downOrUpmetatask(onums, "OFFLINE");
getList();
proxy.$modal.msgSuccess("下线成功");
};
const dsdialog = ref(null);
const rundialog = ref(null);
const logdialog = ref(null);
const handleDS = (row) => {
if (dsdialog.value) {
dsdialog.value.show(dsIds.value,ids.value); // Pass ids or any required data
}
};
const handleRun = (row) => {
rundialog.value.show(dsIds.value);
};
const handleLog = (row) => {
defindName.value = `${selectRowData.value.metataskName}-${selectRowData.value.dsTypes === "0" ? "表字段采集" : "存储过程采集"}`;
if (logdialog.value) {
logdialog.value.show(defindName.value);
}
};
const handleDSRow = (row) => {
if (dsdialog.value) {
dsdialog.value.show(row.dsIds,row.metatskId); // Pass ids or any required data
}
};
const handleRunRow = (row) => {
rundialog.value.show(row.dsIds);
};
const handleLogRow = (row) => {
defindName.value = `${row.metataskName}-${row.dsTypes === "0" ? "表字段采集" : "存储过程采集"}`;
if (logdialog.value) {
logdialog.value.show(defindName.value);
}
};
const submitForm = async () => {
proxy.$refs["taskForm"].validate(async (valid) => {
if (valid) {
const submitForm = { ...form.value };
if (submitForm.onum !== undefined) {
await editDatasecConfig(submitForm);
proxy.$modal.msgSuccess("修改成功");
open.value = false;
getList();
} else {
await addDatasecConfig(submitForm);
proxy.$modal.msgSuccess("新增成功");
open.value = false;
getList();
}
}
});
};
const handleDelete = async (row) => {
let isDelete = true;
if(row.onum!=null){
if (row.status === 'ONLINE') {
proxy.$modal.msgWarning("请选择下线数据进行删除");
isDelete = false;
} }
if (chooseRows.value.length > 0) {
chooseRows.value.forEach(b => {
if (b.status === 'ONLINE') {
proxy.$modal.msgWarning("请选择下线数据进行删除");
isDelete = false;
}
});
}
if (isDelete) {
const onums = row.onum || ids.value;
const metataskNames = row.metataskName || idnames.value;
const dsidsVo = row.dsIds || dsIds.value;
await proxy.$modal.confirm(`是否确认删除任务 "${metataskNames}"?`);
await deleteDatasecConfig(onums, dsidsVo);
getList();
proxy.$modal.msgSuccess("删除成功");
}
};
const handleDeleteSche = async (row) => {
let isDelete = true;
if(row.onum!=null){
if (row.schId == ''||row.schId==null) {
proxy.$modal.msgWarning("请选择添加调度的任务进行删除");
isDelete = false;
}}else {
if (chooseRows.value.length > 0) {
chooseRows.value.forEach(b => {
if (b.schId == ''||b.schId==null) {
proxy.$modal.msgWarning("请选择添加调度的任务进行删除");
isDelete = false;
}
});
}
}
if (isDelete) {
const onums = row.onum || ids.value;
const metataskNames = row.metataskName || idnames.value;
const dsidsVo = row.dsIds || dsIds.value;
await proxy.$modal.confirm(`是否确认删除任务 "${metataskNames}"的调度?`);
await dsmetataskdelete({processDefinitionCode:dsidsVo.toString(),onum:onums.toString()})
getList();
proxy.$modal.msgSuccess("删除调度成功");
}
};
</script>
Loading…
Cancel
Save