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

1 month ago
<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>