update:数据查询界面,对比功能优化,多个接口的前缀类型删除测试

This commit is contained in:
2025-11-05 14:39:02 +08:00
parent 46fb331530
commit cff20c3bcb
12 changed files with 622 additions and 160 deletions

View File

@@ -78,14 +78,14 @@ export const updateUserFilePermissionApi = (params: any) => {
};
export const getSimulationTaskFilesApi = (params: any) => {
return post(`${PREFIX}data/dataAnalysis/getSimulationTaskFile`, params);
return post(`${PREFIX}dataAnalysis/getSimulationTaskFile`, params);
};
export const getCSVDataApi = (params: any) => {
return get(`${PREFIX}data/dataAnalysis/getCSVData`, params);
return get(`${PREFIX}dataAnalysis/getCSVData`, params);
};
// 获取文件预览地址
export const getKKFileViewURLFromMinioApi = (params: any) => {
return get(`${PREFIX}data/getKKFileViewURLFromMinio`, params);
return get(`${PREFIX}getKKFileViewURLFromMinio`, params);
};
/**
@@ -141,3 +141,4 @@ export const addLibraryCategoryObjectApi = (params: any) => {
export const deleteSimulationParameterApi = (params: any) => {
return get(`${PREFIX}simulationParameterLibrary/deleteSimulationParameter`, params);
};

View File

@@ -14,3 +14,12 @@ export const getPerformanceListApi = (params: any) => {
export const getRunListApi = (params: any) => {
return get(`${PREFIX}analysis/runList`, params);
};
/**
* 获取任务下的算例指标信息
* @param params taskId
* @returns
*/
export const getAllRunResultByTaskIdApi = (params: any) => {
return get(`${PREFIX}analysis/getAllRunResultByTaskId`, params);
};

View File

@@ -40,7 +40,7 @@ export const getTaskPoolPerformanceApi = (params: any) => {
};
export const getTaskPerformanceApi = (params: any) => {
return get(`${PREFIX}task/taskPerformance/getTaskPerformance`, params);
return get(`${PREFIX}taskPerformance/getTaskPerformance`, params);
};
export const getTaskPoolLoadcasesApi = (params: any) => {
@@ -48,9 +48,9 @@ export const getTaskPoolLoadcasesApi = (params: any) => {
};
export const batchAddTaskPerformanceApi = (params: any) => {
return post(`${PREFIX}task/taskPerformance/batchAddTaskPerformance`, params);
return post(`${PREFIX}taskPerformance/batchAddTaskPerformance`, params);
};
export const batchDeleteTaskPerformanceApi = (params: any) => {
return post(`${PREFIX}task/taskPerformance/batchDeleteTaskPerformance`, params);
return post(`${PREFIX}taskPerformance/batchDeleteTaskPerformance`, params);
};

View File

@@ -1,8 +1,8 @@
import { createRouter, createWebHistory } from 'vue-router';
import { CommonStore } from '@/stores/common';
import EmptyLayout from '@/layouts/empty.vue';
// import DefaultLayout from '@/layouts/default.vue';
import CidLayout from '@/layouts/cid.vue';
import DefaultLayout from '@/layouts/default.vue';
// import CidLayout from '@/layouts/cid.vue';
import routerData from '@/router/routerData';
const router = createRouter({
@@ -21,7 +21,7 @@ const router = createRouter({
},
{
path: '/',
component: CidLayout,
component: DefaultLayout,
children: routerData,
},
{

View File

@@ -1,6 +1,6 @@
<template>
<Dialog v-model="diaVisible" diaTitle="数据分析" width="90%" height="90%" @close="closeFun">
<div class="content" >
<div class="content">
<div class="filter-analysis-content">
<el-checkbox class="check-all" v-model="checkAll" label="全选" value="all" @change="checkAllChangeFn" />
<el-checkbox-group class="check-all" v-model="checkAnalysisList">
@@ -15,10 +15,11 @@
</el-checkbox-group>
<el-button @click="exportPdfFn">导出PDF</el-button>
</div>
<div class="check-table-content" id="compare-content" ref="contentToConvertRef">
<div class="check-table-content" id="compare-content" ref="contentToConvertRef" v-loading="isLoading">
<div class="loadcase-table-content">
<BaseTable
v-if="checkTableName"
@checkbox-all="changeChceckFn"
@checkbox-change="changeChceckFn"
ref="checkTableRef"
:tableName="checkTableName"
@@ -33,43 +34,34 @@
</div>
<div class="analysis-type-content-item" v-if="checktableData.length">
<template v-if="item.value === 'model'">
<modelFileResult v-if="showComponents" :check-task-info="checktableData" :cloumn-width="cloumnWidth">
<modelFileResult v-if="showComponents" :check-task-info="modelData" :cloumn-width="cloumnWidth">
</modelFileResult>
</template>
<template v-if="item.value === 'calculationFile'">
<calculationFileResult
v-if="showComponents"
:check-task-info="checktableData"
:check-task-info="calculationFileData"
:cloumn-width="cloumnWidth"
></calculationFileResult>
</template>
<template v-if="item.value === 'numericalResult'">
<performanceAnalysis
v-if="showComponents"
:check-task-info="checktableData"
:check-task-info="performanceData"
:cloumn-width="cloumnWidth"
></performanceAnalysis>
</template>
<template v-if="item.value === 'result'">
<cloudImage
v-if="showComponents"
:check-task-info="checktableData"
:cloumn-width="cloumnWidth"
></cloudImage>
<cloudImage v-if="showComponents" :check-task-info="resultData" :cloumn-width="cloumnWidth">
</cloudImage>
</template>
<template v-if="item.value === 'curve'">
<curveResult
v-if="showComponents"
:check-task-info="checktableData"
:cloumn-width="cloumnWidth"
></curveResult>
<curveResult v-if="showComponents" :check-task-info="curveData" :cloumn-width="cloumnWidth">
</curveResult>
</template>
<template v-if="item.value === 'report'">
<reportComparison
v-if="showComponents"
:check-task-info="checktableData"
:cloumn-width="cloumnWidth"
></reportComparison>
<reportComparison v-if="showComponents" :check-task-info="reportData" :cloumn-width="cloumnWidth">
</reportComparison>
</template>
</div>
</div>
@@ -97,6 +89,9 @@ import reportComparison from './reportComparison.vue';
import jsPDF from 'jspdf';
import html2canvas from 'html2canvas';
import moment from 'moment';
import { ElMessage } from 'element-plus';
import { getAllRunResultByTaskIdApi } from '@/api/project/analysis';
import { getSimulationTaskFileApi } from '@/api/data/dataAnalysis';
const props = defineProps({
analysisData: {
@@ -112,6 +107,7 @@ const checkTableRef = ref();
const diaVisible = ref(true);
const checkAnalysisList = ref<any>([]);
const checktableData = ref<any>([]);
const emits = defineEmits(['close']);
@@ -122,22 +118,204 @@ const closeFun = () => {
const analysisType = ref<any>('');
const analysisTableData = ref<any>([]);
const showComponents = ref(true);
const changeChceckFn = (data: any) => {
const performanceData = ref<any>([]);
const modelData = ref<any>([]);
const calculationFileData = ref<any>([]);
const resultData = ref<any>([]);
const curveData = ref<any>([]);
const reportData = ref<any>([]);
const isLoading = ref(false);
const changeChceckFn = async () => {
isLoading.value = true;
showComponents.value = false;
if (data.checked) {
checktableData.value.push(data.row);
} else {
checktableData.value = checktableData.value.filter((item: any) => {
return item.id != data.row.id;
});
checktableData.value = checkTableRef.value.tableRef.getCheckboxRecords();
console.log(checktableData.value);
const fileType = analysisType.value;
for (let i = 0; i < checkAnalysisList.value.length; i++) {
await getConvertData(checkAnalysisList.value[i], fileType);
}
isLoading.value = false;
setTimeout(() => {
showComponents.value = true;
}, 50);
console.log(showComponents.value, 'showComponents');
};
const getConvertData = async (flag: any, type: any) => {
let data: any = [];
// const tasklist = [
// {
// id: 'simu_dc3a8eeb-9108-4058-b9a8-eb8427fb175a13657',
// },
// {
// id: 'simu_a308aaba-db9e-40fd-9870-062a177f6faf78765',
// },
// ];
const tasklist = checktableData.value;
if (flag === 'numericalResult') {
if (type === '仿真工况' || type === '仿真算例') {
if (type === '仿真工况') {
for (let i = 0; i < tasklist.length; i++) {
const list = (await getAllRunResultByTaskIdFn(tasklist[i].uuid))?.performances;
data = data.concat(list);
}
} else {
data = [];
}
performanceData.value = data;
} else {
performanceData.value = checktableData.value;
}
} else if (flag === 'model') {
modelData.value = [];
if (type === '仿真工况' || type === '仿真算例') {
if (type === '仿真工况') {
for (let i = 0; i < tasklist.length; i++) {
const list = (await getAllRunResultByTaskIdFn(tasklist[i].uuid))?.runs;
data = data.concat(list);
}
} else {
data = checktableData.value;
}
const runs = data || [];
for (let i = 0; i < runs.length; i++) {
const datas = await getFileInfo(runs[i], 1);
modelData.value = modelData.value.concat(datas);
}
} else {
modelData.value = checktableData.value;
}
} else if (flag === 'calculationFile') {
calculationFileData.value = [];
if (type === '仿真工况' || type === '仿真算例') {
if (type === '仿真工况') {
for (let i = 0; i < tasklist.length; i++) {
const list = (await getAllRunResultByTaskIdFn(tasklist[i].uuid))?.runs;
data = data.concat(list);
}
} else {
data = checktableData.value;
}
const runs = data || [];
for (let i = 0; i < runs.length; i++) {
const datas = await getFileInfo(runs[i], 3);
calculationFileData.value = calculationFileData.value.concat(datas);
}
} else {
calculationFileData.value = checktableData.value;
}
} else if (flag === 'result') {
resultData.value = [];
if (type === '仿真工况' || type === '仿真算例') {
if (type === '仿真工况') {
for (let i = 0; i < tasklist.length; i++) {
const list = (await getAllRunResultByTaskIdFn(tasklist[i].uuid))?.runs;
data = data.concat(list);
}
} else {
data = checktableData.value;
}
const runs = data || [];
for (let i = 0; i < runs.length; i++) {
const datas = await getFileInfo(runs[i], 5);
resultData.value = resultData.value.concat(datas);
}
} else {
resultData.value = checktableData.value;
}
} else if (flag === 'curve') {
curveData.value = [];
if (type === '仿真工况' || type === '仿真算例') {
if (type === '仿真工况') {
for (let i = 0; i < tasklist.length; i++) {
const list = (await getAllRunResultByTaskIdFn(tasklist[i].uuid))?.runs;
data = data.concat(list);
}
} else {
data = checktableData.value;
}
const runs = data || [];
for (let i = 0; i < runs.length; i++) {
const datas = await getFileInfo(runs[i], 4);
curveData.value = curveData.value.concat(datas);
}
} else {
curveData.value = checktableData.value;
}
} else if (flag === 'report') {
reportData.value = [];
if (type === '仿真工况' || type === '仿真算例') {
if (type === '仿真工况') {
for (let i = 0; i < tasklist.length; i++) {
const list = (await getAllRunResultByTaskIdFn(tasklist[i].uuid))?.runs;
data = data.concat(list);
}
} else {
data = checktableData.value;
}
const runs = data || [];
for (let i = 0; i < runs.length; i++) {
const datas = await getFileInfo(runs[i], 2);
reportData.value = reportData.value.concat(datas);
}
} else {
reportData.value = checktableData.value;
}
}
return data || [];
};
const getAllRunResultByTaskIdFn = async (id: any) => {
const param = {
taskId: id,
};
try {
const res: any = await getAllRunResultByTaskIdApi(param);
if (res && res.code === 200) {
let performanceList: any = [];
const runs: any = [];
for (let i = 0; i < res.data.runResultResp.length; i++) {
performanceList = performanceList.concat(res.data.runResultResp[i].simulationPerformance);
const obj: any = {
...res.data.runResultResp[i].simulationRun,
taskName: res.data.runResultResp[i]?.simulationPerformance[0]?.taskName,
};
runs.push(obj);
}
return {
performances: performanceList,
runs,
};
}
} catch (error) {
console.log(error);
}
};
const analysisTypeList = ref<any>([
@@ -176,7 +354,34 @@ const analysisTypeList = ref<any>([
const checkTableName = ref<any>('');
const checktableData = ref<any>([]);
const getFileInfo = async (data: any, fileType: any) => {
const res: any = await getSimulationTaskFileApi({
taskId: '',
runId: data.uuid,
fileType: fileType,
fileName: '',
startTime: '',
endTime: '',
current: 1,
size: 1000,
});
if (res && res.code === 200) {
const list = res.data.data.map((item: any) => {
return {
...item,
runName: data.runName,
taskName: data.taskName,
taskId: data.taskId,
uuid: data.uuid,
};
});
return list;
} else {
return [];
}
};
watch(() => props.analysisData, async (newVal) => {
if (newVal) {
@@ -244,7 +449,7 @@ const getTitleFn = (flag: any) => {
const contentToConvertRef = ref();
const exportPdfFn = async () => {
ElMessage.success('文件正在导出,请稍后');
const content = contentToConvertRef.value;
const canvas = await html2canvas(content);
const imgData = canvas.toDataURL('image/png');

View File

@@ -7,6 +7,7 @@
<script setup lang="ts">
import { ref, defineProps, nextTick, watch } from 'vue';
import BaseTable from '@/components/common/table/baseTable.vue';
import { objectTypeArrayRemovesDuplicates } from '@/components/loadCaseTable/utils/funTools';
const props = defineProps({
checkTaskInfo: {
@@ -33,73 +34,94 @@ const tableData = ref<any>([
]);
const modelAttribute = ref([
const modelAttribute = ref<any>([
{
name: '文件名称',
value: 'fileName',
value: 'originalName',
},
{
name: '所属项目',
value: 'project',
},
{
name: '所属阶段',
value: 'phase',
}, {
name: '所属学科',
value: 'discipline',
}, {
name: '所属任务',
value: 'task',
value: 'taskName',
}, {
name: '所属算例',
value: 'run',
}, {
value: 'runName',
},
{
name: '文件大小',
value: 'formatFileSize',
},
{
name: '日期',
value: 'date',
}, {
name: '创建人',
value: 'creator',
value: 'createTime',
},
]);
const getTableColumnFn = (data:any) => {
console.log(data, 'data');
const titles = data.map((item:any) => {
const name = item.taskName && item.runName ? item.taskName + '_' + item.runName : item.originalName;
const value = item.taskId && item.uuid ? item.taskId + '_' + item.uuid : item.id;
const obj = {
name,
value,
};
return obj;
});
const list:any = data || [];
showTableContent.value = false;
tableData.value = [];
tableColumns.value = [];
const list:any = data || [];
const defaultColumns = [{
title: '属性',
key: 'attributes',
isShow: true,
}];
const modelcolumns:any = [];
let modelcolumns:any = [];
for (let i = 0;i < list.length;i++) {
for (let i = 0;i < titles.length;i++) {
for (let j = 0;j < 2;j++) {
for (let j = 0;j < list.length;j++) {
const names = list[j].taskName && list[j].runName ? list[j].taskName + '_' + list[j].runName : list[j].originalName;
const obj:any = {
title: `${list[i].taskName}_计算文件_${j + 1}`,
key: `${list[i].id}_key_${j + 1}`,
isShow: true,
};
modelcolumns.push(obj);
if (titles[i].name === names) {
const obj:any = {
title: titles[i].name,
key: titles[i].value,
isShow: true,
};
modelcolumns.push(obj);
}
}
}
modelcolumns = objectTypeArrayRemovesDuplicates(modelcolumns, 2);
tableColumns.value = defaultColumns.concat(modelcolumns);
if (props.cloumnWidth) {
for (let i = 0;i < tableColumns.value.length;i++) {
tableColumns.value[i].width = props.cloumnWidth;
}
}
for (let i = 0;i < modelAttribute.value.length;i++) {
for (let j = 0;j < list.length;j++) {
const values = list[j].taskId && list[j].uuid ? list[j].taskId + '_' + list[j].uuid : list[j].id;
modelAttribute.value[i][values] = list[j][modelAttribute.value[i].value];
}
}
for (let i = 0;i < modelAttribute.value.length;i++) {
const obj:any = {
@@ -107,6 +129,9 @@ const getTableColumnFn = (data:any) => {
for (let j = 0;j < tableColumns.value.length;j++) {
if (tableColumns.value[j].key === 'attributes') {
obj[tableColumns.value[j].key] = modelAttribute.value[i].name;
} else {
obj[tableColumns.value[j].key] = modelAttribute.value[i][tableColumns.value[j].key];
}
}

View File

@@ -1,7 +1,17 @@
<template>
<div class="model-file-page">
<BaseTable v-if="showTableContent" ref="cloudTableRef" :head="tableColumns" :tableName="checkTableName" hidePagination></BaseTable>
<BaseTable v-if="showTableContent" ref="cloudTableRef" :head="tableColumns" :tableName="checkTableName" hidePagination>
<template v-for="item in tableColumns" :key="item.key" #[item.key]="{row}">
<div class="img-content">
<div class="img-item" v-for="item_2 in row[item.key]?.split('_')" :key="item_2">
<img width="100%" :src="getImgPathFn(item_2)" alt="">
</div>
</div>
</template>
</BaseTable>
</div>
</template>
@@ -9,6 +19,7 @@
<script setup lang="ts">
import { ref, defineProps, nextTick, watch } from 'vue';
import BaseTable from '@/components/common/table/baseTable.vue';
import { objectTypeArrayRemovesDuplicates } from '@/components/loadCaseTable/utils/funTools';
const props = defineProps({
checkTaskInfo: {
@@ -24,6 +35,8 @@ const props = defineProps({
default: '',
},
});
const env = import.meta.env;
const cloudTableRef = ref();
const showTableContent = ref(false);
@@ -36,13 +49,16 @@ const tableData = ref<any>([
]);
const getTableColumnFn = (data:any) => {
console.log(data, 'data');
showTableContent.value = false;
tableData.value = [];
tableColumns.value = [];
const list:any = data || [];
const defaultColumns:any = [
{
title: '云图名称',
title: '云图信息',
key: 'attributes',
isShow: true,
},
@@ -51,21 +67,18 @@ const getTableColumnFn = (data:any) => {
for (let i = 0;i < list.length;i++) {
for (let j = 0;j < 2;j++) {
const obj:any = {
title: `${list[i].taskName}_${list[i].runName}-云图`,
key: `${list[i].taskId}_${list[i].uuid}`,
isShow: true,
};
const obj:any = {
title: `项目-阶段-学科-${list[i].taskName}_算例_${j + 1}-云图`,
key: `${list[i].id}_key_${j + 1}`,
isShow: true,
};
cloudcolumns.push(obj);
}
cloudcolumns.push(obj);
}
tableColumns.value = defaultColumns.concat(cloudcolumns);
tableColumns.value = objectTypeArrayRemovesDuplicates(tableColumns.value, 2);
if (props.cloumnWidth) {
for (let i = 0;i < tableColumns.value.length;i++) {
@@ -73,6 +86,22 @@ const getTableColumnFn = (data:any) => {
}
}
for (let i = 0;i < tableColumns.value.length;i++) {
const obj:any = {};
const str = tableColumns.value[i].key;
obj[str] = [];
for (let j = 0;j < list.length;j++) {
const str2 = list[j].taskId + '_' + list[j].uuid;
if (str2 === str) {
obj[str].push(list[j].id);
}
}
obj[str] = obj[str].join('_');
if (obj[str]) {
tableData.value.push(obj);
}
}
showTableContent.value = true;
nextTick(() => {
@@ -81,6 +110,10 @@ const getTableColumnFn = (data:any) => {
};
const getImgPathFn = (id:any) => {
return `${env.VITE_API_IMAGE_PREVIEW_URL}/data/previewImage?fileId=${id}`;
};
watch(() => props.checkTaskInfo, (newVal) => {
if (newVal) {
getTableColumnFn(newVal);
@@ -99,5 +132,9 @@ watch(() => props.checkTaskInfo, (newVal) => {
.model-file-page{
width: 100%;
height: 100%;
.img-content{
width: 100%;
}
}
</style>

View File

@@ -1,7 +1,19 @@
<template>
<div class="model-file-page">
<BaseTable v-if="showTableContent" ref="curveResultTableRef" :head="tableColumns" :tableName="checkTableName" hidePagination></BaseTable>
<BaseTable v-if="showTableContent" ref="curveResultTableRef" :head="tableColumns" :tableName="checkTableName" hidePagination>
<template v-for="item in tableColumns" :key="item.key" #[item.key]="{row}">
<div v-if="row[item.key]" class="img-content">
<div class="chart-item" :id="'curve-chart-' + row[item.key]">
{{ row[item.key] }}
</div>
</div>
</template>
</BaseTable>
</div>
</template>
@@ -9,6 +21,9 @@
<script setup lang="ts">
import { ref, defineProps, nextTick, watch } from 'vue';
import BaseTable from '@/components/common/table/baseTable.vue';
import { objectTypeArrayRemovesDuplicates } from '@/components/loadCaseTable/utils/funTools';
import { initEcharts } from '@/components/common/echartCard/echartsOptions';
import { getCSVDataApi } from '@/api/data/data';
const props = defineProps({
checkTaskInfo: {
@@ -36,6 +51,9 @@ const tableData = ref<any>([
]);
const getTableColumnFn = (data:any) => {
// console.log(data, 'data');
showTableContent.value = false;
tableData.value = [];
tableColumns.value = [];
@@ -51,36 +69,123 @@ const getTableColumnFn = (data:any) => {
for (let i = 0;i < list.length;i++) {
for (let j = 0;j < 2;j++) {
const obj:any = {
title: `${list[i].taskName}_${list[i].runName}-曲线`,
key: `${list[i].taskId}_${list[i].uuid}`,
isShow: true,
};
const obj:any = {
title: `项目-阶段-学科-${list[i].taskName}_算例_${j + 1}-曲线`,
key: `${list[i].id}_key_${j + 1}`,
isShow: true,
};
curveResultcolumns.push(obj);
}
curveResultcolumns.push(obj);
}
tableColumns.value = defaultColumns.concat(curveResultcolumns);
tableColumns.value = objectTypeArrayRemovesDuplicates(tableColumns.value, 2);
if (props.cloumnWidth) {
for (let i = 0;i < tableColumns.value.length;i++) {
tableColumns.value[i].width = props.cloumnWidth;
}
}
for (let i = 0;i < tableColumns.value.length;i++) {
const obj:any = {};
const str = tableColumns.value[i].key;
obj[str] = [];
for (let j = 0;j < list.length;j++) {
const str2 = list[j].taskId + '_' + list[j].uuid;
if (str2 === str) {
obj[str].push(list[j].id);
}
}
obj[str] = obj[str].join(',');
if (obj[str]) {
tableData.value.push(obj);
}
}
showTableContent.value = true;
nextTick(() => {
nextTick(async () => {
curveResultTableRef.value.setDataFun(tableData.value);
for (let i = 0;i < tableData.value.length;i++) {
for (const key in tableData.value[i]) {
if (tableData.value[i][key]) {
await getCSVDataFn(tableData.value[i][key]);
}
}
}
});
};
const getCSVDataFn = async (ids: any) => {
const res: any = await getCSVDataApi({ fileId: ids });
if (res && res.code === 200) {
getCsvFormatDataFn(res.data, ids);
}
};
// 获取csv数据并转换为图表数据
const getCsvFormatDataFn = (data: any, ids: any) => {
const seriesData: any = [];
for (let i = 0; i < data.xData.length; i++) {
const obj: any = {
name: '曲线' + (i + 1),
type: 'line',
showSymbol: false,
smooth: true,
clip: true,
};
const newArr: any = [];
for (let j = 0; j < data.xData[i].length; j++) {
newArr.push([data.xData[i][j], data.yData[i][j]]);
}
obj.data = newArr;
seriesData.push(obj);
}
const options: any = {
series: seriesData,
legend: {
data: '曲线',
top: '5%',
},
grid: {
top: '8%',
bottom: '5%',
left: '5%',
righ: '5%',
},
xAxis: {
name: 'x',
minorTick: {
show: true,
},
minorSplitLine: {
show: true,
},
},
yAxis: {
name: 'y',
minorTick: {
show: true,
},
minorSplitLine: {
show: true,
},
},
};
const elementId = 'curve-chart-' + ids;
initEcharts(elementId, elementId, 'lineChart', options);
};
watch(() => props.checkTaskInfo, (newVal) => {
if (newVal) {
getTableColumnFn(newVal);
@@ -99,5 +204,16 @@ watch(() => props.checkTaskInfo, (newVal) => {
.model-file-page{
width: 100%;
height: 100%;
.img-content{
width: 100%;
.chart-item{
width: 100%;
min-width: 300px;
min-height: 300px;
}
}
}
</style>

View File

@@ -1,14 +1,13 @@
<template>
<div class="model-file-page">
<BaseTable v-if="showTableContent" ref="modelTableRef" :head="tableColumns" :tableName="checkTableName" hidePagination></BaseTable>
</div>
</template>
<script setup lang="ts">
import { ref, defineProps, nextTick, watch } from 'vue';
import BaseTable from '@/components/common/table/baseTable.vue';
import { objectTypeArrayRemovesDuplicates } from '@/components/loadCaseTable/utils/funTools';
const props = defineProps({
checkTaskInfo: {
@@ -35,64 +34,69 @@ const tableData = ref<any>([
]);
const modelAttribute = ref([
const modelAttribute = ref<any>([
{
name: '文件名称',
value: 'fileName',
value: 'originalName',
},
{
name: '所属项目',
value: 'project',
},
{
name: '所属阶段',
value: 'phase',
}, {
name: '所属学科',
value: 'discipline',
}, {
name: '所属任务',
value: 'task',
value: 'taskName',
}, {
name: '所属算例',
value: 'run',
}, {
value: 'runName',
},
{
name: '文件大小',
value: 'formatFileSize',
},
{
name: '日期',
value: 'date',
}, {
name: '创建人',
value: 'creator',
value: 'createTime',
},
]);
const getTableColumnFn = (data:any) => {
const titles = data.map((item:any) => {
const name = item.taskName && item.runName ? item.taskName + '_' + item.runName : item.originalName;
const value = item.taskId && item.uuid ? item.taskId + '_' + item.uuid : item.id;
const obj = {
name,
value,
};
return obj;
});
const list:any = data || [];
showTableContent.value = false;
tableData.value = [];
tableColumns.value = [];
const list:any = data || [];
const defaultColumns = [{
title: '属性',
key: 'attributes',
isShow: true,
}];
const modelcolumns:any = [];
let modelcolumns:any = [];
for (let i = 0;i < list.length;i++) {
for (let i = 0;i < titles.length;i++) {
for (let j = 0;j < 2;j++) {
const obj:any = {
title: `${list[i].taskName}_模型文件_${j + 1}`,
key: `${list[i].id}_key_${j + 1}`,
isShow: true,
};
modelcolumns.push(obj);
for (let j = 0;j < list.length;j++) {
const names = list[j].taskName && list[j].runName ? list[j].taskName + '_' + list[j].runName : list[j].originalName;
if (titles[i].name === names) {
const obj:any = {
title: titles[i].name,
key: titles[i].value,
isShow: true,
};
modelcolumns.push(obj);
}
}
}
modelcolumns = objectTypeArrayRemovesDuplicates(modelcolumns, 2);
tableColumns.value = defaultColumns.concat(modelcolumns);
@@ -102,6 +106,15 @@ const getTableColumnFn = (data:any) => {
}
}
for (let i = 0;i < modelAttribute.value.length;i++) {
for (let j = 0;j < list.length;j++) {
const values = list[j].taskId && list[j].uuid ? list[j].taskId + '_' + list[j].uuid : list[j].id;
modelAttribute.value[i][values] = list[j][modelAttribute.value[i].value];
}
}
for (let i = 0;i < modelAttribute.value.length;i++) {
const obj:any = {
@@ -109,6 +122,9 @@ const getTableColumnFn = (data:any) => {
for (let j = 0;j < tableColumns.value.length;j++) {
if (tableColumns.value[j].key === 'attributes') {
obj[tableColumns.value[j].key] = modelAttribute.value[i].name;
} else {
obj[tableColumns.value[j].key] = modelAttribute.value[i][tableColumns.value[j].key];
}
}

View File

@@ -40,26 +40,21 @@ const tableColumns = ref<any>([
]);
const modelAttribute = ref<any>([
{
name: '仿真指标1 > 20mm',
},
{
name: '仿真指标2 > 5m/s',
},
{
name: '仿真指标3 < 43 ℃)',
},
]);
const getTableColumnsFn = (data:any) => {
const performanceDatas = data || [];
const taskNames = Array.from(new Set(performanceDatas?.map((item:any) => {
return item.taskName;
}))) ;
const names = performanceDatas?.map((item:any) => {
return item.taskName ;
});
const taskNames = Array.from(new Set( names)) ;
modelAttribute.value = performanceDatas.map((item:any) => {
const obj:any = {
name: `${item.performanceName} (${item.method} ${item.targetValue} ${item.unit})`,
name: `${item.nodeName} (${item.method} ${item.targetValue} ${item.unit})`,
value: item.nodeId,
};

View File

@@ -1,7 +1,13 @@
<template>
<div class="model-file-page">
<BaseTable v-if="showTableContent" ref="reportComparisonTableRef" :head="tableColumns" :tableName="checkTableName" hidePagination></BaseTable>
<BaseTable v-if="showTableContent" ref="reportComparisonTableRef" :head="tableColumns" :tableName="checkTableName" hidePagination>
<template v-for="item in tableColumns" :key="item.key" #[item.key]="{row}">
<div v-if="row[item.key]" class="img-content" @click="reviewFileFn(row[item.key])">
<el-icon ><Document /></el-icon> <span class="report-style">{{ getFileNameFn(row[item.key]) }}</span>
</div>
</template>
</BaseTable>
</div>
</template>
@@ -9,6 +15,7 @@
<script setup lang="ts">
import { ref, defineProps, nextTick, watch } from 'vue';
import BaseTable from '@/components/common/table/baseTable.vue';
import { objectTypeArrayRemovesDuplicates } from '@/components/loadCaseTable/utils/funTools';
const props = defineProps({
checkTaskInfo: {
@@ -35,7 +42,19 @@ const tableData = ref<any>([
]);
const inputDatas = ref<any>([]);
const getFileNameFn = (ids:any) => {
const file = inputDatas.value.find((item:any) => {
return item.id === Number(ids) ;
}) || '';
return file.originalName || '';
};
const getTableColumnFn = (data:any) => {
// console.log(data, 'data');
showTableContent.value = false;
tableData.value = [];
tableColumns.value = [];
@@ -50,29 +69,42 @@ const getTableColumnFn = (data:any) => {
const reportComparisoncolumns:any = [];
for (let i = 0;i < list.length;i++) {
const names = list[i].taskName && list[i].runName ? list[i].taskName + '_' + list[i].runName : list[i].originalName;
for (let j = 0;j < 2;j++) {
const obj:any = {
title: `${names}-报告`,
key: `${list[i].taskId}_${list[i].uuid}`,
isShow: true,
};
const obj:any = {
title: `项目-阶段-学科-${list[i].taskName}_算例_${j + 1}-报告`,
key: `${list[i].id}_key_${j + 1}`,
isShow: true,
};
reportComparisoncolumns.push(obj);
}
reportComparisoncolumns.push(obj);
}
tableColumns.value = defaultColumns.concat(reportComparisoncolumns);
tableColumns.value = objectTypeArrayRemovesDuplicates(tableColumns.value, 2);
if (props.cloumnWidth) {
for (let i = 0;i < tableColumns.value.length;i++) {
tableColumns.value[i].width = props.cloumnWidth;
}
}
for (let i = 0;i < tableColumns.value.length;i++) {
const obj:any = {};
const str = tableColumns.value[i].key;
obj[str] = [];
for (let j = 0;j < list.length;j++) {
const str2 = list[j].taskId + '_' + list[j].uuid;
if (str2 === str) {
obj[str].push(list[j].id);
}
}
obj[str] = obj[str].join('_');
if (obj[str]) {
tableData.value.push(obj);
}
}
showTableContent.value = true;
nextTick(() => {
@@ -83,6 +115,8 @@ const getTableColumnFn = (data:any) => {
watch(() => props.checkTaskInfo, (newVal) => {
if (newVal) {
inputDatas.value = newVal;
getTableColumnFn(newVal);
}
@@ -92,6 +126,11 @@ watch(() => props.checkTaskInfo, (newVal) => {
deep: true,
});
const reviewFileFn = (ids:any) => {
console.log(ids, 'ids');
};
</script>
<style lang="scss" scoped>
@@ -99,5 +138,19 @@ watch(() => props.checkTaskInfo, (newVal) => {
.model-file-page{
width: 100%;
height: 100%;
.img-content{
width: 100%;
display: flex;
align-items: center;
justify-content: center;
color: #409eff;
.report-style{
margin-left: 5px;
cursor: pointer;
}
}
}
</style>

View File

@@ -514,12 +514,17 @@ const diaVisible = ref<boolean>(false);
const closeFun = () => {
diaVisible.value = false;
};
const displayCompareFun = () => {
const displayCompareFun = (flag:any) => {
if (!compareList.value.length) {
ElMessage.warning('请先加入对比池');
return;
}
diaVisible.value = true;
if (flag === '结果曲线') {
diaVisible.value = true;
} else {
diaPngVisible.value = true;
}
};
const columnData = ref<number>(1);
const renderFun = (data: any, render: (cbData: any) => void) => {
@@ -707,14 +712,14 @@ const compareFn = (flag:any) => {
}
if (flag === '结果曲线') {
openDataAnalysisFn( flag, 'RESULT_CURVE');
// openDataAnalysisFn( flag, 'RESULT_CURVE');
// displayCompareFun();
displayCompareFun('结果曲线');
}
if (flag === '结果云图') {
openDataAnalysisFn( flag, 'RESULT_PNG');
// openDataAnalysisFn( flag, 'RESULT_PNG');
// displayComparePngFun();
displayCompareFun('结果云图');
}
};