38239-vm/market.php
Flatlogic Bot 48c3bc0ba6 BIT
2026-02-07 06:32:54 +00:00

192 lines
9.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
include 'header.php';
?>
<div class="container py-5">
<!-- Market Trends Cards -->
<div class="row mb-5 g-4">
<div class="col-md-4">
<div class="glass-card p-4 h-100" style="background: linear-gradient(135deg, rgba(14, 203, 129, 0.1) 0%, rgba(24, 26, 32, 1) 100%);">
<div class="d-flex justify-content-between align-items-center mb-3">
<h6 class="text-secondary mb-0">今日涨幅榜</h6>
<i class="bi bi-graph-up-arrow text-success"></i>
</div>
<div id="top-gainers">
<div class="text-center py-3 text-secondary small">加载中...</div>
</div>
</div>
</div>
<div class="col-md-4">
<div class="glass-card p-4 h-100">
<div class="d-flex justify-content-between align-items-center mb-3">
<h6 class="text-secondary mb-0">新币上架</h6>
<i class="bi bi-fire text-warning"></i>
</div>
<div id="new-listings">
<div class="text-center py-3 text-secondary small">加载中...</div>
</div>
</div>
</div>
<div class="col-md-4">
<div class="glass-card p-4 h-100">
<div class="d-flex justify-content-between align-items-center mb-3">
<h6 class="text-secondary mb-0">成交热度榜</h6>
<i class="bi bi-lightning-fill text-info"></i>
</div>
<div id="top-volume">
<div class="text-center py-3 text-secondary small">加载中...</div>
</div>
</div>
</div>
</div>
<div class="d-flex justify-content-between align-items-end mb-4">
<div>
<h2 class="text-white fw-bold">行情中心</h2>
<p class="text-secondary mb-0">实时监测全球主流数字货币市场价格波动</p>
</div>
<div class="input-group" style="width: 320px;">
<span class="input-group-text bg-dark border-secondary text-secondary"><i class="bi bi-search"></i></span>
<input type="text" id="market-search" class="form-control bg-dark text-white border-secondary" placeholder="搜索币种名称 / 简称" onkeyup="filterMarket()">
</div>
</div>
<div class="glass-card shadow-lg border-secondary-subtle">
<div class="table-responsive">
<table class="table table-dark table-hover align-middle mb-0">
<thead>
<tr class="text-secondary border-bottom border-secondary" style="background: #1e2329;">
<th class="ps-4 py-3">币种名称</th>
<th>最新价格</th>
<th>24h 涨跌</th>
<th>24h 最高/最低</th>
<th>24h 成交额(USDT)</th>
<th class="text-end pe-4">操作</th>
</tr>
</thead>
<tbody id="full-market-tbody">
<tr><td colspan="6" class="text-center py-5"><div class="spinner-border text-warning"></div></td></tr>
</tbody>
</table>
</div>
</div>
<!-- Crypto News Section (Rich Content Enhancement) -->
<div class="mt-5">
<h4 class="text-white mb-4"><i class="bi bi-newspaper text-warning me-2"></i> 行业资讯</h4>
<div class="row g-4">
<div class="col-md-6">
<div class="glass-card p-4 h-100 d-flex gap-3 align-items-center">
<img src="https://public.bnbstatic.com/image/cms/article/body/202303/34e0e5e0-9e9b-4377-98e6-7b244c767e6c.png" style="width: 120px; border-radius: 8px;" class="d-none d-sm-block">
<div>
<span class="badge bg-primary mb-2">快讯</span>
<h6 class="text-white mb-2">以太坊坎昆升级顺利完成Layer 2 费用大幅下降</h6>
<p class="text-secondary smaller mb-0">此次升级引入了 Proto-Danksharding为以太坊扩容迈出关键一步...</p>
</div>
</div>
</div>
<div class="col-md-6">
<div class="glass-card p-4 h-100 d-flex gap-3 align-items-center">
<img src="https://public.bnbstatic.com/image/cms/article/body/202206/a27e7f6d0f8645089f2a2438883907e1.png" style="width: 120px; border-radius: 8px;" class="d-none d-sm-block">
<div>
<span class="badge bg-warning text-dark mb-2">深度</span>
<h6 class="text-white mb-2">比特币减半后市场走势分析:机遇还是挑战?</h6>
<p class="text-secondary smaller mb-0">历史数据显示,减半通常伴随着周期的转折,本次减半有何不同...</p>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
let allMarketData = [];
function formatPrice(p) {
p = parseFloat(p);
if (p < 0.0001) return p.toFixed(8);
if (p < 0.01) return p.toFixed(6);
if (p < 1) return p.toFixed(4);
return p.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
}
async function refreshMarket() {
try {
const res = await fetch('api.php?action=market_data');
const data = await res.json();
allMarketData = data;
renderMarket();
renderTrends();
} catch (e) {
console.error('Market refresh failed', e);
}
}
function renderTrends() {
const gainers = [...allMarketData].sort((a, b) => b.change - a.change).slice(0, 3);
const volumes = [...allMarketData].sort((a, b) => b.volume - a.volume).slice(0, 3);
const news = allMarketData.slice(2, 5);
document.getElementById('top-gainers').innerHTML = gainers.map(c => `
<div class="d-flex justify-content-between mb-2 align-items-center">
<span class="text-white small fw-bold">${c.symbol.replace('USDT','')}</span>
<span class="text-success small fw-bold">+${c.change}%</span>
</div>
`).join('');
document.getElementById('new-listings').innerHTML = news.map(c => `
<div class="d-flex justify-content-between mb-2 align-items-center">
<span class="text-white small fw-bold">${c.symbol.replace('USDT','')}</span>
<span class="text-warning small" style="font-size: 10px;">HOT</span>
</div>
`).join('');
document.getElementById('top-volume').innerHTML = volumes.map(c => `
<div class="d-flex justify-content-between mb-2 align-items-center">
<span class="text-white small fw-bold">${c.symbol.replace('USDT','')}</span>
<span class="text-secondary smaller">${(c.volume/1000000).toFixed(1)}M</span>
</div>
`).join('');
}
function renderMarket() {
const search = document.getElementById('market-search').value.toLowerCase();
let html = '';
allMarketData.forEach(coin => {
if (search && !coin.symbol.toLowerCase().includes(search) && !coin.name.toLowerCase().includes(search)) return;
const changeClass = coin.change >= 0 ? 'text-success' : 'text-danger';
const pFormatted = formatPrice(coin.price);
html += `
<tr onclick="location.href='trade.php?symbol=${coin.symbol}'" style="cursor:pointer" class="border-bottom border-secondary">
<td class="ps-4 py-3">
<div class="d-flex align-items-center">
<img src="${coin.icon_url}" class="me-3 rounded-circle" width="28" height="28" onerror="this.src='https://cryptologos.cc/logos/generic-coin-logo.png'">
<div>
<span class="fw-bold text-white d-block">${coin.symbol.replace('USDT', '')}</span>
<span class="text-secondary smaller" style="font-size: 10px;">${coin.name}</span>
</div>
</div>
</td>
<td class="fw-bold fs-6">$ ${pFormatted}</td>
<td class="${changeClass} fw-bold">${coin.change >= 0 ? '+' : ''}${coin.change}%</td>
<td>
<div class="text-success" style="font-size: 11px;">H: ${formatPrice(coin.high || coin.price * 1.01)}</div>
<div class="text-danger" style="font-size: 11px;">L: ${formatPrice(coin.low || coin.price * 0.99)}</div>
</td>
<td class="text-secondary smaller">${parseFloat(coin.volume || 0).toLocaleString()}</td>
<td class="text-end pe-4">
<a href="trade.php?symbol=${coin.symbol}" class="btn btn-sm btn-outline-warning fw-bold px-3 py-1" style="font-size: 12px;">交易</a>
</td>
</tr>
`;
});
document.getElementById('full-market-tbody').innerHTML = html;
}
function filterMarket() { renderMarket(); }
refreshMarket();
setInterval(refreshMarket, 3000);
</script>
<?php include 'footer.php'; ?>