From 5fb58c10b2bb44b3f2d3bdab4d7a6619271e2bbf Mon Sep 17 00:00:00 2001
From: wujingjing <gersonwu@qq.com>
Date: 星期三, 02 四月 2025 17:51:39 +0800
Subject: [PATCH] smallScreenClick

---
 src/components/chat/user/index.vue |   47 ++++++++++++++++++++++++++++++++++-------------
 1 files changed, 34 insertions(+), 13 deletions(-)

diff --git a/src/components/chat/user/index.vue b/src/components/chat/user/index.vue
index 410b389..87d7a4b 100644
--- a/src/components/chat/user/index.vue
+++ b/src/components/chat/user/index.vue
@@ -10,9 +10,8 @@
 							<div
 								v-for="(item, index) in msg.attachList"
 								:key="index"
-								class="flex items-center gap-2 bg-[#e9e9e9] px-2 py-3 rounded-lg w-[220px] relative group"
+								class="flex items-center gap-2 bg-[#e9e9e9] px-2 py-3 rounded-lg w-[220px] relative group cursor-pointer"
 								@click="openAttachPreview(item)"
-								:class="{ 'cursor-pointer': item.type === 'table' }"
 							>
 								<template v-if="item.type === 'file'">
 									<el-image
@@ -29,12 +28,12 @@
 										<div v-if="item.model.type" class="text-info text-sm over-ellipsis w-full">
 											{{ `${item.model.type ?? ''}锛�${item.model.size ?? ''}` }}
 										</div>
-										<!-- <el-tooltip effect="dark" content="涓嬭浇" placement="top">
+										<el-tooltip effect="dark" content="涓嬭浇" placement="top">
 											<span
-												class="group-hover:visible invisible ywifont ywicon-quote absolute right-2"
+												class="group-hover:visible invisible ywifont ywicon-download2 absolute right-2 cursor-pointer"
 												@click.stop="downloadAttach(item)"
 											></span>
-										</el-tooltip> -->
+										</el-tooltip>
 									</div>
 								</template>
 								<template v-if="item.type === 'metric'">
@@ -45,7 +44,7 @@
 									</div>
 									<el-tooltip effect="dark" content="寮曠敤" placement="top">
 										<span
-											class="group-hover:visible invisible ywifont ywicon-quote absolute right-2"
+											class="group-hover:visible invisible ywifont ywicon-quote absolute right-2 cursor-pointer"
 											@click.stop="quoteAttach(item)"
 										></span>
 									</el-tooltip>
@@ -58,7 +57,7 @@
 									</div>
 									<el-tooltip effect="dark" content="寮曠敤" placement="top">
 										<span
-											class="group-hover:visible invisible ywifont ywicon-quote absolute right-2"
+											class="group-hover:visible invisible ywifont ywicon-quote absolute right-2 cursor-pointer"
 											@click.stop="quoteAttach(item)"
 										></span>
 									</el-tooltip>
@@ -71,8 +70,7 @@
 		</div>
 		<BusinessTablePreview :data="attachPreviewData" v-model="attachPreviewIsShow" />
 
-		<MetricValuesPreview v-model="metricPreviewIsShow" :data="metricPreviewData"/>
-
+		<MetricValuesPreview v-model="metricPreviewIsShow" :data="metricPreviewData" />
 
 		<!-- #endregion -->
 
@@ -144,8 +142,8 @@
 import { Attach } from '../components/playBar/hook/useAttach';
 import MetricValuesPreview from '../components/playBar/metricValues/MetricValuesPreview.vue';
 
-
 import emitter from '/@/utils/mitt';
+import { downloadFileByPost } from '/@/api/file';
 
 const emit = defineEmits<{
 	(event: 'copyMsg', msgObj: ChatMessage): void;
@@ -184,8 +182,9 @@
 const attachPreviewIsShow = ref(false);
 const attachPreviewData = ref<Attach>();
 const openAttachPreview = (item: Attach) => {
-	if (item.type === 'file') return;
-	if (item.type === 'table') {
+	if (item.type === 'file') {
+		openFileContent(item);
+	} else if (item.type === 'table') {
 		attachPreviewIsShow.value = true;
 		attachPreviewData.value = item;
 	} else if (item.type === 'metric') {
@@ -201,10 +200,32 @@
 };
 //#endregion
 
+//#region ====================== 鏌ョ湅鏂囦欢鏂囨湰鍐呭 ======================
+const openFileContent = (item: Attach) => {
+	emitter.emit('setFileContent', {
+		title: item.title,
+		content: item.model?.file_content ?? '',
+	});
+};
+//#endregion
+
 //#region ====================== 闄勪欢涓嬭浇 ======================
-const downloadAttach = (item: Attach) => {
+const downloadAttach = async (item: Attach) => {
 	const fileId = item.model?.file_id;
 	if (!fileId) return;
+
+	const res = await downloadFileByPost({
+		file_id: fileId,
+	});
+
+	const url = window.URL.createObjectURL(res as any);
+	const link = document.createElement('a');
+	link.href = url;
+	link.download = item.title || 'download'; // Use item title or fallback name
+	document.body.appendChild(link);
+	link.click();
+	document.body.removeChild(link);
+	window.URL.revokeObjectURL(url);
 };
 //#endregion
 </script>

--
Gitblit v1.9.3