From 571427b504e56da13b3a9347b03d04175e76bea6 Mon Sep 17 00:00:00 2001
From: yangyin <1850366751@qq.com>
Date: 星期二, 15 十月 2024 12:07:48 +0800
Subject: [PATCH] Merge branch 'test' of http://47.103.154.90:83/r/WI/Web.V1.0 into test

---
 src/components/chat/chatComponents/summaryCom/components/recordSet/RecordSet.vue                  |   55 ++++++++-----
 src/components/chat/chatComponents/summaryCom/components/recordSetTable/RecordSetTable.vue        |    2 
 src/components/chat/chatComponents/summaryCom/components/recordSetTable/infoDetail/InfoDetail.vue |   36 ++++++++-
 src/components/chat/components/playBar/PlayBar.vue                                                |   23 ++++-
 src/components/chat/components/playBar/InfoDetail.vue                                             |   76 +++++++++++++++++++
 5 files changed, 163 insertions(+), 29 deletions(-)

diff --git a/src/components/chat/chatComponents/summaryCom/components/recordSet/RecordSet.vue b/src/components/chat/chatComponents/summaryCom/components/recordSet/RecordSet.vue
index 2c32c23..e0a714b 100644
--- a/src/components/chat/chatComponents/summaryCom/components/recordSet/RecordSet.vue
+++ b/src/components/chat/chatComponents/summaryCom/components/recordSet/RecordSet.vue
@@ -5,7 +5,7 @@
 			<!-- TimeRange v-model 璺� @change 涓殑鍊间細涓嶄竴鏍凤紝浠change 涓负鍑� -->
 			<template v-if="visibleParams && visibleParams.length > 0">
 				<component
-					class="flex-0 m-1"
+					class="flex-0 m-2"
 					v-model="paramsValueList[index].value"
 					v-for="(item, index) in visibleParams as any"
 					:key="item.id"
@@ -18,9 +18,18 @@
 				></component>
 			</template>
 			<slot> </slot>
+			<YRange @input="yRangeInput" />
+			<el-tooltip
+				v-if="originChartType === ChartTypeEnum.Score"
+				:content="`${Object.keys(scoreMap)
+					.map((key) => `${key} 琛ㄧず${scoreMap[key]}`)
+					.join(', ')}`"
+				placement="top-start"
+			>
+				<SvgIcon name="fa fa-question-circle-o" :size="15" class="ml-1 cursor-help flex-center" color="#909399" />
+			</el-tooltip>
 
-			<YRange v-model="yRange" @input="yRangeInput" />
-			<el-checkbox class="m-1" v-model="isMultiCompare" label="澶氭棩瀵规瘮" @change="multiCompareChange"></el-checkbox>
+			<el-checkbox class="m-2" v-model="isMultiCompare" label="澶氭棩瀵规瘮" @change="multiCompareChange"></el-checkbox>
 
 			<DisplayMode class="ml-auto" v-model="showMode" @change="displayModeChange" />
 		</div>
@@ -52,10 +61,6 @@
 import { deepClone } from '/@/utils/other';
 import { debounce } from '/@/utils/util';
 const chartRef = ref<HTMLDivElement>(null);
-const yRange = ref({
-	min: null as number,
-	max: null as number,
-});
 
 const showMode = ref(DisplayModeType.Chart);
 // const props = defineProps({
@@ -350,7 +355,7 @@
 	handleData();
 	setNewOption();
 };
-const { chartContainerResize, chartInstance, initChart } = useDrawChatChart({ chartRef, drawChart });
+const { chartContainerResize, chartInstance } = useDrawChatChart({ chartRef, drawChart });
 
 // 鏇存崲鍒楄〃
 const changeMap = new Map<string, any>(null);
@@ -405,6 +410,11 @@
 	}
 };
 
+let realRange = {
+	min: null,
+	max: null,
+};
+
 const getSingleDayOption = (day = COMMON_DAY) =>
 	({
 		tooltip: {
@@ -454,11 +464,9 @@
 	} as echarts.EChartsOption);
 //#region ====================== 璁剧疆Y鑼冨洿 ======================
 const debounceSetYRange = debounce((val) => {
+	(realRange.min = val.min), (realRange.max = val.max);
 	chartInstance.value.setOption({
-		yAxis: {
-			min: val.min,
-			max: val.max,
-		},
+		yAxis: realRange,
 	});
 
 	currentSeries.value = currentSeries.value.concat([]);
@@ -527,17 +535,25 @@
 
 const tableData = computed(() => {
 	if (!currentSeries.value) return [];
-	// const min = yRange.value.min == null ? -Infinity : yRange.value.min;
-	// const max = yRange.value.max == null ? Infinity : yRange.value.max;
+	const min = realRange.min == null ? -Infinity : realRange.min;
+	const max = realRange.max == null ? Infinity : realRange.max;
 	const timeDataMap = currentSeries.value.reduce((preVal, curVal, index) => {
 		for (const item of curVal.data) {
-			const [time, value] = item;
-
-			// if (value < min || value > max) {
-			// 	continue;
-			// }
+			let [time, value] = item;
+			// 澶氭棩瀵规瘮锛屽彧鏄剧ず鏃跺垎绉�
+			if (isMultiCompare.value) {
+				time = time.slice(11);
+			}
+			if (value < min || value > max) {
+				continue;
+			}
 			if (!preVal[time]) {
 				preVal[time] = [];
+			}
+
+			// score 绫诲瀷锛寁alue 鍊硷紝闇�瑕佹槧灏勬垚鍙︿竴涓��
+			if (originChartType === ChartTypeEnum.Score) {
+				value = scoreMap[value];
 			}
 			preVal[time][index] = value;
 		}
@@ -571,7 +587,6 @@
 watch(
 	() => currentSeries.value,
 	(val) => {
-		if (!tableIsShow.value) return;
 		tableKey.value = _.random(0, 100000) + '';
 	}
 );
diff --git a/src/components/chat/chatComponents/summaryCom/components/recordSetTable/RecordSetTable.vue b/src/components/chat/chatComponents/summaryCom/components/recordSetTable/RecordSetTable.vue
index 09ef264..8911e4d 100644
--- a/src/components/chat/chatComponents/summaryCom/components/recordSetTable/RecordSetTable.vue
+++ b/src/components/chat/chatComponents/summaryCom/components/recordSetTable/RecordSetTable.vue
@@ -107,7 +107,7 @@
 				...item,
 				width: 0,
 				label: item.title,
-				sortable: item.type === 'time',
+				// sortable: item.type === 'time',
 				prop: index + '',
 				isShow: isShow,
 			} as TableCol;
diff --git a/src/components/chat/chatComponents/summaryCom/components/recordSetTable/infoDetail/InfoDetail.vue b/src/components/chat/chatComponents/summaryCom/components/recordSetTable/infoDetail/InfoDetail.vue
index 0866ca3..f520353 100644
--- a/src/components/chat/chatComponents/summaryCom/components/recordSetTable/infoDetail/InfoDetail.vue
+++ b/src/components/chat/chatComponents/summaryCom/components/recordSetTable/infoDetail/InfoDetail.vue
@@ -8,7 +8,7 @@
 		@dlgClosed="closeDialog"
 		:closeOnClickModal="true"
 	>
-		<el-form :model="item" ref="dialogFormRef" :rules="dialogFormRules" label-width="76">
+		<el-form :model="item" ref="dialogFormRef" :rules="dialogFormRules" :label-width="labelWidth">
 			<el-form-item :label="colList[key]?.label" :prop="key" v-for="key in Object.keys(colList)">
 				<el-input readonly :modelValue="item[key]"></el-input>
 			</el-form-item>
@@ -21,12 +21,13 @@
 
 import type { FormInstance, FormRules } from 'element-plus';
 
-import { computed, ref } from 'vue';
+import { computed, onMounted, ref } from 'vue';
+import { getTextWidth } from '/@/utils/util';
 
-const props = defineProps(['item', 'colList']);
+const props = defineProps(['item', 'colList','title']);
 //#region ====================== 澧炲姞銆佷慨鏀硅褰曟搷浣�, dialog init======================
 const dialogTitle = computed(() => {
-	return `璁板綍璇︽儏`;
+	return props.title ?? `璁板綍璇︽儏`;
 });
 
 const dialogIsShow = defineModel({
@@ -44,5 +45,32 @@
 const closeDialog = () => {
 	dialogIsShow.value = false;
 };
+
+const measureWidthOffset = 12;
+const labelWidth = ref(undefined);
+const getMaxLabelWidth = () =>{
+
+	let maxLen = 0;
+	let maxStr = '';
+	Object.values(props.colList ).map(item=>{
+		const label = (item as any).label as string;
+
+		const currentLen = label.gblen();
+		if(currentLen> maxLen){
+			maxLen = currentLen
+			maxStr = label;
+		}
+	})
+
+
+	const maxWidth = getTextWidth(maxStr,{
+		size: '14px',
+	})+measureWidthOffset;
+	labelWidth.value = maxWidth;
+}
+
+onMounted(() => {
+	getMaxLabelWidth();
+});
 </script>
 <style scoped lang="scss"></style>
diff --git a/src/components/chat/components/playBar/InfoDetail.vue b/src/components/chat/components/playBar/InfoDetail.vue
new file mode 100644
index 0000000..af1fcb5
--- /dev/null
+++ b/src/components/chat/components/playBar/InfoDetail.vue
@@ -0,0 +1,76 @@
+<template>
+	<ywDialog
+		v-model="dialogIsShow"
+		:showHeaderIcon="false"
+		:title="dialogTitle"
+		width="470"
+		:showFooter="false"
+		@dlgClosed="closeDialog"
+		:closeOnClickModal="true"
+	>
+		<el-form :model="item" ref="dialogFormRef" :rules="dialogFormRules" :label-width="labelWidth">
+			<!-- <el-form-item :label="colList[key]?.label" :prop="key" v-for="key in Object.keys(colList)">
+				<el-input readonly :modelValue="item[key]"></el-input>
+			</el-form-item> -->
+		</el-form>
+	</ywDialog>
+</template>
+
+<script setup lang="ts">
+import ywDialog from '/@/components/dialog/yw-dialog.vue';
+
+import type { FormInstance, FormRules } from 'element-plus';
+
+import { computed, onMounted, ref } from 'vue';
+import { getTextWidth } from '/@/utils/util';
+
+const props = defineProps(['item', 'colList','title']);
+//#region ====================== 澧炲姞銆佷慨鏀硅褰曟搷浣�, dialog init======================
+const dialogTitle = computed(() => {
+	return props.title ?? `璁板綍璇︽儏`;
+});
+
+const dialogIsShow = defineModel({
+	type: Boolean,
+});
+const dialogFormRef = ref<FormInstance>(null);
+
+const dialogFormRules = ref<FormRules>({
+	// title: [{ required: true, message: '璇疯緭鍏ユ爣棰�', trigger: 'blur' }],
+	// prompt: [{ required: true, message: '璇疯緭鍏ユ彁绀鸿瘝', trigger: 'blur' }],
+});
+
+//#endregion
+
+const closeDialog = () => {
+	dialogIsShow.value = false;
+};
+
+const measureWidthOffset = 12;
+const labelWidth = ref(undefined);
+const getMaxLabelWidth = () =>{
+
+	let maxLen = 0;
+	let maxStr = '';
+	Object.values(props.colList ).map(item=>{
+		const label = (item as any).label as string;
+
+		const currentLen = label.gblen();
+		if(currentLen> maxLen){
+			maxLen = currentLen
+			maxStr = label;
+		}
+	})
+
+
+	const maxWidth = getTextWidth(maxStr,{
+		size: '14px',
+	})+measureWidthOffset;
+	labelWidth.value = maxWidth;
+}
+
+onMounted(() => {
+	// getMaxLabelWidth();
+});
+</script>
+<style scoped lang="scss"></style>
diff --git a/src/components/chat/components/playBar/PlayBar.vue b/src/components/chat/components/playBar/PlayBar.vue
index 620da7d..663f339 100644
--- a/src/components/chat/components/playBar/PlayBar.vue
+++ b/src/components/chat/components/playBar/PlayBar.vue
@@ -5,6 +5,8 @@
 				<img src="/static/images/wave/PlugIn.png" class="set-icon box-border" />
 			</el-button>
 		</div>
+		<InfoDetail class="text-base" v-model="infoDetailIsShow" :item="detailMapRow"  />
+
 		<div class="set-input">
 			<!-- @input="inputText" -->
 
@@ -38,6 +40,7 @@
 					>
 						<span class="text-sm text-gray-500 pr-1.5">{{ index + 1 }}</span>
 						<span> {{ item?.question }} </span>
+						<!-- <span class="text-blue-400 font-bold cursor-pointer hover:underline" @click.stop="tipMetricsClick">娴嬭瘯鏄�</span> -->
 					</div>
 				</div>
 			</div>
@@ -78,8 +81,9 @@
 import VoicePage from './voicePage/VoicePage.vue';
 import { querySimilarityHistory } from '/@/api/ai/chat';
 import { useClickOther } from '/@/hooks/useClickOther';
+import InfoDetail from './InfoDetail.vue';
 
-import { onClickOutside } from '@vueuse/core'
+import { onClickOutside } from '@vueuse/core';
 const emits = defineEmits(['sendClick']);
 const props = defineProps(['isTalking', 'isHome']);
 const voicePageIsShow = defineModel('voicePageIsShow', {
@@ -133,9 +137,9 @@
 	bottom: null,
 });
 
-onClickOutside(tipEleRef,()=>{
-	triggerShow.value = true
-})
+onClickOutside(tipEleRef, () => {
+	triggerShow.value = false;
+});
 const inputText = (text) => {
 	nextTick(() => {
 		setTimeout(() => {
@@ -180,6 +184,17 @@
 		}
 	);
 };
+
+
+//#region ======================  楂樹寒鎸囨爣鐐瑰嚮======================
+const infoDetailIsShow = ref(false);
+const detailMapRow = ref(null);
+
+const tipMetricsClick = (row) => {
+	detailMapRow.value = row;
+	infoDetailIsShow.value = true;
+};
+//#endregion
 </script>
 <style scoped lang="scss">
 .set-waterTitle {

--
Gitblit v1.9.3