377 lines
18 KiB
HTML
377 lines
18 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>查历年录取分数和位次 - 河南高考志愿助手</title>
|
||
<meta name="description" content="按学校查专业,或按专业查学校,查看分专业录取数据">
|
||
<style>
|
||
*{margin:0;padding:0;box-sizing:border-box}
|
||
body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;background:#0a0a0f;color:#e0e0e0;min-height:100vh;line-height:1.7}
|
||
.header{background:rgba(20,20,30,0.95);backdrop-filter:blur(20px);border-bottom:1px solid rgba(255,255,255,0.08);padding:14px 0;position:sticky;top:0;z-index:100}
|
||
.header-inner{max-width:1200px;margin:0 auto;padding:0 20px;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px}
|
||
.logo{font-size:1.3rem;font-weight:700;color:#fff;text-decoration:none}
|
||
.logo span{color:#667eea}
|
||
.nav-links{display:flex;gap:20px;list-style:none;flex-wrap:wrap}
|
||
.nav-links a{color:#a0a0a0;text-decoration:none;font-size:0.9rem;transition:color 0.3s}
|
||
.nav-links a:hover{color:#667eea}.nav-links a.highlight{color:#667eea;font-weight:600}
|
||
.page-hero{background:linear-gradient(135deg,#0f0f1a,#12102a);padding:40px 0 36px;border-bottom:1px solid rgba(102,126,234,0.15)}
|
||
.container{max-width:1200px;margin:0 auto;padding:0 20px}
|
||
.page-hero h1{font-size:1.7rem;color:#fff;margin-bottom:6px}
|
||
.page-hero p{color:#888;font-size:0.9rem}
|
||
|
||
/* 搜索模式切换 */
|
||
.mode-tabs{display:flex;gap:6px;margin:28px 0 16px;flex-wrap:wrap}
|
||
.mode-tab{padding:8px 20px;border-radius:8px;font-size:0.88rem;font-weight:600;cursor:pointer;border:none;background:rgba(255,255,255,0.06);color:#888;transition:all 0.2s}
|
||
.mode-tab.active{background:rgba(102,126,234,0.2);color:#a5b4fc;border:1px solid rgba(102,126,234,0.4)}
|
||
.mode-tab:hover:not(.active){background:rgba(255,255,255,0.1);color:#ccc}
|
||
|
||
/* 搜索框 */
|
||
.search-bar{display:flex;gap:10px;margin-bottom:16px;flex-wrap:wrap;align-items:center}
|
||
.search-bar input{flex:1;min-width:200px;padding:11px 16px;background:rgba(255,255,255,0.06);border:1px solid rgba(255,255,255,0.12);border-radius:10px;color:#e0e0e0;font-size:0.95rem;outline:none}
|
||
.search-bar input:focus{border-color:#667eea}
|
||
.search-bar input::placeholder{color:#666}
|
||
.search-bar select{padding:11px 14px;background:rgba(255,255,255,0.1);border:1px solid rgba(255,255,255,0.18);border-radius:10px;color:#e0e0e0;font-size:0.88rem;outline:none;appearance:auto;-webkit-appearance:auto}
|
||
.search-bar button{padding:11px 24px;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;border:none;border-radius:10px;font-size:0.9rem;font-weight:600;cursor:pointer;transition:opacity 0.2s}
|
||
.search-bar button:hover{opacity:0.88}
|
||
.search-hint{font-size:0.8rem;color:#555;margin-bottom:16px}
|
||
.search-hint span{color:#667eea}
|
||
|
||
/* 结果表格 */
|
||
.results-table{width:100%;border-collapse:collapse;margin-top:8px}
|
||
.results-table th{text-align:left;padding:9px 12px;background:rgba(102,126,234,0.1);color:#667eea;font-size:0.78rem;font-weight:600;border-bottom:1px solid rgba(255,255,255,0.06);white-space:nowrap}
|
||
.results-table td{padding:9px 12px;border-bottom:1px solid rgba(255,255,255,0.04);font-size:0.85rem;color:#aaa;white-space:nowrap}
|
||
.results-table tr:hover td{background:rgba(255,255,255,0.02)}
|
||
.results-table .school-cell{color:#e0e0e0;font-weight:600;max-width:160px;overflow:hidden;text-overflow:ellipsis}
|
||
.results-table .major-cell{color:#ccc;max-width:180px;overflow:hidden;text-overflow:ellipsis}
|
||
.results-table .score-cell{color:#4ade80;font-weight:700;font-size:0.95rem}
|
||
.results-table .rank-cell{color:#fbbf24}
|
||
.results-table .tag{margin-right:4px}
|
||
.results-table .tag-985{color:#f97316;font-size:0.72rem;font-weight:600}
|
||
.results-table .tag-211{color:#38bdf8;font-size:0.72rem;font-weight:600}
|
||
.results-table .group-tag{color:#a78bfa;font-size:0.75rem;background:rgba(167,139,250,0.1);padding:1px 6px;border-radius:4px;margin-left:4px}
|
||
.results-table .batch-tag{color:#888;font-size:0.72rem;background:rgba(255,255,255,0.05);padding:1px 6px;border-radius:4px}
|
||
.results-table .req-cell{color:#666;font-size:0.75rem;max-width:140px;overflow:hidden;text-overflow:ellipsis}
|
||
|
||
/* 统计栏 */
|
||
.stats-bar{display:flex;gap:20px;margin:16px 0;flex-wrap:wrap}
|
||
.stat-item{background:rgba(255,255,255,0.04);border:1px solid rgba(255,255,255,0.07);border-radius:10px;padding:12px 18px;min-width:120px}
|
||
.stat-item .stat-label{color:#666;font-size:0.75rem;margin-bottom:4px}
|
||
.stat-item .stat-value{color:#667eea;font-size:1.1rem;font-weight:700}
|
||
|
||
/* 分页 */
|
||
.pagination{margin-top:28px;display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap}
|
||
.pagination button{display:inline-flex;align-items:center;gap:5px;padding:8px 16px;border-radius:8px;font-size:0.85rem;font-weight:600;cursor:pointer;border:none;transition:all 0.2s;background:rgba(255,255,255,0.06);color:#aaa}
|
||
.pagination button:hover:not(:disabled){background:rgba(102,126,234,0.15);color:#667eea}
|
||
.pagination button:disabled{opacity:0.35;cursor:not-allowed}
|
||
.pagination .page-info{color:#555;font-size:0.82rem}
|
||
.pagination .page-info span{color:#667eea;font-weight:600}
|
||
|
||
/* 状态 */
|
||
.loading{text-align:center;padding:50px 0;color:#666;font-size:0.9rem}
|
||
.no-data{text-align:center;padding:50px 0;color:#666;font-size:0.9rem}
|
||
.tips{background:rgba(102,126,234,0.06);border:1px solid rgba(102,126,234,0.15);border-radius:10px;padding:14px 18px;margin:16px 0;color:#888;font-size:0.83rem}
|
||
.tips::before{content:"💡 ";color:#667eea}
|
||
|
||
/* 移动端 */
|
||
@media(max-width:700px){
|
||
.page-hero h1{font-size:1.3rem}
|
||
.results-table{font-size:0.78rem}
|
||
.results-table th,.results-table td{padding:7px 8px}
|
||
}
|
||
/* 页脚 */
|
||
.footer{background:rgba(255,255,255,0.03);border-top:1px solid rgba(255,255,255,0.06);padding:30px 0;margin-top:40px;text-align:center}
|
||
.footer-inner{max-width:1200px;margin:0 auto;padding:0 20px}
|
||
.footer-logo{font-size:1rem;font-weight:700;color:#fff;margin-bottom:6px}
|
||
.footer-logo span{color:#667eea}
|
||
.footer-desc{color:#555;font-size:0.8rem;margin-bottom:14px}
|
||
.footer-contact-title{color:#888;font-size:0.82rem;margin-bottom:10px}
|
||
.footer-qr{width:80px;height:80px;background:rgba(255,255,255,0.05);border:1px dashed rgba(255,255,255,0.15);border-radius:8px;display:inline-flex;align-items:center;justify-content:center;color:#555;font-size:0.7rem;text-align:center;padding:6px;margin-bottom:14px}
|
||
.footer-bottom{color:#444;font-size:0.78rem;border-top:1px solid rgba(255,255,255,0.05);padding-top:16px;margin-top:14px}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<header class="header">
|
||
<div class="header-inner">
|
||
<a href="/" class="logo">高考志愿<span>助手</span></a>
|
||
<ul class="nav-links">
|
||
<li><a href="/ai-chat" target="_blank" class="highlight">🤖 AI助手</a></li>
|
||
<li><a href="/plan.html">志愿草表</a></li>
|
||
<li><a href="/school.html">查校对比</a></li>
|
||
<li><a href="/#prob">录取概率估算</a></li>
|
||
<li><a href="/major.html" style="color:#667eea;font-weight:600">查历年录取分数和位次</a></li>
|
||
<li><a href="/#tools">官方查询渠道</a></li>
|
||
<li><a href="/#provinces">各省教育考试院入口</a></li>
|
||
<li><a href="/#resources">扩展工具 & 数据查询</a></li>
|
||
<li><a href="/qa.html">常见问题</a></li>
|
||
</ul>
|
||
</div>
|
||
</header>
|
||
|
||
<div class="page-hero"><div class="container">
|
||
<h1>📊 查历年录取分数和位次</h1>
|
||
<p>按学校查专业,或按专业查学校,查看各专业 2022-2025 历年录取分数和位次</p>
|
||
</div></div>
|
||
|
||
<div class="container">
|
||
<!-- 搜索模式切换 -->
|
||
<div class="mode-tabs">
|
||
<button class="mode-tab active" onclick="setMode('school')" id="tabSchool">🏫 按学校查专业</button>
|
||
<button class="mode-tab" onclick="setMode('major')" id="tabMajor">📚 按专业查学校</button>
|
||
</div>
|
||
|
||
<!-- 搜索框 -->
|
||
<div class="search-bar">
|
||
<select id="subjectSel">
|
||
<option value="">全部科类</option>
|
||
<option value="物理类">物理类</option>
|
||
<option value="历史类">历史类</option>
|
||
</select>
|
||
<select id="yearSel">
|
||
<option value="2025">2025年</option>
|
||
<option value="2024">2024年</option>
|
||
<option value="2023">2023年</option>
|
||
<option value="2022">2022年</option>
|
||
</select>
|
||
<input type="text" id="keywordInput" placeholder="输入学校名称,如:郑州大学" onkeydown="if(event.key==='Enter')searchMajor()">
|
||
<button onclick="searchMajor()">搜索</button>
|
||
</div>
|
||
<div class="search-hint" id="searchHint">
|
||
输入 <span>学校名称</span> → 查看该校在河南招收的所有专业及录取分
|
||
</div>
|
||
|
||
<!-- 统计栏 -->
|
||
<div class="stats-bar" id="statsBar" style="display:none">
|
||
<div class="stat-item">
|
||
<div class="stat-label">查询结果</div>
|
||
<div class="stat-value" id="statCount">-</div>
|
||
</div>
|
||
<div class="stat-item">
|
||
<div class="stat-label">最高分</div>
|
||
<div class="stat-value" id="statMax">-</div>
|
||
</div>
|
||
<div class="stat-item">
|
||
<div class="stat-label">最低分</div>
|
||
<div class="stat-value" id="statMin">-</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 加载中 -->
|
||
<div class="loading" id="loadingArea" style="display:none">搜索中...</div>
|
||
|
||
<!-- 无数据 -->
|
||
<div class="no-data" id="noData" style="display:none">未找到相关数据,请尝试其他关键词</div>
|
||
|
||
<!-- 结果表格 -->
|
||
<div id="resultsArea" style="display:none;overflow-x:auto">
|
||
<table class="results-table">
|
||
<thead>
|
||
<tr>
|
||
<th>学校</th>
|
||
<th>专业</th>
|
||
<th>专业组</th>
|
||
<th>选科要求</th>
|
||
<th>计划数</th>
|
||
<th>最低分</th>
|
||
<th>最低位次</th>
|
||
<th>批次</th>
|
||
<th>科类</th>
|
||
<th>年份</th>
|
||
<th>属性</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody id="resultsBody"></tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<!-- 分页 -->
|
||
<div class="pagination" id="pagination" style="display:none">
|
||
<button id="prevBtn" onclick="changePage(-1)">← 上一页</button>
|
||
<span class="page-info" id="pageInfo">第 <span>1</span> / <span>1</span> 页</span>
|
||
<button id="nextBtn" onclick="changePage(1)">下一页 →</button>
|
||
</div>
|
||
|
||
<div class="tips">
|
||
数据来源河南省教育考试院历年招生计划。专业组代码(如(101)(102))代表不同分专业组投档线,请结合招生章程和选科要求综合判断。
|
||
</div>
|
||
</div>
|
||
|
||
<footer class="footer">
|
||
<div class="footer-inner">
|
||
<div class="footer-logo">高考志愿<span>助手</span></div>
|
||
<div class="footer-desc">AI辅助志愿填报 · 河南高考 · 数据仅供参考</div>
|
||
<div class="footer-contact-title">问题反馈 / 商务合作</div>
|
||
<div class="footer-qr">微信二维码<br>待放置</div>
|
||
<div class="footer-bottom">
|
||
© 2026 河南高考志愿助手 · AI推荐仅供参考,请以河南省教育考试院官方信息为准
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
|
||
<script>
|
||
var searchMode = 'school'; // 'school' | 'major'
|
||
var currentPage = 1;
|
||
var pageSize = 30;
|
||
var totalItems = 0;
|
||
var currentData = [];
|
||
|
||
function setMode(mode) {
|
||
searchMode = mode;
|
||
document.getElementById('tabSchool').classList.toggle('active', mode === 'school');
|
||
document.getElementById('tabMajor').classList.toggle('active', mode === 'major');
|
||
var input = document.getElementById('keywordInput');
|
||
var hint = document.getElementById('searchHint');
|
||
if (mode === 'school') {
|
||
input.placeholder = '输入学校名称,如:郑州大学';
|
||
hint.innerHTML = '输入 <span>学校名称</span> → 查看该校在河南招收的所有专业及录取分';
|
||
} else {
|
||
input.placeholder = '输入专业名称,如:计算机科学与技术';
|
||
hint.innerHTML = '输入 <span>专业名称</span> → 查看哪些学校在河南招收该专业及录取分';
|
||
}
|
||
currentPage = 1;
|
||
}
|
||
|
||
function getParams() {
|
||
var kw = document.getElementById('keywordInput').value.trim();
|
||
var subject = document.getElementById('subjectSel').value;
|
||
var year = document.getElementById('yearSel').value;
|
||
var params = { limit: 200 };
|
||
if (kw) {
|
||
if (searchMode === 'school') params.school = kw;
|
||
else params.major = kw;
|
||
}
|
||
if (subject) params.subject = subject;
|
||
if (year) params.year = year;
|
||
return params;
|
||
}
|
||
|
||
function searchMajor() {
|
||
var kw = document.getElementById('keywordInput').value.trim();
|
||
if (!kw) {
|
||
alert(searchMode === 'school' ? '请输入学校名称' : '请输入专业名称');
|
||
return;
|
||
}
|
||
currentPage = 1;
|
||
doSearch(kw);
|
||
}
|
||
|
||
function doSearch(kw) {
|
||
var params = getParams();
|
||
var query = Object.keys(params).map(function(k){ return k + '=' + encodeURIComponent(params[k]); }).join('&');
|
||
showLoading(true);
|
||
fetch('/api/major/search?' + query)
|
||
.then(function(r){ return r.json(); })
|
||
.then(function(data){
|
||
showLoading(false);
|
||
currentData = data.majors || [];
|
||
totalItems = currentData.length;
|
||
renderStats();
|
||
renderResults();
|
||
})
|
||
.catch(function(){
|
||
showLoading(false);
|
||
document.getElementById('noData').style.display = 'block';
|
||
document.getElementById('resultsArea').style.display = 'none';
|
||
});
|
||
}
|
||
|
||
function showLoading(show) {
|
||
document.getElementById('loadingArea').style.display = show ? 'block' : 'none';
|
||
document.getElementById('noData').style.display = 'none';
|
||
document.getElementById('resultsArea').style.display = 'none';
|
||
document.getElementById('statsBar').style.display = 'none';
|
||
document.getElementById('pagination').style.display = 'none';
|
||
}
|
||
|
||
function renderStats() {
|
||
document.getElementById('statsBar').style.display = 'flex';
|
||
document.getElementById('statCount').textContent = totalItems;
|
||
if (currentData.length > 0) {
|
||
var scores = currentData.filter(function(d){ return d.score > 0; }).map(function(d){ return d.score; });
|
||
if (scores.length > 0) {
|
||
document.getElementById('statMax').textContent = Math.max.apply(null, scores);
|
||
document.getElementById('statMin').textContent = Math.min.apply(null, scores);
|
||
}
|
||
}
|
||
}
|
||
|
||
function renderResults() {
|
||
if (currentData.length === 0) {
|
||
document.getElementById('noData').style.display = 'block';
|
||
document.getElementById('resultsArea').style.display = 'none';
|
||
document.getElementById('pagination').style.display = 'none';
|
||
return;
|
||
}
|
||
document.getElementById('noData').style.display = 'none';
|
||
document.getElementById('resultsArea').style.display = 'block';
|
||
|
||
var start = (currentPage - 1) * pageSize;
|
||
var page = currentData.slice(start, start + pageSize);
|
||
|
||
var tbody = document.getElementById('resultsBody');
|
||
tbody.innerHTML = page.map(function(d){
|
||
var tags = '';
|
||
if (d.is_985) tags += '<span class="tag-985">985</span>';
|
||
if (d.is_211) tags += '<span class="tag-211">211</span>';
|
||
if (!tags) tags = '-';
|
||
return '<tr>' +
|
||
'<td class="school-cell" title="'+escHtml(d.school)+'">'+escHtml(d.school)+'</td>' +
|
||
'<td class="major-cell" title="'+escHtml(d.major)+'">'+escHtml(d.major)+(d.major_code ? ' <span style="color:#555;font-size:0.72rem">'+escHtml(d.major_code)+'</span>' : '')+'</td>' +
|
||
'<td>'+(d.group ? '<span class="group-tag">'+escHtml(d.group)+'</span>' : '-')+'</td>' +
|
||
'<td class="req-cell" title="'+escHtml(d.req)+'">'+escHtml(d.req||'-')+'</td>' +
|
||
'<td>'+(d.plan > 0 ? d.plan : '-')+'</td>' +
|
||
'<td class="score-cell">'+d.score+'</td>' +
|
||
'<td class="rank-cell">'+(d.rank > 0 ? d.rank : '-')+'</td>' +
|
||
'<td><span class="batch-tag">'+escHtml(d.batch||'')+'</span></td>' +
|
||
'<td>'+escHtml(d.subject||'')+'</td>' +
|
||
'<td>'+(d.year||'')+'</td>' +
|
||
'<td>'+tags+'</td>' +
|
||
'</tr>';
|
||
}).join('');
|
||
|
||
var totalPages = Math.max(1, Math.ceil(totalItems / pageSize));
|
||
document.getElementById('pageInfo').innerHTML = '第 <span>'+currentPage+'</span> / <span>'+totalPages+'</span> 页';
|
||
document.getElementById('prevBtn').disabled = currentPage <= 1;
|
||
document.getElementById('nextBtn').disabled = currentPage >= totalPages;
|
||
document.getElementById('pagination').style.display = totalItems > pageSize ? 'flex' : 'none';
|
||
}
|
||
|
||
function changePage(delta) {
|
||
var totalPages = Math.max(1, Math.ceil(totalItems / pageSize));
|
||
var next = currentPage + delta;
|
||
if (next < 1 || next > totalPages) return;
|
||
currentPage = next;
|
||
renderResults();
|
||
window.scrollTo({top: 0, behavior: 'smooth'});
|
||
}
|
||
|
||
function escHtml(s) {
|
||
if (!s) return '';
|
||
return String(s).replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"');
|
||
}
|
||
|
||
// 历史记录
|
||
var historyKey = 'gaokao_major_history';
|
||
function saveHistory(kw) {
|
||
if (!kw) return;
|
||
var h = JSON.parse(localStorage.getItem(historyKey) || '[]');
|
||
h = h.filter(function(v){ return v !== kw; });
|
||
h.unshift(kw);
|
||
h = h.slice(0, 10);
|
||
localStorage.setItem(historyKey, JSON.stringify(h));
|
||
}
|
||
|
||
function loadHistory() {
|
||
var h = JSON.parse(localStorage.getItem(historyKey) || '[]');
|
||
if (h.length > 0) {
|
||
var dl = document.createElement('datalist');
|
||
dl.id = 'kwHistory';
|
||
h.forEach(function(v){ dl.innerHTML += '<option value="'+escHtml(v)+'">'; });
|
||
document.getElementById('keywordInput').setAttribute('list', 'kwHistory');
|
||
document.body.appendChild(dl);
|
||
}
|
||
}
|
||
loadHistory();
|
||
</script>
|
||
</body>
|
||
</html> |