修改了bsp state,继续测试
This commit is contained in:
+110
-52
@@ -2015,6 +2015,40 @@
|
||||
}
|
||||
}
|
||||
|
||||
/** 应用 /api/chart_metadata 返回的周期列表(切换 crypto / A股 时拉取) */
|
||||
function applyChartMetadata(meta) {
|
||||
if (!meta || meta.error || !Array.isArray(meta.timeframe_keys) || meta.timeframe_keys.length === 0) {
|
||||
return;
|
||||
}
|
||||
window.AVAILABLE_TIMEFRAMES = meta.timeframe_keys;
|
||||
window.DEFAULT_MAIN_TIMEFRAME = meta.default_main;
|
||||
window.DEFAULT_ELEMENT_TIMEFRAME = meta.default_element;
|
||||
window.DEFAULT_SUB_SUB_TIMEFRAME = meta.default_sub_sub;
|
||||
const labels = meta.timeframes || {};
|
||||
function refill(selId, preferredVal) {
|
||||
const $el = $(selId);
|
||||
const cur = $el.val();
|
||||
$el.empty();
|
||||
meta.timeframe_keys.forEach(function(k) {
|
||||
$el.append($('<option>', { value: k, text: labels[k] || k }));
|
||||
});
|
||||
const pick = (cur && meta.timeframe_keys.indexOf(cur) >= 0) ? cur : preferredVal;
|
||||
if (pick && meta.timeframe_keys.indexOf(pick) >= 0) {
|
||||
$el.val(pick);
|
||||
} else {
|
||||
$el.val(meta.timeframe_keys[0]);
|
||||
}
|
||||
}
|
||||
refill('#timeframe', meta.default_main);
|
||||
refill('#elementTimeframe', meta.default_element);
|
||||
refill('#subSubTimeframe', meta.default_sub_sub);
|
||||
const mainTf = $('#timeframe').val();
|
||||
if (compareTimeframes($('#elementTimeframe').val(), mainTf) > 0) {
|
||||
setSmallestLargerTimeframe(mainTf);
|
||||
}
|
||||
ensureSubSubLteElement();
|
||||
}
|
||||
|
||||
// 比较两个时间周期的大小
|
||||
function compareTimeframes(tf1, tf2) {
|
||||
const v1 = window.timeframeToMs(tf1);
|
||||
@@ -8069,43 +8103,64 @@
|
||||
console.log('从本地存储恢复时区设置:', savedTimezone);
|
||||
}
|
||||
|
||||
// 初始化数据源切换
|
||||
// 初始化数据源切换:先按数据源重新拉取周期元信息,再切换 UI
|
||||
$('#dataSource').on('change', function() {
|
||||
const dataSource = $(this).val();
|
||||
if (dataSource === 'crypto') {
|
||||
$('#cryptoSymbolContainer').show();
|
||||
$('#astockSymbolContainer').hide();
|
||||
// 停止A股状态更新器
|
||||
if (window.astockStatusInterval) {
|
||||
clearInterval(window.astockStatusInterval);
|
||||
window.astockStatusInterval = null;
|
||||
}
|
||||
} else if (dataSource === 'a_stock') {
|
||||
$('#cryptoSymbolContainer').hide();
|
||||
$('#astockSymbolContainer').show();
|
||||
// 加载A股数据时,如果还没有加载股票列表,可以在这里触发加载
|
||||
loadAStockSymbols();
|
||||
// 启动A股交易时间状态更新器
|
||||
startAStockStatusUpdater();
|
||||
}
|
||||
const apiSrc = dataSource === 'a_stock' ? 'a_stock' : 'crypto';
|
||||
$.getJSON('/api/chart_metadata', { source: apiSrc })
|
||||
.done(function(meta) {
|
||||
applyChartMetadata(meta);
|
||||
})
|
||||
.always(function() {
|
||||
if (dataSource === 'crypto') {
|
||||
$('#cryptoSymbolContainer').show();
|
||||
$('#astockSymbolContainer').hide();
|
||||
if (window.astockStatusInterval) {
|
||||
clearInterval(window.astockStatusInterval);
|
||||
window.astockStatusInterval = null;
|
||||
}
|
||||
loadSymbols();
|
||||
} else if (dataSource === 'a_stock') {
|
||||
$('#cryptoSymbolContainer').hide();
|
||||
$('#astockSymbolContainer').show();
|
||||
loadAStockSymbols();
|
||||
startAStockStatusUpdater();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 检查初始数据源设置
|
||||
const initialDataSource = $('#dataSource').val();
|
||||
if (initialDataSource === 'a_stock') {
|
||||
startAStockStatusUpdater();
|
||||
$.getJSON('/api/chart_metadata', { source: 'a_stock' })
|
||||
.done(function(meta) {
|
||||
applyChartMetadata(meta);
|
||||
})
|
||||
.always(function() {
|
||||
loadAStockSymbols();
|
||||
startAStockStatusUpdater();
|
||||
setTimeout(function() {
|
||||
updateChart();
|
||||
}, 300);
|
||||
});
|
||||
} else {
|
||||
setTimeout(function() {
|
||||
updateChart();
|
||||
}, 500);
|
||||
}
|
||||
|
||||
// 初始化交易对下拉菜单
|
||||
$('#symbol').val('BTC/USDT:USDT');
|
||||
$('#astockSymbol').val('000001');
|
||||
const mainDefault = window.DEFAULT_MAIN_TIMEFRAME || $('#timeframe option:first').val();
|
||||
const elementDefault = window.DEFAULT_ELEMENT_TIMEFRAME || $('#elementTimeframe option:first').val();
|
||||
if (mainDefault) {
|
||||
$('#timeframe').val(mainDefault);
|
||||
}
|
||||
if (elementDefault) {
|
||||
$('#elementTimeframe').val(elementDefault);
|
||||
if (initialDataSource !== 'a_stock') {
|
||||
const mainDefault = window.DEFAULT_MAIN_TIMEFRAME || $('#timeframe option:first').val();
|
||||
const elementDefault = window.DEFAULT_ELEMENT_TIMEFRAME || $('#elementTimeframe option:first').val();
|
||||
if (mainDefault) {
|
||||
$('#timeframe').val(mainDefault);
|
||||
}
|
||||
if (elementDefault) {
|
||||
$('#elementTimeframe').val(elementDefault);
|
||||
}
|
||||
}
|
||||
|
||||
// 测试打印时区偏移量
|
||||
@@ -8127,10 +8182,12 @@
|
||||
// 尝试加载更多交易对
|
||||
loadSymbols();
|
||||
|
||||
// 初始化图表并加载默认数据
|
||||
setTimeout(function() {
|
||||
updateChart();
|
||||
}, 500);
|
||||
// 初始化图表:默认加密货币延迟拉取;若首屏为 A 股则在 chart_metadata 完成后再 updateChart
|
||||
if (initialDataSource !== 'a_stock') {
|
||||
setTimeout(function() {
|
||||
updateChart();
|
||||
}, 500);
|
||||
}
|
||||
|
||||
// 初始化自动刷新功能
|
||||
initAutoRefresh();
|
||||
@@ -8634,31 +8691,32 @@
|
||||
})
|
||||
|
||||
|
||||
// 获取A股股票列表
|
||||
// 获取A股股票列表(全市场,来自 /api/a_stocks)
|
||||
function loadAStockSymbols() {
|
||||
$.get('/api/popular_a_stocks', function(data) {
|
||||
if (Array.isArray(data)) {
|
||||
const $select = $('#astockSymbol');
|
||||
const currentSymbol = $select.val(); // 保存当前选中的值
|
||||
$select.empty();
|
||||
|
||||
data.forEach(function(stock) {
|
||||
$select.append($('<option>', {
|
||||
value: stock.symbol,
|
||||
text: stock.symbol + ' - ' + stock.name
|
||||
}));
|
||||
});
|
||||
|
||||
// 如果有保存的选中值,恢复它
|
||||
if (currentSymbol && data.some(stock => stock.symbol === currentSymbol)) {
|
||||
$select.val(currentSymbol);
|
||||
} else {
|
||||
// 设置默认值为平安银行
|
||||
$select.val('000001');
|
||||
}
|
||||
const $select = $('#astockSymbol');
|
||||
const currentSymbol = $select.val();
|
||||
$select.prop('disabled', true);
|
||||
$.get('/api/a_stocks', function(data) {
|
||||
$select.prop('disabled', false);
|
||||
if (!Array.isArray(data)) {
|
||||
console.error('加载A股股票列表失败: 返回非数组', data);
|
||||
return;
|
||||
}
|
||||
}).fail(function() {
|
||||
console.error('加载A股股票列表失败');
|
||||
$select.empty();
|
||||
data.forEach(function(stock) {
|
||||
$select.append($('<option>', {
|
||||
value: stock.symbol,
|
||||
text: stock.symbol + ' - ' + (stock.name || '')
|
||||
}));
|
||||
});
|
||||
if (currentSymbol && data.some(stock => stock.symbol === currentSymbol)) {
|
||||
$select.val(currentSymbol);
|
||||
} else {
|
||||
$select.val('000001');
|
||||
}
|
||||
}).fail(function(xhr) {
|
||||
$select.prop('disabled', false);
|
||||
console.error('加载A股股票列表失败', xhr && xhr.status);
|
||||
});
|
||||
}
|
||||
// 检测交易对类型并返回相应的配置
|
||||
|
||||
Reference in New Issue
Block a user