feat(whale-monitor): 保存策略时落库缓存市场并回显标题
- 创建/更新策略时复用 MarketService.getMarkets 写入 markets 表缓存 - 策略 DTO 增加 markets 字段,编辑页直接用其显示市场标题 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -30,6 +30,27 @@ export function conditionIdsToMarkets(
|
||||
})
|
||||
}
|
||||
|
||||
/** 策略列表/详情中的 markets 字段转为表单展示项 */
|
||||
export function strategyMarketsToItems(
|
||||
markets: Array<{
|
||||
conditionId: string
|
||||
title: string
|
||||
slug?: string
|
||||
category?: string
|
||||
image?: string
|
||||
icon?: string
|
||||
}>
|
||||
): WhaleMonitorMarketItem[] {
|
||||
return markets.map(m => ({
|
||||
conditionId: m.conditionId,
|
||||
title: m.title,
|
||||
slug: m.slug,
|
||||
category: m.category,
|
||||
image: m.image,
|
||||
icon: m.icon
|
||||
}))
|
||||
}
|
||||
|
||||
/** 解析 Gamma 返回的 outcomes JSON 字符串 */
|
||||
export function parseMarketOutcomes(outcomes?: string): string[] {
|
||||
if (!outcomes?.trim()) return []
|
||||
|
||||
@@ -10,7 +10,8 @@ import {
|
||||
clearWhaleMonitorFormDraft,
|
||||
conditionIdsToMarkets,
|
||||
loadWhaleMonitorFormDraft,
|
||||
saveWhaleMonitorFormDraft
|
||||
saveWhaleMonitorFormDraft,
|
||||
strategyMarketsToItems
|
||||
} from '../constants/whaleMonitor'
|
||||
import type {
|
||||
WhaleMonitorStrategyDto,
|
||||
@@ -90,7 +91,19 @@ const WhaleMonitorStrategyList: React.FC = () => {
|
||||
} else {
|
||||
setEditingStrategy(null)
|
||||
}
|
||||
setSelectedMarkets(pendingFormDraft.selectedMarkets)
|
||||
const draftStrategy = pendingFormDraft.editingStrategyId
|
||||
? strategies.find(s => s.id === pendingFormDraft.editingStrategyId)
|
||||
: undefined
|
||||
const knownMarkets =
|
||||
draftStrategy?.markets && draftStrategy.markets.length > 0
|
||||
? strategyMarketsToItems(draftStrategy.markets)
|
||||
: pendingFormDraft.selectedMarkets
|
||||
setSelectedMarkets(
|
||||
conditionIdsToMarkets(
|
||||
draftStrategy?.conditionIds ?? knownMarkets.map(m => m.conditionId),
|
||||
knownMarkets
|
||||
)
|
||||
)
|
||||
form.setFieldsValue(pendingFormDraft.formValues)
|
||||
setFormVisible(true)
|
||||
setPendingFormDraft(null)
|
||||
@@ -173,7 +186,11 @@ const WhaleMonitorStrategyList: React.FC = () => {
|
||||
|
||||
const showEditModal = (strategy: WhaleMonitorStrategyDto) => {
|
||||
setEditingStrategy(strategy)
|
||||
setSelectedMarkets(conditionIdsToMarkets(strategy.conditionIds))
|
||||
const known =
|
||||
strategy.markets && strategy.markets.length > 0
|
||||
? strategyMarketsToItems(strategy.markets)
|
||||
: []
|
||||
setSelectedMarkets(conditionIdsToMarkets(strategy.conditionIds, known))
|
||||
form.setFieldsValue({
|
||||
accountId: strategy.accountId,
|
||||
name: strategy.name,
|
||||
|
||||
@@ -1344,11 +1344,21 @@ export interface WhaleMonitorStrategyListLocationState {
|
||||
selectedMarkets?: WhaleMonitorMarketItem[]
|
||||
}
|
||||
|
||||
export interface WhaleMonitorStrategyMarketDto {
|
||||
conditionId: string
|
||||
title: string
|
||||
slug?: string
|
||||
category?: string
|
||||
image?: string
|
||||
icon?: string
|
||||
}
|
||||
|
||||
export interface WhaleMonitorStrategyDto {
|
||||
id: number
|
||||
accountId: number
|
||||
name?: string
|
||||
conditionIds: string[]
|
||||
markets?: WhaleMonitorStrategyMarketDto[]
|
||||
windowSeconds: number
|
||||
thresholdAmount: string
|
||||
orderAmount: string
|
||||
|
||||
Reference in New Issue
Block a user