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: build:
context: . context: .
dockerfile: Dockerfile dockerfile: Dockerfile
image: tradus-web:1.3.28 image: tradus-web:1.3.29
container_name: tradus-web container_name: tradus-web
ports: ports:
- '6000:80' - '6000:80'

View File

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

View File

@ -254,6 +254,12 @@ const formatTime = (date: Date) => {
minute: '2-digit', minute: '2-digit',
}) })
} }
//
const sendExampleMessage = async (message: string) => {
messageInput.value = message
await sendMessage()
}
</script> </script>
<template> <template>
@ -264,32 +270,51 @@ const formatTime = (date: Date) => {
<!-- 欢迎消息 --> <!-- 欢迎消息 -->
<div v-if="messages.length === 0" class="welcome-message"> <div v-if="messages.length === 0" class="welcome-message">
<div class="welcome-content"> <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> <h3>欢迎使用AI 交易智能体</h3>
<p>您可以向我提问任何问题我会尽力为您提供帮助</p> <p>可以为您提供市场分析交易建议和投资策略</p>
<div class="example-questions"> <div class="example-questions">
<p class="example-title">试试这些问题</p> <p class="example-title">快速尝试</p>
<button <div class="example-grid">
class="example-question" <button
@click="messageInput = '分析一下BTC'" class="example-question"
:disabled="isLoading" @click="sendExampleMessage('分析BTC行情')"
> :disabled="isLoading"
分析一下BTC >
</button> <span class="example-icon"></span>
<button <span>分析BTC行情</span>
class="example-question" </button>
@click="messageInput = '分析一下:贵州茅台'" <button
:disabled="isLoading" class="example-question"
> @click="sendExampleMessage('分析ETH行情')"
分析一下贵州茅台 :disabled="isLoading"
</button> >
<button <span class="example-icon">Ξ</span>
class="example-question" <span>分析ETH行情</span>
@click="messageInput = '分析一下ETH'" </button>
:disabled="isLoading" <button
> class="example-question"
分析一下ETH @click="sendExampleMessage('分析贵州茅台股票')"
</button> :disabled="isLoading"
>
<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> </div>
</div> </div>
@ -343,6 +368,7 @@ const formatTime = (date: Date) => {
</div> </div>
<div class="message-actions"> <div class="message-actions">
<button <button
v-if="!message.isStreaming"
class="action-btn copy-btn" class="action-btn copy-btn"
@click="copyMessage(message.content)" @click="copyMessage(message.content)"
:disabled="!message.content" :disabled="!message.content"
@ -437,7 +463,8 @@ const formatTime = (date: Date) => {
.welcome-icon { .welcome-icon {
font-size: 3rem; font-size: 3rem;
margin-bottom: 1rem; margin-bottom: 1.5rem;
color: var(--color-accent);
} }
.welcome-content h3 { .welcome-content h3 {
@ -466,28 +493,49 @@ const formatTime = (date: Date) => {
margin-bottom: 0.5rem; 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 { .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: 1px solid var(--color-border);
border-radius: var(--border-radius); border-radius: 12px;
background: var(--color-bg-secondary); background: var(--color-bg-secondary);
color: var(--color-text-primary); color: var(--color-text-primary);
cursor: pointer; cursor: pointer;
transition: all 0.2s ease; transition: all 0.2s ease;
font-size: 0.9rem; font-size: 0.9rem;
max-width: 300px; text-align: left;
text-align: center; min-height: 60px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
} }
.example-question:hover:not(:disabled) { .example-question:hover:not(:disabled) {
border-color: var(--color-accent); border-color: var(--color-accent);
background: var(--color-accent); background: var(--color-bg-primary);
color: white; transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
} }
.example-question:disabled { .example-question:disabled {
opacity: 0.5; opacity: 0.5;
cursor: not-allowed; cursor: not-allowed;
transform: none;
}
.example-icon {
font-size: 1.2rem;
flex-shrink: 0;
width: 24px;
text-align: center;
} }
.message-wrapper { .message-wrapper {
@ -589,18 +637,22 @@ const formatTime = (date: Date) => {
.message-body { .message-body {
background-color: var(--color-bg-secondary); background-color: var(--color-bg-secondary);
border-radius: var(--border-radius); border-radius: 18px;
padding: 1rem; padding: 1rem 1.25rem;
position: relative; position: relative;
width: fit-content; width: fit-content;
min-width: 100px; min-width: 100px;
max-width: 600px; max-width: 600px;
word-wrap: break-word; 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 { .user-message .message-body {
background-color: var(--color-accent); background: linear-gradient(135deg, var(--color-accent), #667eea);
color: white; color: white;
border: none;
box-shadow: 0 2px 8px rgba(59, 130, 246, 0.2);
} }
.message-text { .message-text {