From 08429b4852b4acc2fce8f994d6bdfad890ea337e Mon Sep 17 00:00:00 2001 From: wujingjing <gersonwu@qq.com> Date: 星期日, 29 九月 2024 10:53:35 +0800 Subject: [PATCH] recordsetTable --- src/components/chat/chatComponents/recordSetCom/RecordSetCom.vue | 204 ++++++++++++++++---------------------------------- 1 files changed, 67 insertions(+), 137 deletions(-) diff --git a/src/components/chat/chatComponents/recordSetCom/RecordSetCom.vue b/src/components/chat/chatComponents/recordSetCom/RecordSetCom.vue index 173d164..8f2ad08 100644 --- a/src/components/chat/chatComponents/recordSetCom/RecordSetCom.vue +++ b/src/components/chat/chatComponents/recordSetCom/RecordSetCom.vue @@ -1,20 +1,12 @@ <template> - <el-tabs v-model="activeName" class="demo-tabs min-w-[38rem] flex-column" @tab-click="handleClick"> + <el-tabs v-model="activeName" class="demo-tabs min-w-[38rem] flex-column"> <el-tab-pane class="h-full" label="Chart" name="first"> - <!-- <el-select class="flex-0 w-36" 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="flex-auto"> + <div class="flex-auto" v-resize="chartContainerResize"> <div ref="chartRef" class="h-full"></div> </div> </el-tab-pane> <el-tab-pane class="h-full" label="Data" name="second"> - <el-table :data="data.values" style="width: 100%"> + <el-table :data="data.values" style="width: 100%" cellClassName="text-sm" headerCellClassName="text-sm"> <el-table-column v-for="(item, index) in data?.names" :label="item" :key="index"> <template #default="scope"> {{ scope.row[index] }} @@ -25,144 +17,82 @@ </el-tabs> </template> <script lang="ts" setup> -import * as echarts from 'echarts'; -import type { TabsPaneContext } from 'element-plus'; -import type { PropType } from 'vue'; -import { onMounted, ref } from 'vue'; -import { ChartTypeEnum, chartTypeMapEchart, chartTypeMapName } from '../types'; -import type { RecordSetValues } from '/@/api/ai/chat'; -import { dateRegex } from '/@/utils/toolsValidate'; +import type * as echarts from 'echarts'; +import _ from 'lodash'; +import { ref } from 'vue'; +import { SCATTER_SYMBOL_SIZE, chatComProps, getChatChartOption } from '../common'; +import { useDrawChatChart } from '../hooks/useDrawChatChart'; const activeName = ref('first'); const chartRef = ref<HTMLDivElement>(null); -const selectChartType = ref<ChartTypeEnum>(ChartTypeEnum.Line); -const props = defineProps({ - data: { - type: Object as PropType<RecordSetValues>, - }, -}); - -const selectChartTypeChange = () => { - drawChart(); -}; - -const handleClick = (tab: TabsPaneContext, event: Event) => {}; - -let chartInstance: echarts.ECharts = null; - -const getXType = (xData?: any[]) => { - const xValue = xData?.[0]; - if (xValue == null) return 'value'; - if (typeof xValue === 'number') { - return 'value'; - } else if (typeof xValue === 'string') { - const isValidDate = dateRegex.test(xValue); - return isValidDate ? 'time' : 'category'; - } else { - throw '鍥捐〃x杞存暟鎹被鍨嬪紓甯�'; - } -}; +const defaultChartType = 'line'; +const props = defineProps(chatComProps); const drawChart = () => { - const xData = props.data.values?.map((item) => item[0]); - const xType = getXType(xData); - chartInstance.setOption({ - grid: { - // bottom: 120, - right: '15%', - bottom: '5%', - }, - tooltip: { - show: true, - trigger: 'axis', - }, - toolbox: { - show: true, - feature: { - dataZoom: { - yAxisIndex: 'none', - }, - myBar: { - title: '杞寲涓烘煴鐘跺浘', - show: true, - icon: 'path://M580.8 228.8h-136v500.8h136V228.8z m-40 460.8h-56V268.8h56v420.8zM788.8 420.8h-136v308.8h136V420.8z m-40 268.8h-56V460.8h56v228.8zM372.8 326.4h-136v401.6h136V326.4z m-40 363.2h-56V366.4h56v323.2zM208 788.8h608v40H208z', - onclick: () => { - chartInstance.setOption({ - series: { + chartInstance.value.setOption( + _.defaultsDeep(getChatChartOption(), { + grid: { + bottom: '5%', + }, + + toolbox: { + feature: { + myBar: { + onclick: () => { + chartInstance.value.setOption({ + series: { + data: props.data.values, + type: 'bar', + symbol: 'none', + }, + }); + }, + }, + + myScatter: { + onclick: () => { + chartInstance.value.setOption({ data: props.data.values, - type: 'bar', - }, - }); + type: 'scatter', + symbol: 'circle', + symbolSize: SCATTER_SYMBOL_SIZE, + }); + }, + }, + myLine: { + onclick: () => { + chartInstance.value.setOption({ + data: props.data.values, + type: 'line', + symbol: 'none', + smooth: true, + }); + }, }, }, - - myScatter: { - title: '杞寲涓烘暎鐐瑰浘', - show: true, - icon: 'path://M445.7 609.8c0 19.4 10.3 37.3 27.1 46.9 16.8 9.7 37.4 9.7 54.2 0 16.8-9.7 27.1-27.6 27.1-46.9 0-29.9-24.3-54.2-54.2-54.2s-54.2 24.3-54.2 54.2z m0 0M179.2 613.8c-42.2 0-76.5 34.3-76.5 76.5s34.3 76.5 76.5 76.5 76.5-34.3 76.5-76.5-34.3-76.5-76.5-76.5z m0 0M144.9 401.1c0 29 23.5 52.5 52.5 52.5s52.5-23.5 52.5-52.5-23.5-52.5-52.5-52.5-52.5 23.5-52.5 52.5z m0 0M598.7 404c0 42.2 34.3 76.5 76.5 76.5 42.3 0 76.5-34.3 76.5-76.5 0-42.3-34.3-76.5-76.5-76.5-42.3 0-76.5 34.3-76.5 76.5z m0 0M849.3 169.2c-42.2 0-76.5 34.3-76.5 76.5s34.3 76.5 76.5 76.5 76.5-34.3 76.5-76.5-34.3-76.5-76.5-76.5z m0 0M261.6 583.1c0 13.2 7.1 25.5 18.5 32.1 11.5 6.6 25.6 6.6 37.1 0s18.5-18.9 18.5-32.1c0-20.5-16.6-37.1-37.1-37.1-20.4 0.1-37 16.7-37 37.1z m0 0M276.8 425.1c0 42.3 34.3 76.5 76.5 76.5 42.3 0 76.5-34.3 76.5-76.5s-34.3-76.5-76.5-76.5-76.5 34.3-76.5 76.5z m0 0M445.7 421.4c0 18.5 9.9 35.5 25.8 44.8 16 9.2 35.7 9.2 51.7 0s25.8-26.3 25.8-44.8c0-28.5-23.1-51.7-51.7-51.7-28.5 0-51.6 23.2-51.6 51.7z m0 0M398.2 208.8c0 42.3 34.3 76.5 76.5 76.5s76.5-34.3 76.5-76.5c0-42.3-34.3-76.5-76.5-76.5s-76.5 34.3-76.5 76.5z m0 0M693.7 599.2c0 42.3 34.3 76.5 76.5 76.5s76.5-34.3 76.5-76.5-34.3-76.5-76.5-76.5c-42.3 0-76.5 34.3-76.5 76.5z m0 0M62.1 828.9H959v60.7H62.1z', - onclick: () => { - chartInstance.setOption({ - data: props.data.values, - type: 'scatter', - }); - }, - }, - myRestore: { - title: '杩樺師', - show: true, - icon: 'path://M909.637 478.524c-15.444-189.946-167.065-345.049-356.655-364.38-99.805-10.176-193.011 16.474-267.901 67.887l18.467-68.842c5.725-21.337-6.933-43.274-28.27-48.998s-43.274 6.934-48.998 28.271l-41.455 154.536c-5.724 21.337 6.933 43.273 28.271 48.998l154.536 41.455c21.337 5.724 43.273-6.934 48.998-28.271 5.724-21.337-6.934-43.274-28.271-48.998l-54.194-14.538c58.917-39.301 131.457-59.686 208.999-52.061 147.885 14.543 268.327 132.461 285.589 280.053 23.02 196.82-133.879 363.973-327.45 358.219-135.107-4.017-252.98-96.111-294.938-224.602-17.513-53.632-18.92-105.027-9.92-152.849 3.188-16.946-4.238-34.086-19.172-42.707l-0.049-0.028c-23.737-13.705-54.358-0.164-59.404 26.777-7.724 41.233-9.128 84.686-2.965 129.403 25.571 185.535 181.03 330.336 367.878 343.176C727.656 927.857 929.6 724.049 909.637 478.524z', - onclick: () => { - chartInstance.setOption({ - data: props.data.values, - type: 'line', - }); - }, - }, - dataView: { - readOnly: true, - }, - saveAsImage: {}, }, - }, - title: { - text: props.data.title, - left: 'center', - }, - xAxis: { - name: props.data?.names[0], - type: xType, - }, - yAxis: { - name: props.data?.names[1], - type: 'value', - }, - series: [ - { - data: props.data.values, - type: chartTypeMapEchart[selectChartType.value], + title: { + text: props.data.title, }, - ], - dataZoom: { - type: 'inside', - }, - }); + xAxis: { + name: props.data?.names[0], + }, + yAxis: { + name: props.data?.names[1], + }, + series: [ + { + data: props.data.values, + symbol: 'none', + smooth: true, + type: defaultChartType, + }, + ], + } as echarts.EChartsOption) + ); }; - -onMounted(() => { - setTimeout(() => { - const parent = chartRef.value.parentElement; - if (!parent) { - } - const parentBound = parent.getBoundingClientRect(); - chartInstance = echarts.init(chartRef.value, undefined, { - width: parentBound.width, - height: parentBound.height, - }); - - drawChart(); - }, 300); -}); +const { chartContainerResize, chartInstance } = useDrawChatChart({ chartRef, drawChart }); </script> <style scoped lang="scss"> -- Gitblit v1.9.3