From a1d7e81859f554f3a53680cc35f0f49bf1f77098 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期四, 14 五月 2026 14:37:02 +0800
Subject: [PATCH] 导入项目
---
src/views/ai/chat/index/components/message/MessageKnowledge.vue | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 104 insertions(+), 0 deletions(-)
diff --git a/src/views/ai/chat/index/components/message/MessageKnowledge.vue b/src/views/ai/chat/index/components/message/MessageKnowledge.vue
new file mode 100644
index 0000000..5ff3f63
--- /dev/null
+++ b/src/views/ai/chat/index/components/message/MessageKnowledge.vue
@@ -0,0 +1,104 @@
+<!-- 鐭ヨ瘑寮曠敤缁勪欢 -->
+<template>
+ <!-- 鐭ヨ瘑寮曠敤鍒楄〃 -->
+ <div v-if="segments && segments.length > 0" class="mt-10px p-10px rounded-8px bg-[#f5f5f5]">
+ <div class="text-14px text-[#666] mb-8px flex items-center">
+ <Icon icon="ep:document" class="mr-5px" /> 鐭ヨ瘑寮曠敤
+ </div>
+ <div class="flex flex-wrap gap-8px">
+ <div
+ v-for="(doc, index) in documentList"
+ :key="index"
+ class="p-8px px-12px bg-white rounded-6px cursor-pointer transition-all hover:bg-[#e6f4ff]"
+ @click="handleClick(doc)"
+ >
+ <div class="text-14px text-[#333] mb-4px">
+ {{ doc.title }}
+ <span class="text-12px text-[#999] ml-4px">锛坽{ doc.segments.length }} 鏉★級</span>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <!-- 鐭ヨ瘑寮曠敤璇︽儏寮圭獥 -->
+ <el-popover
+ v-model:visible="dialogVisible"
+ :width="600"
+ trigger="click"
+ placement="top-start"
+ :offset="55"
+ popper-class="knowledge-popover"
+ >
+ <template #reference>
+ <div ref="documentRef"></div>
+ </template>
+ <template #default>
+ <div class="text-16px font-bold mb-12px">{{ document?.title }}</div>
+ <div class="max-h-[60vh] overflow-y-auto">
+ <div
+ v-for="(segment, index) in document?.segments"
+ :key="index"
+ class="p-12px border-b-solid border-b-[#eee] last:border-b-0"
+ >
+ <div
+ class="block mb-8px px-8px py-2px bg-[#f5f5f5] rounded-4px text-12px text-[#666] w-fit"
+ >
+ 鍒嗘 {{ segment.id }}
+ </div>
+ <div class="text-14px leading-[1.6] text-[#333] mt-[10px]">
+ {{ segment.content }}
+ </div>
+ </div>
+ </div>
+ </template>
+ </el-popover>
+</template>
+
+<script setup lang="ts">
+const props = defineProps<{
+ segments: {
+ id: number
+ documentId: number
+ documentName: string
+ content: string
+ }[]
+}>()
+
+const document = ref<{
+ id: number
+ title: string
+ segments: {
+ id: number
+ content: string
+ }[]
+} | null>(null) // 鐭ヨ瘑搴撴枃妗e垪琛�
+const dialogVisible = ref(false) // 鐭ヨ瘑寮曠敤璇︽儏寮圭獥
+const documentRef = ref<HTMLElement>() // 鐭ヨ瘑寮曠敤璇︽儏寮圭獥 Ref
+
+/** 鎸夌収 document 鑱氬悎 segments */
+const documentList = computed(() => {
+ if (!props.segments) return []
+
+ const docMap = new Map()
+ props.segments.forEach((segment) => {
+ if (!docMap.has(segment.documentId)) {
+ docMap.set(segment.documentId, {
+ id: segment.documentId,
+ title: segment.documentName,
+ segments: []
+ })
+ }
+ docMap.get(segment.documentId).segments.push({
+ id: segment.id,
+ content: segment.content
+ })
+ })
+ return Array.from(docMap.values())
+})
+
+/** 鐐瑰嚮 document 澶勭悊 */
+const handleClick = (doc: any) => {
+ document.value = doc
+ dialogVisible.value = true
+}
+</script>
--
Gitblit v1.8.0