Compare commits

..

3 Commits

Author SHA1 Message Date
aaron
30502d1c3e update 2025-05-09 12:39:07 +08:00
aaron
c2b949919f 修改主题色 2025-05-09 12:13:20 +08:00
aaron
1a607c1ee1 update 2025-05-09 12:09:00 +08:00
5 changed files with 1185 additions and 1236 deletions

View File

@ -5,8 +5,8 @@ services:
build:
context: .
dockerfile: Dockerfile
image: icrypto-web:1.0.13
container_name: icrypto-web
image: tradus-web:1.0.13
container_name: tradus-web
ports:
- '6000:80'
restart: unless-stopped

View File

@ -7,7 +7,7 @@
name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"
/>
<title>Crypto.AI - AI Agent for Web3</title>
<title>tradus - AI Agent for trading</title>
<style>
html,
body {

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -4,82 +4,20 @@ import { useUserStore } from '../stores/user'
import { useRouter } from 'vue-router'
const userStore = useUserStore()
const router = useRouter()
const isAuthenticated = computed(() => userStore.isAuthenticated)
const goToAIAgent = () => {
router.push('/ai-agent')
}
const goToAIFeed = () => {
router.push('/ai-feed')
}
</script>
<template>
<div class="home-view">
<section class="hero-section">
<div class="hero-content">
<h1 class="hero-title"><span class="accent">AI Agent for Web3</span></h1>
<p class="hero-subtitle">立刻加入开启 Web3 + AI 新时代</p>
<h1 class="hero-title"><span class="accent">Tradus</span></h1>
<p class="hero-subtitle">AI Agent for trading</p>
<div class="hero-actions">
<!-- 已登录状态显示两个功能入口 -->
<template v-if="isAuthenticated">
<div class="feature-buttons">
<button @click="goToAIAgent" class="feature-button">
<div class="feature-icon">
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M12 2a10 10 0 1 0 10 10H12V2z"></path>
<path d="M12 2a10 10 0 0 1 10 10h-10V2z"></path>
<path d="M12 22v-10h10"></path>
</svg>
</div>
<div class="feature-content">
<h3>AI Agent</h3>
<p>VIP专属智能 AI 助手</p>
</div>
</button>
<button @click="goToAIFeed" class="feature-button">
<div class="feature-icon">
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<line x1="12" y1="20" x2="12" y2="10"></line>
<line x1="18" y1="20" x2="18" y2="4"></line>
<line x1="6" y1="20" x2="6" y2="16"></line>
</svg>
</div>
<div class="feature-content">
<h3>AI行情分析</h3>
<p>专业市场行情分析深度洞察趋势</p>
</div>
</button>
</div>
</template>
<!-- 未登录状态显示登录和注册按钮 -->
<template v-else>
<router-link to="/login" class="btn btn-primary"> 登录 </router-link>
<router-link to="/register" class="btn btn-secondary"> 注册 </router-link>
<template v-if="!isAuthenticated">
<router-link to="/login" class="btn btn-primary">登录</router-link>
<router-link to="/register" class="btn btn-secondary">注册</router-link>
</template>
</div>
@ -96,41 +34,26 @@ const goToAIFeed = () => {
</div>
</div>
</section>
<!-- <section class="stats-section">
<div class="stats-grid">
<div class="stat-card card">
<div class="stat-value">1000+</div>
<div class="stat-label">会员人数</div>
</div>
<div class="stat-card card">
<div class="stat-value">5000+</div>
<div class="stat-label">Agent服务次数</div>
</div>
<div class="stat-card card">
<div class="stat-value">99.9%</div>
<div class="stat-label">正常运行时间</div>
</div>
</div>
</section> -->
</div>
</template>
<style scoped>
.home-view {
width: 100%;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
.hero-section {
text-align: center;
padding: 4rem 2rem;
margin-bottom: 4rem;
background-color: var(--color-bg-secondary);
border-radius: var(--border-radius);
padding: 6rem 2rem;
position: relative;
overflow: hidden;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
width: 100%;
max-width: 1200px;
margin: 0 auto;
}
.hero-section::before {
@ -140,26 +63,24 @@ const goToAIFeed = () => {
left: 0;
width: 100%;
height: 100%;
background: radial-gradient(circle at top right, rgba(59, 130, 246, 0.1), transparent 50%);
background: radial-gradient(circle at top right, rgba(51, 85, 255, 0.03), transparent 70%);
}
.hero-content {
position: relative;
z-index: 1;
max-width: 900px;
margin: 0 auto;
}
.hero-title {
font-size: 3rem;
font-size: 5rem;
font-weight: 800;
margin-bottom: 1.5rem;
line-height: 1.2;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
line-height: 1.1;
letter-spacing: -0.02em;
color: #3355ff;
}
.accent {
color: var(--color-accent);
position: relative;
display: inline-block;
}
@ -167,158 +88,123 @@ const goToAIFeed = () => {
.accent::after {
content: '';
position: absolute;
bottom: 5px;
bottom: 8px;
left: 0;
width: 100%;
height: 8px;
background-color: var(--color-accent-light);
height: 12px;
background-color: rgba(51, 85, 255, 0.1);
z-index: -1;
border-radius: 4px;
border-radius: 6px;
opacity: 0.5;
transform: skewX(-12deg);
}
.hero-subtitle {
font-size: 1rem;
color: var(--color-text-secondary);
font-size: 1.5rem;
color: #6c757d;
max-width: 700px;
margin: 0 auto 2.5rem;
margin: 0 auto 4rem;
letter-spacing: -0.01em;
font-weight: 400;
}
.hero-actions {
display: flex;
gap: 1rem;
justify-content: center;
margin-top: 1.5rem;
}
.feature-buttons {
display: flex;
gap: 1.5rem;
width: 100%;
max-width: 800px;
justify-content: center;
}
.feature-button {
display: flex;
flex-direction: column;
align-items: center;
background-color: var(--color-bg-card);
border: 1px solid var(--color-border);
border-radius: var(--border-radius);
padding: 1.5rem;
cursor: pointer;
transition: all 0.3s ease;
width: 280px;
text-align: center;
}
.feature-button:hover {
transform: translateY(-5px);
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);
border-color: #3355ff;
}
.feature-icon {
display: flex;
align-items: center;
justify-content: center;
width: 60px;
height: 60px;
background-color: rgba(51, 85, 255, 0.1);
border-radius: 50%;
margin-bottom: 1rem;
color: #3355ff;
}
.feature-content h3 {
font-size: 1.2rem;
font-weight: 600;
margin-bottom: 0.5rem;
color: white;
}
.feature-content p {
font-size: 0.9rem;
color: var(--color-text-secondary);
margin: 0;
}
.discord-link {
margin-top: 2rem;
}
.discord-text {
display: flex;
align-items: center;
gap: 0.5rem;
color: var(--color-text-secondary);
text-decoration: none;
font-size: 0.9rem;
transition: color 0.2s ease;
justify-content: center;
}
.discord-text:hover {
color: var(--color-text-primary);
}
.discord-icon {
width: 16px;
height: 16px;
}
.btn {
padding: 0.8rem 1.6rem;
border-radius: 6px;
padding: 1rem 2rem;
border-radius: 8px;
font-weight: 600;
font-size: 1rem;
font-size: 1.1rem;
cursor: pointer;
transition: all 0.2s ease;
border: none;
transition: all 0.3s ease;
text-decoration: none;
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 160px;
}
.btn-primary {
background-color: #3355ff;
color: white;
font-weight: var(--font-weight-bold);
border: none;
box-shadow: 0 4px 6px rgba(51, 85, 255, 0.1);
}
.btn-primary:hover {
background-color: #2244ee;
transform: translateY(-2px);
box-shadow: 0 5px 15px rgba(51, 85, 255, 0.3);
box-shadow: 0 6px 12px rgba(51, 85, 255, 0.2);
}
.btn-secondary {
background-color: transparent;
color: var(--color-text-primary);
border: 1px solid var(--color-border);
background-color: rgba(51, 85, 255, 0.1);
color: #3355ff;
border: none;
}
.btn-secondary:hover {
background-color: rgba(255, 255, 255, 0.05);
background-color: rgba(51, 85, 255, 0.15);
transform: translateY(-2px);
}
@media (max-width: 768px) {
.hero-title {
font-size: 2.2rem;
}
.discord-link {
margin-top: 4rem;
opacity: 0.8;
transition: opacity 0.3s ease;
}
.hero-actions {
flex-direction: column;
.discord-link:hover {
opacity: 1;
}
.discord-text {
display: inline-flex;
align-items: center;
gap: 0.75rem;
color: #6c757d;
text-decoration: none;
font-size: 1rem;
transition: all 0.3s ease;
padding: 0.75rem 1.5rem;
border-radius: 8px;
background-color: rgba(108, 117, 125, 0.1);
}
.discord-text:hover {
color: #3355ff;
background-color: rgba(51, 85, 255, 0.1);
transform: translateY(-1px);
}
.discord-icon {
width: 20px;
height: 20px;
}
@media (max-width: 768px) {
.hero-section {
padding: 4rem 1.5rem;
}
.feature-buttons {
flex-direction: column;
gap: 1rem;
.hero-title {
font-size: 3.5rem;
}
.feature-button {
width: 100%;
max-width: 320px;
.hero-subtitle {
font-size: 1.25rem;
margin-bottom: 3rem;
}
.btn {
padding: 0.875rem 1.75rem;
font-size: 1rem;
min-width: 140px;
}
}
@ -328,7 +214,21 @@ const goToAIFeed = () => {
}
.hero-title {
font-size: 2rem;
font-size: 2.75rem;
}
.hero-subtitle {
font-size: 1.1rem;
margin-bottom: 2.5rem;
}
.hero-actions {
flex-direction: column;
gap: 1rem;
}
.btn {
width: 100%;
}
}
</style>