no message
This commit is contained in:
parent
eaefac1290
commit
c8ff4ab869
@ -5,7 +5,7 @@ services:
|
|||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
image: tradus-web:1.3.24
|
image: tradus-web:1.3.25
|
||||||
container_name: tradus-web
|
container_name: tradus-web
|
||||||
ports:
|
ports:
|
||||||
- '6000:80'
|
- '6000:80'
|
||||||
|
|||||||
@ -24,6 +24,15 @@ const agents = [
|
|||||||
</svg>`,
|
</svg>`,
|
||||||
route: '/analysis/stock',
|
route: '/analysis/stock',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: 'usstock-analysis',
|
||||||
|
name: '美股股票分析智能体',
|
||||||
|
description: '获取美股上市公司的深度AI智能分析报告',
|
||||||
|
icon: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/>
|
||||||
|
</svg>`,
|
||||||
|
route: '/analysis/usstock',
|
||||||
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
const navigateToAgent = (route: string) => {
|
const navigateToAgent = (route: string) => {
|
||||||
|
|||||||
@ -50,6 +50,8 @@ const pageTitle = computed(() => {
|
|||||||
switch (analysisType.value) {
|
switch (analysisType.value) {
|
||||||
case 'stock':
|
case 'stock':
|
||||||
return 'A股股票分析智能体'
|
return 'A股股票分析智能体'
|
||||||
|
case 'usstock':
|
||||||
|
return '美股股票分析智能体'
|
||||||
case 'crypto':
|
case 'crypto':
|
||||||
default:
|
default:
|
||||||
return '加密货币分析智能体'
|
return '加密货币分析智能体'
|
||||||
@ -60,6 +62,8 @@ const pageDescription = computed(() => {
|
|||||||
switch (analysisType.value) {
|
switch (analysisType.value) {
|
||||||
case 'stock':
|
case 'stock':
|
||||||
return '获取A股上市公司的深度AI智能分析'
|
return '获取A股上市公司的深度AI智能分析'
|
||||||
|
case 'usstock':
|
||||||
|
return '获取美股上市公司的深度AI智能分析'
|
||||||
case 'crypto':
|
case 'crypto':
|
||||||
default:
|
default:
|
||||||
return '获取加密货币的深度AI智能分析'
|
return '获取加密货币的深度AI智能分析'
|
||||||
@ -70,6 +74,8 @@ const inputPlaceholder = computed(() => {
|
|||||||
switch (analysisType.value) {
|
switch (analysisType.value) {
|
||||||
case 'stock':
|
case 'stock':
|
||||||
return '请输入上市公司股票代码'
|
return '请输入上市公司股票代码'
|
||||||
|
case 'usstock':
|
||||||
|
return '请输入美股股票代码,如AAPL、TSLA等'
|
||||||
case 'crypto':
|
case 'crypto':
|
||||||
default:
|
default:
|
||||||
return '请输入BTC、ETH, 一次只能分析一个币种'
|
return '请输入BTC、ETH, 一次只能分析一个币种'
|
||||||
@ -77,7 +83,9 @@ const inputPlaceholder = computed(() => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
// 是否为股票分析模式
|
// 是否为股票分析模式
|
||||||
const isStockMode = computed(() => analysisType.value === 'stock')
|
const isStockMode = computed(
|
||||||
|
() => analysisType.value === 'stock' || analysisType.value === 'usstock',
|
||||||
|
)
|
||||||
|
|
||||||
// 常见标的列表
|
// 常见标的列表
|
||||||
const commonItemsList = computed(() => {
|
const commonItemsList = computed(() => {
|
||||||
@ -95,6 +103,19 @@ const commonItemsList = computed(() => {
|
|||||||
{ code: '600036', label: '招商银行' },
|
{ code: '600036', label: '招商银行' },
|
||||||
{ code: '603288', label: '海天味业' },
|
{ code: '603288', label: '海天味业' },
|
||||||
]
|
]
|
||||||
|
case 'usstock':
|
||||||
|
return [
|
||||||
|
{ code: 'AAPL', label: '苹果 (AAPL)' },
|
||||||
|
{ code: 'TSLA', label: '特斯拉 (TSLA)' },
|
||||||
|
{ code: 'NVDA', label: '英伟达 (NVDA)' },
|
||||||
|
{ code: 'GOOGL', label: '谷歌 (GOOGL)' },
|
||||||
|
{ code: 'MSFT', label: '微软 (MSFT)' },
|
||||||
|
{ code: 'AMZN', label: '亚马逊 (AMZN)' },
|
||||||
|
{ code: 'META', label: 'Meta (META)' },
|
||||||
|
{ code: 'NFLX', label: '奈飞 (NFLX)' },
|
||||||
|
{ code: 'AMD', label: 'AMD (AMD)' },
|
||||||
|
{ code: 'BABA', label: '阿里巴巴 (BABA)' },
|
||||||
|
]
|
||||||
case 'crypto':
|
case 'crypto':
|
||||||
default:
|
default:
|
||||||
return [
|
return [
|
||||||
@ -143,9 +164,12 @@ const saveAnalysisHistory = async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 根据不同模式设置不同参数
|
// 根据不同模式设置不同参数
|
||||||
if (isStockMode.value) {
|
if (analysisType.value === 'stock') {
|
||||||
payload.stock_code = symbolCode.value.trim()
|
payload.symbol = symbolCode.value.trim()
|
||||||
payload.type = 'astock'
|
payload.type = 'astock'
|
||||||
|
} else if (analysisType.value === 'usstock') {
|
||||||
|
payload.symbol = symbolCode.value.toUpperCase().trim()
|
||||||
|
payload.type = 'usstock'
|
||||||
} else {
|
} else {
|
||||||
payload.symbol = symbolCode.value.toUpperCase().trim()
|
payload.symbol = symbolCode.value.toUpperCase().trim()
|
||||||
payload.timeframe = selectedTimeframe.value
|
payload.timeframe = selectedTimeframe.value
|
||||||
@ -169,11 +193,17 @@ const handleAnalysis = async () => {
|
|||||||
if (!code || isAnalyzing.value) return
|
if (!code || isAnalyzing.value) return
|
||||||
|
|
||||||
// 股票模式下验证股票代码格式
|
// 股票模式下验证股票代码格式
|
||||||
if (isStockMode.value && !/^\d{6}$/.test(code)) {
|
if (analysisType.value === 'stock' && !/^\d{6}$/.test(code)) {
|
||||||
setErrorMessage('请输入正确的6位股票代码')
|
setErrorMessage('请输入正确的6位股票代码')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 美股模式下验证股票代码格式(字母和数字组合,1-5位)
|
||||||
|
if (analysisType.value === 'usstock' && !/^[A-Za-z]{1,5}$/.test(code)) {
|
||||||
|
setErrorMessage('请输入正确的美股股票代码(1-5位字母)')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// 先切换到分析视图,再设置分析状态
|
// 先切换到分析视图,再设置分析状态
|
||||||
showInitialView.value = false
|
showInitialView.value = false
|
||||||
isAnalyzing.value = true
|
isAnalyzing.value = true
|
||||||
@ -184,12 +214,18 @@ const handleAnalysis = async () => {
|
|||||||
let requestData
|
let requestData
|
||||||
|
|
||||||
// 根据分析类型构造不同的请求参数
|
// 根据分析类型构造不同的请求参数
|
||||||
if (isStockMode.value) {
|
if (analysisType.value === 'stock') {
|
||||||
// A股分析参数
|
// A股分析参数
|
||||||
requestData = {
|
requestData = {
|
||||||
stock_code: code,
|
stock_code: code,
|
||||||
type: 'astock',
|
type: 'astock',
|
||||||
}
|
}
|
||||||
|
} else if (analysisType.value === 'usstock') {
|
||||||
|
// 美股分析参数
|
||||||
|
requestData = {
|
||||||
|
stock_code: code.toUpperCase(),
|
||||||
|
type: 'usstock',
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// 加密货币分析参数
|
// 加密货币分析参数
|
||||||
requestData = {
|
requestData = {
|
||||||
@ -381,7 +417,9 @@ const parsedContent = computed(() => {
|
|||||||
:placeholder="inputPlaceholder"
|
:placeholder="inputPlaceholder"
|
||||||
@keydown="handleKeydown"
|
@keydown="handleKeydown"
|
||||||
:disabled="isAnalyzing"
|
:disabled="isAnalyzing"
|
||||||
:maxlength="isStockMode ? 6 : undefined"
|
:maxlength="
|
||||||
|
analysisType === 'stock' ? 6 : analysisType === 'usstock' ? 5 : undefined
|
||||||
|
"
|
||||||
/>
|
/>
|
||||||
<button
|
<button
|
||||||
v-if="symbolCode.trim() || analysisContent"
|
v-if="symbolCode.trim() || analysisContent"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user