diff --git a/src/api/data/data.ts b/src/api/data/data.ts index fa638e6c..3964ce63 100644 --- a/src/api/data/data.ts +++ b/src/api/data/data.ts @@ -58,7 +58,7 @@ export const dataExportKnowledgeListApi = (params: any, filename: string) => { return download(`${PREFIX}data/exportKnowledgeList`, params, filename); }; export const dataDownloadFileApi = (params: any) => { - return get(`${PREFIX}data/downloadFile`, params); + return post(`${PREFIX}data/downloadFile`, params); }; export const getFileBaseInfoApi = (params: any) => { diff --git a/src/api/project/run.ts b/src/api/project/run.ts index 4b315a82..e04b7440 100644 --- a/src/api/project/run.ts +++ b/src/api/project/run.ts @@ -267,3 +267,12 @@ export const syncKeyResultToTaskApi = (params: any) => { export const generateNewReportApi = (params: any) => { return download(`${PREFIX}run/generateNewReport`, params, params.fileName); }; + +/** + * 流程失败节点重试 + * @param params processInstanceId failNodeId + * @returns + */ +export const retryFailedNodeApi = (params: any) => { + return post(`${PREFIX}run/retryFailedNode`, params); +}; diff --git a/src/components/flow/flowNodeParamTable.vue b/src/components/flow/flowNodeParamTable.vue index 6e670c5a..264353da 100644 --- a/src/components/flow/flowNodeParamTable.vue +++ b/src/components/flow/flowNodeParamTable.vue @@ -238,10 +238,12 @@ const formatDataFun = (list: any, parentId: any) => { } } }; +const uploadFileFlag = ref(false); const checkParamRequired = ref(false); // 保存参数 -const saveNodeParamFun = async () => { +const saveNodeParamFun = async (flag?: any) => { + uploadFileFlag.value = false; const runNodeInfo = props.currentNode?.store?.data?.data?.flowNodeInfo; const runNodeData = props.currentNode?.store?.data?.data; const newParams: any = cloneDeep(tableData.value); @@ -251,7 +253,7 @@ const saveNodeParamFun = async () => { checkParamRequiredFun(newParams); if (checkParamRequired.value) { - ElMessage.warning('存在必填项没有填写!'); + // ElMessage.warning('存在必填项没有填写!'); checkParamRequired.value = false; // return; inputParams.executeMode = 'MANUAL'; @@ -259,7 +261,7 @@ const saveNodeParamFun = async () => { inputParams.executeMode = 'AUTO'; } - await setDataToParam(newParams, inputParams, true); + await setDataToParam(newParams, inputParams, true, flag); if (runNodeData.nodeType === 'HPC') { setSpecialParamData(inputParams, runNodeData); @@ -276,7 +278,7 @@ const saveNodeParamFun = async () => { const res: any = await saveNodeParamsApi(params); if (res && res.code === 200) { ElMessage.success('保存成功'); - emits('confirm'); + emits('confirm', { flag: uploadFileFlag.value }); } }; @@ -301,15 +303,16 @@ const checkParamRequiredFun = (list: any) => { } }; -const setDataToParam = async (list: any, obj: any, isUpload?: any) => { +const setDataToParam = async (list: any, obj: any, isUpload?: any, flag?: any) => { for (let i = 0; i < list.length; i++) { if (list[i]?.englishLabel) { if (list[i].tagType === WIDGET_TYPE.FILE && list[i]?.fileList?.length) { const fileList = list[i]?.fileList || []; let arrs: any = []; if (fileList.length) { - const fileData = await runUploadRunFilesFun(fileList); + const fileData = await runUploadRunFilesFun(fileList, flag); arrs = fileData; + uploadFileFlag.value = true; // for (let j = 0; j < fileList.length; j++) { // if (isUpload) { // await uploadRunFilesFun(fileList[j].raw); @@ -326,14 +329,14 @@ const setDataToParam = async (list: any, obj: any, isUpload?: any) => { if (list[i].tagType === WIDGET_TYPE.VIEW && list[i].tagIcon === 'row') { if (list[i]?.children?.length) { obj[list[i].vModel] = {}; - setDataToParam(list[i]?.children, obj[list[i].vModel], isUpload); + setDataToParam(list[i]?.children, obj[list[i].vModel], isUpload, flag); } } } } }; -const runUploadRunFilesFun = async (list: any) => { +const runUploadRunFilesFun = async (list: any, flag: any) => { const sourceFiles = []; for (let i = 0; i < list.length; i++) { @@ -370,6 +373,7 @@ const runUploadRunFilesFun = async (list: any) => { ...item, isApprove: 0, // 0否 1是 taskType: 4, // 4交付物 + callbackFlag: flag, }, }); }); @@ -468,7 +472,9 @@ const setReportSpecialParamDataFun = (param: any) => { localStorage.getItem('CURRENT_FILTER_RUN_TASK_TREE_PARAM') as string ); - param.reportName = '算例报告_' + dayjs().format('YYYY_MM_DD_HH_mm'); + if (!param.reportName) { + param.reportName = '算例报告_' + dayjs().format('YYYY_MM_DD_HH_mm'); + } param.applicants = getUserData().nickname; param.date = dayjs().format('YYYY-MM-DD HH:mm:ss'); param.loadcaseName = props.runInfo.parentName; diff --git a/src/components/task/hpcList.vue b/src/components/task/hpcList.vue index e0697275..27984a90 100644 --- a/src/components/task/hpcList.vue +++ b/src/components/task/hpcList.vue @@ -12,17 +12,26 @@ fullHeight > - + diff --git a/src/views/simulation/creation/components/stencil.ts b/src/views/simulation/creation/components/stencil.ts index 21537003..17907298 100644 --- a/src/views/simulation/creation/components/stencil.ts +++ b/src/views/simulation/creation/components/stencil.ts @@ -159,7 +159,7 @@ export const getNodeList = async (noload?: any) => { if (!noload) { apps[i].nodeParamConfigName = await getAppConfigListFun(apps[i].uuid); } - typeKeyArray[apps[i].appType].nodes.push(apps[i]); + typeKeyArray[apps[i].appType]?.nodes?.push(apps[i]); appList.push(apps[i]); } } diff --git a/src/views/task/execution/components/leftTaskTree/index.vue b/src/views/task/execution/components/leftTaskTree/index.vue index dfe2081a..5cf6da72 100644 --- a/src/views/task/execution/components/leftTaskTree/index.vue +++ b/src/views/task/execution/components/leftTaskTree/index.vue @@ -610,6 +610,7 @@ const createRunFun = async (data: any) => { currentNodeInfo.value = runInfo; defaultExpandKeys.value = [runInfo.id]; taskTreeRef.value.setCurrentKey(runInfo.id); + emits('nodeClickFn', { node: currentNodeInfo.value }); } } else { info.label = info.runNames; diff --git a/src/views/task/execution/components/runDetailPage/index.vue b/src/views/task/execution/components/runDetailPage/index.vue index 83f90181..08091732 100644 --- a/src/views/task/execution/components/runDetailPage/index.vue +++ b/src/views/task/execution/components/runDetailPage/index.vue @@ -3,21 +3,9 @@
{{ currentRunNodeInfo?.runName }}
-
任务状态: -
- @@ -62,37 +50,14 @@
- 开始 - - - - 刷新 - 作业列表
@@ -110,47 +75,36 @@
- - -
-
-
节点详情
-
- - -
-
-
-
- - - - - - -
-
- - - - + - -
-
- - + - - + + -
-
- -
-
- - - {{ flowNodeData.nodeName }} - - - {{ - getTypeNameFun(flowNodeParamData.nodeTypeValue) - }} - {{ getTypeNameFun(flowNodeParamData.nodeTypeValue) }} - {{ getTypeNameFun(flowNodeParamData.nodeTypeValue) }} - {{ - getTypeNameFun(flowNodeParamData.nodeTypeValue) - }} +
+
+ +
+
+ + + {{ flowNodeData.nodeName }} + + + {{ + getTypeNameFun(flowNodeParamData.nodeTypeValue) + }} + {{ + getTypeNameFun(flowNodeParamData.nodeTypeValue) + }} + {{ + getTypeNameFun(flowNodeParamData.nodeTypeValue) + }} + {{ + getTypeNameFun(flowNodeParamData.nodeTypeValue) + }} - - - -
-
-
- {{ getStyleFun(flowNodeData?.nodeStatus).title }} -
-
+ +
+ +
+
+
+ {{ getStyleFun(flowNodeData?.nodeStatus).title }} +
+
- -
- - - - {{ flowNodeData?.nodeDetailInfo?.durationFormatted || '--' }} - - - - - - {{ flowNodeData?.nodeDetailInfo?.startTime || '--' }} - - - - - - {{ flowNodeData?.nodeDetailInfo?.endTime || '--' }} - - -
-
-
+ +
+ + + + {{ flowNodeData?.nodeDetailInfo?.durationFormatted || '--' }} + + + + + + {{ flowNodeData?.nodeDetailInfo?.startTime || '--' }} + + + + + + {{ flowNodeData?.nodeDetailInfo?.endTime || '--' }} + + +
- - -
-
-
作业相关
-
- - -
-
-
-
- - - - - - - - - - -
-
- - - - - - - - -
-
+
+
+ + +
+
+
作业相关
+
+ +
- + + + + + + + +
+
+ + + + + + + + +
+
+
+
@@ -353,7 +295,7 @@ diff --git a/src/views/task/execution/components/runDetailPage/runPagecomponent/jobList.vue b/src/views/task/execution/components/runDetailPage/runPagecomponent/jobList.vue index 14e50a04..93c0890f 100644 --- a/src/views/task/execution/components/runDetailPage/runPagecomponent/jobList.vue +++ b/src/views/task/execution/components/runDetailPage/runPagecomponent/jobList.vue @@ -8,8 +8,24 @@ :params="{ runId: currentRunInfo?.uuid, }" + :actionList="actionList" :fullHeight="true" > + + @@ -18,6 +34,7 @@ import { ref } from 'vue'; import BaseTable from '@/components/common/table/baseTable.vue'; import { queryJobsApi } from '@/api/pbs/pbs'; +import { useDict } from '@/utils/useDict'; defineProps({ currentRunInfo: { @@ -25,8 +42,20 @@ defineProps({ default: () => {}, }, }); +const { WORK_STATUS } = useDict('WORK_STATUS'); const baseTableRef = ref(); + +const actionList = ref([ + { + title: '暂停', + type: 'danger', + click: (row: any) => {}, + hide: (row: any) => { + return !['Canceled', 'Finished', 'Failed'].includes(row.jobStatus); + }, + }, +]);