// ==================== 动态指标卡片渲染 ====================
function renderDynamicIndicatorCard(symbol, data) {
if (!data || data.error) {
const errDiv = document.createElement('div');
errDiv.className = 'no-data error-margin-bottom';
errDiv.textContent = `⚠️ ${symbol} 指标加载失败: ${data?.error || '未知错误'}`;
return errDiv;
}
// 检查字段定义是否已加载
if (!window.indicatorFields) {
const errDiv = document.createElement('div');
errDiv.className = 'no-data error-margin-bottom';
errDiv.textContent = `⚠️ 指标字段定义未加载,请稍后刷新页面。`;
return errDiv;
}
const { MACRO_ITEMS, CURRENT_ITEMS } = window.indicatorFields;
const container = document.createElement('div');
container.className = 'dynamic-card';
const title = document.createElement('h3');
title.className = 'dynamic-card-title';
title.textContent = `📈 ${symbol} 实时指标 (基于最新K线)`;
container.appendChild(title);
const grid = document.createElement('div');
grid.className = 'dynamic-grid';
function addItem(key, label, unit, isBool) {
let val = data[key];
if (val === undefined || val === null) return;
let display;
if (isBool) {
display = val ? '是' : '否';
} else if (typeof val === 'number') {
display = val.toFixed(2);
if (unit) display += unit;
} else {
display = val;
}
const div = document.createElement('div');
div.innerHTML = `${label}: ${display}`;
grid.appendChild(div);
}
for (let item of MACRO_ITEMS) addItem(item[0], item[1], item[2], false);
for (let item of CURRENT_ITEMS) addItem(item[0], item[1], item[2], item[3] === 'bool');
container.appendChild(grid);
return container;
}
function renderAllDynamicIndicators(dynamicDataMap) {
if (!dynamicDataMap || Object.keys(dynamicDataMap).length === 0) {
const div = document.createElement('div');
div.className = 'no-data';
div.textContent = '【实时指标】暂无数据,请先点击MEXC或Binance按钮获取K线数据。';
return div;
}
const container = document.createElement('div');
let hasValidData = false;
for (let sym of Object.keys(dynamicDataMap)) {
const data = dynamicDataMap[sym];
if (!data || data.error) continue;
const card = renderDynamicIndicatorCard(sym, data);
container.appendChild(card);
hasValidData = true;
}
if (!hasValidData) {
const div = document.createElement('div');
div.className = 'no-data';
div.textContent = '【实时指标】暂无数据,请先点击MEXC或Binance按钮获取K线数据。';
return div;
}
return container;
}