You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

142 lines
5.2 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<el-table :data="formattedData" style="width: 100%;overflow: auto;">
<!-- 第一列井号/段号 -->
<el-table-column :label="tableFirstColumn" min-width="120">
<template #default="scope">
<span>{{ scope.row.segment }}</span>
</template>
</el-table-column>
<!-- 动态切换列 -->
<!-- 动态参数列 chartNum === 5 -->
<template v-if="chartNum === 5">
<el-table-column prop="stage" label="段号" min-width="100"></el-table-column>
<el-table-column
v-for="(paramName, index) in dynamicParamNames"
:key="index"
:prop="paramName"
:label="paramName"
min-width="120">
<template #default="scope">
<span>{{ scope.row[paramName] }}</span>
</template>
</el-table-column>
</template>
<!-- 井号列,其他情况 -->
<template v-else>
<el-table-column
v-for="(well, index) in wellNames"
:key="index"
:label="well"
min-width="100">
<template #default="scope">
<div v-for="(item, idx) in scope.row[well]" :key="idx">
<span>{{ item.point.Z }}</span>
</div>
</template>
</el-table-column>
</template>
</el-table>
</template>
<script>
export default {
props: {
tableData: {
type: Object,
required: true
},
chartNum: Number
},
computed: {
dynamicParamNames() {
if (this.chartNum === 5) {
const paramNames = new Set();
// 遍历每个井号的数据
Object.values(this.tableData).forEach(parameters => {
parameters.forEach(param => paramNames.add(param.ParamName));
});
return Array.from(paramNames); // 返回参数名的数组
}
return [];
},
wellNames() {
return Object.keys(this.tableData);
},
tableFirstColumn() {
if (this.chartNum == 0 || this.chartNum == 1) {
return '段号';
} else if (this.chartNum == 2) {
return '井号';
} else {
return '参数名';
}
},
formattedData() {
const maxLength = Math.max(...this.wellNames.map(well => this.tableData[well].length));
if (this.chartNum == 0 || this.chartNum == 1) {
return Array.from({ length: maxLength }, (_, index) => {
const row = { segment: index + 1 }; // 添加段号
this.wellNames.forEach(well => {
row[well] = this.tableData[well][index] ? [{ point: this.tableData[well][index].Point }] : [];
});
return row;
})
} else if (this.chartNum == 2 || this.chartNum == 3) {
return Array.from({ length: maxLength }, (_, index) => {
const row = { segment: '平均值' }; // 添加段号
this.wellNames.forEach(well => {
row[well] = this.tableData[well][index] ? [{ point: this.tableData[well][index].Point }] : [];
});
return row;
});
} else if (this.chartNum == 4) {
return Array.from({ length: maxLength }, (_, index) => {
const row = {};
this.wellNames.forEach(well => {
row.segment = this.tableData[well][index] ? this.tableData[well][index].ParamName : '';
row[well] = this.tableData[well][index] ? [{ point: this.tableData[well][index].Point }] : [];
});
return row;
});
} else {
const formatted = [];
Object.entries(this.tableData).forEach(([wellName, parameters]) => {
const groupedByStage = {};
parameters.forEach(param => {
const stage = param.StageNo;
if (!groupedByStage[stage]) {
groupedByStage[stage] = {};
}
groupedByStage[stage][param.ParamName] = param.Point.Z; // 提取 Z 值
});
// 构建表格行
Object.entries(groupedByStage).forEach(([stageNo, paramValues]) => {
const row = {
segment: wellName, // 井号
stage: stageNo
};
// 根据动态参数名填充数据
this.dynamicParamNames.forEach(paramName => {
row[paramName] = paramValues[paramName] || ""; // 如果值不存在,则设为空字符串
});
formatted.push(row);
});
});
return formatted;
}
}
}
}
</script>
<style scoped>
/* 可根据需要添加样式 */
</style>