no message

This commit is contained in:
aaron 2025-05-25 23:14:06 +08:00
parent ce3f311f0f
commit eaefac1290
3 changed files with 141 additions and 114 deletions

View File

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

View File

@ -1799,6 +1799,17 @@ body {
max-width: 400px; max-width: 400px;
box-shadow: 0 4px 24px rgba(0, 0, 0, 0.2); box-shadow: 0 4px 24px rgba(0, 0, 0, 0.2);
animation: modalSlideIn 0.3s ease; animation: modalSlideIn 0.3s ease;
border: 1px solid var(--color-border);
}
/* 深色主题下的通用模态框增强 */
[data-theme='dark'] .modal-container {
background-color: #1a1a1a;
border: 2px solid rgba(255, 255, 255, 0.15);
box-shadow:
0 8px 32px rgba(0, 0, 0, 0.6),
0 0 0 1px rgba(255, 255, 255, 0.1),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
} }
.modal-header { .modal-header {
@ -2203,6 +2214,23 @@ html {
box-shadow: 0 4px 24px rgba(0, 0, 0, 0.2); box-shadow: 0 4px 24px rgba(0, 0, 0, 0.2);
animation: modalSlideIn 0.3s ease; animation: modalSlideIn 0.3s ease;
overflow: hidden; overflow: hidden;
border: 1px solid var(--color-border);
}
/* 深色主题下的模态框增强 */
[data-theme='dark'] .user-info-modal-container {
background-color: #1a1a1a;
border: 2px solid rgba(255, 255, 255, 0.15);
box-shadow:
0 8px 32px rgba(0, 0, 0, 0.6),
0 0 0 1px rgba(255, 255, 255, 0.1),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
/* 深色主题下的模态框背景遮罩增强 */
[data-theme='dark'] .modal-overlay {
background-color: rgba(0, 0, 0, 0.8);
backdrop-filter: blur(8px);
} }
.user-info-modal-content { .user-info-modal-content {
@ -2441,4 +2469,32 @@ html {
.mobile-user-info .user-info-box:hover .user-email-display { .mobile-user-info .user-info-box:hover .user-email-display {
color: var(--color-accent); color: var(--color-accent);
} }
/* 深色主题下的模态框头部增强 */
[data-theme='dark'] .modal-header {
border-bottom: 1px solid rgba(255, 255, 255, 0.15);
background-color: rgba(255, 255, 255, 0.03);
}
/* 深色主题下的模态框内容区域 */
[data-theme='dark'] .modal-content {
background-color: #1a1a1a;
}
/* 深色主题下的用户信息模态框头部 */
[data-theme='dark'] .user-profile-section {
border-bottom: 1px solid rgba(255, 255, 255, 0.15);
background-color: rgba(255, 255, 255, 0.03);
}
/* 深色主题下的设置区域 */
[data-theme='dark'] .settings-section {
background-color: #1a1a1a;
}
/* 深色主题下的模态框操作区域 */
[data-theme='dark'] .modal-actions {
border-top: 1px solid rgba(255, 255, 255, 0.15);
background-color: rgba(255, 255, 255, 0.03);
}
</style> </style>

View File

@ -311,37 +311,39 @@ onUnmounted(() => {
</div> </div>
<!-- 详情弹窗 --> <!-- 详情弹窗 -->
<div v-if="showDetail && selectedHistory" class="detail-modal"> <Transition name="modal" appear>
<div class="detail-content"> <div v-if="showDetail && selectedHistory" class="detail-modal" @click="closeDetail">
<div class="detail-header"> <div class="detail-content" @click.stop>
<h2>分析详情</h2> <div class="detail-header">
<button class="close-btn" @click="closeDetail">×</button> <h2>分析详情</h2>
</div> <button class="close-btn" @click="closeDetail">×</button>
</div>
<div class="detail-info"> <div class="detail-info">
<div class="info-row"> <div class="info-row">
<span class="info-label">标的代码:</span> <span class="info-label">标的代码:</span>
<span class="info-value">{{ selectedHistory.symbol }}</span> <span class="info-value">{{ selectedHistory.symbol }}</span>
</div>
<div class="info-row">
<span class="info-label">分析类型:</span>
<span class="info-value">{{ getTypeName(selectedHistory.type) }}</span>
</div>
<div v-if="selectedHistory.timeframe" class="info-row">
<span class="info-label">时间周期:</span>
<span class="info-value">{{ selectedHistory.timeframe }}</span>
</div>
<div class="info-row">
<span class="info-label">分析时间:</span>
<span class="info-value">{{ formatDateTime(selectedHistory.create_time) }}</span>
</div>
</div> </div>
<div class="info-row">
<span class="info-label">分析类型:</span>
<span class="info-value">{{ getTypeName(selectedHistory.type) }}</span>
</div>
<div v-if="selectedHistory.timeframe" class="info-row">
<span class="info-label">时间周期:</span>
<span class="info-value">{{ selectedHistory.timeframe }}</span>
</div>
<div class="info-row">
<span class="info-label">分析时间:</span>
<span class="info-value">{{ formatDateTime(selectedHistory.create_time) }}</span>
</div>
</div>
<div class="detail-content-wrapper"> <div class="detail-content-wrapper">
<div class="analysis-content markdown-content" v-html="parsedContent"></div> <div class="analysis-content markdown-content" v-html="parsedContent"></div>
</div>
</div> </div>
</div> </div>
</div> </Transition>
</div> </div>
</template> </template>
@ -619,7 +621,7 @@ onUnmounted(() => {
left: 0; left: 0;
right: 0; right: 0;
bottom: 0; bottom: 0;
background-color: rgba(0, 0, 0, 0.7); background-color: rgba(0, 0, 0, 0.5);
backdrop-filter: blur(4px); backdrop-filter: blur(4px);
display: flex; display: flex;
align-items: center; align-items: center;
@ -628,6 +630,12 @@ onUnmounted(() => {
padding: 1rem; padding: 1rem;
} }
/* 深色主题下的模态框背景遮罩增强 */
[data-theme='dark'] .detail-modal {
background-color: rgba(0, 0, 0, 0.8);
backdrop-filter: blur(8px);
}
.detail-content { .detail-content {
background-color: var(--color-bg-primary); background-color: var(--color-bg-primary);
border-radius: var(--border-radius); border-radius: var(--border-radius);
@ -642,22 +650,14 @@ onUnmounted(() => {
position: relative; position: relative;
} }
.detail-content::before { /* 深色主题下的详情模态框增强 */
content: ''; [data-theme='dark'] .detail-content {
position: absolute; background-color: #1a1a1a;
top: 0; border: 2px solid rgba(255, 255, 255, 0.15);
left: 0; box-shadow:
right: 0; 0 8px 32px rgba(0, 0, 0, 0.6),
bottom: 0; 0 0 0 1px rgba(255, 255, 255, 0.1),
background: linear-gradient( inset 0 1px 0 rgba(255, 255, 255, 0.1);
135deg,
rgba(255, 255, 255, 0.1) 0%,
rgba(255, 255, 255, 0.05) 50%,
rgba(255, 255, 255, 0.02) 100%
);
border-radius: var(--border-radius);
pointer-events: none;
z-index: 1;
} }
.detail-header { .detail-header {
@ -671,6 +671,12 @@ onUnmounted(() => {
z-index: 2; z-index: 2;
} }
/* 深色主题下的详情模态框头部增强 */
[data-theme='dark'] .detail-header {
border-bottom: 1px solid rgba(255, 255, 255, 0.15);
background-color: rgba(255, 255, 255, 0.03);
}
.detail-header h2 { .detail-header h2 {
font-size: 1.25rem; font-size: 1.25rem;
font-weight: 600; font-weight: 600;
@ -706,6 +712,12 @@ onUnmounted(() => {
z-index: 2; z-index: 2;
} }
/* 深色主题下的详情信息区域增强 */
[data-theme='dark'] .detail-info {
border-bottom: 1px solid rgba(255, 255, 255, 0.15);
background-color: rgba(255, 255, 255, 0.03);
}
.info-row { .info-row {
display: flex; display: flex;
gap: 0.5rem; gap: 0.5rem;
@ -731,6 +743,11 @@ onUnmounted(() => {
z-index: 2; z-index: 2;
} }
/* 深色主题下的详情内容包装器增强 */
[data-theme='dark'] .detail-content-wrapper {
background-color: #1a1a1a;
}
.analysis-content { .analysis-content {
padding: 1.5rem; padding: 1.5rem;
} }
@ -949,6 +966,30 @@ onUnmounted(() => {
.history-content::-webkit-scrollbar-thumb:hover { .history-content::-webkit-scrollbar-thumb:hover {
background-color: rgba(0, 0, 0, 0.2); background-color: rgba(0, 0, 0, 0.2);
} }
/* 模态框动画效果 */
.modal-enter-active,
.modal-leave-active {
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.modal-enter-from,
.modal-leave-to {
opacity: 0;
}
.modal-enter-from .detail-content,
.modal-leave-to .detail-content {
transform: scale(0.9) translateY(-20px);
opacity: 0;
}
.modal-enter-to .detail-content,
.modal-leave-from .detail-content {
transform: scale(1) translateY(0);
opacity: 1;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
</style> </style>
<style> <style>
@ -1120,73 +1161,3 @@ onUnmounted(() => {
border: 0; border: 0;
} }
</style> </style>
<style>
/* 深色主题下的弹窗优化 */
:global(html[data-theme='dark']) .detail-modal {
background-color: rgba(0, 0, 0, 0.8);
}
:global(html[data-theme='dark']) .detail-content {
background-color: #0a0a0a;
border: 1px solid rgba(255, 255, 255, 0.15);
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.6);
}
:global(html[data-theme='dark']) .detail-content::before {
background: linear-gradient(
135deg,
rgba(255, 255, 255, 0.08) 0%,
rgba(255, 255, 255, 0.04) 50%,
rgba(255, 255, 255, 0.02) 100%
);
}
:global(html[data-theme='dark']) .detail-header {
background-color: rgba(255, 255, 255, 0.03);
border-bottom: 1px solid rgba(255, 255, 255, 0.15);
}
:global(html[data-theme='dark']) .detail-info {
background-color: rgba(255, 255, 255, 0.03);
border-bottom: 1px solid rgba(255, 255, 255, 0.15);
}
:global(html[data-theme='dark']) .detail-content-wrapper {
background-color: #0a0a0a;
}
/* 浅色主题下的弹窗优化 */
:global(html[data-theme='light']) .detail-modal {
background-color: rgba(0, 0, 0, 0.5);
}
:global(html[data-theme='light']) .detail-content {
background-color: #ffffff;
border: 1px solid rgba(0, 0, 0, 0.1);
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15);
}
:global(html[data-theme='light']) .detail-content::before {
background: linear-gradient(
135deg,
rgba(255, 255, 255, 0.8) 0%,
rgba(255, 255, 255, 0.4) 50%,
rgba(255, 255, 255, 0.2) 100%
);
}
:global(html[data-theme='light']) .detail-header {
background-color: rgba(0, 0, 0, 0.02);
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
}
:global(html[data-theme='light']) .detail-info {
background-color: rgba(0, 0, 0, 0.02);
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
}
:global(html[data-theme='light']) .detail-content-wrapper {
background-color: #ffffff;
}
</style>