no message
This commit is contained in:
parent
ce3f311f0f
commit
eaefac1290
@ -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'
|
||||||
|
|||||||
56
src/App.vue
56
src/App.vue
@ -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>
|
||||||
|
|||||||
@ -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>
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user