update:任务执行文件上传修改为分片上传,数据总览文件上传自动分配filetype参数属性

This commit is contained in:
2026-01-14 17:19:33 +08:00
parent 06d2bf48ae
commit f7a96a4b7b
9 changed files with 1592 additions and 70 deletions

View File

@@ -33,7 +33,12 @@
<el-button type="primary" class="ml12" @click="downLoadFun">下载文件</el-button>
</el-form-item>
</el-form> -->
<el-upload :show-file-list="false" :accept="accept" :before-upload="beforeUploadFun">
<el-upload
:show-file-list="false"
:accept="accept"
multiple
:before-upload="beforeUploadFun"
>
<el-button>上传文件</el-button>
</el-upload>
<el-button type="primary" class="ml12" @click="downLoadFun">下载文件</el-button>
@@ -53,15 +58,15 @@
<script setup lang="ts">
import { ref, onMounted, watch } from 'vue';
import { getSimulationTaskFilesApi } from '@/api/data/data';
import { batchAddFileInfoApi, getSimulationTaskFilesApi } from '@/api/data/data';
import { queryTaskRunApi } from '@/api/project/run';
import { NODE_TYPE } from '@/utils/enum/node';
import { FILE_TYPE } from '@/utils/enum/file';
import { downloadFileById, getFileUploadAcceptFun, queryFileIdByNodeIdFun } from '@/utils/file';
import { dataOverViewUploadSimulationNodeFilesApi } from '@/api/data/dataOverView';
import { ElMessage } from 'element-plus';
import BaseTable from '@/components/common/table/baseTable.vue';
import FilePreview from '@/components/common/filePreview/index.vue';
import emitter from '@/utils/eventBus';
import { dataOverViewDeleteSimulationNodeFilesApi } from '@/api/data/dataOverView';
const props = defineProps({
taskId: {
@@ -119,8 +124,33 @@ const actionList = ref([
previewFileFun(row);
},
},
{
title: '删除',
type: 'danger',
needConfirm: true,
confirmTip: '删除后不可恢复,确认删除吗?',
click: (row: any) => {
deleteFun(row);
},
},
]);
const deleteFun = async (row: any) => {
const param = {
deleteId: row.id,
dataType: 2,
};
try {
const res: any = await dataOverViewDeleteSimulationNodeFilesApi(param);
if (res && res.code === 200) {
baseTableRef.value.resetFun();
}
} catch (error) {
console.log(error);
}
};
const getfileType = (data: any) => {
const fileType = data.originalName.split('.').pop();
return fileType;
@@ -146,19 +176,42 @@ watch(
);
const beforeUploadFun = (file: any) => {
const { name } = file;
const { name, size } = file;
const sourceFiles = [
{
fileName: name,
size: size,
raw: file,
fileType: FILE_TYPE.PNG_FILE,
},
];
const params = {
fileName: name,
sourceFiles,
uploadTaskId: new Date().getTime(),
dirId: nodeFIleId.value,
file: file,
fileType: FILE_TYPE.PNG_FILE,
projectId: null,
type: 0,
};
dataOverViewUploadSimulationNodeFilesApi(params).then((res: any) => {
batchAddFileInfoApi(params).then((res: any) => {
if (res.code === 200) {
ElMessage.success('上传成功');
baseTableRef.value.resetFun();
res.data.forEach((item: any) => {
emitter.emit('ADD_UPLOAD_FILE', {
file: file,
data: {
...item,
isApprove: 0,
taskType: 1,
},
});
});
}
});
return false;
};

View File

@@ -50,13 +50,13 @@
<script setup lang="ts">
import { ref, onMounted } from 'vue';
import BaseTable from '@/components/common/table/baseTable.vue';
import { getSimulationTaskFilesApi } from '@/api/data/data';
import { batchAddFileInfoApi, getSimulationTaskFilesApi } from '@/api/data/data';
import UploadFile from '@/components/common/uploadFile/index.vue';
import FilePreview from '@/components/common/filePreview/index.vue';
import { FILE_TYPE } from '@/utils/enum/file';
import { downloadFileById, formatFileSize, queryFileIdByNodeIdFun } from '@/utils/file';
import { dataOverViewUploadSimulationNodeFilesApi } from '@/api/data/dataOverView';
import { ElMessage } from 'element-plus';
import { dataOverViewDeleteSimulationNodeFilesApi } from '@/api/data/dataOverView';
import emitter from '@/utils/eventBus';
const props = defineProps({
taskId: {
@@ -116,21 +116,81 @@ const actionList = ref([
previewFileFun(row);
},
},
{
title: '删除',
type: 'danger',
needConfirm: true,
confirmTip: '删除后不可恢复,确认删除吗?',
click: (row: any) => {
deleteFun(row);
},
},
]);
const beforeUploadFun = (file: any) => {
const { name } = file;
const params = {
fileName: name,
dirId: nodeFIleId.value,
file: file,
fileType: FILE_TYPE.MODEL_3D_FILE,
const deleteFun = async (row: any) => {
const param = {
deleteId: row.id,
dataType: 2,
};
dataOverViewUploadSimulationNodeFilesApi(params).then((res: any) => {
if (res.code === 200) {
ElMessage.success('上传成功');
try {
const res: any = await dataOverViewDeleteSimulationNodeFilesApi(param);
if (res && res.code === 200) {
baseTableRef.value.resetFun();
}
} catch (error) {
console.log(error);
}
};
const beforeUploadFun = (file: any) => {
// const { name } = file;
// const params = {
// fileName: name,
// dirId: nodeFIleId.value,
// file: file,
// fileType: FILE_TYPE.MODEL_3D_FILE,
// };
// dataOverViewUploadSimulationNodeFilesApi(params).then((res: any) => {
// if (res.code === 200) {
// ElMessage.success('上传成功');
// baseTableRef.value.resetFun();
// }
// });
const { name, size } = file;
const sourceFiles = [
{
fileName: name,
size: size,
raw: file,
fileType: FILE_TYPE.MODEL_3D_FILE,
},
];
const params = {
sourceFiles,
uploadTaskId: new Date().getTime(),
dirId: nodeFIleId.value,
projectId: null,
type: 0,
};
batchAddFileInfoApi(params).then((res: any) => {
if (res.code === 200) {
baseTableRef.value.resetFun();
res.data.forEach((item: any) => {
emitter.emit('ADD_UPLOAD_FILE', {
file: file,
data: {
...item,
isApprove: 0,
taskType: 1,
},
});
});
}
});
return false;
};

View File

@@ -67,14 +67,16 @@
<script setup lang="ts">
import { ref, onMounted, reactive } from 'vue';
import { getSimulationTaskFilesApi, getCSVDataApi } from '@/api/data/data';
import { getSimulationTaskFilesApi, getCSVDataApi, batchAddFileInfoApi } from '@/api/data/data';
import { initEcharts } from '../common/echartCard/echartsOptions';
import { FILE_TYPE } from '@/utils/enum/file';
import BaseTable from '@/components/common/table/baseTable.vue';
import { downloadFileById, getFileUploadAcceptFun, queryFileIdByNodeIdFun } from '@/utils/file';
import { dataOverViewUploadSimulationNodeFilesApi } from '@/api/data/dataOverView';
import { ElMessage } from 'element-plus';
import {
dataOverViewDeleteSimulationNodeFilesApi,
} from '@/api/data/dataOverView';
import FilePreview from '@/components/common/filePreview/index.vue';
import emitter from '@/utils/eventBus';
const props = defineProps({
taskId: {
@@ -138,8 +140,33 @@ const actionList = ref([
previewFileFun(row);
},
},
{
title: '删除',
type: 'danger',
needConfirm: true,
confirmTip: '删除后不可恢复,确认删除吗?',
click: (row: any) => {
deleteFun(row);
},
},
]);
const deleteFun = async (row: any) => {
const param = {
deleteId: row.id,
dataType: 2,
};
try {
const res: any = await dataOverViewDeleteSimulationNodeFilesApi(param);
if (res && res.code === 200) {
baseTableRef.value.resetFun();
}
} catch (error) {
console.log(error);
}
};
const showTableDataCurveFun = () => {
showCsv.value = false;
const { tableData } = baseTableRef.value.tableRef.getTableData();
@@ -265,19 +292,56 @@ const getCsvFormatDataFun = (data: any, num: any) => {
};
const beforeUploadFun = (file: any) => {
const { name } = file;
// const { name } = file;
// const params = {
// fileName: name,
// dirId: nodeFIleId.value,
// file: file,
// fileType: FILE_TYPE.CANVAS_FILE,
// };
// dataOverViewUploadSimulationNodeFilesApi(params).then((res: any) => {
// if (res.code === 200) {
// ElMessage.success('上传成功');
// baseTableRef.value.resetFun();
// }
// });
const { name, size } = file;
const sourceFiles = [
{
fileName: name,
size: size,
raw: file,
fileType: FILE_TYPE.CANVAS_FILE,
},
];
const params = {
fileName: name,
sourceFiles,
uploadTaskId: new Date().getTime(),
dirId: nodeFIleId.value,
file: file,
fileType: FILE_TYPE.CANVAS_FILE,
projectId: null,
type: 0,
};
dataOverViewUploadSimulationNodeFilesApi(params).then((res: any) => {
batchAddFileInfoApi(params).then((res: any) => {
if (res.code === 200) {
ElMessage.success('上传成功');
baseTableRef.value.resetFun();
res.data.forEach((item: any) => {
emitter.emit('ADD_UPLOAD_FILE', {
file: file,
data: {
...item,
isApprove: 0,
taskType: 1,
},
});
});
}
});
return false;
};

View File

@@ -50,13 +50,13 @@
<script setup lang="ts">
import { ref, onMounted } from 'vue';
import BaseTable from '@/components/common/table/baseTable.vue';
import { getSimulationTaskFilesApi } from '@/api/data/data';
import { batchAddFileInfoApi, getSimulationTaskFilesApi } from '@/api/data/data';
import UploadFile from '@/components/common/uploadFile/index.vue';
import FilePreview from '@/components/common/filePreview/index.vue';
import { FILE_TYPE } from '@/utils/enum/file';
import { downloadFileById, formatFileSize, queryFileIdByNodeIdFun } from '@/utils/file';
import { dataOverViewUploadSimulationNodeFilesApi } from '@/api/data/dataOverView';
import { ElMessage } from 'element-plus';
import emitter from '@/utils/eventBus';
import { dataOverViewDeleteSimulationNodeFilesApi } from '@/api/data/dataOverView';
const props = defineProps({
taskId: {
@@ -116,22 +116,84 @@ const actionList = ref([
previewFileFun(row);
},
},
{
title: '删除',
type: 'danger',
needConfirm: true,
confirmTip: '删除后不可恢复,确认删除吗?',
click: (row: any) => {
deleteFun(row);
},
},
]);
const beforeUploadFun = (file: any) => {
const { name } = file;
const params = {
fileName: name,
dirId: nodeFIleId.value,
file: file,
fileType: FILE_TYPE.CALCULATION_FILE,
const deleteFun = async (row: any) => {
const param = {
deleteId: row.id,
dataType: 2,
};
dataOverViewUploadSimulationNodeFilesApi(params).then((res: any) => {
if (res.code === 200) {
ElMessage.success('上传成功');
try {
const res: any = await dataOverViewDeleteSimulationNodeFilesApi(param);
if (res && res.code === 200) {
baseTableRef.value.resetFun();
}
} catch (error) {
console.log(error);
}
};
const beforeUploadFun = (file: any) => {
// const { name } = file;
// const params = {
// fileName: name,
// dirId: nodeFIleId.value,
// file: file,
// fileType: FILE_TYPE.CALCULATION_FILE,
// };
// dataOverViewUploadSimulationNodeFilesApi(params).then((res: any) => {
// if (res.code === 200) {
// ElMessage.success('上传成功');
// baseTableRef.value.resetFun();
// }
// });
const { name, size } = file;
const sourceFiles = [
{
fileName: name,
size: size,
raw: file,
fileType: FILE_TYPE.CALCULATION_FILE,
},
];
const params = {
sourceFiles,
uploadTaskId: new Date().getTime(),
dirId: nodeFIleId.value,
projectId: null,
type: 0,
};
batchAddFileInfoApi(params).then((res: any) => {
if (res.code === 200) {
baseTableRef.value.resetFun();
res.data.forEach((item: any) => {
emitter.emit('ADD_UPLOAD_FILE', {
file: file,
data: {
...item,
isApprove: 0,
taskType: 1,
},
});
});
}
});
return false;
};

View File

@@ -51,7 +51,7 @@
<script setup lang="ts">
import { ref, onMounted } from 'vue';
import BaseTable from '@/components/common/table/baseTable.vue';
import { getSimulationTaskFilesApi } from '@/api/data/data';
import { batchAddFileInfoApi, getSimulationTaskFilesApi } from '@/api/data/data';
import {
downloadFileById,
formatFileSize,
@@ -61,8 +61,8 @@ import {
import UploadFile from '@/components/common/uploadFile/index.vue';
import FilePreview from '@/components/common/filePreview/index.vue';
import { FILE_TYPE } from '@/utils/enum/file';
import { dataOverViewUploadSimulationNodeFilesApi } from '@/api/data/dataOverView';
import { ElMessage } from 'element-plus';
import { dataOverViewDeleteSimulationNodeFilesApi } from '@/api/data/dataOverView';
import emitter from '@/utils/eventBus';
const props = defineProps({
taskId: {
@@ -126,21 +126,81 @@ const actionList = ref([
previewFileFun(row);
},
},
{
title: '删除',
type: 'danger',
needConfirm: true,
confirmTip: '删除后不可恢复,确认删除吗?',
click: (row: any) => {
deleteFun(row);
},
},
]);
const beforeUploadFun = (file: any) => {
const { name } = file;
const params = {
fileName: name,
dirId: nodeFIleId.value,
file: file,
fileType: FILE_TYPE.REPORT_FILE,
const deleteFun = async (row: any) => {
const param = {
deleteId: row.id,
dataType: 2,
};
dataOverViewUploadSimulationNodeFilesApi(params).then((res: any) => {
if (res.code === 200) {
ElMessage.success('上传成功');
try {
const res: any = await dataOverViewDeleteSimulationNodeFilesApi(param);
if (res && res.code === 200) {
baseTableRef.value.resetFun();
}
} catch (error) {
console.log(error);
}
};
const beforeUploadFun = (file: any) => {
// const { name } = file;
// const params = {
// fileName: name,
// dirId: nodeFIleId.value,
// file: file,
// fileType: FILE_TYPE.REPORT_FILE,
// };
// dataOverViewUploadSimulationNodeFilesApi(params).then((res: any) => {
// if (res.code === 200) {
// ElMessage.success('上传成功');
// baseTableRef.value.resetFun();
// }
// });
const { name, size } = file;
const sourceFiles = [
{
fileName: name,
size: size,
raw: file,
fileType: FILE_TYPE.REPORT_FILE,
},
];
const params = {
sourceFiles,
uploadTaskId: new Date().getTime(),
dirId: nodeFIleId.value,
projectId: null,
type: 0,
};
batchAddFileInfoApi(params).then((res: any) => {
if (res.code === 200) {
baseTableRef.value.resetFun();
res.data.forEach((item: any) => {
emitter.emit('ADD_UPLOAD_FILE', {
file: file,
data: {
...item,
isApprove: 0,
taskType: 1,
},
});
});
}
});
return false;
};

View File

@@ -18,6 +18,7 @@ import Dialog from '@/components/common/dialog/index.vue';
import TableForm from '@/components/common/table/tableForm.vue';
import { batchAddFileInfoApi } from '@/api/data/data';
import emitter from '@/utils/eventBus';
import { fileUploadAllocationTypeFun } from '@/utils/file';
interface Props {
modelValue: boolean;
@@ -48,13 +49,22 @@ const tableFormRef = ref<any>();
const submitFun = async () => {
const valid = await tableFormRef.value.validateFun();
if (valid) {
const sourceFiles = formData.value.files.map((file: any) => {
return {
fileName: file.raw.name,
size: file.raw.size,
raw: file.raw,
};
});
const sourceFiles: any = [];
// 给上传的文件新增对应的文件类型
for (let i = 0; i < formData.value.files.length; i++) {
sourceFiles.push({
fileName: formData.value.files[i].raw.name,
size: formData.value.files[i].raw.size,
raw: formData.value.files[i].raw,
fileType: await fileUploadAllocationTypeFun(formData.value.files[i].name),
});
}
// = formData.value.files.map((file: any) => {
// return {
// };
// });
const params = {
sourceFiles,
uploadTaskId: new Date().getTime(),

View File

@@ -267,7 +267,8 @@
<el-tab-pane label="日志输出" name="job-log"></el-tab-pane>
<el-tab-pane label="关联任务" name="associated-run"></el-tab-pane>
<el-tab-pane label="仿真结果" name="result"></el-tab-pane>
<el-tab-pane label="性能指标" name="performance"></el-tab-pane>
<!-- <el-tab-pane label="性能指标" name="performance"></el-tab-pane> -->
<el-tab-pane label="报告结果" name="report"></el-tab-pane>
<el-tab-pane label="标准规范" name="standard"></el-tab-pane>
<!-- <el-tab-pane label="3D模型预览" name="3D-model"></el-tab-pane> -->
</el-tabs>
@@ -289,6 +290,10 @@
:current-task-info="runInfo"
></runVersionTree>
<runStandard v-if="taskActiveName === 'standard'" :run-info="runInfo"></runStandard>
<reportResult
v-if="taskActiveName === 'report'"
:current-run-ifno="runInfo"
></reportResult>
</div>
</div>
</div>
@@ -332,6 +337,7 @@ import { WIDGET_TYPE } from '@/utils/enum/flow';
import emitter from '@/utils/eventBus';
import { getDictionaryDataApi } from '@/api/system/systemData';
import { getUserData, getUserId, getUserTenantId } from '@/utils/user';
import reportResult from './runPagecomponent/reportResult.vue';
const props = defineProps({
runInfo: {

View File

@@ -9,7 +9,16 @@
}}</el-radio>
</el-radio-group>
</div>
<div class="dir-content" v-if="runDirNameList.length && currentDirName">
<div class="dir-content" v-if="currentDirName === 'performance'">
<taskPerformance
:full-height="true"
:show-save-button="true"
:param-type="'run'"
:run-info="currentRunIfno"
></taskPerformance>
</div>
<div class="dir-content" v-else-if="runDirNameList.length && currentDirName">
<BaseTable
showIndex
ref="baseTableRef"
@@ -450,6 +459,7 @@ import Dialog from '@/components/common/dialog/index.vue';
import { groupBy } from 'lodash-es';
import { getCSVDataApi, getFileBaseInfoApi } from '@/api/data/data';
import EchartCard from '@/components/common/echartCard/index.vue';
import taskPerformance from '@/components/taskDetail/taskPerformance.vue';
const env = import.meta.env;
@@ -500,15 +510,19 @@ const getRunInfoDirsFun = async () => {
if (res && res.code === 200) {
runDirs.value =
res.data?.data.filter((item: any) => {
return (
item.dataType === 1 && ['图片结果', '曲线结果', '报告结果'].includes(item.originalName)
);
// '报告结果'
return item.dataType === 1 && ['图片结果', '曲线结果'].includes(item.originalName);
}) || [];
runDirNameList.value =
runDirs.value.map((item: any) => {
return { name: item.originalName, id: item.id };
}) || [];
runDirNameList.value.unshift({
name: '数值结果',
id: 'performance',
});
if (runDirNameList.value.length) {
currentDirName.value = runDirNameList.value[0].id;
}