From a20ef070ec3df840dbc39aafa4622947fc431190 Mon Sep 17 00:00:00 2001 From: wujingjing <gersonwu@qq.com> Date: 星期五, 11 十月 2024 09:42:38 +0800 Subject: [PATCH] h2 - h1 --- src/components/chat/chatComponents/summaryCom/SummaryCom.vue | 184 ++++++---------------------------------------- 1 files changed, 24 insertions(+), 160 deletions(-) diff --git a/src/components/chat/chatComponents/summaryCom/SummaryCom.vue b/src/components/chat/chatComponents/summaryCom/SummaryCom.vue index 56f6cdf..189921d 100644 --- a/src/components/chat/chatComponents/summaryCom/SummaryCom.vue +++ b/src/components/chat/chatComponents/summaryCom/SummaryCom.vue @@ -1,171 +1,35 @@ <template> - <div class="min-w-[100ch]"> - <div class="ml-10" v-for="(item, idx) in summaryList" :key="idx"> - <h3>{{ item.title }}</h3> - <el-table class="mt-2" :data="item.values" :style="{ width: `${columnsWidth * (item.values?.length ?? 1)}px` }"> - <el-table-column v-for="(col, index) in item.values" :label="col.title" :key="index"> - <template #default="scope"> - {{ col?.value }} - </template> - </el-table-column> - </el-table> - </div> - <div class="flex-column w-full"> - <el-select class="flex-0 w-36 ml-auto mr-16" v-model="selectChartType" @change="selectChartTypeChange"> - <el-option - v-for="item in Object.keys(chartTypeMapName)" - :key="item" - :value="parseInt(item)" - :label="chartTypeMapName[item]" - ></el-option> - </el-select> - <div class="min-h-[48rem] flex-auto w-full" v-if="recordSetList && recordSetList.length > 0"> - <div ref="chartRefList" v-for="(item, index) in recordSetList" :key="index"></div> - </div> - </div> + <div class="w-full space-y-3"> + <template v-if="parsedData && parsedData.length > 0"> + <component + v-for="(item, index) in parsedData" + :key="item.id" + :id="item.id" + :is="summaryAnswerTypeMapCom[item.type]" + :data="item" + :originData="originData" + :summaryIndex="index" + ></component> + </template> + <!-- <AmisPageTest /> --> </div> </template> <script setup lang="ts"> -import * as echarts from 'echarts'; -import _ from 'lodash'; -import { computed, onMounted, ref } from 'vue'; -import { ChartTypeEnum, chartTypeMapEchart, chartTypeMapName } from '../types'; -import { axisLabelFormatter } from '/@/utils/chart'; +import { computed } from 'vue'; +import { chatComProps } from '../common'; +import { SummaryAnswerType, summaryAnswerTypeMapCom } from './components/types'; +// import AmisPageTest from './components/amisPage/AmisPageTest.vue'; +const props = defineProps(chatComProps); -const props = defineProps(['data']); - -const selectChartType = ref<ChartTypeEnum>(ChartTypeEnum.Line); - -const columnsWidth = 120; - -const chartRef = ref<HTMLDivElement[] | HTMLDivElement>(null); - -const chartRefList = computed(() => { - let refList: HTMLDivElement[] = []; - if (!chartRef.value) { - refList = []; - } else { - const first = chartRef.value?.[0]; - if (first) { - refList = chartRef.value as unknown as HTMLDivElement[]; - } else { - refList = [chartRef.value as unknown as HTMLDivElement]; +const parsedData = computed(() => { + const newData = (props.data ?? []).map((item) => { + if (item.type === SummaryAnswerType.RecordSet && item.chart === 'table') { + item.type = SummaryAnswerType.RecordSetTable; } - } - - return refList; -}); - -const recordSetList = props.data.filter((item) => item.type === 'recordset'); -const summaryList = props.data.filter((item) => item.type === 'summary'); - -const drawAllChart = () => { - chartInstanceList.map((item, index) => { - drawChart(item, recordSetList[index]); + return item; }); -}; - -const selectChartTypeChange = () => { - drawAllChart(); -}; - -const drawChart = (instance, data) => { - const xType = 'time'; - - let timeIndex = data.cols.findIndex((item) => item.type === 'time'); - if (timeIndex === -1) { - timeIndex = 0; - } - const timeCol = data.cols[timeIndex]; - - let valueIndex = data.cols.findIndex((item) => item.type === 'value'); - if (valueIndex === -1) { - valueIndex = 2; - } - const valueCol = data.cols[valueIndex]; - - let nameCol = null; - let groupedValues = null; - if (data.chart === 'muli_line') { - let nameIndex = data.cols.findIndex((item) => item.type === 'name'); - if (nameIndex === -1) { - nameIndex = 1; - } - nameCol = data.cols[nameIndex]; - groupedValues = _.groupBy(data.values, (item) => item[nameIndex]); - } else if (data.chart === 'single_line') { - groupedValues = { - default: data.values, - }; - } else { - // 榛樿閮藉綋muli_line - let nameIndex = data.cols.findIndex((item) => item.type === 'name'); - if (nameIndex === -1) { - nameIndex = 1; - } - nameCol = data.cols[nameIndex]; - groupedValues = _.groupBy(data.values, (item) => item[nameIndex]); - } - - const seriesData = Object.keys(groupedValues).map((item) => { - const values = groupedValues[item]; - return { - name: item === 'default' ? '' : item, - data: values.map((item) => [item[timeIndex], item[valueIndex]]), - type: chartTypeMapEchart[selectChartType.value], - }; - }); - - instance.setOption({ - grid: { - // bottom: 120, - // right: '15%', - bottom: '15%', - }, - tooltip: { - show: true, - }, - title: { - text: data.title, - left: 'center', - }, - xAxis: { - name: timeCol.title, - type: xType, - }, - yAxis: { - name: valueCol.title, - type: 'value', - axisLabel: { - formatter: axisLabelFormatter, - }, - }, - series: seriesData, - dataZoom: { - type: 'inside', - }, - }); -}; -let chartInstanceList: echarts.ECharts[] = null; -onMounted(() => { - setTimeout(() => { - const parent = chartRefList.value[0].parentElement; - - const parentBound = parent.getBoundingClientRect(); - let divideCount = 1; - // if(chartRefList.value.length>=2){ - // divideCount = 2; - // } - const width = parentBound.width / divideCount; - chartInstanceList = chartRefList.value.map((item) => { - return echarts.init(item, undefined, { - width: width, - height: parentBound.height, - }); - }); - drawAllChart(); - }, 300); + return newData; }); </script> <style scoped lang="scss"></style> -- Gitblit v1.9.3