113 lines
5.2 KiB
HTML
113 lines
5.2 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh-CN">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<title>Contributor Leaderboard - zzx-coder/gitlink-cli</title>
|
|
<script src="https://cdn.jsdelivr.net/npm/echarts@5/dist/echarts.min.js"></script>
|
|
<style>
|
|
*{margin:0;padding:0;box-sizing:border-box}
|
|
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;background:#f0f2f5;color:#333;padding:24px}
|
|
h1{text-align:center;margin-bottom:24px;font-size:1.6rem}
|
|
.cards{display:flex;gap:16px;justify-content:center;margin-bottom:24px;flex-wrap:wrap}
|
|
.card{background:#fff;border-radius:12px;padding:20px 28px;text-align:center;box-shadow:0 2px 8px rgba(0,0,0,.06);min-width:160px}
|
|
.card .num{font-size:2rem;font-weight:700;color:#1890ff}
|
|
.card .label{font-size:.85rem;color:#888;margin-top:4px}
|
|
.chart-row{display:flex;gap:16px;margin-bottom:24px;flex-wrap:wrap}
|
|
.chart-box{background:#fff;border-radius:12px;padding:16px;box-shadow:0 2px 8px rgba(0,0,0,.06);flex:1;min-width:320px;height:320px}
|
|
table{width:100%;border-collapse:collapse;background:#fff;border-radius:12px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,.06)}
|
|
th{background:#fafafa;padding:12px 16px;text-align:left;font-size:.85rem;color:#666;border-bottom:1px solid #f0f0f0}
|
|
td{padding:12px 16px;border-bottom:1px solid #f0f0f0}
|
|
tr:last-child td{border-bottom:none}
|
|
.badge{display:inline-block;padding:2px 10px;border-radius:10px;font-size:.8rem;font-weight:600}
|
|
.badge-champion{background:#fff7e6;color:#d48806}
|
|
.badge-core{background:#e6f7ff;color:#1890ff}
|
|
.badge-active{background:#f6ffed;color:#52c41a}
|
|
.badge-contributor{background:#f0f0f0;color:#666}
|
|
.rank-1{font-weight:700;color:#d48806}
|
|
.rank-2{font-weight:600;color:#8c8c8c}
|
|
.rank-3{color:#b87333}
|
|
.ahp{background:#fff;border-radius:12px;padding:16px;margin-top:24px;box-shadow:0 2px 8px rgba(0,0,0,.06);font-size:.85rem;color:#666}
|
|
.ahp h3{font-size:1rem;color:#333;margin-bottom:8px}
|
|
.ahp table{box-shadow:none}
|
|
.ahp th{background:#f9f9f9}
|
|
.footer{text-align:center;margin-top:24px;font-size:.8rem;color:#aaa}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<h1>Contributor Leaderboard</h1>
|
|
<p style="text-align:center;color:#888;margin-bottom:24px">zzx-coder/gitlink-cli · 2026-07-02</p>
|
|
|
|
<div class="cards">
|
|
<div class="card"><div class="num">3</div><div class="label">Contributors</div></div>
|
|
<div class="card"><div class="num">76</div><div class="label">Total Issues</div></div>
|
|
<div class="card"><div class="num">18</div><div class="label">Merged PRs</div></div>
|
|
<div class="card"><div class="num">1600</div><div class="label">Lines Changed</div></div>
|
|
</div>
|
|
|
|
<div class="chart-row">
|
|
<div class="chart-box" id="pieChart"></div>
|
|
<div class="chart-box" id="barChart"></div>
|
|
</div>
|
|
|
|
<table>
|
|
<thead>
|
|
<tr><th>Rank</th><th>Contributor</th><th>Issues</th><th>Merged PRs</th><th>+/- Lines</th><th>Comments</th><th>Score</th><th>Badge</th></tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr><td class="rank-1">1</td><td>@zzx-coder</td><td>44</td><td>8</td><td>+800</td><td>22</td><td>100.0</td><td><span class="badge badge-champion">Champion</span></td></tr>
|
|
<tr><td class="rank-2">2</td><td>@mengcheng</td><td>18</td><td>8</td><td>+600</td><td>18</td><td>80.9</td><td><span class="badge badge-champion">Champion</span></td></tr>
|
|
<tr><td class="rank-3">3</td><td>@nudt_zk</td><td>14</td><td>2</td><td>+200</td><td>4</td><td>36.2</td><td><span class="badge badge-contributor">Contributor</span></td></tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<div class="ahp">
|
|
<h3>AHP Scoring Model</h3>
|
|
<table>
|
|
<thead><tr><th>Dimension</th><th>Weight</th><th>Data Source</th></tr></thead>
|
|
<tbody>
|
|
<tr><td>Issues Created</td><td>15%</td><td>issue +list</td></tr>
|
|
<tr><td>PRs Merged</td><td>25%</td><td>pr +list state=merged</td></tr>
|
|
<tr><td>Code Changes</td><td>30%</td><td>pr +files (sampled)</td></tr>
|
|
<tr><td>Issue Comments</td><td>15%</td><td>PR journals</td></tr>
|
|
<tr><td>Team Member</td><td>15%</td><td>repo +members</td></tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="footer">Auto-generated by gitlink-cli contributor-growth workflow · 2026-07-02</div>
|
|
|
|
<script>
|
|
var pie = echarts.init(document.getElementById('pieChart'));
|
|
pie.setOption({
|
|
title:{text:'Score Distribution',left:'center',textStyle:{fontSize:14}},
|
|
tooltip:{trigger:'item',formatter:'{b}: {c} ({d}%)'},
|
|
series:[{
|
|
type:'pie',radius:['40%','70%'],
|
|
data:[
|
|
{value:100.0,name:'@zzx-coder',itemStyle:{color:'#d48806'}},
|
|
{value:80.9,name:'@mengcheng',itemStyle:{color:'#1890ff'}},
|
|
{value:36.2,name:'@nudt_zk',itemStyle:{color:'#8c8c8c'}}
|
|
],
|
|
label:{formatter:'{b}\n{d}%'}
|
|
}]
|
|
});
|
|
var bar = echarts.init(document.getElementById('barChart'));
|
|
bar.setOption({
|
|
title:{text:'Dimension Comparison',left:'center',textStyle:{fontSize:14}},
|
|
tooltip:{trigger:'axis'},
|
|
legend:{bottom:0,data:['Issues(15%)','PRs(25%)','Code(30%)','Comments(15%)','Member(15%)']},
|
|
xAxis:{type:'category',data:['@zzx-coder','@mengcheng','@nudt_zk']},
|
|
yAxis:{type:'value',max:30},
|
|
series:[
|
|
{name:'Issues(15%)',type:'bar',data:[15,6.1,4.8]},
|
|
{name:'PRs(25%)',type:'bar',data:[25,25,6.3]},
|
|
{name:'Code(30%)',type:'bar',data:[30,22.5,7.5]},
|
|
{name:'Comments(15%)',type:'bar',data:[15,12.3,2.7]},
|
|
{name:'Member(15%)',type:'bar',data:[15,15,15]}
|
|
]
|
|
});
|
|
window.addEventListener('resize',function(){pie.resize();bar.resize()});
|
|
</script>
|
|
</body>
|
|
</html>
|