This commit is contained in:
aaron 2025-05-18 11:07:13 +08:00
parent dd11e70c82
commit 492beff418
2 changed files with 45 additions and 18 deletions

View File

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

View File

@ -29,13 +29,20 @@ const handleKeyup = (event: KeyboardEvent) => {
} }
} }
//
const setErrorMessage = (message: string) => {
// 使
analysisContent.value = `错误: ${message}`
currentThought.value = '分析失败'
}
const handleAnalysis = async () => { const handleAnalysis = async () => {
const code = stockCode.value.trim() const code = stockCode.value.trim()
if (!code || isAnalyzing.value) return if (!code || isAnalyzing.value) return
// //
if (!/^\d{6}$/.test(code)) { if (!/^\d{6}$/.test(code)) {
analysisContent.value = '<div class="error-message">请输入正确的6位股票代码</div>' setErrorMessage('请输入正确的6位股票代码')
return return
} }
@ -58,7 +65,18 @@ const handleAnalysis = async () => {
}) })
if (!response.ok) { if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`) //
try {
const errorData = await response.json()
if (errorData && errorData.detail) {
setErrorMessage(errorData.detail)
} else {
setErrorMessage(`请求失败,状态码: ${response.status}`)
}
} catch {
setErrorMessage(`请求失败,状态码: ${response.status}`)
}
return
} }
const reader = response.body?.getReader() const reader = response.body?.getReader()
@ -111,22 +129,19 @@ const handleAnalysis = async () => {
case 'error': case 'error':
const errorMessage = data.error || '未知错误' const errorMessage = data.error || '未知错误'
analysisContent.value = `<div class="error-message">分析过程中出现错误:${errorMessage}</div>` setErrorMessage(errorMessage)
currentThought.value = '分析过程出现错误'
await scrollToBottom() await scrollToBottom()
break break
} }
} catch (e) { } catch (e) {
console.error('解析响应数据出错:', e) console.error('解析响应数据出错:', e)
analysisContent.value = '<div class="error-message">解析响应数据时出错,请稍后重试</div>' setErrorMessage('解析响应数据时出错,请稍后重试')
currentThought.value = '数据解析出错'
} }
} }
} }
} catch (error) { } catch (error) {
console.error('分析请求失败:', error) console.error('分析请求失败:', error)
analysisContent.value = '<div class="error-message">抱歉,分析请求失败,请稍后重试</div>' setErrorMessage('抱歉,分析请求失败,请稍后重试')
currentThought.value = '请求失败'
} finally { } finally {
isAnalyzing.value = false isAnalyzing.value = false
await scrollToBottom() await scrollToBottom()
@ -276,7 +291,12 @@ const copyAnalysis = async () => {
ref="analysisContainer" ref="analysisContainer"
:class="{ 'fade-in': analysisContent }" :class="{ 'fade-in': analysisContent }"
> >
<div class="analysis-content" v-html="analysisContent"></div> <div v-if="analysisContent.startsWith('错误:')" class="error-message">
{{ analysisContent.substring(4) }}
</div>
<div v-else class="analysis-content">
{{ analysisContent }}
</div>
</div> </div>
</div> </div>
</div> </div>
@ -580,14 +600,21 @@ const copyAnalysis = async () => {
color: var(--color-text-primary); color: var(--color-text-primary);
} }
:deep(.error-message) { .error-message {
margin: 1rem 0; color: #ff3333;
padding: 0.75rem 1rem; font-weight: 500;
background-color: rgba(255, 0, 0, 0.05); padding: 1rem;
border: 1px solid rgba(255, 0, 0, 0.1); background-color: rgba(255, 51, 51, 0.08);
border-radius: var(--border-radius); border: 1px solid rgba(255, 51, 51, 0.2);
color: #ff4444; border-radius: 0.5rem;
font-size: 0.95rem; margin: 1rem;
text-align: center;
font-size: 1rem;
line-height: 1.5;
}
.error-message::before {
content: '⚠️ ';
} }
/* 动画 */ /* 动画 */