From 8703f7ddda1cbdbee1cefc4c8f9a31ea97272494 Mon Sep 17 00:00:00 2001
From: wujingjing <gersonwu@qq.com>
Date: 星期一, 18 十一月 2024 14:24:50 +0800
Subject: [PATCH] 打包优化: 1)使用 lodash-es 2)element-plus按需导入

---
 src/components/chat/chatComponents/recordSetCom/RecordSetCom.vue |  167 ++++++++++++++++++++++++-------------------------------
 1 files changed, 72 insertions(+), 95 deletions(-)

diff --git a/src/components/chat/chatComponents/recordSetCom/RecordSetCom.vue b/src/components/chat/chatComponents/recordSetCom/RecordSetCom.vue
index a0c2fa5..b94326b 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,97 +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 { ref } from 'vue';
+import { SCATTER_SYMBOL_SIZE, chatComProps, getChatChartOption } from '../common';
+import { useDrawChatChart } from '../hooks/useDrawChatChart';
+import { defaultsDeep } from 'lodash-es';
 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: '15%',
-		},
-		tooltip: {
-			show: true,
-		},
-		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],
+	chartInstance.value.setOption(
+		defaultsDeep(getChatChartOption(), {
+			grid: {
+				bottom: '5%',
 			},
-		],
-		dataZoom: {
-			type: 'inside',
-		},
-	});
+
+			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: 'scatter',
+								symbol: 'circle',
+								symbolSize: SCATTER_SYMBOL_SIZE,
+							});
+						},
+					},
+					myLine: {
+						onclick: () => {
+							chartInstance.value.setOption({
+								data: props.data.values,
+								type: 'line',
+								symbol: 'none',
+								smooth: true,
+							});
+						},
+					},
+				},
+			},
+
+			title: {
+				text: props.data.title,
+			},
+			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;
-		
-		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