yangyin
2024-10-15 571427b504e56da13b3a9347b03d04175e76bea6
Merge branch 'test' of http://47.103.154.90:83/r/WI/Web.V1.0 into test
已修改4个文件
已添加1个文件
192 ■■■■ 文件已修改
src/components/chat/chatComponents/summaryCom/components/recordSet/RecordSet.vue 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/chat/chatComponents/summaryCom/components/recordSetTable/RecordSetTable.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/chat/chatComponents/summaryCom/components/recordSetTable/infoDetail/InfoDetail.vue 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/chat/components/playBar/InfoDetail.vue 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/chat/components/playBar/PlayBar.vue 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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 ç±»åž‹ï¼Œvalue å€¼ï¼Œéœ€è¦æ˜ å°„成另一个值
            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) + '';
    }
);
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;
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>
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>
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 {