@touchvue/chat 1.0.0-beta.51 → 1.0.0-beta.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +70 -70
- package/es/node_modules/.pnpm/{dompurify@3.4.3 → dompurify@3.3.0}/node_modules/dompurify/dist/purify.es.mjs +143 -299
- package/es/node_modules/.pnpm/dompurify@3.3.0/node_modules/dompurify/dist/purify.es.mjs.map +1 -0
- package/es/package.json.css +1 -1
- package/es/package.json.mjs +1 -1
- package/es/packages/components/resolver.mjs.map +1 -1
- package/es/packages/components/touchchat/component/AiRobot/HelloChat.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/AiRobot/letter.vue.mjs +1 -1
- package/es/packages/components/touchchat/component/AiRobot/letter.vue2.mjs +9 -9
- package/es/packages/components/touchchat/component/AiRobot/letter.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/FileContent.vue2.mjs +3 -3
- package/es/packages/components/touchchat/component/FileContent.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/FileView.vue2.mjs +2 -2
- package/es/packages/components/touchchat/component/FileView.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/HelloChat.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/ImageFile.vue2.mjs +6 -6
- package/es/packages/components/touchchat/component/ImageFile.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/ImageView.vue2.mjs +1 -1
- package/es/packages/components/touchchat/component/ImageView.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/LinkView.vue2.mjs +4 -4
- package/es/packages/components/touchchat/component/LinkView.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/MarkLayer.vue2.mjs +1 -1
- package/es/packages/components/touchchat/component/MarkLayer.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/ModuleSelect.vue2.mjs +2 -2
- package/es/packages/components/touchchat/component/ModuleSelect.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/PDFFile.vue2.mjs +10 -10
- package/es/packages/components/touchchat/component/PDFFile.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/QuoteContent.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/RealtimeVoice.vue2.mjs +1 -1
- package/es/packages/components/touchchat/component/RealtimeVoice.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/UploadView.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/VideoFile.vue.mjs +1 -1
- package/es/packages/components/touchchat/component/VideoFile.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/AgentsView.vue2.mjs +1 -1
- package/es/packages/components/touchchat/src/AiChat/AgentsView.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/AiMessage.vue2.mjs +30 -30
- package/es/packages/components/touchchat/src/AiChat/AiMessage.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/Chat/scriptMatcher.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/Chat/types.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/Chat/useChat.mjs +6 -0
- package/es/packages/components/touchchat/src/AiChat/Chat/useChat.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/Chat/useCopy.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/Chat/useMessageRender.mjs +1 -1
- package/es/packages/components/touchchat/src/AiChat/Chat/useMessageRender.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/Chat/useSSE.mjs +93 -4
- package/es/packages/components/touchchat/src/AiChat/Chat/useSSE.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs +5 -5
- package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/HistoryList.vue2.mjs +1 -1
- package/es/packages/components/touchchat/src/AiChat/HistoryList.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/HistorySidebar.vue2.mjs +3 -3
- package/es/packages/components/touchchat/src/AiChat/HistorySidebar.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/MessageActions.vue2.mjs +11 -11
- package/es/packages/components/touchchat/src/AiChat/MessageActions.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/SiderBarView.vue2.mjs +3 -3
- package/es/packages/components/touchchat/src/AiChat/SiderBarView.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/TouchAgent.vue2.mjs +1 -1
- package/es/packages/components/touchchat/src/AiChat/TouchChat.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/TouchHistory.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/UserMessage.vue2.mjs +16 -16
- package/es/packages/components/touchchat/src/AiChat/UserMessage.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/index.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/utils/a2aService.mjs.map +1 -1
- package/es/packages/components/touchchat/utils/fetchStream.mjs.map +1 -1
- package/es/packages/components/touchchat/utils/markdown.mjs +1 -1
- package/lib/node_modules/.pnpm/{dompurify@3.4.3 → dompurify@3.3.0}/node_modules/dompurify/dist/purify.es.js +143 -299
- package/lib/node_modules/.pnpm/dompurify@3.3.0/node_modules/dompurify/dist/purify.es.js.map +1 -0
- package/lib/package.json.css +1 -1
- package/lib/package.json.js +1 -1
- package/lib/packages/components/resolver.js.map +1 -1
- package/lib/packages/components/touchchat/component/AiRobot/HelloChat.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/AiRobot/letter.vue.js +1 -1
- package/lib/packages/components/touchchat/component/AiRobot/letter.vue2.js +9 -9
- package/lib/packages/components/touchchat/component/AiRobot/letter.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/FileContent.vue2.js +3 -3
- package/lib/packages/components/touchchat/component/FileContent.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/FileView.vue2.js +2 -2
- package/lib/packages/components/touchchat/component/FileView.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/HelloChat.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/ImageFile.vue2.js +6 -6
- package/lib/packages/components/touchchat/component/ImageFile.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/ImageView.vue2.js +1 -1
- package/lib/packages/components/touchchat/component/ImageView.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/LinkView.vue2.js +4 -4
- package/lib/packages/components/touchchat/component/LinkView.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/MarkLayer.vue2.js +1 -1
- package/lib/packages/components/touchchat/component/MarkLayer.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/ModuleSelect.vue2.js +2 -2
- package/lib/packages/components/touchchat/component/ModuleSelect.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/PDFFile.vue2.js +10 -10
- package/lib/packages/components/touchchat/component/PDFFile.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/QuoteContent.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/RealtimeVoice.vue2.js +1 -1
- package/lib/packages/components/touchchat/component/RealtimeVoice.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/UploadView.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/VideoFile.vue.js +1 -1
- package/lib/packages/components/touchchat/component/VideoFile.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/AgentsView.vue2.js +1 -1
- package/lib/packages/components/touchchat/src/AiChat/AgentsView.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/AiMessage.vue2.js +30 -30
- package/lib/packages/components/touchchat/src/AiChat/AiMessage.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/Chat/scriptMatcher.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/Chat/types.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/Chat/useChat.js +6 -0
- package/lib/packages/components/touchchat/src/AiChat/Chat/useChat.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/Chat/useCopy.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/Chat/useMessageRender.js +1 -1
- package/lib/packages/components/touchchat/src/AiChat/Chat/useMessageRender.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/Chat/useSSE.js +93 -4
- package/lib/packages/components/touchchat/src/AiChat/Chat/useSSE.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js +5 -5
- package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/HistoryList.vue2.js +1 -1
- package/lib/packages/components/touchchat/src/AiChat/HistoryList.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/HistorySidebar.vue2.js +3 -3
- package/lib/packages/components/touchchat/src/AiChat/HistorySidebar.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/MessageActions.vue2.js +11 -11
- package/lib/packages/components/touchchat/src/AiChat/MessageActions.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/SiderBarView.vue2.js +3 -3
- package/lib/packages/components/touchchat/src/AiChat/SiderBarView.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/TouchAgent.vue2.js +1 -1
- package/lib/packages/components/touchchat/src/AiChat/TouchChat.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/TouchHistory.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/UserMessage.vue2.js +16 -16
- package/lib/packages/components/touchchat/src/AiChat/UserMessage.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/index.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/utils/a2aService.js.map +1 -1
- package/lib/packages/components/touchchat/utils/fetchStream.js.map +1 -1
- package/lib/packages/components/touchchat/utils/markdown.js +1 -1
- package/package.json +83 -83
- package/es/node_modules/.pnpm/dompurify@3.4.3/node_modules/dompurify/dist/purify.es.mjs.map +0 -1
- package/lib/node_modules/.pnpm/dompurify@3.4.3/node_modules/dompurify/dist/purify.es.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RealtimeVoice.vue2.mjs","sources":["../../../../../../packages/components/touchchat/component/RealtimeVoice.vue"],"sourcesContent":["<template>\
|
|
1
|
+
{"version":3,"file":"RealtimeVoice.vue2.mjs","sources":["../../../../../../packages/components/touchchat/component/RealtimeVoice.vue"],"sourcesContent":["<template>\n\t<div>\n\t\t<button class=\"touchchat-edit-voice touchchat-edit-button\" @click=\"startRealtimeVoice\">\n\t\t\t<!-- 未实时语音前 -->\n\t\t\t<div v-if=\"!dialogVisible\" class=\"touchchat-edit-voice-icon\"></div>\n\t\t\t<!-- 实时语音中 -->\n\n\t\t\t<svg v-else xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n\t\t\t\t<path class=\"touchchat-voice-bar-1\" d=\"M10 2.57617V17.4247\" stroke=\"#0077FA\" stroke-width=\"1.2\" stroke-linecap=\"square\" />\n\t\t\t\t<path class=\"touchchat-voice-bar-2\" d=\"M14.167 5.90869V14.0905\" stroke=\"#0077FA\" stroke-opacity=\"0.8\" stroke-width=\"1.2\" stroke-linecap=\"square\" />\n\t\t\t\t<path class=\"touchchat-voice-bar-3\" d=\"M1.66699 8.40869V11.5905\" stroke=\"#0077FA\" stroke-opacity=\"0.5\" stroke-width=\"1.2\" stroke-linecap=\"square\" />\n\t\t\t\t<path class=\"touchchat-voice-bar-4\" d=\"M18.333 8.40869V11.5905\" stroke=\"#0077FA\" stroke-opacity=\"0.5\" stroke-width=\"1.2\" stroke-linecap=\"square\" />\n\t\t\t\t<path class=\"touchchat-voice-bar-5\" d=\"M5.83301 5.90869V14.0905\" stroke=\"#0077FA\" stroke-opacity=\"0.8\" stroke-width=\"1.2\" stroke-linecap=\"square\" />\n\t\t\t</svg>\n\t\t\t<div class=\"touchchat-edit-tooltip\">语音录入</div>\n\t\t</button>\n\t\t<div v-if=\"dialogVisible\" class=\"dialog-overlay\">\n\t\t\t<div class=\"dialog\">\n\t\t\t\t<div class=\"dialog-header\">\n\t\t\t\t\t<h3>已进入实时语音</h3>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"dialog-body\">\n\t\t\t\t\t<p>正在进行实时语音通话...</p>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"dialog-footer\">\n\t\t\t\t\t<button class=\"hang-up-button\" @click=\"hangUp\">挂断</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<!-- 显示语音转文字的结果 -->\n\t\t<!-- <div v-if=\"transcription\" class=\"transcription-result\">\n\t\t\t<h4>语音转文字结果:</h4>\n\t\t\t<p>{{ transcription }}</p>\n\t\t</div> -->\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { showToast } from '../utils/tools'\n\nconst emit = defineEmits(['startRealtimeVoice', 'transcription'])\n\n// 控制弹窗显示状态\nconst dialogVisible = ref(false)\n// 存储本地媒体流\nlet localStream: MediaStream | null = null\n// 存储语音转文字的结果\nconst transcription = ref('')\n// 语音识别实例 SpeechRecognition\nlet recognition: any = null\n\n// 开始实时语音\nconst startRealtimeVoice = async () => {\n\temit('startRealtimeVoice')\n\ttry {\n\t\t// 获取麦克风权限\n\t\tlocalStream = await navigator.mediaDevices.getUserMedia({ audio: true })\n\t\tdialogVisible.value = true\n\t\ttranscription.value = ''\n\n\t\t// 初始化语音识别\n\t\tconst SpeechRecognition = (window as any).SpeechRecognition || (window as any).webkitSpeechRecognition\n\t\trecognition = new SpeechRecognition()\n\t\trecognition.lang = 'zh-CN'\n\t\trecognition.continuous = true\n\t\trecognition.interimResults = true\n\n\t\t// SpeechRecognitionEvent\n\t\trecognition.onresult = (event: any) => {\n\t\t\tlet finalTranscript = ''\n\t\t\tlet interimTranscript = ''\n\n\t\t\t// 分别处理最终结果和临时结果\n\t\t\tfor (let i = event.resultIndex; i < event.results.length; ++i) {\n\t\t\t\tconst transcript = event.results[i][0].transcript\n\t\t\t\tif (event.results[i].isFinal) {\n\t\t\t\t\tfinalTranscript += transcript\n\t\t\t\t} else {\n\t\t\t\t\tinterimTranscript += transcript\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// 只有最终结果才添加到 transcription.value 中\n\t\t\tif (finalTranscript) {\n\t\t\t\ttranscription.value += finalTranscript\n\t\t\t}\n\n\t\t\t// 临时结果显示(可用于实时预览)\n\t\t\tconst fullText = transcription.value + interimTranscript\n\n\t\t\temit('transcription', fullText)\n\t\t}\n\n\t\t// SpeechRecognitionEvent\n\t\trecognition.onerror = (event: any) => {\n\t\t\tconsole.error('语音识别出错:', event.error)\n\t\t\tshowToast('语音识别出错,请重试', 'error')\n\t\t\thangUp()\n\t\t}\n\n\t\trecognition.start()\n\t\tconsole.log('已成功进入实时语音')\n\t} catch (error) {\n\t\tconsole.error('获取麦克风权限失败:', error)\n\t\tconsole.error('获取麦克风权限失败,请检查设置')\n\t\tshowToast('获取麦克风权限失败', 'error')\n\t}\n}\n\n// 挂断语音\nconst hangUp = () => {\n\tif (localStream) {\n\t\t// 停止所有轨道\n\t\tlocalStream.getTracks().forEach(track => track.stop())\n\t\tlocalStream = null\n\t}\n\tif (recognition) {\n\t\trecognition.stop()\n\t\t// recognition = null;\n\t}\n\tdialogVisible.value = false\n\t// 清空转录结果\n\t// transcription.value = ''\n\tconsole.log('语音通话已挂断')\n}\n</script>\n"],"names":["_createElementBlock","_createElementVNode","_createCommentVNode","_Fragment"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UploadView.vue2.mjs","sources":["../../../../../../packages/components/touchchat/component/UploadView.vue"],"sourcesContent":["<template>\r\n\t<div class=\"upload-view\">\r\n\t\t<!-- <button class=\"upload-button\" @click=\"triggerFileInput\">点击选择文件</button> -->\r\n\t\t<div @click=\"triggerFileInput\">\r\n\t\t\t<slot></slot>\r\n\t\t</div>\r\n\t\t<input ref=\"fileInput\" type=\"file\" class=\"file-input\" style=\"display: none\" multiple @change=\"handleFileChange\" />\r\n\t</div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, inject } from 'vue'\r\nimport { showToast } from '../utils/tools'\r\nimport type { FileItem } from '../src/AiChat/Chat/types'\r\n\r\ntype UploadActionFn = (file: File, onProgress: (percent: number) => void) => Promise<any>\r\n\r\nconst uploadAction = inject<UploadActionFn | null>('uploadAction', null)\r\n\r\nconst props = defineProps<{\r\n\tfileList: FileItem[]\r\n}>()\r\n\r\nconst emit = defineEmits<{\r\n\t(e: 'upload-file', value: FileItem[]): void\r\n}>()\r\n\r\nconst fileInput = ref<HTMLInputElement | null>(null)\r\nconst fileInfos = ref<FileItem[]>(props.fileList || [])\r\nconst allowedTypes = inject<string[]>('allowedTypes', [])\r\n// ['doc', 'docx','word','png']\r\nconst types = ref<string[]>(allowedTypes || [])\r\n\r\n// 触发文件选择框\r\nconst triggerFileInput = () => {\r\n\tif (fileInput.value) {\r\n\t\tfileInput.value.click()\r\n\t}\r\n}\r\n\r\n// 处理文件选择\r\nconst handleFileChange = (event: Event) => {\r\n\tconst input = event.target as HTMLInputElement\r\n\tif (input.files && input.files.length > 0) {\r\n\t\tfor (let i = 0; i < input.files.length; i++) {\r\n\t\t\tconst file = input.files[i]\r\n\t\t\t// 检查是否已存在相同文件(同名同大小)\r\n\t\t\tconst exists = fileInfos.value.some(f => f.name === file.name && f.fileSize === formatFileSize(file.size))\r\n\t\t\tif (exists) {\r\n\t\t\t\tshowToast(`文件\"${file.name}\"已存在`, 'info', 3000)\r\n\t\t\t\tcontinue\r\n\t\t\t}\r\n\t\t\t// 检查文件类型是否允许\r\n\t\t\tif (!isFileTypeAllowed(file) && types.value.length > 0) {\r\n\t\t\t\tshowToast(`文件类型${file.type}不允许上传,请上传${types.value.join('、')}类型文件`, 'info', 3000)\r\n\t\t\t\tcontinue // 跳过不允许的文件类型\r\n\t\t\t}\r\n\t\t\tif (file.type.startsWith('image/')) {\r\n\t\t\t\tconst reader = new FileReader()\r\n\t\t\t\treader.onload = e => {\r\n\t\t\t\t\tconst base64 = e.target?.result as string\r\n\t\t\t\t\tfileInfos.value.push({\r\n\t\t\t\t\t\tfile,\r\n\t\t\t\t\t\tisUploading: false,\r\n\t\t\t\t\t\tuploadProgress: 0,\r\n\t\t\t\t\t\tuploadSuccess: false,\r\n\t\t\t\t\t\tuploadError: false,\r\n\t\t\t\t\t\tfileSize: formatFileSize(file.size),\r\n\t\t\t\t\t\tfileType: file.type,\r\n\t\t\t\t\t\tid: file.lastModified.toString(),\r\n\t\t\t\t\t\tname: file.name,\r\n\t\t\t\t\t\tbase64, // 存储 Base64 数据\r\n\t\t\t\t\t\tlastModified: file.lastModified\r\n\t\t\t\t\t})\r\n\t\t\t\t\tuploadFile(fileInfos.value.length - 1)\r\n\t\t\t\t}\r\n\t\t\t\treader.readAsDataURL(file)\r\n\t\t\t} else {\r\n\t\t\t\tfileInfos.value.push({\r\n\t\t\t\t\tfile,\r\n\t\t\t\t\tisUploading: false,\r\n\t\t\t\t\tuploadProgress: 0,\r\n\t\t\t\t\tuploadSuccess: false,\r\n\t\t\t\t\tuploadError: false,\r\n\t\t\t\t\tfileSize: formatFileSize(file.size),\r\n\t\t\t\t\tfileType: file.type,\r\n\t\t\t\t\tid: file.lastModified.toString(),\r\n\t\t\t\t\tname: file.name,\r\n\t\t\t\t\tlastModified: file.lastModified\r\n\t\t\t\t})\r\n\t\t\t\tuploadFile(fileInfos.value.length - 1)\r\n\t\t\t}\r\n\t\t}\r\n\t\t// 清空 input value,允许重复选择同一文件\r\n\t\tif (fileInput.value) {\r\n\t\t\tfileInput.value.value = ''\r\n\t\t}\r\n\t}\r\n}\r\n// 检查文件类型是否允许\r\nconst isFileTypeAllowed = (file: File): boolean => {\r\n\tconst fileExtension = file.name.split('.').pop()?.toLowerCase()\r\n\treturn types.value.includes(fileExtension || '')\r\n}\r\n// 文件上传\r\nconst uploadFile = async (index: number, type?: string) => {\r\n\tconst fileInfo = fileInfos.value[index]\r\n\tif (!fileInfo || !fileInfo.file) return\r\n\r\n\tfileInfo.isUploading = true\r\n\tfileInfo.uploadSuccess = false\r\n\tfileInfo.uploadError = false\r\n\tfileInfo.uploadProgress = 0\r\n\tfileInfo.fileSize = formatFileSize(fileInfo.file.size)\r\n\tfileInfo.fileType = fileInfo.file.type\r\n\tfileInfo.id = fileInfo.file.lastModified.toString()\r\n\tfileInfo.name = fileInfo.file.name\r\n\r\n\tif (type) return\r\n\r\n\tif (uploadAction) {\r\n\t\t// 真实上传\r\n\t\tlet progressCalled = false\r\n\t\t// 保底进度:如果 onProgress 未被调用(如用 fetch),按时间递进补进度\r\n\t\tconst progressTimer = setInterval(() => {\r\n\t\t\tif (progressCalled) return\r\n\t\t\tif (fileInfo.uploadProgress !== undefined && fileInfo.uploadProgress < 90) {\r\n\t\t\t\tfileInfo.uploadProgress += 10\r\n\t\t\t\temit('upload-file', fileInfos.value)\r\n\t\t\t}\r\n\t\t}, 100)\r\n\t\ttry {\r\n\t\t\tconst res = await uploadAction(fileInfo.file, percent => {\r\n\t\t\t\tprogressCalled = true\r\n\t\t\t\tfileInfo.uploadProgress = percent\r\n\t\t\t\temit('upload-file', fileInfos.value)\r\n\t\t\t})\r\n\t\t\tclearInterval(progressTimer)\r\n\t\t\tfileInfo.uploadSuccess = true\r\n\t\t\tfileInfo.uploadProgress = 100\r\n\t\t\tfileInfo.url = res?.url || res?.data?.url\r\n\t\t\tfileInfo.fileId = res?.id || res?.data?.id\r\n\t\t} catch {\r\n\t\t\tclearInterval(progressTimer)\r\n\t\t\tfileInfo.uploadError = true\r\n\t\t}\r\n\t\tfileInfo.isUploading = false\r\n\t\temit('upload-file', fileInfos.value)\r\n\t} else {\r\n\t\t// 无 uploadAction 时保持模拟上传(向后兼容)\r\n\t\tconst interval = setInterval(() => {\r\n\t\t\tif (fileInfo.uploadProgress !== undefined) {\r\n\t\t\t\tfileInfo.uploadProgress += 10\r\n\t\t\t}\r\n\t\t\temit('upload-file', fileInfos.value)\r\n\t\t\tif (fileInfo.uploadProgress !== undefined && fileInfo.uploadProgress >= 100) {\r\n\t\t\t\tclearInterval(interval)\r\n\t\t\t\tfileInfo.isUploading = false\r\n\t\t\t\tfileInfo.uploadSuccess = true\r\n\t\t\t}\r\n\t\t}, 100)\r\n\t}\r\n}\r\n\r\n// 格式化文件大小\r\nconst formatFileSize = (bytes: number) => {\r\n\tif (bytes === 0) return '0 Bytes'\r\n\tconst k = 1024\r\n\tconst sizes = ['Bytes', 'KB', 'MB', 'GB']\r\n\tconst i = Math.floor(Math.log(bytes) / Math.log(k))\r\n\treturn parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]\r\n}\r\n\r\nconst resetFile = () => {\r\n\tfileInfos.value = []\r\n\tif (fileInput.value) {\r\n\t\tfileInput.value.value = ''\r\n\t}\r\n}\r\ndefineExpose({\r\n\tresetFile,\r\n\tuploadFile\r\n})\r\n</script>\r\n"],"names":["_createElementBlock","_createCommentVNode","_createElementVNode","_renderSlot"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UploadView.vue2.mjs","sources":["../../../../../../packages/components/touchchat/component/UploadView.vue"],"sourcesContent":["<template>\n\t<div class=\"upload-view\">\n\t\t<!-- <button class=\"upload-button\" @click=\"triggerFileInput\">点击选择文件</button> -->\n\t\t<div @click=\"triggerFileInput\">\n\t\t\t<slot></slot>\n\t\t</div>\n\t\t<input ref=\"fileInput\" type=\"file\" class=\"file-input\" style=\"display: none\" multiple @change=\"handleFileChange\" />\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, inject } from 'vue'\nimport { showToast } from '../utils/tools'\nimport type { FileItem } from '../src/AiChat/Chat/types'\n\ntype UploadActionFn = (file: File, onProgress: (percent: number) => void) => Promise<any>\n\nconst uploadAction = inject<UploadActionFn | null>('uploadAction', null)\n\nconst props = defineProps<{\n\tfileList: FileItem[]\n}>()\n\nconst emit = defineEmits<{\n\t(e: 'upload-file', value: FileItem[]): void\n}>()\n\nconst fileInput = ref<HTMLInputElement | null>(null)\nconst fileInfos = ref<FileItem[]>(props.fileList || [])\nconst allowedTypes = inject<string[]>('allowedTypes', [])\n// ['doc', 'docx','word','png']\nconst types = ref<string[]>(allowedTypes || [])\n\n// 触发文件选择框\nconst triggerFileInput = () => {\n\tif (fileInput.value) {\n\t\tfileInput.value.click()\n\t}\n}\n\n// 处理文件选择\nconst handleFileChange = (event: Event) => {\n\tconst input = event.target as HTMLInputElement\n\tif (input.files && input.files.length > 0) {\n\t\tfor (let i = 0; i < input.files.length; i++) {\n\t\t\tconst file = input.files[i]\n\t\t\t// 检查是否已存在相同文件(同名同大小)\n\t\t\tconst exists = fileInfos.value.some(f => f.name === file.name && f.fileSize === formatFileSize(file.size))\n\t\t\tif (exists) {\n\t\t\t\tshowToast(`文件\"${file.name}\"已存在`, 'info', 3000)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// 检查文件类型是否允许\n\t\t\tif (!isFileTypeAllowed(file) && types.value.length > 0) {\n\t\t\t\tshowToast(`文件类型${file.type}不允许上传,请上传${types.value.join('、')}类型文件`, 'info', 3000)\n\t\t\t\tcontinue // 跳过不允许的文件类型\n\t\t\t}\n\t\t\tif (file.type.startsWith('image/')) {\n\t\t\t\tconst reader = new FileReader()\n\t\t\t\treader.onload = e => {\n\t\t\t\t\tconst base64 = e.target?.result as string\n\t\t\t\t\tfileInfos.value.push({\n\t\t\t\t\t\tfile,\n\t\t\t\t\t\tisUploading: false,\n\t\t\t\t\t\tuploadProgress: 0,\n\t\t\t\t\t\tuploadSuccess: false,\n\t\t\t\t\t\tuploadError: false,\n\t\t\t\t\t\tfileSize: formatFileSize(file.size),\n\t\t\t\t\t\tfileType: file.type,\n\t\t\t\t\t\tid: file.lastModified.toString(),\n\t\t\t\t\t\tname: file.name,\n\t\t\t\t\t\tbase64, // 存储 Base64 数据\n\t\t\t\t\t\tlastModified: file.lastModified\n\t\t\t\t\t})\n\t\t\t\t\tuploadFile(fileInfos.value.length - 1)\n\t\t\t\t}\n\t\t\t\treader.readAsDataURL(file)\n\t\t\t} else {\n\t\t\t\tfileInfos.value.push({\n\t\t\t\t\tfile,\n\t\t\t\t\tisUploading: false,\n\t\t\t\t\tuploadProgress: 0,\n\t\t\t\t\tuploadSuccess: false,\n\t\t\t\t\tuploadError: false,\n\t\t\t\t\tfileSize: formatFileSize(file.size),\n\t\t\t\t\tfileType: file.type,\n\t\t\t\t\tid: file.lastModified.toString(),\n\t\t\t\t\tname: file.name,\n\t\t\t\t\tlastModified: file.lastModified\n\t\t\t\t})\n\t\t\t\tuploadFile(fileInfos.value.length - 1)\n\t\t\t}\n\t\t}\n\t\t// 清空 input value,允许重复选择同一文件\n\t\tif (fileInput.value) {\n\t\t\tfileInput.value.value = ''\n\t\t}\n\t}\n}\n// 检查文件类型是否允许\nconst isFileTypeAllowed = (file: File): boolean => {\n\tconst fileExtension = file.name.split('.').pop()?.toLowerCase()\n\treturn types.value.includes(fileExtension || '')\n}\n// 文件上传\nconst uploadFile = async (index: number, type?: string) => {\n\tconst fileInfo = fileInfos.value[index]\n\tif (!fileInfo || !fileInfo.file) return\n\n\tfileInfo.isUploading = true\n\tfileInfo.uploadSuccess = false\n\tfileInfo.uploadError = false\n\tfileInfo.uploadProgress = 0\n\tfileInfo.fileSize = formatFileSize(fileInfo.file.size)\n\tfileInfo.fileType = fileInfo.file.type\n\tfileInfo.id = fileInfo.file.lastModified.toString()\n\tfileInfo.name = fileInfo.file.name\n\n\tif (type) return\n\n\tif (uploadAction) {\n\t\t// 真实上传\n\t\tlet progressCalled = false\n\t\t// 保底进度:如果 onProgress 未被调用(如用 fetch),按时间递进补进度\n\t\tconst progressTimer = setInterval(() => {\n\t\t\tif (progressCalled) return\n\t\t\tif (fileInfo.uploadProgress !== undefined && fileInfo.uploadProgress < 90) {\n\t\t\t\tfileInfo.uploadProgress += 10\n\t\t\t\temit('upload-file', fileInfos.value)\n\t\t\t}\n\t\t}, 100)\n\t\ttry {\n\t\t\tconst res = await uploadAction(fileInfo.file, percent => {\n\t\t\t\tprogressCalled = true\n\t\t\t\tfileInfo.uploadProgress = percent\n\t\t\t\temit('upload-file', fileInfos.value)\n\t\t\t})\n\t\t\tclearInterval(progressTimer)\n\t\t\tfileInfo.uploadSuccess = true\n\t\t\tfileInfo.uploadProgress = 100\n\t\t\tfileInfo.url = res?.url || res?.data?.url\n\t\t\tfileInfo.fileId = res?.id || res?.data?.id\n\t\t} catch {\n\t\t\tclearInterval(progressTimer)\n\t\t\tfileInfo.uploadError = true\n\t\t}\n\t\tfileInfo.isUploading = false\n\t\temit('upload-file', fileInfos.value)\n\t} else {\n\t\t// 无 uploadAction 时保持模拟上传(向后兼容)\n\t\tconst interval = setInterval(() => {\n\t\t\tif (fileInfo.uploadProgress !== undefined) {\n\t\t\t\tfileInfo.uploadProgress += 10\n\t\t\t}\n\t\t\temit('upload-file', fileInfos.value)\n\t\t\tif (fileInfo.uploadProgress !== undefined && fileInfo.uploadProgress >= 100) {\n\t\t\t\tclearInterval(interval)\n\t\t\t\tfileInfo.isUploading = false\n\t\t\t\tfileInfo.uploadSuccess = true\n\t\t\t}\n\t\t}, 100)\n\t}\n}\n\n// 格式化文件大小\nconst formatFileSize = (bytes: number) => {\n\tif (bytes === 0) return '0 Bytes'\n\tconst k = 1024\n\tconst sizes = ['Bytes', 'KB', 'MB', 'GB']\n\tconst i = Math.floor(Math.log(bytes) / Math.log(k))\n\treturn parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]\n}\n\nconst resetFile = () => {\n\tfileInfos.value = []\n\tif (fileInput.value) {\n\t\tfileInput.value.value = ''\n\t}\n}\ndefineExpose({\n\tresetFile,\n\tuploadFile\n})\n</script>\n"],"names":["_createElementBlock","_createCommentVNode","_createElementVNode","_renderSlot"],"mappings":";;;;;;;;;;AAiBA,IAAM,MAAA,YAAA,GAAe,MAA8B,CAAA,cAAA,EAAgB,IAAI,CAAA,CAAA;AAEvE,IAAA,MAAM,KAAQ,GAAA,OAAA,CAAA;AAId,IAAA,MAAM,IAAO,GAAA,MAAA,CAAA;AAIb,IAAM,MAAA,SAAA,GAAY,IAA6B,IAAI,CAAA,CAAA;AACnD,IAAA,MAAM,SAAY,GAAA,GAAA,CAAgB,KAAM,CAAA,QAAA,IAAY,EAAE,CAAA,CAAA;AACtD,IAAA,MAAM,YAAe,GAAA,MAAA,CAAiB,cAAgB,EAAA,EAAE,CAAA,CAAA;AAExD,IAAA,MAAM,KAAQ,GAAA,GAAA,CAAc,YAAgB,IAAA,EAAE,CAAA,CAAA;AAG9C,IAAA,MAAM,mBAAmB,MAAM;AAC9B,MAAA,IAAI,UAAU,KAAO,EAAA;AACpB,QAAA,SAAA,CAAU,MAAM,KAAM,EAAA,CAAA;AAAA,OACvB;AAAA,KACD,CAAA;AAGA,IAAM,MAAA,gBAAA,GAAmB,CAAC,KAAiB,KAAA;AAC1C,MAAA,MAAM,QAAQ,KAAM,CAAA,MAAA,CAAA;AACpB,MAAA,IAAI,KAAM,CAAA,KAAA,IAAS,KAAM,CAAA,KAAA,CAAM,SAAS,CAAG,EAAA;AAC1C,QAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,KAAM,CAAA,KAAA,CAAM,QAAQ,CAAK,EAAA,EAAA;AAC5C,UAAM,MAAA,IAAA,GAAO,KAAM,CAAA,KAAA,CAAM,CAAC,CAAA,CAAA;AAE1B,UAAA,MAAM,MAAS,GAAA,SAAA,CAAU,KAAM,CAAA,IAAA,CAAK,OAAK,CAAE,CAAA,IAAA,KAAS,IAAK,CAAA,IAAA,IAAQ,CAAE,CAAA,QAAA,KAAa,cAAe,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AACzG,UAAA,IAAI,MAAQ,EAAA;AACX,YAAA,SAAA,CAAU,CAAM,aAAA,EAAA,IAAA,CAAK,IAAY,CAAA,mBAAA,CAAA,EAAA,MAAA,EAAQ,GAAI,CAAA,CAAA;AAC7C,YAAA,SAAA;AAAA,WACD;AAEA,UAAA,IAAI,CAAC,iBAAkB,CAAA,IAAI,KAAK,KAAM,CAAA,KAAA,CAAM,SAAS,CAAG,EAAA;AACvD,YAAU,SAAA,CAAA,CAAA,wBAAA,EAAO,KAAK,IAAgB,CAAA,sDAAA,EAAA,KAAA,CAAM,MAAM,IAAK,CAAA,QAAG,CAAS,CAAA,wBAAA,CAAA,EAAA,MAAA,EAAQ,GAAI,CAAA,CAAA;AAC/E,YAAA,SAAA;AAAA,WACD;AACA,UAAA,IAAI,IAAK,CAAA,IAAA,CAAK,UAAW,CAAA,QAAQ,CAAG,EAAA;AACnC,YAAM,MAAA,MAAA,GAAS,IAAI,UAAW,EAAA,CAAA;AAC9B,YAAA,MAAA,CAAO,SAAS,CAAK,CAAA,KAAA;;AACpB,cAAM,MAAA,MAAA,GAAA,CAAS,EAAE,GAAA,CAAA,CAAA,MAAA,KAAF,IAAU,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,CAAA;AACzB,cAAA,SAAA,CAAU,MAAM,IAAK,CAAA;AAAA,gBACpB,IAAA;AAAA,gBACA,WAAa,EAAA,KAAA;AAAA,gBACb,cAAgB,EAAA,CAAA;AAAA,gBAChB,aAAe,EAAA,KAAA;AAAA,gBACf,WAAa,EAAA,KAAA;AAAA,gBACb,QAAA,EAAU,cAAe,CAAA,IAAA,CAAK,IAAI,CAAA;AAAA,gBAClC,UAAU,IAAK,CAAA,IAAA;AAAA,gBACf,EAAA,EAAI,IAAK,CAAA,YAAA,CAAa,QAAS,EAAA;AAAA,gBAC/B,MAAM,IAAK,CAAA,IAAA;AAAA,gBACX,MAAA;AAAA;AAAA,gBACA,cAAc,IAAK,CAAA,YAAA;AAAA,eACnB,CAAA,CAAA;AACD,cAAW,UAAA,CAAA,SAAA,CAAU,KAAM,CAAA,MAAA,GAAS,CAAC,CAAA,CAAA;AAAA,aACtC,CAAA;AACA,YAAA,MAAA,CAAO,cAAc,IAAI,CAAA,CAAA;AAAA,WACnB,MAAA;AACN,YAAA,SAAA,CAAU,MAAM,IAAK,CAAA;AAAA,cACpB,IAAA;AAAA,cACA,WAAa,EAAA,KAAA;AAAA,cACb,cAAgB,EAAA,CAAA;AAAA,cAChB,aAAe,EAAA,KAAA;AAAA,cACf,WAAa,EAAA,KAAA;AAAA,cACb,QAAA,EAAU,cAAe,CAAA,IAAA,CAAK,IAAI,CAAA;AAAA,cAClC,UAAU,IAAK,CAAA,IAAA;AAAA,cACf,EAAA,EAAI,IAAK,CAAA,YAAA,CAAa,QAAS,EAAA;AAAA,cAC/B,MAAM,IAAK,CAAA,IAAA;AAAA,cACX,cAAc,IAAK,CAAA,YAAA;AAAA,aACnB,CAAA,CAAA;AACD,YAAW,UAAA,CAAA,SAAA,CAAU,KAAM,CAAA,MAAA,GAAS,CAAC,CAAA,CAAA;AAAA,WACtC;AAAA,SACD;AAEA,QAAA,IAAI,UAAU,KAAO,EAAA;AACpB,UAAA,SAAA,CAAU,MAAM,KAAQ,GAAA,EAAA,CAAA;AAAA,SACzB;AAAA,OACD;AAAA,KACD,CAAA;AAEA,IAAM,MAAA,iBAAA,GAAoB,CAAC,IAAwB,KAAA;;AAClD,MAAM,MAAA,aAAA,GAAA,CAAgB,UAAK,IAAK,CAAA,KAAA,CAAM,GAAG,CAAE,CAAA,GAAA,OAArB,IAA4B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAA,EAAA,CAAA;AAClD,MAAA,OAAO,KAAM,CAAA,KAAA,CAAM,QAAS,CAAA,aAAA,IAAiB,EAAE,CAAA,CAAA;AAAA,KAChD,CAAA;AAEA,IAAM,MAAA,UAAA,GAAa,OAAO,KAAA,EAAe,IAAkB,KAAA;;AAC1D,MAAM,MAAA,QAAA,GAAW,SAAU,CAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AACtC,MAAI,IAAA,CAAC,QAAY,IAAA,CAAC,QAAS,CAAA,IAAA;AAAM,QAAA,OAAA;AAEjC,MAAA,QAAA,CAAS,WAAc,GAAA,IAAA,CAAA;AACvB,MAAA,QAAA,CAAS,aAAgB,GAAA,KAAA,CAAA;AACzB,MAAA,QAAA,CAAS,WAAc,GAAA,KAAA,CAAA;AACvB,MAAA,QAAA,CAAS,cAAiB,GAAA,CAAA,CAAA;AAC1B,MAAA,QAAA,CAAS,QAAW,GAAA,cAAA,CAAe,QAAS,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA;AACrD,MAAS,QAAA,CAAA,QAAA,GAAW,SAAS,IAAK,CAAA,IAAA,CAAA;AAClC,MAAA,QAAA,CAAS,EAAK,GAAA,QAAA,CAAS,IAAK,CAAA,YAAA,CAAa,QAAS,EAAA,CAAA;AAClD,MAAS,QAAA,CAAA,IAAA,GAAO,SAAS,IAAK,CAAA,IAAA,CAAA;AAE9B,MAAI,IAAA,IAAA;AAAM,QAAA,OAAA;AAEV,MAAA,IAAI,YAAc,EAAA;AAEjB,QAAA,IAAI,cAAiB,GAAA,KAAA,CAAA;AAErB,QAAM,MAAA,aAAA,GAAgB,YAAY,MAAM;AACvC,UAAI,IAAA,cAAA;AAAgB,YAAA,OAAA;AACpB,UAAA,IAAI,QAAS,CAAA,cAAA,KAAmB,KAAa,CAAA,IAAA,QAAA,CAAS,iBAAiB,EAAI,EAAA;AAC1E,YAAA,QAAA,CAAS,cAAkB,IAAA,EAAA,CAAA;AAC3B,YAAK,IAAA,CAAA,aAAA,EAAe,UAAU,KAAK,CAAA,CAAA;AAAA,WACpC;AAAA,WACE,GAAG,CAAA,CAAA;AACN,QAAI,IAAA;AACH,UAAA,MAAM,GAAM,GAAA,MAAM,YAAa,CAAA,QAAA,CAAS,MAAM,CAAW,OAAA,KAAA;AACxD,YAAiB,cAAA,GAAA,IAAA,CAAA;AACjB,YAAA,QAAA,CAAS,cAAiB,GAAA,OAAA,CAAA;AAC1B,YAAK,IAAA,CAAA,aAAA,EAAe,UAAU,KAAK,CAAA,CAAA;AAAA,WACnC,CAAA,CAAA;AACD,UAAA,aAAA,CAAc,aAAa,CAAA,CAAA;AAC3B,UAAA,QAAA,CAAS,aAAgB,GAAA,IAAA,CAAA;AACzB,UAAA,QAAA,CAAS,cAAiB,GAAA,GAAA,CAAA;AAC1B,UAAA,QAAA,CAAS,GAAM,GAAA,CAAA,GAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAK,GAAO,MAAA,CAAA,EAAA,GAAA,GAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAK,SAAL,IAAW,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,CAAA,CAAA;AACtC,UAAA,QAAA,CAAS,MAAS,GAAA,CAAA,GAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAK,EAAM,MAAA,CAAA,EAAA,GAAA,GAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAK,SAAL,IAAW,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,EAAA,CAAA,CAAA;AAAA,iBACjC,CAAN,EAAA;AACD,UAAA,aAAA,CAAc,aAAa,CAAA,CAAA;AAC3B,UAAA,QAAA,CAAS,WAAc,GAAA,IAAA,CAAA;AAAA,SACxB;AACA,QAAA,QAAA,CAAS,WAAc,GAAA,KAAA,CAAA;AACvB,QAAK,IAAA,CAAA,aAAA,EAAe,UAAU,KAAK,CAAA,CAAA;AAAA,OAC7B,MAAA;AAEN,QAAM,MAAA,QAAA,GAAW,YAAY,MAAM;AAClC,UAAI,IAAA,QAAA,CAAS,mBAAmB,KAAW,CAAA,EAAA;AAC1C,YAAA,QAAA,CAAS,cAAkB,IAAA,EAAA,CAAA;AAAA,WAC5B;AACA,UAAK,IAAA,CAAA,aAAA,EAAe,UAAU,KAAK,CAAA,CAAA;AACnC,UAAA,IAAI,QAAS,CAAA,cAAA,KAAmB,KAAa,CAAA,IAAA,QAAA,CAAS,kBAAkB,GAAK,EAAA;AAC5E,YAAA,aAAA,CAAc,QAAQ,CAAA,CAAA;AACtB,YAAA,QAAA,CAAS,WAAc,GAAA,KAAA,CAAA;AACvB,YAAA,QAAA,CAAS,aAAgB,GAAA,IAAA,CAAA;AAAA,WAC1B;AAAA,WACE,GAAG,CAAA,CAAA;AAAA,OACP;AAAA,KACD,CAAA;AAGA,IAAM,MAAA,cAAA,GAAiB,CAAC,KAAkB,KAAA;AACzC,MAAA,IAAI,KAAU,KAAA,CAAA;AAAG,QAAO,OAAA,SAAA,CAAA;AACxB,MAAA,MAAM,CAAI,GAAA,IAAA,CAAA;AACV,MAAA,MAAM,KAAQ,GAAA,CAAC,OAAS,EAAA,IAAA,EAAM,MAAM,IAAI,CAAA,CAAA;AACxC,MAAM,MAAA,CAAA,GAAI,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,GAAA,CAAI,KAAK,CAAI,GAAA,IAAA,CAAK,GAAI,CAAA,CAAC,CAAC,CAAA,CAAA;AAClD,MAAA,OAAO,UAAY,CAAA,CAAA,KAAA,GAAQ,IAAK,CAAA,GAAA,CAAI,CAAG,EAAA,CAAC,CAAG,EAAA,OAAA,CAAQ,CAAC,CAAC,CAAI,GAAA,GAAA,GAAM,MAAM,CAAC,CAAA,CAAA;AAAA,KACvE,CAAA;AAEA,IAAA,MAAM,YAAY,MAAM;AACvB,MAAA,SAAA,CAAU,QAAQ,EAAC,CAAA;AACnB,MAAA,IAAI,UAAU,KAAO,EAAA;AACpB,QAAA,SAAA,CAAU,MAAM,KAAQ,GAAA,EAAA,CAAA;AAAA,OACzB;AAAA,KACD,CAAA;AACA,IAAa,QAAA,CAAA;AAAA,MACZ,SAAA;AAAA,MACA,UAAA;AAAA,KACA,CAAA,CAAA;;wBArLA,EAAAA,kBAAA,CAMM,OAAA,EAND,KAAA,EAAM,eAAa,EAAA;AAAA,QACvBC,mBAAgF,yGAAA,CAAA;AAAA,QAChFC,kBAEM,CAAA,KAAA,EAAA,EAFA,OAAA,EAAO,kBAAgB,EAAA;AAAA,UAC5BC,UAAA,CAAa,IAAA,CAAA,MAAA,EAAA,SAAA,CAAA;AAAA;QAEdD,kBAAA;AAAA,UAAkH,OAAA;AAAA,UAAA;AAAA,mBAAvG,EAAA,WAAA;AAAA,YAAJ,GAAI,EAAA,SAAA;AAAA,YAAY,IAAK,EAAA,MAAA;AAAA,YAAO,KAAM,EAAA,YAAA;AAAA,YAAa,KAAA,EAAA,EAAqB,SAAA,EAAA,MAAA,EAAA;AAAA,YAAC,QAAA,EAAA,EAAA;AAAA,YAAU,QAAQ,EAAA,gBAAA;AAAA;;;;;;;;;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _sfc_main from './VideoFile.vue2.mjs';
|
|
2
2
|
import _export_sfc from '../../../../_virtual/_plugin-vue_export-helper.mjs';
|
|
3
3
|
|
|
4
|
-
var VideoFile = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
4
|
+
var VideoFile = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-7305b796"], ["__file", "VideoFile.vue"]]);
|
|
5
5
|
|
|
6
6
|
export { VideoFile as default };
|
|
7
7
|
//# sourceMappingURL=VideoFile.vue.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoFile.vue2.mjs","sources":["../../../../../../packages/components/touchchat/component/VideoFile.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({ name: 'VideoFile' });\n</script>\n<template>\
|
|
1
|
+
{"version":3,"file":"VideoFile.vue2.mjs","sources":["../../../../../../packages/components/touchchat/component/VideoFile.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({ name: 'VideoFile' });\n</script>\n<template>\n\t<div class=\"video-File\">\n\t\t<video class=\"video-play\" controls :src=\"createMp4LocalUrl(props.item.file)\"></video>\n\t</div>\n</template>\n\n<script lang=\"ts\" setup>\n\n\nconst props = defineProps<{\n\titem: {\n\t\tfile?: File\n\t\t[key: string]: any\n\t}\n\tindex: number\n}>()\nfunction createMp4LocalUrl(mp4File: any) {\n\tconsole.log('object', mp4File)\n\t// 生成本地临时URL\n\tif (!(mp4File instanceof File) && !(mp4File instanceof Blob)) {\n\t\treturn ''\n\t}\n\tconst localUrl = URL.createObjectURL(mp4File)\n\treturn localUrl\n}\n</script>\n<style scoped>\n.video-File {\n\twidth: 5em;\n\theight: auto;\n}\n.video-play {\n\twidth: 100%;\n}\n</style>\n"],"names":["DO_defineComponent","_createElementBlock","_createElementVNode"],"mappings":";;AAEA,MAAA,WAA6B,GAAAA,eAAA,CAAmB,EAAE,IAAA,EAAM,aAAa,CAAA,CAAA;;;;;;;;AAWrE,IAAA,MAAM,KAAQ,GAAA,OAAA,CAAA;AAOd,IAAA,SAAS,kBAAkB,OAAc,EAAA;AACxC,MAAQ,OAAA,CAAA,GAAA,CAAI,UAAU,OAAO,CAAA,CAAA;AAE7B,MAAA,IAAI,EAAE,OAAA,YAAmB,IAAS,CAAA,IAAA,EAAE,mBAAmB,IAAO,CAAA,EAAA;AAC7D,QAAO,OAAA,EAAA,CAAA;AAAA,OACR;AACA,MAAM,MAAA,QAAA,GAAW,GAAI,CAAA,eAAA,CAAgB,OAAO,CAAA,CAAA;AAC5C,MAAO,OAAA,QAAA,CAAA;AAAA,KACR;;wBAvBC,EAAAC,kBAAA,CAEM,OAAA,EAFD,KAAA,EAAM,cAAY,EAAA;AAAA,QACtBC,mBAAqF,OAAA,EAAA;AAAA,UAA9E,KAAM,EAAA,YAAA;AAAA,UAAa,QAAA,EAAA,EAAA;AAAA,UAAU,GAAK,EAAA,iBAAA,CAAkB,KAAM,CAAA,IAAA,CAAK,IAAI,CAAA;AAAA;;;;;;;;"}
|
|
@@ -31,7 +31,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
31
31
|
renderList(unref(agents), (item) => {
|
|
32
32
|
return openBlock(), createElementBlock("div", {
|
|
33
33
|
key: item.name,
|
|
34
|
-
class: normalizeClass([item.id ===
|
|
34
|
+
class: normalizeClass([item.id === _ctx.activeChat ? "is-on" : "", "touchchat-history-item"]),
|
|
35
35
|
onClick: ($event) => handleSelectChat(item)
|
|
36
36
|
}, [
|
|
37
37
|
createElementVNode(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentsView.vue2.mjs","sources":["../../../../../../../packages/components/touchchat/src/AiChat/AgentsView.vue"],"sourcesContent":["<template>\
|
|
1
|
+
{"version":3,"file":"AgentsView.vue2.mjs","sources":["../../../../../../../packages/components/touchchat/src/AiChat/AgentsView.vue"],"sourcesContent":["<template>\n\t<div v-if=\"agents.length > 0\" class=\"touchchat-agents\">\n\t\t<div class=\"touchchat-history-title\">\n\t\t\t<div class=\"touchchat-history-title-icon\"></div>\n\t\t\t<div class=\"touchchat-history-title-text\">智能体</div>\n\t\t</div>\n\t\t<div class=\"touchchat-history-content\">\n\t\t\t<div v-for=\"item in agents\" :key=\"item.name\" :class=\"[item.id === activeChat ? 'is-on' : '', 'touchchat-history-item']\" @click=\"handleSelectChat(item)\">\n\t\t\t\t<div class=\"touchchat-history-item-text\" style=\"flex: 1\">\n\t\t\t\t\t{{ item.name || '新对话' }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n<script lang=\"ts\" setup>\nimport { inject } from 'vue'\ndefineProps<{\n\tactiveChat: string\n\t// chatHistory: HistoryItem[]\n}>()\ninterface Agent {\n\tid: string\n\tname: string\n\tintro: string\n}\nconst emit = defineEmits<{\n\t(e: 'select-chat', value: string): void // 添加inputValue更新事件\n}>()\ntype UpdateSharedData = (item: Agent) => void\nconst agents = inject<Agent[]>('agents', [])\n// 记录每个智能体是否已被点击过\n// const agentClickedMap = ref<Record<string, boolean>>({})\nconst updateSharedData = inject<UpdateSharedData>('updateSharedData', () => {})\nconst handleSelectChat = (item: Agent) => {\n\temit('select-chat', item.id)\n\tupdateSharedData(item)\n}\n</script>\n"],"names":["_unref","_createElementBlock","_createElementVNode","_Fragment","_renderList","_normalizeClass","activeChat","_toDisplayString"],"mappings":";;;;;;;;;AA0BA,IAAA,MAAM,IAAO,GAAA,MAAA,CAAA;AAIb,IAAA,MAAM,MAAS,GAAA,MAAA,CAAgB,QAAU,EAAA,EAAE,CAAA,CAAA;AAG3C,IAAM,MAAA,gBAAA,GAAmB,MAAyB,CAAA,kBAAA,EAAoB,MAAM;AAAA,KAAE,CAAA,CAAA;AAC9E,IAAM,MAAA,gBAAA,GAAmB,CAAC,IAAgB,KAAA;AACzC,MAAK,IAAA,CAAA,aAAA,EAAe,KAAK,EAAE,CAAA,CAAA;AAC3B,MAAA,gBAAA,CAAiB,IAAI,CAAA,CAAA;AAAA,KACtB,CAAA;;AApCY,MAAA,OAAAA,KAAA,CAAA,MAAA,CAAO,CAAA,MAAA,GAAM,kBAAxBC,mBAYM,KAAA,EAAA;AAAA;QAZwB,KAAM,EAAA,kBAAA;AAAA;QACnCC,kBAGM,CAAA,KAAA,EAAA,EAHD,KAAA,EAAM,2BAAyB,EAAA;AAAA,UACnCA,kBAAgD,CAAA,KAAA,EAAA,EAA3C,KAAA,EAAM,gCAA8B,CAAA;AAAA,UACzCA,mBAAmD,KAA9C,EAAA,EAAA,KAAM,EAAA,8BAAA,IAA+B,oBAAG,CAAA;AAAA;QAE9CA,kBAMM,CAAA,KAAA,EAAA,EAND,KAAA,EAAM,6BAA2B,EAAA;AAAA,0BACrC,EAAAD,kBAAA;AAAA,YAIME,QAAA;AAAA,YAAA,IAAA;AAAA,YAAAC,UAJc,CAAAJ,KAAA,CAAM,MAAA,CAAA,EAAA,CAAd,IAAI,KAAA;gCAAhB,EAAAC,kBAAA,CAIM,KAAA,EAAA;AAAA,gBAJuB,KAAK,IAAK,CAAA,IAAA;AAAA,gBAAO,KAAA,EAAQI,cAAA,CAAA,CAAA,IAAK,CAAA,EAAA,KAAOC,KAAU,UAAA,GAAA,OAAA,GAAA,EAAA,EAAA,wBAAA,CAAA,CAAA;AAAA,gBAA6C,OAAK,EAAA,CAAA,MAAE,KAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA;gBACpJJ,kBAAA;AAAA,kBAEM,KAAA;AAAA,kBAAA;AAAA,oBAFD,KAAM,EAAA,6BAAA;AAAA,oBAA8B,KAAA,EAAA,EAAe,MAAA,EAAA,GAAA,EAAA;AAAA,mBACpD;AAAA,kBAAAK,eAAA,CAAA,IAAK,CAAA,IAAA,IAAI,oBAAA,CAAA;AAAA,kBAAA,CAAA;AAAA;AAAA,iBAAA;AAAA;;;;;;;;;;;;;"}
|
|
@@ -132,7 +132,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
132
132
|
return (_ctx, _cache) => {
|
|
133
133
|
return openBlock(), createElementBlock("div", {
|
|
134
134
|
class: "touchchat-ai touchchat-item",
|
|
135
|
-
"data-chat-id":
|
|
135
|
+
"data-chat-id": _ctx.item.chatId
|
|
136
136
|
}, [
|
|
137
137
|
createCommentVNode(" \u5934\u50CF\u533A\u57DF "),
|
|
138
138
|
createElementVNode("div", { class: "touchchat-ai-avatar" }, [
|
|
@@ -148,7 +148,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
148
148
|
createElementVNode(
|
|
149
149
|
"div",
|
|
150
150
|
{
|
|
151
|
-
class: normalizeClass(["touchchat-ai-content", { "is-full": !
|
|
151
|
+
class: normalizeClass(["touchchat-ai-content", { "is-full": !_ctx.item.isChating && _ctx.item.componentName }])
|
|
152
152
|
},
|
|
153
153
|
[
|
|
154
154
|
createCommentVNode(" \u6C14\u6CE1 "),
|
|
@@ -167,16 +167,16 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
167
167
|
createElementVNode("div", { class: "touchchat-ai-think-header" }, [
|
|
168
168
|
createElementVNode("div", { class: "touchchat-ai-think-state" }, [
|
|
169
169
|
createTextVNode(
|
|
170
|
-
toDisplayString(
|
|
170
|
+
toDisplayString(_ctx.item.thinkStatus === "thinking" ? "\u6DF1\u5EA6\u601D\u8003\u4E2D..." : _ctx.item.thinkStatus === "completed" ? "\u5DF2\u6DF1\u5EA6\u601D\u8003" : "\u601D\u8003\u5DF2\u505C\u6B62") + " ",
|
|
171
171
|
1
|
|
172
172
|
/* TEXT */
|
|
173
173
|
),
|
|
174
|
-
|
|
174
|
+
_ctx.item.thinkStatus === "completed" ? (openBlock(), createElementBlock(
|
|
175
175
|
Fragment,
|
|
176
176
|
{ key: 0 },
|
|
177
177
|
[
|
|
178
178
|
createTextVNode(
|
|
179
|
-
"\uFF08\u7528\u65F6" + toDisplayString((
|
|
179
|
+
"\uFF08\u7528\u65F6" + toDisplayString((_ctx.item.thinkTime || 0) / 1e3) + "\u79D2\uFF09",
|
|
180
180
|
1
|
|
181
181
|
/* TEXT */
|
|
182
182
|
)
|
|
@@ -228,17 +228,17 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
228
228
|
])) : createCommentVNode("v-if", true),
|
|
229
229
|
createCommentVNode(" \u4E3B\u5185\u5BB9 "),
|
|
230
230
|
renderSlot(_ctx.$slots, "aimsg", {
|
|
231
|
-
item:
|
|
232
|
-
index:
|
|
231
|
+
item: _ctx.item,
|
|
232
|
+
index: _ctx.index
|
|
233
233
|
}, () => [
|
|
234
|
-
contentShow.value && unref(scripts) && unref(scripts).length === 0 &&
|
|
234
|
+
contentShow.value && unref(scripts) && unref(scripts).length === 0 && _ctx.item.msgList && _ctx.item.msgList.length ? (openBlock(), createElementBlock("div", {
|
|
235
235
|
key: 0,
|
|
236
236
|
class: "touchchat-ai-bubble-text touchchat-markdown"
|
|
237
237
|
}, [
|
|
238
238
|
(openBlock(true), createElementBlock(
|
|
239
239
|
Fragment,
|
|
240
240
|
null,
|
|
241
|
-
renderList(
|
|
241
|
+
renderList(_ctx.item.msgList, (node) => {
|
|
242
242
|
return openBlock(), createElementBlock(
|
|
243
243
|
Fragment,
|
|
244
244
|
{
|
|
@@ -252,7 +252,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
252
252
|
node.type === "component" && node.displayMode === "inline" ? (openBlock(), createBlock(resolveDynamicComponent(unref(components)[node.componentName] || componentMap[node.componentName]), mergeProps({
|
|
253
253
|
key: 1,
|
|
254
254
|
ref_for: true
|
|
255
|
-
},
|
|
255
|
+
}, _ctx.item.props, {
|
|
256
256
|
index: node.id,
|
|
257
257
|
item: node
|
|
258
258
|
}), null, 16, ["index", "item"])) : createCommentVNode("v-if", true),
|
|
@@ -271,7 +271,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
271
271
|
/* KEYED_FRAGMENT */
|
|
272
272
|
))
|
|
273
273
|
])) : createCommentVNode("v-if", true),
|
|
274
|
-
contentShow.value && unref(scripts) && unref(scripts).length === 0 && !(
|
|
274
|
+
contentShow.value && unref(scripts) && unref(scripts).length === 0 && !(_ctx.item.msgList && _ctx.item.msgList.length) ? (openBlock(), createElementBlock("div", {
|
|
275
275
|
key: 1,
|
|
276
276
|
class: "touchchat-ai-bubble-text touchchat-markdown",
|
|
277
277
|
innerHTML: processedContent.value
|
|
@@ -281,25 +281,25 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
281
281
|
unref(scripts) && unref(scripts).length > 0 ? (openBlock(), createBlock(Letter, {
|
|
282
282
|
key: 2,
|
|
283
283
|
"auto-start": "",
|
|
284
|
-
data:
|
|
284
|
+
data: _ctx.item.content,
|
|
285
285
|
onStart: startLetter,
|
|
286
286
|
onComplete: completeLetter
|
|
287
287
|
}, null, 8, ["data"])) : createCommentVNode("v-if", true),
|
|
288
|
-
unref(scripts).length > 0 && (showComponent.value || !
|
|
288
|
+
unref(scripts).length > 0 && (showComponent.value || !_ctx.item.content) || !unref(scripts).length && !_ctx.item.isChating ? renderSlot(_ctx.$slots, "msg", {
|
|
289
289
|
key: 3,
|
|
290
|
-
item:
|
|
291
|
-
index:
|
|
290
|
+
item: _ctx.item,
|
|
291
|
+
index: _ctx.index
|
|
292
292
|
}, () => [
|
|
293
293
|
(openBlock(), createBlock(resolveDynamicComponent(componentName.value), {
|
|
294
|
-
index:
|
|
295
|
-
item:
|
|
294
|
+
index: _ctx.index,
|
|
295
|
+
item: _ctx.item,
|
|
296
296
|
onStart: startCompentent,
|
|
297
297
|
onComplete: completeCompentent,
|
|
298
298
|
onToggleSidebar: toggleSidebarClick
|
|
299
299
|
}, null, 40, ["index", "item"]))
|
|
300
300
|
]) : createCommentVNode("v-if", true),
|
|
301
301
|
createCommentVNode(" \u65B0\u589E\u52A0\u8F7D\u72B6\u6001\u533A\u57DF "),
|
|
302
|
-
|
|
302
|
+
_ctx.item.isChating ? (openBlock(), createElementBlock("div", {
|
|
303
303
|
key: 4,
|
|
304
304
|
class: "touchchat-ai-loading"
|
|
305
305
|
}, [
|
|
@@ -308,14 +308,14 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
308
308
|
])) : createCommentVNode("v-if", true)
|
|
309
309
|
]),
|
|
310
310
|
renderSlot(_ctx.$slots, "fn", {
|
|
311
|
-
item:
|
|
312
|
-
index:
|
|
311
|
+
item: _ctx.item,
|
|
312
|
+
index: _ctx.index
|
|
313
313
|
}, () => [
|
|
314
314
|
withDirectives(createVNode(MessageActions, {
|
|
315
|
-
item:
|
|
315
|
+
item: _ctx.item,
|
|
316
316
|
"message-type": "ai",
|
|
317
|
-
index:
|
|
318
|
-
"has-retry":
|
|
317
|
+
index: _ctx.index,
|
|
318
|
+
"has-retry": _ctx.hasRetry,
|
|
319
319
|
"show-copy": true,
|
|
320
320
|
onCopy,
|
|
321
321
|
onRetry,
|
|
@@ -325,28 +325,28 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
325
325
|
}, {
|
|
326
326
|
extendsFn: withCtx(() => [
|
|
327
327
|
renderSlot(_ctx.$slots, "extendsFn", {
|
|
328
|
-
item:
|
|
329
|
-
index:
|
|
328
|
+
item: _ctx.item,
|
|
329
|
+
index: _ctx.index
|
|
330
330
|
})
|
|
331
331
|
]),
|
|
332
332
|
_: 3
|
|
333
333
|
/* FORWARDED */
|
|
334
334
|
}, 8, ["item", "index", "has-retry"]), [
|
|
335
|
-
[vShow, showFn.value && unref(scripts).length > 0 || !unref(scripts).length && !
|
|
335
|
+
[vShow, showFn.value && unref(scripts).length > 0 || !unref(scripts).length && !_ctx.item.isChating]
|
|
336
336
|
])
|
|
337
337
|
]),
|
|
338
|
-
showFn.value &&
|
|
338
|
+
showFn.value && _ctx.item.likeList && _ctx.item.likeList.length && !_ctx.item.isChating ? (openBlock(), createElementBlock("div", {
|
|
339
339
|
key: 0,
|
|
340
340
|
class: "touchchat-ai-may-like"
|
|
341
341
|
}, [
|
|
342
342
|
renderSlot(_ctx.$slots, "mayLike", {
|
|
343
|
-
item:
|
|
344
|
-
index:
|
|
343
|
+
item: _ctx.item,
|
|
344
|
+
index: _ctx.index
|
|
345
345
|
}, () => [
|
|
346
346
|
(openBlock(true), createElementBlock(
|
|
347
347
|
Fragment,
|
|
348
348
|
null,
|
|
349
|
-
renderList(
|
|
349
|
+
renderList(_ctx.item.likeList, (likeItem) => {
|
|
350
350
|
return openBlock(), createElementBlock("div", {
|
|
351
351
|
key: likeItem.id
|
|
352
352
|
}, [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AiMessage.vue2.mjs","sources":["../../../../../../../packages/components/touchchat/src/AiChat/AiMessage.vue"],"sourcesContent":["<template>\r\n\t<div class=\"touchchat-ai touchchat-item\" :data-chat-id=\"item.chatId\">\r\n\t\t<!-- 头像区域 -->\r\n\t\t<div class=\"touchchat-ai-avatar\">\r\n\t\t\t<slot name=\"aiAvatar\">\r\n\t\t\t\t<img v-if=\"isShowAvatar\" :src=\"aiAvatarPath\" class=\"touchchat-ai-avatar-pic\" />\r\n\t\t\t</slot>\r\n\t\t</div>\r\n\r\n\t\t<!-- 内容区域 -->\r\n\t\t<div class=\"touchchat-ai-content\" :class=\"{ 'is-full': !item.isChating && item.componentName }\">\r\n\t\t\t<!-- 气泡 -->\r\n\t\t\t<div class=\"touchchat-ai-bubble\">\r\n\t\t\t\t<!-- 思考内容 -->\r\n\t\t\t\t<div v-if=\"thinkContentShow\" class=\"touchchat-ai-think\" v-html=\"processedThinkContent\"></div>\r\n\r\n\t\t\t\t<!-- 推理内容 -->\r\n\t\t\t\t<div v-if=\"reasoningContentShow\" class=\"touchchat-ai-think\">\r\n\t\t\t\t\t<div class=\"touchchat-ai-think-header\">\r\n\t\t\t\t\t\t<div class=\"touchchat-ai-think-state\">\r\n\t\t\t\t\t\t\t{{ item.thinkStatus === 'thinking' ? '深度思考中...' : item.thinkStatus === 'completed' ? '已深度思考' : '思考已停止' }}\r\n\t\t\t\t\t\t\t<template v-if=\"item.thinkStatus === 'completed'\">(用时{{ (item.thinkTime || 0) / 1000 }}秒)</template>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div class=\"touchchat-ai-think-toggle\" :class=\"collapse ? '' : 'is-expand'\" @click=\"collapse = !collapse\">\r\n\t\t\t\t\t\t\t<span class=\"touchchat-ai-think-toggle-icon\"></span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<transition name=\"touchchat-ai-think-collpase\">\r\n\t\t\t\t\t\t<div v-show=\"collapse && !chainAble\" class=\"touchchat-ai-think-content\" v-html=\"processedReasoningContent\"></div>\r\n\t\t\t\t\t</transition>\r\n\t\t\t\t\t<transition name=\"touchchat-ai-think-collpase\">\r\n\t\t\t\t\t\t<thought-chain v-show=\"collapse && chainAble\"></thought-chain>\r\n\t\t\t\t\t</transition>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<!-- 主内容 -->\r\n\t\t\t\t<slot name=\"aimsg\" :item=\"item\" :index=\"index\">\r\n\t\t\t\t\t<div v-if=\"contentShow && scripts && scripts.length === 0 && item.msgList && item.msgList.length\" class=\"touchchat-ai-bubble-text touchchat-markdown\">\r\n\t\t\t\t\t\t<template v-for=\"node in item.msgList\" :key=\"node.id\">\r\n\t\t\t\t\t\t\t<div v-if=\"node.type === 'markdown' && node.content\" v-html=\"getProcessedContent(node)\" />\r\n\t\t\t\t\t\t\t<component :is=\"components[node.componentName] || componentMap[node.componentName]\" v-if=\"node.type === 'component' && node.displayMode === 'inline'\" v-bind=\"item.props\" :index=\"node.id\" :item=\"node\" />\r\n\t\t\t\t\t\t\t<TouchA2ui v-if=\"node.type === 'a2ui'\" :messages=\"node.msgs\" :components=\"a2uiProps.components\" :surface-id=\"node.surfaceId\" />\r\n\t\t\t\t\t\t</template>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div v-if=\"contentShow && scripts && scripts.length === 0 && !(item.msgList && item.msgList.length)\" class=\"touchchat-ai-bubble-text touchchat-markdown\" v-html=\"processedContent\"></div>\r\n\t\t\t\t</slot>\r\n\r\n\t\t\t\t<!-- && !item.componentName -->\r\n\t\t\t\t<letter v-if=\"scripts && scripts.length > 0\" auto-start :data=\"item.content\" @start=\"startLetter\" @complete=\"completeLetter\"> </letter>\r\n\t\t\t\t<slot v-if=\"(scripts.length > 0 && (showComponent || !item.content)) || (!scripts.length && !item.isChating)\" name=\"msg\" :item=\"item\" :index=\"index\">\r\n\t\t\t\t\t<component :is=\"componentName\" :index=\"index\" :item=\"item\" @start=\"startCompentent\" @complete=\"completeCompentent\" @toggle-sidebar=\"toggleSidebarClick\"></component>\r\n\t\t\t\t</slot>\r\n\r\n\t\t\t\t<!-- 新增加载状态区域 -->\r\n\t\t\t\t<div v-if=\"item.isChating\" class=\"touchchat-ai-loading\">\r\n\t\t\t\t\t<div class=\"touchchat-ai-loading-icon\"></div>\r\n\t\t\t\t\t<span class=\"touchchat-ai-loading-text\">加载中...</span>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<slot name=\"fn\" :item=\"item\" :index=\"index\">\r\n\t\t\t\t<MessageActions v-show=\"(showFn && scripts.length > 0) || (!scripts.length && !item.isChating)\" :item=\"item\" message-type=\"ai\" :index=\"index\" :has-retry=\"hasRetry\" :show-copy=\"true\" @copy=\"onCopy\" @retry=\"onRetry\" @like=\"onLike\" @dislike=\"onDislike\" @quote=\"onQuote\">\r\n\t\t\t\t\t<!-- <slot name=\"extendsFn\" :item=\"item\" :index=\"index\"></slot> -->\r\n\t\t\t\t\t<template #extendsFn>\r\n\t\t\t\t\t\t<slot name=\"extendsFn\" :item=\"item\" :index=\"index\" />\r\n\t\t\t\t\t</template>\r\n\t\t\t\t</MessageActions>\r\n\t\t\t</slot>\r\n\t\t\t<div v-if=\"showFn && item.likeList && item.likeList.length && !item.isChating\" class=\"touchchat-ai-may-like\">\r\n\t\t\t\t<slot name=\"mayLike\" :item=\"item\" :index=\"index\">\r\n\t\t\t\t\t<div v-for=\"likeItem in item.likeList\" :key=\"likeItem.id\">\r\n\t\t\t\t\t\t<span class=\"touchchat-ai-may-like-item\" @click=\"handleSend(likeItem.name)\">\r\n\t\t\t\t\t\t\t<span class=\"touchchat-ai-may-like-item-title\">{{ likeItem.name }}</span>\r\n\t\t\t\t\t\t\t<div class=\"touchchat-action-item value-right-arrow\"></div>\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</slot>\r\n\t\t\t</div>\r\n\t\t\t<!-- && !scripts.length -->\r\n\t\t</div>\r\n\t</div>\r\n</template>\r\n\r\n<script lang=\"ts\" setup>\r\n// useSlots, Comment, watch\r\nimport { ref, computed, inject, onMounted, watch } from 'vue'\r\nimport type { ChatMessage, ChatMsgList } from './Chat/types'\r\nimport aiAvatarBase from '../../img/aiAvatar.png'\r\nimport markdown from '../../utils/markdown.ts'\r\nimport FileView from '../../component/FileView.vue'\r\nimport ImageView from '../../component/ImageView.vue'\r\nimport LinkView from '../../component/LinkView.vue'\r\nimport CardView from '../../component/CardView.vue'\r\nimport MessageActions from './MessageActions.vue'\r\nimport Face from '../../component/AiRobot/face.vue'\r\nimport MeterialPrepare from '../../component/AiRobot/meterialPrepare.vue'\r\nimport Letter from '../../component/AiRobot/letter.vue'\r\nimport ThoughtChain from '../../component/ThoughtChain.vue'\r\nimport { TouchA2ui } from '@touchvue/a2ui'\r\n// 为组件映射表定义接口\r\ninterface ComponentMap {\r\n\t[key: string]: any // 允许任何字符串键\r\n\tFileView: typeof FileView\r\n\tImageView: typeof ImageView\r\n\tLinkView: typeof LinkView\r\n\tCardView: typeof CardView\r\n}\r\n\r\n// 创建组件映射表\r\nconst componentMap: ComponentMap = {\r\n\tFileView,\r\n\tImageView,\r\n\tLinkView,\r\n\tCardView,\r\n\tFace,\r\n\tMeterialPrepare\r\n}\r\n\r\nconst props = withDefaults(\r\n\tdefineProps<{\r\n\t\titem: ChatMessage & ChatMsgList\r\n\t\tindex: number\r\n\t\thasRetry: boolean\r\n\t}>(),\r\n\t{\r\n\t\thasRetry: true\r\n\t}\r\n)\r\n\r\nwatch(\r\n\t() => props.item,\r\n\tval => {\r\n\t\tlet arr = []\r\n\t\tif (val.msgList) {\r\n\t\t\tarr = val.msgList?.filter(item => (item.type === 'component' && (item.displayMode === 'drawer' || item.displayMode === 'tip')) || (item.type === 'iframe' && item.url))\r\n\t\t}\r\n\t\tif (arr.length) {\r\n\t\t\temits('openSideBar', arr[0], props.index)\r\n\t\t}\r\n\t},\r\n\t{\r\n\t\tdeep: true\r\n\t}\r\n)\r\n\r\nconst emits = defineEmits<{\r\n\t(e: 'copy', index: number): void\r\n\t(e: 'retry', index: number): void\r\n\t(e: 'like', index: number): void\r\n\t(e: 'dislike', index: number): void\r\n\t(e: 'quote', item: any, index: number): void\r\n\t(e: 'contentRendered', element: HTMLElement): void\r\n\t(e: 'completeRendered', chatId: string): void\r\n\t(e: 'toggle-sidebar', item: any, index: number): void\r\n\t(e: 'openSideBar', item: any, index: number): void\r\n\t(e: 'send', sendVal: string): void\r\n}>()\r\n\r\nconst collapse = ref(true)\r\nconst isShowAvatar = ref(true)\r\nconst aiAvatarPath = ref(aiAvatarBase)\r\nconst components = inject<Record<string, any>>('components', {}) // 指定类型并提供默认值 {}\r\nconst a2uiProps = inject<Record<string, any>>('a2uiProps', {}) // 指定类型并提供默认值 {}\r\nconst avatar = inject<boolean>('avatar', true)\r\nconst scripts = inject<any[]>('scripts', [])\r\nconst layout = inject<string>('layout', 'side, think, upload, chain')\r\nconst chainAble = layout.includes('chain')\r\nconst showComponent = ref(false)\r\nconst showFn = ref(false)\r\n\r\nconst init = () => {\r\n\tisShowAvatar.value = avatar\r\n}\r\n\r\nconst componentName = computed(() => {\r\n\tconst slotMap = components\r\n\r\n\t// 明确newMap的类型,允许字符串索引\r\n\tconst newMap: Record<string, any> = {\r\n\t\t...slotMap,\r\n\t\t...componentMap\r\n\t}\r\n\treturn newMap[props.item.componentName as string] || null\r\n})\r\n\r\nconst thinkContentShow = computed(() => {\r\n\treturn props.item.thinkContent\r\n\t// && !props.item.componentName;\r\n})\r\n\r\nconst reasoningContentShow = computed(() => {\r\n\treturn props.item.reasoningContent\r\n})\r\n\r\nconst processedContent = computed(() => {\r\n\treturn props.item.content ? markdown?.render(props.item.content, { isReasoning: false }) || '' : ''\r\n})\r\n\r\nconst getProcessedContent = (node: any) => {\r\n\treturn node.content ? markdown?.render(node.content, { isReasoning: false }) || '' : ''\r\n}\r\n\r\nconst processedThinkContent = computed(() => {\r\n\treturn props.item.thinkContent ? markdown?.render(props.item.thinkContent, { isReasoning: true }) || '' : ''\r\n})\r\n\r\nconst processedReasoningContent = computed(() => {\r\n\treturn props.item.reasoningContent ? markdown?.render(props.item.reasoningContent, { isReasoning: true }) || '' : ''\r\n})\r\n\r\nconst contentShow = computed(() => {\r\n\treturn props.item.content || props.item.msgList?.length\r\n})\r\n\r\nconst handleSend = (sendVal: string) => {\r\n\temits('send', sendVal)\r\n}\r\n\r\nconst toggleSidebarClick = (item: ChatMessage, index: number) => {\r\n\temits('toggle-sidebar', item, index)\r\n}\r\n\r\nonMounted(() => {\r\n\tinit()\r\n})\r\n\r\nconst completeCompentent = () => {\r\n\temits('completeRendered', props.item?.chatId || '')\r\n\tshowFn.value = true\r\n}\r\nconst completeLetter = () => {\r\n\tshowComponent.value = true\r\n\tif (!props.item.componentName) {\r\n\t\temits('completeRendered', props.item?.chatId || '')\r\n\t\tshowFn.value = true\r\n\t}\r\n}\r\n\r\nconst startCompentent = () => {\r\n\tconsole.log('startCompentent')\r\n}\r\nconst startLetter = () => {\r\n\tshowComponent.value = false\r\n\tshowFn.value = false\r\n}\r\n\r\nconst onCopy = () => emits('copy', props.index)\r\nconst onRetry = () => emits('retry', props.index)\r\nconst onLike = () => emits('like', props.index)\r\nconst onDislike = () => emits('dislike', props.index)\r\nconst onQuote = () => emits('quote', props.item, props.index)\r\n</script>\r\n"],"names":["aiAvatarBase","_createElementBlock","_createCommentVNode","_createElementVNode","_renderSlot","_normalizeClass","_createTextVNode","_toDisplayString","_Fragment","_createVNode","_Transition","_vShow","_unref","_openBlock","_renderList","_createBlock","_resolveDynamicComponent","_mergeProps","TouchA2ui"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AiMessage.vue2.mjs","sources":["../../../../../../../packages/components/touchchat/src/AiChat/AiMessage.vue"],"sourcesContent":["<template>\n\t<div class=\"touchchat-ai touchchat-item\" :data-chat-id=\"item.chatId\">\n\t\t<!-- 头像区域 -->\n\t\t<div class=\"touchchat-ai-avatar\">\n\t\t\t<slot name=\"aiAvatar\">\n\t\t\t\t<img v-if=\"isShowAvatar\" :src=\"aiAvatarPath\" class=\"touchchat-ai-avatar-pic\" />\n\t\t\t</slot>\n\t\t</div>\n\n\t\t<!-- 内容区域 -->\n\t\t<div class=\"touchchat-ai-content\" :class=\"{ 'is-full': !item.isChating && item.componentName }\">\n\t\t\t<!-- 气泡 -->\n\t\t\t<div class=\"touchchat-ai-bubble\">\n\t\t\t\t<!-- 思考内容 -->\n\t\t\t\t<div v-if=\"thinkContentShow\" class=\"touchchat-ai-think\" v-html=\"processedThinkContent\"></div>\n\n\t\t\t\t<!-- 推理内容 -->\n\t\t\t\t<div v-if=\"reasoningContentShow\" class=\"touchchat-ai-think\">\n\t\t\t\t\t<div class=\"touchchat-ai-think-header\">\n\t\t\t\t\t\t<div class=\"touchchat-ai-think-state\">\n\t\t\t\t\t\t\t{{ item.thinkStatus === 'thinking' ? '深度思考中...' : item.thinkStatus === 'completed' ? '已深度思考' : '思考已停止' }}\n\t\t\t\t\t\t\t<template v-if=\"item.thinkStatus === 'completed'\">(用时{{ (item.thinkTime || 0) / 1000 }}秒)</template>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"touchchat-ai-think-toggle\" :class=\"collapse ? '' : 'is-expand'\" @click=\"collapse = !collapse\">\n\t\t\t\t\t\t\t<span class=\"touchchat-ai-think-toggle-icon\"></span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<transition name=\"touchchat-ai-think-collpase\">\n\t\t\t\t\t\t<div v-show=\"collapse && !chainAble\" class=\"touchchat-ai-think-content\" v-html=\"processedReasoningContent\"></div>\n\t\t\t\t\t</transition>\n\t\t\t\t\t<transition name=\"touchchat-ai-think-collpase\">\n\t\t\t\t\t\t<thought-chain v-show=\"collapse && chainAble\"></thought-chain>\n\t\t\t\t\t</transition>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- 主内容 -->\n\t\t\t\t<slot name=\"aimsg\" :item=\"item\" :index=\"index\">\n\t\t\t\t\t<div v-if=\"contentShow && scripts && scripts.length === 0 && item.msgList && item.msgList.length\" class=\"touchchat-ai-bubble-text touchchat-markdown\">\n\t\t\t\t\t\t<template v-for=\"node in item.msgList\" :key=\"node.id\">\n\t\t\t\t\t\t\t<div v-if=\"node.type === 'markdown' && node.content\" v-html=\"getProcessedContent(node)\" />\n\t\t\t\t\t\t\t<component :is=\"components[node.componentName] || componentMap[node.componentName]\" v-if=\"node.type === 'component' && node.displayMode === 'inline'\" v-bind=\"item.props\" :index=\"node.id\" :item=\"node\" />\n\t\t\t\t\t\t\t<TouchA2ui v-if=\"node.type === 'a2ui'\" :messages=\"node.msgs\" :components=\"a2uiProps.components\" :surface-id=\"node.surfaceId\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div v-if=\"contentShow && scripts && scripts.length === 0 && !(item.msgList && item.msgList.length)\" class=\"touchchat-ai-bubble-text touchchat-markdown\" v-html=\"processedContent\"></div>\n\t\t\t\t</slot>\n\n\t\t\t\t<!-- && !item.componentName -->\n\t\t\t\t<letter v-if=\"scripts && scripts.length > 0\" auto-start :data=\"item.content\" @start=\"startLetter\" @complete=\"completeLetter\"> </letter>\n\t\t\t\t<slot v-if=\"(scripts.length > 0 && (showComponent || !item.content)) || (!scripts.length && !item.isChating)\" name=\"msg\" :item=\"item\" :index=\"index\">\n\t\t\t\t\t<component :is=\"componentName\" :index=\"index\" :item=\"item\" @start=\"startCompentent\" @complete=\"completeCompentent\" @toggle-sidebar=\"toggleSidebarClick\"></component>\n\t\t\t\t</slot>\n\n\t\t\t\t<!-- 新增加载状态区域 -->\n\t\t\t\t<div v-if=\"item.isChating\" class=\"touchchat-ai-loading\">\n\t\t\t\t\t<div class=\"touchchat-ai-loading-icon\"></div>\n\t\t\t\t\t<span class=\"touchchat-ai-loading-text\">加载中...</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<slot name=\"fn\" :item=\"item\" :index=\"index\">\n\t\t\t\t<MessageActions v-show=\"(showFn && scripts.length > 0) || (!scripts.length && !item.isChating)\" :item=\"item\" message-type=\"ai\" :index=\"index\" :has-retry=\"hasRetry\" :show-copy=\"true\" @copy=\"onCopy\" @retry=\"onRetry\" @like=\"onLike\" @dislike=\"onDislike\" @quote=\"onQuote\">\n\t\t\t\t\t<!-- <slot name=\"extendsFn\" :item=\"item\" :index=\"index\"></slot> -->\n\t\t\t\t\t<template #extendsFn>\n\t\t\t\t\t\t<slot name=\"extendsFn\" :item=\"item\" :index=\"index\" />\n\t\t\t\t\t</template>\n\t\t\t\t</MessageActions>\n\t\t\t</slot>\n\t\t\t<div v-if=\"showFn && item.likeList && item.likeList.length && !item.isChating\" class=\"touchchat-ai-may-like\">\n\t\t\t\t<slot name=\"mayLike\" :item=\"item\" :index=\"index\">\n\t\t\t\t\t<div v-for=\"likeItem in item.likeList\" :key=\"likeItem.id\">\n\t\t\t\t\t\t<span class=\"touchchat-ai-may-like-item\" @click=\"handleSend(likeItem.name)\">\n\t\t\t\t\t\t\t<span class=\"touchchat-ai-may-like-item-title\">{{ likeItem.name }}</span>\n\t\t\t\t\t\t\t<div class=\"touchchat-action-item value-right-arrow\"></div>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t</slot>\n\t\t\t</div>\n\t\t\t<!-- && !scripts.length -->\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\" setup>\n// useSlots, Comment, watch\nimport { ref, computed, inject, onMounted, watch } from 'vue'\nimport type { ChatMessage, ChatMsgList } from './Chat/types'\nimport aiAvatarBase from '../../img/aiAvatar.png'\nimport markdown from '../../utils/markdown.ts'\nimport FileView from '../../component/FileView.vue'\nimport ImageView from '../../component/ImageView.vue'\nimport LinkView from '../../component/LinkView.vue'\nimport CardView from '../../component/CardView.vue'\nimport MessageActions from './MessageActions.vue'\nimport Face from '../../component/AiRobot/face.vue'\nimport MeterialPrepare from '../../component/AiRobot/meterialPrepare.vue'\nimport Letter from '../../component/AiRobot/letter.vue'\nimport ThoughtChain from '../../component/ThoughtChain.vue'\nimport { TouchA2ui } from '@touchvue/a2ui'\n// 为组件映射表定义接口\ninterface ComponentMap {\n\t[key: string]: any // 允许任何字符串键\n\tFileView: typeof FileView\n\tImageView: typeof ImageView\n\tLinkView: typeof LinkView\n\tCardView: typeof CardView\n}\n\n// 创建组件映射表\nconst componentMap: ComponentMap = {\n\tFileView,\n\tImageView,\n\tLinkView,\n\tCardView,\n\tFace,\n\tMeterialPrepare\n}\n\nconst props = withDefaults(\n\tdefineProps<{\n\t\titem: ChatMessage & ChatMsgList\n\t\tindex: number\n\t\thasRetry: boolean\n\t}>(),\n\t{\n\t\thasRetry: true\n\t}\n)\n\nwatch(\n\t() => props.item,\n\tval => {\n\t\tlet arr = []\n\t\tif (val.msgList) {\n\t\t\tarr = val.msgList?.filter(item => (item.type === 'component' && (item.displayMode === 'drawer' || item.displayMode === 'tip')) || (item.type === 'iframe' && item.url))\n\t\t}\n\t\tif (arr.length) {\n\t\t\temits('openSideBar', arr[0], props.index)\n\t\t}\n\t},\n\t{\n\t\tdeep: true\n\t}\n)\n\nconst emits = defineEmits<{\n\t(e: 'copy', index: number): void\n\t(e: 'retry', index: number): void\n\t(e: 'like', index: number): void\n\t(e: 'dislike', index: number): void\n\t(e: 'quote', item: any, index: number): void\n\t(e: 'contentRendered', element: HTMLElement): void\n\t(e: 'completeRendered', chatId: string): void\n\t(e: 'toggle-sidebar', item: any, index: number): void\n\t(e: 'openSideBar', item: any, index: number): void\n\t(e: 'send', sendVal: string): void\n}>()\n\nconst collapse = ref(true)\nconst isShowAvatar = ref(true)\nconst aiAvatarPath = ref(aiAvatarBase)\nconst components = inject<Record<string, any>>('components', {}) // 指定类型并提供默认值 {}\nconst a2uiProps = inject<Record<string, any>>('a2uiProps', {}) // 指定类型并提供默认值 {}\nconst avatar = inject<boolean>('avatar', true)\nconst scripts = inject<any[]>('scripts', [])\nconst layout = inject<string>('layout', 'side, think, upload, chain')\nconst chainAble = layout.includes('chain')\nconst showComponent = ref(false)\nconst showFn = ref(false)\n\nconst init = () => {\n\tisShowAvatar.value = avatar\n}\n\nconst componentName = computed(() => {\n\tconst slotMap = components\n\n\t// 明确newMap的类型,允许字符串索引\n\tconst newMap: Record<string, any> = {\n\t\t...slotMap,\n\t\t...componentMap\n\t}\n\treturn newMap[props.item.componentName as string] || null\n})\n\nconst thinkContentShow = computed(() => {\n\treturn props.item.thinkContent\n\t// && !props.item.componentName;\n})\n\nconst reasoningContentShow = computed(() => {\n\treturn props.item.reasoningContent\n})\n\nconst processedContent = computed(() => {\n\treturn props.item.content ? markdown?.render(props.item.content, { isReasoning: false }) || '' : ''\n})\n\nconst getProcessedContent = (node: any) => {\n\treturn node.content ? markdown?.render(node.content, { isReasoning: false }) || '' : ''\n}\n\nconst processedThinkContent = computed(() => {\n\treturn props.item.thinkContent ? markdown?.render(props.item.thinkContent, { isReasoning: true }) || '' : ''\n})\n\nconst processedReasoningContent = computed(() => {\n\treturn props.item.reasoningContent ? markdown?.render(props.item.reasoningContent, { isReasoning: true }) || '' : ''\n})\n\nconst contentShow = computed(() => {\n\treturn props.item.content || props.item.msgList?.length\n})\n\nconst handleSend = (sendVal: string) => {\n\temits('send', sendVal)\n}\n\nconst toggleSidebarClick = (item: ChatMessage, index: number) => {\n\temits('toggle-sidebar', item, index)\n}\n\nonMounted(() => {\n\tinit()\n})\n\nconst completeCompentent = () => {\n\temits('completeRendered', props.item?.chatId || '')\n\tshowFn.value = true\n}\nconst completeLetter = () => {\n\tshowComponent.value = true\n\tif (!props.item.componentName) {\n\t\temits('completeRendered', props.item?.chatId || '')\n\t\tshowFn.value = true\n\t}\n}\n\nconst startCompentent = () => {\n\tconsole.log('startCompentent')\n}\nconst startLetter = () => {\n\tshowComponent.value = false\n\tshowFn.value = false\n}\n\nconst onCopy = () => emits('copy', props.index)\nconst onRetry = () => emits('retry', props.index)\nconst onLike = () => emits('like', props.index)\nconst onDislike = () => emits('dislike', props.index)\nconst onQuote = () => emits('quote', props.item, props.index)\n</script>\n"],"names":["aiAvatarBase","_createElementBlock","item","_createCommentVNode","_createElementVNode","_renderSlot","_normalizeClass","_Fragment","_createTextVNode","_createVNode","_Transition","_vShow","_unref","index","_openBlock","_createBlock","_resolveDynamicComponent","_mergeProps","TouchA2ui","hasRetry","_toDisplayString"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scriptMatcher.mjs","sources":["../../../../../../../../packages/components/touchchat/src/AiChat/Chat/scriptMatcher.ts"],"sourcesContent":["/**\r\n * 脚本匹配逻辑\r\n */\r\n\r\nimport { ref, type Ref } from 'vue'\r\nimport type { Script, FileItem, ScriptMatchResult } from './types'\r\n\r\nexport interface ScriptMatcherOptions {\r\n\tscripts: Ref<any[]>\r\n\tactiveAgentsName: Ref<string>\r\n\tfileData: Ref<FileItem[]>\r\n\tunmatchText: string\r\n}\r\n\r\nexport function createScriptMatcher({ scripts, activeAgentsName, fileData }: ScriptMatcherOptions) {\r\n\tconst activeScript = ref<Script | null>(null)\r\n\r\n\t// 在脚本中搜索匹配内容\r\n\tconst searchInScript = (script: Script, userInput: string): ScriptMatchResult | null => {\r\n\t\tfor (let i = 0; i < script.content.length; i++) {\r\n\t\t\tconst item = script.content[i]\r\n\t\t\tif (item.user === 'i') {\r\n\t\t\t\t// 检查 data 是否匹配\r\n\t\t\t\tconst isDataMatch = item.data && userInput.includes(item.data)\r\n\t\t\t\t// 检查 alias 是否匹配\r\n\t\t\t\tlet isSubDataMatch = false\r\n\t\t\t\tif (item.alias) {\r\n\t\t\t\t\tif (Array.isArray(item.alias)) {\r\n\t\t\t\t\t\tisSubDataMatch = item.alias.some((subItem: string) => subItem === userInput)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (isDataMatch || isSubDataMatch) {\r\n\t\t\t\t\t// 收集 AI 回复\r\n\t\t\t\t\tconst responses: any[] = []\r\n\t\t\t\t\t// 从匹配位置的下一个元素开始遍历\r\n\t\t\t\t\tfor (let j = i + 1; j < script.content.length; j++) {\r\n\t\t\t\t\t\tconst nextItem = script.content[j]\r\n\t\t\t\t\t\tif (nextItem.user === 'i') {\r\n\t\t\t\t\t\t\tbreak // 遇到下一个用户消息,停止收集\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (nextItem.user === 'ai') {\r\n\t\t\t\t\t\t\tif (nextItem.data && nextItem.type) {\r\n\t\t\t\t\t\t\t\t// 合并 data 和 type 到一条响应中\r\n\t\t\t\t\t\t\t\tresponses.push({\r\n\t\t\t\t\t\t\t\t\t...nextItem,\r\n\t\t\t\t\t\t\t\t\t// 标记需要先流式输出文字,再调用组件\r\n\t\t\t\t\t\t\t\t\tneedSequenceProcessing: true\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tresponses.push(nextItem)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// 查找下一个用户消息的索引\r\n\t\t\t\t\tconst nextIndex = script.content.findIndex((contentItem: any, index: number) => index > i && contentItem.user === 'i')\r\n\t\t\t\t\treturn { responses, nextIndex: nextIndex === -1 ? script.content.length : nextIndex }\r\n\t\t\t\t}\r\n\t\t\t} else if (item.user === 'ai') {\r\n\t\t\t\tscripts.value.forEach((script: any) => {\r\n\t\t\t\t\tif (script.content.length) {\r\n\t\t\t\t\t\tconst contents = script.content\r\n\t\t\t\t\t\tcontents.forEach((item: any) => {\r\n\t\t\t\t\t\t\tif (item.agents) {\r\n\t\t\t\t\t\t\t\tif (item.agents === activeAgentsName.value) {\r\n\t\t\t\t\t\t\t\t\tactiveScript.value = script\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn null\r\n\t}\r\n\r\n\t// 查找匹配的脚本内容\r\n\tconst findMatchingScriptContent = (userInput: string): ScriptMatchResult | null => {\r\n\t\tif (!scripts.value || scripts.value.length === 0) return null\r\n\r\n\t\tconst agentName = activeAgentsName.value ? activeAgentsName.value : localStorage.getItem('activeAgentsName') || ''\r\n\t\tif (agentName) {\r\n\t\t\tconst agentMatchedScripts = scripts.value.filter((script: any) => {\r\n\t\t\t\treturn script.content.some((item: any) => item.agents === agentName)\r\n\t\t\t})\r\n\t\t\tif (agentMatchedScripts.length > 0) {\r\n\t\t\t\tconst fileTypeItems = agentMatchedScripts.flatMap((script: any) => script.content.filter((item: any) => item.file))\r\n\t\t\t\tconst fileTypes = fileTypeItems.map((item: any) => item.file)\r\n\t\t\t\tconst isFileTypeMatched = fileData.value.some((file: any) => {\r\n\t\t\t\t\tconst nameArr = file.name.split('.')\r\n\t\t\t\t\tconst name = nameArr[nameArr.length - 1]\r\n\t\t\t\t\tconst isMatched = fileTypes.includes(name)\r\n\t\t\t\t\treturn isMatched\r\n\t\t\t\t})\r\n\t\t\t\t// 存储匹配的脚本内容下标\r\n\t\t\t\tlet matchedScriptContentIndex = -1\r\n\t\t\t\tif (!activeScript.value && isFileTypeMatched) {\r\n\t\t\t\t\tactiveScript.value = agentMatchedScripts[0]\r\n\t\t\t\t}\r\n\t\t\t\t// 智能体匹配成功,检查用户消息中是否有 file 字段\r\n\t\t\t\tif (isFileTypeMatched) {\r\n\t\t\t\t\t// 遍历所有匹配的脚本\r\n\t\t\t\t\tfor (const script of agentMatchedScripts) {\r\n\t\t\t\t\t\tfor (let i = 0; i < script.content.length; i++) {\r\n\t\t\t\t\t\t\tconst item = script.content[i]\r\n\t\t\t\t\t\t\tif (item.file) {\r\n\t\t\t\t\t\t\t\tconst nameArr = fileData.value.map((file: any) => {\r\n\t\t\t\t\t\t\t\t\tconst fileExtArr = file.name.split('.')\r\n\t\t\t\t\t\t\t\t\treturn fileExtArr[fileExtArr.length - 1]\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\tif (nameArr.includes(item.file)) {\r\n\t\t\t\t\t\t\t\t\tmatchedScriptContentIndex = i\r\n\t\t\t\t\t\t\t\t\tbreak\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (matchedScriptContentIndex !== -1) {\r\n\t\t\t\t\t\t\tbreak\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconst responses: any[] = []\r\n\t\t\t\t\tconst matchContent = agentMatchedScripts[0].content\r\n\t\t\t\t\tfor (let j = matchedScriptContentIndex + 1; j < matchContent.length; j++) {\r\n\t\t\t\t\t\tconst nextItem = matchContent[j]\r\n\t\t\t\t\t\tif (nextItem.user === 'i') {\r\n\t\t\t\t\t\t\tbreak // 遇到下一个用户消息,停止收集\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (nextItem.user === 'ai') {\r\n\t\t\t\t\t\t\tif (nextItem.data && nextItem.type) {\r\n\t\t\t\t\t\t\t\t// 合并 data 和 type 到一条响应中\r\n\t\t\t\t\t\t\t\tresponses.push({\r\n\t\t\t\t\t\t\t\t\t...nextItem,\r\n\t\t\t\t\t\t\t\t\t// 标记需要先流式输出文字,再调用组件\r\n\t\t\t\t\t\t\t\t\tneedSequenceProcessing: true\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tresponses.push(nextItem)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconst nextIndex = matchContent.findIndex((contentItem: any, index: number) => index > matchedScriptContentIndex && contentItem.user === 'i')\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tresponses,\r\n\t\t\t\t\t\tnextIndex: nextIndex === -1 ? matchContent.length : nextIndex\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// agentName 有值但不存在带 agents 的剧本时,不拦截,继续下方通用剧本匹配\r\n\t\t}\r\n\r\n\t\t// 先尝试从当前激活的脚本中查找\r\n\t\tif (activeScript.value) {\r\n\t\t\tconst result = searchInScript(activeScript.value, userInput)\r\n\t\t\tif (result) {\r\n\t\t\t\treturn result\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// 若当前激活脚本未匹配,遍历所有脚本查找\r\n\t\tfor (const script of scripts.value) {\r\n\t\t\tconst result = searchInScript(script, userInput)\r\n\t\t\tif (result) {\r\n\t\t\t\tactiveScript.value = script\r\n\t\t\t\treturn result\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn null\r\n\t}\r\n\r\n\treturn {\r\n\t\tactiveScript,\r\n\t\tfindMatchingScriptContent,\r\n\t\tsearchInScript\r\n\t}\r\n}\r\n"],"names":["script","item"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scriptMatcher.mjs","sources":["../../../../../../../../packages/components/touchchat/src/AiChat/Chat/scriptMatcher.ts"],"sourcesContent":["/**\n * 脚本匹配逻辑\n */\n\nimport { ref, type Ref } from 'vue'\nimport type { Script, FileItem, ScriptMatchResult } from './types'\n\nexport interface ScriptMatcherOptions {\n\tscripts: Ref<any[]>\n\tactiveAgentsName: Ref<string>\n\tfileData: Ref<FileItem[]>\n\tunmatchText: string\n}\n\nexport function createScriptMatcher({ scripts, activeAgentsName, fileData }: ScriptMatcherOptions) {\n\tconst activeScript = ref<Script | null>(null)\n\n\t// 在脚本中搜索匹配内容\n\tconst searchInScript = (script: Script, userInput: string): ScriptMatchResult | null => {\n\t\tfor (let i = 0; i < script.content.length; i++) {\n\t\t\tconst item = script.content[i]\n\t\t\tif (item.user === 'i') {\n\t\t\t\t// 检查 data 是否匹配\n\t\t\t\tconst isDataMatch = item.data && userInput.includes(item.data)\n\t\t\t\t// 检查 alias 是否匹配\n\t\t\t\tlet isSubDataMatch = false\n\t\t\t\tif (item.alias) {\n\t\t\t\t\tif (Array.isArray(item.alias)) {\n\t\t\t\t\t\tisSubDataMatch = item.alias.some((subItem: string) => subItem === userInput)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (isDataMatch || isSubDataMatch) {\n\t\t\t\t\t// 收集 AI 回复\n\t\t\t\t\tconst responses: any[] = []\n\t\t\t\t\t// 从匹配位置的下一个元素开始遍历\n\t\t\t\t\tfor (let j = i + 1; j < script.content.length; j++) {\n\t\t\t\t\t\tconst nextItem = script.content[j]\n\t\t\t\t\t\tif (nextItem.user === 'i') {\n\t\t\t\t\t\t\tbreak // 遇到下一个用户消息,停止收集\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (nextItem.user === 'ai') {\n\t\t\t\t\t\t\tif (nextItem.data && nextItem.type) {\n\t\t\t\t\t\t\t\t// 合并 data 和 type 到一条响应中\n\t\t\t\t\t\t\t\tresponses.push({\n\t\t\t\t\t\t\t\t\t...nextItem,\n\t\t\t\t\t\t\t\t\t// 标记需要先流式输出文字,再调用组件\n\t\t\t\t\t\t\t\t\tneedSequenceProcessing: true\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tresponses.push(nextItem)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// 查找下一个用户消息的索引\n\t\t\t\t\tconst nextIndex = script.content.findIndex((contentItem: any, index: number) => index > i && contentItem.user === 'i')\n\t\t\t\t\treturn { responses, nextIndex: nextIndex === -1 ? script.content.length : nextIndex }\n\t\t\t\t}\n\t\t\t} else if (item.user === 'ai') {\n\t\t\t\tscripts.value.forEach((script: any) => {\n\t\t\t\t\tif (script.content.length) {\n\t\t\t\t\t\tconst contents = script.content\n\t\t\t\t\t\tcontents.forEach((item: any) => {\n\t\t\t\t\t\t\tif (item.agents) {\n\t\t\t\t\t\t\t\tif (item.agents === activeAgentsName.value) {\n\t\t\t\t\t\t\t\t\tactiveScript.value = script\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn null\n\t}\n\n\t// 查找匹配的脚本内容\n\tconst findMatchingScriptContent = (userInput: string): ScriptMatchResult | null => {\n\t\tif (!scripts.value || scripts.value.length === 0) return null\n\n\t\tconst agentName = activeAgentsName.value ? activeAgentsName.value : localStorage.getItem('activeAgentsName') || ''\n\t\tif (agentName) {\n\t\t\tconst agentMatchedScripts = scripts.value.filter((script: any) => {\n\t\t\t\treturn script.content.some((item: any) => item.agents === agentName)\n\t\t\t})\n\t\t\tif (agentMatchedScripts.length > 0) {\n\t\t\t\tconst fileTypeItems = agentMatchedScripts.flatMap((script: any) => script.content.filter((item: any) => item.file))\n\t\t\t\tconst fileTypes = fileTypeItems.map((item: any) => item.file)\n\t\t\t\tconst isFileTypeMatched = fileData.value.some((file: any) => {\n\t\t\t\t\tconst nameArr = file.name.split('.')\n\t\t\t\t\tconst name = nameArr[nameArr.length - 1]\n\t\t\t\t\tconst isMatched = fileTypes.includes(name)\n\t\t\t\t\treturn isMatched\n\t\t\t\t})\n\t\t\t\t// 存储匹配的脚本内容下标\n\t\t\t\tlet matchedScriptContentIndex = -1\n\t\t\t\tif (!activeScript.value && isFileTypeMatched) {\n\t\t\t\t\tactiveScript.value = agentMatchedScripts[0]\n\t\t\t\t}\n\t\t\t\t// 智能体匹配成功,检查用户消息中是否有 file 字段\n\t\t\t\tif (isFileTypeMatched) {\n\t\t\t\t\t// 遍历所有匹配的脚本\n\t\t\t\t\tfor (const script of agentMatchedScripts) {\n\t\t\t\t\t\tfor (let i = 0; i < script.content.length; i++) {\n\t\t\t\t\t\t\tconst item = script.content[i]\n\t\t\t\t\t\t\tif (item.file) {\n\t\t\t\t\t\t\t\tconst nameArr = fileData.value.map((file: any) => {\n\t\t\t\t\t\t\t\t\tconst fileExtArr = file.name.split('.')\n\t\t\t\t\t\t\t\t\treturn fileExtArr[fileExtArr.length - 1]\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\tif (nameArr.includes(item.file)) {\n\t\t\t\t\t\t\t\t\tmatchedScriptContentIndex = i\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (matchedScriptContentIndex !== -1) {\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst responses: any[] = []\n\t\t\t\t\tconst matchContent = agentMatchedScripts[0].content\n\t\t\t\t\tfor (let j = matchedScriptContentIndex + 1; j < matchContent.length; j++) {\n\t\t\t\t\t\tconst nextItem = matchContent[j]\n\t\t\t\t\t\tif (nextItem.user === 'i') {\n\t\t\t\t\t\t\tbreak // 遇到下一个用户消息,停止收集\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (nextItem.user === 'ai') {\n\t\t\t\t\t\t\tif (nextItem.data && nextItem.type) {\n\t\t\t\t\t\t\t\t// 合并 data 和 type 到一条响应中\n\t\t\t\t\t\t\t\tresponses.push({\n\t\t\t\t\t\t\t\t\t...nextItem,\n\t\t\t\t\t\t\t\t\t// 标记需要先流式输出文字,再调用组件\n\t\t\t\t\t\t\t\t\tneedSequenceProcessing: true\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tresponses.push(nextItem)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst nextIndex = matchContent.findIndex((contentItem: any, index: number) => index > matchedScriptContentIndex && contentItem.user === 'i')\n\t\t\t\t\treturn {\n\t\t\t\t\t\tresponses,\n\t\t\t\t\t\tnextIndex: nextIndex === -1 ? matchContent.length : nextIndex\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// agentName 有值但不存在带 agents 的剧本时,不拦截,继续下方通用剧本匹配\n\t\t}\n\n\t\t// 先尝试从当前激活的脚本中查找\n\t\tif (activeScript.value) {\n\t\t\tconst result = searchInScript(activeScript.value, userInput)\n\t\t\tif (result) {\n\t\t\t\treturn result\n\t\t\t}\n\t\t}\n\n\t\t// 若当前激活脚本未匹配,遍历所有脚本查找\n\t\tfor (const script of scripts.value) {\n\t\t\tconst result = searchInScript(script, userInput)\n\t\t\tif (result) {\n\t\t\t\tactiveScript.value = script\n\t\t\t\treturn result\n\t\t\t}\n\t\t}\n\n\t\treturn null\n\t}\n\n\treturn {\n\t\tactiveScript,\n\t\tfindMatchingScriptContent,\n\t\tsearchInScript\n\t}\n}\n"],"names":["script","item"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.mjs","sources":["../../../../../../../../packages/components/touchchat/src/AiChat/Chat/types.ts"],"sourcesContent":["/**\
|
|
1
|
+
{"version":3,"file":"types.mjs","sources":["../../../../../../../../packages/components/touchchat/src/AiChat/Chat/types.ts"],"sourcesContent":["/**\n * TouchChat 类型定义\n */\n\nexport enum ThinkStatus {\n\tTHINKING = 'thinking',\n\tCOMPLETED = 'completed',\n\tSTOPPED = 'stopped'\n}\n\nexport interface ChatMessage {\n\tchatId?: string\n\tuser: 'u' | 'ai' | string\n\ttype: string\n\tcontent: string\n\tisChating?: boolean\n\tthinkContent?: string\n\treasoningContent?: string\n\tisLiked?: boolean\n\tisDisliked?: boolean\n\tisEditing?: boolean\n\teditContent?: string\n\tthinkStatus?: ThinkStatus\n\tthinkStartTime?: number\n\tthinkTime?: number\n\tthinkEndTime?: number\n\tisShowLike?: boolean\n\tisShowCopy?: boolean\n\tisWithDraw?: boolean\n\tcomponentName?: string\n\ttypeFlag?: string\n\tfiles?: FileItem[]\n\thtml?: string\n\tisError?: boolean\n\tauto?: boolean\n\tneedSequenceProcessing?: boolean\n\tneedSequenceType?: string\n\tstop?: boolean\n\tmsgList: any[]\n\tdataObj?: any\n\tlikeList?: any[]\n\tselecting?: boolean\n}\n\nexport interface ChatMsgList {\n\t[key: string]: any\n}\n\nexport interface AgentsItem {\n\tname: string\n\tintro: string\n\t[key: string]: any\n}\n\nexport interface ScriptContentItem {\n\tuser: 'i' | 'ai'\n\tdata?: string\n\ttype?: string\n\tagents?: string\n\tfile?: string\n\talias?: string | string[]\n\t[key: string]: any\n}\n\nexport interface Script {\n\tcontent: ScriptContentItem[]\n\t[key: string]: any\n}\n\nexport interface ModuleConfig {\n\taction?: () => string\n\theaders?: () => Record<string, string>\n\tbody?: () => Record<string, any>\n\trespoKey?: () => RespoKeyConfig\n\tname?: string\n}\n\nexport interface RespoKeyConfig {\n\tcontent: string\n\tcategory: string\n\tcontentCategory?: string\n\tall?: string\n\tallCategory?: string\n}\n\nexport interface ModuleItem {\n\tname?: string\n\tconfig?: ModuleConfig\n\t[key: string]: any\n}\n\nexport interface FileItem {\n\tid?: string\n\tfile?: File\n\tname: string\n\tfileType: string\n\tfileSize: string\n\tlastModified: number\n\tpreview?: string\n\tbase64?: string\n\t// 文件上传相关字段\n\tisUploading?: boolean\n\tuploadProgress?: number\n\tuploadSuccess?: boolean\n\tuploadError?: boolean\n\t// 上传成功后服务端返回的文件地址\n\turl?: string\n\t[key: string]: any\n}\n\nexport interface RenderData {\n\tmainContent: string\n\tthinkContent: string\n\treasoningContent: string\n}\n\nexport enum MessageAction {\n\tCOPY = 'copy',\n\tEDIT = 'edit',\n\tDELETE = 'delete',\n\tRETRY = 'retry',\n\tLIKE = 'like',\n\tDISLIKE = 'dislike',\n\tWITHDRAW = 'withDraw'\n}\n\nexport interface ResultItem {\n\tallAiContent?: string\n\t[key: string]: any\n}\n\nexport interface MessageProcessor {\n\tmessageQueue: ChatMessage[]\n\tisProcessing: boolean\n\tcurrentMessage: ChatMessage | null\n\tprocessNextMessage: () => void\n\thandleMessageComplete: (chatId: string) => void\n}\n\nexport interface ScriptMatchResult {\n\tresponses: any[]\n\tnextIndex: number\n}\n\nexport interface MessageActions {\n\tuser: string[]\n\tai: string[]\n}\n"],"names":["ThinkStatus","MessageAction"],"mappings":"AAIY,IAAA,WAAA,qBAAAA,YAAL,KAAA;AACN,EAAAA,aAAA,UAAW,CAAA,GAAA,UAAA,CAAA;AACX,EAAAA,aAAA,WAAY,CAAA,GAAA,WAAA,CAAA;AACZ,EAAAA,aAAA,SAAU,CAAA,GAAA,SAAA,CAAA;AAHC,EAAAA,OAAAA,YAAAA,CAAAA;AAAA,CAAA,EAAA,WAAA,IAAA,EAAA,EAAA;AAgHA,IAAA,aAAA,qBAAAC,cAAL,KAAA;AACN,EAAAA,eAAA,MAAO,CAAA,GAAA,MAAA,CAAA;AACP,EAAAA,eAAA,MAAO,CAAA,GAAA,MAAA,CAAA;AACP,EAAAA,eAAA,QAAS,CAAA,GAAA,QAAA,CAAA;AACT,EAAAA,eAAA,OAAQ,CAAA,GAAA,OAAA,CAAA;AACR,EAAAA,eAAA,MAAO,CAAA,GAAA,MAAA,CAAA;AACP,EAAAA,eAAA,SAAU,CAAA,GAAA,SAAA,CAAA;AACV,EAAAA,eAAA,UAAW,CAAA,GAAA,UAAA,CAAA;AAPA,EAAAA,OAAAA,cAAAA,CAAAA;AAAA,CAAA,EAAA,aAAA,IAAA,EAAA;;;;"}
|
|
@@ -516,6 +516,9 @@ function useChat({ props, emit, scripts, unmatchText, modules, afterSend, sendMe
|
|
|
516
516
|
if (reasoningContentRef.value[index])
|
|
517
517
|
reasoningContentRef.value[index].innerHTML = "";
|
|
518
518
|
setTimeout(() => {
|
|
519
|
+
const retryFiles = userMessage.files || [];
|
|
520
|
+
fileData.value = retryFiles;
|
|
521
|
+
sendMessageInject(userMessage.content || "", retryFiles);
|
|
519
522
|
openSSE(userMessage.content || "", index);
|
|
520
523
|
}, 50);
|
|
521
524
|
});
|
|
@@ -562,6 +565,9 @@ function useChat({ props, emit, scripts, unmatchText, modules, afterSend, sendMe
|
|
|
562
565
|
}
|
|
563
566
|
const insertPosition = index + 1;
|
|
564
567
|
nextTick(() => {
|
|
568
|
+
const editedFiles = message.files || [];
|
|
569
|
+
fileData.value = editedFiles;
|
|
570
|
+
sendMessageInject(newContent, editedFiles);
|
|
565
571
|
openSSE(newContent, insertPosition);
|
|
566
572
|
});
|
|
567
573
|
emit("sendMessage", chatList.value);
|