From 0159386060edb946f29b5adcd9659dbfac06d6e1 Mon Sep 17 00:00:00 2001 From: wujingjing <gersonwu@qq.com> Date: 星期一, 10 三月 2025 18:17:32 +0800 Subject: [PATCH] 指标附件 --- src/components/chat/components/playBar/PlayBar.vue | 76 +++++++++++++++++++++++++++++++++++-- 1 files changed, 71 insertions(+), 5 deletions(-) diff --git a/src/components/chat/components/playBar/PlayBar.vue b/src/components/chat/components/playBar/PlayBar.vue index ee2192a..58afdeb 100644 --- a/src/components/chat/components/playBar/PlayBar.vue +++ b/src/components/chat/components/playBar/PlayBar.vue @@ -31,7 +31,7 @@ v-for="(item, index) in attachList" :key="index" class="flex items-center gap-2 bg-[#f5f5f5] px-2 py-3 rounded-lg w-[220px] relative group" - :class="{ 'cursor-pointer': item.type === 'table' }" + :class="{ 'cursor-pointer': item.type === 'table' || item.type === 'metric' }" @click="openAttachPreview(item)" > <template v-if="item.type === 'file'"> @@ -56,6 +56,13 @@ <div class="text-info text-sm over-ellipsis w-full">{{ `涓氬姟琛ㄦ牸锛�${item.model.values?.length} 鏉¤褰昤 }}</div> </div> </template> + <template v-if="item.type === 'metric'"> + <div class="ywifont !text-[24px] flex-0" :class="[`ywicon-${item.icon}`, item.iconClass]"></div> + <div class="flex flex-col gap-0.5 w-full flex-auto"> + <div class="font-bold over-ellipsis w-full">{{ item.title }}</div> + <div class="text-info text-sm over-ellipsis w-full">{{ `鎸囨爣鏁版嵁锛�${item.model.values?.length} 鏉¤褰昤 }}</div> + </div> + </template> <div class="group-hover:visible invisible absolute right-0.5 top-0.5 bg-red-500 flex-center rounded-full p-0.5 cursor-pointer" @click.stop="deleteAttachInIndex(index)" @@ -70,7 +77,7 @@ type="textarea" resize="none" maxlength="1024" - :autosize="{ minRows: 1, maxRows: 8 }" + :autosize="{ minRows: 3, maxRows: 8 }" v-elInputFocus show-word-limit @keydown="keydownInput" @@ -96,6 +103,12 @@ > </el-button> <div class="flex-items-center gap-2"> + <el-tooltip placement="top" content="鍏宠仈鎸囨爣"> + <div class="cursor-pointer size-[24px] relative !z-10 rounded flex-center hover:bg-[#f2f2f2]" @click="openMetric"> + <span class="ywifont ywicon-zhibiao !text-[19px]"></span> + </div> + </el-tooltip> + <el-tooltip placement="top" content="鍏宠仈涓氬姟琛ㄦ牸"> <div class="cursor-pointer size-[24px] relative !z-10 rounded flex-center hover:bg-[#f2f2f2]" @@ -104,6 +117,7 @@ <span class="ywifont ywicon-biaoge !text-[19px]"></span> </div> </el-tooltip> + <el-tooltip placement="top" content="涓婁紶闄勪欢"> <div class="cursor-pointer size-[24px] relative !z-10 rounded flex-center hover:bg-[#f2f2f2]" @click="openFileClick"> <span class="ywifont ywicon-fujian !text-[20px] font-bold"></span> @@ -145,6 +159,9 @@ /> <BusinessTable v-model="businessTableIsShow" @submit="submitBusinessTable" /> <BusinessTablePreview :data="attachPreviewData" v-model="attachPreviewIsShow" /> + <MetricValues v-model="metricIsShow" @submit="submitMetricValues" /> + + <MetricValuesPreview v-model="metricPreviewIsShow" :data="metricPreviewData" /> </div> </div> </template> @@ -164,6 +181,9 @@ import VoicePage from './voicePage/VoicePage.vue'; import { useCompRef } from '/@/utils/types'; import emitter from '/@/utils/mitt'; +import MetricValues from './metricValues/MetricValues.vue'; + +import MetricValuesPreview from './metricValues/MetricValuesPreview.vue'; const emits = defineEmits(['sendClick', 'stopGenClick']); const props = defineProps({ @@ -264,6 +284,15 @@ } return false; }; + +const checkMetricAttachExist = (data: any) => { + const dataStr = JSON.stringify(data); + const exist = attachList.value.find((item) => item.type === 'metric' && JSON.stringify(item.model) === dataStr); + if (exist) { + return true; + } + return false; +}; const submitBusinessTable = (data) => { attachList.value.push( ...data @@ -280,6 +309,21 @@ ); }; +const submitMetricValues = (data) => { + attachList.value.push( + ...data + .filter((item) => !checkMetricAttachExist(item)) + .map((item) => { + return { + title: item.title, + type: 'metric', + model: item, + icon: 'zhibiao', + iconClass: 'ywicon-zhibiao text-[#c5e0ff]', + }; + }) + ); +}; //#region ====================== 涓氬姟琛ㄦ牸 ====================== const businessTableIsShow = ref(false); const openBusinessTable = () => { @@ -292,13 +336,35 @@ const attachPreviewData = ref<Attach>(); const openAttachPreview = (item: Attach) => { if (item.type === 'file') return; - attachPreviewIsShow.value = true; - attachPreviewData.value = item; + if (item.type === 'table') { + attachPreviewIsShow.value = true; + attachPreviewData.value = item; + } else if (item.type === 'metric') { + metricPreviewIsShow.value = true; + metricPreviewData.value = item; + } }; //#endregion +//#region ====================== 鎸囨爣闄勪欢 ====================== +const metricIsShow = ref(false); +const openMetric = () => { + metricIsShow.value = true; +}; +//#endregion + +//#region ====================== 鎸囨爣闄勪欢棰勮 ====================== +const metricPreviewIsShow = ref(false); +const metricPreviewData = ref<Attach>(); + +//#endregion + const quoteAttach = (item: Attach) => { - submitBusinessTable([item.model]); + if (item.type === 'table') { + submitBusinessTable([item.model]); + } else if (item.type === 'metric') { + submitMetricValues([item.model]); + } }; onActivated(() => { emitter.on('quoteAttach', quoteAttach); -- Gitblit v1.9.3