@touchvue/chat 1.0.0-beta.12 → 1.0.0-beta.14

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.
Files changed (24) hide show
  1. package/es/package.json.mjs +1 -1
  2. package/es/packages/components/touchchat/component/ImageFile.vue2.mjs +20 -5
  3. package/es/packages/components/touchchat/component/ImageFile.vue2.mjs.map +1 -1
  4. package/es/packages/components/touchchat/component/UploadView.vue2.mjs +36 -12
  5. package/es/packages/components/touchchat/component/UploadView.vue2.mjs.map +1 -1
  6. package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs +5 -2
  7. package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs.map +1 -1
  8. package/es/packages/components/touchchat/src/AiChat/TouchChat.vue2.mjs +44 -7
  9. package/es/packages/components/touchchat/src/AiChat/TouchChat.vue2.mjs.map +1 -1
  10. package/es/packages/components/touchchat/src/AiChat/UserMessage.vue2.mjs.map +1 -1
  11. package/lib/package.json.js +1 -1
  12. package/lib/packages/components/touchchat/component/ImageFile.vue2.js +19 -4
  13. package/lib/packages/components/touchchat/component/ImageFile.vue2.js.map +1 -1
  14. package/lib/packages/components/touchchat/component/UploadView.vue2.js +36 -12
  15. package/lib/packages/components/touchchat/component/UploadView.vue2.js.map +1 -1
  16. package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js +5 -2
  17. package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js.map +1 -1
  18. package/lib/packages/components/touchchat/src/AiChat/TouchChat.vue2.js +44 -7
  19. package/lib/packages/components/touchchat/src/AiChat/TouchChat.vue2.js.map +1 -1
  20. package/lib/packages/components/touchchat/src/AiChat/UserMessage.vue2.js.map +1 -1
  21. package/package.json +1 -1
  22. package/theme/components/index.css +20 -0
  23. package/theme/index.css +20 -0
  24. package/theme/skin/default.css +20 -0
@@ -1,5 +1,5 @@
1
1
  var name = "@touchvue/chat";
2
- var version = "1.0.0-beta.12";
2
+ var version = "1.0.0-beta.14";
3
3
  var description = "TouchVue UI Component Library";
4
4
  var main = "lib/index.js";
5
5
  var module = "es/index.mjs";
@@ -1,5 +1,4 @@
1
- import { defineComponent, ref, computed, watch, openBlock, createElementBlock, createElementVNode, createCommentVNode, toDisplayString } from 'vue';
2
- import _imports_0 from '../img/link.png.mjs';
1
+ import { defineComponent, ref, computed, watch, openBlock, createElementBlock, createElementVNode, createCommentVNode, toDisplayString, withDirectives, vShow } from 'vue';
3
2
 
4
3
  var _sfc_main = /* @__PURE__ */ defineComponent({
5
4
  __name: "ImageFile",
@@ -17,6 +16,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
17
16
  var _a;
18
17
  return (_a = props.item.uploadProgress) != null ? _a : 0;
19
18
  });
19
+ const showPreview = ref(false);
20
20
  watch(progress, (newVal) => {
21
21
  if (newVal === 100 || newVal === 0) {
22
22
  showLoading.value = false;
@@ -25,12 +25,14 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
25
25
  }
26
26
  });
27
27
  return (_ctx, _cache) => {
28
+ var _a, _b;
28
29
  return openBlock(), createElementBlock("div", { class: "image-file" }, [
29
30
  createElementVNode("div", { class: "image-file-content" }, [
30
31
  createElementVNode("img", {
31
- src: _imports_0,
32
- alt: "\u56FE\u7247"
33
- }),
32
+ src: (_a = _ctx.item.base64) != null ? _a : "../img/link.png",
33
+ alt: "\u56FE\u7247",
34
+ onClick: ($event) => showPreview.value = true
35
+ }, null, 8, ["src", "onClick"]),
34
36
  !(showLoading.value || showError.value) && _ctx.hasColse ? (openBlock(), createElementBlock("div", {
35
37
  key: 0,
36
38
  class: "image-file-colse",
@@ -130,6 +132,19 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
130
132
  ])),
131
133
  createElementVNode("p", { class: "img-file-error" }, "\u9519\u8BEF")
132
134
  ])) : createCommentVNode("v-if", true)
135
+ ]),
136
+ withDirectives(createElementVNode("div", {
137
+ class: "image-preview-modal",
138
+ onClick: ($event) => showPreview.value = false
139
+ }, [
140
+ createElementVNode("div", { class: "image-preview-content" }, [
141
+ createElementVNode("img", {
142
+ src: (_b = _ctx.item.base64) != null ? _b : "../img/link.png",
143
+ alt: "\u9884\u89C8\u56FE\u7247"
144
+ }, null, 8, ["src"])
145
+ ])
146
+ ], 8, ["onClick"]), [
147
+ [vShow, showPreview.value]
133
148
  ])
134
149
  ]);
135
150
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ImageFile.vue2.mjs","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=\"../img/link.png\" alt=\"图片\" />\n\t\t\t<div v-if=\"!(showLoading || showError) && 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\" 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=\"showError\" class=\"img-file-loading\">\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</div>\n</template>\n<script setup lang=\"ts\">\nimport { ref, watch, defineProps, computed, defineEmits } from 'vue'\nconst props = defineProps<{\n\titem: {\n\t\tfile?: File\n\t\tisUploading: boolean\n\t\tuploadProgress: number\n\t\tuploadSuccess: boolean\n\t\tuploadError: boolean\n\t\tfileSize: string\n\t\tfileType: string\n\t\tname: string\n\t\tid: string\n\t}\n\thasColse: boolean\n}>()\nconst emits = defineEmits(['colse'])\nconst showLoading = ref(false)\nconst showError = ref(false)\nconst progress = computed(() => {\n\treturn props.item.uploadProgress ?? 0\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":["_createElementBlock","_createElementVNode","hasColse","item","_toDisplayString"],"mappings":"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"}
1
+ {"version":3,"file":"ImageFile.vue2.mjs","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 || showError) && 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\" 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=\"showError\" class=\"img-file-loading\">\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, defineProps, computed, defineEmits } from 'vue'\nconst props = defineProps<{\n\titem: {\n\t\tfile?: File\n\t\tisUploading: boolean\n\t\tuploadProgress: number\n\t\tuploadSuccess: boolean\n\t\tuploadError: boolean\n\t\tfileSize: string\n\t\tfileType: string\n\t\tname: string\n\t\tid: string\n\t\tbase64?: string\n\t}\n\thasColse: boolean\n}>()\nconst emits = defineEmits(['colse'])\nconst showLoading = ref(false)\nconst showError = ref(false)\nconst progress = computed(() => {\n\treturn props.item.uploadProgress ?? 0\n})\nconst showPreview = ref(false)\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":["_createElementBlock","_createElementVNode","item","hasColse","_toDisplayString"],"mappings":"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"}
@@ -17,18 +17,42 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
17
17
  if (input.files && input.files.length > 0) {
18
18
  for (let i = 0; i < input.files.length; i++) {
19
19
  const file = input.files[i];
20
- fileInfos.value.push({
21
- file,
22
- isUploading: false,
23
- uploadProgress: 0,
24
- uploadSuccess: false,
25
- uploadError: false,
26
- fileSize: "",
27
- fileType: file.type,
28
- id: file.lastModified.toString(),
29
- name: file.name
30
- });
31
- uploadFile(fileInfos.value.length - 1);
20
+ if (file.type.startsWith("image/")) {
21
+ const reader = new FileReader();
22
+ reader.onload = (e) => {
23
+ var _a;
24
+ const base64 = (_a = e.target) == null ? void 0 : _a.result;
25
+ fileInfos.value.push({
26
+ file,
27
+ isUploading: false,
28
+ uploadProgress: 0,
29
+ uploadSuccess: false,
30
+ uploadError: false,
31
+ fileSize: "",
32
+ fileType: file.type,
33
+ id: file.lastModified.toString(),
34
+ name: file.name,
35
+ base64
36
+ // 存储 Base64 数据
37
+ });
38
+ uploadFile(fileInfos.value.length - 1);
39
+ };
40
+ reader.readAsDataURL(file);
41
+ } else {
42
+ fileInfos.value.push({
43
+ file,
44
+ isUploading: false,
45
+ uploadProgress: 0,
46
+ uploadSuccess: false,
47
+ uploadError: false,
48
+ fileSize: "",
49
+ fileType: file.type,
50
+ id: file.lastModified.toString(),
51
+ name: file.name,
52
+ base64: null
53
+ });
54
+ uploadFile(fileInfos.value.length - 1);
55
+ }
32
56
  }
33
57
  }
34
58
  };
@@ -1 +1 @@
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 } from 'vue'\ninterface FileInfo {\n\tfile: File\n\tisUploading: boolean\n\tuploadProgress: number\n\tuploadSuccess: boolean\n\tuploadError: boolean\n\tfileSize: string\n\tfileType: string\n\tid: string\n\tname: string\n}\n\nconst emit = defineEmits<{\n\t// (e: 'progressFn', value: number): void\n\t(e: 'file', value: any): void\n}>()\n\nconst fileInput = ref<HTMLInputElement | null>(null)\nconst fileInfos = ref<FileInfo[]>([])\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// console.log('file === upload-view === 57', file)\n\t\t\tfileInfos.value.push({\n\t\t\t\tfile,\n\t\t\t\tisUploading: false,\n\t\t\t\tuploadProgress: 0,\n\t\t\t\tuploadSuccess: false,\n\t\t\t\tuploadError: false,\n\t\t\t\tfileSize: '',\n\t\t\t\tfileType: file.type,\n\t\t\t\tid: file.lastModified.toString(),\n\t\t\t\tname: file.name\n\t\t\t})\n\t\t\t// emit('file', fileInfos.value)\n\t\t\tuploadFile(fileInfos.value.length - 1)\n\t\t}\n\t}\n}\n\n// 模拟文件上传\nconst uploadFile = (index: number) => {\n\tconst fileInfo = fileInfos.value[index]\n\tif (!fileInfo) 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\tconst interval = setInterval(() => {\n\t\tfileInfo.uploadProgress += 10\n\t\t// emit('progressFn', fileInfo.uploadProgress)\n\t\temit('file', fileInfos.value)\n\t\tif (fileInfo.uploadProgress >= 100) {\n\t\t\tclearInterval(interval)\n\t\t\tfileInfo.isUploading = false\n\t\t\tfileInfo.uploadSuccess = true\n\t\t}\n\t}, 100)\n\n\t// 模拟上传失败的情况,可根据需求修改\n\t// setTimeout(() => {\n\t// clearInterval(interval);\n\t// fileInfo.isUploading = false;\n\t// fileInfo.uploadError = true;\n\t// }, 2000);\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})\n</script>\n"],"names":["_createElementBlock","_createCommentVNode","_createElementVNode","_renderSlot"],"mappings":";;;;;;AAwBA,IAAA,MAAM,IAAO,GAAA,MAAA,CAAA;AAKb,IAAM,MAAA,SAAA,GAAY,IAA6B,IAAI,CAAA,CAAA;AACnD,IAAM,MAAA,SAAA,GAAY,GAAgB,CAAA,EAAE,CAAA,CAAA;AAGpC,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,SAAA,CAAU,MAAM,IAAK,CAAA;AAAA,YACpB,IAAA;AAAA,YACA,WAAa,EAAA,KAAA;AAAA,YACb,cAAgB,EAAA,CAAA;AAAA,YAChB,aAAe,EAAA,KAAA;AAAA,YACf,WAAa,EAAA,KAAA;AAAA,YACb,QAAU,EAAA,EAAA;AAAA,YACV,UAAU,IAAK,CAAA,IAAA;AAAA,YACf,EAAA,EAAI,IAAK,CAAA,YAAA,CAAa,QAAS,EAAA;AAAA,YAC/B,MAAM,IAAK,CAAA,IAAA;AAAA,WACX,CAAA,CAAA;AAED,UAAW,UAAA,CAAA,SAAA,CAAU,KAAM,CAAA,MAAA,GAAS,CAAC,CAAA,CAAA;AAAA,SACtC;AAAA,OACD;AAAA,KACD,CAAA;AAGA,IAAM,MAAA,UAAA,GAAa,CAAC,KAAkB,KAAA;AACrC,MAAM,MAAA,QAAA,GAAW,SAAU,CAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AACtC,MAAA,IAAI,CAAC,QAAA;AAAU,QAAA,OAAA;AAEf,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,MAAM,MAAA,QAAA,GAAW,YAAY,MAAM;AAClC,QAAA,QAAA,CAAS,cAAkB,IAAA,EAAA,CAAA;AAE3B,QAAK,IAAA,CAAA,MAAA,EAAQ,UAAU,KAAK,CAAA,CAAA;AAC5B,QAAI,IAAA,QAAA,CAAS,kBAAkB,GAAK,EAAA;AACnC,UAAA,aAAA,CAAc,QAAQ,CAAA,CAAA;AACtB,UAAA,QAAA,CAAS,WAAc,GAAA,KAAA,CAAA;AACvB,UAAA,QAAA,CAAS,aAAgB,GAAA,IAAA,CAAA;AAAA,SAC1B;AAAA,SACE,GAAG,CAAA,CAAA;AAAA,KAQP,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,KACA,CAAA,CAAA;;wBAhHA,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
+ {"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 } from 'vue'\ninterface FileInfo {\n\tfile: File\n\tisUploading: boolean\n\tuploadProgress: number\n\tuploadSuccess: boolean\n\tuploadError: boolean\n\tfileSize: string\n\tfileType: string\n\tid: string\n\tname: string\n\tbase64: string | null\n}\n\nconst emit = defineEmits<{\n\t// (e: 'progressFn', value: number): void\n\t(e: 'file', value: any): void\n}>()\n\nconst fileInput = ref<HTMLInputElement | null>(null)\nconst fileInfos = ref<FileInfo[]>([])\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\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: '',\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})\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: '',\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\tbase64: null\n\t\t\t\t})\n\t\t\t\tuploadFile(fileInfos.value.length - 1)\n\t\t\t}\n\t\t}\n\t}\n}\n\n// 模拟文件上传\nconst uploadFile = (index: number) => {\n\tconst fileInfo = fileInfos.value[index]\n\tif (!fileInfo) 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\tconst interval = setInterval(() => {\n\t\tfileInfo.uploadProgress += 10\n\t\t// emit('progressFn', fileInfo.uploadProgress)\n\t\temit('file', fileInfos.value)\n\t\tif (fileInfo.uploadProgress >= 100) {\n\t\t\tclearInterval(interval)\n\t\t\tfileInfo.isUploading = false\n\t\t\tfileInfo.uploadSuccess = true\n\t\t}\n\t}, 100)\n\n\t// 模拟上传失败的情况,可根据需求修改\n\t// setTimeout(() => {\n\t// clearInterval(interval);\n\t// fileInfo.isUploading = false;\n\t// fileInfo.uploadError = true;\n\t// }, 2000);\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})\n</script>\n"],"names":["_createElementBlock","_createCommentVNode","_createElementVNode","_renderSlot"],"mappings":"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"}
@@ -123,7 +123,9 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
123
123
  if (finallyModules.value.length > 0) {
124
124
  selectVal.value = finallyModules.value[0].name;
125
125
  selectInfo.value = finallyModules.value[0];
126
- emits("moduleInfo", selectInfo.value);
126
+ if (selectInfo.value) {
127
+ emits("moduleInfo", selectInfo.value);
128
+ }
127
129
  }
128
130
  });
129
131
  return (_ctx, _cache) => {
@@ -136,12 +138,13 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
136
138
  onColse: handleColse
137
139
  }, null, 8, ["file-list"]),
138
140
  createElementVNode("div", { class: "touchchat-edit-input" }, [
141
+ createCommentVNode(' @paste="handlePaste" '),
139
142
  createElementVNode("textarea", {
140
143
  value: _ctx.inputValue,
141
144
  placeholder: (_a = unref(placeholder)) != null ? _a : "\u8BF7\u8F93\u5165...",
142
145
  onInput: handleInputChange,
143
146
  onKeyup: withKeys(handleSend, ["enter"])
144
- }, null, 40, ["value", "placeholder"])
147
+ }, " ", 40, ["value", "placeholder"])
145
148
  ]),
146
149
  createCommentVNode(" \u6309\u94AE\u4E0E\u5F00\u5173\u5BB9\u5668 "),
147
150
  createElementVNode(
@@ -1 +1 @@
1
- {"version":3,"file":"ChatInput.vue2.mjs","sources":["../../../../../../../packages/components/touchchat/src/AiChat/ChatInput.vue"],"sourcesContent":["<template>\n\t<div class=\"touchchat-edit\">\n\t\t<!-- :file-progress=\"fileProgress\" -->\n\t\t<FileContent :file-list=\"fileList\" :has-colse=\"true\" @colse=\"handleColse\" />\n\t\t<div class=\"touchchat-edit-input\">\n\t\t\t<textarea :value=\"inputValue\" :placeholder=\"placeholder ?? '请输入...'\" @input=\"handleInputChange\" @keyup.enter=\"handleSend\"></textarea>\n\t\t</div>\n\n\t\t<!-- 按钮与开关容器 -->\n\t\t<div :class=\"thinkAble ? 'touchchat-edit-submit is-thinkable' : 'touchchat-edit-submit'\">\n\t\t\t<div class=\"touchchat-edit-submit-left\">\n\t\t\t\t<!-- 附件 @click=\"showMarkLaryer = true\" @progress-fn=\"progressFn\" -->\n\t\t\t\t<upload-view v-if=\"uploadAble\" ref=\"uploadViewRef\" @file=\"updateFile\">\n\t\t\t\t\t<button v-if=\"uploadAble\" class=\"touchchat-edit-attach\" :class=\"{ 'is-dis': isChating }\">\n\t\t\t\t\t\t<div class=\"touchchat-edit-attach-icon\"></div>\n\t\t\t\t\t\t<div class=\"touchchat-edit-attach-tip\">\n\t\t\t\t\t\t\t<p>文件数量:最多10个</p>\n\t\t\t\t\t\t\t<p>文件类型:pdf,txt,csv,docx,xlsx,xls,pptx,ppt,md,mobi,epub,png,jpeg,jpg</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</button>\n\t\t\t\t</upload-view>\n\n\t\t\t\t<select v-if=\"finallyModules.length > 1\" id=\"deepseek\" v-model=\"selectVal\" name=\"deepseek\">\n\t\t\t\t\t<option v-for=\"dpItem in finallyModules\" :key=\"dpItem.name\" :value=\"dpItem.name\">{{ dpItem.name }}</option>\n\t\t\t\t</select>\n\n\t\t\t\t<!-- 深度思考开关 - 修改为按钮样式 -->\n\t\t\t\t<button v-if=\"thinkAble\" class=\"touchchat-edit-think\" :class=\"{ 'is-on': enableDeepThinking, 'is-dis': isChating }\" @click=\"handleDeepThinkingClick\">\n\t\t\t\t\t<div class=\"touchchat-edit-think-icon\"></div>\n\t\t\t\t\t<div class=\"touchchat-edit-think-text\">深度思考</div>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<div class=\"touchchat-edit-submit-right\">\n\t\t\t\t<!-- 发送按钮 -->\n\t\t\t\t<button v-if=\"!isChating\" class=\"touchchat-edit-send\" :disabled=\"!inputValue.trim() && !fileList.length\" @click=\"handleSend\">\n\t\t\t\t\t<div class=\"touchchat-edit-send-icon\"></div>\n\t\t\t\t</button>\n\n\t\t\t\t<!-- 停止按钮 -->\n\t\t\t\t<button v-else class=\"touchchat-edit-stop\" @click=\"handleStop\">\n\t\t\t\t\t<div class=\"touchchat-edit-stop-icon\"></div>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t\t<MarkLayer :show-mark-laryer=\"showMarkLaryer\" @colse-mark-layer=\"showMarkLaryer = false\" />\n\t</div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { ref, inject, nextTick, computed, watch, onMounted } from 'vue'\nimport MarkLayer from '../../component/MarkLayer.vue'\nimport FileContent from '../../component/FileContent.vue'\nimport UploadView from '../../component/UploadView.vue'\n\ninterface FileItem {\n\tfile?: File\n\tisUploading: boolean\n\tuploadProgress: number\n\tuploadSuccess: boolean\n\tuploadError: boolean\n\tfileSize: string\n\tfileType: string\n\tname: string\n\tid: string\n}\n\n// 定义 body 返回值的类型\ninterface BodyConfig {\n\tmodel: string\n\tmessages: Array<{\n\t\trole: string\n\t\tcontent: string\n\t}>\n\tstream: boolean\n}\n\n// 定义 respoKey 返回值的类型\ninterface RespoKeyConfig {\n\tcategory: string\n\tcontentCategory: string\n\tcontent: string\n\tall: string\n\tallCategory: string\n}\n\ninterface ModuleItem {\n\tname: string\n\tconfig: {\n\t\taction: string\n\t\theaders: () => object\n\t\tbody: () => BodyConfig // 修改为具体类型\n\t\trespoKey: () => RespoKeyConfig // 修改为具体类型\n\t}\n}\n\nconst props = defineProps<{\n\tinputValue: string\n\tisChating: boolean\n\tenableDeepThinking: boolean\n}>()\n\nconst placeholder = inject('placeholder', '请输入...')\nconst layout = inject<string>('layout', 'side, think, upload, chain')\nconst modules = inject<(string | ModuleItem)[]>('modules', [])\nconst thinkAble = layout.includes('think')\nconst uploadAble = layout.includes('upload')\nconst showMarkLaryer = ref<boolean>(false)\nconst fileList = ref<FileItem[]>([])\n// const fileData = ref<FileItem[]>([])\nconst optionalModules = ref<ModuleItem[]>([\n\t{\n\t\tname: 'deepseek-v3',\n\t\tconfig: {\n\t\t\taction: 'https://api.apiyi.com/v1/chat/completions',\n\t\t\theaders: () => ({\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\tAuthorization: 'Bearer sk-fe9MtODvds8wpzz05f3417Fe3e9641C1926e6fC588425dEd'\n\t\t\t}),\n\t\t\tbody: () => ({\n\t\t\t\tmodel: 'deepseek-v3',\n\t\t\t\tmessages: [\n\t\t\t\t\t{\n\t\t\t\t\t\trole: 'user',\n\t\t\t\t\t\tcontent: props.inputValue // 使用传入的用户内容参数\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tstream: true\n\t\t\t}),\n\t\t\trespoKey: () => ({\n\t\t\t\tcategory: 'category',\n\t\t\t\tcontentCategory: 'task_stream_content',\n\t\t\t\tcontent: 'content',\n\t\t\t\tall: 'message',\n\t\t\t\tallCategory: 'answer'\n\t\t\t})\n\t\t}\n\t}\n])\nconst uploadViewRef = ref<InstanceType<typeof UploadView>>()\nconst selectVal = ref('')\nconst selectInfo = ref<ModuleItem>()\n\nconst emits = defineEmits<{\n\t(e: 'send', list: FileItem[]): void\n\t(e: 'stop'): void\n\t(e: 'update:enableDeepThinking', value: boolean): void\n\t(e: 'update:inputValue', value: string): void // 添加inputValue更新事件\n\t(e: 'moduleInfo', info: ModuleItem): void\n}>()\n\nwatch(\n\t() => selectVal.value,\n\t() => {\n\t\tif (finallyModules.value.length > 0) {\n\t\t\tselectInfo.value = finallyModules.value.find(item => item.name === selectVal.value)\n\t\t\tif (selectInfo.value) {\n\t\t\t\temits('moduleInfo', selectInfo.value)\n\t\t\t}\n\t\t}\n\t},\n\t{ deep: true }\n)\n\nconst finallyModules = computed(() => {\n\tif (!modules.length) {\n\t\treturn optionalModules.value\n\t}\n\treturn modules.flatMap(module => {\n\t\tif (typeof module === 'string') {\n\t\t\t// 若 module 是字符串,在 optionalModules 中查找 name 匹配的项\n\t\t\tconst matchedModule = optionalModules.value.find(optModule => optModule.name === module)\n\t\t\tif (matchedModule) {\n\t\t\t\t// 对匹配到的模块也更新 content 值\n\t\t\t\tconst updatedModule = { ...matchedModule }\n\t\t\t\tconst body = updatedModule.config.body()\n\t\t\t\tbody.messages[0].content = props.inputValue\n\t\t\t\tbody.model = props.enableDeepThinking ? 'deepseek-reasoner' : 'deepseek-v3'\n\t\t\t\tupdatedModule.config.body = () => body\n\t\t\t\treturn [updatedModule]\n\t\t\t}\n\t\t\treturn []\n\t\t} else {\n\t\t\tconst body = module.config.body()\n\t\t\tbody.messages[0].content = props.inputValue\n\t\t\tbody.model = props.enableDeepThinking ? 'deepseek-reasoner' : 'deepseek-v3'\n\t\t\t// 重新定义 body 方法,返回更新后的 body\n\t\t\tmodule.config.body = () => body\n\t\t\treturn [module]\n\t\t}\n\t})\n})\n\nconst handleColse = (id: string) => {\n\tconst index = fileList.value.findIndex(item => item.id === id)\n\tif (index !== -1) {\n\t\tfileList.value.splice(index, 1)\n\t}\n}\n\n// 处理输入框变化\nconst handleInputChange = (e: Event) => {\n\tconst value = (e.target as HTMLTextAreaElement).value\n\temits('update:inputValue', value)\n}\n\n// 处理深度思考按钮点击\nconst handleDeepThinkingClick = () => {\n\t// enableDeepThinking.value ? 'deepseek-reasoner' : 'deepseek-v3'\n\temits('update:enableDeepThinking', !props.enableDeepThinking)\n}\n\nconst updateFile = (file: FileItem[]) => {\n\t// console.log('file === chat-input === 86', file)\n\tif (file.length > 0) {\n\t\t// fileList.value.map(item => {\n\t\t// \titem.uploadProgress = 0\n\t\t// })\n\t\tfileList.value = file\n\t\t// fileData.value = file\n\t}\n}\n\nconst handleSend = () => {\n\t// emits('send', fileData.value)\n\temits('send', fileList.value)\n\tnextTick(() => {\n\t\tfileList.value = []\n\t\tif (uploadViewRef.value) {\n\t\t\tuploadViewRef.value.resetFile()\n\t\t}\n\t})\n}\nconst handleStop = () => emits('stop')\nonMounted(() => {\n\tif (finallyModules.value.length > 0) {\n\t\tselectVal.value = finallyModules.value[0].name\n\t\tselectInfo.value = finallyModules.value[0]\n\t\temits('moduleInfo', selectInfo.value)\n\t}\n})\n</script>\n"],"names":["_createElementBlock","_createCommentVNode","_createVNode","_createElementVNode","inputValue","_unref","_createBlock","_normalizeClass","isChating","_Fragment","_renderList","_toDisplayString","enableDeepThinking"],"mappings":"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"}
1
+ {"version":3,"file":"ChatInput.vue2.mjs","sources":["../../../../../../../packages/components/touchchat/src/AiChat/ChatInput.vue"],"sourcesContent":["<template>\n\t<div class=\"touchchat-edit\">\n\t\t<!-- :file-progress=\"fileProgress\" -->\n\t\t<FileContent :file-list=\"fileList\" :has-colse=\"true\" @colse=\"handleColse\" />\n\t\t<div class=\"touchchat-edit-input\">\n\t\t\t<!-- @paste=\"handlePaste\" -->\n\t\t\t<textarea :value=\"inputValue\" :placeholder=\"placeholder ?? '请输入...'\" @input=\"handleInputChange\" @keyup.enter=\"handleSend\"> </textarea>\n\t\t</div>\n\n\t\t<!-- 按钮与开关容器 -->\n\t\t<div :class=\"thinkAble ? 'touchchat-edit-submit is-thinkable' : 'touchchat-edit-submit'\">\n\t\t\t<div class=\"touchchat-edit-submit-left\">\n\t\t\t\t<!-- 附件 @click=\"showMarkLaryer = true\" @progress-fn=\"progressFn\" -->\n\t\t\t\t<upload-view v-if=\"uploadAble\" ref=\"uploadViewRef\" @file=\"updateFile\">\n\t\t\t\t\t<button v-if=\"uploadAble\" class=\"touchchat-edit-attach\" :class=\"{ 'is-dis': isChating }\">\n\t\t\t\t\t\t<div class=\"touchchat-edit-attach-icon\"></div>\n\t\t\t\t\t\t<div class=\"touchchat-edit-attach-tip\">\n\t\t\t\t\t\t\t<p>文件数量:最多10个</p>\n\t\t\t\t\t\t\t<p>文件类型:pdf,txt,csv,docx,xlsx,xls,pptx,ppt,md,mobi,epub,png,jpeg,jpg</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</button>\n\t\t\t\t</upload-view>\n\n\t\t\t\t<select v-if=\"finallyModules.length > 1\" id=\"deepseek\" v-model=\"selectVal\" name=\"deepseek\">\n\t\t\t\t\t<option v-for=\"dpItem in finallyModules\" :key=\"dpItem.name\" :value=\"dpItem.name\">{{ dpItem.name }}</option>\n\t\t\t\t</select>\n\n\t\t\t\t<!-- 深度思考开关 - 修改为按钮样式 -->\n\t\t\t\t<button v-if=\"thinkAble\" class=\"touchchat-edit-think\" :class=\"{ 'is-on': enableDeepThinking, 'is-dis': isChating }\" @click=\"handleDeepThinkingClick\">\n\t\t\t\t\t<div class=\"touchchat-edit-think-icon\"></div>\n\t\t\t\t\t<div class=\"touchchat-edit-think-text\">深度思考</div>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<div class=\"touchchat-edit-submit-right\">\n\t\t\t\t<!-- 发送按钮 -->\n\t\t\t\t<button v-if=\"!isChating\" class=\"touchchat-edit-send\" :disabled=\"!inputValue.trim() && !fileList.length\" @click=\"handleSend\">\n\t\t\t\t\t<div class=\"touchchat-edit-send-icon\"></div>\n\t\t\t\t</button>\n\n\t\t\t\t<!-- 停止按钮 -->\n\t\t\t\t<button v-else class=\"touchchat-edit-stop\" @click=\"handleStop\">\n\t\t\t\t\t<div class=\"touchchat-edit-stop-icon\"></div>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t\t<MarkLayer :show-mark-laryer=\"showMarkLaryer\" @colse-mark-layer=\"showMarkLaryer = false\" />\n\t</div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { ref, inject, nextTick, computed, watch, onMounted } from 'vue'\nimport MarkLayer from '../../component/MarkLayer.vue'\nimport FileContent from '../../component/FileContent.vue'\nimport UploadView from '../../component/UploadView.vue'\n\ninterface FileItem {\n\tfile?: File\n\tisUploading: boolean\n\tuploadProgress: number\n\tuploadSuccess: boolean\n\tuploadError: boolean\n\tfileSize: string\n\tfileType: string\n\tname: string\n\tid: string\n}\n\n// 定义 body 返回值的类型\ninterface BodyConfig {\n\tmodel: string\n\tmessages: Array<{\n\t\trole: string\n\t\tcontent: string\n\t}>\n\tstream: boolean\n}\n\n// 定义 respoKey 返回值的类型\ninterface RespoKeyConfig {\n\tcategory: string\n\tcontentCategory: string\n\tcontent: string\n\tall: string\n\tallCategory: string\n}\n\ninterface ModuleItem {\n\tname: string\n\tconfig: {\n\t\taction: string\n\t\theaders: () => object\n\t\tbody: () => BodyConfig // 修改为具体类型\n\t\trespoKey: () => RespoKeyConfig // 修改为具体类型\n\t}\n}\n\nconst props = defineProps<{\n\tinputValue: string\n\tisChating: boolean\n\tenableDeepThinking: boolean\n}>()\n\nconst placeholder = inject('placeholder', '请输入...')\nconst layout = inject<string>('layout', 'side, think, upload, chain')\nconst modules = inject<(string | ModuleItem)[]>('modules', [])\nconst thinkAble = layout.includes('think')\nconst uploadAble = layout.includes('upload')\nconst showMarkLaryer = ref<boolean>(false)\nconst fileList = ref<FileItem[]>([])\n// const fileData = ref<FileItem[]>([])\nconst optionalModules = ref<ModuleItem[]>([\n\t{\n\t\tname: 'deepseek-v3',\n\t\tconfig: {\n\t\t\taction: 'https://api.apiyi.com/v1/chat/completions',\n\t\t\theaders: () => ({\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\tAuthorization: 'Bearer sk-fe9MtODvds8wpzz05f3417Fe3e9641C1926e6fC588425dEd'\n\t\t\t}),\n\t\t\tbody: () => ({\n\t\t\t\tmodel: 'deepseek-v3',\n\t\t\t\tmessages: [\n\t\t\t\t\t{\n\t\t\t\t\t\trole: 'user',\n\t\t\t\t\t\tcontent: props.inputValue // 使用传入的用户内容参数\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tstream: true\n\t\t\t}),\n\t\t\trespoKey: () => ({\n\t\t\t\tcategory: 'category',\n\t\t\t\tcontentCategory: 'task_stream_content',\n\t\t\t\tcontent: 'content',\n\t\t\t\tall: 'message',\n\t\t\t\tallCategory: 'answer'\n\t\t\t})\n\t\t}\n\t}\n])\nconst uploadViewRef = ref<InstanceType<typeof UploadView>>()\nconst selectVal = ref('')\nconst selectInfo = ref<ModuleItem>()\n\nconst emits = defineEmits<{\n\t(e: 'send', list: FileItem[]): void\n\t(e: 'stop'): void\n\t(e: 'update:enableDeepThinking', value: boolean): void\n\t(e: 'update:inputValue', value: string): void // 添加inputValue更新事件\n\t(e: 'moduleInfo', info: ModuleItem): void\n}>()\n\nwatch(\n\t() => selectVal.value,\n\t() => {\n\t\tif (finallyModules.value.length > 0) {\n\t\t\tselectInfo.value = finallyModules.value.find((item: any) => item.name === selectVal.value)\n\t\t\tif (selectInfo.value) {\n\t\t\t\temits('moduleInfo', selectInfo.value)\n\t\t\t}\n\t\t}\n\t},\n\t{ deep: true }\n)\n\nconst finallyModules = computed(() => {\n\tif (!modules.length) {\n\t\treturn optionalModules.value\n\t}\n\treturn modules.flatMap((module: any) => {\n\t\tif (typeof module === 'string') {\n\t\t\t// 若 module 是字符串,在 optionalModules 中查找 name 匹配的项\n\t\t\tconst matchedModule = optionalModules.value.find((optModule: any) => optModule.name === module)\n\t\t\tif (matchedModule) {\n\t\t\t\t// 对匹配到的模块也更新 content 值\n\t\t\t\tconst updatedModule = { ...matchedModule }\n\t\t\t\tconst body = updatedModule.config.body()\n\t\t\t\tbody.messages[0].content = props.inputValue\n\t\t\t\tbody.model = props.enableDeepThinking ? 'deepseek-reasoner' : 'deepseek-v3'\n\t\t\t\tupdatedModule.config.body = () => body\n\t\t\t\treturn [updatedModule]\n\t\t\t}\n\t\t\treturn []\n\t\t} else {\n\t\t\tconst body = module.config.body()\n\t\t\tbody.messages[0].content = props.inputValue\n\t\t\tbody.model = props.enableDeepThinking ? 'deepseek-reasoner' : 'deepseek-v3'\n\t\t\t// 重新定义 body 方法,返回更新后的 body\n\t\t\tmodule.config.body = () => body\n\t\t\treturn [module]\n\t\t}\n\t})\n})\n\n// const handlePaste = (event: any) => {\n// \t// 阻止默认粘贴行为(若需要自定义处理)\n// \t// event.preventDefault();\n\n// \tconst clipboardData = event.clipboardData || window.clipboardData\n// \tconst items = clipboardData.items\n\n// \tlet isImage = false\n// \tfor (let i = 0; i < items.length; i++) {\n// \t\tif (items[i].type.indexOf('image/') !== -1) {\n// \t\t\tisImage = true\n// \t\t\tbreak\n// \t\t}\n// \t}\n\n// \tif (isImage) {\n// \t\tconsole.log('检测到粘贴的是图片')\n// \t\t// 可在此处添加处理图片的逻辑,如读取图片文件、上传等\n// \t} else {\n// \t\tconsole.log('粘贴的不是图片')\n// \t}\n// }\n\nconst handleColse = (id: string) => {\n\tconst index = fileList.value.findIndex((item: any) => item.id === id)\n\tif (index !== -1) {\n\t\tfileList.value.splice(index, 1)\n\t}\n}\n\n// 处理输入框变化\nconst handleInputChange = (e: Event) => {\n\tconst value = (e.target as HTMLTextAreaElement).value\n\temits('update:inputValue', value)\n}\n\n// 处理深度思考按钮点击\nconst handleDeepThinkingClick = () => {\n\t// enableDeepThinking.value ? 'deepseek-reasoner' : 'deepseek-v3'\n\temits('update:enableDeepThinking', !props.enableDeepThinking)\n}\n\nconst updateFile = (file: FileItem[]) => {\n\t// console.log('file === chat-input === 86', file)\n\tif (file.length > 0) {\n\t\t// fileList.value.map(item => {\n\t\t// \titem.uploadProgress = 0\n\t\t// })\n\t\tfileList.value = file\n\t\t// fileData.value = file\n\t}\n}\n\nconst handleSend = () => {\n\t// emits('send', fileData.value)\n\temits('send', fileList.value)\n\tnextTick(() => {\n\t\tfileList.value = []\n\t\tif (uploadViewRef.value) {\n\t\t\tuploadViewRef.value.resetFile()\n\t\t}\n\t})\n}\nconst handleStop = () => emits('stop')\nonMounted(() => {\n\tif (finallyModules.value.length > 0) {\n\t\tselectVal.value = finallyModules.value[0].name\n\t\tselectInfo.value = finallyModules.value[0]\n\t\tif (selectInfo.value) {\n\t\t\temits('moduleInfo', selectInfo.value)\n\t\t}\n\t}\n})\n</script>\n"],"names":["_createElementBlock","_createCommentVNode","_createVNode","_createElementVNode","inputValue","_unref","_createBlock","_normalizeClass","isChating","_Fragment","_renderList","_toDisplayString","enableDeepThinking"],"mappings":"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"}
@@ -897,17 +897,54 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
897
897
  });
898
898
  const handleMessageAction = (action, index) => {
899
899
  const message = chatList.value[index];
900
+ console.log("message === 1100", message);
900
901
  if (!message)
901
902
  return;
902
903
  switch (action) {
903
- case MessageAction.COPY:
904
- navigator.clipboard.writeText(message.content).then(() => {
905
- showToast("\u590D\u5236\u6210\u529F", "info");
906
- }).catch((err) => {
907
- console.error("\u590D\u5236\u5931\u8D25:", err);
908
- showToast("\u590D\u5236\u5931\u8D25", "error");
909
- });
904
+ case MessageAction.COPY: {
905
+ const textContent = message.content;
906
+ const imgContent = message.files;
907
+ const imgElements = new DOMParser().parseFromString(imgContent, "text/html").querySelectorAll("img");
908
+ if (imgElements.length > 0) {
909
+ const imagePromises = Array.from(imgElements).map(async (img) => {
910
+ const src = img.getAttribute("src");
911
+ if (!src)
912
+ return null;
913
+ try {
914
+ const response = await fetch(src);
915
+ const blob = await response.blob();
916
+ return new ClipboardItem({ [blob.type]: blob });
917
+ } catch (error) {
918
+ console.error("\u83B7\u53D6\u56FE\u7247\u5931\u8D25:", error);
919
+ return null;
920
+ }
921
+ });
922
+ Promise.all(imagePromises).then((clipboardItems) => {
923
+ const validItems = clipboardItems.filter((item) => item !== null);
924
+ if (textContent.trim()) {
925
+ const textItem = new ClipboardItem({ "text/plain": new Blob([textContent], { type: "text/plain" }) });
926
+ validItems.unshift(textItem);
927
+ }
928
+ if (validItems.length > 0) {
929
+ return navigator.clipboard.write(validItems);
930
+ }
931
+ return Promise.reject(new Error("\u6CA1\u6709\u53EF\u590D\u5236\u7684\u5185\u5BB9"));
932
+ }).then(() => {
933
+ showToast("\u590D\u5236\u6210\u529F", "info");
934
+ }).catch((err) => {
935
+ console.error("\u590D\u5236\u5931\u8D25:", err);
936
+ showToast("\u590D\u5236\u5931\u8D25", "error");
937
+ });
938
+ } else {
939
+ navigator.clipboard.writeText(textContent).then(() => {
940
+ showToast("\u590D\u5236\u6210\u529F", "info");
941
+ }).catch((err) => {
942
+ console.error("\u590D\u5236\u5931\u8D25:", err);
943
+ showToast("\u590D\u5236\u5931\u8D25", "error");
944
+ });
945
+ }
910
946
  break;
947
+ }
911
948
  case MessageAction.EDIT:
912
949
  message.isEditing = true;
913
950
  message.editContent = message.content;