${escapeHtml(exam.exam_name)}
+${escapeHtml(formatScore(total))} +
| 成绩项目 | +得分 | +满分 | +
|---|---|---|
| 暂无成绩项目 | ||
备注:${escapeHtml(result.remark || '无')}
+diff --git a/exam/exam.js b/exam/exam.js new file mode 100644 index 0000000..4949c93 --- /dev/null +++ b/exam/exam.js @@ -0,0 +1,228 @@ +const SUPABASE_URL = 'https://chixssrphfgxvqqigkzo.supabase.co'; +const SUPABASE_ANON_KEY = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImNoaXhzc3JwaGZneHZxcWlna3pvIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzQ2OTE0OTEsImV4cCI6MjA5MDI2NzQ5MX0.Az_Ew2J2zdOMcSV0UNAjBS-LPqGpqhsaN4IyZ5R7iqU'; +const sbClient = supabase.createClient(SUPABASE_URL, SUPABASE_ANON_KEY); + +const examSelect = document.getElementById('examSelect'); +const nameInput = document.getElementById('studentName'); +const admissionInput = document.getElementById('admissionNo'); +const searchButton = document.getElementById('searchBtn'); +const resultsShell = document.getElementById('searchResults'); + +let loadedExams = []; + +function escapeHtml(value) { + return String(value ?? '').replace(/[&<>"']/g, char => ({ + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }[char])); +} + +function normalize(value) { + return String(value ?? '').trim(); +} + +function formatDate(value) { + if (!value) return '-'; + const date = new Date(`${value}T00:00:00`); + if (Number.isNaN(date.getTime())) return value; + return date.toLocaleDateString('zh-CN', { + year: 'numeric', + month: '2-digit', + day: '2-digit' + }); +} + +function formatScore(value) { + const number = Number(value || 0); + return Number.isInteger(number) ? String(number) : number.toFixed(2); +} + +function getScoreTotal(items) { + return (items || []).reduce((sum, item) => sum + Number(item.score || 0), 0); +} + +function renderEmpty(message) { + resultsShell.innerHTML = `
| 成绩项目 | +得分 | +满分 | +
|---|---|---|
| 暂无成绩项目 | ||
备注:${escapeHtml(result.remark || '无')}
+请选择考试项目,再输入姓名和准考证号进行核验。每场考试独立建档,成绩互不关联,支持负分项目和备注信息。
+ +按姓名和准考证号核验身份,集中展示多场考试、成绩项目、负分扣分和备注说明。
+ +