diff --git a/frontend/src/components/common/MarkdownContent.vue b/frontend/src/components/common/MarkdownContent.vue new file mode 100644 index 0000000..b0a225d --- /dev/null +++ b/frontend/src/components/common/MarkdownContent.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/frontend/src/features/chat/ChatView.vue b/frontend/src/features/chat/ChatView.vue index b269d5f..df3dee4 100644 --- a/frontend/src/features/chat/ChatView.vue +++ b/frontend/src/features/chat/ChatView.vue @@ -7,7 +7,7 @@ import { useEditorStore } from '@/stores/editor' import { useProviderStore } from '@/stores/provider' import { useSkillStore } from '@/stores/skill' import { useWorkspaceStore } from '@/stores/workspace' -import { renderMarkdown } from '@/utils/markdown' +import MarkdownContent from '@/components/common/MarkdownContent.vue' const chatStore = useChatStore() const providerStore = useProviderStore() @@ -69,7 +69,7 @@ async function openCitation(citation: Citation) {
{{ message.role === 'user' ? '你' : 'AI' }}
思考过程

{{ message.thinking }}

-
+
正在思考…
{{ call.status }}{{ call.name }}
{{ JSON.stringify(call.parameters, null, 2) }}
@@ -104,15 +104,6 @@ async function openCitation(citation: Citation) { .avatar { display: grid; place-items: center; width: 34px; height: 34px; border-radius: var(--radius-full); background: var(--color-background-tertiary); font-weight: 700; } .assistant .avatar { background: var(--color-accent-soft); color: var(--color-accent-primary); } .message-content { white-space: pre-wrap; line-height: var(--line-height-relaxed); } -.markdown-content { white-space: normal; user-select: text; } -.markdown-content :deep(p), .markdown-content :deep(ul), .markdown-content :deep(ol), .markdown-content :deep(pre), .markdown-content :deep(blockquote) { margin: .65em 0; } -.markdown-content :deep(h1), .markdown-content :deep(h2), .markdown-content :deep(h3) { margin: 1em 0 .5em; line-height: var(--line-height-tight); } -.markdown-content :deep(ul) { padding-left: 1.5em; list-style: disc; }.markdown-content :deep(ol) { padding-left: 1.5em; list-style: decimal; } -.markdown-content :deep(pre) { overflow: auto; padding: var(--space-md); border-radius: var(--radius-md); background: var(--color-background-secondary); } -.markdown-content :deep(code) { padding: .1em .3em; border-radius: var(--radius-sm); background: var(--color-background-tertiary); font-family: var(--font-ui-mono); }.markdown-content :deep(pre code) { padding: 0; background: transparent; } -.markdown-content :deep(blockquote) { padding-left: 1em; border-left: 3px solid var(--color-accent-primary); color: var(--color-text-secondary); } -.markdown-content :deep(table) { width: 100%; margin: .65em 0; border-collapse: collapse; }.markdown-content :deep(th), .markdown-content :deep(td) { padding: .45em .65em; border: 1px solid var(--color-border-default); text-align: left; } -.markdown-content :deep(img) { max-width: 100%; }.markdown-content :deep(hr) { margin: 1em 0; border: 0; border-top: 1px solid var(--color-border-default); } .thinking { margin-bottom: var(--space-sm); color: var(--color-text-secondary); }.thinking p { margin-top: var(--space-sm); white-space: pre-wrap; } .tool-calls { display: grid; gap: var(--space-sm); margin-top: var(--space-md); }.tool-calls .item-card { display: grid; gap: var(--space-xs); }.tool-calls pre { overflow: auto; font-size: var(--font-size-xs); } .usage { display: block; margin-top: var(--space-xs); color: var(--color-text-tertiary); } diff --git a/frontend/src/features/editor/EditorPane.vue b/frontend/src/features/editor/EditorPane.vue index 6da29c9..2e64f78 100644 --- a/frontend/src/features/editor/EditorPane.vue +++ b/frontend/src/features/editor/EditorPane.vue @@ -1,13 +1,10 @@