热门: 平安银行 贵州茅台 五粮液 宁德时代 中国平安

🔍

搜索个股

输入股票代码(如 000001.SZ)或名称查看完整数据
包括K线、资金流向、财务指标、股东结构

// ===== 前十大股东 ===== async function loadTop10Holders(code) { try { const r = await fetch(`/api/stock/top10-holders/${code}`); const d = await r.json(); const el = document.getElementById('top10HoldersContent'); if (!d.success || !d.data?.length) { el.innerHTML = '
暂无数据
'; return; } const latest = d.data.slice(0, 10); el.innerHTML = `
报告期:${latest[0]?.end_date || '-'}
${latest.map(x => ``).join('')}
股东名称持股比例
${x.holder_name||'-'}${x.hold_ratio?Number(x.hold_ratio).toFixed(2)+'%':'-'}
`; } catch(e) { document.getElementById('top10HoldersContent').innerHTML = '
加载失败
'; } } // ===== 前十大流通股东 ===== async function loadTop10FloatHolders(code) { try { const r = await fetch(`/api/stock/top10-float-holders/${code}`); const d = await r.json(); const el = document.getElementById('top10FloatHoldersContent'); if (!d.success || !d.data?.length) { el.innerHTML = '
暂无数据
'; return; } const latest = d.data.slice(0, 10); el.innerHTML = `
报告期:${latest[0]?.end_date || '-'}
${latest.map(x => ``).join('')}
股东名称持股比例
${x.holder_name||'-'}${x.hold_ratio?Number(x.hold_ratio).toFixed(2)+'%':'-'}
`; } catch(e) { document.getElementById('top10FloatHoldersContent').innerHTML = '
加载失败
'; } } // ===== 股权质押 ===== async function loadPledge(code) { try { const [r1, r2] = await Promise.all([ fetch(`/api/stock/pledge-stat/${code}`).then(r=>r.json()), fetch(`/api/stock/pledge-detail/${code}`).then(r=>r.json()) ]); const statEl = document.getElementById('pledgeStatContent'); const detailEl = document.getElementById('pledgeDetailContent'); if (r1.success && r1.data?.length) { const s = r1.data[0]; statEl.innerHTML = `
${[['质押次数',s.pledge_count],['质押比例',(s.pledge_ratio||0)+'%'],['未解押股数',s.unrest_pledge],['已解押股数',s.rest_pledge]].map(([k,v])=>`
${k}
${v||'-'}
`).join('')}
`; } else { statEl.innerHTML = '
暂无质押数据
'; } if (r2.success && r2.data?.length) { detailEl.innerHTML = `
质押明细(最近${Math.min(5,r2.data.length)}条)
${r2.data.slice(0,5).map(x=>``).join('')}
股东质押比例开始日期
${x.holder_name||'-'}${x.pledge_ratio||'-'}%${x.start_date||'-'}
`; } } catch(e) {} } // ===== 限售股解禁 ===== async function loadShareFloat(code) { try { const r = await fetch(`/api/stock/share-float/${code}`); const d = await r.json(); const el = document.getElementById('shareFloatContent'); if (!d.success || !d.data?.length) { el.innerHTML = '
暂无解禁数据
'; return; } const fmt = n => n ? (Number(n)/1e8).toFixed(2)+'亿' : '-'; el.innerHTML = ` ${d.data.slice(0,8).map(x=>``).join('')}
解禁日期股份类型解禁量
${x.ann_date||'-'}${x.float_type||'-'}${fmt(x.float_share)}
`; } catch(e) {} } // ===== 股东增减持 ===== async function loadHolderTrade(code) { try { const r = await fetch(`/api/stock/holder-trade/${code}`); const d = await r.json(); const el = document.getElementById('holderTradeContent'); if (!d.success || !d.data?.length) { el.innerHTML = '
近期无增减持记录
'; return; } el.innerHTML = ` ${d.data.slice(0,8).map(x=>{ const dir = x.in_de==='IN'?'增持':'减持'; const color = x.in_de==='IN'?'#22c55e':'#ef4444'; const vol = x.change_vol ? (Number(x.change_vol)/10000).toFixed(2) : '-'; return ``; }).join('')}
股东方向变动量(万股)
${x.holder_name||'-'}${dir}${vol}
`; } catch(e) {} } // ===== 股票回购 ===== async function loadRepurchase(code) { try { const r = await fetch(`/api/stock/repurchase/${code}`); const d = await r.json(); const el = document.getElementById('repurchaseContent'); if (!d.success || !d.data?.length) { el.innerHTML = '
暂无回购记录
'; return; } const fmt = n => n ? (Number(n)/1e8).toFixed(2)+'亿' : '-'; el.innerHTML = ` ${d.data.slice(0,6).map(x=>``).join('')}
公告日进度金额
${x.ann_date||'-'}${x.proc||'-'}${fmt(x.amount)}
`; } catch(e) {} } // ===== 主营业务 ===== async function loadMainBiz(code) { try { const r = await fetch(`/api/stock/main-biz/${code}`); const d = await r.json(); const el = document.getElementById('mainBizContent'); if (!d.success || !d.data?.length) { el.innerHTML = '
暂无主营业务数据
'; return; } const latest_date = d.data[0]?.end_date; const rows = d.data.filter(x=>x.end_date===latest_date).slice(0,8); const total = rows.reduce((s,x)=>s+Number(x.bz_sales||0),0); el.innerHTML = `
报告期:${latest_date}
${rows.map(x=>{ const sales = Number(x.bz_sales||0); const pct = total>0?(sales/total*100).toFixed(1)+'%':'-'; const salesFmt = sales>1e8?(sales/1e8).toFixed(2)+'亿':(sales/1e4).toFixed(0)+'万'; return ``; }).join('')}
业务板块营收占比
${x.bz_item||'-'}${salesFmt}${pct}
`; } catch(e) {} } // ===== 财务审计 ===== async function loadFinaAudit(code) { try { const r = await fetch(`/api/stock/fina-audit/${code}`); const d = await r.json(); const el = document.getElementById('finaAuditContent'); if (!d.success || !d.data?.length) { el.innerHTML = '
暂无审计数据
'; return; } el.innerHTML = d.data.slice(0,4).map(x=>{ const pass = x.audit_result?.includes('标准') || x.audit_result?.includes('无保留'); return `
${x.end_date}
${x.audit_result||'-'}
${x.audit_agency||''}
`; }).join(''); } catch(e) {} } // ===== 管理层 ===== async function loadManagers(code) { try { const r = await fetch(`/api/stock/managers/${code}`); const d = await r.json(); const el = document.getElementById('managersContent'); if (!d.success || !d.data?.length) { el.innerHTML = '
暂无管理层数据
'; return; } // 取最新任职的,去重 const seen = new Set(); const rows = []; for(const x of d.data) { if(!seen.has(x.name) && !x.end_date) { seen.add(x.name); rows.push(x); } } el.innerHTML = ` ${rows.slice(0,8).map(x=>``).join('')}
姓名职务学历
${x.name||'-'}${x.title||'-'}${x.edu||'-'}
`; } catch(e) {} } // ===== 管理层薪酬 ===== async function loadRewards(code) { try { const r = await fetch(`/api/stock/rewards/${code}`); const d = await r.json(); const el = document.getElementById('rewardsContent'); if (!d.success || !d.data?.length) { el.innerHTML = '
暂无薪酬数据
'; return; } const latest = d.data[0]?.end_date; const rows = d.data.filter(x=>x.end_date===latest).slice(0,8); el.innerHTML = `
报告期:${latest}
${rows.map(x=>{ const reward = x.reward ? (Number(x.reward)/1e4).toFixed(1) : '-'; return ``; }).join('')}
姓名职务薪酬(万)
${x.name||'-'}${x.title||'-'}${reward}
`; } catch(e) {} } // ===== 股票曾用名 ===== async function loadNameChange(code) { try { const r = await fetch(`/api/stock/namechange/${code}`); const d = await r.json(); const el = document.getElementById('nameChangeContent'); if (!d.success || !d.data?.length) { el.innerHTML = '
无曾用名记录
'; return; } el.innerHTML = `
${d.data.map(x=>`${x.name} ${x.start_date||''}`).join('')}
`; } catch(e) {} }