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