merge
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { download, post, upload } from '@/api/request';
|
||||
import { download, post, upload, get } from '@/api/request';
|
||||
|
||||
const env = import.meta.env;
|
||||
const PREFIX = env.VITE_API_PREFIX_PROJECT;
|
||||
@@ -181,3 +181,20 @@ export const deliverableApproveApi = (params: any) => {
|
||||
export const editSimulationKeyResultApi = (params: any) => {
|
||||
return post(`${PREFIX}run/editSimulationKeyResult`, params);
|
||||
};
|
||||
|
||||
/**
|
||||
* 查询物理量相关信息
|
||||
* @returns
|
||||
*/
|
||||
export const listQuantitiesApi = () => {
|
||||
return get(`${PREFIX}run/listQuantities`);
|
||||
};
|
||||
|
||||
/**
|
||||
* 根据物理量获取对应单位
|
||||
* @param params quantityType 物理量名称
|
||||
* @returns
|
||||
*/
|
||||
export const listUnitsApi = (params: any) => {
|
||||
return get(`${PREFIX}run/listUnits`, params);
|
||||
};
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
startTime: '',
|
||||
endTime: '',
|
||||
}"
|
||||
:full-height="true"
|
||||
:actionList="actionList"
|
||||
>
|
||||
<template #leftOptions v-if="taskInfo.status != 3">
|
||||
@@ -73,10 +74,28 @@
|
||||
</template>
|
||||
|
||||
<template #quantityType="{ row }">
|
||||
<el-input v-model="row.quantityType"></el-input>
|
||||
<el-select
|
||||
v-model="row.quantityType"
|
||||
filterable
|
||||
@change="getQuantityUnitFun(row, 'quantityType', 'unitsList')"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in quantityTypeList"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.name"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
<template #units="{ row }">
|
||||
<el-input v-model="row.units"></el-input>
|
||||
<el-select v-model="row.units" filterable>
|
||||
<el-option
|
||||
v-for="item in row.unitsList"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.label"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
<template #max="{ row }">
|
||||
<el-input v-model="row.max"></el-input>
|
||||
@@ -88,28 +107,100 @@
|
||||
<el-input v-model="row.description"></el-input>
|
||||
</template>
|
||||
<template #xQuantityType="{ row }">
|
||||
<el-input v-model="row.xQuantityType"></el-input>
|
||||
<el-select
|
||||
v-model="row.xQuantityType"
|
||||
filterable
|
||||
@change="getQuantityUnitFun(row, 'xQuantityType', 'xUnitsList')"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in quantityTypeList"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.name"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
<template #xquantityType="{ row }">
|
||||
<el-input v-model="row.xquantityType"></el-input>
|
||||
<el-select
|
||||
v-model="row.xquantityType"
|
||||
filterable
|
||||
@change="getQuantityUnitFun(row, 'xquantityType', 'xunitsList')"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in quantityTypeList"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.name"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
<template #xUnits="{ row }">
|
||||
<el-input v-model="row.xUnits"></el-input>
|
||||
<el-select v-model="row.xUnits" filterable>
|
||||
<el-option
|
||||
v-for="item in row.xUnitsList"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.label"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
<template #xunits="{ row }">
|
||||
<el-input v-model="row.xunits"></el-input>
|
||||
<el-select v-model="row.xunits" filterable>
|
||||
<el-option
|
||||
v-for="item in row.xunitsList"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.label"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
<template #yQuantityType="{ row }">
|
||||
<el-input v-model="row.yQuantityType"></el-input>
|
||||
<el-select
|
||||
v-model="row.yQuantityType"
|
||||
filterable
|
||||
@change="getQuantityUnitFun(row, 'yQuantityType', 'yUnitsList')"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in quantityTypeList"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.name"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
<template #yquantityType="{ row }">
|
||||
<el-input v-model="row.yquantityType"></el-input>
|
||||
<el-select
|
||||
v-model="row.yquantityType"
|
||||
filterable
|
||||
@change="getQuantityUnitFun(row, 'yquantityType', 'yunitsList')"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in quantityTypeList"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.name"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
<template #yUnits="{ row }">
|
||||
<el-input v-model="row.yUnits"></el-input>
|
||||
<el-select v-model="row.yUnits" filterable>
|
||||
<el-option
|
||||
v-for="item in row.yUnitsList"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.label"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
<template #yunits="{ row }">
|
||||
<el-input v-model="row.yunits"></el-input>
|
||||
<el-select v-model="row.yunits" filterable>
|
||||
<el-option
|
||||
v-for="item in row.yunitsList"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.label"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
</BaseTable>
|
||||
|
||||
@@ -168,7 +259,12 @@ import { formatFileSize } from '@/utils/file';
|
||||
import FilePreview from '@/components/common/filePreview/index.vue';
|
||||
import Dialog from '@/components/common/dialog/index.vue';
|
||||
import emitter from '@/utils/eventBus';
|
||||
import { batchAddSimulationKeyResultApi, deliverableApproveApi } from '@/api/project/run';
|
||||
import {
|
||||
batchAddSimulationKeyResultApi,
|
||||
deliverableApproveApi,
|
||||
listQuantitiesApi,
|
||||
listUnitsApi,
|
||||
} from '@/api/project/run';
|
||||
import { systemApproveQueryApproveFlowTempalteApi } from '@/api/system/systemApprove';
|
||||
import { ElMessage } from 'element-plus';
|
||||
import { downloadFileById } from '@/utils/file';
|
||||
@@ -419,8 +515,31 @@ const submitApprovalFun = async () => {
|
||||
approvaVisable.value = false;
|
||||
};
|
||||
|
||||
const quantityTypeList = ref<any>([]);
|
||||
|
||||
const getQuantityTypeFun = async () => {
|
||||
const res: any = await listQuantitiesApi();
|
||||
if (res && res.code === 200) {
|
||||
quantityTypeList.value = res.data;
|
||||
}
|
||||
};
|
||||
|
||||
const getQuantityUnitFun = async (row: any, name: any, flag: any) => {
|
||||
if (name) {
|
||||
const res: any = await listUnitsApi({ quantityType: row[name] });
|
||||
if (res && res.code === 200) {
|
||||
row[flag] = res.data;
|
||||
} else {
|
||||
row[flag] = [];
|
||||
}
|
||||
} else {
|
||||
row[flag] = [];
|
||||
}
|
||||
};
|
||||
|
||||
onMounted(async () => {
|
||||
await systemApproveQueryApproveFlowTempalteFun();
|
||||
await getQuantityTypeFun();
|
||||
getTaskRunInfoFun();
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
hidePagination
|
||||
:actionList="actionList"
|
||||
:export-params="excelParams"
|
||||
:full-height="fullHeight"
|
||||
>
|
||||
<template #leftOptions>
|
||||
<div class="operate-box">
|
||||
@@ -54,7 +55,12 @@
|
||||
import { ref, onMounted, nextTick } from 'vue';
|
||||
import BaseTable from '@/components/common/table/baseTable.vue';
|
||||
import { ElMessage } from 'element-plus';
|
||||
import { getTaskPerformanceApi, batchAddTaskPerformanceApi, batchDeleteTaskPerformanceApi, getRunPerformanceApi } from '@/api/task/taskpool';
|
||||
import {
|
||||
getTaskPerformanceApi,
|
||||
batchAddTaskPerformanceApi,
|
||||
batchDeleteTaskPerformanceApi,
|
||||
getRunPerformanceApi,
|
||||
} from '@/api/task/taskpool';
|
||||
import { FileUtil } from '@/utils/file';
|
||||
import addTaskPerformance from './addTaskPerformance.vue';
|
||||
import { editPerformanceApi, exportPerformanceApi } from '@/api/task/taskPerformance';
|
||||
@@ -68,11 +74,11 @@ const props = defineProps({
|
||||
},
|
||||
runInfo: {
|
||||
type: Object,
|
||||
default: () => { },
|
||||
default: () => {},
|
||||
},
|
||||
taskInfo: {
|
||||
type: Object,
|
||||
default: () => { },
|
||||
default: () => {},
|
||||
},
|
||||
showSaveButton: {
|
||||
type: Boolean,
|
||||
@@ -82,6 +88,10 @@ const props = defineProps({
|
||||
type: String,
|
||||
default: 'task',
|
||||
},
|
||||
fullHeight: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
});
|
||||
const baseTableRef = ref();
|
||||
const performanceVisible = ref(false);
|
||||
@@ -91,7 +101,10 @@ const performanceData = ref<any>([]);
|
||||
const getTaskPerformanceDataFun = async () => {
|
||||
console.log(props.taskId);
|
||||
console.log(props.runInfo);
|
||||
const res: any = props.paramType === 'task' ? await getTaskPerformanceApi({ taskId: props.taskInfo?.id }) : await getRunPerformanceApi({ runId: props.runInfo?.uuid });
|
||||
const res: any =
|
||||
props.paramType === 'task'
|
||||
? await getTaskPerformanceApi({ taskId: props.taskInfo?.id })
|
||||
: await getRunPerformanceApi({ runId: props.runInfo?.uuid });
|
||||
if (res && res.code === 200) {
|
||||
performanceData.value = res.data;
|
||||
|
||||
@@ -99,10 +112,8 @@ const getTaskPerformanceDataFun = async () => {
|
||||
if (baseTableRef.value) {
|
||||
baseTableRef.value.setDataFun(performanceData.value);
|
||||
}
|
||||
|
||||
}
|
||||
// ElMessage.success('获取任务性能指标数据' + props.taskId);
|
||||
|
||||
};
|
||||
|
||||
const openAddPerformanceWindFun = () => {
|
||||
@@ -110,20 +121,20 @@ const openAddPerformanceWindFun = () => {
|
||||
};
|
||||
|
||||
const addPerformanceFun = async (data: any) => {
|
||||
|
||||
console.log(data, 'data');
|
||||
data.flag = 'add';
|
||||
const { fullData, visibleData, tableData, footerData } = baseTableRef.value.tableRef.getTableData();
|
||||
const { fullData, visibleData, tableData, footerData } =
|
||||
baseTableRef.value.tableRef.getTableData();
|
||||
|
||||
const existPerformance = fullData.find((item: any) => {
|
||||
return item.nodeName === data.nodeName;
|
||||
}) || null;
|
||||
const existPerformance =
|
||||
fullData.find((item: any) => {
|
||||
return item.nodeName === data.nodeName;
|
||||
}) || null;
|
||||
|
||||
if (existPerformance) {
|
||||
ElMessage.warning('已存在该指标,无法新增!');
|
||||
} else {
|
||||
baseTableRef.value.tableRef.insertAt(data, -1);
|
||||
|
||||
}
|
||||
|
||||
console.log(fullData, 'fullData');
|
||||
@@ -132,7 +143,6 @@ const addPerformanceFun = async (data: any) => {
|
||||
console.log(footerData, 'footerData');
|
||||
|
||||
performanceVisible.value = false;
|
||||
|
||||
};
|
||||
|
||||
const deletePerformanceList = ref<any>([]);
|
||||
@@ -141,11 +151,9 @@ const delPerformance = (row: any) => {
|
||||
if (row.flag != 'add') {
|
||||
deletePerformanceList.value.push(row);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
const batchAddTaskPerformanceFun = async () => {
|
||||
|
||||
const list = baseTableRef.value.tableRef.getInsertRecords();
|
||||
|
||||
console.log(list, 'list');
|
||||
@@ -183,7 +191,6 @@ const batchAddTaskPerformanceFun = async () => {
|
||||
if (props.paramType === 'run') {
|
||||
obj.runId = props.runInfo.uuid;
|
||||
obj.taskId = props.runInfo.taskId;
|
||||
|
||||
}
|
||||
|
||||
console.log(obj, 'objobjobj');
|
||||
@@ -211,9 +218,7 @@ const batchAddTaskPerformanceFun = async () => {
|
||||
if (res && res.code === 200) {
|
||||
// ElMessage.success('新增成功!');
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
const batchDeleteTaskPerformanceFun = async () => {
|
||||
@@ -226,17 +231,13 @@ const batchDeleteTaskPerformanceFun = async () => {
|
||||
}
|
||||
const res: any = await batchDeleteTaskPerformanceApi(ids);
|
||||
if (res && res.code === 200) {
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
const saveFun = async () => {
|
||||
|
||||
await batchAddTaskPerformanceFun();
|
||||
await batchDeleteTaskPerformanceFun();
|
||||
|
||||
};
|
||||
|
||||
const uploadLocalFileFun = async (File: any) => {
|
||||
@@ -323,7 +324,6 @@ const performanceInfoList = [
|
||||
chineseName: 'uuid',
|
||||
englishName: 'uuid',
|
||||
},
|
||||
|
||||
];
|
||||
|
||||
const performanceFile = ref<any>({});
|
||||
@@ -368,7 +368,6 @@ const handleLocalChangeExcelFun = async (uploadFile: any, uploadFiles: any) => {
|
||||
}
|
||||
for (let i = 0; i < newList.length; i++) {
|
||||
if (!commonNameList.includes(newList[i].performanceName)) {
|
||||
|
||||
baseTableRef.value.tableRef.insertAt(newList[i]);
|
||||
}
|
||||
}
|
||||
@@ -432,7 +431,6 @@ const getFormConfigureFun = async () => {
|
||||
taskId: props.taskInfo.id,
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
@@ -471,11 +469,9 @@ const updatePerformanceFun = async (data: any) => {
|
||||
const res: any = await editPerformanceApi(data);
|
||||
if (res && res.code === 200) {
|
||||
ElMessage.success('操作成功');
|
||||
|
||||
}
|
||||
|
||||
await baseTableRef.value.resetFun();
|
||||
|
||||
await baseTableRef.value.resetFun();
|
||||
};
|
||||
|
||||
onMounted(async () => {
|
||||
|
||||
@@ -41,6 +41,12 @@ export default [
|
||||
name: 'ProjectDataStatistics',
|
||||
component: () => import('@/views/data/statistics/index.vue'),
|
||||
},
|
||||
{
|
||||
title: '仿真闭环看板',
|
||||
path: '/project/dashboard',
|
||||
name: 'SimulationClosedLoopDashboard',
|
||||
component: () => import('@/views/task/dashboard/index.vue'),
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
|
||||
@@ -51,6 +51,7 @@ const lang = {
|
||||
所有任务: 'All Tasks',
|
||||
项目管理: 'Project Management',
|
||||
项目列表: 'Project List',
|
||||
仿真闭环看板: 'Closed-Loop Dashboard',
|
||||
项目详情: 'Project Detail',
|
||||
任务创建: 'Task Creation',
|
||||
任务执行: 'Task Execution',
|
||||
|
||||
@@ -51,6 +51,7 @@ const lang = {
|
||||
所有任务: '所有任务',
|
||||
项目管理: '项目管理',
|
||||
项目列表: '项目列表',
|
||||
仿真闭环看板: '仿真闭环看板',
|
||||
项目详情: '项目详情',
|
||||
任务创建: '任务创建',
|
||||
任务执行: '任务执行',
|
||||
|
||||
6
src/views/task/dashboard/index.vue
Normal file
6
src/views/task/dashboard/index.vue
Normal file
@@ -0,0 +1,6 @@
|
||||
<template>
|
||||
<Developing />
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import Developing from '@/views/error/developing.vue';
|
||||
</script>
|
||||
@@ -1,6 +1,12 @@
|
||||
<template>
|
||||
<Dialog v-model="visible" diaTitle="生成报告" :width="'80%'" :height="'80%'" :zIndex="100" @close="handleCloseFun">
|
||||
|
||||
<Dialog
|
||||
v-model="visible"
|
||||
diaTitle="生成报告"
|
||||
:width="'80%'"
|
||||
:height="'80%'"
|
||||
:zIndex="100"
|
||||
@close="handleCloseFun"
|
||||
>
|
||||
<div class="report-page">
|
||||
<div class="form-box">
|
||||
<el-form :model="reportFormData" inline>
|
||||
@@ -15,7 +21,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="申请日期:">
|
||||
<el-date-picker
|
||||
class="w180"
|
||||
class="w180"
|
||||
v-model="reportFormData.date"
|
||||
type="datetime"
|
||||
placeholder="申请日期"
|
||||
@@ -33,9 +39,24 @@
|
||||
<el-input class="w180" v-model="reportFormData.workspace"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="分析类型:">
|
||||
<el-select class="w180" v-model="reportFormData.taskType" >
|
||||
<el-option v-for="item in taskTypeList" :key="item.value" :label="item.name" :value="item.value"></el-option>
|
||||
<el-select class="w180" v-model="reportFormData.taskType" @change="taskTypeChangeFun">
|
||||
<el-option
|
||||
v-for="item in taskTypeList"
|
||||
:key="item.value"
|
||||
:label="item.name"
|
||||
:value="item.value"
|
||||
></el-option>
|
||||
</el-select>
|
||||
<el-tooltip
|
||||
class="box-item"
|
||||
effect="dark"
|
||||
:content="
|
||||
'该类型包含的图片文件名称为:' + taskTypeImgFileMap[reportFormData.taskType]
|
||||
"
|
||||
placement="top-start"
|
||||
>
|
||||
<el-icon class="ml5"><InfoFilled /></el-icon>
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
<el-form-item label="报告版本:">
|
||||
<el-input class="w180" v-model="reportFormData.reportVer"></el-input>
|
||||
@@ -45,7 +66,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="拟定时间:">
|
||||
<el-date-picker
|
||||
class="w180"
|
||||
class="w180"
|
||||
v-model="reportFormData.formulateTime"
|
||||
type="datetime"
|
||||
placeholder="拟定时间"
|
||||
@@ -55,7 +76,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="检查时间:">
|
||||
<el-date-picker
|
||||
class="w180"
|
||||
class="w180"
|
||||
v-model="reportFormData.checkTime"
|
||||
type="datetime"
|
||||
placeholder="检查时间"
|
||||
@@ -65,7 +86,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="审批时间:">
|
||||
<el-date-picker
|
||||
class="w180"
|
||||
class="w180"
|
||||
v-model="reportFormData.approveTime"
|
||||
type="datetime"
|
||||
placeholder="审批时间"
|
||||
@@ -86,26 +107,37 @@
|
||||
<el-form>
|
||||
<el-form-item label="图片选择:">
|
||||
<div class="img-content">
|
||||
<div class="img-item" v-for="item in resultImgList" :key="item.id">
|
||||
<el-checkbox v-model="item.checkImg" class="check-style" size="large" />
|
||||
<el-image class="img-style" title="点击预览图片" :src="item.url" :zoom-rate="1.2" :max-scale="7"
|
||||
:min-scale="0.2" :preview-src-list="[item.url]" show-progress :initial-index="4" fit="cover" />
|
||||
</div>
|
||||
|
||||
<template v-for="item in resultImgList" :key="item.id">
|
||||
<div class="img-item" v-if="item.show">
|
||||
<el-checkbox v-model="item.checkImg" class="check-style" size="large" />
|
||||
<el-image
|
||||
class="img-style"
|
||||
title="点击预览图片"
|
||||
:src="item.url"
|
||||
:zoom-rate="1.2"
|
||||
:max-scale="7"
|
||||
:min-scale="0.2"
|
||||
:preview-src-list="[item.url]"
|
||||
show-progress
|
||||
:initial-index="4"
|
||||
fit="cover"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
|
||||
</el-form-item>
|
||||
<el-form-item label="指标选择:">
|
||||
<taskPerformance ref="taskPerformanceRef" :task-info="currentNodeInfo" :run-info="currentNodeInfo"
|
||||
:param-type="currentNodeInfo?.nodeType"></taskPerformance>
|
||||
<taskPerformance
|
||||
ref="taskPerformanceRef"
|
||||
:task-info="currentNodeInfo"
|
||||
:run-info="currentNodeInfo"
|
||||
:param-type="currentNodeInfo?.nodeType"
|
||||
></taskPerformance>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</Dialog>
|
||||
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
@@ -120,11 +152,11 @@ const env = import.meta.env;
|
||||
const props = defineProps({
|
||||
currentNodeInfo: {
|
||||
type: Object,
|
||||
default: () => { },
|
||||
default: () => {},
|
||||
},
|
||||
parentNodeInfo: {
|
||||
type: Object,
|
||||
default: () => { },
|
||||
default: () => {},
|
||||
},
|
||||
});
|
||||
|
||||
@@ -139,7 +171,7 @@ const reportFormData = reactive<any>({
|
||||
projectNum: '',
|
||||
workspaceNum: '',
|
||||
workspace: '',
|
||||
taskType: '',
|
||||
taskType: 'statics',
|
||||
reportVer: '',
|
||||
fileNum: '',
|
||||
formulateTime: '',
|
||||
@@ -149,25 +181,64 @@ const reportFormData = reactive<any>({
|
||||
loadcaseName: '',
|
||||
});
|
||||
|
||||
const taskTypeImgFileMap = ref<any>({
|
||||
statics: [
|
||||
'model.png',
|
||||
'stand_distance.png',
|
||||
'stand_stress.png',
|
||||
'forklift_stress.png',
|
||||
'forklift_distance.png',
|
||||
'forklift_max_stress.png',
|
||||
],
|
||||
dynamics: [
|
||||
'square_stress_img0.png',
|
||||
'square_stress_img1.png',
|
||||
'square_distance_img1.png',
|
||||
'square_stress_img2.png',
|
||||
'actuat_distance_img1.png',
|
||||
'actuat_stress_img1.png',
|
||||
'square_x_curve_distance.png',
|
||||
'square_y_curve_distance.png',
|
||||
'square_z_curve_distance.png',
|
||||
'square_stress_img3.png',
|
||||
'actuat_x_curve_distance.png',
|
||||
'actuat_y_curve_distance.png',
|
||||
'actuat_z_curve_distance.png',
|
||||
'actuat_stress_img2.png',
|
||||
],
|
||||
fluid: [
|
||||
'fluid_img1.png',
|
||||
'fluid_img2.png',
|
||||
'velocity_contour.png',
|
||||
'fluid_img3.png',
|
||||
'fluid_img4.png',
|
||||
'fluid_img5.png',
|
||||
'fluid_img6.png',
|
||||
'luid_img7.png',
|
||||
'luid_img8.png',
|
||||
'fluid_img9.png',
|
||||
],
|
||||
thermal: ['img1.png', 'img2.png', 'img3.png', 'img4.png', 'img5.png'],
|
||||
});
|
||||
|
||||
const taskTypeList = ref([
|
||||
{
|
||||
name:'静力学',
|
||||
value:'statics'
|
||||
},
|
||||
{
|
||||
name:'动力学',
|
||||
value:'dynamics'
|
||||
},
|
||||
{
|
||||
name:'流体 ',
|
||||
value:'fluid'
|
||||
},
|
||||
{
|
||||
name:'热分析',
|
||||
value:'thermal'
|
||||
},
|
||||
|
||||
])
|
||||
name: '静力学',
|
||||
value: 'statics',
|
||||
},
|
||||
{
|
||||
name: '动力学',
|
||||
value: 'dynamics',
|
||||
},
|
||||
{
|
||||
name: '流体 ',
|
||||
value: 'fluid',
|
||||
},
|
||||
{
|
||||
name: '热分析',
|
||||
value: 'thermal',
|
||||
},
|
||||
]);
|
||||
|
||||
const handleCloseFun = () => {
|
||||
emits('close');
|
||||
@@ -200,7 +271,6 @@ const createSuccessFun = async () => {
|
||||
projecInfoReq: reportFormData,
|
||||
fileName,
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
const resultImgList = ref<any>([]);
|
||||
@@ -218,14 +288,41 @@ const queryDirDataFun = async () => {
|
||||
url: `${env.VITE_API_IMAGE_PREVIEW_URL}/data/previewImage?fileId=${item.fileId}`,
|
||||
};
|
||||
});
|
||||
|
||||
showIMgFileList();
|
||||
}
|
||||
};
|
||||
|
||||
const taskTypeChangeFun = () => {
|
||||
showIMgFileList();
|
||||
};
|
||||
|
||||
const showIMgFileList = () => {
|
||||
const list = taskTypeImgFileMap.value[reportFormData.taskType];
|
||||
|
||||
for (let i = 0; i < resultImgList.value.length; i++) {
|
||||
resultImgList.value[i].checkImg = false;
|
||||
|
||||
if (list.includes(resultImgList.value[i].name)) {
|
||||
resultImgList.value[i].show = true;
|
||||
} else {
|
||||
resultImgList.value[i].show = false;
|
||||
}
|
||||
}
|
||||
|
||||
console.log(resultImgList.value, 'resultImgList.value');
|
||||
|
||||
// const imgs = resultImgList.value.filter((item: any) => {
|
||||
// return list.includes(item.name);
|
||||
// });
|
||||
|
||||
// return imgs;
|
||||
};
|
||||
|
||||
onMounted(async () => {
|
||||
await queryDirDataFun();
|
||||
reportFormData.reportName = '算例报告_' + dayjs().format('YYYY_MM_DD_HH_mm');
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@@ -240,7 +337,6 @@ onMounted(async () => {
|
||||
}
|
||||
|
||||
.content-box {
|
||||
|
||||
.img-content {
|
||||
width: 100%;
|
||||
min-height: 200px;
|
||||
@@ -261,23 +357,22 @@ onMounted(async () => {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 5px;
|
||||
|
||||
}
|
||||
|
||||
.img-style {
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.w180{
|
||||
.ml5{
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.w180 {
|
||||
width: 230px !important;
|
||||
}
|
||||
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div class="run-detail-page">
|
||||
<div class="run-title-box">
|
||||
<div class="run-title-box" v-show="!leftFullScreen && !rightFullScreen">
|
||||
<div class="task-info">
|
||||
<div class="task-name">{{ currentRunNodeInfo?.runName }}</div>
|
||||
<!-- <div class="task-executor">
|
||||
@@ -18,11 +18,7 @@
|
||||
<!-- <el-icon class="info" title="未开始" v-if="!runFlowPocesInfo?.status">
|
||||
<InfoFilled />
|
||||
</el-icon> -->
|
||||
<el-icon
|
||||
class="upload"
|
||||
title="运行中"
|
||||
v-if="runFlowPocesInfo?.status === 'running'"
|
||||
>
|
||||
<el-icon class="upload" title="运行中" v-if="runFlowPocesInfo?.status === 'running'">
|
||||
<HelpFilled />
|
||||
</el-icon>
|
||||
<el-icon
|
||||
@@ -68,7 +64,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="run-flow-box">
|
||||
<div class="run-flow-box" v-show="!leftFullScreen && !rightFullScreen">
|
||||
<runFlowPage
|
||||
v-if="runInfo.flowTemplate && showPage"
|
||||
:run-info="runInfo"
|
||||
@@ -77,11 +73,21 @@
|
||||
</runFlowPage>
|
||||
</div>
|
||||
|
||||
<div class="run-info-box">
|
||||
<div class="info-box-left">
|
||||
<div :class="leftFullScreen || rightFullScreen ? 'run-info-box is-all-page' : 'run-info-box'">
|
||||
<div v-if="!rightFullScreen" :class="leftFullScreen ? 'info-box-left allpage ' : 'info-box-left'">
|
||||
<div class="bottom-title">
|
||||
<div class="title-name">节点详情</div>
|
||||
<div class="title-operate"></div>
|
||||
<div class="title-operate">
|
||||
<el-icon
|
||||
v-if="!leftFullScreen"
|
||||
@click="leftFullScreen = !leftFullScreen"
|
||||
class="icon-style"
|
||||
><FullScreen
|
||||
/></el-icon>
|
||||
<el-icon v-else @click="leftFullScreen = !leftFullScreen" class="icon-style"
|
||||
><Close
|
||||
/></el-icon>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="bottom-info-content">
|
||||
@@ -112,10 +118,20 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-box-right">
|
||||
<div v-if="!leftFullScreen" :class="rightFullScreen ? 'info-box-right allpage ' : 'info-box-right'">
|
||||
<div class="bottom-title">
|
||||
<div class="title-name">作业相关</div>
|
||||
<div class="title-operate"></div>
|
||||
<div class="title-operate">
|
||||
<el-icon
|
||||
v-if="!rightFullScreen"
|
||||
class="icon-style"
|
||||
@click="rightFullScreen = !rightFullScreen"
|
||||
><FullScreen
|
||||
/></el-icon>
|
||||
<el-icon v-else class="icon-style" @click="rightFullScreen = !rightFullScreen"
|
||||
><Close
|
||||
/></el-icon>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bottom-info-content">
|
||||
<div class="tabs-box">
|
||||
@@ -137,6 +153,7 @@
|
||||
:param-type="'run'"
|
||||
:run-info="runInfo"
|
||||
:show-save-button="true"
|
||||
:full-height="true"
|
||||
></taskPerformance>
|
||||
<runLogs v-if="taskActiveName === 'job-log'"></runLogs>
|
||||
<ModelReview v-if="taskActiveName === '3D-model'"></ModelReview>
|
||||
@@ -182,6 +199,9 @@ const statusList = ref(['未开始', '进行中', '已完成', '回传中', '异
|
||||
const visible = ref(false);
|
||||
const nodeActiveName = ref('param');
|
||||
const taskActiveName = ref('job-list');
|
||||
|
||||
const leftFullScreen = ref(false);
|
||||
const rightFullScreen = ref(false);
|
||||
const showPage = ref(true);
|
||||
const handleLeftClickFun = () => {};
|
||||
|
||||
@@ -304,6 +324,7 @@ watch(
|
||||
.run-detail-page {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
|
||||
.run-title-box {
|
||||
width: 100%;
|
||||
@@ -410,6 +431,13 @@ watch(
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
padding-right: 10px;
|
||||
|
||||
.icon-style {
|
||||
font-size: 16px;
|
||||
color: var(--el-color-primary);
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -431,6 +459,20 @@ watch(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.allpage {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.is-all-page {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
left: 0;
|
||||
top: 0;
|
||||
z-index: 20;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.blue {
|
||||
@@ -450,7 +492,7 @@ watch(
|
||||
}
|
||||
|
||||
.success {
|
||||
color: #67c23a;
|
||||
color: #67c23a;
|
||||
}
|
||||
|
||||
.error {
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
keyResultType,
|
||||
runId: runInfo.uuid,
|
||||
}"
|
||||
:full-height="true"
|
||||
:action-list="actionList"
|
||||
>
|
||||
<template #leftOptions>
|
||||
@@ -44,6 +45,79 @@
|
||||
:show-disabled="currentFileInfo?.uuid || isCsv"
|
||||
@change="chnageFun"
|
||||
/>
|
||||
<el-form :model="uploadFIleFormData" labelPosition="right" labelWidth="90">
|
||||
<el-form-item label="物理量" v-if="getdirNameFun() === '图片结果'">
|
||||
<el-select
|
||||
v-model="uploadFIleFormData.quantityType"
|
||||
filterable
|
||||
@change="getQuantityUnitFun('quantityType', 'unitsList')"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in quantityTypeList"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.name"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="单位" v-if="getdirNameFun() === '图片结果'">
|
||||
<el-select v-model="uploadFIleFormData.units" filterable>
|
||||
<el-option
|
||||
v-for="item in uploadFIleFormData.unitsList"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.label"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="x轴物理量" v-if="getdirNameFun() === '曲线结果'">
|
||||
<el-select
|
||||
v-model="uploadFIleFormData.xQuantityType"
|
||||
filterable
|
||||
@change="getQuantityUnitFun('xQuantityType', 'xUnitsList')"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in quantityTypeList"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.name"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="x轴结果单位" v-if="getdirNameFun() === '曲线结果'">
|
||||
<el-select v-model="uploadFIleFormData.xUnits" filterable>
|
||||
<el-option
|
||||
v-for="item in uploadFIleFormData.xUnitsList"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.label"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="y轴物理量" v-if="getdirNameFun() === '曲线结果'">
|
||||
<el-select
|
||||
v-model="uploadFIleFormData.yQuantityType"
|
||||
filterable
|
||||
@change="getQuantityUnitFun('yQuantityType', 'yUnitsList')"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in quantityTypeList"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.name"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="y轴结果单位" v-if="getdirNameFun() === '曲线结果'">
|
||||
<el-select v-model="uploadFIleFormData.yUnits" filterable>
|
||||
<el-option
|
||||
v-for="item in uploadFIleFormData.yUnitsList"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.label"
|
||||
></el-option> </el-select
|
||||
></el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div>
|
||||
<el-button @click="closeFun">关闭</el-button>
|
||||
@@ -60,8 +134,10 @@ import {
|
||||
addSimulationKeyResultApi,
|
||||
deleteSimulationKeyResultApi,
|
||||
editSimulationKeyResultApi,
|
||||
listQuantitiesApi,
|
||||
listUnitsApi,
|
||||
} from '@/api/project/run';
|
||||
import { ref, watch, nextTick, onMounted } from 'vue';
|
||||
import { ref, watch, nextTick, onMounted, reactive } from 'vue';
|
||||
import BaseTable from '@/components/common/table/baseTable.vue';
|
||||
import { ElMessage } from 'element-plus';
|
||||
import { FILE_TYPE } from '@/utils/enum/file';
|
||||
@@ -76,6 +152,16 @@ const props = defineProps({
|
||||
},
|
||||
});
|
||||
|
||||
const uploadFIleFormData = reactive<any>({
|
||||
quantityType: '',
|
||||
units: '',
|
||||
xQuantityType: '',
|
||||
xUnits: '',
|
||||
|
||||
yQuantityType: '',
|
||||
yUnits: '',
|
||||
});
|
||||
|
||||
const baseTableRef = ref();
|
||||
const tableFormRef = ref();
|
||||
const visible = ref(false);
|
||||
@@ -189,6 +275,10 @@ const openFun = () => {
|
||||
currentFileInfo.value = {};
|
||||
nextTick(() => {
|
||||
tableFormRef.value.resetFun();
|
||||
|
||||
for (const key in uploadFIleFormData) {
|
||||
uploadFIleFormData[key] = '';
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
@@ -203,7 +293,20 @@ const submitFun = async () => {
|
||||
}
|
||||
}
|
||||
|
||||
const res: any = await editSimulationKeyResultApi(paramData);
|
||||
for (const key in uploadFIleFormData) {
|
||||
if (!getparamListFUn().includes(key)) {
|
||||
delete uploadFIleFormData[key];
|
||||
}
|
||||
}
|
||||
|
||||
const param = {
|
||||
...paramData,
|
||||
...uploadFIleFormData,
|
||||
};
|
||||
param.quantityType = quantityTypeList.value.find((item: any) => {
|
||||
return item.name === uploadFIleFormData.quantityType;
|
||||
})?.label;
|
||||
const res: any = await editSimulationKeyResultApi(param);
|
||||
if (res && res.code === 200) {
|
||||
ElMessage.success('操作成功');
|
||||
visible.value = false;
|
||||
@@ -240,6 +343,12 @@ const submitFun = async () => {
|
||||
}
|
||||
}
|
||||
|
||||
for (const key in uploadFIleFormData) {
|
||||
if (!getparamListFUn().includes(key)) {
|
||||
delete uploadFIleFormData[key];
|
||||
}
|
||||
}
|
||||
|
||||
const params = {
|
||||
fileName: name,
|
||||
name: name,
|
||||
@@ -249,8 +358,11 @@ const submitFun = async () => {
|
||||
keyResultType: keyResultType.value,
|
||||
runId: runInfo.value.uuid,
|
||||
...paramData,
|
||||
...uploadFIleFormData,
|
||||
};
|
||||
|
||||
params.quantityType = quantityTypeList.value.find((item: any) => {
|
||||
return item.name === uploadFIleFormData.quantityType;
|
||||
})?.label;
|
||||
await addSimulationKeyResultApi(params).then((res: any) => {
|
||||
if (res.code === 200) {
|
||||
} else {
|
||||
@@ -308,6 +420,10 @@ const actionList = ref([
|
||||
currentFileInfo.value = row;
|
||||
nextTick(() => {
|
||||
tableFormRef.value.setFormDataFun(currentFileInfo.value);
|
||||
|
||||
for (const key in uploadFIleFormData) {
|
||||
uploadFIleFormData[key] = currentFileInfo.value[key];
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
@@ -365,6 +481,47 @@ const chnageFun = async (data: any) => {
|
||||
}
|
||||
}
|
||||
};
|
||||
const quantityTypeList = ref<any>([]);
|
||||
|
||||
const getQuantityTypeFun = async () => {
|
||||
const res: any = await listQuantitiesApi();
|
||||
if (res && res.code === 200) {
|
||||
quantityTypeList.value = res.data;
|
||||
}
|
||||
};
|
||||
|
||||
const getQuantityUnitFun = async (name: any, flag: any) => {
|
||||
if (name) {
|
||||
const res: any = await listUnitsApi({ quantityType: uploadFIleFormData[name] });
|
||||
if (res && res.code === 200) {
|
||||
uploadFIleFormData[flag] = res.data;
|
||||
} else {
|
||||
uploadFIleFormData[flag] = [];
|
||||
}
|
||||
} else {
|
||||
uploadFIleFormData[flag] = [];
|
||||
}
|
||||
};
|
||||
|
||||
const getdirNameFun = () => {
|
||||
const name: any = runDirNameList.value.find((item: any) => {
|
||||
return item.id === currentDirName.value;
|
||||
})?.name;
|
||||
|
||||
return name;
|
||||
};
|
||||
|
||||
const getparamListFUn = () => {
|
||||
const name = getdirNameFun();
|
||||
|
||||
if (name === '图片结果') {
|
||||
return ['quantityType', 'units'];
|
||||
} else if (name === '曲线结果') {
|
||||
return ['xQuantityType', 'xUnits', 'yQuantityType', 'yUnits'];
|
||||
} else {
|
||||
return ['description'];
|
||||
}
|
||||
};
|
||||
|
||||
watch(
|
||||
() => props.currentRunIfno,
|
||||
@@ -383,7 +540,9 @@ watch(
|
||||
}
|
||||
);
|
||||
|
||||
onMounted(() => {});
|
||||
onMounted(async () => {
|
||||
await getQuantityTypeFun();
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@@ -398,5 +557,10 @@ onMounted(() => {});
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
.dir-content{
|
||||
width: 100%;
|
||||
height: calc(100% - 50px);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
// uuid:nodeInfo.uuid
|
||||
}"
|
||||
:show-checkbox="true"
|
||||
:action-list="actionList"
|
||||
>
|
||||
<template #leftOptions>
|
||||
<el-upload :show-file-list="false" :before-upload="beforeUploadFun">
|
||||
@@ -20,7 +21,13 @@
|
||||
</el-upload>
|
||||
<el-button type="primary" class="ml10" @click="downLoadFileFun">下载文件</el-button>
|
||||
</template>
|
||||
<template #fileSize="{ row }">
|
||||
<span>{{ formatFileSize(row.fileSize) }}</span>
|
||||
</template>
|
||||
|
||||
</BaseTable>
|
||||
<FilePreview v-model="previewVisible" :fileId="currentRow?.id" />
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -29,6 +36,9 @@ import { ref, watch } from 'vue';
|
||||
import BaseTable from '@/components/common/table/baseTable.vue';
|
||||
import { queryRunDirApi, uploadRunFilesApi } from '@/api/project/run';
|
||||
import { ElMessage } from 'element-plus';
|
||||
import { downloadFileById } from '@/utils/file';
|
||||
import FilePreview from '@/components/common/filePreview/index.vue';
|
||||
import { formatFileSize } from '@/utils/file';
|
||||
|
||||
const env = import.meta.env;
|
||||
|
||||
@@ -89,6 +99,32 @@ const reloadFun = async () => {
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
const currentRow = ref();
|
||||
const previewVisible = ref(false);
|
||||
const previewFileFun = (row: any) => {
|
||||
currentRow.value = row;
|
||||
previewVisible.value = true;
|
||||
};
|
||||
|
||||
|
||||
const actionList = ref([
|
||||
{
|
||||
title: '下载',
|
||||
type: 'primary',
|
||||
click: (row: any) => {
|
||||
downloadFileById(row.id);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '预览',
|
||||
type: 'primary',
|
||||
click: (row: any) => {
|
||||
previewFileFun(row);
|
||||
},
|
||||
},
|
||||
]);
|
||||
|
||||
watch(
|
||||
() => props.nodeInfo,
|
||||
(newVal) => {
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<div class="task-content">
|
||||
|
||||
<div class="tabs-component" v-if="activeName === 'performance'">
|
||||
<taskPerformance :task-id="currentTaskInfo?.id" :show-save-button="true" :task-info="currentTaskInfo" ></taskPerformance>
|
||||
<taskPerformance :task-id="currentTaskInfo?.id" :show-save-button="true" :task-info="currentTaskInfo" :full-height="true" ></taskPerformance>
|
||||
</div>
|
||||
<div class="tabs-component" v-if="activeName === 'picture'">
|
||||
<resultImage :task-id="currentTaskInfo?.uuid"></resultImage>
|
||||
|
||||
@@ -84,6 +84,7 @@
|
||||
<template #progress="{ row }"> {{ row.progress || 0 }}% </template>
|
||||
<template #approvalStatus="{ row }">
|
||||
<StatusDot
|
||||
class="clcik-approval"
|
||||
:status="getApproveStyleClass(row.approvalStatus || TASK_APPROVE_STATUS_ENUM.NOT_APPROVED)"
|
||||
:title="TASK_APPROVE_STATUS.O[row.approvalStatus || TASK_APPROVE_STATUS_ENUM.NOT_APPROVED]"
|
||||
@click="seeApproveDetailFun(row)"
|
||||
@@ -133,6 +134,7 @@ import { NODE_TYPE } from '@/utils/enum/node';
|
||||
import { CommonStore } from '@/stores/common';
|
||||
import attachments from '@/views/task/simulationTask/components/attachments.vue';
|
||||
import { disposeMemberList } from '../../projectDetail/components/project';
|
||||
// import { useDict } from '@/utils/useDict';
|
||||
// import { disposeSimType } from '@/utils/task';
|
||||
import {
|
||||
TASK_PROCESS_STATUS_OBJ,
|
||||
@@ -459,4 +461,8 @@ onMounted(() => {
|
||||
color: var(--el-color-primary);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.clcik-approval {
|
||||
cursor: pointer;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -203,6 +203,7 @@ const confirmFun = async () => {
|
||||
achieveStatus: string;
|
||||
progress: number;
|
||||
finishTime?: string;
|
||||
extras: any[];
|
||||
};
|
||||
} = {
|
||||
taskIds: [fromData.uuid],
|
||||
@@ -210,6 +211,7 @@ const confirmFun = async () => {
|
||||
exeStatus: fromData.exeStatus,
|
||||
achieveStatus: fromData.achieveStatus,
|
||||
progress: fromData.progress,
|
||||
extras: fromData.extras,
|
||||
},
|
||||
};
|
||||
if (fromData.exeStatus === TASK_PROCESS_STATUS.COMPLETED) {
|
||||
|
||||
Reference in New Issue
Block a user