fix(web): 开关缠论元素保留视窗;分周期 Trend 涨跌配色
本地重绘统一冻结视窗;次/次次周期 Trend 上涨下跌使用独立颜色。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+13
-27
@@ -668,10 +668,6 @@ function mapTimeframeToInterval(timeframe) {
|
||||
function redrawFractalElements() {
|
||||
if (!tvWidget || !tvWidget.mainChart) return;
|
||||
|
||||
const mainChart = tvWidget.mainChart;
|
||||
const logicalRange = mainChart.timeScale().getVisibleLogicalRange();
|
||||
const visibleRange = mainChart.timeScale().getVisibleRange();
|
||||
|
||||
// 确保使用主周期的K线和MACD数据
|
||||
if (currentData.original_kline_data) {
|
||||
currentData.kline_data = currentData.original_kline_data;
|
||||
@@ -679,29 +675,14 @@ function redrawFractalElements() {
|
||||
if (currentData.original_macd) {
|
||||
currentData.macd = currentData.original_macd;
|
||||
}
|
||||
// 清除冗余引用,帮助GC回收
|
||||
delete currentData.original_kline_data;
|
||||
delete currentData.original_macd;
|
||||
|
||||
initTradingView($('#symbol').val(), $('#timeframe').val());
|
||||
|
||||
setTimeout(() => {
|
||||
if (tvWidget && tvWidget.mainChart) {
|
||||
if (logicalRange) {
|
||||
tvWidget.mainChart.timeScale().setVisibleLogicalRange(logicalRange);
|
||||
if (tvWidget.volumeChart) tvWidget.volumeChart.timeScale().setVisibleLogicalRange(logicalRange);
|
||||
if (tvWidget.atrChart) tvWidget.atrChart.timeScale().setVisibleLogicalRange(logicalRange);
|
||||
if (tvWidget.macdChart) tvWidget.macdChart.timeScale().setVisibleLogicalRange(logicalRange);
|
||||
if (tvWidget.chanMacdChart) tvWidget.chanMacdChart.timeScale().setVisibleLogicalRange(logicalRange);
|
||||
} else if (visibleRange) {
|
||||
tvWidget.mainChart.timeScale().setVisibleRange(visibleRange);
|
||||
if (tvWidget.volumeChart) tvWidget.volumeChart.timeScale().setVisibleRange(visibleRange);
|
||||
if (tvWidget.atrChart) tvWidget.atrChart.timeScale().setVisibleRange(visibleRange);
|
||||
if (tvWidget.macdChart) tvWidget.macdChart.timeScale().setVisibleRange(visibleRange);
|
||||
if (tvWidget.chanMacdChart) tvWidget.chanMacdChart.timeScale().setVisibleRange(visibleRange);
|
||||
}
|
||||
}
|
||||
}, 200);
|
||||
if (typeof reinitTradingViewPreservingViewport === 'function') {
|
||||
reinitTradingViewPreservingViewport();
|
||||
} else {
|
||||
initTradingView($('#symbol').val(), $('#timeframe').val());
|
||||
}
|
||||
}
|
||||
// 只更新分形元素(笔、线段、中枢)的表格数据
|
||||
function updateFractalTables() {
|
||||
@@ -818,10 +799,15 @@ function refreshChart(data, options) {
|
||||
}
|
||||
}
|
||||
|
||||
// 保存当前缩放(barSpacing)和滚动位置(scrollPosition)到 window
|
||||
// tvWidget 会在 initTradingView 内被重建,所以必须存到 window 上
|
||||
// 全量重建:优先用请求前冻结的视窗(分析按钮在请求发出时已 capture)
|
||||
if (window._preserveViewOnRefresh) {
|
||||
if (typeof ensurePendingChartViewportBeforeInit === 'function') {
|
||||
ensurePendingChartViewportBeforeInit();
|
||||
if (window._preserveViewOnRefresh) {
|
||||
console.log('📌 全量重建:使用请求前冻结视窗');
|
||||
} else if (window._pendingRestoreView) {
|
||||
console.log('📌 使用已保存图表视图');
|
||||
}
|
||||
} else if (window._preserveViewOnRefresh) {
|
||||
window._pendingRestoreView = window._preserveViewOnRefresh;
|
||||
console.log('📌 全量重建:使用请求前冻结视窗');
|
||||
} else if (!window._pendingRestoreView && tvWidget && tvWidget.mainChart) {
|
||||
|
||||
Reference in New Issue
Block a user