This commit is contained in:
aaron 2025-05-30 10:42:16 +08:00
parent 917d07fec2
commit 206957a260
3 changed files with 89 additions and 37 deletions

View File

@ -5,7 +5,7 @@ services:
build:
context: .
dockerfile: Dockerfile
image: tradus-web:1.3.28
image: tradus-web:1.3.29
container_name: tradus-web
ports:
- '6000:80'

View File

@ -513,7 +513,7 @@ onUnmounted(() => {
</svg>
<span class="agent-name">首页</span>
</RouterLink>
<RouterLink to="/ai-agents" class="agent-item" @click="showMobileMenu = false">
<!-- <RouterLink to="/ai-agents" class="agent-item" @click="showMobileMenu = false">
<svg
class="agent-icon"
viewBox="0 0 24 24"
@ -551,7 +551,7 @@ onUnmounted(() => {
<polyline points="10 9 9 9 8 9"></polyline>
</svg>
<span class="agent-name">分析历史</span>
</RouterLink>
</RouterLink> -->
<RouterLink
to="/ai-agent"
class="agent-item"

View File

@ -254,6 +254,12 @@ const formatTime = (date: Date) => {
minute: '2-digit',
})
}
//
const sendExampleMessage = async (message: string) => {
messageInput.value = message
await sendMessage()
}
</script>
<template>
@ -264,32 +270,51 @@ const formatTime = (date: Date) => {
<!-- 欢迎消息 -->
<div v-if="messages.length === 0" class="welcome-message">
<div class="welcome-content">
<div class="welcome-icon">🤖</div>
<div class="welcome-icon">
<svg viewBox="0 0 24 24" fill="currentColor" width="48" height="48">
<path
d="M12,2A2,2 0 0,1 14,4C14,4.74 13.6,5.39 13,5.73V7H14A7,7 0 0,1 21,14H22A1,1 0 0,1 23,15V18A1,1 0 0,1 22,19H21V20A2,2 0 0,1 19,22H5A2,2 0 0,1 3,20V19H2A1,1 0 0,1 1,18V15A1,1 0 0,1 2,14H3A7,7 0 0,1 10,7H11V5.73C10.4,5.39 10,4.74 10,4A2,2 0 0,1 12,2M7.5,13A2.5,2.5 0 0,0 5,15.5A2.5,2.5 0 0,0 7.5,18A2.5,2.5 0 0,0 10,15.5A2.5,2.5 0 0,0 7.5,13M16.5,13A2.5,2.5 0 0,0 14,15.5A2.5,2.5 0 0,0 16.5,18A2.5,2.5 0 0,0 19,15.5A2.5,2.5 0 0,0 16.5,13Z"
/>
</svg>
</div>
<h3>欢迎使用AI 交易智能体</h3>
<p>您可以向我提问任何问题我会尽力为您提供帮助</p>
<p>可以为您提供市场分析交易建议和投资策略</p>
<div class="example-questions">
<p class="example-title">试试这些问题</p>
<p class="example-title">快速尝试</p>
<div class="example-grid">
<button
class="example-question"
@click="messageInput = '分析一下BTC'"
@click="sendExampleMessage('分析BTC行情')"
:disabled="isLoading"
>
分析一下BTC
<span class="example-icon"></span>
<span>分析BTC行情</span>
</button>
<button
class="example-question"
@click="messageInput = '分析一下:贵州茅台'"
@click="sendExampleMessage('分析ETH行情')"
:disabled="isLoading"
>
分析一下贵州茅台
<span class="example-icon">Ξ</span>
<span>分析ETH行情</span>
</button>
<button
class="example-question"
@click="messageInput = '分析一下ETH'"
@click="sendExampleMessage('分析贵州茅台股票')"
:disabled="isLoading"
>
分析一下ETH
<span class="example-icon">📈</span>
<span>分析贵州茅台股票</span>
</button>
<button
class="example-question"
@click="sendExampleMessage('分析中国平安股票')"
:disabled="isLoading"
>
<span class="example-icon">🏦</span>
<span>分析中国平安股票</span>
</button>
</div>
</div>
</div>
</div>
@ -343,6 +368,7 @@ const formatTime = (date: Date) => {
</div>
<div class="message-actions">
<button
v-if="!message.isStreaming"
class="action-btn copy-btn"
@click="copyMessage(message.content)"
:disabled="!message.content"
@ -437,7 +463,8 @@ const formatTime = (date: Date) => {
.welcome-icon {
font-size: 3rem;
margin-bottom: 1rem;
margin-bottom: 1.5rem;
color: var(--color-accent);
}
.welcome-content h3 {
@ -466,28 +493,49 @@ const formatTime = (date: Date) => {
margin-bottom: 0.5rem;
}
.example-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 0.75rem;
width: 100%;
max-width: 600px;
}
.example-question {
padding: 0.75rem 1.5rem;
display: flex;
align-items: center;
gap: 0.5rem;
padding: 1rem 1.5rem;
border: 1px solid var(--color-border);
border-radius: var(--border-radius);
border-radius: 12px;
background: var(--color-bg-secondary);
color: var(--color-text-primary);
cursor: pointer;
transition: all 0.2s ease;
font-size: 0.9rem;
max-width: 300px;
text-align: center;
text-align: left;
min-height: 60px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
}
.example-question:hover:not(:disabled) {
border-color: var(--color-accent);
background: var(--color-accent);
color: white;
background: var(--color-bg-primary);
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
.example-question:disabled {
opacity: 0.5;
cursor: not-allowed;
transform: none;
}
.example-icon {
font-size: 1.2rem;
flex-shrink: 0;
width: 24px;
text-align: center;
}
.message-wrapper {
@ -589,18 +637,22 @@ const formatTime = (date: Date) => {
.message-body {
background-color: var(--color-bg-secondary);
border-radius: var(--border-radius);
padding: 1rem;
border-radius: 18px;
padding: 1rem 1.25rem;
position: relative;
width: fit-content;
min-width: 100px;
max-width: 600px;
word-wrap: break-word;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
border: 1px solid rgba(0, 0, 0, 0.05);
}
.user-message .message-body {
background-color: var(--color-accent);
background: linear-gradient(135deg, var(--color-accent), #667eea);
color: white;
border: none;
box-shadow: 0 2px 8px rgba(59, 130, 246, 0.2);
}
.message-text {