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