Fix hub market chart live K-line updates in manual follow mode.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-26 19:41:17 +08:00
parent ee011800e1
commit 4aebe70611
2 changed files with 28 additions and 9 deletions
+27 -8
View File
@@ -2486,6 +2486,7 @@
const aligned = alignCandlesToTick(incoming); const aligned = alignCandlesToTick(incoming);
const prevLen = lastCandles.length; const prevLen = lastCandles.length;
const oldestTime = prevLen ? lastCandles[0].time : null; const oldestTime = prevLen ? lastCandles[0].time : null;
const prevLastTime = prevLen ? lastCandles[prevLen - 1].time : null;
const merged = mergeCandles(lastCandles, aligned, { prepend: false }); const merged = mergeCandles(lastCandles, aligned, { prepend: false });
if ( if (
prevLen > 0 && prevLen > 0 &&
@@ -2495,16 +2496,21 @@
) { ) {
return false; return false;
} }
aligned.forEach(function (bar) { let patchStart = 0;
candleSeries.update(bar); if (prevLastTime != null) {
volumeSeries.update(buildVolumeBar(bar)); patchStart = merged.findIndex(function (b) {
}); return b.time >= prevLastTime;
if (merged.length > prevLen) { });
for (let i = prevLen; i < merged.length; i++) { if (patchStart < 0) return false;
}
try {
for (let i = patchStart; i < merged.length; i++) {
const bar = merged[i]; const bar = merged[i];
candleSeries.update(bar); candleSeries.update(bar);
volumeSeries.update(buildVolumeBar(bar)); volumeSeries.update(buildVolumeBar(bar));
} }
} catch (_) {
return false;
} }
lastCandles = merged; lastCandles = merged;
indexCandles(lastCandles); indexCandles(lastCandles);
@@ -2639,7 +2645,15 @@
} }
} }
const aligned = alignCandlesToTick(incoming); const aligned = alignCandlesToTick(incoming);
if (!autoFollow && applyTailCandlePatch(aligned)) { let tailPatched = false;
if (!autoFollow) {
try {
tailPatched = applyTailCandlePatch(aligned);
} catch (_) {
tailPatched = false;
}
}
if (!autoFollow && tailPatched) {
/* 手动模式:增量 update,不触碰时间轴 */ /* 手动模式:增量 update,不触碰时间轴 */
} else { } else {
const merged = mergeCandles(lastCandles, aligned, { prepend: false }); const merged = mergeCandles(lastCandles, aligned, { prepend: false });
@@ -2862,7 +2876,12 @@
} }
if (posContext) updateLivePosPnl(); if (posContext) updateLivePosPnl();
const ver = Number(st.chart_version) || 0; const ver = Number(st.chart_version) || 0;
if (ver && ver !== localChartVersion) localChartVersion = ver; if (ver && ver !== localChartVersion) {
localChartVersion = ver;
if (lastCandles.length && vKey === lastViewKey && !chartDataLoading) {
void refreshChartTail();
}
}
} }
function connectChartStream() { function connectChartStream() {
+1 -1
View File
@@ -1046,7 +1046,7 @@
<div id="toast"></div> <div id="toast"></div>
<script src="https://unpkg.com/lightweight-charts@4.2.0/dist/lightweight-charts.standalone.production.js"></script> <script src="https://unpkg.com/lightweight-charts@4.2.0/dist/lightweight-charts.standalone.production.js"></script>
<script src="/assets/chart_draw.js?v=20260609-market-day-split"></script> <script src="/assets/chart_draw.js?v=20260609-market-day-split"></script>
<script src="/assets/chart.js?v=20260614-market-live"></script> <script src="/assets/chart.js?v=20260626-market-tail-patch"></script>
<script src="/assets/plan.js?v=20260614-plan-refresh"></script> <script src="/assets/plan.js?v=20260614-plan-refresh"></script>
<script src="/assets/calculator.js?v=3"></script> <script src="/assets/calculator.js?v=3"></script>
<script src="/assets/archive.js?v=20260612-archive-ai-chat"></script> <script src="/assets/archive.js?v=20260612-archive-ai-chat"></script>