This commit is contained in:
2026-04-16 20:40:34 +08:00
11 changed files with 330 additions and 63 deletions

View File

@@ -129,6 +129,9 @@ const nodeClickFun = (data: any, node: any) => {
// 循环获取父节点
const getTreeMenuFun = (node: any) => {
if (!node) {
return;
}
if (node.label && node.parent) {
const data = navList.value;
data.unshift(node.data);
@@ -138,7 +141,13 @@ const getTreeMenuFun = (node: any) => {
};
// 打开目录
const openDirFun = (id: any) => {
const openDirFun = (id?: any) => {
if (!id) {
treeRef.value?.setCurrentKey(null);
updateNavFun([]);
choseNodeFun(undefined);
return;
}
const node = treeRef.value.getNode(String(id));
if (node) {
node.loaded = false;
@@ -150,6 +159,13 @@ const openDirFun = (id: any) => {
// 返回上一级
const backFun = () => {
if (navList.value.length === 0) {
return;
}
if (navList.value.length === 1) {
openDirFun();
return;
}
const data = navList.value[navList.value.length - 2];
openDirFun(data[props.dataKey.id]);
};
@@ -157,6 +173,9 @@ const backFun = () => {
// 当前节点更改
const currentChangeFun = (data: any, node: any) => {
updateNavFun([]);
if (!data || !node) {
return;
}
getTreeMenuFun(node);
};

View File

@@ -93,7 +93,7 @@
<div v-if="!readonly">
<el-button
:icon="DArrowLeft"
:disabled="navList.length <= 1"
:disabled="navList.length === 0"
@click="backFun"
>{{ $t('通用.返回上一级') }}</el-button
>
@@ -324,15 +324,40 @@ const { KNOWLEDGE_APPROVE_STATUS, KNOWLEDGE_APPROVE_TYPE } = useDict(
type Data = RenderContentContext['data'];
const fileTreeRef = ref<any>();
const baseTableRef = ref<any>();
const tableSearchRef = ref<any>();
const navList = ref<any>([]);
const currentFolder = ref();
const memoryFolder = ref();
const currentFolderMode: Ref<'add' | 'edit'> = ref('add');
const getValidSearchFormFun = () => {
const form = cloneDeep(tableSearchRef.value?.getSearchParamsFun?.() || {});
Object.keys(form).forEach((key) => {
const value = form[key];
if (
value === '' ||
value === null ||
value === undefined ||
(Array.isArray(value) && value.length === 0)
) {
delete form[key];
}
});
return form;
};
const choseNodeFun = (data: Data) => {
isSearching.value = false;
currentFolder.value = data;
memoryFolder.value = currentFolder.value;
searchParams.value = {
...getValidSearchFormFun(),
fileId: currentFolder.value?.id || '',
dirType: props.dirType,
};
if (!currentFolder.value) {
baseTableRef.value?.resetFun();
}
};
const updateNavFun = (data: any) => {

View File

@@ -28,22 +28,22 @@ const tagTypeMapList = commonStore.getDictData('TAG_TYPE_MAP_LIST')?.A || [];
const showCreateWorkTimeVisible = ref(false);
const actionList = ref([
{
title: '报工',
type: 'primary',
click: (row: any) => {
showCreateWorkTimeVisible.value = true;
taskInfo.uuid = row.uuid;
taskInfo.taskName = row.taskName;
taskInfo.description = row.description;
taskInfo.workName = row.tag1Code + '-' + row.tag5Code + '-' + row.taskName;
tagTypeMapList.forEach((item: any) => {
if (item.value === NODE_TYPE.WORKSPACE) {
taskInfo.workspace = row[item.label];
}
});
},
},
// {
// title: '报工',
// type: 'primary',
// click: (row: any) => {
// showCreateWorkTimeVisible.value = true;
// taskInfo.uuid = row.uuid;
// taskInfo.taskName = row.taskName;
// taskInfo.description = row.description;
// taskInfo.workName = row.tag1Code + '-' + row.tag5Code + '-' + row.taskName;
// tagTypeMapList.forEach((item: any) => {
// if (item.value === NODE_TYPE.WORKSPACE) {
// taskInfo.workspace = row[item.label];
// }
// });
// },
// },
]);
</script>
<style lang="scss" scoped></style>

View File

@@ -27,22 +27,22 @@ const tagTypeMapList = commonStore.getDictData('TAG_TYPE_MAP_LIST')?.A || [];
const showCreateWorkTimeVisible = ref(false);
const actionList = ref([
{
title: '创建报工',
type: 'primary',
click: (row: any) => {
showCreateWorkTimeVisible.value = true;
taskInfo.uuid = row.uuid;
taskInfo.taskName = row.taskName;
taskInfo.description = row.description;
taskInfo.workName = row.tag1Code + '-' + row.tag5Code + '-' + row.taskName;
tagTypeMapList.forEach((item: any) => {
if (item.value === NODE_TYPE.WORKSPACE) {
taskInfo.workspace = row[item.label];
}
});
},
},
// {
// title: '创建报工',
// type: 'primary',
// click: (row: any) => {
// showCreateWorkTimeVisible.value = true;
// taskInfo.uuid = row.uuid;
// taskInfo.taskName = row.taskName;
// taskInfo.description = row.description;
// taskInfo.workName = row.tag1Code + '-' + row.tag5Code + '-' + row.taskName;
// tagTypeMapList.forEach((item: any) => {
// if (item.value === NODE_TYPE.WORKSPACE) {
// taskInfo.workspace = row[item.label];
// }
// });
// },
// },
]);
</script>
<style lang="scss" scoped></style>

View File

@@ -88,7 +88,7 @@
<el-button
:icon="DArrowLeft"
@click="backFun"
:disabled="navList.length <= 1"
:disabled="navList.length === 0"
>{{ $t('通用.返回上一级') }}</el-button
>
<el-button
@@ -248,14 +248,40 @@ const { KNOWLEDGE_APPROVE_STATUS, KNOWLEDGE_APPROVE_TYPE } = useDict(
type Data = RenderContentContext['data'];
const fileTreeRef = ref<any>();
const baseTableRef = ref<any>();
const tableSearchRef = ref<any>();
const navList = ref<any>([]);
const currentFolder = ref();
const memoryFolder = ref();
const currentFolderMode: Ref<'add' | 'edit'> = ref('add');
const getValidSearchFormFun = () => {
const form = cloneDeep(tableSearchRef.value?.getSearchParamsFun?.() || {});
Object.keys(form).forEach((key) => {
const value = form[key];
if (
value === '' ||
value === null ||
value === undefined ||
(Array.isArray(value) && value.length === 0)
) {
delete form[key];
}
});
return form;
};
const choseNodeFun = (data: Data) => {
isSearching.value = false;
currentFolder.value = data;
memoryFolder.value = currentFolder.value;
searchParams.value = {
...getValidSearchFormFun(),
fileId: currentFolder.value?.id || '',
dirType: DIR_TYPE.KNOWLEDGE,
};
if (!currentFolder.value) {
baseTableRef.value?.resetFun();
}
};
const updateNavFun = (data: any) => {

View File

@@ -338,6 +338,7 @@
:current-run-ifno="runInfo"
></resultData>
<jobList
ref="jobListRef"
v-if="taskActiveName === 'job-list'"
:current-run-info="runInfo"
></jobList>
@@ -461,6 +462,7 @@ const executeMode = ref('MANUAL');
const visible = ref(false);
const nodeActiveName = ref('info');
const taskActiveName = ref('job-list');
const jobListRef = ref();
const leftFullScreen = ref(false);
const rightFullScreen = ref(false);
@@ -583,6 +585,9 @@ const currentRunNodeInfo = ref<any>({});
// 更新执行流程节点信息
const refreshFlowPage = async () => {
await runFlowPageRef.value.updateDataJsonInfoFun();
if (jobListRef.value) {
jobListRef.value.refrehFun();
}
};
// 开始执行任务
@@ -1052,7 +1057,7 @@ const getSubmitParamFun = async (appPath: any) => {
};
const getNodeFileIdAndNames = async () => {
const dirId = flowNodeData.value.userParams.inputDirId;
const dirId = flowNodeData.value.inputDirId;
let nodeExeCommand = flowNodeParamData.value.nodeExeCommand;
const params = nodeExeCommand.split(' ').filter((item: any) => {
return item.startsWith('$');
@@ -1062,11 +1067,11 @@ const getNodeFileIdAndNames = async () => {
for (const key in flowNodeData.value.userParams) {
if (params[i].includes(key)) {
// 1.字符串
if (flowNodeData.value.userParams[key] instanceof String) {
if (flowNodeData.value?.userParams[key] instanceof String) {
nodeExeCommand = nodeExeCommand.replace(params[i], flowNodeData.value.userParams[key]);
} else if (flowNodeData.value.userParams[key] instanceof Array) {
} else if (flowNodeData.value?.userParams[key] instanceof Array) {
// 2.数组
const names = flowNodeData.value.userParams[key]
const names = flowNodeData.value?.userParams[key]
.map((item: any) => {
const name = item.split('/').at(-1);
return name;
@@ -1381,6 +1386,15 @@ watch(
const timer = ref<any>(null);
emitter.on('WS_RECEICE_MSG', (msgData: any) => {
const { scene, data } = msgData;
if (scene === 'FLOW_NODE_STATUS_CHANGED') {
if (data?.statusCode) {
refreshFlowPage();
}
}
});
onMounted(async () => {
await getDictionaryDataFun();
emitter.on('UPLOAD_FINISHED', uploadFinishedFun);
@@ -1392,6 +1406,14 @@ onMounted(async () => {
onBeforeUnmount(() => {
emitter.off('UPLOAD_FINISHED', uploadFinishedFun);
emitter.off('WS_RECEICE_MSG', (msgData: any) => {
const { scene, data } = msgData;
if (scene === 'FLOW_NODE_STATUS_CHANGED') {
if (data?.statusCode) {
refreshFlowPage();
}
}
});
clearInterval(timer.value);
});

View File

@@ -157,10 +157,10 @@ const initGraph = async () => {
panning: {
enabled: true,
},
interacting: {
// 禁用画布拖拽
nodeMovable: false,
},
// interacting: {
// // 禁用画布拖拽
// nodeMovable: false,
// },
container: document.getElementById('flow-view-content') as HTMLElement,
autoResize: true,
// 画布的最小最大缩放级别

View File

@@ -43,7 +43,7 @@
</template>
<template #software="{ row }">
<div calss="img-box">
<img width="14" :src="getAppImg(row)" alt="" />
<img width="20" class="mar5" :src="getAppImg(row)" alt="" />
<span>{{ row.software }}</span>
</div>
</template>
@@ -169,6 +169,164 @@ const getAppInfo = async () => {
} catch {}
};
const testData = ref([
{
id: 39,
jobName: '测试任务1774402879211',
coreNum: 4,
software: '动力学计算',
jobType: '仿真',
independence: 1,
inputFiles: '[]',
masterFile:
'\\\\HPC-COMPUTE-01\\share\\spdm\\1979078323595476993\\测试任务1774402879211\\1774402847319\\HOOD_MODES20250903_2.bdf',
taskId: '39e14d8655b24d7787ac964d91fb7d3f',
taskName: '1',
runId: '0f34d633aec449008b580759762c2643',
runName: 'ZY_Test_Project_undefined_1_A11',
softwareId: 'app_center_025b7539-844d-4dc7-b343-4760b7a1b43d67282',
inputFileId: null,
jobId: '49',
jobDetailId: null,
stdoutHpcFilePath:
'\\\\HPC-COMPUTE-01\\share\\spdm\\1979078323595476993\\测试任务1774402879211\\1774402847319\\',
stdoutSpdmMinoFilePath:
'projectNode/100环境新建测试项目/T01/1/1/ZY_Test_Project_undefined_1_A11/迈曦/数据输出/',
stdoutSpdmNasFilePath:
'/home/simulation/projectNode/100环境新建测试项目/T01/1/1/ZY_Test_Project_undefined_1_A11/迈曦/数据输出/',
nodeName: null,
executCommand:
'"\\\\HPC-COMPUTE-01\\share\\MxMech\\Release\\mxlibi\\MxSim.exe" -i "HOOD_MODES20250903_2.bdf" -t 4',
startTime: '2026/3/25 9:41:36',
endTime: '2026/3/25 9:43:32',
jobStatus: 'Finished',
solverName: '动力学计算',
totalKernelTime: null,
totalUserTime: null,
totalElapsedTime: 116,
uuid: null,
fileStatus: 'finished',
creatorId: 1979078323595477000,
tenantId: 1979091834410176500,
createTime: '2026-03-25 09:40:49',
updaterId: 1979078323595477000,
updateTime: '2026-03-25 09:42:53',
dirId: 125539,
inputFormat: 'Xi4qXFwuYmRmJA==',
slaveFormat: '',
outputFormat: '',
processDefinitionId: 'f9dfc573-21f2-11f1-9fc5-d2cf4bdb1401',
processInstanceId: '9ade8cc5-27eb-11f1-9fc5-d2cf4bdb1401',
delFlag: 'N',
costTime: '1分钟56秒',
jobDesc: null,
groupId: null,
},
{
id: 37,
jobName: '测试任务1774265301954',
coreNum: 4,
software: '动力学计算',
jobType: '仿真',
independence: 0,
inputFiles: '[]',
masterFile:
'\\\\HPC-COMPUTE-01\\share\\spdm\\1979078323595476993\\测试任务1774265301954\\1774265311763\\HOOD_MODES20250903_2.bdf',
taskId: '39e14d8655b24d7787ac964d91fb7d3f',
taskName: '1',
runId: 'c94c8529e16a4990b430c31570868d0e',
runName: '算例_A8',
softwareId: 'app_center_025b7539-844d-4dc7-b343-4760b7a1b43d67282',
inputFileId: null,
jobId: '47',
jobDetailId: null,
stdoutHpcFilePath:
'\\\\HPC-COMPUTE-01\\share\\spdm\\1979078323595476993\\测试任务1774265301954\\1774265311763\\',
stdoutSpdmMinoFilePath: 'projectNode/100环境新建测试项目/T01/1/1/算例_A8/迈曦/数据输出/',
stdoutSpdmNasFilePath:
'/home/simulation/projectNode/100环境新建测试项目/T01/1/1/算例_A8/迈曦/数据输出/',
nodeName: null,
executCommand:
'"\\\\HPC-COMPUTE-01\\share\\MxMech\\Release\\mxlibi\\MxSim.exe" -i "HOOD_MODES20250903_2.bdf" -t 4',
startTime: '2026/3/23 19:29:18',
endTime: '2026/3/23 19:31:14',
jobStatus: 'Finished',
solverName: '动力学计算',
totalKernelTime: null,
totalUserTime: null,
totalElapsedTime: 116,
uuid: null,
fileStatus: 'finished',
creatorId: 1979078323595477000,
tenantId: 1979091834410176500,
createTime: '2026-03-23 19:28:34',
updaterId: 1979078323595477000,
updateTime: '2026-03-23 19:31:01',
dirId: 125475,
inputFormat: 'Xi4qXFwuYmRmJA==',
slaveFormat: '',
outputFormat: '',
processDefinitionId: 'f9dfc573-21f2-11f1-9fc5-d2cf4bdb1401',
processInstanceId: '5cc93814-26ab-11f1-9fc5-d2cf4bdb1401',
delFlag: 'N',
costTime: '1分钟56秒',
jobDesc: null,
groupId: null,
},
{
id: 33,
jobName: '测试任务1773990450211',
coreNum: 4,
software: '动力学计算',
jobType: '仿真',
independence: 0,
inputFiles: '[]',
masterFile:
'\\\\HPC-COMPUTE-01\\share\\spdm\\1979078323595476993\\测试任务1773990450211\\1773990590665\\HOOD_MODES20250903_2.bdf',
taskId: '39e14d8655b24d7787ac964d91fb7d3f',
taskName: '1',
runId: '3fccaf74ba454baa99ab662c1e55f344',
runName: '100_TEST_PROJECT_undefined_1_A5',
softwareId: 'app_center_025b7539-844d-4dc7-b343-4760b7a1b43d67282',
inputFileId: null,
jobId: '43',
jobDetailId: null,
stdoutHpcFilePath:
'\\\\HPC-COMPUTE-01\\share\\spdm\\1979078323595476993\\测试任务1773990450211\\1773990590665\\',
stdoutSpdmMinoFilePath:
'projectNode/100环境新建测试项目/T01/1/1/100_TEST_PROJECT_undefined_1_A5/迈曦/数据输出/',
stdoutSpdmNasFilePath:
'/home/simulation/projectNode/100环境新建测试项目/T01/1/1/100_TEST_PROJECT_undefined_1_A5/迈曦/数据输出/',
nodeName: null,
executCommand:
'"\\\\HPC-COMPUTE-01\\share\\MxMech\\Release\\mxlibi\\MxSim.exe" -i "HOOD_MODES20250903_2.bdf" -t 4',
startTime: '2026/3/20 15:10:33',
endTime: '2026/3/20 15:12:29',
jobStatus: 'Finished',
solverName: '动力学计算',
totalKernelTime: null,
totalUserTime: null,
totalElapsedTime: 116,
uuid: null,
fileStatus: 'finished',
creatorId: 1979078323595477000,
tenantId: 1979091834410176500,
createTime: '2026-03-20 15:09:53',
updaterId: 1979078323595477000,
updateTime: '2026-03-20 15:12:00',
dirId: 125397,
inputFormat: 'Xi4qXFwuYmRmJA==',
slaveFormat: '',
outputFormat: '',
processDefinitionId: 'f9dfc573-21f2-11f1-9fc5-d2cf4bdb1401',
processInstanceId: 'c4cc40f9-242b-11f1-9fc5-d2cf4bdb1401',
delFlag: 'N',
costTime: '1分钟56秒',
jobDesc: null,
groupId: null,
},
]);
const formData = reactive<any>({
current: 1,
size: 9999,
@@ -186,7 +344,9 @@ const getTableDataFun = async () => {
try {
const res: any = await queryJobsApi(param);
if (res && res.code === 200) {
list = res.data.data;
list = testData.value;
// list = res.data.data;
const list2 = tableData.value.map((item: any) => {
const obj = {
...item,
@@ -259,9 +419,9 @@ const getJobFileListFun = async (row: any) => {
onMounted(async () => {
if (props.currentRunInfo) {
refrehFun();
timer.value = setInterval(() => {
refrehFun();
}, 60 * 1000);
// timer.value = setInterval(() => {
// refrehFun();
// }, 60 * 1000);
}
await getAppInfo();
@@ -297,4 +457,13 @@ onBeforeUnmount(() => {
align-items: center;
justify-content: center;
}
.img-box{
display: flex;
align-items: center;
}
.mar5{
margin-right: 5px;
}
</style>

View File

@@ -1433,6 +1433,7 @@ const submitFun2 = async () => {
ElMessage.success('上传成功');
reloadFun();
}
tableData2.value = [];
uploadFileVisible.value = false;
};

View File

@@ -193,21 +193,21 @@ const queryRunDirFun = async (param: any) => {
localParams.folderPath = props.nodeInfo?.outputDirNasPath || '';
}
if (localParams.folderPath) {
const res3: any = await getLocalFilesApi(localParams);
if (res3 && res3.code === 200) {
const data3 = res3.data.map((item: any) => {
return {
...item,
originalName: item.name,
objectKey: item.fullPath.replace('/home/simulation/', ''),
fileSize: Number(item.fileSize) ? item.fileSize : 1024,
localFile: true,
};
});
// res.data.data = res.data.data.concat(data3);
}
}
// if (localParams.folderPath) {
// const res3: any = await getLocalFilesApi(localParams);
// if (res3 && res3.code === 200) {
// const data3 = res3.data.map((item: any) => {
// return {
// ...item,
// originalName: item.name,
// objectKey: item.fullPath.replace('/home/simulation/', ''),
// fileSize: Number(item.fileSize) ? item.fileSize : 1024,
// localFile: true,
// };
// });
// // res.data.data = res.data.data.concat(data3);
// }
// }
return res;
};

View File

@@ -72,6 +72,11 @@
{{ row.taskName }}
</span>
</template>
<template #tag10="{ row }">
<span class="task-name" @click="nameClickFun(row)">
{{ row.tag10 }}
</span>
</template>
<template #demandName="{ row }">
<span class="demand-name" @click="seeDemandDetailDialogFun(row.demandId)">
{{ row.demandName }}