优化前端样式
This commit is contained in:
parent
29fe4b6e6f
commit
1ebb6454e0
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="message-bubble" :class="message.sender_type">
|
<div class="message-bubble" :class="message.sender_type">
|
||||||
<div class="message-avatar">
|
<div class="avatar">
|
||||||
{{ message.sender_name?.charAt(0).toUpperCase() }}
|
{{ message.sender_name?.charAt(0).toUpperCase() }}
|
||||||
</div>
|
</div>
|
||||||
<div class="message-container">
|
<div class="message-container">
|
||||||
|
|
@ -9,10 +9,9 @@
|
||||||
v-if="message.process_steps && message.process_steps.length > 0"
|
v-if="message.process_steps && message.process_steps.length > 0"
|
||||||
:process-steps="message.process_steps"
|
:process-steps="message.process_steps"
|
||||||
/>
|
/>
|
||||||
<div v-else class="md-content message-text" v-html="renderedContent"></div>
|
<div v-else class="md-content" v-html="renderedContent"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="message-footer">
|
<div class="message-footer">
|
||||||
<span class="sender-name">{{ message.sender_name }}</span>
|
|
||||||
<span class="message-time">{{ formatTime(message.created_at) }}</span>
|
<span class="message-time">{{ formatTime(message.created_at) }}</span>
|
||||||
<button class="ghost-btn accent" @click="copyContent" title="复制">
|
<button class="ghost-btn accent" @click="copyContent" title="复制">
|
||||||
<span v-html="copyIcon"></span>
|
<span v-html="copyIcon"></span>
|
||||||
|
|
@ -57,75 +56,16 @@ const copyIcon = `<svg viewBox="0 0 24 24" width="14" height="14" fill="none" st
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.message-bubble {
|
/* 组件只需要 message-footer 和 ghost-btn 样式,其他依赖全局样式 */
|
||||||
display: flex;
|
|
||||||
gap: 0.75rem;
|
|
||||||
margin-bottom: 1.25rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.message-bubble.user {
|
|
||||||
flex-direction: row-reverse;
|
|
||||||
}
|
|
||||||
|
|
||||||
.message-avatar {
|
|
||||||
width: 40px;
|
|
||||||
height: 40px;
|
|
||||||
border-radius: 50%;
|
|
||||||
background: linear-gradient(135deg, #667eea, #764ba2);
|
|
||||||
color: white;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
font-size: 0.9rem;
|
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.message-bubble.user .message-avatar {
|
|
||||||
background: linear-gradient(135deg, #11998e, #38ef7d);
|
|
||||||
}
|
|
||||||
|
|
||||||
.message-container {
|
|
||||||
max-width: 70%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.message-body {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
gap: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.message-text {
|
|
||||||
padding: 0.75rem 1rem;
|
|
||||||
background: var(--bg-primary);
|
|
||||||
border-radius: 12px;
|
|
||||||
border: 1px solid var(--border-light);
|
|
||||||
line-height: 1.6;
|
|
||||||
}
|
|
||||||
|
|
||||||
.message-bubble.user .message-text {
|
|
||||||
background: var(--accent-primary);
|
|
||||||
color: white;
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.message-footer {
|
.message-footer {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 0.5rem;
|
gap: 8px;
|
||||||
margin-top: 0.25rem;
|
padding: 6px 0 0;
|
||||||
font-size: 0.75rem;
|
font-size: 12px;
|
||||||
color: var(--text-tertiary);
|
color: var(--text-tertiary);
|
||||||
}
|
}
|
||||||
|
|
||||||
.message-bubble.user .message-footer {
|
|
||||||
flex-direction: row-reverse;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sender-name {
|
|
||||||
font-weight: 500;
|
|
||||||
color: var(--text-secondary);
|
|
||||||
}
|
|
||||||
|
|
||||||
.ghost-btn {
|
.ghost-btn {
|
||||||
background: transparent;
|
background: transparent;
|
||||||
border: none;
|
border: none;
|
||||||
|
|
|
||||||
|
|
@ -370,7 +370,8 @@ body {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.assistant .avatar {
|
.assistant .avatar,
|
||||||
|
.agent .avatar {
|
||||||
background: var(--avatar-gradient);
|
background: var(--avatar-gradient);
|
||||||
color: white;
|
color: white;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
|
|
|
||||||
|
|
@ -143,16 +143,18 @@
|
||||||
|
|
||||||
<!-- 正在输入的流式消息 -->
|
<!-- 正在输入的流式消息 -->
|
||||||
<div v-for="(stream, agentId) in streamingMessages" :key="'stream-' + agentId"
|
<div v-for="(stream, agentId) in streamingMessages" :key="'stream-' + agentId"
|
||||||
class="message-wrapper agent streaming">
|
class="message-bubble assistant streaming">
|
||||||
<div class="message-avatar">
|
<div class="avatar">
|
||||||
{{ stream.agentName?.charAt(0).toUpperCase() }}
|
{{ stream.agentName?.charAt(0).toUpperCase() }}
|
||||||
</div>
|
</div>
|
||||||
<div class="message-content">
|
<div class="message-container">
|
||||||
<div class="message-meta">
|
<div class="message-body">
|
||||||
|
<div class="md-content" v-html="renderMarkdown(stream.content)"></div>
|
||||||
|
</div>
|
||||||
|
<div class="message-footer">
|
||||||
<span class="sender-name">{{ stream.agentName }}</span>
|
<span class="sender-name">{{ stream.agentName }}</span>
|
||||||
<span class="typing-indicator">正在输入...</span>
|
<span class="typing-indicator">正在输入...</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="message-text" v-html="renderMarkdown(stream.content)"></div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -768,90 +770,6 @@ onUnmounted(() => {
|
||||||
padding: 1.5rem;
|
padding: 1.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 流式消息(未使用组件的部分) */
|
|
||||||
.message-wrapper {
|
|
||||||
display: flex;
|
|
||||||
gap: 0.75rem;
|
|
||||||
margin-bottom: 1.25rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.message-wrapper.user {
|
|
||||||
flex-direction: row-reverse;
|
|
||||||
}
|
|
||||||
|
|
||||||
.message-avatar {
|
|
||||||
width: 40px;
|
|
||||||
height: 40px;
|
|
||||||
border-radius: 50%;
|
|
||||||
background: linear-gradient(135deg, #667eea, #764ba2);
|
|
||||||
color: white;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
font-size: 0.9rem;
|
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.message-wrapper.user .message-avatar {
|
|
||||||
background: linear-gradient(135deg, #11998e, #38ef7d);
|
|
||||||
}
|
|
||||||
|
|
||||||
.message-content {
|
|
||||||
max-width: 70%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.message-meta {
|
|
||||||
display: flex;
|
|
||||||
gap: 0.5rem;
|
|
||||||
margin-bottom: 0.25rem;
|
|
||||||
font-size: 0.75rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.message-wrapper.user .message-meta {
|
|
||||||
flex-direction: row-reverse;
|
|
||||||
}
|
|
||||||
|
|
||||||
.message-text {
|
|
||||||
padding: 0.75rem 1rem;
|
|
||||||
background: var(--bg-primary);
|
|
||||||
border-radius: 12px;
|
|
||||||
border: 1px solid var(--border-light);
|
|
||||||
line-height: 1.6;
|
|
||||||
}
|
|
||||||
|
|
||||||
.message-wrapper.user .message-text {
|
|
||||||
background: var(--accent-primary);
|
|
||||||
color: white;
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.message-footer {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 0.5rem;
|
|
||||||
margin-top: 0.25rem;
|
|
||||||
font-size: 0.75rem;
|
|
||||||
color: var(--text-tertiary);
|
|
||||||
}
|
|
||||||
|
|
||||||
.ghost-btn {
|
|
||||||
background: transparent;
|
|
||||||
border: none;
|
|
||||||
cursor: pointer;
|
|
||||||
padding: 4px;
|
|
||||||
border-radius: 4px;
|
|
||||||
color: var(--text-tertiary);
|
|
||||||
transition: all 0.15s;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ghost-btn:hover {
|
|
||||||
background: var(--bg-hover);
|
|
||||||
color: var(--accent-primary);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Input */
|
/* Input */
|
||||||
.input-area {
|
.input-area {
|
||||||
padding: 1rem 1.5rem;
|
padding: 1rem 1.5rem;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue