gaokao-site/major.html

377 lines
18 KiB
HTML
Raw Permalink 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.

<!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>