<template>
|
<yw-dialog v-model="isShow" :showFooter="false" width="1030" :title="title">
|
<div class="h-full">
|
<el-table class="h-full" :data="tableData" :span-method="objectSpanMethod" border>
|
<el-table-column prop="title" width="100" label="标题" />
|
<el-table-column label="维度" >
|
<el-table-column label="标题" prop="dimension.title"> </el-table-column>
|
<el-table-column label="类型" width="100" prop="dimension.type"> </el-table-column>
|
</el-table-column>
|
</el-table>
|
</div>
|
</yw-dialog>
|
</template>
|
|
<script setup lang="ts">
|
import { computed, ref, watch } from 'vue';
|
import * as metricApi from '/@/api/metric';
|
import ywDialog from '/@/components/dialog/yw-dialog.vue';
|
import _ from 'lodash';
|
|
const props = defineProps(['metricItem']);
|
const isShow = defineModel({
|
type: Boolean,
|
});
|
|
const tableData = ref([]);
|
const title = computed(() => props.metricItem?.title + '——指标名称');
|
|
const objectSpanMethod = ({ row, column, rowIndex, columnIndex }) => {
|
if (columnIndex === 0) {
|
return {
|
rowspan: row.rowspan,
|
colspan: 1,
|
};
|
}
|
};
|
|
const parseData = (data: any[]) => {
|
const finalData = (data ?? []).reduce((pre, cur) => {
|
const dimensions = cur.dimensions;
|
pre.push(
|
...dimensions.map((item, index) => ({
|
..._.omit(cur, 'dimensions'),
|
id: cur.id + '_dimension_' + item.id,
|
dimension: item,
|
rowspan: index === 0 ? dimensions.length : undefined,
|
}))
|
);
|
return pre;
|
}, []);
|
return finalData;
|
};
|
|
watch(
|
() => isShow.value,
|
async (val) => {
|
if (!val) return;
|
|
const res = await metricApi.getMetricNameListByPost({
|
agent_id: props.metricItem.id,
|
});
|
tableData.value = parseData(res?.values);
|
}
|
);
|
</script>
|
<style scoped lang="scss">
|
:deep(.el-card__body) {
|
position: relative;
|
}
|
</style>
|