diff --git a/web/src/components/ChatComponent.vue b/web/src/components/ChatComponent.vue index 39ef061a..61ba0f64 100644 --- a/web/src/components/ChatComponent.vue +++ b/web/src/components/ChatComponent.vue @@ -57,60 +57,31 @@
-
-
- - - -

{{ message.reasoning_content }}

-
-
-
-

{{ message.text }}

-
-
-
-
-
-
正在检索……
-
正在生成……
-
-
-
- 请求错误,请重试。{{ message.message }} -
- -
+ +
-
+
@@ -192,6 +163,7 @@ import RefsComponent from '@/components/RefsComponent.vue' import hljs from 'highlight.js'; import 'highlight.js/styles/github.css'; import MessageInputComponent from '@/components/MessageInputComponent.vue' +import MessageComponent from '@/components/MessageComponent.vue' const props = defineProps({ conv: Object, @@ -790,76 +762,6 @@ watch( font-size: 16px; } } - - .message-box { - display: inline-block; - border-radius: 1.5rem; - margin: 0.8rem 0; - padding: 0.625rem 1.25rem; - user-select: text; - word-break: break-word; - font-size: 15px; - font-variation-settings: 'wght' 400, 'opsz' 10.5; - font-weight: 400; - box-sizing: border-box; - color: black; - /* box-shadow: 0px 0.3px 0.9px rgba(0, 0, 0, 0.12), 0px 1.6px 3.6px rgba(0, 0, 0, 0.16); */ - /* animation: slideInUp 0.1s ease-in; */ - - .err-msg { - color: #eb8080; - border: 1px solid #eb8080; - padding: 0.5rem 1rem; - border-radius: 8px; - text-align: left; - background: #FFF5F5; - margin-bottom: 10px; - cursor: pointer; - } - - .searching-msg { - color: var(--gray-500); - animation: colorPulse 2s infinite; - } - - @keyframes colorPulse { - 0% { color: var(--gray-700); } - 50% { color: var(--gray-300); } - 100% { color: var(--gray-700); } - } - } - - .message-box.sent { - line-height: 24px; - max-width: 95%; - background: var(--main-light-4); - align-self: flex-end; - } - - .message-box.received { - color: initial; - width: fit-content; - text-align: left; - word-wrap: break-word; - margin: 0; - max-width: 100%; - padding-bottom: 0; - padding-top: 16px; - padding-left: 0; - padding-right: 0; - text-align: justify; - } - - p.message-text { - max-width: 100%; - word-wrap: break-word; - margin-bottom: 0; - } - - p.message-md { - word-wrap: break-word; - margin-bottom: 0; - } } .bottom { @@ -874,6 +776,7 @@ watch( max-width: 800px; margin: 0 auto; background-color: white; + animation: width 0.3s ease-in-out; &.wide-screen { max-width: 1200px; diff --git a/web/src/components/MessageComponent.vue b/web/src/components/MessageComponent.vue new file mode 100644 index 00000000..54a3fa93 --- /dev/null +++ b/web/src/components/MessageComponent.vue @@ -0,0 +1,394 @@ + + + + + \ No newline at end of file diff --git a/web/src/components/MessageInputComponent.vue b/web/src/components/MessageInputComponent.vue index 30ef2411..39744cd0 100644 --- a/web/src/components/MessageInputComponent.vue +++ b/web/src/components/MessageInputComponent.vue @@ -108,7 +108,6 @@ const handleSend = () => { flex-direction: column; width: 100%; height: auto; - max-width: 800px; margin: 0 auto; padding: 0.4rem 0.75rem; border: 2px solid var(--gray-200); @@ -122,10 +121,6 @@ const handleSend = () => { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); } - &.wide-screen { - max-width: 1200px; - } - .input-area { display: flex; align-items: flex-end; diff --git a/web/src/views/AgentView.vue b/web/src/views/AgentView.vue index 8a436450..33420045 100644 --- a/web/src/views/AgentView.vue +++ b/web/src/views/AgentView.vue @@ -32,15 +32,21 @@
-
-

{{ message.content.trim() }}

-
-
{{ message }}
-
+ :role="message.role" + :content="message.content" + :content-html="message.content ? renderMarkdown(message.content) : ''" + :status="message.status" + :is-processing="isProcessing" + :error-message="message.message" + @retry="retryMessage(index)" + > +
{{ message }}
+ + + +
@@ -160,6 +158,7 @@ import { onClickOutside } from '@vueuse/core'; import 'highlight.js/styles/github.css'; import hljs from 'highlight.js'; import MessageInputComponent from '@/components/MessageInputComponent.vue' +import MessageComponent from '@/components/MessageComponent.vue' // ==================== 初始化配置 ==================== @@ -506,7 +505,7 @@ const handleFinished = async () => { lastAssistantMsg.content = '已完成'; } // 更新状态为已完成 - lastAssistantMsg.status = 'complete'; + lastAssistantMsg.status = 'finished'; } // 标记处理完成 @@ -1002,103 +1001,6 @@ const toggleToolCall = (toolCallId) => { display: flex; flex-direction: column; - .message-box { - display: inline-block; - border-radius: 1.5rem; - margin: 0.8rem 0; - padding: 0.625rem 1.25rem; - user-select: text; - word-break: break-word; - font-size: 15px; - box-sizing: border-box; - color: black; - - .reasoning-box { - margin-top: 10px; - margin-bottom: 15px; - border-radius: 8px; - border: 1px solid var(--main-light-3); - overflow: hidden; - - .reasoning-header { - padding: 8px 12px; - background-color: var(--main-50); - font-size: 13px; - color: var(--main-700); - border-bottom: 1px solid var(--main-light-3); - display: flex; - align-items: center; - gap: 6px; - } - - .reasoning-content { - padding: 10px 12px; - font-size: 13px; - color: var(--gray-700); - white-space: pre-wrap; - max-height: 200px; - overflow-y: auto; - background-color: white; - } - } - - .tool-call-box { - margin: 10px 0 15px 0; - border-radius: 8px; - border: 1px solid var(--main-light-3); - overflow: hidden; - - .tool-header { - padding: 8px 12px; - background-color: var(--gray-100); - font-size: 13px; - color: var(--gray-800); - border-bottom: 1px solid var(--gray-200); - display: flex; - align-items: center; - gap: 6px; - } - - .tool-params { - padding: 8px 12px; - background-color: var(--gray-50); - - .tool-params-content, - .tool-result-content, - .tool-params-content pre { - margin: 0; - font-size: 12px; - overflow-x: auto; - white-space: pre-wrap; - word-break: break-all; - } - } - } - } - - .message-box.user { - line-height: 24px; - max-width: 95%; - background: var(--main-light-4); - align-self: flex-end; - } - - .message-box.assistant { - color: initial; - width: 100%; - text-align: left; - word-wrap: break-word; - margin: 0 0 16px 0; - padding-bottom: 0; - padding-top: 10px; - padding-left: 0; - padding-right: 0; - text-align: justify; - background-color: white; - border-radius: 12px; - position: relative; - } - .tool-calls-container { width: 100%; margin-top: 10px; @@ -1178,26 +1080,6 @@ const toggleToolCall = (toolCallId) => { } } } - - p.message-text { - max-width: 100%; - word-wrap: break-word; - margin-bottom: 0; - } - - .err-msg { - color: #ff4d4f; - padding: 8px 12px; - background-color: #fff2f0; - border: 1px solid #ffccc7; - border-radius: 8px; - margin-top: 10px; - cursor: pointer; - - &:hover { - background-color: #fff0ed; - } - } } .chat-box.is-debug {