diff --git a/docker-compose.yml b/docker-compose.yml
index 2d83f39..22a0f16 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -5,7 +5,7 @@ services:
build:
context: .
dockerfile: Dockerfile
- image: tradus-web:1.3.24
+ image: tradus-web:1.3.25
container_name: tradus-web
ports:
- '6000:80'
diff --git a/src/views/AIAgentsView.vue b/src/views/AIAgentsView.vue
index f275a2f..d55bb2e 100644
--- a/src/views/AIAgentsView.vue
+++ b/src/views/AIAgentsView.vue
@@ -24,6 +24,15 @@ const agents = [
`,
route: '/analysis/stock',
},
+ {
+ id: 'usstock-analysis',
+ name: '美股股票分析智能体',
+ description: '获取美股上市公司的深度AI智能分析报告',
+ icon: ``,
+ route: '/analysis/usstock',
+ },
]
const navigateToAgent = (route: string) => {
diff --git a/src/views/UniversalAnalysisView.vue b/src/views/UniversalAnalysisView.vue
index b3d11cd..5a59d67 100644
--- a/src/views/UniversalAnalysisView.vue
+++ b/src/views/UniversalAnalysisView.vue
@@ -50,6 +50,8 @@ const pageTitle = computed(() => {
switch (analysisType.value) {
case 'stock':
return 'A股股票分析智能体'
+ case 'usstock':
+ return '美股股票分析智能体'
case 'crypto':
default:
return '加密货币分析智能体'
@@ -60,6 +62,8 @@ const pageDescription = computed(() => {
switch (analysisType.value) {
case 'stock':
return '获取A股上市公司的深度AI智能分析'
+ case 'usstock':
+ return '获取美股上市公司的深度AI智能分析'
case 'crypto':
default:
return '获取加密货币的深度AI智能分析'
@@ -70,6 +74,8 @@ const inputPlaceholder = computed(() => {
switch (analysisType.value) {
case 'stock':
return '请输入上市公司股票代码'
+ case 'usstock':
+ return '请输入美股股票代码,如AAPL、TSLA等'
case 'crypto':
default:
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(() => {
@@ -95,6 +103,19 @@ const commonItemsList = computed(() => {
{ code: '600036', 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':
default:
return [
@@ -143,9 +164,12 @@ const saveAnalysisHistory = async () => {
}
// 根据不同模式设置不同参数
- if (isStockMode.value) {
- payload.stock_code = symbolCode.value.trim()
+ if (analysisType.value === 'stock') {
+ payload.symbol = symbolCode.value.trim()
payload.type = 'astock'
+ } else if (analysisType.value === 'usstock') {
+ payload.symbol = symbolCode.value.toUpperCase().trim()
+ payload.type = 'usstock'
} else {
payload.symbol = symbolCode.value.toUpperCase().trim()
payload.timeframe = selectedTimeframe.value
@@ -169,11 +193,17 @@ const handleAnalysis = async () => {
if (!code || isAnalyzing.value) return
// 股票模式下验证股票代码格式
- if (isStockMode.value && !/^\d{6}$/.test(code)) {
+ if (analysisType.value === 'stock' && !/^\d{6}$/.test(code)) {
setErrorMessage('请输入正确的6位股票代码')
return
}
+ // 美股模式下验证股票代码格式(字母和数字组合,1-5位)
+ if (analysisType.value === 'usstock' && !/^[A-Za-z]{1,5}$/.test(code)) {
+ setErrorMessage('请输入正确的美股股票代码(1-5位字母)')
+ return
+ }
+
// 先切换到分析视图,再设置分析状态
showInitialView.value = false
isAnalyzing.value = true
@@ -184,12 +214,18 @@ const handleAnalysis = async () => {
let requestData
// 根据分析类型构造不同的请求参数
- if (isStockMode.value) {
+ if (analysisType.value === 'stock') {
// A股分析参数
requestData = {
stock_code: code,
type: 'astock',
}
+ } else if (analysisType.value === 'usstock') {
+ // 美股分析参数
+ requestData = {
+ stock_code: code.toUpperCase(),
+ type: 'usstock',
+ }
} else {
// 加密货币分析参数
requestData = {
@@ -381,7 +417,9 @@ const parsedContent = computed(() => {
:placeholder="inputPlaceholder"
@keydown="handleKeydown"
:disabled="isAnalyzing"
- :maxlength="isStockMode ? 6 : undefined"
+ :maxlength="
+ analysisType === 'stock' ? 6 : analysisType === 'usstock' ? 5 : undefined
+ "
/>