@touchvue/chat 1.0.0-beta.53 → 1.0.0-beta.55
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.3.0 → dompurify@3.4.3}/node_modules/dompurify/dist/purify.es.mjs +299 -143
- package/es/node_modules/.pnpm/dompurify@3.4.3/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/AudioFile.vue.mjs +7 -0
- package/es/packages/components/touchchat/component/AudioFile.vue.mjs.map +1 -0
- package/es/packages/components/touchchat/component/AudioFile.vue2.mjs +111 -0
- package/es/packages/components/touchchat/component/AudioFile.vue2.mjs.map +1 -0
- 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 +56 -5
- 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 +52 -10
- 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/component/VoiceView.vue2.mjs +13 -4
- package/es/packages/components/touchchat/component/VoiceView.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 +11 -8
- 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/ChatInput.vue2.mjs +16 -11
- 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/MessageViewed.vue.mjs +33 -0
- package/es/packages/components/touchchat/src/AiChat/MessageViewed.vue.mjs.map +1 -0
- 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 +36 -0
- 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 +127 -75
- 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.3.0 → dompurify@3.4.3}/node_modules/dompurify/dist/purify.es.js +299 -143
- package/lib/node_modules/.pnpm/dompurify@3.4.3/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/AudioFile.vue.js +11 -0
- package/lib/packages/components/touchchat/component/AudioFile.vue.js.map +1 -0
- package/lib/packages/components/touchchat/component/AudioFile.vue2.js +115 -0
- package/lib/packages/components/touchchat/component/AudioFile.vue2.js.map +1 -0
- 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 +55 -4
- 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 +51 -9
- 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/component/VoiceView.vue2.js +13 -4
- package/lib/packages/components/touchchat/component/VoiceView.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 +11 -8
- 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/ChatInput.vue2.js +16 -11
- 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/MessageViewed.vue.js +37 -0
- package/lib/packages/components/touchchat/src/AiChat/MessageViewed.vue.js.map +1 -0
- 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 +36 -0
- 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 +126 -74
- 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/theme/components/index.css +167 -18
- package/theme/font/iconfont.woff +0 -0
- package/theme/font/iconfont.woff2 +0 -0
- package/theme/img/file/doc.png +0 -0
- package/theme/img/file/docx.png +0 -0
- package/theme/img/file/gif.png +0 -0
- package/theme/img/file/html.png +0 -0
- package/theme/img/file/jpg.png +0 -0
- package/theme/img/file/mp3.png +0 -0
- package/theme/img/file/mp4.png +0 -0
- package/theme/img/file/music.png +0 -0
- package/theme/img/file/pdf.png +0 -0
- package/theme/img/file/png.png +0 -0
- package/theme/img/file/ppt.png +0 -0
- package/theme/img/file/pptx.png +0 -0
- package/theme/img/file/txt.png +0 -0
- package/theme/img/file/unknown.png +0 -0
- package/theme/img/file/xls.png +0 -0
- package/theme/img/file/xlsx.png +0 -0
- package/theme/index.css +167 -18
- package/theme/skin/default.css +167 -18
- package/es/node_modules/.pnpm/dompurify@3.3.0/node_modules/dompurify/dist/purify.es.mjs.map +0 -1
- package/lib/node_modules/.pnpm/dompurify@3.3.0/node_modules/dompurify/dist/purify.es.js.map +0 -1
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var vue = require('vue');
|
|
6
|
+
|
|
7
|
+
var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
8
|
+
__name: "AudioFile",
|
|
9
|
+
props: {
|
|
10
|
+
item: {},
|
|
11
|
+
index: {}
|
|
12
|
+
},
|
|
13
|
+
setup(__props) {
|
|
14
|
+
const props = __props;
|
|
15
|
+
const isPlaying = vue.ref(false);
|
|
16
|
+
const audioElement = vue.ref(null);
|
|
17
|
+
const currentDuration = vue.ref(0);
|
|
18
|
+
const formatDuration = vue.computed(() => {
|
|
19
|
+
const duration = Number(props.item.duration) || 0;
|
|
20
|
+
if (duration < 1) {
|
|
21
|
+
return "<1s";
|
|
22
|
+
}
|
|
23
|
+
if (duration < 60) {
|
|
24
|
+
return `${Math.floor(duration)}s`;
|
|
25
|
+
}
|
|
26
|
+
const minutes = Math.floor(duration / 60);
|
|
27
|
+
const remainingSeconds = Math.floor(duration % 60);
|
|
28
|
+
return `${minutes}:${remainingSeconds.toString().padStart(2, "0")}`;
|
|
29
|
+
});
|
|
30
|
+
const togglePlay = async () => {
|
|
31
|
+
if (!audioElement.value) {
|
|
32
|
+
let audioUrl = "";
|
|
33
|
+
if (props.item.base64) {
|
|
34
|
+
audioUrl = props.item.base64;
|
|
35
|
+
} else if (props.item.url) {
|
|
36
|
+
audioUrl = props.item.url;
|
|
37
|
+
} else if (props.item.file) {
|
|
38
|
+
audioUrl = URL.createObjectURL(props.item.file);
|
|
39
|
+
} else {
|
|
40
|
+
console.error("\u97F3\u9891\u6587\u4EF6\u4E0D\u5B58\u5728");
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
audioElement.value = new Audio(audioUrl);
|
|
44
|
+
audioElement.value.onended = () => {
|
|
45
|
+
isPlaying.value = false;
|
|
46
|
+
currentDuration.value = 0;
|
|
47
|
+
};
|
|
48
|
+
audioElement.value.onerror = (error) => {
|
|
49
|
+
console.error("\u97F3\u9891\u64AD\u653E\u5931\u8D25:", error);
|
|
50
|
+
isPlaying.value = false;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
if (isPlaying.value) {
|
|
54
|
+
audioElement.value.pause();
|
|
55
|
+
isPlaying.value = false;
|
|
56
|
+
} else {
|
|
57
|
+
try {
|
|
58
|
+
await audioElement.value.play();
|
|
59
|
+
isPlaying.value = true;
|
|
60
|
+
} catch (error) {
|
|
61
|
+
console.error("\u64AD\u653E\u5931\u8D25:", error);
|
|
62
|
+
isPlaying.value = false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
vue.onBeforeUnmount(() => {
|
|
67
|
+
if (audioElement.value) {
|
|
68
|
+
audioElement.value.pause();
|
|
69
|
+
audioElement.value = null;
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
return (_ctx, _cache) => {
|
|
73
|
+
return vue.openBlock(), vue.createElementBlock("div", {
|
|
74
|
+
class: "touchchat-user-bubble is-link",
|
|
75
|
+
onClick: togglePlay
|
|
76
|
+
}, [
|
|
77
|
+
vue.createElementVNode("div", { class: "touchchat-audio" }, [
|
|
78
|
+
vue.createElementVNode("div", { class: "touchchat-audio-icon" }, [
|
|
79
|
+
!isPlaying.value ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
80
|
+
key: 0,
|
|
81
|
+
class: "touchchat-audio-icon-play"
|
|
82
|
+
})) : (vue.openBlock(), vue.createElementBlock("div", {
|
|
83
|
+
key: 1,
|
|
84
|
+
class: "touchchat-audio-icon-pause"
|
|
85
|
+
}))
|
|
86
|
+
]),
|
|
87
|
+
vue.createElementVNode(
|
|
88
|
+
"div",
|
|
89
|
+
{
|
|
90
|
+
class: vue.normalizeClass(["touchchat-audio-wave", { "is-playing": isPlaying.value }])
|
|
91
|
+
},
|
|
92
|
+
[
|
|
93
|
+
vue.createElementVNode("span", { class: "touchchat-audio-wave-bar" }),
|
|
94
|
+
vue.createElementVNode("span", { class: "touchchat-audio-wave-bar" }),
|
|
95
|
+
vue.createElementVNode("span", { class: "touchchat-audio-wave-bar" }),
|
|
96
|
+
vue.createElementVNode("span", { class: "touchchat-audio-wave-bar" })
|
|
97
|
+
],
|
|
98
|
+
2
|
|
99
|
+
/* CLASS */
|
|
100
|
+
),
|
|
101
|
+
vue.createElementVNode(
|
|
102
|
+
"div",
|
|
103
|
+
{ class: "touchchat-audio-duration" },
|
|
104
|
+
vue.toDisplayString(formatDuration.value),
|
|
105
|
+
1
|
|
106
|
+
/* TEXT */
|
|
107
|
+
)
|
|
108
|
+
])
|
|
109
|
+
]);
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
exports.default = _sfc_main;
|
|
115
|
+
//# sourceMappingURL=AudioFile.vue2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioFile.vue2.js","sources":["../../../../../../packages/components/touchchat/component/AudioFile.vue"],"sourcesContent":["<template>\r\n\t<div class=\"touchchat-user-bubble is-link\" @click=\"togglePlay\">\r\n\t\t<div class=\"touchchat-audio\">\r\n\t\t\t<div class=\"touchchat-audio-icon\">\r\n\t\t\t\t<div v-if=\"!isPlaying\" class=\"touchchat-audio-icon-play\"></div>\r\n\t\t\t\t<div v-else class=\"touchchat-audio-icon-pause\"></div>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"touchchat-audio-wave\" :class=\"{ 'is-playing': isPlaying }\">\r\n\t\t\t\t<span class=\"touchchat-audio-wave-bar\"></span>\r\n\t\t\t\t<span class=\"touchchat-audio-wave-bar\"></span>\r\n\t\t\t\t<span class=\"touchchat-audio-wave-bar\"></span>\r\n\t\t\t\t<span class=\"touchchat-audio-wave-bar\"></span>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"touchchat-audio-duration\">{{ formatDuration }}</div>\r\n\t\t</div>\r\n\t</div>\r\n</template>\r\n\r\n<script lang=\"ts\" setup>\r\nimport { ref, computed, onBeforeUnmount } from 'vue'\r\nimport type { FileItem } from '../src/AiChat/Chat/types'\r\n\r\nconst props = defineProps<{\r\n\titem: FileItem\r\n\tindex: number\r\n}>()\r\n\r\nconst isPlaying = ref(false)\r\nconst audioElement = ref<HTMLAudioElement | null>(null)\r\nconst currentDuration = ref(0)\r\n\r\n// 格式化时长显示\r\nconst formatDuration = computed(() => {\r\n\t// duration 现在是秒数(Number 类型)\r\n\tconst duration = Number(props.item.duration) || 0\r\n\tif (duration < 1) {\r\n\t\treturn '<1s'\r\n\t}\r\n\tif (duration < 60) {\r\n\t\treturn `${Math.floor(duration)}s`\r\n\t}\r\n\tconst minutes = Math.floor(duration / 60)\r\n\tconst remainingSeconds = Math.floor(duration % 60)\r\n\treturn `${minutes}:${remainingSeconds.toString().padStart(2, '0')}`\r\n})\r\n\r\n// 切换播放/暂停\r\nconst togglePlay = async () => {\r\n\tif (!audioElement.value) {\r\n\t\t// 优先使用 base64,其次 url,最后使用 file\r\n\t\tlet audioUrl = ''\r\n\t\tif (props.item.base64) {\r\n\t\t\taudioUrl = props.item.base64\r\n\t\t} else if (props.item.url) {\r\n\t\t\taudioUrl = props.item.url\r\n\t\t} else if (props.item.file) {\r\n\t\t\taudioUrl = URL.createObjectURL(props.item.file)\r\n\t\t} else {\r\n\t\t\tconsole.error('音频文件不存在')\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\taudioElement.value = new Audio(audioUrl)\r\n\r\n\t\taudioElement.value.onended = () => {\r\n\t\t\tisPlaying.value = false\r\n\t\t\tcurrentDuration.value = 0\r\n\t\t}\r\n\r\n\t\taudioElement.value.onerror = error => {\r\n\t\t\tconsole.error('音频播放失败:', error)\r\n\t\t\tisPlaying.value = false\r\n\t\t}\r\n\t}\r\n\r\n\tif (isPlaying.value) {\r\n\t\taudioElement.value.pause()\r\n\t\tisPlaying.value = false\r\n\t} else {\r\n\t\ttry {\r\n\t\t\tawait audioElement.value.play()\r\n\t\t\tisPlaying.value = true\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error('播放失败:', error)\r\n\t\t\tisPlaying.value = false\r\n\t\t}\r\n\t}\r\n}\r\n\r\n// 组件卸载时清理\r\nonBeforeUnmount(() => {\r\n\tif (audioElement.value) {\r\n\t\taudioElement.value.pause()\r\n\t\taudioElement.value = null\r\n\t}\r\n})\r\n</script>\r\n"],"names":["ref","computed","onBeforeUnmount","_createElementBlock","_createElementVNode","_normalizeClass"],"mappings":"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"}
|
|
@@ -107,7 +107,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
107
107
|
(vue.openBlock(true), vue.createElementBlock(
|
|
108
108
|
vue.Fragment,
|
|
109
109
|
null,
|
|
110
|
-
vue.renderList(
|
|
110
|
+
vue.renderList(__props.fileList, (item, index) => {
|
|
111
111
|
return vue.openBlock(), vue.createElementBlock(
|
|
112
112
|
vue.Fragment,
|
|
113
113
|
{
|
|
@@ -118,7 +118,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
118
118
|
key: 0,
|
|
119
119
|
item,
|
|
120
120
|
index,
|
|
121
|
-
"has-colse":
|
|
121
|
+
"has-colse": __props.hasColse,
|
|
122
122
|
onColse: handleColse
|
|
123
123
|
}, null, 8, ["item", "index", "has-colse"])) : item.fileType.includes("mp4") ? (vue.openBlock(), vue.createBlock(VideoFile.default, {
|
|
124
124
|
key: 1,
|
|
@@ -128,7 +128,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
128
128
|
key: 2,
|
|
129
129
|
item,
|
|
130
130
|
index,
|
|
131
|
-
"has-colse":
|
|
131
|
+
"has-colse": __props.hasColse,
|
|
132
132
|
onColse: handleColse
|
|
133
133
|
}, null, 8, ["item", "index", "has-colse"]))
|
|
134
134
|
],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileContent.vue2.js","sources":["../../../../../../packages/components/touchchat/component/FileContent.vue"],"sourcesContent":["<template>\n\t<div class=\"file-content\">\n\t\t<div ref=\"scrollContainer\" class=\"file-content-scroll\">\n\t\t\t<template v-for=\"(item, index) in fileList\" :key=\"item.id\">\n\t\t\t\t<ImageFile v-if=\"item.fileType.includes('image')\" :item=\"item\" :index=\"index\" :has-colse=\"hasColse\" @colse=\"handleColse\" />\n\t\t\t\t<VideoFile v-else-if=\"item.fileType.includes('mp4')\" :item=\"item\" :index=\"index\" />\n\t\t\t\t<PDFFile v-else :item=\"item\" :index=\"index\" :has-colse=\"hasColse\" @colse=\"handleColse\" />\n\t\t\t</template>\n\t\t</div>\n\t\t<div v-show=\"showRightTip\" class=\"file-content-right-tip\">\n\t\t\t<div class=\"file-content-svg\" @click=\"scrollRightFn\">\n\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"5\" height=\"9\" viewBox=\"0 0 5 9\" fill=\"none\">\n\t\t\t\t\t<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M1.01036 0.877808L4.5968 4.46425C4.80562 4.67307 4.80562 5.01164 4.5968 5.22046L1.01036 8.8069L0.25415 8.05069L3.46248 4.84235L0.25415 1.63402L1.01036 0.877808Z\" fill=\"#1D2129\" />\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t</div>\n\t\t<div v-show=\"showLeftTip\" class=\"file-content-left-tip\">\n\t\t\t<div class=\"file-content-svg\" @click=\"scrollLeftFn\">\n\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"5\" height=\"9\" viewBox=\"0 0 5 9\" fill=\"none\">\n\t\t\t\t\t<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M1.01036 0.877808L4.5968 4.46425C4.80562 4.67307 4.80562 5.01164 4.5968 5.22046L1.01036 8.8069L0.25415 8.05069L3.46248 4.84235L0.25415 1.63402L1.01036 0.877808Z\" fill=\"#1D2129\" />\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n<script lang=\"ts\" setup>\nimport ImageFile from './ImageFile.vue'\nimport PDFFile from './PDFFile.vue'\nimport VideoFile from './VideoFile.vue'\nimport { ref, onMounted, onUnmounted } from 'vue'\nimport type { FileItem } from '../src/AiChat/Chat/types'\n\nconst showRightTip = ref(false)\nconst showLeftTip = ref(false)\nconst scrollDistance = ref(256) // 每次滚动的距离\nconst scrollContainer = ref<HTMLDivElement | null>(null)\n\nconst props = defineProps<{\n\tfileList: FileItem[]\n\thasColse: boolean\n\ttype: string\n}>()\nconst emits = defineEmits<{\n\t(e: 'colse', id: string): void\n\t(e: 'userMessageFileList', value: FileItem, index: number): void\n}>()\n\nlet edgeDetectionDebounce: NodeJS.Timeout | null = null\n// 处理鼠标滚轮事件,将纵向滚动转为横向滚动\nconst handleWheel = (e: WheelEvent) => {\n\tif (!scrollContainer.value) return\n\n\t// 阻止默认的纵向滚动\n\te.preventDefault()\n\tshowRightTip.value = true\n\tshowLeftTip.value = true\n\tconst { scrollLeft, clientWidth, scrollWidth } = scrollContainer.value\n\n\t// 左边缘检测(允许1px的误差)\n\tif (scrollLeft <= 1) {\n\t\tshowLeftTip.value = false\n\t}\n\n\t// 右边缘检测(允许1px的误差)\n\tif (scrollLeft + clientWidth >= scrollWidth - 1) {\n\t\tshowRightTip.value = false\n\t}\n\n\t// 计算滚动距离,添加一些乘数使滚动更自然\n\tconst scrollAmount = e.deltaY * 0.8\n\n\t// 平滑滚动\n\tscrollContainer.value.scrollBy({\n\t\tleft: scrollAmount,\n\t\tbehavior: 'smooth'\n\t})\n}\n\nconst handleScroll = (e: WheelEvent) => {\n\t// 防抖处理,避免滚动过程中频繁触发\n\tif (edgeDetectionDebounce) {\n\t\tclearTimeout(edgeDetectionDebounce)\n\t}\n\n\tedgeDetectionDebounce = setTimeout(() => {\n\t\thandleWheel(e)\n\t}, 50) // 50ms的防抖延迟\n}\n\n// 向左滚动(模拟向上滚轮事件)\nconst scrollLeftFn = () => {\n\tif (!showLeftTip.value || !scrollContainer.value) return\n\n\t// 模拟向上滚动的滚轮事件(deltaY 为负值)\n\tconst mockEvent = new WheelEvent('wheel', {\n\t\tdeltaY: -scrollDistance.value, // 负值表示向上滚动,我们将其转换为向左滚动\n\t\tbubbles: true,\n\t\tcancelable: true\n\t})\n\n\t// 复用 handleWheel 方法处理模拟事件\n\thandleWheel(mockEvent)\n}\n\n// 向右滚动(模拟向下滚轮事件)\nconst scrollRightFn = () => {\n\tif (!showRightTip.value || !scrollContainer.value) return\n\n\t// 模拟向下滚动的滚轮事件(deltaY 为正值)\n\tconst mockEvent = new WheelEvent('wheel', {\n\t\tdeltaY: scrollDistance.value, // 正值表示向下滚动,我们将其转换为向右滚动\n\t\tbubbles: true,\n\t\tcancelable: true\n\t})\n\n\t// 复用 handleWheel 方法处理模拟事件\n\thandleWheel(mockEvent)\n}\n\nconst handleColse = (id: string) => {\n\temits('colse', id)\n}\n\nconst init = () => {\n\tif (props.type === 'UserMessage' && props.fileList.length > 0) {\n\t\tconst list = props.fileList\n\t\tlist.forEach((item, index) => {\n\t\t\temits('userMessageFileList', item, index)\n\t\t})\n\t}\n}\n\nonMounted(() => {\n\tif (scrollContainer.value) {\n\t\t// 添加事件监听,passive: false 允许我们调用 preventDefault\n\t\tscrollContainer.value.addEventListener('wheel', handleScroll, { passive: false })\n\t}\n\tinit()\n})\n\nonUnmounted(() => {\n\tif (scrollContainer.value) {\n\t\tscrollContainer.value.removeEventListener('wheel', handleScroll)\n\t}\n})\n</script>\n"],"names":["ref","onMounted","onUnmounted","_createElementBlock","_createElementVNode","_openBlock","_Fragment","
|
|
1
|
+
{"version":3,"file":"FileContent.vue2.js","sources":["../../../../../../packages/components/touchchat/component/FileContent.vue"],"sourcesContent":["<template>\r\n\t<div class=\"file-content\">\r\n\t\t<div ref=\"scrollContainer\" class=\"file-content-scroll\">\r\n\t\t\t<template v-for=\"(item, index) in fileList\" :key=\"item.id\">\r\n\t\t\t\t<ImageFile v-if=\"item.fileType.includes('image')\" :item=\"item\" :index=\"index\" :has-colse=\"hasColse\" @colse=\"handleColse\" />\r\n\t\t\t\t<VideoFile v-else-if=\"item.fileType.includes('mp4')\" :item=\"item\" :index=\"index\" />\r\n\t\t\t\t<PDFFile v-else :item=\"item\" :index=\"index\" :has-colse=\"hasColse\" @colse=\"handleColse\" />\r\n\t\t\t</template>\r\n\t\t</div>\r\n\t\t<div v-show=\"showRightTip\" class=\"file-content-right-tip\">\r\n\t\t\t<div class=\"file-content-svg\" @click=\"scrollRightFn\">\r\n\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"5\" height=\"9\" viewBox=\"0 0 5 9\" fill=\"none\">\r\n\t\t\t\t\t<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M1.01036 0.877808L4.5968 4.46425C4.80562 4.67307 4.80562 5.01164 4.5968 5.22046L1.01036 8.8069L0.25415 8.05069L3.46248 4.84235L0.25415 1.63402L1.01036 0.877808Z\" fill=\"#1D2129\" />\r\n\t\t\t\t</svg>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div v-show=\"showLeftTip\" class=\"file-content-left-tip\">\r\n\t\t\t<div class=\"file-content-svg\" @click=\"scrollLeftFn\">\r\n\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"5\" height=\"9\" viewBox=\"0 0 5 9\" fill=\"none\">\r\n\t\t\t\t\t<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M1.01036 0.877808L4.5968 4.46425C4.80562 4.67307 4.80562 5.01164 4.5968 5.22046L1.01036 8.8069L0.25415 8.05069L3.46248 4.84235L0.25415 1.63402L1.01036 0.877808Z\" fill=\"#1D2129\" />\r\n\t\t\t\t</svg>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</template>\r\n<script lang=\"ts\" setup>\r\nimport ImageFile from './ImageFile.vue'\r\nimport PDFFile from './PDFFile.vue'\r\nimport VideoFile from './VideoFile.vue'\r\nimport { ref, onMounted, onUnmounted } from 'vue'\r\nimport type { FileItem } from '../src/AiChat/Chat/types'\r\n\r\nconst showRightTip = ref(false)\r\nconst showLeftTip = ref(false)\r\nconst scrollDistance = ref(256) // 每次滚动的距离\r\nconst scrollContainer = ref<HTMLDivElement | null>(null)\r\n\r\nconst props = defineProps<{\r\n\tfileList: FileItem[]\r\n\thasColse: boolean\r\n\ttype: string\r\n}>()\r\nconst emits = defineEmits<{\r\n\t(e: 'colse', id: string): void\r\n\t(e: 'userMessageFileList', value: FileItem, index: number): void\r\n}>()\r\n\r\nlet edgeDetectionDebounce: NodeJS.Timeout | null = null\r\n// 处理鼠标滚轮事件,将纵向滚动转为横向滚动\r\nconst handleWheel = (e: WheelEvent) => {\r\n\tif (!scrollContainer.value) return\r\n\r\n\t// 阻止默认的纵向滚动\r\n\te.preventDefault()\r\n\tshowRightTip.value = true\r\n\tshowLeftTip.value = true\r\n\tconst { scrollLeft, clientWidth, scrollWidth } = scrollContainer.value\r\n\r\n\t// 左边缘检测(允许1px的误差)\r\n\tif (scrollLeft <= 1) {\r\n\t\tshowLeftTip.value = false\r\n\t}\r\n\r\n\t// 右边缘检测(允许1px的误差)\r\n\tif (scrollLeft + clientWidth >= scrollWidth - 1) {\r\n\t\tshowRightTip.value = false\r\n\t}\r\n\r\n\t// 计算滚动距离,添加一些乘数使滚动更自然\r\n\tconst scrollAmount = e.deltaY * 0.8\r\n\r\n\t// 平滑滚动\r\n\tscrollContainer.value.scrollBy({\r\n\t\tleft: scrollAmount,\r\n\t\tbehavior: 'smooth'\r\n\t})\r\n}\r\n\r\nconst handleScroll = (e: WheelEvent) => {\r\n\t// 防抖处理,避免滚动过程中频繁触发\r\n\tif (edgeDetectionDebounce) {\r\n\t\tclearTimeout(edgeDetectionDebounce)\r\n\t}\r\n\r\n\tedgeDetectionDebounce = setTimeout(() => {\r\n\t\thandleWheel(e)\r\n\t}, 50) // 50ms的防抖延迟\r\n}\r\n\r\n// 向左滚动(模拟向上滚轮事件)\r\nconst scrollLeftFn = () => {\r\n\tif (!showLeftTip.value || !scrollContainer.value) return\r\n\r\n\t// 模拟向上滚动的滚轮事件(deltaY 为负值)\r\n\tconst mockEvent = new WheelEvent('wheel', {\r\n\t\tdeltaY: -scrollDistance.value, // 负值表示向上滚动,我们将其转换为向左滚动\r\n\t\tbubbles: true,\r\n\t\tcancelable: true\r\n\t})\r\n\r\n\t// 复用 handleWheel 方法处理模拟事件\r\n\thandleWheel(mockEvent)\r\n}\r\n\r\n// 向右滚动(模拟向下滚轮事件)\r\nconst scrollRightFn = () => {\r\n\tif (!showRightTip.value || !scrollContainer.value) return\r\n\r\n\t// 模拟向下滚动的滚轮事件(deltaY 为正值)\r\n\tconst mockEvent = new WheelEvent('wheel', {\r\n\t\tdeltaY: scrollDistance.value, // 正值表示向下滚动,我们将其转换为向右滚动\r\n\t\tbubbles: true,\r\n\t\tcancelable: true\r\n\t})\r\n\r\n\t// 复用 handleWheel 方法处理模拟事件\r\n\thandleWheel(mockEvent)\r\n}\r\n\r\nconst handleColse = (id: string) => {\r\n\temits('colse', id)\r\n}\r\n\r\nconst init = () => {\r\n\tif (props.type === 'UserMessage' && props.fileList.length > 0) {\r\n\t\tconst list = props.fileList\r\n\t\tlist.forEach((item, index) => {\r\n\t\t\temits('userMessageFileList', item, index)\r\n\t\t})\r\n\t}\r\n}\r\n\r\nonMounted(() => {\r\n\tif (scrollContainer.value) {\r\n\t\t// 添加事件监听,passive: false 允许我们调用 preventDefault\r\n\t\tscrollContainer.value.addEventListener('wheel', handleScroll, { passive: false })\r\n\t}\r\n\tinit()\r\n})\r\n\r\nonUnmounted(() => {\r\n\tif (scrollContainer.value) {\r\n\t\tscrollContainer.value.removeEventListener('wheel', handleScroll)\r\n\t}\r\n})\r\n</script>\r\n"],"names":["ref","onMounted","onUnmounted","_createElementBlock","_createElementVNode","_openBlock","_Fragment","_renderList","_createBlock","ImageFile","VideoFile","PDFFile"],"mappings":"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"}
|
|
@@ -69,14 +69,14 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
69
69
|
vue.createElementVNode(
|
|
70
70
|
"div",
|
|
71
71
|
{ class: "touchchat-file-name" },
|
|
72
|
-
vue.toDisplayString(
|
|
72
|
+
vue.toDisplayString(__props.item.fileName || "\u672A\u77E5\u6587\u4EF6"),
|
|
73
73
|
1
|
|
74
74
|
/* TEXT */
|
|
75
75
|
),
|
|
76
76
|
vue.createElementVNode(
|
|
77
77
|
"div",
|
|
78
78
|
{ class: "touchchat-file-size" },
|
|
79
|
-
vue.toDisplayString(formatFileSize(
|
|
79
|
+
vue.toDisplayString(formatFileSize(__props.item.fileSize)),
|
|
80
80
|
1
|
|
81
81
|
/* TEXT */
|
|
82
82
|
)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileView.vue2.js","sources":["../../../../../../packages/components/touchchat/component/FileView.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({ name: 'FileView' });\n</script>\n<template>\n\t<div class=\"touchchat-file\" @click=\"handleFileClick\">\n\t\t<div class=\"touchchat-file-icon\" :class=\"`type-${itype}`\" />\n\t\t<div class=\"touchchat-file-info\">\n\t\t\t<div class=\"touchchat-file-name\">{{ item.fileName || '未知文件' }}</div>\n\t\t\t<div class=\"touchchat-file-size\">{{ formatFileSize(item.fileSize) }}</div>\n\t\t</div>\n\t\t<div class=\"touchchat-file-download\">\n\t\t\t<div class=\"touchchat-file-download-icon\" @click.stop=\"handleDownloadClick\"></div>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { inject, computed } from 'vue'\n\n// import type { ChatMessage } from '../src/AiChat/TouchChat.vue';\ninterface ChatMessage {\n\tchatId?: string\n\tuser: 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\tcomponentName?: string\n\tthinkStatus?: 'thinking' | 'completed' | 'stopped'\n\tthinkStartTime?: number\n\tthinkTime?: number\n\t[key: string]: unknown\n}\n\n\n\nconst props = defineProps<{\n\titem: ChatMessage & { fileName?: string; fileSize?: number }\n\tindex: number\n}>()\n\nconst emit = defineEmits<{\n\t(e: 'fileClick', fileName: string, index: number): void\n}>()\n\n// 格式化文件大小\nconst formatFileSize = (size?: number): string => {\n\tif (!size) return '未知大小'\n\tif (size < 1024) return `${size} B`\n\tif (size < 1024 * 1024) return `${(size / 1024).toFixed(1)} KB`\n\treturn `${(size / (1024 * 1024)).toFixed(1)} MB`\n}\n\n// 计算文件类型\nconst itype = computed(() => {\n\tconst validTypes = ['doc', 'jpg', 'pdf', 'txt', 'docx', 'mp3', 'png', 'gif', 'mp4', 'ppt', 'xls', 'html', 'pptx', 'xlsx']\n\tif (props.item.fileName) {\n\t\tconst extension = props.item.fileName.split('.').pop()?.toLowerCase()\n\t\tif (extension && validTypes.includes(extension)) {\n\t\t\treturn extension\n\t\t}\n\t}\n\treturn 'unknown'\n})\n\nconst fileAction = inject<(item: any, index: number) => void>('fileAction', () => {})\nconst downloadAction = inject<(item: any, index: number) => void>('downloadAction', () => {})\n\ndefineExpose({ itype })\n\n// 处理文件点击事件\nconst handleFileClick = () => {\n\tif (props.item.fileName) {\n\t\temit('fileClick', props.item.fileName, props.index)\n\t\tfileAction(props.item, props.index)\n\t}\n}\nconst handleDownloadClick = () => {\n\tif (props.item.fileName) {\n\t\tdownloadAction(props.item, props.index)\n\t}\n}\n</script>\n\n<!-- <style scoped lang=\"less\">\n@import './style/FileView.less';\n</style> -->\n"],"names":["DO_defineComponent","computed","inject","_createElementBlock","_createElementVNode","_normalizeClass","
|
|
1
|
+
{"version":3,"file":"FileView.vue2.js","sources":["../../../../../../packages/components/touchchat/component/FileView.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({ name: 'FileView' });\n</script>\n<template>\r\n\t<div class=\"touchchat-file\" @click=\"handleFileClick\">\r\n\t\t<div class=\"touchchat-file-icon\" :class=\"`type-${itype}`\" />\r\n\t\t<div class=\"touchchat-file-info\">\r\n\t\t\t<div class=\"touchchat-file-name\">{{ item.fileName || '未知文件' }}</div>\r\n\t\t\t<div class=\"touchchat-file-size\">{{ formatFileSize(item.fileSize) }}</div>\r\n\t\t</div>\r\n\t\t<div class=\"touchchat-file-download\">\r\n\t\t\t<div class=\"touchchat-file-download-icon\" @click.stop=\"handleDownloadClick\"></div>\r\n\t\t</div>\r\n\t</div>\r\n</template>\r\n\r\n<script lang=\"ts\" setup>\r\nimport { inject, computed } from 'vue'\r\n\r\n// import type { ChatMessage } from '../src/AiChat/TouchChat.vue';\r\ninterface ChatMessage {\r\n\tchatId?: string\r\n\tuser: string\r\n\ttype: string\r\n\tcontent: string\r\n\tisChating?: boolean\r\n\tthinkContent?: string\r\n\treasoningContent?: string\r\n\tisLiked?: boolean\r\n\tisDisliked?: boolean\r\n\tisEditing?: boolean\r\n\teditContent?: string\r\n\tcomponentName?: string\r\n\tthinkStatus?: 'thinking' | 'completed' | 'stopped'\r\n\tthinkStartTime?: number\r\n\tthinkTime?: number\r\n\t[key: string]: unknown\r\n}\r\n\r\n\r\n\r\nconst props = defineProps<{\r\n\titem: ChatMessage & { fileName?: string; fileSize?: number }\r\n\tindex: number\r\n}>()\r\n\r\nconst emit = defineEmits<{\r\n\t(e: 'fileClick', fileName: string, index: number): void\r\n}>()\r\n\r\n// 格式化文件大小\r\nconst formatFileSize = (size?: number): string => {\r\n\tif (!size) return '未知大小'\r\n\tif (size < 1024) return `${size} B`\r\n\tif (size < 1024 * 1024) return `${(size / 1024).toFixed(1)} KB`\r\n\treturn `${(size / (1024 * 1024)).toFixed(1)} MB`\r\n}\r\n\r\n// 计算文件类型\r\nconst itype = computed(() => {\r\n\tconst validTypes = ['doc', 'jpg', 'pdf', 'txt', 'docx', 'mp3', 'png', 'gif', 'mp4', 'ppt', 'xls', 'html', 'pptx', 'xlsx']\r\n\tif (props.item.fileName) {\r\n\t\tconst extension = props.item.fileName.split('.').pop()?.toLowerCase()\r\n\t\tif (extension && validTypes.includes(extension)) {\r\n\t\t\treturn extension\r\n\t\t}\r\n\t}\r\n\treturn 'unknown'\r\n})\r\n\r\nconst fileAction = inject<(item: any, index: number) => void>('fileAction', () => {})\r\nconst downloadAction = inject<(item: any, index: number) => void>('downloadAction', () => {})\r\n\r\ndefineExpose({ itype })\r\n\r\n// 处理文件点击事件\r\nconst handleFileClick = () => {\r\n\tif (props.item.fileName) {\r\n\t\temit('fileClick', props.item.fileName, props.index)\r\n\t\tfileAction(props.item, props.index)\r\n\t}\r\n}\r\nconst handleDownloadClick = () => {\r\n\tif (props.item.fileName) {\r\n\t\tdownloadAction(props.item, props.index)\r\n\t}\r\n}\r\n</script>\r\n\r\n<!-- <style scoped lang=\"less\">\r\n@import './style/FileView.less';\r\n</style> -->\r\n"],"names":["DO_defineComponent","computed","inject","_createElementBlock","_createElementVNode","_normalizeClass","_toDisplayString"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HelloChat.vue2.js","sources":["../../../../../../packages/components/touchchat/component/HelloChat.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({ name: 'HelloChat' });\n</script>\n<template>\n\t<div>\n\t\t<div class=\"hello-chat\">\n\t\t\t<p class=\"title\">你好,我是 touchchat</p>\n\t\t\t<p class=\"sub-info\">作为您的智能伙伴,我既能帮您查账单、办业务,又能陪您聊天、学知识。</p>\n\t\t</div>\n\t\t<div v-if=\"helloChatList.length\" class=\"function-buttons\">\n\t\t\t<ul>\n\t\t\t\t<li v-for=\"item in helloChatList\" :key=\"item.id\" @click=\"handleItemClick(item)\">\n\t\t\t\t\t<img src=\"../../touchchat/img/icon.png\" alt=\"{{ item.name }}\" class=\"icon\" />\n\t\t\t\t\t<span class=\"ellipsis-text\">{{ item.name }}</span>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</div>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject } from 'vue'\n\n\n// 定义接口来描述helloChatList中项的结构\ninterface HelloChatItem {\n\tid: number\n\tname: string\n\t// 可以根据实际情况添加其他属性\n}\n\n// 为注入的helloChatList指定类型\nconst helloChatList = inject<HelloChatItem[]>('helloChatList', [])\n\nconst emit = defineEmits(['sendMessage'])\n\nconst handleItemClick = (item: HelloChatItem) => {\n\temit('sendMessage', item)\n}\n</script>\n\n<!-- <style scoped lang=\"less\">\n@import './style/HelloChat.less';\n</style> -->\n"],"names":["DO_defineComponent","inject","_createElementBlock","_createElementVNode","_unref","_Fragment","_renderList","_imports_0","_toDisplayString"],"mappings":";;;;;;;AAEA,MAAA,WAA6B,GAAAA,mBAAA,CAAmB,EAAE,IAAA,EAAM,aAAa,CAAA,CAAA;;;;;AA+BrE,IAAA,MAAM,aAAgB,GAAAC,UAAA,CAAwB,eAAiB,EAAA,EAAE,CAAA,CAAA;AAEjE,IAAA,MAAM,IAAO,GAAA,MAAA,CAAA;AAEb,IAAM,MAAA,eAAA,GAAkB,CAAC,IAAwB,KAAA;AAChD,MAAA,IAAA,CAAK,eAAe,IAAI,CAAA,CAAA;AAAA,KACzB,CAAA;;8BAlCCC,sBAaM,CAAA,KAAA,EAAA,IAAA,EAAA;AAAA,QAZLC,sBAGM,CAAA,KAAA,EAAA,EAHD,KAAA,EAAM,cAAY,EAAA;AAAA,UACtBA,uBAAoC,GAAjC,EAAA,EAAA,KAAM,EAAA,OAAA,IAAQ,0CAAe,CAAA;AAAA,UAChCA,uBAAyD,GAAtD,EAAA,EAAA,KAAM,EAAA,UAAA,IAAW,wMAAiC,CAAA;AAAA;QAE3CC,UAAA,aAAA,CAAA,CAAc,2BAAzBF,uBAOM,KAAA,EAAA;AAAA;UAP2B,KAAM,EAAA,kBAAA;AAAA;UACtCC,sBAAA,CAKK,MAAA,IAAA,EAAA;AAAA,gCAJJ,EAAAD,sBAAA;AAAA,cAGKG,YAAA;AAAA,cAAA,IAAA;AAAA,cAAAC,cAHc,CAAAF,SAAA,CAAa,aAAA,CAAA,EAAA,CAArB,IAAI,KAAA;sCAAf,EAAAF,sBAAA,CAGK,IAAA,EAAA;AAAA,kBAH8B,KAAK,IAAK,CAAA,EAAA;AAAA,kBAAK,OAAK,EAAA,CAAA,MAAE,KAAA,eAAA,CAAgB,IAAI,CAAA;AAAA;kBAC5EC,uBAA6E,KAAA,EAAA;AAAA,oBAAxE,GAAA,EAAAI,YAAA;AAAA,oBAAmC,GAAI,EAAA,iBAAA;AAAA,oBAAkB,KAAM,EAAA,MAAA;AAAA;kBACpEJ,sBAAA;AAAA,oBAAkD,MAAA;AAAA,sBAA5C,OAAM,eAAmB,EAAA;AAAA,oBAAAK,mBAAA,CAAA,KAAK,IAAI,CAAA;AAAA,oBAAA,CAAA;AAAA;AAAA,mBAAA;AAAA;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"HelloChat.vue2.js","sources":["../../../../../../packages/components/touchchat/component/HelloChat.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({ name: 'HelloChat' });\n</script>\n<template>\r\n\t<div>\r\n\t\t<div class=\"hello-chat\">\r\n\t\t\t<p class=\"title\">你好,我是 touchchat</p>\r\n\t\t\t<p class=\"sub-info\">作为您的智能伙伴,我既能帮您查账单、办业务,又能陪您聊天、学知识。</p>\r\n\t\t</div>\r\n\t\t<div v-if=\"helloChatList.length\" class=\"function-buttons\">\r\n\t\t\t<ul>\r\n\t\t\t\t<li v-for=\"item in helloChatList\" :key=\"item.id\" @click=\"handleItemClick(item)\">\r\n\t\t\t\t\t<img src=\"../../touchchat/img/icon.png\" alt=\"{{ item.name }}\" class=\"icon\" />\r\n\t\t\t\t\t<span class=\"ellipsis-text\">{{ item.name }}</span>\r\n\t\t\t\t</li>\r\n\t\t\t</ul>\r\n\t\t</div>\r\n\t</div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { inject } from 'vue'\r\n\r\n\r\n// 定义接口来描述helloChatList中项的结构\r\ninterface HelloChatItem {\r\n\tid: number\r\n\tname: string\r\n\t// 可以根据实际情况添加其他属性\r\n}\r\n\r\n// 为注入的helloChatList指定类型\r\nconst helloChatList = inject<HelloChatItem[]>('helloChatList', [])\r\n\r\nconst emit = defineEmits(['sendMessage'])\r\n\r\nconst handleItemClick = (item: HelloChatItem) => {\r\n\temit('sendMessage', item)\r\n}\r\n</script>\r\n\r\n<!-- <style scoped lang=\"less\">\r\n@import './style/HelloChat.less';\r\n</style> -->\r\n"],"names":["DO_defineComponent","inject","_createElementBlock","_createElementVNode","_unref","_Fragment","_renderList","_imports_0","_toDisplayString"],"mappings":";;;;;;;AAEA,MAAA,WAA6B,GAAAA,mBAAA,CAAmB,EAAE,IAAA,EAAM,aAAa,CAAA,CAAA;;;;;AA+BrE,IAAA,MAAM,aAAgB,GAAAC,UAAA,CAAwB,eAAiB,EAAA,EAAE,CAAA,CAAA;AAEjE,IAAA,MAAM,IAAO,GAAA,MAAA,CAAA;AAEb,IAAM,MAAA,eAAA,GAAkB,CAAC,IAAwB,KAAA;AAChD,MAAA,IAAA,CAAK,eAAe,IAAI,CAAA,CAAA;AAAA,KACzB,CAAA;;8BAlCCC,sBAaM,CAAA,KAAA,EAAA,IAAA,EAAA;AAAA,QAZLC,sBAGM,CAAA,KAAA,EAAA,EAHD,KAAA,EAAM,cAAY,EAAA;AAAA,UACtBA,uBAAoC,GAAjC,EAAA,EAAA,KAAM,EAAA,OAAA,IAAQ,0CAAe,CAAA;AAAA,UAChCA,uBAAyD,GAAtD,EAAA,EAAA,KAAM,EAAA,UAAA,IAAW,wMAAiC,CAAA;AAAA;QAE3CC,UAAA,aAAA,CAAA,CAAc,2BAAzBF,uBAOM,KAAA,EAAA;AAAA;UAP2B,KAAM,EAAA,kBAAA;AAAA;UACtCC,sBAAA,CAKK,MAAA,IAAA,EAAA;AAAA,gCAJJ,EAAAD,sBAAA;AAAA,cAGKG,YAAA;AAAA,cAAA,IAAA;AAAA,cAAAC,cAHc,CAAAF,SAAA,CAAa,aAAA,CAAA,EAAA,CAArB,IAAI,KAAA;sCAAf,EAAAF,sBAAA,CAGK,IAAA,EAAA;AAAA,kBAH8B,KAAK,IAAK,CAAA,EAAA;AAAA,kBAAK,OAAK,EAAA,CAAA,MAAE,KAAA,eAAA,CAAgB,IAAI,CAAA;AAAA;kBAC5EC,uBAA6E,KAAA,EAAA;AAAA,oBAAxE,GAAA,EAAAI,YAAA;AAAA,oBAAmC,GAAI,EAAA,iBAAA;AAAA,oBAAkB,KAAM,EAAA,MAAA;AAAA;kBACpEJ,sBAAA;AAAA,oBAAkD,MAAA;AAAA,sBAA5C,OAAM,eAAmB,EAAA;AAAA,oBAAAK,mBAAA,CAAA,KAAK,IAAI,CAAA;AAAA,oBAAA,CAAA;AAAA;AAAA,mBAAA;AAAA;;;;;;;;;;;;;;"}
|
|
@@ -39,14 +39,14 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
39
39
|
return vue.openBlock(), vue.createElementBlock("div", { class: "image-file" }, [
|
|
40
40
|
vue.createElementVNode("div", { class: "image-file-content" }, [
|
|
41
41
|
vue.createElementVNode("img", {
|
|
42
|
-
src: (_a =
|
|
42
|
+
src: (_a = __props.item.base64) != null ? _a : "../img/link.png",
|
|
43
43
|
alt: "\u56FE\u7247",
|
|
44
44
|
onClick: ($event) => showPreview.value = true
|
|
45
45
|
}, null, 8, ["src", "onClick"]),
|
|
46
|
-
!(showLoading.value ||
|
|
46
|
+
!(showLoading.value || __props.item.uploadError) && __props.hasColse ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
47
47
|
key: 0,
|
|
48
48
|
class: "image-file-colse",
|
|
49
|
-
onClick: ($event) => emits("colse",
|
|
49
|
+
onClick: ($event) => emits("colse", __props.item.id)
|
|
50
50
|
}, [
|
|
51
51
|
(vue.openBlock(), vue.createElementBlock("svg", {
|
|
52
52
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -61,7 +61,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
61
61
|
})
|
|
62
62
|
]))
|
|
63
63
|
], 8, ["onClick"])) : vue.createCommentVNode("v-if", true),
|
|
64
|
-
showLoading.value && !
|
|
64
|
+
showLoading.value && !__props.item.uploadError ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
65
65
|
key: 1,
|
|
66
66
|
class: "img-file-loading"
|
|
67
67
|
}, [
|
|
@@ -114,7 +114,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
114
114
|
/* TEXT */
|
|
115
115
|
)
|
|
116
116
|
])) : vue.createCommentVNode("v-if", true),
|
|
117
|
-
|
|
117
|
+
__props.item.uploadError ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
118
118
|
key: 2,
|
|
119
119
|
class: "img-file-loading img-error-loading",
|
|
120
120
|
onClick: handleReset
|
|
@@ -150,7 +150,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
150
150
|
}, [
|
|
151
151
|
vue.createElementVNode("div", { class: "image-preview-content" }, [
|
|
152
152
|
vue.createElementVNode("img", {
|
|
153
|
-
src: (_b =
|
|
153
|
+
src: (_b = __props.item.base64) != null ? _b : "../img/link.png",
|
|
154
154
|
alt: "\u9884\u89C8\u56FE\u7247"
|
|
155
155
|
}, null, 8, ["src"])
|
|
156
156
|
])
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageFile.vue2.js","sources":["../../../../../../packages/components/touchchat/component/ImageFile.vue"],"sourcesContent":["<template>\n\t<div class=\"image-file\">\n\t\t<div class=\"image-file-content\">\n\t\t\t<img :src=\"item.base64 ?? '../img/link.png'\" alt=\"图片\" @click=\"showPreview = true\" />\n\t\t\t<div v-if=\"!(showLoading || item.uploadError) && hasColse\" class=\"image-file-colse\" @click=\"emits('colse', item.id)\">\n\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"5\" height=\"6\" viewBox=\"0 0 5 6\" fill=\"none\">\n\t\t\t\t\t<path d=\"M4.42492 5.31718L4.97489 4.76721L3.05002 2.84233L4.97493 0.917422L4.42496 0.36745L2.50005 2.29236L0.575118 0.367432L0.0251465 0.917403L1.95008 2.84233L0.0251875 4.76722L0.575159 5.3172L2.50005 3.39231L4.42492 5.31718Z\" fill=\"white\" />\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t\t<div v-if=\"showLoading && !item.uploadError\" class=\"img-file-loading\">\n\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"25\" viewBox=\"0 0 24 25\" fill=\"none\">\n\t\t\t\t\t<g clip-path=\"url(#paint0_angular_2715_440_clip_path)\" data-figma-skip-parse=\"true\">\n\t\t\t\t\t\t<g transform=\"matrix(0.0100142 0.00182077 -0.00182077 0.0100142 12 12.8423)\">\n\t\t\t\t\t\t\t<foreignObject x=\"-1427.97\" y=\"-1427.97\" width=\"2855.94\" height=\"2855.94\">\n\t\t\t\t\t\t\t\t<div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"background: conic-gradient(from 90deg, rgba(255, 255, 255, 1) 0deg, rgba(255, 255, 255, 0) 84.375deg, rgba(255, 255, 255, 1) 360deg); height: 100%; width: 100%; opacity: 1\"></div>\n\t\t\t\t\t\t\t</foreignObject>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t\t<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 5.54499C7.96981 5.54499 4.7027 8.8121 4.7027 12.8423C4.7027 16.8725 7.96981 20.1396 12 20.1396C12.7463 20.1396 13.3514 20.7446 13.3514 21.4909C13.3514 22.2373 12.7463 22.8423 12 22.8423C6.47715 22.8423 2 18.3651 2 12.8423C2 7.31944 6.47715 2.84229 12 2.84229C17.5228 2.84229 22 7.31944 22 12.8423C22 13.5886 21.395 14.1936 20.6486 14.1936C19.9023 14.1936 19.2973 13.5886 19.2973 12.8423C19.2973 8.8121 16.0302 5.54499 12 5.54499Z\" data-figma-gradient-fill='{\"type\":\"GRADIENT_ANGULAR\",\"stops\":[{\"color\":{\"r\":1.0,\"g\":1.0,\"b\":1.0,\"a\":0.0},\"position\":0.2343750},{\"color\":{\"r\":1.0,\"g\":1.0,\"b\":1.0,\"a\":1.0},\"position\":1.0}],\"stopsVar\":[],\"transform\":{\"m00\":20.028446197509766,\"m01\":-3.6415407657623291,\"m02\":3.8065481185913086,\"m10\":3.6415374279022217,\"m11\":20.028463363647461,\"m12\":1.0072842836380005},\"opacity\":1.0,\"blendMode\":\"NORMAL\",\"visible\":true}' />\n\t\t\t\t\t<defs>\n\t\t\t\t\t\t<clipPath id=\"paint0_angular_2715_440_clip_path\">\n\t\t\t\t\t\t\t<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 5.54499C7.96981 5.54499 4.7027 8.8121 4.7027 12.8423C4.7027 16.8725 7.96981 20.1396 12 20.1396C12.7463 20.1396 13.3514 20.7446 13.3514 21.4909C13.3514 22.2373 12.7463 22.8423 12 22.8423C6.47715 22.8423 2 18.3651 2 12.8423C2 7.31944 6.47715 2.84229 12 2.84229C17.5228 2.84229 22 7.31944 22 12.8423C22 13.5886 21.395 14.1936 20.6486 14.1936C19.9023 14.1936 19.2973 13.5886 19.2973 12.8423C19.2973 8.8121 16.0302 5.54499 12 5.54499Z\" />\n\t\t\t\t\t\t</clipPath>\n\t\t\t\t\t</defs>\n\t\t\t\t</svg>\n\t\t\t\t<p class=\"img-file-title\">{{ progress }}%</p>\n\t\t\t</div>\n\t\t\t<div v-if=\"item.uploadError\" class=\"img-file-loading img-error-loading\" @click=\"handleReset\">\n\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"13\" viewBox=\"0 0 14 13\" fill=\"none\">\n\t\t\t\t\t<path d=\"M10.8891 10.7314C9.89379 11.7267 8.51879 12.3423 7 12.3423C3.96244 12.3423 1.5 9.87984 1.5 6.84229C1.5 3.80473 3.96244 1.34229 7 1.34229C8.51879 1.34229 9.89379 1.95789 10.8891 2.9532C11.3957 3.45982 12.5 4.7034 12.5 4.7034\" stroke=\"#F93920\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n\t\t\t\t\t<path d=\"M12.5 1.95374V4.70374H9.75\" stroke=\"#F93920\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n\t\t\t\t</svg>\n\t\t\t\t<p class=\"img-file-error\">错误</p>\n\t\t\t</div>\n\t\t</div>\n\t\t<div v-show=\"showPreview\" class=\"image-preview-modal\" @click=\"showPreview = false\">\n\t\t\t<div class=\"image-preview-content\">\n\t\t\t\t<img :src=\"item.base64 ?? '../img/link.png'\" alt=\"预览图片\" />\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n<script setup lang=\"ts\">\nimport { ref, watch, computed, inject } from 'vue'\nimport type { FileItem } from '../src/AiChat/Chat/types'\n\nconst props = defineProps<{\n\titem: FileItem\n\tindex: number\n\thasColse: boolean\n}>()\nconst emits = defineEmits(['colse'])\nconst showLoading = ref(false)\nconst progress = computed(() => {\n\treturn props.item.uploadProgress ?? 0\n})\nconst showPreview = ref(false)\n\nconst uploadFile = inject<(index: number, type?: string) => void>('uploadFile', () => {\n\tconsole.warn('未提供bottom函数')\n})\n\nconst handleReset = () => {\n\tuploadFile(props.index, 'IMAGE')\n}\n\nwatch(progress, newVal => {\n\tif (newVal === 100 || newVal === 0) {\n\t\tshowLoading.value = false\n\t} else {\n\t\tshowLoading.value = true\n\t}\n})\n</script>\n"],"names":["ref","computed","inject","watch","_createElementBlock","_createElementVNode","
|
|
1
|
+
{"version":3,"file":"ImageFile.vue2.js","sources":["../../../../../../packages/components/touchchat/component/ImageFile.vue"],"sourcesContent":["<template>\n\t<div class=\"image-file\">\n\t\t<div class=\"image-file-content\">\n\t\t\t<img :src=\"item.base64 ?? '../img/link.png'\" alt=\"图片\" @click=\"showPreview = true\" />\n\t\t\t<div v-if=\"!(showLoading || item.uploadError) && hasColse\" class=\"image-file-colse\" @click=\"emits('colse', item.id)\">\n\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"5\" height=\"6\" viewBox=\"0 0 5 6\" fill=\"none\">\n\t\t\t\t\t<path d=\"M4.42492 5.31718L4.97489 4.76721L3.05002 2.84233L4.97493 0.917422L4.42496 0.36745L2.50005 2.29236L0.575118 0.367432L0.0251465 0.917403L1.95008 2.84233L0.0251875 4.76722L0.575159 5.3172L2.50005 3.39231L4.42492 5.31718Z\" fill=\"white\" />\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t\t<div v-if=\"showLoading && !item.uploadError\" class=\"img-file-loading\">\n\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"25\" viewBox=\"0 0 24 25\" fill=\"none\">\n\t\t\t\t\t<g clip-path=\"url(#paint0_angular_2715_440_clip_path)\" data-figma-skip-parse=\"true\">\n\t\t\t\t\t\t<g transform=\"matrix(0.0100142 0.00182077 -0.00182077 0.0100142 12 12.8423)\">\n\t\t\t\t\t\t\t<foreignObject x=\"-1427.97\" y=\"-1427.97\" width=\"2855.94\" height=\"2855.94\">\n\t\t\t\t\t\t\t\t<div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"background: conic-gradient(from 90deg, rgba(255, 255, 255, 1) 0deg, rgba(255, 255, 255, 0) 84.375deg, rgba(255, 255, 255, 1) 360deg); height: 100%; width: 100%; opacity: 1\"></div>\n\t\t\t\t\t\t\t</foreignObject>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t\t<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 5.54499C7.96981 5.54499 4.7027 8.8121 4.7027 12.8423C4.7027 16.8725 7.96981 20.1396 12 20.1396C12.7463 20.1396 13.3514 20.7446 13.3514 21.4909C13.3514 22.2373 12.7463 22.8423 12 22.8423C6.47715 22.8423 2 18.3651 2 12.8423C2 7.31944 6.47715 2.84229 12 2.84229C17.5228 2.84229 22 7.31944 22 12.8423C22 13.5886 21.395 14.1936 20.6486 14.1936C19.9023 14.1936 19.2973 13.5886 19.2973 12.8423C19.2973 8.8121 16.0302 5.54499 12 5.54499Z\" data-figma-gradient-fill='{\"type\":\"GRADIENT_ANGULAR\",\"stops\":[{\"color\":{\"r\":1.0,\"g\":1.0,\"b\":1.0,\"a\":0.0},\"position\":0.2343750},{\"color\":{\"r\":1.0,\"g\":1.0,\"b\":1.0,\"a\":1.0},\"position\":1.0}],\"stopsVar\":[],\"transform\":{\"m00\":20.028446197509766,\"m01\":-3.6415407657623291,\"m02\":3.8065481185913086,\"m10\":3.6415374279022217,\"m11\":20.028463363647461,\"m12\":1.0072842836380005},\"opacity\":1.0,\"blendMode\":\"NORMAL\",\"visible\":true}' />\n\t\t\t\t\t<defs>\n\t\t\t\t\t\t<clipPath id=\"paint0_angular_2715_440_clip_path\">\n\t\t\t\t\t\t\t<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 5.54499C7.96981 5.54499 4.7027 8.8121 4.7027 12.8423C4.7027 16.8725 7.96981 20.1396 12 20.1396C12.7463 20.1396 13.3514 20.7446 13.3514 21.4909C13.3514 22.2373 12.7463 22.8423 12 22.8423C6.47715 22.8423 2 18.3651 2 12.8423C2 7.31944 6.47715 2.84229 12 2.84229C17.5228 2.84229 22 7.31944 22 12.8423C22 13.5886 21.395 14.1936 20.6486 14.1936C19.9023 14.1936 19.2973 13.5886 19.2973 12.8423C19.2973 8.8121 16.0302 5.54499 12 5.54499Z\" />\n\t\t\t\t\t\t</clipPath>\n\t\t\t\t\t</defs>\n\t\t\t\t</svg>\n\t\t\t\t<p class=\"img-file-title\">{{ progress }}%</p>\n\t\t\t</div>\n\t\t\t<div v-if=\"item.uploadError\" class=\"img-file-loading img-error-loading\" @click=\"handleReset\">\n\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"13\" viewBox=\"0 0 14 13\" fill=\"none\">\n\t\t\t\t\t<path d=\"M10.8891 10.7314C9.89379 11.7267 8.51879 12.3423 7 12.3423C3.96244 12.3423 1.5 9.87984 1.5 6.84229C1.5 3.80473 3.96244 1.34229 7 1.34229C8.51879 1.34229 9.89379 1.95789 10.8891 2.9532C11.3957 3.45982 12.5 4.7034 12.5 4.7034\" stroke=\"#F93920\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n\t\t\t\t\t<path d=\"M12.5 1.95374V4.70374H9.75\" stroke=\"#F93920\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n\t\t\t\t</svg>\n\t\t\t\t<p class=\"img-file-error\">错误</p>\n\t\t\t</div>\n\t\t</div>\n\t\t<div v-show=\"showPreview\" class=\"image-preview-modal\" @click=\"showPreview = false\">\n\t\t\t<div class=\"image-preview-content\">\n\t\t\t\t<img :src=\"item.base64 ?? '../img/link.png'\" alt=\"预览图片\" />\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n<script setup lang=\"ts\">\nimport { ref, watch, computed, inject } from 'vue'\nimport type { FileItem } from '../src/AiChat/Chat/types'\n\nconst props = defineProps<{\n\titem: FileItem\n\tindex: number\n\thasColse: boolean\n}>()\nconst emits = defineEmits(['colse'])\nconst showLoading = ref(false)\nconst progress = computed(() => {\n\treturn props.item.uploadProgress ?? 0\n})\nconst showPreview = ref(false)\n\nconst uploadFile = inject<(index: number, type?: string) => void>('uploadFile', () => {\n\tconsole.warn('未提供bottom函数')\n})\n\nconst handleReset = () => {\n\tuploadFile(props.index, 'IMAGE')\n}\n\nwatch(progress, newVal => {\n\tif (newVal === 100 || newVal === 0) {\n\t\tshowLoading.value = false\n\t} else {\n\t\tshowLoading.value = true\n\t}\n})\n</script>\n"],"names":["ref","computed","inject","watch","_createElementBlock","_createElementVNode","_toDisplayString"],"mappings":"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"}
|
|
@@ -23,7 +23,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
23
23
|
src: aiAvatarPath.value,
|
|
24
24
|
alt: "\u56FE\u7247\u5C55\u793A",
|
|
25
25
|
class: "image-content",
|
|
26
|
-
title: (_a =
|
|
26
|
+
title: (_a = __props.item.fileName) != null ? _a : "\u56FE\u7247\u9884\u89C8"
|
|
27
27
|
}, null, 8, ["src", "title"])
|
|
28
28
|
]);
|
|
29
29
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageView.vue2.js","sources":["../../../../../../packages/components/touchchat/component/ImageView.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({ name: 'ImageView' });\n</script>\n<template>\n <div class=\"image-view\">\n <img\n :src=\"aiAvatarPath\"\n alt=\"图片展示\"\n class=\"image-content\"\n :title=\"item.fileName ?? '图片预览'\"\n />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\n// import type { ChatMessage } from '../src/AiChat/TouchChat.vue';\nimport { ref } from 'vue';\nimport aiAvatarBase from '../img/bgimage.png';\nconst aiAvatarPath = ref(aiAvatarBase);\ninterface ChatMessage {\n chatId?: string;\n user: string;\n type: string;\n content: string;\n isChating?: boolean;\n thinkContent?: string;\n reasoningContent?: string;\n isLiked?: boolean;\n isDisliked?: boolean;\n isEditing?: boolean;\n editContent?: string;\n componentName?: string;\n thinkStatus?: 'thinking' | 'completed' | 'stopped';\n thinkStartTime?: number;\n thinkTime?: number;\n [key: string]: unknown;\n}\n\n;\n\nconst props = defineProps<{\n item: ChatMessage & { imageUrl?: string; fileName?: string };\n index: number;\n}>();\nconsole.log(props);\n</script>\n\n<!-- <style scoped lang=\"less\">\n@import './style/ImageView.less';\n</style> -->\n"],"names":["DO_defineComponent","ref","aiAvatarBase","_createElementBlock","_createElementVNode"
|
|
1
|
+
{"version":3,"file":"ImageView.vue2.js","sources":["../../../../../../packages/components/touchchat/component/ImageView.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({ name: 'ImageView' });\n</script>\n<template>\n <div class=\"image-view\">\n <img\n :src=\"aiAvatarPath\"\n alt=\"图片展示\"\n class=\"image-content\"\n :title=\"item.fileName ?? '图片预览'\"\n />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\n// import type { ChatMessage } from '../src/AiChat/TouchChat.vue';\nimport { ref } from 'vue';\nimport aiAvatarBase from '../img/bgimage.png';\nconst aiAvatarPath = ref(aiAvatarBase);\ninterface ChatMessage {\n chatId?: string;\n user: string;\n type: string;\n content: string;\n isChating?: boolean;\n thinkContent?: string;\n reasoningContent?: string;\n isLiked?: boolean;\n isDisliked?: boolean;\n isEditing?: boolean;\n editContent?: string;\n componentName?: string;\n thinkStatus?: 'thinking' | 'completed' | 'stopped';\n thinkStartTime?: number;\n thinkTime?: number;\n [key: string]: unknown;\n}\n\n;\n\nconst props = defineProps<{\n item: ChatMessage & { imageUrl?: string; fileName?: string };\n index: number;\n}>();\nconsole.log(props);\n</script>\n\n<!-- <style scoped lang=\"less\">\n@import './style/ImageView.less';\n</style> -->\n"],"names":["DO_defineComponent","ref","aiAvatarBase","_createElementBlock","_createElementVNode"],"mappings":";;;;;;;AAEA,MAAA,WAA6B,GAAAA,mBAAA,CAAmB,EAAE,IAAA,EAAM,aAAa,CAAA,CAAA;;;;;;;;AAiBrE,IAAM,MAAA,YAAA,GAAeC,QAAIC,eAAY,CAAA,CAAA;AAsBrC,IAAA,MAAM,KAAQ,GAAA,OAAA,CAAA;AAId,IAAA,OAAA,CAAQ,IAAI,KAAK,CAAA,CAAA;;;4BAxCf,EAAAC,sBAAA,CAOM,OAAA,EAPD,KAAA,EAAM,cAAY,EAAA;AAAA,QACrBC,uBAKE,KAAA,EAAA;AAAA,UAJC,KAAK,YAAY,CAAA,KAAA;AAAA,UAClB,GAAI,EAAA,0BAAA;AAAA,UACJ,KAAM,EAAA,eAAA;AAAA,UACL,KAAO,EAAA,CAAA,EAAA,GAAA,OAAA,CAAI,IAAC,CAAA,QAAA,KAAL,IAAa,GAAA,EAAA,GAAA,0BAAA;AAAA;;;;;;;;"}
|
|
@@ -41,10 +41,10 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
41
41
|
})
|
|
42
42
|
])),
|
|
43
43
|
vue.createElementVNode("a", {
|
|
44
|
-
href:
|
|
44
|
+
href: __props.item.url,
|
|
45
45
|
target: "_blank",
|
|
46
46
|
class: "url-text"
|
|
47
|
-
}, vue.toDisplayString(
|
|
47
|
+
}, vue.toDisplayString(__props.item.url || "https://mp.weixin.qq.com"), 9, ["href"])
|
|
48
48
|
]),
|
|
49
49
|
vue.createCommentVNode(" \u5185\u5BB9\u533A\u57DF "),
|
|
50
50
|
vue.createElementVNode("div", { class: "link-content" }, [
|
|
@@ -57,14 +57,14 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
57
57
|
vue.createElementVNode(
|
|
58
58
|
"h3",
|
|
59
59
|
{ class: "link-title" },
|
|
60
|
-
vue.toDisplayString(
|
|
60
|
+
vue.toDisplayString(__props.item.title || "\u6807\u9898\u6587\u5B57\u6807\u9898\u6587\u5B57\u6807\u9898\u6587\u5B57\u6807\u9898\u6587\u5B57\u6807\u9898\u6587\u5B57\u6807\u9898\u6587\u5B57"),
|
|
61
61
|
1
|
|
62
62
|
/* TEXT */
|
|
63
63
|
),
|
|
64
64
|
vue.createElementVNode(
|
|
65
65
|
"p",
|
|
66
66
|
{ class: "link-desc" },
|
|
67
|
-
vue.toDisplayString(
|
|
67
|
+
vue.toDisplayString(__props.item.content || "\u5185\u5BB9\u6587\u5B57\u5185\u5BB9\u6587\u5B57\u5185\u5BB9\u6587\u5B57\u5185\u5BB9\u6587\u5B57"),
|
|
68
68
|
1
|
|
69
69
|
/* TEXT */
|
|
70
70
|
)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkView.vue2.js","sources":["../../../../../../packages/components/touchchat/component/LinkView.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({ name: 'LinkView' });\n</script>\n<template>\n <div class=\"link-container\">\n <!-- 链接地址 -->\n <div class=\"link-url\">\n <svg\n class=\"link-icon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"11\"\n height=\"12\"\n viewBox=\"0 0 11 12\"\n fill=\"none\"\n >\n <path\n d=\"M9.07789 4.32533L7.22254 6.18221L8.04713 7.00749L9.90248 5.1506C10.9271 4.12514 11.1133 2.45825 9.95499 1.35208C8.83011 0.277812 7.22286 0.37915 6.17891 1.42396L4.32357 3.28084L5.14816 4.10612L7.00351 2.24924C7.62938 1.62285 8.51321 1.58839 9.14993 2.19646C9.75325 2.77264 9.72309 3.67959 9.07789 4.32533Z\"\n fill=\"#0077FA\"\n />\n <path\n d=\"M1.92162 7.35876L3.77697 5.50187L2.95238 4.6766L1.09703 6.53348C0.0724121 7.55894 -0.113751 9.22583 1.04452 10.332C2.1694 11.4063 3.77665 11.3049 4.8206 10.2601L6.67595 8.40324L5.85135 7.57797L3.996 9.43485C3.37013 10.0612 2.4863 10.0957 1.84958 9.48762C1.24627 8.91144 1.27642 8.00449 1.92162 7.35876Z\"\n fill=\"#0077FA\"\n />\n <path\n d=\"M3.33825 7.18009L6.83672 3.67873L7.66131 4.50401L4.16285 8.00537L3.33825 7.18009Z\"\n fill=\"#0077FA\"\n />\n </svg>\n <a :href=\"item.url\" target=\"_blank\" class=\"url-text\">{{\n item.url || 'https://mp.weixin.qq.com'\n }}</a>\n </div>\n <!-- 内容区域 -->\n <div class=\"link-content\">\n <img src=\"../img/link.png\" alt=\"链接预览图\" class=\"content-image\" />\n <div class=\"info-content\">\n <h3 class=\"link-title\">\n {{ item.title || '标题文字标题文字标题文字标题文字标题文字标题文字' }}\n </h3>\n <p class=\"link-desc\">{{ item.content || '内容文字内容文字内容文字内容文字' }}</p>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\n// import type { ChatMessage } from '../src/AiChat/TouchChat.vue';\ninterface ChatMessage {\n chatId?: string;\n user: string;\n type: string;\n content: string;\n isChating?: boolean;\n thinkContent?: string;\n reasoningContent?: string;\n isLiked?: boolean;\n isDisliked?: boolean;\n isEditing?: boolean;\n editContent?: string;\n componentName?: string;\n thinkStatus?: 'thinking' | 'completed' | 'stopped';\n thinkStartTime?: number;\n thinkTime?: number;\n [key: string]: unknown;\n}\n\n;\n\nconst props = defineProps<{\n item: ChatMessage & { url?: string; title?: string; content?: string };\n index: number;\n}>();\nconsole.log(props);\n</script>\n\n<!-- <style scoped lang=\"less\">\n@import './style/LinkView.less';\n</style> -->\n"],"names":["DO_defineComponent","_createElementBlock","_createCommentVNode","_createElementVNode","
|
|
1
|
+
{"version":3,"file":"LinkView.vue2.js","sources":["../../../../../../packages/components/touchchat/component/LinkView.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({ name: 'LinkView' });\n</script>\n<template>\n <div class=\"link-container\">\n <!-- 链接地址 -->\n <div class=\"link-url\">\n <svg\n class=\"link-icon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"11\"\n height=\"12\"\n viewBox=\"0 0 11 12\"\n fill=\"none\"\n >\n <path\n d=\"M9.07789 4.32533L7.22254 6.18221L8.04713 7.00749L9.90248 5.1506C10.9271 4.12514 11.1133 2.45825 9.95499 1.35208C8.83011 0.277812 7.22286 0.37915 6.17891 1.42396L4.32357 3.28084L5.14816 4.10612L7.00351 2.24924C7.62938 1.62285 8.51321 1.58839 9.14993 2.19646C9.75325 2.77264 9.72309 3.67959 9.07789 4.32533Z\"\n fill=\"#0077FA\"\n />\n <path\n d=\"M1.92162 7.35876L3.77697 5.50187L2.95238 4.6766L1.09703 6.53348C0.0724121 7.55894 -0.113751 9.22583 1.04452 10.332C2.1694 11.4063 3.77665 11.3049 4.8206 10.2601L6.67595 8.40324L5.85135 7.57797L3.996 9.43485C3.37013 10.0612 2.4863 10.0957 1.84958 9.48762C1.24627 8.91144 1.27642 8.00449 1.92162 7.35876Z\"\n fill=\"#0077FA\"\n />\n <path\n d=\"M3.33825 7.18009L6.83672 3.67873L7.66131 4.50401L4.16285 8.00537L3.33825 7.18009Z\"\n fill=\"#0077FA\"\n />\n </svg>\n <a :href=\"item.url\" target=\"_blank\" class=\"url-text\">{{\n item.url || 'https://mp.weixin.qq.com'\n }}</a>\n </div>\n <!-- 内容区域 -->\n <div class=\"link-content\">\n <img src=\"../img/link.png\" alt=\"链接预览图\" class=\"content-image\" />\n <div class=\"info-content\">\n <h3 class=\"link-title\">\n {{ item.title || '标题文字标题文字标题文字标题文字标题文字标题文字' }}\n </h3>\n <p class=\"link-desc\">{{ item.content || '内容文字内容文字内容文字内容文字' }}</p>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\n// import type { ChatMessage } from '../src/AiChat/TouchChat.vue';\ninterface ChatMessage {\n chatId?: string;\n user: string;\n type: string;\n content: string;\n isChating?: boolean;\n thinkContent?: string;\n reasoningContent?: string;\n isLiked?: boolean;\n isDisliked?: boolean;\n isEditing?: boolean;\n editContent?: string;\n componentName?: string;\n thinkStatus?: 'thinking' | 'completed' | 'stopped';\n thinkStartTime?: number;\n thinkTime?: number;\n [key: string]: unknown;\n}\n\n;\n\nconst props = defineProps<{\n item: ChatMessage & { url?: string; title?: string; content?: string };\n index: number;\n}>();\nconsole.log(props);\n</script>\n\n<!-- <style scoped lang=\"less\">\n@import './style/LinkView.less';\n</style> -->\n"],"names":["DO_defineComponent","_createElementBlock","_createCommentVNode","_createElementVNode","_toDisplayString","_imports_0"],"mappings":";;;;;;;AAEA,MAAA,WAA6B,GAAAA,mBAAA,CAAmB,EAAE,IAAA,EAAM,YAAY,CAAA,CAAA;;;;;;;;AAmEpE,IAAA,MAAM,KAAQ,GAAA,OAAA,CAAA;AAId,IAAA,OAAA,CAAQ,IAAI,KAAK,CAAA,CAAA;;4BApEf,EAAAC,sBAAA,CAsCM,OAAA,EAtCD,KAAA,EAAM,kBAAgB,EAAA;AAAA,QACzBC,uBAAa,4BAAA,CAAA;AAAA,QACbC,sBAyBM,CAAA,KAAA,EAAA,EAzBD,KAAA,EAAM,YAAU,EAAA;AAAA,0BACnB,EAAAF,sBAAA,CAoBM,KAAA,EAAA;AAAA,YAnBJ,KAAM,EAAA,WAAA;AAAA,YACN,KAAM,EAAA,4BAAA;AAAA,YACN,KAAM,EAAA,IAAA;AAAA,YACN,MAAO,EAAA,IAAA;AAAA,YACP,OAAQ,EAAA,WAAA;AAAA,YACR,IAAK,EAAA,MAAA;AAAA;YAELE,uBAGE,MAAA,EAAA;AAAA,cAFA,CAAE,EAAA,mTAAA;AAAA,cACF,IAAK,EAAA,SAAA;AAAA;YAEPA,uBAGE,MAAA,EAAA;AAAA,cAFA,CAAE,EAAA,gTAAA;AAAA,cACF,IAAK,EAAA,SAAA;AAAA;YAEPA,uBAGE,MAAA,EAAA;AAAA,cAFA,CAAE,EAAA,mFAAA;AAAA,cACF,IAAK,EAAA,SAAA;AAAA;;UAGTA,uBAEM,GAAA,EAAA;AAAA,YAFF,IAAA,EAAM,QAAI,IAAC,CAAA,GAAA;AAAA,YAAK,MAAO,EAAA,QAAA;AAAA,YAAS,KAAM,EAAA,UAAA;AAAA,WACxC,EAAAC,mBAAA,CAAA,OAAA,CAAA,IAAK,CAAA,GAAA,IAAG,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA;AAAA;QAGZF,uBAAa,4BAAA,CAAA;AAAA,QACbC,sBAQM,CAAA,KAAA,EAAA,EARD,KAAA,EAAM,gBAAc,EAAA;AAAA,UACvBA,uBAA+D,KAAA,EAAA;AAAA,YAA1D,GAAA,EAAAE,YAAA;AAAA,YAAsB,GAAI,EAAA,gCAAA;AAAA,YAAQ,KAAM,EAAA,eAAA;AAAA;UAC7CF,sBAKM,CAAA,KAAA,EAAA,EALD,KAAA,EAAM,gBAAc,EAAA;AAAA,YACvBA,sBAAA;AAAA,cAEK,IAAA;AAAA,gBAFD,OAAM,YACL,EAAA;AAAA,cAAAC,mBAAA,CAAA,OAAA,CAAA,IAAK,CAAA,KAAA,IAAK,kJAAA,CAAA;AAAA,cAAA,CAAA;AAAA;AAAA,aAAA;AAAA,YAEfD,sBAAA;AAAA,cAAiE,GAAA;AAAA,gBAA9D,OAAM,WAAe,EAAA;AAAA,cAAAC,mBAAA,CAAA,OAAA,CAAA,IAAK,CAAA,OAAA,IAAO,kGAAA,CAAA;AAAA,cAAA,CAAA;AAAA;AAAA,aAAA;AAAA;;;;;;;;;"}
|
|
@@ -50,7 +50,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
50
50
|
vue.createElementVNode("p", { class: "touchchat-edit-text" }, "\u6587\u4EF6\u6570\u91CF: \u6700\u591A 10 \u4E2A,\u6587\u4EF6\u7C7B\u578B: pdf\u3001txt\u3001csv\u3001docx\u3001doc\u3001xlsx\u3001xls\u3001 pptx\u3001 ppt\u3001md\u3001mobi\u3001epub\u3001png\u3001jpeg\u3001jpg")
|
|
51
51
|
])
|
|
52
52
|
], 8, ["onClick"])), [
|
|
53
|
-
[vue.vShow,
|
|
53
|
+
[vue.vShow, __props.showMarkLaryer]
|
|
54
54
|
]);
|
|
55
55
|
};
|
|
56
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkLayer.vue2.js","sources":["../../../../../../packages/components/touchchat/component/MarkLayer.vue"],"sourcesContent":["<template>\n\t<div v-show=\"showMarkLaryer\" class=\"touchchat-edit-mark\" @click=\"emit('colseMarkLayer')\">\n\t\t<div>\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n\t\t\t\t<path d=\"M12.004 20.5002L11.9998 11.5002\" stroke=\"#1D2129\" stroke-width=\"1.8\" stroke-linecap=\"square\" stroke-linejoin=\"round\" />\n\t\t\t\t<path d=\"M20.2589 17.1583C21.9022 16.0027 22.6068 13.9153 22 12.0002C21.3933 10.0851 19.5352 9.03595 17.5264 9.0375H16.3659C15.6072 6.0809 13.1041 3.89811 10.0717 3.54885C7.03935 3.19959 4.1056 4.75615 2.69465 7.4629C1.2837 10.1696 1.68772 13.4661 3.71057 15.752\" stroke=\"#1D2129\" stroke-width=\"1.8\" stroke-linejoin=\"round\" />\n\t\t\t\t<path d=\"M15.1819 13.8182L11.9999 10.6362L8.81787 13.8182\" stroke=\"#1D2129\" stroke-width=\"1.8\" stroke-linecap=\"square\" stroke-linejoin=\"round\" />\n\t\t\t</svg>\n\t\t\t<p class=\"touchchat-edit-title\">释放鼠标上传</p>\n\t\t\t<p class=\"touchchat-edit-text\">文件数量: 最多 10 个,文件类型: pdf、txt、csv、docx、doc、xlsx、xls、 pptx、 ppt、md、mobi、epub、png、jpeg、jpg</p>\n\t\t</div>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nconst emit = defineEmits(['colseMarkLayer'])\ndefineProps<{\n\tshowMarkLaryer: boolean\n}>()\n</script>\n"],"names":["_createElementBlock","_createElementVNode"
|
|
1
|
+
{"version":3,"file":"MarkLayer.vue2.js","sources":["../../../../../../packages/components/touchchat/component/MarkLayer.vue"],"sourcesContent":["<template>\n\t<div v-show=\"showMarkLaryer\" class=\"touchchat-edit-mark\" @click=\"emit('colseMarkLayer')\">\n\t\t<div>\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n\t\t\t\t<path d=\"M12.004 20.5002L11.9998 11.5002\" stroke=\"#1D2129\" stroke-width=\"1.8\" stroke-linecap=\"square\" stroke-linejoin=\"round\" />\n\t\t\t\t<path d=\"M20.2589 17.1583C21.9022 16.0027 22.6068 13.9153 22 12.0002C21.3933 10.0851 19.5352 9.03595 17.5264 9.0375H16.3659C15.6072 6.0809 13.1041 3.89811 10.0717 3.54885C7.03935 3.19959 4.1056 4.75615 2.69465 7.4629C1.2837 10.1696 1.68772 13.4661 3.71057 15.752\" stroke=\"#1D2129\" stroke-width=\"1.8\" stroke-linejoin=\"round\" />\n\t\t\t\t<path d=\"M15.1819 13.8182L11.9999 10.6362L8.81787 13.8182\" stroke=\"#1D2129\" stroke-width=\"1.8\" stroke-linecap=\"square\" stroke-linejoin=\"round\" />\n\t\t\t</svg>\n\t\t\t<p class=\"touchchat-edit-title\">释放鼠标上传</p>\n\t\t\t<p class=\"touchchat-edit-text\">文件数量: 最多 10 个,文件类型: pdf、txt、csv、docx、doc、xlsx、xls、 pptx、 ppt、md、mobi、epub、png、jpeg、jpg</p>\n\t\t</div>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nconst emit = defineEmits(['colseMarkLayer'])\ndefineProps<{\n\tshowMarkLaryer: boolean\n}>()\n</script>\n"],"names":["_createElementBlock","_createElementVNode"],"mappings":";;;;;;;;;;;;;AAeA,IAAA,MAAM,IAAO,GAAA,MAAA,CAAA;;gDAdZ,EAAAA,sBAAA,CAUM,KAAA,EAAA;AAAA,QAVuB,KAAM,EAAA,qBAAA;AAAA,QAAuB,gBAAO,KAAA,IAAA,CAAI,gBAAA,CAAA;AAAA;QACpEC,sBAAA,CAQM,OAAA,IAAA,EAAA;AAAA,0BAPL,EAAAD,sBAAA,CAIM,KAAA,EAAA;AAAA,YAJD,KAAM,EAAA,4BAAA;AAAA,YAA6B,KAAM,EAAA,IAAA;AAAA,YAAK,MAAO,EAAA,IAAA;AAAA,YAAK,OAAQ,EAAA,WAAA;AAAA,YAAY,IAAK,EAAA,MAAA;AAAA;YACvFC,uBAAgI,MAAA,EAAA;AAAA,cAA1H,CAAE,EAAA,iCAAA;AAAA,cAAkC,MAAO,EAAA,SAAA;AAAA,cAAU,cAAa,EAAA,KAAA;AAAA,cAAM,gBAAe,EAAA,QAAA;AAAA,cAAS,iBAAgB,EAAA,OAAA;AAAA;YACtHA,uBAAsU,MAAA,EAAA;AAAA,cAAhU,CAAE,EAAA,+PAAA;AAAA,cAAgQ,MAAO,EAAA,SAAA;AAAA,cAAU,cAAa,EAAA,KAAA;AAAA,cAAM,iBAAgB,EAAA,OAAA;AAAA;YAC5TA,uBAAiJ,MAAA,EAAA;AAAA,cAA3I,CAAE,EAAA,kDAAA;AAAA,cAAmD,MAAO,EAAA,SAAA;AAAA,cAAU,cAAa,EAAA,KAAA;AAAA,cAAM,gBAAe,EAAA,QAAA;AAAA,cAAS,iBAAgB,EAAA,OAAA;AAAA;;UAExIA,uBAA0C,GAAvC,EAAA,EAAA,KAAM,EAAA,sBAAA,IAAuB,sCAAM,CAAA;AAAA,UACtCA,uBAAyH,GAAtH,EAAA,EAAA,KAAM,EAAA,qBAAA,IAAsB,qNAAsF,CAAA;AAAA;;kBAR1G,EAAA,OAAA,CAAc,cAAA,CAAA;AAAA;;;;;;;"}
|
|
@@ -16,7 +16,9 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
16
16
|
const emit = __emit;
|
|
17
17
|
const isSelectOpen = vue.ref(false);
|
|
18
18
|
const dropdownRef = vue.ref(null);
|
|
19
|
+
const measureRef = vue.ref(null);
|
|
19
20
|
const isUpward = vue.ref(false);
|
|
21
|
+
const selectWidth = vue.ref("auto");
|
|
20
22
|
const currentModuleName = vue.computed(() => {
|
|
21
23
|
var _a;
|
|
22
24
|
const selected = props.modules.find((item) => item.name === props.modelValue);
|
|
@@ -48,7 +50,25 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
48
50
|
calculateDropdownPosition();
|
|
49
51
|
}
|
|
50
52
|
};
|
|
53
|
+
const calculateSelectWidth = () => {
|
|
54
|
+
if (!measureRef.value)
|
|
55
|
+
return;
|
|
56
|
+
let maxWidth = 0;
|
|
57
|
+
const items = measureRef.value.children;
|
|
58
|
+
for (let i = 0; i < items.length; i++) {
|
|
59
|
+
const itemWidth = items[i].offsetWidth;
|
|
60
|
+
if (itemWidth > maxWidth) {
|
|
61
|
+
maxWidth = itemWidth;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (maxWidth > 0) {
|
|
65
|
+
selectWidth.value = `${maxWidth + 48}px`;
|
|
66
|
+
}
|
|
67
|
+
};
|
|
51
68
|
vue.onMounted(() => {
|
|
69
|
+
vue.nextTick(() => {
|
|
70
|
+
calculateSelectWidth();
|
|
71
|
+
});
|
|
52
72
|
window.addEventListener("scroll", handleWindowEvent, true);
|
|
53
73
|
window.addEventListener("resize", handleWindowEvent);
|
|
54
74
|
document.addEventListener("click", (e) => {
|
|
@@ -66,6 +86,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
66
86
|
return vue.openBlock(), vue.createElementBlock("div", {
|
|
67
87
|
class: "touchchat-custom-select",
|
|
68
88
|
tabindex: "0",
|
|
89
|
+
style: vue.normalizeStyle({ width: selectWidth.value }),
|
|
69
90
|
onBlur: ($event) => isSelectOpen.value = false
|
|
70
91
|
}, [
|
|
71
92
|
vue.createElementVNode("div", {
|
|
@@ -100,10 +121,10 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
100
121
|
(vue.openBlock(true), vue.createElementBlock(
|
|
101
122
|
vue.Fragment,
|
|
102
123
|
null,
|
|
103
|
-
vue.renderList(
|
|
124
|
+
vue.renderList(__props.modules, (item) => {
|
|
104
125
|
return vue.openBlock(), vue.createElementBlock("div", {
|
|
105
126
|
key: item.name,
|
|
106
|
-
class: vue.normalizeClass(["touchchat-select-option", { "is-selected": item.name ===
|
|
127
|
+
class: vue.normalizeClass(["touchchat-select-option", { "is-selected": item.name === __props.modelValue }]),
|
|
107
128
|
onClick: ($event) => selectOption(item)
|
|
108
129
|
}, vue.toDisplayString(item.name), 11, ["onClick"]);
|
|
109
130
|
}),
|
|
@@ -115,8 +136,38 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
115
136
|
/* CLASS */
|
|
116
137
|
), [
|
|
117
138
|
[vue.vShow, isSelectOpen.value]
|
|
118
|
-
])
|
|
119
|
-
|
|
139
|
+
]),
|
|
140
|
+
vue.createElementVNode(
|
|
141
|
+
"div",
|
|
142
|
+
{
|
|
143
|
+
ref_key: "measureRef",
|
|
144
|
+
ref: measureRef,
|
|
145
|
+
class: "touchchat-select-measure"
|
|
146
|
+
},
|
|
147
|
+
[
|
|
148
|
+
(vue.openBlock(true), vue.createElementBlock(
|
|
149
|
+
vue.Fragment,
|
|
150
|
+
null,
|
|
151
|
+
vue.renderList(__props.modules, (item) => {
|
|
152
|
+
return vue.openBlock(), vue.createElementBlock(
|
|
153
|
+
"div",
|
|
154
|
+
{
|
|
155
|
+
key: "measure-" + item.name,
|
|
156
|
+
class: "touchchat-select-measure-item"
|
|
157
|
+
},
|
|
158
|
+
vue.toDisplayString(item.name),
|
|
159
|
+
1
|
|
160
|
+
/* TEXT */
|
|
161
|
+
);
|
|
162
|
+
}),
|
|
163
|
+
128
|
|
164
|
+
/* KEYED_FRAGMENT */
|
|
165
|
+
))
|
|
166
|
+
],
|
|
167
|
+
512
|
|
168
|
+
/* NEED_PATCH */
|
|
169
|
+
)
|
|
170
|
+
], 44, ["onBlur"]);
|
|
120
171
|
};
|
|
121
172
|
}
|
|
122
173
|
});
|