This commit is contained in:
aaron 2025-05-15 15:42:24 +08:00
parent d079bb164e
commit b497f2c7c8
3 changed files with 133 additions and 104 deletions

View File

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

View File

@ -223,7 +223,8 @@ const copyAnalysis = async () => {
<span class="label">正在分析股票</span>
<span class="value">{{ stockCode }}</span>
</div>
<button class="new-analysis-button" @click="resetView" :disabled="isAnalyzing">
<div class="action-buttons" v-if="!isAnalyzing">
<button class="action-button" @click="resetView">
<svg
class="icon"
viewBox="0 0 24 24"
@ -239,8 +240,17 @@ const copyAnalysis = async () => {
<path d="M13.5 21a17 17 0 0 0 6.5-2.5L22 16"></path>
<path d="M22 21v-5h-5"></path>
</svg>
<span>分析</span>
<span>新分析</span>
</button>
<button
class="action-button copy"
@click="copyAnalysis"
:class="{ success: copySuccess }"
>
<span v-if="!copySuccess">复制结果</span>
<span v-else>复制成功</span>
</button>
</div>
</div>
<div v-if="isAnalyzing" class="analysis-status">
@ -261,12 +271,6 @@ const copyAnalysis = async () => {
:class="{ 'fade-in': analysisContent }"
>
<div class="analysis-content" v-html="analysisContent"></div>
<div v-if="analysisContent && !isAnalyzing" class="copy-button-container">
<button class="copy-button" @click="copyAnalysis" :class="{ success: copySuccess }">
<span v-if="!copySuccess">复制分析结果</span>
<span v-else>复制成功</span>
</button>
</div>
</div>
</div>
</div>
@ -567,9 +571,17 @@ const copyAnalysis = async () => {
align-items: flex-start;
}
.new-analysis-button {
.action-buttons {
width: 100%;
flex-direction: row;
gap: 0.75rem;
}
.action-button {
flex: 1;
justify-content: center;
padding: 0.6rem;
font-size: 0.85rem;
}
.analysis-container {
@ -580,11 +592,6 @@ const copyAnalysis = async () => {
padding: 1.25rem 1.5rem;
font-size: 0.9rem;
}
.copy-button-container {
bottom: 1.5rem;
right: 1.5rem;
}
}
@media (max-width: 480px) {
@ -652,14 +659,13 @@ const copyAnalysis = async () => {
padding: 0.75rem;
}
.copy-button-container {
bottom: 1rem;
right: 1rem;
.action-buttons {
gap: 0.5rem;
}
.copy-button {
padding: 0.6rem 1.2rem;
font-size: 0.85rem;
.action-button {
padding: 0.5rem;
font-size: 0.8rem;
}
}
@ -698,7 +704,13 @@ const copyAnalysis = async () => {
font-size: 0.9rem;
}
.new-analysis-button {
.action-buttons {
display: flex;
gap: 1rem;
align-items: center;
}
.action-button {
display: flex;
align-items: center;
gap: 0.5rem;
@ -709,19 +721,30 @@ const copyAnalysis = async () => {
color: var(--color-accent);
cursor: pointer;
transition: all 0.2s ease;
font-size: 0.9rem;
font-weight: 500;
}
.new-analysis-button:hover:not(:disabled) {
.action-button:hover {
background-color: var(--color-accent);
color: white;
}
.new-analysis-button:disabled {
opacity: 0.6;
cursor: not-allowed;
.action-button.copy {
background-color: var(--color-accent);
color: white;
}
.new-analysis-button .icon {
.action-button.copy:hover {
opacity: 0.9;
}
.action-button.copy.success {
background-color: #4caf50;
border-color: #4caf50;
}
.action-button .icon {
width: 16px;
height: 16px;
}
@ -743,36 +766,4 @@ const copyAnalysis = async () => {
:deep(*::-webkit-scrollbar-thumb:hover) {
background-color: rgba(125, 125, 125, 0.3);
}
.copy-button-container {
position: fixed;
bottom: 2rem;
right: 2rem;
z-index: 10;
}
.copy-button {
display: flex;
align-items: center;
justify-content: center;
padding: 0.75rem 1.5rem;
border: none;
border-radius: var(--border-radius);
background-color: var(--color-accent);
color: white;
font-size: 0.9rem;
font-weight: 500;
cursor: pointer;
transition: all 0.2s ease;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
}
.copy-button:hover {
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
}
.copy-button.success {
background-color: #4caf50;
}
</style>

View File

@ -246,7 +246,8 @@ const copyAnalysis = async () => {
timeframes.find((t) => t.value === selectedTimeframe)?.label
}}</span>
</div>
<button class="new-analysis-button" @click="resetView" :disabled="isAnalyzing">
<div class="action-buttons" v-if="!isAnalyzing">
<button class="action-button" @click="resetView">
<svg
class="icon"
viewBox="0 0 24 24"
@ -262,8 +263,17 @@ const copyAnalysis = async () => {
<path d="M13.5 21a17 17 0 0 0 6.5-2.5L22 16"></path>
<path d="M22 21v-5h-5"></path>
</svg>
<span>分析</span>
<span>新分析</span>
</button>
<button
class="action-button copy"
@click="copyAnalysis"
:class="{ success: copySuccess }"
>
<span v-if="!copySuccess">复制结果</span>
<span v-else>复制成功</span>
</button>
</div>
</div>
<div v-if="isAnalyzing" class="analysis-status">
@ -283,12 +293,6 @@ const copyAnalysis = async () => {
:class="{ 'fade-in': analysisContent }"
>
<div class="analysis-content" v-html="analysisContent"></div>
<div v-if="analysisContent && !isAnalyzing" class="copy-button-container">
<button class="copy-button" @click="copyAnalysis" :class="{ success: copySuccess }">
<span v-if="!copySuccess">复制分析结果</span>
<span v-else>复制成功</span>
</button>
</div>
</div>
</div>
</div>
@ -783,9 +787,17 @@ const copyAnalysis = async () => {
align-items: flex-start;
}
.new-analysis-button {
.action-buttons {
width: 100%;
flex-direction: row;
gap: 0.75rem;
}
.action-button {
flex: 1;
justify-content: center;
padding: 0.6rem;
font-size: 0.85rem;
}
.analysis-content {
@ -880,6 +892,15 @@ const copyAnalysis = async () => {
font-size: 0.85rem;
padding: 0.6rem;
}
.action-buttons {
gap: 0.5rem;
}
.action-button {
padding: 0.5rem;
font-size: 0.8rem;
}
}
.search-container.is-analyzing {
@ -1186,7 +1207,13 @@ const copyAnalysis = async () => {
border-radius: var(--border-radius);
}
.new-analysis-button {
.action-buttons {
display: flex;
gap: 1rem;
align-items: center;
}
.action-button {
display: flex;
align-items: center;
gap: 0.5rem;
@ -1197,19 +1224,30 @@ const copyAnalysis = async () => {
color: var(--color-accent);
cursor: pointer;
transition: all 0.2s ease;
font-size: 0.9rem;
font-weight: 500;
}
.new-analysis-button:hover:not(:disabled) {
.action-button:hover {
background-color: var(--color-accent);
color: white;
}
.new-analysis-button:disabled {
opacity: 0.6;
cursor: not-allowed;
.action-button.copy {
background-color: var(--color-accent);
color: white;
}
.new-analysis-button .icon {
.action-button.copy:hover {
opacity: 0.9;
}
.action-button.copy.success {
background-color: #4caf50;
border-color: #4caf50;
}
.action-button .icon {
width: 16px;
height: 16px;
}