@touchvue/chat 1.0.0-beta.2 → 1.0.0-beta.3

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 (204) hide show
  1. package/es/_virtual/_plugin-vue_export-helper.mjs +10 -0
  2. package/es/_virtual/_plugin-vue_export-helper.mjs.map +1 -0
  3. package/es/package.json.mjs +1 -1
  4. package/es/packages/components/touchchat/component/CardView.vue.mjs +3 -2
  5. package/es/packages/components/touchchat/component/CardView.vue.mjs.map +1 -1
  6. package/es/packages/components/touchchat/component/CardView.vue2.mjs +66 -42
  7. package/es/packages/components/touchchat/component/CardView.vue2.mjs.map +1 -1
  8. package/es/packages/components/touchchat/component/FileView.vue.mjs +3 -2
  9. package/es/packages/components/touchchat/component/FileView.vue.mjs.map +1 -1
  10. package/es/packages/components/touchchat/component/FileView.vue2.mjs +17 -4
  11. package/es/packages/components/touchchat/component/FileView.vue2.mjs.map +1 -1
  12. package/es/packages/components/touchchat/component/HelloChat.vue.mjs +3 -2
  13. package/es/packages/components/touchchat/component/HelloChat.vue.mjs.map +1 -1
  14. package/es/packages/components/touchchat/component/HelloChat.vue2.mjs +26 -14
  15. package/es/packages/components/touchchat/component/HelloChat.vue2.mjs.map +1 -1
  16. package/es/packages/components/touchchat/component/ImageView.vue.mjs +3 -2
  17. package/es/packages/components/touchchat/component/ImageView.vue.mjs.map +1 -1
  18. package/es/packages/components/touchchat/component/LinkView.vue.mjs +3 -2
  19. package/es/packages/components/touchchat/component/LinkView.vue.mjs.map +1 -1
  20. package/es/packages/components/touchchat/component/LinkView.vue2.mjs +17 -3
  21. package/es/packages/components/touchchat/component/LinkView.vue2.mjs.map +1 -1
  22. package/es/packages/components/touchchat/index.mjs +4 -4
  23. package/es/packages/components/touchchat/index.mjs.map +1 -1
  24. package/es/packages/components/touchchat/src/AiChat/AiMessage.vue.mjs +3 -2
  25. package/es/packages/components/touchchat/src/AiChat/AiMessage.vue.mjs.map +1 -1
  26. package/es/packages/components/touchchat/src/AiChat/AiMessage.vue2.mjs +223 -162
  27. package/es/packages/components/touchchat/src/AiChat/AiMessage.vue2.mjs.map +1 -1
  28. package/es/packages/components/touchchat/src/AiChat/ChatInput.vue.mjs +3 -2
  29. package/es/packages/components/touchchat/src/AiChat/ChatInput.vue.mjs.map +1 -1
  30. package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs +137 -116
  31. package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs.map +1 -1
  32. package/es/packages/components/touchchat/src/AiChat/HistoryList.vue.mjs +3 -2
  33. package/es/packages/components/touchchat/src/AiChat/HistoryList.vue.mjs.map +1 -1
  34. package/es/packages/components/touchchat/src/AiChat/HistoryList.vue2.mjs +216 -142
  35. package/es/packages/components/touchchat/src/AiChat/HistoryList.vue2.mjs.map +1 -1
  36. package/es/packages/components/touchchat/src/AiChat/HistorySidebar.vue.mjs +3 -2
  37. package/es/packages/components/touchchat/src/AiChat/HistorySidebar.vue.mjs.map +1 -1
  38. package/es/packages/components/touchchat/src/AiChat/HistorySidebar.vue2.mjs +60 -52
  39. package/es/packages/components/touchchat/src/AiChat/HistorySidebar.vue2.mjs.map +1 -1
  40. package/es/packages/components/touchchat/src/AiChat/MessageActions.vue.mjs +3 -2
  41. package/es/packages/components/touchchat/src/AiChat/MessageActions.vue.mjs.map +1 -1
  42. package/es/packages/components/touchchat/src/AiChat/MessageActions.vue2.mjs +199 -166
  43. package/es/packages/components/touchchat/src/AiChat/MessageActions.vue2.mjs.map +1 -1
  44. package/es/packages/components/touchchat/src/AiChat/TouchChat.vue.mjs +3 -2
  45. package/es/packages/components/touchchat/src/AiChat/TouchChat.vue.mjs.map +1 -1
  46. package/es/packages/components/touchchat/src/AiChat/TouchChat.vue2.mjs +196 -157
  47. package/es/packages/components/touchchat/src/AiChat/TouchChat.vue2.mjs.map +1 -1
  48. package/es/packages/components/touchchat/src/AiChat/TouchHistory.vue.mjs +3 -2
  49. package/es/packages/components/touchchat/src/AiChat/TouchHistory.vue.mjs.map +1 -1
  50. package/es/packages/components/touchchat/src/AiChat/TouchHistory.vue2.mjs +90 -17
  51. package/es/packages/components/touchchat/src/AiChat/TouchHistory.vue2.mjs.map +1 -1
  52. package/es/packages/components/touchchat/src/AiChat/UserMessage.vue.mjs +3 -2
  53. package/es/packages/components/touchchat/src/AiChat/UserMessage.vue.mjs.map +1 -1
  54. package/es/packages/components/touchchat/src/AiChat/UserMessage.vue2.mjs +36 -27
  55. package/es/packages/components/touchchat/src/AiChat/UserMessage.vue2.mjs.map +1 -1
  56. package/es/packages/components/touchchat/src/AiRobot/ChatPanel.vue.mjs +3 -2
  57. package/es/packages/components/touchchat/src/AiRobot/ChatPanel.vue.mjs.map +1 -1
  58. package/es/packages/components/touchchat/src/AiRobot/ChatPanel.vue2.mjs +80 -68
  59. package/es/packages/components/touchchat/src/AiRobot/ChatPanel.vue2.mjs.map +1 -1
  60. package/es/packages/components/touchchat/src/AiRobot/Content.vue.mjs +3 -2
  61. package/es/packages/components/touchchat/src/AiRobot/Content.vue.mjs.map +1 -1
  62. package/es/packages/components/touchchat/src/AiRobot/Content.vue2.mjs +144 -105
  63. package/es/packages/components/touchchat/src/AiRobot/Content.vue2.mjs.map +1 -1
  64. package/es/packages/components/touchchat/src/AiRobot/Header.vue.mjs +3 -2
  65. package/es/packages/components/touchchat/src/AiRobot/Header.vue.mjs.map +1 -1
  66. package/es/packages/components/touchchat/src/AiRobot/Header.vue2.mjs +36 -27
  67. package/es/packages/components/touchchat/src/AiRobot/Header.vue2.mjs.map +1 -1
  68. package/es/packages/components/touchchat/src/AiRobot/Input.vue.mjs +3 -2
  69. package/es/packages/components/touchchat/src/AiRobot/Input.vue.mjs.map +1 -1
  70. package/es/packages/components/touchchat/src/AiRobot/Scene.vue.mjs +3 -2
  71. package/es/packages/components/touchchat/src/AiRobot/Scene.vue.mjs.map +1 -1
  72. package/es/packages/components/touchchat/src/AiRobot/Scene.vue2.mjs +14 -8
  73. package/es/packages/components/touchchat/src/AiRobot/Scene.vue2.mjs.map +1 -1
  74. package/es/packages/components/touchchat/src/AiRobot/component/HelloChat.vue.mjs +3 -2
  75. package/es/packages/components/touchchat/src/AiRobot/component/HelloChat.vue.mjs.map +1 -1
  76. package/es/packages/components/touchchat/src/AiRobot/component/HelloChat.vue2.mjs +219 -159
  77. package/es/packages/components/touchchat/src/AiRobot/component/HelloChat.vue2.mjs.map +1 -1
  78. package/es/packages/components/touchchat/src/AiRobot/component/face.vue.mjs +3 -2
  79. package/es/packages/components/touchchat/src/AiRobot/component/face.vue.mjs.map +1 -1
  80. package/es/packages/components/touchchat/src/AiRobot/component/face.vue2.mjs +22 -9
  81. package/es/packages/components/touchchat/src/AiRobot/component/face.vue2.mjs.map +1 -1
  82. package/es/packages/components/touchchat/src/AiRobot/component/letter.vue.mjs +3 -2
  83. package/es/packages/components/touchchat/src/AiRobot/component/letter.vue.mjs.map +1 -1
  84. package/es/packages/components/touchchat/src/AiRobot/component/letter.vue2.mjs +6 -2
  85. package/es/packages/components/touchchat/src/AiRobot/component/letter.vue2.mjs.map +1 -1
  86. package/es/packages/components/touchchat/src/AiRobot/component/meterialPrepare.vue.mjs +3 -2
  87. package/es/packages/components/touchchat/src/AiRobot/component/meterialPrepare.vue.mjs.map +1 -1
  88. package/es/packages/components/touchchat/src/AiRobot/component/meterialPrepare.vue2.mjs +2 -2
  89. package/es/packages/components/touchchat/src/AiRobot/component/start.vue.mjs +3 -2
  90. package/es/packages/components/touchchat/src/AiRobot/component/start.vue.mjs.map +1 -1
  91. package/es/packages/components/touchchat/src/AiRobot/component/start.vue2.mjs +2 -2
  92. package/es/packages/components/touchchat/src/AiRobot/index.vue.mjs +3 -2
  93. package/es/packages/components/touchchat/src/AiRobot/index.vue.mjs.map +1 -1
  94. package/es/packages/components/touchchat/src/AiRobot/index.vue2.mjs +107 -39
  95. package/es/packages/components/touchchat/src/AiRobot/index.vue2.mjs.map +1 -1
  96. package/es/packages/components/touchchat/src/index.vue.mjs +3 -2
  97. package/es/packages/components/touchchat/src/index.vue.mjs.map +1 -1
  98. package/es/packages/components/touchchat/src/index.vue2.mjs +84 -52
  99. package/es/packages/components/touchchat/src/index.vue2.mjs.map +1 -1
  100. package/lib/_virtual/_plugin-vue_export-helper.js +14 -0
  101. package/lib/_virtual/_plugin-vue_export-helper.js.map +1 -0
  102. package/lib/package.json.js +1 -1
  103. package/lib/packages/components/touchchat/component/CardView.vue.js +3 -2
  104. package/lib/packages/components/touchchat/component/CardView.vue.js.map +1 -1
  105. package/lib/packages/components/touchchat/component/CardView.vue2.js +66 -42
  106. package/lib/packages/components/touchchat/component/CardView.vue2.js.map +1 -1
  107. package/lib/packages/components/touchchat/component/FileView.vue.js +3 -2
  108. package/lib/packages/components/touchchat/component/FileView.vue.js.map +1 -1
  109. package/lib/packages/components/touchchat/component/FileView.vue2.js +16 -3
  110. package/lib/packages/components/touchchat/component/FileView.vue2.js.map +1 -1
  111. package/lib/packages/components/touchchat/component/HelloChat.vue.js +3 -2
  112. package/lib/packages/components/touchchat/component/HelloChat.vue.js.map +1 -1
  113. package/lib/packages/components/touchchat/component/HelloChat.vue2.js +26 -14
  114. package/lib/packages/components/touchchat/component/HelloChat.vue2.js.map +1 -1
  115. package/lib/packages/components/touchchat/component/ImageView.vue.js +3 -2
  116. package/lib/packages/components/touchchat/component/ImageView.vue.js.map +1 -1
  117. package/lib/packages/components/touchchat/component/LinkView.vue.js +3 -2
  118. package/lib/packages/components/touchchat/component/LinkView.vue.js.map +1 -1
  119. package/lib/packages/components/touchchat/component/LinkView.vue2.js +16 -2
  120. package/lib/packages/components/touchchat/component/LinkView.vue2.js.map +1 -1
  121. package/lib/packages/components/touchchat/index.js +4 -4
  122. package/lib/packages/components/touchchat/index.js.map +1 -1
  123. package/lib/packages/components/touchchat/src/AiChat/AiMessage.vue.js +3 -2
  124. package/lib/packages/components/touchchat/src/AiChat/AiMessage.vue.js.map +1 -1
  125. package/lib/packages/components/touchchat/src/AiChat/AiMessage.vue2.js +223 -162
  126. package/lib/packages/components/touchchat/src/AiChat/AiMessage.vue2.js.map +1 -1
  127. package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue.js +3 -2
  128. package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue.js.map +1 -1
  129. package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js +136 -115
  130. package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js.map +1 -1
  131. package/lib/packages/components/touchchat/src/AiChat/HistoryList.vue.js +3 -2
  132. package/lib/packages/components/touchchat/src/AiChat/HistoryList.vue.js.map +1 -1
  133. package/lib/packages/components/touchchat/src/AiChat/HistoryList.vue2.js +215 -141
  134. package/lib/packages/components/touchchat/src/AiChat/HistoryList.vue2.js.map +1 -1
  135. package/lib/packages/components/touchchat/src/AiChat/HistorySidebar.vue.js +3 -2
  136. package/lib/packages/components/touchchat/src/AiChat/HistorySidebar.vue.js.map +1 -1
  137. package/lib/packages/components/touchchat/src/AiChat/HistorySidebar.vue2.js +59 -51
  138. package/lib/packages/components/touchchat/src/AiChat/HistorySidebar.vue2.js.map +1 -1
  139. package/lib/packages/components/touchchat/src/AiChat/MessageActions.vue.js +3 -2
  140. package/lib/packages/components/touchchat/src/AiChat/MessageActions.vue.js.map +1 -1
  141. package/lib/packages/components/touchchat/src/AiChat/MessageActions.vue2.js +199 -166
  142. package/lib/packages/components/touchchat/src/AiChat/MessageActions.vue2.js.map +1 -1
  143. package/lib/packages/components/touchchat/src/AiChat/TouchChat.vue.js +3 -2
  144. package/lib/packages/components/touchchat/src/AiChat/TouchChat.vue.js.map +1 -1
  145. package/lib/packages/components/touchchat/src/AiChat/TouchChat.vue2.js +195 -156
  146. package/lib/packages/components/touchchat/src/AiChat/TouchChat.vue2.js.map +1 -1
  147. package/lib/packages/components/touchchat/src/AiChat/TouchHistory.vue.js +3 -2
  148. package/lib/packages/components/touchchat/src/AiChat/TouchHistory.vue.js.map +1 -1
  149. package/lib/packages/components/touchchat/src/AiChat/TouchHistory.vue2.js +89 -16
  150. package/lib/packages/components/touchchat/src/AiChat/TouchHistory.vue2.js.map +1 -1
  151. package/lib/packages/components/touchchat/src/AiChat/UserMessage.vue.js +3 -2
  152. package/lib/packages/components/touchchat/src/AiChat/UserMessage.vue.js.map +1 -1
  153. package/lib/packages/components/touchchat/src/AiChat/UserMessage.vue2.js +35 -26
  154. package/lib/packages/components/touchchat/src/AiChat/UserMessage.vue2.js.map +1 -1
  155. package/lib/packages/components/touchchat/src/AiRobot/ChatPanel.vue.js +3 -2
  156. package/lib/packages/components/touchchat/src/AiRobot/ChatPanel.vue.js.map +1 -1
  157. package/lib/packages/components/touchchat/src/AiRobot/ChatPanel.vue2.js +79 -67
  158. package/lib/packages/components/touchchat/src/AiRobot/ChatPanel.vue2.js.map +1 -1
  159. package/lib/packages/components/touchchat/src/AiRobot/Content.vue.js +3 -2
  160. package/lib/packages/components/touchchat/src/AiRobot/Content.vue.js.map +1 -1
  161. package/lib/packages/components/touchchat/src/AiRobot/Content.vue2.js +143 -104
  162. package/lib/packages/components/touchchat/src/AiRobot/Content.vue2.js.map +1 -1
  163. package/lib/packages/components/touchchat/src/AiRobot/Header.vue.js +3 -2
  164. package/lib/packages/components/touchchat/src/AiRobot/Header.vue.js.map +1 -1
  165. package/lib/packages/components/touchchat/src/AiRobot/Header.vue2.js +35 -26
  166. package/lib/packages/components/touchchat/src/AiRobot/Header.vue2.js.map +1 -1
  167. package/lib/packages/components/touchchat/src/AiRobot/Input.vue.js +3 -2
  168. package/lib/packages/components/touchchat/src/AiRobot/Input.vue.js.map +1 -1
  169. package/lib/packages/components/touchchat/src/AiRobot/Scene.vue.js +3 -2
  170. package/lib/packages/components/touchchat/src/AiRobot/Scene.vue.js.map +1 -1
  171. package/lib/packages/components/touchchat/src/AiRobot/Scene.vue2.js +14 -8
  172. package/lib/packages/components/touchchat/src/AiRobot/Scene.vue2.js.map +1 -1
  173. package/lib/packages/components/touchchat/src/AiRobot/component/HelloChat.vue.js +3 -2
  174. package/lib/packages/components/touchchat/src/AiRobot/component/HelloChat.vue.js.map +1 -1
  175. package/lib/packages/components/touchchat/src/AiRobot/component/HelloChat.vue2.js +219 -159
  176. package/lib/packages/components/touchchat/src/AiRobot/component/HelloChat.vue2.js.map +1 -1
  177. package/lib/packages/components/touchchat/src/AiRobot/component/face.vue.js +3 -2
  178. package/lib/packages/components/touchchat/src/AiRobot/component/face.vue.js.map +1 -1
  179. package/lib/packages/components/touchchat/src/AiRobot/component/face.vue2.js +21 -8
  180. package/lib/packages/components/touchchat/src/AiRobot/component/face.vue2.js.map +1 -1
  181. package/lib/packages/components/touchchat/src/AiRobot/component/letter.vue.js +3 -2
  182. package/lib/packages/components/touchchat/src/AiRobot/component/letter.vue.js.map +1 -1
  183. package/lib/packages/components/touchchat/src/AiRobot/component/letter.vue2.js +6 -2
  184. package/lib/packages/components/touchchat/src/AiRobot/component/letter.vue2.js.map +1 -1
  185. package/lib/packages/components/touchchat/src/AiRobot/component/meterialPrepare.vue.js +3 -2
  186. package/lib/packages/components/touchchat/src/AiRobot/component/meterialPrepare.vue.js.map +1 -1
  187. package/lib/packages/components/touchchat/src/AiRobot/component/meterialPrepare.vue2.js +2 -2
  188. package/lib/packages/components/touchchat/src/AiRobot/component/meterialPrepare.vue2.js.map +1 -1
  189. package/lib/packages/components/touchchat/src/AiRobot/component/start.vue.js +3 -2
  190. package/lib/packages/components/touchchat/src/AiRobot/component/start.vue.js.map +1 -1
  191. package/lib/packages/components/touchchat/src/AiRobot/component/start.vue2.js +2 -2
  192. package/lib/packages/components/touchchat/src/AiRobot/component/start.vue2.js.map +1 -1
  193. package/lib/packages/components/touchchat/src/AiRobot/index.vue.js +3 -2
  194. package/lib/packages/components/touchchat/src/AiRobot/index.vue.js.map +1 -1
  195. package/lib/packages/components/touchchat/src/AiRobot/index.vue2.js +106 -38
  196. package/lib/packages/components/touchchat/src/AiRobot/index.vue2.js.map +1 -1
  197. package/lib/packages/components/touchchat/src/index.vue.js +3 -2
  198. package/lib/packages/components/touchchat/src/index.vue.js.map +1 -1
  199. package/lib/packages/components/touchchat/src/index.vue2.js +83 -51
  200. package/lib/packages/components/touchchat/src/index.vue2.js.map +1 -1
  201. package/package.json +1 -1
  202. package/theme/components/index.css +12 -0
  203. package/theme/index.css +12 -0
  204. package/theme/skin/default.css +12 -0
@@ -1 +1 @@
1
- {"version":3,"file":"TouchChat.vue2.js","sources":["../../../../../../../packages/components/touchchat/src/AiChat/TouchChat.vue"],"sourcesContent":["<template>\n <div ref=\"chatContainer\" class=\"chat-container\">\n <div v-if=\"chatList.length === 0\" class=\"hello-chat-content\">\n <slot name=\"welcome\">\n <HelloChat @send-message=\"sendMessage\" />\n </slot>\n </div>\n <!-- Chat messages list -->\n <div class=\"chat-messages\">\n <template v-for=\"(item, index) in chatList\" :key=\"item.chatId\">\n <UserMessage\n v-if=\"item.user === 'u'\"\n :item=\"item\"\n :index=\"index\"\n @copy=\"handleMessageAction('copy', index)\"\n @edit=\"handleMessageAction('edit', index)\"\n @delete=\"handleMessageAction('delete', index)\"\n @save-edit=\"saveEdit\"\n @cancel-edit=\"cancelEdit(index)\"\n >\n <template #userAvatar>\n <slot name=\"userAvatar\" />\n </template>\n </UserMessage>\n <AiMessage\n v-else\n :item=\"item\"\n :index=\"index\"\n :enable-deep-thinking=\"enableDeepThinking\"\n @copy=\"handleMessageAction('copy', index)\"\n @retry=\"handleMessageAction('retry', index)\"\n @like=\"handleMessageAction('like', index)\"\n @dislike=\"handleMessageAction('dislike', index)\"\n @content-rendered=\"attachCopyButtons\"\n >\n <!-- 新增插槽透传 -->\n <template #aiMessageContent>\n <slot name=\"aiMessageContent\" :item=\"item\" :index=\"index\" />\n </template>\n <template #aiAvatar>\n <slot name=\"aiAvatar\" />\n </template>\n </AiMessage>\n </template>\n </div>\n </div>\n <ChatInput\n v-model:input-value=\"inputValue\"\n v-model:enable-deep-thinking=\"enableDeepThinking\"\n :is-chating=\"isChating\"\n @send=\"handleBeforeSend\"\n @stop=\"handleStop\"\n @toggle-deep-thinking=\"(val: boolean) => (enableDeepThinking = val)\"\n >\n <template #input=\"{ disabled }\">\n <slot name=\"input\" :disabled=\"disabled\" />\n </template>\n </ChatInput>\n</template>\n\n<script lang=\"ts\" setup>\nimport UserMessage from './UserMessage.vue';\nimport AiMessage from './AiMessage.vue';\nimport ChatInput from './ChatInput.vue';\nimport { ref, onMounted, onBeforeUnmount, nextTick, defineEmits, inject } from 'vue';\nimport { throttle } from 'throttle-debounce';\nimport { FetchStream } from '../../utils/fetchStream.ts';\nimport { ChatRobot } from '../../utils/chatRobot.ts';\nimport markdown from '../../utils/markdown.ts';\nimport HelloChat from '../../component/HelloChat.vue';\nimport { showToast } from '../../utils/tools.ts';\n\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 isShowLike?: boolean; // 是否显示点赞\n // 添加编辑状态属性\n isEditing?: boolean;\n editContent?: string;\n componentName?: string;\n // 添加深度思考相关属性\n // thinkStatus?: 'thinking' | 'completed' | 'stopped';\n thinkStatus?: string;\n thinkStartTime?: number;\n thinkTime?: number;\n [key: string]: unknown;\n}\n\ninterface ChatInfoItem {\n msgContent: string;\n // 可以根据实际情况添加其他属性\n}\n\nconst emit = defineEmits(['sendMessage']);\n// const ToChatContainerProps = inject('ToChatContainerProps');\n// const ToAiMessageProps = inject('ToAiMessageProps');\nconst action = inject<string>('action', '');\nconst headers = inject<Record<string, string> | Headers | undefined>('headers', undefined);\nconst body = inject<Record<string, any> | undefined>('body', undefined);\nconst rootMap = inject<Record<string, any>>('rootMap', {});\nconst token = inject<string>('token', '');\nconst wsUrl = inject<string>('wsUrl', '');\nconst connectionType = inject('connectionType');\nconst isDeepSeek = inject<boolean>('isDeepSeek', true);\n\n// eslint-disable-next-line vue/no-dupe-keys\nconst props = defineProps({\n // connectionType: {\n // type: String as () => 'SSE' | 'Websocket',\n // default: 'SSE',\n // },\n // wsUrl: {\n // type: String,\n // default: '',\n // },\n // token: {\n // type: String,\n // default: '',\n // },\n model: {\n type: String,\n default: 'deepseek-v3',\n },\n value: {\n type: Array as () => ChatMessage[],\n default: () => [],\n },\n placeholder: {\n type: String,\n default: '快来和我聊天吧~',\n },\n components: {\n type: Object,\n default: () => ({}),\n },\n openSSECallback: {\n type: Function as unknown as () => (fetchStream: typeof FetchStream) => void,\n default: null,\n },\n});\n\nconst chatContainer = ref<HTMLElement | null>(null);\nconst htmlContentRef = ref<(HTMLElement | null)[]>([]);\nconst thinkingContentRef = ref<(HTMLElement | null)[]>([]);\nconst reasoningContentRef = ref<(HTMLElement | null)[]>([]); // 添加深度思考引用\nconst isMounted = ref(false); // 新增组件挂载状态跟踪\n\n// const isReady = ref(false);\nconst isChating = ref(false);\nconst inputValue = ref('');\nconst enableDeepThinking = ref(false); // 深度思考开关状态\nconst chatList = ref<ChatMessage[]>([]);\n// 将字符串数组改为对象数组\nconst renderQueue = ref<\n Array<{ mainContent: string; thinkContent: string; reasoningContent: string }>\n>([]);\nconst isRendering = ref(false);\nconst currIndex = ref(0);\nconst fetchStream = ref<InstanceType<typeof FetchStream> | null>(null);\nconst TouchChatRobot = ref<ChatRobot>();\n// 新增一个变量来跟踪组件是否正在卸载\nconst isUnmounting = ref(false);\n\n// 修改init方法确保原始数据已标准化\nconst init = () => {\n // Register external components\n // if (props.components instanceof Object) {\n // Object.keys(props.components).forEach(() => {\n // // Vue 3 global component registration is different\n // // You might need to register them at app level instead\n // console.warn('Component registration needs to be handled at app level in Vue 3');\n // });\n // }\n\n // isReady.value = true;\n if (Array.isArray(props.value) && props.value.length) {\n // 直接标准化并赋值给chatList,不创建中间计算属性\n chatList.value = props.value.map(item => ({\n ...item,\n // isShowAvatar: item.isShowAvatar ?? true,\n // avatar: item.avatar || (item.user === 'u' ? props.userAvatar : props.aiAvatar),\n content: item.thinkContent ? item.content || '' : item.content || '',\n thinkContent: item.thinkContent || '',\n }));\n\n nextTick(() => {\n requestAnimationFrame(() => {\n try {\n chatList.value.forEach((item, index) => {\n currIndex.value = index;\n // 严格分离渲染\n if (item.thinkContent) {\n renderContent(item.thinkContent, 'thinking');\n }\n // 添加深度思考初始渲染\n if (item.reasoningContent) {\n renderContent(item.reasoningContent, 'reasoning');\n }\n if (item.content) {\n renderContent(item.content, 'main');\n }\n });\n // scrollToBottom();\n } catch (error) {\n console.error('初始渲染失败:', error);\n }\n });\n });\n }\n if (connectionType === 'Websocket') {\n openWebsocket();\n }\n};\n\nconst openWebsocket = () => {\n if (!wsUrl) {\n throw new Error('wsUrl is required');\n }\n if (!token) {\n throw new Error('token is required');\n }\n // 与 AI 大模型对话\n let config = {\n token,\n wsUrl,\n };\n TouchChatRobot.value = new ChatRobot(config);\n\n // 设置监听事件\n // AI 对话成功回调\n TouchChatRobot.value &&\n TouchChatRobot.value.addListener('chatCrmSuccess', {\n msgCallback: chatCrmSuccess,\n statusCallback: () => {},\n });\n // AI 对话错误回调\n TouchChatRobot.value &&\n TouchChatRobot.value.addListener('onMessageError', {\n msgCallback: () => {},\n });\n // AI 对话连接错误回调\n TouchChatRobot.value &&\n TouchChatRobot.value.addListener('chatCrmError', {\n msgCallback: data => {\n console.log('AI 对话连接错误回调', data);\n },\n });\n TouchChatRobot.value.connect();\n};\n\nconst chatCrmSuccess = (data: any) => {\n if (data && data.chatType === 'response') {\n if (Array.isArray(data.chatInfo)) {\n // 获取大模型返回的对话\n let msgContentList = (data.chatInfo as ChatInfoItem[]).map(item => item.msgContent);\n let msgContent = '';\n if (msgContentList.length) {\n msgContent = msgContentList[0];\n }\n\n chatList.value.push({\n user: 'u',\n type: 'text',\n content: msgContent,\n });\n }\n }\n};\n\nconst componentNameFn = () => {\n interface ComponentName {\n componentName: string;\n [key: string]: unknown;\n }\n const templateMap = {\n FileView: 'FileView',\n ImageView: 'ImageView',\n LinkView: 'LinkView',\n CardView: 'CardView',\n '': '',\n };\n const newMap = {\n ...templateMap,\n ...rootMap,\n };\n\n const keys = Object.keys(newMap);\n const randomIndex = Math.floor(Math.random() * keys.length);\n const key = keys[randomIndex];\n const componentInfo: ComponentName = {\n componentName: key,\n };\n return componentInfo;\n};\n\nconst openSSE = (userContent: string, insertIndex?: number, type?: number) => {\n if (isUnmounting.value) return;\n isChating.value = true;\n\n if (props.openSSECallback) {\n props.openSSECallback(FetchStream);\n return;\n }\n\n // 查找当前正在处理的AI消息ID\n const currentAiMessage = chatList.value.find(item => item.isChating);\n if (currentAiMessage) {\n currentAiMessage.isShowLike = true;\n currentAiMessage.isShowCopy = true;\n }\n const chatId = currentAiMessage?.chatId || 'ai_' + crypto.randomUUID().replace(/-/gi, '');\n // 修复:使用独立变量存储AI回复内容,初始化为空\n let aiContent = currentAiMessage?.content || '';\n let thinkingContent = currentAiMessage?.thinkContent || '';\n let reasoningContent = currentAiMessage?.reasoningContent || '';\n\n // 如果是继续生成,则不需要添加新消息\n if (!currentAiMessage) {\n // 修改AI消息用户类型标识\n const chatItem: ChatMessage = {\n chatId: chatId,\n user: 'ai', // u:user, ai:ai\n type: 'text',\n isChating: true,\n content: '',\n thinkContent: '',\n reasoningContent: '',\n thinkStatus: 'thinking',\n thinkStartTime: Date.now(),\n isShowLike: true,\n isShowCopy: true,\n ...componentNameFn(),\n };\n // 根据插入位置决定添加方式\n if (insertIndex !== undefined && insertIndex <= chatList.value.length) {\n chatList.value.splice(insertIndex, 0, chatItem);\n } else {\n chatList.value.push(chatItem);\n }\n }\n currIndex.value = chatList.value.findIndex(ele => ele.chatId === chatId);\n fetchStream.value = new FetchStream({\n url: action ?? 'https://api.apiyi.com/v1/chat/completions',\n requestInit: {\n headers: headers ?? {\n 'Content-Type': 'application/json',\n Authorization: 'Bearer sk-fe9MtODvds8wpzz05f3417Fe3e9641C1926e6fC588425dEd',\n },\n body: !isDeepSeek\n ? JSON.stringify(body)\n : JSON.stringify({\n model: enableDeepThinking.value ? 'deepseek-reasoner' : 'deepseek-v3',\n messages: [\n {\n role: 'user',\n content: userContent, // 使用传入的用户内容参数\n },\n ],\n stream: true,\n }),\n },\n onmessage: (line: string) => {\n if (isUnmounting.value) return;\n let dataString = '';\n if (line.length) {\n if (line.includes('data:')) {\n dataString = line.split('data:')[1];\n } else if (line.startsWith('{') && line.endsWith('}')) {\n dataString = line;\n }\n }\n\n dataString = dataString.trim();\n\n if (dataString && dataString.startsWith('{') && dataString.endsWith('}')) {\n const result = JSON.parse(dataString);\n\n // const newAiMessage = chatList.value.find(ele => ele.chatId === chatId);\n const newAiMessage = chatList.value[currIndex.value];\n\n if (isDeepSeek) {\n // 分离普通内容存储\n if (result?.choices?.[0]?.delta?.content) {\n aiContent += result.choices[0].delta.content;\n // 当content有值且思考状态为thinking时,标记为completed并计算时间\n if (newAiMessage?.thinkStatus === 'thinking') {\n newAiMessage.thinkStatus = 'completed';\n newAiMessage.thinkTime = Date.now() - (newAiMessage.thinkStartTime || Date.now());\n }\n }\n\n // 独立存储思考内容\n if (result?.choices?.[0]?.delta?.reasoning_content) {\n reasoningContent += result.choices[0].delta.reasoning_content;\n // 当reasoningContent有值且尚未开始计时时,标记为thinking并记录开始时间\n if (!newAiMessage?.thinkStatus) {\n newAiMessage.thinkStatus = 'thinking';\n newAiMessage.thinkStartTime = Date.now();\n }\n }\n\n // 删除未使用的deep_thought处理代码\n // if (enableDeepThinking.value && result?.choices?.[0]?.delta?.deep_thought) {\n // deepThoughtContent += result.choices[0].delta.deep_thought;\n // }\n } else {\n // 分离普通内容存储\n if (result?.message && result?.category === 'answer') {\n aiContent += result.message;\n }\n }\n\n // 传递分离后的数据进行渲染\n if (chatList.value.some(ele => ele.chatId === chatId)) {\n enqueueRender({\n mainContent: aiContent,\n thinkContent: thinkingContent,\n // 修正字段名:deepThought → reasoningContent\n reasoningContent: reasoningContent,\n });\n }\n if (type === 1) {\n scrollToBottom();\n }\n }\n },\n ondone: () => {\n nextTick(() => {\n isChating.value = false;\n if (isUnmounting.value) return;\n if (!isMounted.value) return;\n const index = chatList.value.findIndex(ele => ele.chatId === chatId);\n if (index !== -1 && chatList.value[index]) {\n chatList.value[index].isChating = false;\n if (htmlContentRef.value[index] && document.body.contains(htmlContentRef.value[index])) {\n try {\n if (\n isMounted.value &&\n chatContainer.value &&\n document.body.contains(chatContainer.value) &&\n type === 1\n ) {\n scrollToBottom();\n }\n } catch (error) {\n console.error('nextTick 滚动操作失败:', error);\n }\n }\n // 等待渲染队列处理完毕再发送数据\n const waitForRenderComplete = () => {\n if (renderQueue.value.length === 0 && !isRendering.value) {\n emit('sendMessage', chatList.value);\n console.log('done!', isChating.value, chatList.value);\n } else {\n requestAnimationFrame(waitForRenderComplete);\n }\n };\n waitForRenderComplete();\n }\n emit('sendMessage', chatList.value);\n console.log('done!', isChating.value, chatList.value);\n });\n },\n onabort: () => {\n isChating.value = false;\n if (isUnmounting.value) return;\n\n const currentAiMessage = chatList.value[currIndex.value];\n const hasContent =\n currentAiMessage &&\n (currentAiMessage.content ||\n currentAiMessage.thinkContent ||\n currentAiMessage.reasoningContent);\n\n if (currentAiMessage) {\n // 如果正在思考中,设置状态为stopped\n if (currentAiMessage.thinkStatus === 'thinking') {\n currentAiMessage.thinkStatus = 'stopped';\n currentAiMessage.thinkTime = Date.now() - (currentAiMessage.thinkStartTime || Date.now());\n }\n if (!hasContent) {\n // 场景1: AI尚未回复,清除用户消息和对应AI消息\n const userMessageIndex = currIndex.value - 1;\n if (userMessageIndex >= 0 && chatList.value[userMessageIndex].user === 'u') {\n // 先移除AI消息\n chatList.value.splice(currIndex.value, 1);\n // 再移除用户消息\n chatList.value.splice(userMessageIndex, 1);\n } else {\n // 仅移除AI消息\n chatList.value.splice(currIndex.value, 1);\n }\n } else {\n // 场景2: AI已回复,保留内容并添加省略号\n // 创建新对象确保Vue的响应式系统能检测到变化\n const updatedAiMessage = {\n ...currentAiMessage,\n isChating: false,\n content: currentAiMessage.content ? currentAiMessage.content + '。。。' : '',\n thinkContent: currentAiMessage.thinkContent\n ? currentAiMessage.thinkContent + '。。。'\n : undefined,\n reasoningContent: currentAiMessage.reasoningContent\n ? currentAiMessage.reasoningContent + '。。。'\n : undefined,\n thinkStatus: currentAiMessage.thinkStatus as 'thinking' | 'completed' | 'stopped',\n };\n\n // 使用splice替换元素,确保响应式更新\n chatList.value.splice(currIndex.value, 1, updatedAiMessage);\n\n // 立即更新DOM\n nextTick(() => {\n renderContent(updatedAiMessage.thinkContent || '', 'thinking');\n renderContent(updatedAiMessage.reasoningContent || '', 'reasoning');\n renderContent(updatedAiMessage.content || '', 'main');\n\n // DOM更新后再触发保存事件\n emit('sendMessage', [...chatList.value]);\n });\n return;\n }\n }\n\n // 对于清除消息的情况,直接触发保存\n emit('sendMessage', [...chatList.value]);\n },\n // 添加onerror回调函数来捕获异常\n onerror: (response: Error | Response) => {\n if (isUnmounting.value) return;\n isChating.value = false;\n\n // 判断response的类型\n let errorMessage = '未知错误';\n if (response instanceof Error) {\n console.error('API请求错误:', response);\n errorMessage = response.message;\n } else if (response instanceof Response) {\n console.error('API请求错误, 响应状态:', response.status, response.statusText);\n errorMessage = `请求失败: ${response.status} ${response.statusText}`;\n }\n\n // 获取当前正在处理的AI消息\n const currentAiMessage = chatList.value[currIndex.value];\n if (currentAiMessage) {\n // 更新AI消息内容,添加红色叉叉和错误信息\n currentAiMessage.content = `<div style=\"color: red; display: flex; align-items: center;\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"15\" height=\"16\" viewBox=\"0 0 15 16\" fill=\"none\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M7.5 15.5C11.6421 15.5 15 12.1421 15 8C15 3.85786 11.6421 0.5 7.5 0.5C3.35786 0.5 0 3.85786 0 8C0 12.1421 3.35786 15.5 7.5 15.5ZM9.7539 4.9506L10.5494 5.7461L8.2951 8.0001L10.5494 10.2539L9.7539 11.0494L7.5001 8.7951L5.2461 11.0494L4.4506 10.2539L6.7051 8.0001L4.4506 5.7461L5.2461 4.9506L7.5001 7.2051L9.7539 4.9506Z\" fill=\"#F93920\"/>\n</svg>${errorMessage}</div>`;\n currentAiMessage.isChating = false;\n currentAiMessage.componentName = '';\n currentAiMessage.isShowLike = false;\n currentAiMessage.isShowCopy = false;\n\n // 立即更新DOM\n nextTick(() => {\n renderContent(currentAiMessage.content || '', 'main');\n\n // DOM更新后触发保存事件\n emit('sendMessage', [...chatList.value]);\n });\n } else {\n // 如果没有当前AI消息,仍使用toast提示\n showToast(errorMessage, 'error', 3000);\n emit('sendMessage', [...chatList.value]);\n }\n },\n });\n};\n\nconst enqueueRender = (data: {\n mainContent: string;\n thinkContent: string;\n reasoningContent: string;\n}) => {\n if (isUnmounting.value || !isMounted.value) return;\n if (currIndex.value < 0 || currIndex.value >= chatList.value.length) return;\n renderQueue.value.push(data);\n if (!isRendering.value) {\n isRendering.value = true;\n processRenderQueue();\n }\n};\n\nconst processRenderQueue = () => {\n if (isUnmounting.value || !isMounted.value) {\n renderQueue.value = [];\n isRendering.value = false;\n return;\n }\n\n if (renderQueue.value.length === 0) {\n isRendering.value = false;\n return;\n }\n\n // 使用requestAnimationFrame优化渲染性能\n requestAnimationFrame(() => {\n const data = renderQueue.value.shift();\n if (data) {\n formatMarkdown(data);\n }\n processRenderQueue();\n });\n};\n\nonBeforeUnmount(() => {\n isUnmounting.value = true;\n if (fetchStream.value) {\n fetchStream.value.abort();\n }\n if (TouchChatRobot.value) {\n TouchChatRobot.value.close();\n TouchChatRobot.value = undefined;\n }\n isMounted.value = false;\n renderQueue.value = [];\n // 清空所有 ref 数组,避免内存泄漏\n htmlContentRef.value = [];\n thinkingContentRef.value = [];\n});\n\nconst formatMarkdown = (data: {\n mainContent: string;\n thinkContent: string;\n reasoningContent: string;\n}) => {\n if (!isMounted.value) return;\n if (currIndex.value < 0 || currIndex.value >= chatList.value.length) return;\n\n const currentItem = chatList.value[currIndex.value];\n // 将直接替换改为追加操作\n currentItem.thinkContent = data.thinkContent;\n currentItem.content = data.mainContent;\n currentItem.reasoningContent = data.reasoningContent;\n\n nextTick(() => {\n const thinkingContainer = thinkingContentRef.value[currIndex.value];\n if (thinkingContainer) {\n if (data.thinkContent) {\n renderContent(data.thinkContent, 'thinking');\n thinkingContainer.style.display = 'block';\n thinkingContainer.style.visibility = 'visible';\n } else {\n thinkingContainer.style.display = 'none';\n thinkingContainer.style.visibility = 'hidden';\n }\n }\n\n const reasoningContainer = reasoningContentRef.value[currIndex.value];\n if (reasoningContainer) {\n if (data.reasoningContent) {\n renderContent(data.reasoningContent, 'reasoning');\n reasoningContainer.style.display = 'block';\n reasoningContainer.style.visibility = 'visible';\n } else {\n reasoningContainer.style.display = 'none';\n reasoningContainer.style.visibility = 'hidden';\n }\n }\n\n renderContent(data.mainContent, 'main');\n // if (data.mainContent.trim()) {\n // renderContent(data.mainContent, 'main');\n // }\n\n // if (isMounted.value) {\n // scrollToBottom();\n // }\n });\n};\n\n// 在attachCopyButtons函数中调用showToast\nconst attachCopyButtons = (container: HTMLElement) => {\n const codeBlocks = container.querySelectorAll('pre code');\n codeBlocks.forEach(codeBlock => {\n const pre = codeBlock.parentElement;\n if (pre) {\n const copyBtn = document.createElement('button');\n copyBtn.className = 'copy-code-btn';\n copyBtn.textContent = '复制';\n copyBtn.addEventListener('click', () => {\n const code = codeBlock.textContent || '';\n navigator.clipboard.writeText(code).then(() => {\n // 调用toast提示\n showToast('复制成功', 'info', 2000);\n copyBtn.textContent = '已复制';\n setTimeout(() => {\n copyBtn.textContent = '复制';\n }, 2000);\n });\n }); // 修复:移动事件监听器闭合括号到此处\n\n // 将DOM操作移出事件回调\n pre.style.position = 'relative';\n pre.appendChild(copyBtn);\n }\n }); // 修复:添加缺失的forEach回调闭合括号\n};\n\n// 新增统一渲染函数\nconst renderContent = (\n content: string,\n type: 'main' | 'thinking' | 'reasoning',\n index?: number\n) => {\n const renderIndex = index ?? currIndex.value;\n if (renderIndex < 0 || renderIndex >= chatList.value.length) return;\n\n // 根据类型选择不同的ref数组和处理函数\n const refArrays = {\n main: htmlContentRef,\n thinking: thinkingContentRef,\n reasoning: reasoningContentRef,\n };\n const processors = {\n main: (content: string) => markdown?.render(content, { isReasoning: false }) || '',\n thinking: (content: string) => markdown?.render(content, { isReasoning: false }) || '',\n reasoning: (content: string) => markdown?.render(content, { isReasoning: false }) || '',\n };\n\n const container = refArrays[type].value[renderIndex];\n if (!container) return;\n\n // 统一的内容处理和渲染逻辑\n container.innerHTML = processors[type](content || '');\n attachCopyButtons(container);\n};\n\nconst sendMessage = (item: any) => {\n inputValue.value = item.name || '';\n handleBeforeSend();\n};\n\nconst sendMessageInject = inject<(value: string) => void>('handleSend', () => {\n console.warn('未提供handleSend函数');\n});\n\nconst beforeSend = inject<() => boolean>('beforeSend', () => true);\n\nconst handleBeforeSend = () => {\n console.log('handleBeforeSend === 753');\n if (beforeSend && !isDeepSeek) {\n const fn = beforeSend();\n if (fn && typeof (fn as any).then === 'function') {\n (Promise.resolve(fn) as Promise<boolean>)\n .then(() => {\n handleSend();\n })\n .catch(error => {\n console.log(error);\n });\n } else {\n if (fn) handleSend();\n }\n } else if (isDeepSeek) {\n handleSend();\n }\n};\n\nconst handleSend = () => {\n console.log('handleSend === 773');\n if (isChating.value || !inputValue.value.trim()) return;\n const userChatId = 'user_' + crypto.randomUUID().replace(/-/gi, '');\n\n // 创建标准化用户消息(修复未定义messageUtils问题)\n const userMessage: ChatMessage = {\n chatId: userChatId, // 添加唯一chatId\n user: 'u',\n type: 'text',\n content: inputValue.value,\n // isShowAvatar: true,\n // avatar: props.userAvatar,\n };\n sendMessageInject(inputValue.value);\n // 发送用户消息后立即插入到聊天列表\n chatList.value.push(userMessage);\n const index = chatList.value.length - 1;\n\n // 修复:使用nextTick确保DOM更新后再渲染\n nextTick(() => {\n renderContent(userMessage.content, 'main', index);\n // 确保滚动到底部\n scrollToBottom();\n });\n\n // 继续处理AI回复逻辑\n if (connectionType === 'SSE') {\n openSSE(inputValue.value, index + 1, 1);\n } else if (connectionType === 'Websocket') {\n let chatInfo = [\n {\n type: 'text',\n msgContent: inputValue.value,\n },\n ];\n TouchChatRobot.value?.send(chatInfo);\n // ChatRobot.send(chatInfo)\n }\n\n inputValue.value = '';\n};\n\nconst handleStop = () => {\n // 停止流请求\n fetchStream.value?.abort();\n\n // 查找当前正在回复的AI消息\n const aiIndex = chatList.value.findIndex(item => item.isChating);\n if (aiIndex !== -1) {\n const currentAiMessage = chatList.value[aiIndex];\n\n // 检查AI是否已回复内容\n if (currentAiMessage.content?.trim()) {\n // 修复:传递索引参数确保正确渲染\n nextTick(() => {\n // 已回复内容,添加省略号并停止\n chatList.value[aiIndex] = {\n ...currentAiMessage,\n content: currentAiMessage.content + '...',\n isChating: false,\n };\n renderContent(chatList.value[aiIndex].content, 'main', aiIndex);\n emit('sendMessage', chatList.value);\n });\n } else {\n // 未开始回复,移除对应的用户消息和AI消息\n if (aiIndex > 0) {\n const userMessageIndex = aiIndex - 1;\n // 确认前一条是用户消息\n if (chatList.value[userMessageIndex].user === 'u') {\n chatList.value.splice(userMessageIndex, 2);\n } else {\n chatList.value.splice(aiIndex, 1);\n }\n } else {\n chatList.value.splice(aiIndex, 1);\n }\n }\n } else {\n // 没有找到正在回复的AI消息,移除最后一条用户消息\n const lastIndex = chatList.value.length - 1;\n if (lastIndex >= 0 && chatList.value[lastIndex].user === 'u') {\n chatList.value.pop();\n }\n }\n\n isChating.value = false;\n};\nconst scrollToBottom = throttle(500, () => {\n const endEl = document.querySelector('.to-chat-item:last-child');\n if (endEl?.scrollIntoView) {\n endEl.scrollIntoView({ behavior: 'smooth', block: 'end', inline: 'nearest' });\n }\n});\n\n// 统一的事件处理函数\nconst handleMessageAction = (\n action: 'copy' | 'edit' | 'retry' | 'like' | 'dislike' | 'delete',\n index: number\n) => {\n const message = chatList.value[index];\n if (!message) return;\n\n switch (action) {\n case 'copy':\n navigator.clipboard.writeText(message.content).then(() => {\n // 修复:使用工具函数显示提示\n showToast('复制成功', 'info');\n });\n break;\n case 'edit':\n // 启用编辑模式\n if (message) {\n message.isEditing = true;\n message.editContent = message.content; // 初始化编辑内容\n }\n break;\n case 'delete':\n messageUtils.deleteMessageChain(index);\n emit('sendMessage', chatList.value);\n break;\n case 'retry': {\n // 获取当前AI消息和对应的用户消息\n const aiMessage = chatList.value[index];\n const userMessageIndex = index - 1;\n const userMessage = chatList.value[userMessageIndex];\n\n if (userMessage && userMessage.user === 'u') {\n // 创建用户消息内容副本\n\n const updatedAiMessage = {\n ...aiMessage,\n content: '',\n thinkContent: '',\n reasoningContent: '',\n isLiked: false,\n isDisliked: false,\n isChating: true,\n // 保留其他必要属性\n chatId: aiMessage.chatId,\n user: aiMessage.user,\n type: aiMessage.type,\n // isShowAvatar: aiMessage.isShowAvatar,\n // avatar: aiMessage.avatar,\n thinkStatus: 'completed',\n thinkStartTime: 0,\n thinkEndTime: 0,\n };\n chatList.value.splice(index, 1, updatedAiMessage);\n\n // 新增:使用nextTick确保DOM更新后再发起请求\n nextTick(() => {\n if (htmlContentRef.value[index]) htmlContentRef.value[index].innerHTML = '';\n if (thinkingContentRef.value[index]) thinkingContentRef.value[index].innerHTML = '';\n if (reasoningContentRef.value[index]) reasoningContentRef.value[index].innerHTML = '';\n // 使用用户内容副本调用openSSE,传入当前索引更新现有消息\n setTimeout(() => {\n openSSE(userMessage.content || '', index, 2);\n }, 50);\n });\n }\n break;\n }\n case 'like':\n messageUtils.updateMessage(index, {\n isLiked: true,\n isDisliked: false,\n });\n break;\n case 'dislike':\n messageUtils.updateMessage(index, {\n isLiked: false,\n isDisliked: true,\n });\n break;\n }\n};\n\n// 新增消息管理工具函数\nconst messageUtils = {\n // 更新消息内容\n updateMessage: (index: number, updates: Partial<ChatMessage>) => {\n if (index < 0 || index >= chatList.value.length) return;\n chatList.value.splice(index, 1, { ...chatList.value[index], ...updates });\n },\n\n // 删除消息及其后续AI回复\n deleteMessageChain: (index: number) => {\n if (index < 0 || index >= chatList.value.length) return;\n const nextIndex = index + 1;\n const deleteCount =\n nextIndex < chatList.value.length && chatList.value[nextIndex].user === 'ai' ? 2 : 1;\n chatList.value.splice(index, deleteCount);\n },\n\n // 创建标准化消息对象\n createStandardMessage: (data: Partial<ChatMessage>): ChatMessage => ({\n chatId: data.chatId || 'ai_' + crypto.randomUUID().replace(/-/gi, ''),\n user: data.user || 'ai',\n type: data.type || 'text',\n content: data.content || '',\n // isShowAvatar: data.isShowAvatar ?? true,\n // avatar: data.avatar || (data.user === 'u' ? props.userAvatar : props.aiAvatar),\n isChating: data.isChating ?? false,\n thinkContent: data.thinkContent || '',\n reasoningContent: data.reasoningContent || '',\n isLiked: data.isLiked ?? false,\n isDisliked: data.isDisliked ?? false,\n isEditing: data.isEditing ?? false,\n editContent: data.editContent ?? '',\n }),\n};\n\nonMounted(() => {\n init();\n isMounted.value = true; // 组件挂载时设置为 true\n});\n\nonBeforeUnmount(() => {\n if (fetchStream.value) {\n fetchStream.value.abort();\n }\n isMounted.value = false; // 组件卸载前设置为 false\n});\n\n// 添加编辑保存功能\nconst saveEdit = (index: number, newContent: string) => {\n const message = chatList.value[index];\n if (!message || !message.editContent) return;\n\n // if (message.editContent !== undefined) {\n // 创建新对象触发Vue响应式更新\n chatList.value[index] = {\n ...message,\n content: newContent,\n isEditing: false,\n editContent: undefined,\n };\n // 显式调用渲染函数\n nextTick(() => {\n renderContent(message.content, 'main', index);\n });\n // }\n\n // 删除对应的AI回复(如果存在)\n if (index + 1 < chatList.value.length && chatList.value[index + 1].user === 'ai') {\n chatList.value.splice(index + 1, 1);\n }\n\n // 调用openSSE获取新的AI回复,插入到用户消息之后\n openSSE(newContent, index + 1);\n\n // 触发保存事件\n emit('sendMessage', chatList.value);\n};\n\nconst cancelEdit = (index: number) => {\n const message = chatList.value[index];\n if (!message) return;\n\n // 关闭编辑模式并清空编辑内容\n message.isEditing = false;\n message.editContent = '';\n // 添加nextTick确保DOM正确切换回查看模式\n nextTick(() => {\n renderContent(message.content, 'main', index);\n });\n};\nexport type { ChatMessage };\n</script>\n\n<!-- <style>\n@import '../../style/ChatView.less';\n</style> -->\n"],"names":["inject","ref","fetchStream","nextTick","ChatRobot","FetchStream","currentAiMessage","showToast","onBeforeUnmount","content","markdown","throttle","action","onMounted","_createElementVNode","_createElementBlock","_renderSlot","_createVNode","HelloChat","_openBlock","_Fragment","_renderList","_createBlock","UserMessage","AiMessage","ChatInput","_withCtx"],"mappings":"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"}
1
+ {"version":3,"file":"TouchChat.vue2.js","sources":["../../../../../../../packages/components/touchchat/src/AiChat/TouchChat.vue"],"sourcesContent":["<template>\r\n <div ref=\"chatContainer\" class=\"chat-container\">\r\n\t<!-- <span>chatList === {{chatList}}</span> -->\r\n <div v-if=\"chatList.length === 0\" class=\"hello-chat-content\">\r\n <slot name=\"welcome\">\r\n <HelloChat @send-message=\"sendMessage\" />\r\n </slot>\r\n </div>\r\n <!-- Chat messages list -->\r\n <div class=\"chat-messages\">\r\n <template v-for=\"(item, index) in chatList\" :key=\"item.chatId\">\r\n <UserMessage\r\n v-if=\"item.user === 'u'\"\r\n :item=\"item\"\r\n :index=\"index\"\r\n @copy=\"handleMessageAction('copy', index)\"\r\n @edit=\"handleMessageAction('edit', index)\"\r\n @delete=\"handleMessageAction('delete', index)\"\r\n @save-edit=\"saveEdit\"\r\n @cancel-edit=\"cancelEdit(index)\"\r\n >\r\n <template #userAvatar>\r\n <slot name=\"userAvatar\" />\r\n </template>\r\n </UserMessage>\r\n <AiMessage\r\n v-else\r\n :item=\"item\"\r\n :index=\"index\"\r\n :enable-deep-thinking=\"enableDeepThinking\"\r\n @copy=\"handleMessageAction('copy', index)\"\r\n @retry=\"handleMessageAction('retry', index)\"\r\n @like=\"handleMessageAction('like', index)\"\r\n @dislike=\"handleMessageAction('dislike', index)\"\r\n @content-rendered=\"attachCopyButtons\"\r\n >\r\n <!-- 新增插槽透传 -->\r\n <template #aiMessageContent>\r\n <slot name=\"aiMessageContent\" :item=\"item\" :index=\"index\" />\r\n </template>\r\n <template #aiAvatar>\r\n <slot name=\"aiAvatar\" />\r\n </template>\r\n </AiMessage>\r\n </template>\r\n </div>\r\n </div>\r\n <ChatInput\r\n v-model:input-value=\"inputValue\"\r\n v-model:enable-deep-thinking=\"enableDeepThinking\"\r\n :is-chating=\"isChating\"\r\n @send=\"handleBeforeSend\"\r\n @stop=\"handleStop\"\r\n @toggle-deep-thinking=\"(val: boolean) => (enableDeepThinking = val)\"\r\n >\r\n <template #input=\"{ disabled }\">\r\n <slot name=\"input\" :disabled=\"disabled\" />\r\n </template>\r\n </ChatInput>\r\n</template>\r\n\r\n<script lang=\"ts\" setup>\r\nimport UserMessage from './UserMessage.vue';\r\nimport AiMessage from './AiMessage.vue';\r\nimport ChatInput from './ChatInput.vue';\r\nimport { ref, onMounted, onBeforeUnmount, nextTick, defineEmits, inject, watch } from 'vue';\r\nimport { throttle } from 'throttle-debounce';\r\nimport { FetchStream } from '../../utils/fetchStream.ts';\r\nimport { ChatRobot } from '../../utils/chatRobot.ts';\r\nimport markdown from '../../utils/markdown.ts';\r\nimport HelloChat from '../../component/HelloChat.vue';\r\nimport { showToast } from '../../utils/tools.ts';\r\n\r\ninterface ChatMessage {\r\n chatId?: string;\r\n user: string;\r\n type: string;\r\n content: string;\r\n isChating?: boolean;\r\n thinkContent?: string;\r\n reasoningContent?: string;\r\n isLiked?: boolean; // 新增点赞状态\r\n isDisliked?: boolean; // 新增踩状态\r\n isShowLike?: boolean; // 是否显示点赞\r\n // 添加编辑状态属性\r\n isEditing?: boolean;\r\n editContent?: string;\r\n componentName?: string;\r\n // 添加深度思考相关属性\r\n // thinkStatus?: 'thinking' | 'completed' | 'stopped';\r\n thinkStatus?: string;\r\n thinkStartTime?: number;\r\n thinkTime?: number;\r\n [key: string]: any;\r\n}\r\n\r\ninterface ChatInfoItem {\r\n msgContent: string;\r\n // 可以根据实际情况添加其他属性\r\n}\r\n\r\nconst emit = defineEmits(['sendMessage']);\r\nconst action = inject<string>('action', '');\r\nconst headers = inject<Record<string, string> | Headers | undefined>('headers', undefined);\r\nconst body = inject<Record<string, any> | undefined>('body', undefined);\r\n// const rootMap = inject<Record<string, any>>('rootMap', {});\r\nconst token = inject<string>('token', '');\r\nconst wsUrl = inject<string>('wsUrl', '');\r\nconst connectionType = inject('connectionType');\r\nconst isDeepSeek = inject<boolean>('isDeepSeek', true);\r\nconst aiChatType = inject<'Flow' | 'Intelligent'>('aiChatType', 'Flow');\r\nconst afterSendMessage = inject<(content: string) => void>('afterSendMessage', () => {\r\n console.warn('未提供afterSendMessage函数');\r\n});\r\n\r\nconst props = defineProps({\r\n model: {\r\n type: String,\r\n default: 'deepseek-v3',\r\n },\r\n value: {\r\n type: Array as () => ChatMessage[],\r\n default: () => [],\r\n },\r\n placeholder: {\r\n type: String,\r\n default: '快来和我聊天吧~',\r\n },\r\n components: {\r\n type: Object,\r\n default: () => ({}),\r\n },\r\n openSSECallback: {\r\n type: Function as unknown as () => (fetchStream: typeof FetchStream) => void,\r\n default: null,\r\n },\r\n});\r\n\r\nconst chatContainer = ref<HTMLElement | null>(null);\r\nconst htmlContentRef = ref<(HTMLElement | null)[]>([]);\r\nconst thinkingContentRef = ref<(HTMLElement | null)[]>([]);\r\nconst reasoningContentRef = ref<(HTMLElement | null)[]>([]); // 添加深度思考引用\r\nconst isMounted = ref(false); // 新增组件挂载状态跟踪\r\n\r\n// const isReady = ref(false);\r\nconst isChating = ref(false);\r\nconst inputValue = ref('');\r\nconst enableDeepThinking = ref(false); // 深度思考开关状态\r\nconst chatList = ref<ChatMessage[]>([]);\r\n// 将字符串数组改为对象数组\r\nconst renderQueue = ref<\r\n Array<{ mainContent: string; thinkContent: string; reasoningContent: string }>\r\n>([]);\r\nconst isRendering = ref(false);\r\nconst currIndex = ref(0);\r\nconst fetchStream = ref<InstanceType<typeof FetchStream> | null>(null);\r\nconst TouchChatRobot = ref<ChatRobot>();\r\nconst isUnmounting = ref(false);\r\nconst currentComponentName = ref('');\r\n\r\n// watch(chatList, (val) => {\r\n// \tif (!val.length && aiChatType === 'Intelligent') {\r\n// \t\tchatList.value = localStorage.getItem('chatList') ? JSON.parse(localStorage.getItem('chatHistory') || '') : [];\r\n// \t}\r\n// })\r\n\r\n// 修改init方法确保原始数据已标准化\r\nconst init = () => {\r\n if (Array.isArray(props.value) && props.value.length) {\r\n // 直接标准化并赋值给chatList,不创建中间计算属性\r\n chatList.value = props.value.map(item => ({\r\n ...item,\r\n content: item.thinkContent ? item.content || '' : item.content || '',\r\n thinkContent: item.thinkContent || '',\r\n }));\r\n\r\n nextTick(() => {\r\n requestAnimationFrame(() => {\r\n try {\r\n chatList.value.forEach((item, index) => {\r\n currIndex.value = index;\r\n // 严格分离渲染\r\n if (item.thinkContent) {\r\n renderContent(item.thinkContent, 'thinking');\r\n }\r\n // 添加深度思考初始渲染\r\n if (item.reasoningContent) {\r\n renderContent(item.reasoningContent, 'reasoning');\r\n }\r\n if (item.content) {\r\n renderContent(item.content, 'main');\r\n }\r\n });\r\n // scrollToBottom();\r\n } catch (error) {\r\n console.error('初始渲染失败:', error);\r\n }\r\n });\r\n });\r\n }\r\n if (connectionType === 'Websocket') {\r\n openWebsocket();\r\n }\r\n};\r\n\r\n// 添加watch监听props.value的变化\r\nwatch(\r\n () => props.value,\r\n (newVal, oldVal) => {\r\n // 只有当 newVal 和 oldVal 不同时才重新初始化\r\n if (Array.isArray(newVal) && newVal.length && JSON.stringify(newVal) !== JSON.stringify(oldVal)) {\r\n // 重新初始化chatList数据\r\n chatList.value = newVal.map(item => ({\r\n ...item,\r\n content: item.thinkContent ? item.content || '' : item.content || '',\r\n thinkContent: item.thinkContent || '',\r\n }));\r\n\r\n // 强制重新渲染UI\r\n nextTick(() => {\r\n requestAnimationFrame(() => {\r\n try {\r\n chatList.value.forEach((item, index) => {\r\n currIndex.value = index;\r\n if (item.thinkContent) {\r\n renderContent(item.thinkContent, 'thinking');\r\n }\r\n if (item.reasoningContent) {\r\n renderContent(item.reasoningContent, 'reasoning');\r\n }\r\n if (item.content) {\r\n renderContent(item.content, 'main');\r\n }\r\n });\r\n } catch (error) {\r\n console.error('数据更新渲染失败:', error);\r\n }\r\n });\r\n });\r\n }\r\n },\r\n { deep: true, immediate: true } // 深度监听并立即执行\r\n);\r\n\r\nconst openWebsocket = () => {\r\n if (!wsUrl) {\r\n throw new Error('wsUrl is required');\r\n }\r\n if (!token) {\r\n throw new Error('token is required');\r\n }\r\n // 与 AI 大模型对话\r\n let config = {\r\n token,\r\n wsUrl,\r\n };\r\n TouchChatRobot.value = new ChatRobot(config);\r\n\r\n // 设置监听事件\r\n // AI 对话成功回调\r\n TouchChatRobot.value &&\r\n TouchChatRobot.value.addListener('chatCrmSuccess', {\r\n msgCallback: chatCrmSuccess,\r\n statusCallback: () => {},\r\n });\r\n // AI 对话错误回调\r\n TouchChatRobot.value &&\r\n TouchChatRobot.value.addListener('onMessageError', {\r\n msgCallback: () => {},\r\n });\r\n // AI 对话连接错误回调\r\n TouchChatRobot.value &&\r\n TouchChatRobot.value.addListener('chatCrmError', {\r\n msgCallback: data => {\r\n console.log('AI 对话连接错误回调', data);\r\n },\r\n });\r\n TouchChatRobot.value.connect();\r\n};\r\n\r\nconst chatCrmSuccess = (data: any) => {\r\n if (data && data.chatType === 'response') {\r\n if (Array.isArray(data.chatInfo)) {\r\n // 获取大模型返回的对话\r\n let msgContentList = (data.chatInfo as ChatInfoItem[]).map(item => item.msgContent);\r\n let msgContent = '';\r\n if (msgContentList.length) {\r\n msgContent = msgContentList[0];\r\n }\r\n\r\n chatList.value.push({\r\n user: 'u',\r\n type: 'text',\r\n content: msgContent,\r\n });\r\n }\r\n }\r\n};\r\n\r\nconst openSSE = (userContent: string, insertIndex?: number, type?: number) => {\r\n if (isUnmounting.value) return;\r\n isChating.value = true;\r\n\r\n if (props.openSSECallback) {\r\n props.openSSECallback(FetchStream);\r\n return;\r\n }\r\n\r\n // 查找当前正在处理的AI消息ID\r\n const currentAiMessage = chatList.value.find(item => item.isChating);\r\n if (currentAiMessage) {\r\n currentAiMessage.isShowLike = true;\r\n currentAiMessage.isShowCopy = true;\r\n currentAiMessage.componentName = currentComponentName.value;\r\n }\r\n const chatId = currentAiMessage?.chatId || 'ai_' + crypto.randomUUID().replace(/-/gi, '');\r\n // 修复:使用独立变量存储AI回复内容,初始化为空\r\n let aiContent = currentAiMessage?.content || '';\r\n let thinkingContent = currentAiMessage?.thinkContent || '';\r\n let reasoningContent = currentAiMessage?.reasoningContent || '';\r\n let allAiContent = '';\r\n// console.log(currentComponentName.value, 'currentComponentName.value === TouchChat.vue === 360');\r\n\r\n // 如果是继续生成,则不需要添加新消息\r\n if (!currentAiMessage) {\r\n // 修改AI消息用户类型标识\r\n const chatItem: ChatMessage = {\r\n chatId: chatId,\r\n user: 'ai', // u:user, ai:ai\r\n type: 'text',\r\n isChating: true,\r\n content: '',\r\n thinkContent: '',\r\n reasoningContent: '',\r\n thinkStatus: 'thinking',\r\n thinkStartTime: Date.now(),\r\n isShowLike: true,\r\n isShowCopy: true,\r\n componentName: currentComponentName.value,\r\n // ...componentNameFn(),\r\n };\r\n // 根据插入位置决定添加方式\r\n if (insertIndex !== undefined && insertIndex <= chatList.value.length) {\r\n chatList.value.splice(insertIndex, 0, chatItem);\r\n } else {\r\n chatList.value.push(chatItem);\r\n }\r\n }\r\n currIndex.value = chatList.value.findIndex(ele => ele.chatId === chatId);\r\n fetchStream.value = new FetchStream({\r\n url: action ?? 'https://api.apiyi.com/v1/chat/completions',\r\n requestInit: {\r\n headers: headers ?? {\r\n 'Content-Type': 'application/json',\r\n Authorization: 'Bearer sk-fe9MtODvds8wpzz05f3417Fe3e9641C1926e6fC588425dEd',\r\n },\r\n body: !isDeepSeek\r\n ? JSON.stringify(body)\r\n : JSON.stringify({\r\n model: enableDeepThinking.value ? 'deepseek-reasoner' : 'deepseek-v3',\r\n messages: [\r\n {\r\n role: 'user',\r\n content: userContent, // 使用传入的用户内容参数\r\n },\r\n ],\r\n stream: true,\r\n }),\r\n },\r\n onmessage: (line: string) => {\r\n // console.log('onmessage === TouchChat.vue', line,typeof line);\r\n if (isUnmounting.value) return;\r\n let dataString = '';\r\n // let task_process_trace_flag = false;\r\n if (line.length) {\r\n if (line.includes('data:')) {\r\n dataString = line.split('data:')[1];\r\n } else if (line.startsWith('{') && line.endsWith('}')) {\r\n dataString = line;\r\n }\r\n\r\n // if(line.includes('event:task_process_trace')){\r\n // \ttask_process_trace_flag = true;\r\n // }\r\n }\r\n\r\n dataString = dataString.trim();\r\n\r\n if (dataString && dataString.startsWith('{') && dataString.endsWith('}')) {\r\n const result = JSON.parse(dataString);\r\n\r\n // const newAiMessage = chatList.value.find(ele => ele.chatId === chatId);\r\n const newAiMessage = chatList.value[currIndex.value];\r\n\r\n if (isDeepSeek) {\r\n // 分离普通内容存储\r\n if (result?.choices?.[0]?.delta?.content) {\r\n aiContent += result.choices[0].delta.content;\r\n // 当content有值且思考状态为thinking时,标记为completed并计算时间\r\n if (newAiMessage?.thinkStatus === 'thinking') {\r\n newAiMessage.thinkStatus = 'completed';\r\n newAiMessage.thinkTime = Date.now() - (newAiMessage.thinkStartTime || Date.now());\r\n }\r\n }\r\n\r\n // 独立存储思考内容\r\n if (result?.choices?.[0]?.delta?.reasoning_content) {\r\n reasoningContent += result.choices[0].delta.reasoning_content;\r\n // 当reasoningContent有值且尚未开始计时时,标记为thinking并记录开始时间\r\n if (!newAiMessage?.thinkStatus) {\r\n newAiMessage.thinkStatus = 'thinking';\r\n newAiMessage.thinkStartTime = Date.now();\r\n }\r\n }\r\n\r\n // 删除未使用的deep_thought处理代码\r\n // if (enableDeepThinking.value && result?.choices?.[0]?.delta?.deep_thought) {\r\n // deepThoughtContent += result.choices[0].delta.deep_thought;\r\n // }\r\n } else {\r\n if (aiChatType === 'Flow') {\r\n // 分离普通内容存储\r\n if (result?.message && result?.category === 'answer') {\r\n aiContent += result.message;\r\n }\r\n } else if (aiChatType === 'Intelligent') {\r\n // console.log(result, 'Intelligent');\r\n // && task_process_trace_flag\r\n if (result?.content && result?.category === 'task_stream_content') {\r\n aiContent += result.content;\r\n }\r\n if (result?.message && result?.category === 'answer') {\r\n allAiContent = result.message;\r\n // afterSendMessage(allAiContent);\r\n }\r\n }\r\n }\r\n\r\n // 传递分离后的数据进行渲染\r\n if (chatList.value.some(ele => ele.chatId === chatId)) {\r\n enqueueRender({\r\n mainContent: aiContent,\r\n thinkContent: thinkingContent,\r\n reasoningContent: reasoningContent,\r\n });\r\n }\r\n if (type === 1) {\r\n scrollToBottom();\r\n }\r\n }\r\n },\r\n ondone: () => {\r\n nextTick(() => {\r\n isChating.value = false;\r\n if (isUnmounting.value) return;\r\n if (!isMounted.value) return;\r\n const index = chatList.value.findIndex(ele => ele.chatId === chatId);\r\n if (index !== -1 && chatList.value[index]) {\r\n chatList.value[index].isChating = false;\r\n chatList.value[index].componentName = currentComponentName.value;\r\n if (aiChatType === 'Intelligent' && allAiContent) {\r\n afterSendMessage(allAiContent);\r\n }\r\n // console.log('ondone === TouchChat.vue === chatContainer.value', chatContainer.value);\r\n // console.log(\r\n // 'ondone === TouchChat.vue === htmlContentRef.value[index]',\r\n // htmlContentRef.value[index]\r\n // );\r\n // console.log('ondone === 调用栈 ===', new Error().stack);\r\n // console.log('ondone === chatList.value ===', chatList.value);\r\n // if (htmlContentRef.value[index] && document.body.contains(htmlContentRef.value[index])) {\r\n // try {\r\n // if (\r\n // isMounted.value &&\r\n // chatContainer.value &&\r\n // document.body.contains(chatContainer.value) &&\r\n // type === 1\r\n // ) {\r\n // scrollToBottom();\r\n // }\r\n // } catch (error) {\r\n // console.error('nextTick 滚动操作失败:', error);\r\n // }\r\n // }\r\n\r\n // 等待渲染队列处理完毕再发送数据\r\n const waitForRenderComplete = () => {\r\n if (renderQueue.value.length === 0 && !isRendering.value) {\r\n // 确保 chatList 不为空才触发 sendMessage\r\n if (chatList.value.length > 0) {\r\n // emit('sendMessage', JSON.parse(JSON.stringify(chatList.value)));\r\n console.log('done!', isChating.value, chatList.value);\r\n }\r\n } else {\r\n requestAnimationFrame(waitForRenderComplete);\r\n }\r\n };\r\n waitForRenderComplete();\r\n\r\n // // 将 afterSendMessage 移到此处,确保 aiContent 已完全处理\r\n // afterSendMessage(aiContent);\r\n }\r\n });\r\n },\r\n onabort: () => {\r\n isChating.value = false;\r\n\t// console.log('onabort === TouchChat.vue === isUnmounting.value', isUnmounting.value);\r\n if (isUnmounting.value) return;\r\n\r\n const currentAiMessage = chatList.value[currIndex.value];\r\n const hasContent =\r\n currentAiMessage &&\r\n (currentAiMessage.content ||\r\n currentAiMessage.thinkContent ||\r\n currentAiMessage.reasoningContent);\r\n\r\n if (currentAiMessage) {\r\n\t\t// console.log('onabort === TouchChat.vue === currentAiMessage', currentAiMessage);\r\n // 如果正在思考中,设置状态为stopped\r\n if (currentAiMessage.thinkStatus === 'thinking') {\r\n currentAiMessage.thinkStatus = 'stopped';\r\n currentAiMessage.thinkTime = Date.now() - (currentAiMessage.thinkStartTime || Date.now());\r\n }\r\n\t// console.log('onabort === TouchChat.vue === hasContent', hasContent);\r\n if (!hasContent) {\r\n // 场景1: AI尚未回复,清除用户消息和对应AI消息\r\n const userMessageIndex = currIndex.value - 1;\r\n if (userMessageIndex >= 0 && chatList.value[userMessageIndex].user === 'u') {\r\n // 先移除AI消息\r\n chatList.value.splice(currIndex.value, 1);\r\n // 再移除用户消息\r\n chatList.value.splice(userMessageIndex, 1);\r\n } else {\r\n // 仅移除AI消息\r\n chatList.value.splice(currIndex.value, 1);\r\n }\r\n } else {\r\n // 场景2: AI已回复,保留内容并添加省略号\r\n // 创建新对象确保Vue的响应式系统能检测到变化\r\n const updatedAiMessage = {\r\n ...currentAiMessage,\r\n isChating: false,\r\n content: currentAiMessage.content ? currentAiMessage.content + '。。。' : '',\r\n thinkContent: currentAiMessage.thinkContent\r\n ? currentAiMessage.thinkContent + '。。。'\r\n : undefined,\r\n reasoningContent: currentAiMessage.reasoningContent\r\n ? currentAiMessage.reasoningContent + '。。。'\r\n : undefined,\r\n thinkStatus: currentAiMessage.thinkStatus as 'thinking' | 'completed' | 'stopped',\r\n };\r\n\r\n // 使用splice替换元素,确保响应式更新\r\n chatList.value.splice(currIndex.value, 1, updatedAiMessage);\r\n\r\n // 立即更新DOM\r\n nextTick(() => {\r\n renderContent(updatedAiMessage.thinkContent || '', 'thinking');\r\n renderContent(updatedAiMessage.reasoningContent || '', 'reasoning');\r\n renderContent(updatedAiMessage.content || '', 'main');\r\n\r\n // DOM更新后再触发保存事件\r\n emit('sendMessage', [...chatList.value]);\r\n });\r\n return;\r\n }\r\n }\r\n\r\n // 对于清除消息的情况,确保 chatList 不为空才触发保存\r\n if (chatList.value.length > 0) {\r\n emit('sendMessage', [...chatList.value]);\r\n }\r\n },\r\n // 添加onerror回调函数来捕获异常\r\n onerror: (response: Error | Response) => {\r\n if (isUnmounting.value) return;\r\n isChating.value = false;\r\n\r\n // 判断response的类型\r\n let errorMessage = '未知错误';\r\n if (response instanceof Error) {\r\n console.error('API请求错误:', response);\r\n errorMessage = response.message;\r\n } else if (response instanceof Response) {\r\n console.error('API请求错误, 响应状态:', response.status, response.statusText);\r\n errorMessage = `请求失败: ${response.status} ${response.statusText}`;\r\n }\r\n\r\n // 获取当前正在处理的AI消息\r\n const currentAiMessage = chatList.value[currIndex.value];\r\n if (currentAiMessage) {\r\n // 更新AI消息内容,添加红色叉叉和错误信息\r\n currentAiMessage.content = `<div style=\"color: red; display: flex; align-items: center;\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"15\" height=\"16\" viewBox=\"0 0 15 16\" fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M7.5 15.5C11.6421 15.5 15 12.1421 15 8C15 3.85786 11.6421 0.5 7.5 0.5C3.35786 0.5 0 3.85786 0 8C0 12.1421 3.35786 15.5 7.5 15.5ZM9.7539 4.9506L10.5494 5.7461L8.2951 8.0001L10.5494 10.2539L9.7539 11.0494L7.5001 8.7951L5.2461 11.0494L4.4506 10.2539L6.7051 8.0001L4.4506 5.7461L5.2461 4.9506L7.5001 7.2051L9.7539 4.9506Z\" fill=\"#F93920\"/>\r\n</svg>${errorMessage}</div>`;\r\n currentAiMessage.isChating = false;\r\n currentAiMessage.componentName = '';\r\n currentAiMessage.isShowLike = false;\r\n currentAiMessage.isShowCopy = false;\r\n\r\n // 立即更新DOM\r\n nextTick(() => {\r\n renderContent(currentAiMessage.content || '', 'main');\r\n\r\n // DOM更新后触发保存事件\r\n emit('sendMessage', [...chatList.value]);\r\n });\r\n } else {\r\n // 如果没有当前AI消息,仍使用toast提示\r\n showToast(errorMessage, 'error', 3000);\r\n emit('sendMessage', [...chatList.value]);\r\n }\r\n },\r\n });\r\n};\r\n\r\nconst enqueueRender = (data: {\r\n mainContent: string;\r\n thinkContent: string;\r\n reasoningContent: string;\r\n}) => {\r\n if (isUnmounting.value || !isMounted.value) return;\r\n if (currIndex.value < 0 || currIndex.value >= chatList.value.length) return;\r\n renderQueue.value.push(data);\r\n if (!isRendering.value) {\r\n isRendering.value = true;\r\n processRenderQueue();\r\n }\r\n};\r\n\r\nconst processRenderQueue = () => {\r\n if (isUnmounting.value || !isMounted.value) {\r\n renderQueue.value = [];\r\n isRendering.value = false;\r\n return;\r\n }\r\n\r\n if (renderQueue.value.length === 0) {\r\n isRendering.value = false;\r\n return;\r\n }\r\n\r\n // 使用requestAnimationFrame优化渲染性能\r\n requestAnimationFrame(() => {\r\n const data = renderQueue.value.shift();\r\n if (data) {\r\n formatMarkdown(data);\r\n }\r\n processRenderQueue();\r\n });\r\n};\r\n\r\nonBeforeUnmount(() => {\r\n // 仅在组件确实需要卸载时执行清理逻辑\r\n if (!isUnmounting.value) {\r\n isUnmounting.value = true;\r\n // console.log('onBeforeUnmount === abort === TouchChat.vue === 668');\r\n if (fetchStream.value) {\r\n fetchStream.value.abort();\r\n }\r\n if (TouchChatRobot.value) {\r\n TouchChatRobot.value.close();\r\n TouchChatRobot.value = undefined;\r\n }\r\n isMounted.value = false;\r\n renderQueue.value = [];\r\n // 清空所有 ref 数组,避免内存泄漏\r\n htmlContentRef.value = [];\r\n thinkingContentRef.value = [];\r\n }\r\n});\r\n\r\nconst formatMarkdown = (data: {\r\n mainContent: string;\r\n thinkContent: string;\r\n reasoningContent: string;\r\n}) => {\r\n if (!isMounted.value) return;\r\n if (currIndex.value < 0 || currIndex.value >= chatList.value.length) return;\r\n\r\n const currentItem = chatList.value[currIndex.value];\r\n // 将直接替换改为追加操作\r\n currentItem.thinkContent = data.thinkContent;\r\n currentItem.content = data.mainContent;\r\n currentItem.reasoningContent = data.reasoningContent;\r\n\r\n nextTick(() => {\r\n const thinkingContainer = thinkingContentRef.value[currIndex.value];\r\n if (thinkingContainer) {\r\n if (data.thinkContent) {\r\n renderContent(data.thinkContent, 'thinking');\r\n thinkingContainer.style.display = 'block';\r\n thinkingContainer.style.visibility = 'visible';\r\n } else {\r\n thinkingContainer.style.display = 'none';\r\n thinkingContainer.style.visibility = 'hidden';\r\n }\r\n }\r\n\r\n const reasoningContainer = reasoningContentRef.value[currIndex.value];\r\n if (reasoningContainer) {\r\n if (data.reasoningContent) {\r\n renderContent(data.reasoningContent, 'reasoning');\r\n reasoningContainer.style.display = 'block';\r\n reasoningContainer.style.visibility = 'visible';\r\n } else {\r\n reasoningContainer.style.display = 'none';\r\n reasoningContainer.style.visibility = 'hidden';\r\n }\r\n }\r\n\r\n renderContent(data.mainContent, 'main');\r\n // if (data.mainContent.trim()) {\r\n // renderContent(data.mainContent, 'main');\r\n // }\r\n\r\n // if (isMounted.value) {\r\n // scrollToBottom();\r\n // }\r\n });\r\n};\r\n\r\n// 在attachCopyButtons函数中调用showToast\r\nconst attachCopyButtons = (container: HTMLElement) => {\r\n const codeBlocks = container.querySelectorAll('pre code');\r\n codeBlocks.forEach(codeBlock => {\r\n const pre = codeBlock.parentElement;\r\n if (pre) {\r\n const copyBtn = document.createElement('button');\r\n copyBtn.className = 'copy-code-btn';\r\n copyBtn.textContent = '复制';\r\n copyBtn.addEventListener('click', () => {\r\n const code = codeBlock.textContent || '';\r\n navigator.clipboard.writeText(code).then(() => {\r\n // 调用toast提示\r\n showToast('复制成功', 'info', 2000);\r\n copyBtn.textContent = '已复制';\r\n setTimeout(() => {\r\n copyBtn.textContent = '复制';\r\n }, 2000);\r\n });\r\n }); // 修复:移动事件监听器闭合括号到此处\r\n\r\n // 将DOM操作移出事件回调\r\n pre.style.position = 'relative';\r\n pre.appendChild(copyBtn);\r\n }\r\n }); // 修复:添加缺失的forEach回调闭合括号\r\n};\r\n\r\n// 新增统一渲染函数\r\nconst renderContent = (\r\n content: string,\r\n type: 'main' | 'thinking' | 'reasoning',\r\n index?: number\r\n) => {\r\n const renderIndex = index ?? currIndex.value;\r\n if (renderIndex < 0 || renderIndex >= chatList.value.length) return;\r\n\r\n // 根据类型选择不同的ref数组和处理函数\r\n const refArrays = {\r\n main: htmlContentRef,\r\n thinking: thinkingContentRef,\r\n reasoning: reasoningContentRef,\r\n };\r\n const processors = {\r\n main: (content: string) => markdown?.render(content, { isReasoning: false }) || '',\r\n thinking: (content: string) => markdown?.render(content, { isReasoning: false }) || '',\r\n reasoning: (content: string) => markdown?.render(content, { isReasoning: false }) || '',\r\n };\r\n\r\n const container = refArrays[type].value[renderIndex];\r\n if (!container) return;\r\n\r\n // 统一的内容处理和渲染逻辑\r\n container.innerHTML = processors[type](content || '');\r\n attachCopyButtons(container);\r\n};\r\n\r\nconst sendMessage = (item: any) => {\r\n inputValue.value = item.name || '';\r\n handleBeforeSend();\r\n};\r\n\r\nconst sendMessageInject = inject<(value: string) => void>('handleSend', () => {\r\n console.warn('未提供handleSend函数');\r\n});\r\n\r\nconst beforeSend = inject<() => { result: boolean; componentName?: string }>('beforeSend', () => ({\r\n result: true,\r\n}));\r\n\r\nconst handleBeforeSend = () => {\r\n// console.log('handleBeforeSend === TouchChat.vue === 773', beforeSend());\r\n // && !isDeepSeek\r\n if (beforeSend) {\r\n const fn = beforeSend();\r\n if (fn && typeof (fn as any).then === 'function') {\r\n (Promise.resolve(fn) as Promise<{ result: boolean; componentName?: string }>)\r\n .then(res => {\r\n // console.log(res, 'res===handleBeforeSend === TouchChat.vue === 781');\r\n if (res.result) {\r\n currentComponentName.value = res.componentName || '';\r\n handleSend();\r\n }\r\n })\r\n .catch(error => {\r\n console.log(error);\r\n });\r\n } else {\r\n if (fn.result) {\r\n currentComponentName.value = fn.componentName || '';\r\n handleSend();\r\n }\r\n }\r\n }\r\n // else if (isDeepSeek) {\r\n // \tcurrentComponentName.value = beforeSend()?.componentName || '';\r\n // handleSend();\r\n // }\r\n};\r\n\r\nconst handleSend = () => {\r\n if (isChating.value || !inputValue.value.trim()) return;\r\n const userChatId = 'user_' + crypto.randomUUID().replace(/-/gi, '');\r\n\r\n // 创建标准化用户消息(修复未定义messageUtils问题)\r\n const userMessage: ChatMessage = {\r\n chatId: userChatId, // 添加唯一chatId\r\n user: 'u',\r\n type: 'text',\r\n content: inputValue.value,\r\n // isShowAvatar: true,\r\n // avatar: props.userAvatar,\r\n };\r\n sendMessageInject(inputValue.value);\r\n // 发送用户消息后立即插入到聊天列表\r\n chatList.value.push(userMessage);\r\n const index = chatList.value.length - 1;\r\n\r\n // 修复:使用nextTick确保DOM更新后再渲染\r\n nextTick(() => {\r\n renderContent(userMessage.content, 'main', index);\r\n // 确保滚动到底部\r\n scrollToBottom();\r\n });\r\n\r\n // 继续处理AI回复逻辑\r\n if (connectionType === 'SSE') {\r\n openSSE(inputValue.value, index + 1, 1);\r\n } else if (connectionType === 'Websocket') {\r\n let chatInfo = [\r\n {\r\n type: 'text',\r\n msgContent: inputValue.value,\r\n },\r\n ];\r\n TouchChatRobot.value?.send(chatInfo);\r\n // ChatRobot.send(chatInfo)\r\n }\r\n\r\n inputValue.value = '';\r\n};\r\n\r\nconst handleStop = () => {\r\n// console.log('handleStop === abort === TouchChat.vue === 868');\r\n // 停止流请求\r\n fetchStream.value?.abort();\r\n\r\n // 查找当前正在回复的AI消息\r\n const aiIndex = chatList.value.findIndex(item => item.isChating);\r\n if (aiIndex !== -1) {\r\n const currentAiMessage = chatList.value[aiIndex];\r\n\r\n // 检查AI是否已回复内容\r\n if (currentAiMessage.content?.trim()) {\r\n // 修复:传递索引参数确保正确渲染\r\n nextTick(() => {\r\n // 已回复内容,添加省略号并停止\r\n chatList.value[aiIndex] = {\r\n ...currentAiMessage,\r\n content: currentAiMessage.content + '...',\r\n isChating: false,\r\n };\r\n renderContent(chatList.value[aiIndex].content, 'main', aiIndex);\r\n emit('sendMessage', chatList.value);\r\n });\r\n } else {\r\n // 未开始回复,移除对应的用户消息和AI消息\r\n if (aiIndex > 0) {\r\n const userMessageIndex = aiIndex - 1;\r\n // 确认前一条是用户消息\r\n if (chatList.value[userMessageIndex].user === 'u') {\r\n chatList.value.splice(userMessageIndex, 2);\r\n } else {\r\n chatList.value.splice(aiIndex, 1);\r\n }\r\n } else {\r\n chatList.value.splice(aiIndex, 1);\r\n }\r\n }\r\n } else {\r\n // 没有找到正在回复的AI消息,移除最后一条用户消息\r\n const lastIndex = chatList.value.length - 1;\r\n if (lastIndex >= 0 && chatList.value[lastIndex].user === 'u') {\r\n chatList.value.pop();\r\n }\r\n }\r\n\r\n isChating.value = false;\r\n};\r\nconst scrollToBottom = throttle(500, () => {\r\n const endEl = document.querySelector('.to-chat-item:last-child');\r\n if (endEl?.scrollIntoView) {\r\n endEl.scrollIntoView({ behavior: 'smooth', block: 'end', inline: 'nearest' });\r\n }\r\n});\r\n\r\n// 统一的事件处理函数\r\nconst handleMessageAction = (\r\n action: 'copy' | 'edit' | 'retry' | 'like' | 'dislike' | 'delete',\r\n index: number\r\n) => {\r\n const message = chatList.value[index];\r\n if (!message) return;\r\n\r\n switch (action) {\r\n case 'copy':\r\n navigator.clipboard.writeText(message.content).then(() => {\r\n // 修复:使用工具函数显示提示\r\n showToast('复制成功', 'info');\r\n });\r\n break;\r\n case 'edit':\r\n // 启用编辑模式\r\n if (message) {\r\n message.isEditing = true;\r\n message.editContent = message.content; // 初始化编辑内容\r\n }\r\n break;\r\n case 'delete':\r\n messageUtils.deleteMessageChain(index);\r\n emit('sendMessage', chatList.value);\r\n break;\r\n case 'retry': {\r\n // 获取当前AI消息和对应的用户消息\r\n const aiMessage = chatList.value[index];\r\n const userMessageIndex = index - 1;\r\n const userMessage = chatList.value[userMessageIndex];\r\n\r\n if (userMessage && userMessage.user === 'u') {\r\n // 创建用户消息内容副本\r\n\r\n const updatedAiMessage = {\r\n ...aiMessage,\r\n content: '',\r\n thinkContent: '',\r\n reasoningContent: '',\r\n isLiked: false,\r\n isDisliked: false,\r\n isChating: true,\r\n // 保留其他必要属性\r\n chatId: aiMessage.chatId,\r\n user: aiMessage.user,\r\n type: aiMessage.type,\r\n // isShowAvatar: aiMessage.isShowAvatar,\r\n // avatar: aiMessage.avatar,\r\n thinkStatus: 'completed',\r\n thinkStartTime: 0,\r\n thinkEndTime: 0,\r\n };\r\n chatList.value.splice(index, 1, updatedAiMessage);\r\n\r\n // 新增:使用nextTick确保DOM更新后再发起请求\r\n nextTick(() => {\r\n if (htmlContentRef.value[index]) htmlContentRef.value[index].innerHTML = '';\r\n if (thinkingContentRef.value[index]) thinkingContentRef.value[index].innerHTML = '';\r\n if (reasoningContentRef.value[index]) reasoningContentRef.value[index].innerHTML = '';\r\n // 使用用户内容副本调用openSSE,传入当前索引更新现有消息\r\n setTimeout(() => {\r\n openSSE(userMessage.content || '', index, 2);\r\n }, 50);\r\n });\r\n }\r\n break;\r\n }\r\n case 'like':\r\n messageUtils.updateMessage(index, {\r\n isLiked: true,\r\n isDisliked: false,\r\n });\r\n break;\r\n case 'dislike':\r\n messageUtils.updateMessage(index, {\r\n isLiked: false,\r\n isDisliked: true,\r\n });\r\n break;\r\n }\r\n};\r\n\r\n// 新增消息管理工具函数\r\nconst messageUtils = {\r\n // 更新消息内容\r\n updateMessage: (index: number, updates: Partial<ChatMessage>) => {\r\n if (index < 0 || index >= chatList.value.length) return;\r\n chatList.value.splice(index, 1, { ...chatList.value[index], ...updates });\r\n },\r\n\r\n // 删除消息及其后续AI回复\r\n deleteMessageChain: (index: number) => {\r\n if (index < 0 || index >= chatList.value.length) return;\r\n const nextIndex = index + 1;\r\n const deleteCount =\r\n nextIndex < chatList.value.length && chatList.value[nextIndex].user === 'ai' ? 2 : 1;\r\n chatList.value.splice(index, deleteCount);\r\n },\r\n\r\n // 创建标准化消息对象\r\n createStandardMessage: (data: Partial<ChatMessage>): ChatMessage => ({\r\n chatId: data.chatId || 'ai_' + crypto.randomUUID().replace(/-/gi, ''),\r\n user: data.user || 'ai',\r\n type: data.type || 'text',\r\n content: data.content || '',\r\n // isShowAvatar: data.isShowAvatar ?? true,\r\n // avatar: data.avatar || (data.user === 'u' ? props.userAvatar : props.aiAvatar),\r\n isChating: data.isChating ?? false,\r\n thinkContent: data.thinkContent || '',\r\n reasoningContent: data.reasoningContent || '',\r\n isLiked: data.isLiked ?? false,\r\n isDisliked: data.isDisliked ?? false,\r\n isEditing: data.isEditing ?? false,\r\n editContent: data.editContent ?? '',\r\n }),\r\n};\r\n\r\nonMounted(() => {\r\n init();\r\n isMounted.value = true;\r\n});\r\n\r\n// 添加编辑保存功能\r\nconst saveEdit = (index: number, newContent: string) => {\r\n const message = chatList.value[index];\r\n if (!message || !message.editContent) return;\r\n\r\n // if (message.editContent !== undefined) {\r\n // 创建新对象触发Vue响应式更新\r\n chatList.value[index] = {\r\n ...message,\r\n content: newContent,\r\n isEditing: false,\r\n editContent: undefined,\r\n };\r\n // 显式调用渲染函数\r\n nextTick(() => {\r\n renderContent(message.content, 'main', index);\r\n });\r\n // }\r\n\r\n // 删除对应的AI回复(如果存在)\r\n if (index + 1 < chatList.value.length && chatList.value[index + 1].user === 'ai') {\r\n chatList.value.splice(index + 1, 1);\r\n }\r\n\r\n // 调用openSSE获取新的AI回复,插入到用户消息之后\r\n openSSE(newContent, index + 1);\r\n\r\n // 触发保存事件\r\n emit('sendMessage', chatList.value);\r\n};\r\n\r\nconst cancelEdit = (index: number) => {\r\n const message = chatList.value[index];\r\n if (!message) return;\r\n\r\n // 关闭编辑模式并清空编辑内容\r\n message.isEditing = false;\r\n message.editContent = '';\r\n // 添加nextTick确保DOM正确切换回查看模式\r\n nextTick(() => {\r\n renderContent(message.content, 'main', index);\r\n });\r\n};\r\nexport type { ChatMessage };\r\n</script>\r\n\r\n<!-- <style>\r\n@import '../../style/ChatView.less';\r\n</style> -->\r\n"],"names":["inject","ref","fetchStream","nextTick","watch","ChatRobot","FetchStream","currentAiMessage","showToast","onBeforeUnmount","content","markdown","throttle","action","onMounted","_createElementVNode","_createCommentVNode","_createElementBlock","_renderSlot","_createVNode","HelloChat","_openBlock","_Fragment","_renderList","_createBlock","UserMessage","AiMessage","ChatInput","_withCtx"],"mappings":"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"}
@@ -3,8 +3,9 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var TouchHistory_vue_vue_type_script_setup_true_lang = require('./TouchHistory.vue2.js');
6
+ var _pluginVue_exportHelper = require('../../../../../_virtual/_plugin-vue_export-helper.js');
6
7
 
8
+ var DeepSeek = /* @__PURE__ */ _pluginVue_exportHelper.default(TouchHistory_vue_vue_type_script_setup_true_lang.default, [["__file", "TouchHistory.vue"]]);
7
9
 
8
-
9
- exports.default = TouchHistory_vue_vue_type_script_setup_true_lang.default;
10
+ exports.default = DeepSeek;
10
11
  //# sourceMappingURL=TouchHistory.vue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TouchHistory.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
1
+ {"version":3,"file":"TouchHistory.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;"}
@@ -3,8 +3,8 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var vue = require('vue');
6
- var TouchChat_vue_vue_type_script_setup_true_lang = require('./TouchChat.vue2.js');
7
- var HistorySidebar_vue_vue_type_script_setup_true_lang = require('./HistorySidebar.vue2.js');
6
+ var TouchChat = require('./TouchChat.vue.js');
7
+ var HistorySidebar = require('./HistorySidebar.vue.js');
8
8
 
9
9
  var _sfc_main = /* @__PURE__ */ vue.defineComponent({
10
10
  __name: "TouchHistory",
@@ -14,15 +14,69 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
14
14
  chatHistory: [],
15
15
  isSidebarCollapsed: false,
16
16
  actionMenuVisible: {},
17
- mockMessages: [],
18
- chatComponent: null
17
+ mockMessages: []
19
18
  });
19
+ const chatComponent = vue.ref();
20
+ const isNotHeader = vue.inject("isNotHeader", true);
20
21
  const isDeepSeek = vue.inject("isDeepSeek", true);
22
+ const historyData = vue.inject("historyData", []);
23
+ const setHistoryData = vue.ref(
24
+ Array.isArray(historyData) ? historyData : typeof historyData === "object" && (historyData == null ? void 0 : historyData.value) ? historyData.value : []
25
+ );
26
+ const messageDetail = vue.inject("messageDetail", []);
27
+ const setMessageDetail = vue.ref(
28
+ Array.isArray(messageDetail) ? messageDetail : typeof messageDetail === "object" && (messageDetail == null ? void 0 : messageDetail.value) ? messageDetail.value : []
29
+ );
30
+ vue.watch(
31
+ () => {
32
+ if (typeof historyData === "object" && (historyData == null ? void 0 : historyData.value) !== void 0) {
33
+ return historyData.value;
34
+ }
35
+ return historyData;
36
+ },
37
+ (newVal) => {
38
+ if (newVal && Array.isArray(newVal)) {
39
+ setHistoryData.value = newVal;
40
+ if (!isDeepSeek) {
41
+ state.chatHistory = newVal;
42
+ if (state.chatHistory.length > 0 && !state.activeChat) {
43
+ state.activeChat = state.chatHistory[0].id;
44
+ }
45
+ }
46
+ }
47
+ },
48
+ { deep: true }
49
+ );
50
+ vue.watch(
51
+ () => {
52
+ if (typeof messageDetail === "object" && (messageDetail == null ? void 0 : messageDetail.value) !== void 0) {
53
+ return messageDetail.value;
54
+ }
55
+ return messageDetail;
56
+ },
57
+ (newVal) => {
58
+ if (newVal && Array.isArray(newVal)) {
59
+ setMessageDetail.value = JSON.parse(JSON.stringify(newVal));
60
+ if (chatComponent.value) {
61
+ setTimeout(() => {
62
+ var _a, _b;
63
+ (_b = (_a = chatComponent.value) == null ? void 0 : _a.$forceUpdate) == null ? void 0 : _b.call(_a);
64
+ }, 0);
65
+ }
66
+ }
67
+ },
68
+ { deep: true, immediate: true }
69
+ // 添加immediate: true,确保在watch创建时立即执行一次
70
+ );
21
71
  const currentChatMessages = vue.computed(() => {
22
- if (!state.activeChat)
72
+ if (!state.activeChat && isDeepSeek)
23
73
  return [];
24
- const currentChat = state.chatHistory.find((item) => item.id === state.activeChat);
25
- return (currentChat == null ? void 0 : currentChat.messages) || [];
74
+ if (!setMessageDetail.value.length && !setHistoryData.value.length && isDeepSeek) {
75
+ const currentChat = state.chatHistory.find((item) => item.id === state.activeChat);
76
+ return (currentChat == null ? void 0 : currentChat.messages) || [];
77
+ } else {
78
+ return setMessageDetail.value;
79
+ }
26
80
  });
27
81
  vue.onMounted(() => {
28
82
  loadFromLocalStorage();
@@ -38,7 +92,12 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
38
92
  state.isSidebarCollapsed = JSON.parse(savedCollapseState);
39
93
  }
40
94
  const savedHistory = localStorage.getItem(STORAGE_KEYS.CHAT_HISTORY);
41
- if (savedHistory) {
95
+ if (!isDeepSeek) {
96
+ state.chatHistory = setHistoryData.value;
97
+ if (state.chatHistory.length > 0) {
98
+ state.activeChat = state.chatHistory[0].id;
99
+ }
100
+ } else if (savedHistory && isDeepSeek) {
42
101
  state.chatHistory = JSON.parse(savedHistory);
43
102
  if (state.chatHistory.length > 0) {
44
103
  state.activeChat = state.chatHistory[0].id;
@@ -75,16 +134,24 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
75
134
  return newChat;
76
135
  }
77
136
  function startNewChat() {
78
- if (state.chatHistory.length > 0 && !state.chatHistory[0].messages.length) {
79
- state.activeChat = state.chatHistory[0].id;
137
+ var _a, _b, _c;
138
+ if (!currentChatMessages.value.length && state.chatHistory.length > 0) {
139
+ state.activeChat = (_c = (_b = (_a = state.chatHistory) == null ? void 0 : _a[0]) == null ? void 0 : _b.id) != null ? _c : "";
80
140
  return;
81
141
  }
82
142
  createNewChat("\u65B0\u5BF9\u8BDD" + (state.chatHistory.length + 1));
83
143
  }
144
+ const handleActiveChat = vue.inject("handleActiveChat", () => {
145
+ console.warn("\u672A\u63D0\u4F9BhandleActiveChat\u51FD\u6570");
146
+ });
84
147
  function selectChat(id) {
85
148
  state.activeChat = id;
149
+ handleActiveChat(id);
86
150
  resetAllMenus();
87
151
  }
152
+ const handleDeleteChat = vue.inject("handleDeleteChat", () => {
153
+ console.warn("\u672A\u63D0\u4F9BhandleDeleteChat\u51FD\u6570");
154
+ });
88
155
  function deleteChat(id) {
89
156
  const index = state.chatHistory.findIndex((item) => item.id === id);
90
157
  if (index === -1)
@@ -96,6 +163,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
96
163
  state.activeChat = "";
97
164
  state.mockMessages = [];
98
165
  }
166
+ handleDeleteChat(id);
99
167
  saveToLocalStorage();
100
168
  }
101
169
  function sendMessage(messageList) {
@@ -133,7 +201,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
133
201
  return (_ctx, _cache) => {
134
202
  return vue.openBlock(), vue.createElementBlock("div", { class: "history-container" }, [
135
203
  vue.createElementVNode("div", { class: "main-content" }, [
136
- vue.unref(isDeepSeek) ? (vue.openBlock(), vue.createBlock(HistorySidebar_vue_vue_type_script_setup_true_lang.default, {
204
+ vue.unref(isNotHeader) ? (vue.openBlock(), vue.createBlock(HistorySidebar.default, {
137
205
  key: 0,
138
206
  "is-sidebar-collapsed": state.isSidebarCollapsed,
139
207
  "active-chat": state.activeChat,
@@ -143,8 +211,8 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
143
211
  onSelectChat: selectChat,
144
212
  onRenameChat: handleRenameChat,
145
213
  onDeleteChat: deleteChat
146
- }, null, 8, ["is-sidebar-collapsed", "active-chat", "chat-history"])) : vue.createCommentVNode("", true),
147
- state.isSidebarCollapsed && vue.unref(isDeepSeek) ? (vue.openBlock(), vue.createElementBlock("button", {
214
+ }, null, 8, ["is-sidebar-collapsed", "active-chat", "chat-history"])) : vue.createCommentVNode("v-if", true),
215
+ state.isSidebarCollapsed && vue.unref(isNotHeader) ? (vue.openBlock(), vue.createElementBlock("button", {
148
216
  key: 1,
149
217
  class: "floating",
150
218
  onClick: vue.withModifiers(startNewChat, ["stop"])
@@ -176,10 +244,14 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
176
244
  })
177
245
  ])),
178
246
  vue.createElementVNode("span", null, "+")
179
- ])) : vue.createCommentVNode("", true),
247
+ ])) : vue.createCommentVNode("v-if", true),
180
248
  vue.createElementVNode("main", { class: "chat-area" }, [
181
- (vue.openBlock(), vue.createBlock(TouchChat_vue_vue_type_script_setup_true_lang.default, {
182
- ref: "chatComponent",
249
+ vue.createCommentVNode(` :connection-type="'SSE'"
250
+ `),
251
+ vue.createCommentVNode(" <span>mockMessages == {{ state.mockMessages }}</span> \n <p>currentChatMessages == {{ currentChatMessages }}</p> "),
252
+ (vue.openBlock(), vue.createBlock(TouchChat.default, {
253
+ ref_key: "chatComponent",
254
+ ref: chatComponent,
183
255
  key: state.activeChat,
184
256
  value: currentChatMessages.value,
185
257
  onSendMessage: sendMessage
@@ -203,6 +275,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
203
275
  vue.renderSlot(_ctx.$slots, "input", { disabled })
204
276
  ]),
205
277
  _: 3
278
+ /* FORWARDED */
206
279
  }, 8, ["value"]))
207
280
  ])
208
281
  ])