From 1ae0639fc27833d4e5b1cd8a1a9feb6899803cb4 Mon Sep 17 00:00:00 2001 From: dongzp <975303544@qq.com> Date: Fri, 24 Jul 2026 10:10:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=A4=A7=E5=8D=95=E6=8F=90?= =?UTF-8?q?=E9=86=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/baidu/mapWsQuote.ts | 10 ++++++- src/components/header/AppHeader.vue | 2 +- .../header/ContractSettingsDialog.vue | 28 ++++++++++++++++++- src/stores/contract.ts | 5 ++++ src/stores/quota.ts | 4 ++- src/types/index.ts | 4 +++ src/utils/largeOrderAlert.ts | 23 +++++++++++++++ 7 files changed, 72 insertions(+), 4 deletions(-) create mode 100644 src/utils/largeOrderAlert.ts diff --git a/src/api/baidu/mapWsQuote.ts b/src/api/baidu/mapWsQuote.ts index 215bd4d..081b932 100644 --- a/src/api/baidu/mapWsQuote.ts +++ b/src/api/baidu/mapWsQuote.ts @@ -76,8 +76,9 @@ function upsertIntraday( /** * Merge tick detailinfos into quote.trades (newest first, dedupe, cap 200). * Mutates quote in place so Vue only invalidates trade-dependent effects. + * @returns newly inserted ticks (not already in quote.trades) */ -export function applyWsTick(quote: QuoteData, data: BaiduWsTickData): void { +export function applyWsTick(quote: QuoteData, data: BaiduWsTickData): TradeTick[] { const incoming: TradeTick[] = [...(data.detailinfos ?? [])] .reverse() .map((t) => ({ @@ -87,6 +88,12 @@ export function applyWsTick(quote: QuoteData, data: BaiduWsTickData): void { side: t.bsFlag === 'B' ? 'B' : 'S', })) + const existingKeys = new Set(quote.trades.map(tradeKey)) + const added: TradeTick[] = [] + for (const t of incoming) { + if (!existingKeys.has(tradeKey(t))) added.push(t) + } + const seen = new Set() const merged: TradeTick[] = [] for (const t of [...incoming, ...quote.trades]) { @@ -97,6 +104,7 @@ export function applyWsTick(quote: QuoteData, data: BaiduWsTickData): void { if (merged.length >= MAX_TRADES) break } quote.trades = merged + return added } /** diff --git a/src/components/header/AppHeader.vue b/src/components/header/AppHeader.vue index 0ba91ba..a0dc7c7 100644 --- a/src/components/header/AppHeader.vue +++ b/src/components/header/AppHeader.vue @@ -34,7 +34,7 @@ :value="c.id" /> - 合约 + 自选 diff --git a/src/components/header/ContractSettingsDialog.vue b/src/components/header/ContractSettingsDialog.vue index 2972a32..6823b6a 100644 --- a/src/components/header/ContractSettingsDialog.vue +++ b/src/components/header/ContractSettingsDialog.vue @@ -2,7 +2,7 @@ @@ -25,6 +25,11 @@ + + +