将前端文件从html目录迁移到views目录,按功能模块组织 重构认证中间件和路由处理,简化页面权限控制 更新静态资源引用路径,统一使用/public前缀 添加学生仪表板页面,优化移动端显示 移除旧版html和js文件,更新样式和脚本
575 lines
23 KiB
HTML
575 lines
23 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><EFBFBD>鞟貍<EFBFBD>亥砭/蝞∠<E89D9E> - 摮衣<E691AE><E8A1A3>鞟貍蝞∠<E89D9E>蝟餌<E89D9F></title>
|
||
<link rel="stylesheet" href="/public/css/style.css">
|
||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
||
|
||
</head>
|
||
<body>
|
||
<!-- 撖潸⏛<E6BDB8>?-->
|
||
<nav class="navbar">
|
||
<div class="nav-container">
|
||
<div class="nav-brand">
|
||
<a href="/">
|
||
<i class="fas fa-graduation-cap"></i>
|
||
<span>XX摮行嵗<EFBFBD>鞟貍蝞∠<EFBFBD>蝟餌<EFBFBD></span>
|
||
</a>
|
||
</div>
|
||
<div class="nav-menu">
|
||
<a href="/teacher/dashboard" class="nav-link">
|
||
<i class="fas fa-tachometer-alt"></i>
|
||
<span><EFBFBD>坔<EFBFBD>隞芾”<EFBFBD>?/span>
|
||
</a>
|
||
<a href="/teacher/grade_entry" class="nav-link">
|
||
<i class="fas fa-edit"></i>
|
||
<span><EFBFBD>鞟貍敶訫<EFBFBD></span>
|
||
</a>
|
||
<a href="/teacher/grade_management" class="nav-link active">
|
||
<i class="fas fa-search"></i>
|
||
<span><EFBFBD>鞟貍蝞∠<EFBFBD></span>
|
||
</a>
|
||
</div>
|
||
<div class="nav-user">
|
||
<div class="user-info">
|
||
<i class="fas fa-user-circle"></i>
|
||
<span>撘㰘<EFBFBD><EFBFBD><EFBFBD></span>
|
||
</div>
|
||
<a href="/login" class="btn-logout">
|
||
<i class="fas fa-sign-out-alt"></i>
|
||
<span><EFBFBD><EFBFBD><EFBFBD>?/span>
|
||
</a>
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
|
||
<!-- 銝餃<E98A9D>摰孵躹 -->
|
||
<main class="main-content">
|
||
<div class="container">
|
||
<!-- <20>W<EFBFBD>撅穃紡<E7A983>?-->
|
||
<div class="breadcrumb">
|
||
<a href="/">銝駁△</a>
|
||
<i class="fas fa-chevron-right"></i>
|
||
<a href="/teacher/dashboard"><EFBFBD>坔<EFBFBD>隞芾”<EFBFBD>?/a>
|
||
<i class="fas fa-chevron-right"></i>
|
||
<span><EFBFBD>鞟貍<EFBFBD>亥砭/蝞∠<E89D9E></span>
|
||
</div>
|
||
|
||
<!-- 憿菟𢒰<E88F9F><F0A292B0><EFBFBD> -->
|
||
<div class="page-header">
|
||
<h1 class="page-title"><EFBFBD>鞟貍<EFBFBD>亥砭/蝞∠<E89D9E></h1>
|
||
<p class="page-description"><EFBFBD>亥砭<EFBFBD><EFBFBD>耨<EFBFBD>孵<EFBFBD><EFBFBD>𣳇膄摮衣<EFBFBD><EFBFBD>鞟貍霈啣<EFBFBD></p>
|
||
</div>
|
||
|
||
<!-- 蝑偦<E89D91>匧躹<E58CA7>?-->
|
||
<div class="filter-section">
|
||
<h2 class="filter-title">
|
||
<i class="fas fa-filter"></i>
|
||
蝑偦<E89D91>㗇辺隞? </h2>
|
||
<div class="filter-form">
|
||
<div class="form-group">
|
||
<label for="class-select"><EFBFBD>剔漣</label>
|
||
<select id="class-select" class="form-control">
|
||
<option value=""><EFBFBD>券<EFBFBD><EFBFBD>剔漣</option>
|
||
<option value="class1">霈∠<EFBFBD><EFBFBD>箇<EFBFBD>摮虫<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>?/option>
|
||
<option value="class2">霈∠<EFBFBD><EFBFBD>箇<EFBFBD>摮虫<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>?/option>
|
||
<option value="class3">頧臭辣撌亦<EFBFBD>1<EFBFBD>?/option>
|
||
<option value="class4">頧臭辣撌亦<EFBFBD>2<EFBFBD>?/option>
|
||
<option value="class5">蝵𤑳<EFBFBD>撌亦<EFBFBD>1<EFBFBD>?/option>
|
||
</select>
|
||
</div>
|
||
<div class="form-group">
|
||
<label for="course-select">霂曄<EFBFBD></label>
|
||
<select id="course-select" class="form-control">
|
||
<option value=""><EFBFBD>券<EFBFBD>霂曄<EFBFBD></option>
|
||
<option value="course1"><EFBFBD>唳旿蝏𤘪<EFBFBD></option>
|
||
<option value="course2"><EFBFBD>滢<EFBFBD>蝟餌<EFBFBD></option>
|
||
<option value="course3">霈∠<EFBFBD><EFBFBD>箇<EFBFBD>蝏?/option>
|
||
<option value="course4"><EFBFBD>唳旿摨梶頂蝏?/option>
|
||
<option value="course5">頧臭辣撌亦<EFBFBD></option>
|
||
</select>
|
||
</div>
|
||
<div class="form-group">
|
||
<label for="student-id">摮衣<EFBFBD>摮血噡</label>
|
||
<input type="text" id="student-id" class="form-control" placeholder="颲枏<E9A2B2>摮衣<E691AE>摮血噡">
|
||
</div>
|
||
<div class="form-group">
|
||
<label for="student-name">摮衣<EFBFBD>憪枏<EFBFBD></label>
|
||
<input type="text" id="student-name" class="form-control" placeholder="颲枏<E9A2B2>摮衣<E691AE>憪枏<E686AA>">
|
||
</div>
|
||
<div class="filter-actions">
|
||
<button id="search-btn" class="btn-search">
|
||
<i class="fas fa-search"></i>
|
||
<20>亥砭
|
||
</button>
|
||
<button id="reset-btn" class="btn-reset">
|
||
<i class="fas fa-redo"></i>
|
||
<20>滨蔭
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 蝏𤘪<E89D8F><F0A498AA>箏<EFBFBD> -->
|
||
<div class="results-section">
|
||
<div class="results-header">
|
||
<h2 class="results-title"><EFBFBD>亥砭蝏𤘪<EFBFBD></h2>
|
||
<div class="results-actions">
|
||
<button id="export-btn" class="btn-export">
|
||
<i class="fas fa-file-export"></i>
|
||
撖澆枂<E6BE86>鞟貍
|
||
</button>
|
||
<button id="batch-delete-btn" class="btn-batch-delete">
|
||
<i class="fas fa-trash-alt"></i>
|
||
<20>寥<EFBFBD><E5AFA5>𣳇膄
|
||
</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="table-responsive">
|
||
<table class="grade-table">
|
||
<thead>
|
||
<tr>
|
||
<th><input type="checkbox" id="select-all"></th>
|
||
<th>摮血噡</th>
|
||
<th>憪枏<EFBFBD></th>
|
||
<th><EFBFBD>剔漣</th>
|
||
<th>霂曄<EFBFBD></th>
|
||
<th>撟單𧒄<EFBFBD>鞟貍</th>
|
||
<th><EFBFBD>煺葉<EFBFBD>鞟貍</th>
|
||
<th><EFBFBD><EFBFBD>錰<EFBFBD>鞟貍</th>
|
||
<th><EFBFBD>餉<EFBFBD><EFBFBD>鞟貍</th>
|
||
<th>蝑厩漣</th>
|
||
<th><EFBFBD>滢<EFBFBD></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody id="grade-table-body">
|
||
<!-- <20>唳旿撠<E697BF><E692A0>朞<EFBFBD>JavaScript<70>冽<EFBFBD><E586BD><EFBFBD>頧?-->
|
||
<tr>
|
||
<td colspan="11" class="loading">
|
||
<i class="fas fa-spinner fa-spin"></i>
|
||
<p>甇<EFBFBD>銁<EFBFBD>㰘蝸<EFBFBD>鞟貍<EFBFBD>唳旿...</p>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<!-- <20><>△ -->
|
||
<div class="pagination">
|
||
<button id="prev-page" disabled>銝𠹺<EFBFBD>憿?/button>
|
||
<button class="active">1</button>
|
||
<button>2</button>
|
||
<button>3</button>
|
||
<button id="next-page">銝衤<EFBFBD>憿?/button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</main>
|
||
|
||
<!-- 憿菔<E686BF> -->
|
||
<footer class="footer">
|
||
<div class="container">
|
||
<p>© 2023 XX摮行嵗<E8A18C>鞟貍蝞∠<E89D9E>蝟餌<E89D9F>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?</p>
|
||
<p><EFBFBD><EFBFBD><EFBFBD>舀𣈲<EFBFBD>? 霈∠<E99C88><E288A0>箇<EFBFBD>摮虫<E691AE><E899AB><EFBFBD><EFBFBD>臬郎<E887AC>?/p>
|
||
</div>
|
||
</footer>
|
||
|
||
<script>
|
||
// 璅⊥<E79285><E28AA5>鞟貍<E99E9F>唳旿
|
||
const mockGrades = [
|
||
{
|
||
id: 1,
|
||
studentId: "20230001",
|
||
studentName: "撘牐<E69298>",
|
||
className: "霈∠<E99C88><E288A0>箇<EFBFBD>摮虫<E691AE><E899AB><EFBFBD><EFBFBD>?<3F>?,
|
||
courseName: "<EFBFBD>唳旿蝏𤘪<EFBFBD>",
|
||
regularScore: 85,
|
||
midtermScore: 88,
|
||
finalScore: 90,
|
||
totalScore: 88.5,
|
||
grade: "隡条<EFBFBD>"
|
||
},
|
||
{
|
||
id: 2,
|
||
studentId: "20230002",
|
||
studentName: "<EFBFBD>𤾸<EFBFBD>",
|
||
className: "霈∠<EFBFBD><EFBFBD>箇<EFBFBD>摮虫<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<EFBFBD>?,
|
||
courseName: "<22>唳旿蝏𤘪<E89D8F>",
|
||
regularScore: 78,
|
||
midtermScore: 82,
|
||
finalScore: 85,
|
||
totalScore: 82.3,
|
||
grade: "<22>臬末"
|
||
},
|
||
{
|
||
id: 3,
|
||
studentId: "20230003",
|
||
studentName: "<22>衤<EFBFBD>",
|
||
className: "霈∠<E99C88><E288A0>箇<EFBFBD>摮虫<E691AE><E899AB><EFBFBD><EFBFBD>?<3F>?,
|
||
courseName: "<EFBFBD>滢<EFBFBD>蝟餌<EFBFBD>",
|
||
regularScore: 92,
|
||
midtermScore: 88,
|
||
finalScore: 95,
|
||
totalScore: 91.8,
|
||
grade: "隡条<EFBFBD>"
|
||
},
|
||
{
|
||
id: 4,
|
||
studentId: "20230004",
|
||
studentName: "韏萄<EFBFBD>",
|
||
className: "霈∠<EFBFBD><EFBFBD>箇<EFBFBD>摮虫<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<EFBFBD>?,
|
||
courseName: "<22>滢<EFBFBD>蝟餌<E89D9F>",
|
||
regularScore: 65,
|
||
midtermScore: 70,
|
||
finalScore: 68,
|
||
totalScore: 67.9,
|
||
grade: "<22>𦠜聢"
|
||
},
|
||
{
|
||
id: 5,
|
||
studentId: "20230005",
|
||
studentName: "<22>曹<EFBFBD>",
|
||
className: "頧臭辣撌亦<E6928C>1<EFBFBD>?,
|
||
courseName: "<EFBFBD>唳旿摨梶頂蝏?,
|
||
regularScore: 88,
|
||
midtermScore: 85,
|
||
finalScore: 90,
|
||
totalScore: 87.9,
|
||
grade: "<22>臬末"
|
||
},
|
||
{
|
||
id: 6,
|
||
studentId: "20230006",
|
||
studentName: "摮坔<E691AE>",
|
||
className: "頧臭辣撌亦<E6928C>1<EFBFBD>?,
|
||
courseName: "<EFBFBD>唳旿摨梶頂蝏?,
|
||
regularScore: 75,
|
||
midtermScore: 78,
|
||
finalScore: 80,
|
||
totalScore: 78.1,
|
||
grade: "銝剔<E98A9D>"
|
||
},
|
||
{
|
||
id: 7,
|
||
studentId: "20230007",
|
||
studentName: "<22>其<EFBFBD>",
|
||
className: "頧臭辣撌亦<E6928C>2<EFBFBD>?,
|
||
courseName: "頧臭辣撌亦<EFBFBD>",
|
||
regularScore: 90,
|
||
midtermScore: 92,
|
||
finalScore: 88,
|
||
totalScore: 89.6,
|
||
grade: "隡条<EFBFBD>"
|
||
},
|
||
{
|
||
id: 8,
|
||
studentId: "20230008",
|
||
studentName: "<EFBFBD>游<EFBFBD>",
|
||
className: "頧臭辣撌亦<EFBFBD>2<EFBFBD>?,
|
||
courseName: "頧臭辣撌亦<E6928C>",
|
||
regularScore: 82,
|
||
midtermScore: 85,
|
||
finalScore: 87,
|
||
totalScore: 85.1,
|
||
grade: "<22>臬末"
|
||
}
|
||
];
|
||
|
||
// DOM<4F><4D><EFBFBD>
|
||
const searchBtn = document.getElementById('search-btn');
|
||
const resetBtn = document.getElementById('reset-btn');
|
||
const exportBtn = document.getElementById('export-btn');
|
||
const batchDeleteBtn = document.getElementById('batch-delete-btn');
|
||
const selectAllCheckbox = document.getElementById('select-all');
|
||
const gradeTableBody = document.getElementById('grade-table-body');
|
||
const classSelect = document.getElementById('class-select');
|
||
const courseSelect = document.getElementById('course-select');
|
||
const studentIdInput = document.getElementById('student-id');
|
||
const studentNameInput = document.getElementById('student-name');
|
||
|
||
// 敶枏<E695B6><E69E8F>劐葉<E58A90><E89189><EFBFBD>蝏呼D
|
||
let selectedGradeIds = new Set();
|
||
|
||
// <20>嘥<EFBFBD><E598A5>㚚△<E39A9A>? function initPage() {
|
||
renderGradeTable(mockGrades);
|
||
setupEventListeners();
|
||
updateSelectedCount();
|
||
}
|
||
|
||
// 皜脫<E79A9C><E884AB>鞟貍銵冽聢
|
||
function renderGradeTable(grades) {
|
||
if (grades.length === 0) {
|
||
gradeTableBody.innerHTML = `
|
||
<tr>
|
||
<td colspan="11" class="no-results">
|
||
<i class="fas fa-search"></i>
|
||
<h3><3E>芣𪄳<E88AA3>啁㮾<E59581>單<EFBFBD>蝏抵扇敶?/h3>
|
||
<p>霂瑕<E99C82>霂閗<E99C82><E99697>渡<EFBFBD><E6B8A1>㗇辺隞嗆<E99A9E>瘛餃<E7989B><E9A483>啁<EFBFBD><E59581>鞟貍霈啣<E99C88></p>
|
||
</td>
|
||
</tr>
|
||
`;
|
||
return;
|
||
}
|
||
|
||
let tableHTML = '';
|
||
|
||
grades.forEach(grade => {
|
||
// <20>寞旿<E5AF9E>鞟貍蝖桀<E89D96>CSS蝐? let gradeClass = 'grade-cell';
|
||
if (grade.totalScore >= 90) {
|
||
gradeClass += ' grade-excellent';
|
||
} else if (grade.totalScore >= 80) {
|
||
gradeClass += ' grade-good';
|
||
} else if (grade.totalScore < 60) {
|
||
gradeClass += ' grade-poor';
|
||
}
|
||
|
||
// <20>寞旿<E5AF9E>餉<EFBFBD><E9A489>鞟貍蝖桀<E89D96>蝑厩漣
|
||
let gradeLevel = grade.grade;
|
||
|
||
tableHTML += `
|
||
<tr data-grade-id="${grade.id}">
|
||
<td>
|
||
<input type="checkbox" class="grade-checkbox" data-id="${grade.id}">
|
||
</td>
|
||
<td>${grade.studentId}</td>
|
||
<td>${grade.studentName}</td>
|
||
<td>${grade.className}</td>
|
||
<td>${grade.courseName}</td>
|
||
<td>${grade.regularScore}</td>
|
||
<td>${grade.midtermScore}</td>
|
||
<td>${grade.finalScore}</td>
|
||
<td class="${gradeClass}">${grade.totalScore.toFixed(1)}</td>
|
||
<td>${gradeLevel}</td>
|
||
<td>
|
||
<div class="action-buttons">
|
||
<button class="btn-edit" onclick="editGrade(${grade.id})">
|
||
<i class="fas fa-edit"></i> 靽格㺿
|
||
</button>
|
||
<button class="btn-delete" onclick="deleteGrade(${grade.id})">
|
||
<i class="fas fa-trash"></i> <20>𣳇膄
|
||
</button>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
`;
|
||
});
|
||
|
||
gradeTableBody.innerHTML = tableHTML;
|
||
|
||
// <20>齿鰵蝏穃<E89D8F>憭漤<E686AD>㗇<EFBFBD>鈭衤辣
|
||
document.querySelectorAll('.grade-checkbox').forEach(checkbox => {
|
||
checkbox.addEventListener('change', function() {
|
||
const gradeId = parseInt(this.getAttribute('data-id'));
|
||
if (this.checked) {
|
||
selectedGradeIds.add(gradeId);
|
||
} else {
|
||
selectedGradeIds.delete(gradeId);
|
||
selectAllCheckbox.checked = false;
|
||
}
|
||
updateSelectedCount();
|
||
});
|
||
});
|
||
}
|
||
|
||
// 霈曄蔭鈭衤辣<E8A1A4>穃𨯬<E7A983>? function setupEventListeners() {
|
||
// <20>亥砭<E4BAA5>厰僼
|
||
searchBtn.addEventListener('click', function() {
|
||
performSearch();
|
||
});
|
||
|
||
// <20>滨蔭<E6BBA8>厰僼
|
||
resetBtn.addEventListener('click', function() {
|
||
classSelect.value = '';
|
||
courseSelect.value = '';
|
||
studentIdInput.value = '';
|
||
studentNameInput.value = '';
|
||
renderGradeTable(mockGrades);
|
||
selectedGradeIds.clear();
|
||
selectAllCheckbox.checked = false;
|
||
updateSelectedCount();
|
||
});
|
||
|
||
// 撖澆枂<E6BE86>厰僼
|
||
exportBtn.addEventListener('click', function() {
|
||
exportGrades();
|
||
});
|
||
|
||
// <20>寥<EFBFBD><E5AFA5>𣳇膄<F0A3B387>厰僼
|
||
batchDeleteBtn.addEventListener('click', function() {
|
||
if (selectedGradeIds.size === 0) {
|
||
alert('霂瑕<E99C82><E79195>㗇𥋘閬<F0A58B98><E996AC><EFBFBD>斤<EFBFBD><E696A4>鞟貍霈啣<E99C88>嚗?);
|
||
return;
|
||
}
|
||
|
||
if (confirm(`蝖桀<E89D96>閬<EFBFBD><E996AC><EFBFBD>日<EFBFBD>劐葉<E58A90>?${selectedGradeIds.size} <20>⊥<EFBFBD>蝏抵扇敶訫<E695B6>嚗<EFBFBD>迨<EFBFBD>滢<EFBFBD>銝滚虾<E6BB9A>日<EFBFBD><E697A5><EFBFBD>)) {
|
||
batchDeleteGrades();
|
||
}
|
||
});
|
||
|
||
// <20>券<EFBFBD>匧<EFBFBD><E58CA7>㗇<EFBFBD>
|
||
selectAllCheckbox.addEventListener('change', function() {
|
||
const checkboxes = document.querySelectorAll('.grade-checkbox');
|
||
checkboxes.forEach(checkbox => {
|
||
checkbox.checked = this.checked;
|
||
const gradeId = parseInt(checkbox.getAttribute('data-id'));
|
||
if (this.checked) {
|
||
selectedGradeIds.add(gradeId);
|
||
} else {
|
||
selectedGradeIds.delete(gradeId);
|
||
}
|
||
});
|
||
updateSelectedCount();
|
||
});
|
||
|
||
// 颲枏<E9A2B2>獢<EFBFBD><E78DA2>頧阡睸<E998A1>𦦵揣
|
||
[studentIdInput, studentNameInput].forEach(input => {
|
||
input.addEventListener('keypress', function(e) {
|
||
if (e.key === 'Enter') {
|
||
performSearch();
|
||
}
|
||
});
|
||
});
|
||
}
|
||
|
||
// <20>扯<EFBFBD><E689AF>𦦵揣
|
||
function performSearch() {
|
||
const selectedClass = classSelect.value;
|
||
const selectedCourse = courseSelect.value;
|
||
const studentId = studentIdInput.value.trim();
|
||
const studentName = studentNameInput.value.trim();
|
||
|
||
// <20>曄內<E69B84>㰘蝸<E3B098>嗆<EFBFBD>? gradeTableBody.innerHTML = `
|
||
<tr>
|
||
<td colspan="11" class="loading">
|
||
<i class="fas fa-spinner fa-spin"></i>
|
||
<p>甇<>銁<EFBFBD>𦦵揣<F0A6A6B5>鞟貍<E99E9F>唳旿...</p>
|
||
</td>
|
||
</tr>
|
||
`;
|
||
|
||
// 璅⊥<E79285>API撱嗉<E692B1>
|
||
setTimeout(() => {
|
||
let filteredGrades = mockGrades.filter(grade => {
|
||
// <20>剔漣蝑偦<E89D91>? if (selectedClass && grade.className !== selectedClass) {
|
||
return false;
|
||
}
|
||
|
||
// 霂曄<E99C82>蝑偦<E89D91>? if (selectedCourse && grade.courseName !== selectedCourse) {
|
||
return false;
|
||
}
|
||
|
||
// 摮血噡蝑偦<E89D91>? if (studentId && !grade.studentId.includes(studentId)) {
|
||
return false;
|
||
}
|
||
|
||
// 憪枏<E686AA>蝑偦<E89D91>? if (studentName && !grade.studentName.includes(studentName)) {
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
});
|
||
|
||
renderGradeTable(filteredGrades);
|
||
selectedGradeIds.clear();
|
||
selectAllCheckbox.checked = false;
|
||
updateSelectedCount();
|
||
}, 500);
|
||
}
|
||
|
||
// 撖澆枂<E6BE86>鞟貍
|
||
function exportGrades() {
|
||
// 餈䠷<E9A488>摨磰砲靚<E7A0B2>鍂<EFBFBD>𡒊垢API撖澆枂<E6BE86>鞟貍
|
||
// <20><>𧒄雿輻鍂璅⊥<E79285>撖澆枂
|
||
alert('<EFBFBD>鞟貍撖澆枂<EFBFBD>蠘<EFBFBD>甇<EFBFBD>銁撘<EFBFBD><EFBFBD>睲葉嚗<EFBFBD><EFBFBD><EFBFBD>舀<EFBFBD>Excel<EFBFBD>龦SV<EFBFBD>澆<EFBFBD>撖澆枂<EFBFBD>?);
|
||
|
||
// 璅⊥<E79285>撖澆枂餈<E69E82><E9A488>
|
||
exportBtn.innerHTML = '<i class="fas fa-spinner fa-spin"></i> 撖澆枂銝?..';
|
||
exportBtn.disabled = true;
|
||
|
||
setTimeout(() => {
|
||
exportBtn.innerHTML = '<i class="fas fa-file-export"></i> 撖澆枂<E6BE86>鞟貍';
|
||
exportBtn.disabled = false;
|
||
|
||
// <20>典<EFBFBD><E585B8><EFBFBD><EFBFBD><EFBFBD>其葉嚗諹<E59A97><E8ABB9>䔶<EFBFBD>閫血<E996AB><E8A180><EFBFBD>辣銝贝蝸
|
||
// <20><>𧒄<EFBFBD>曄內<E69B84>𣂼<EFBFBD>瘨<EFBFBD><E798A8>
|
||
showNotification('<27>鞟貍撖澆枂<E6BE86>𣂼<EFBFBD>嚗<EFBFBD><E59A97>隞嗅歇撘<E6AD87>憪衤<E686AA>頧賬<E9A0A7>?, 'success');
|
||
}, 1500);
|
||
}
|
||
|
||
// <20>寥<EFBFBD><E5AFA5>𣳇膄<F0A3B387>鞟貍
|
||
function batchDeleteGrades() {
|
||
// 餈䠷<E9A488>摨磰砲靚<E7A0B2>鍂<EFBFBD>𡒊垢API<50>𣳇膄<F0A3B387>鞟貍
|
||
// <20><>𧒄雿輻鍂璅⊥<E79285><E28AA5>𣳇膄
|
||
batchDeleteBtn.innerHTML = '<i class="fas fa-spinner fa-spin"></i> <EFBFBD>𣳇膄銝?..';
|
||
batchDeleteBtn.disabled = true;
|
||
|
||
setTimeout(() => {
|
||
// 隞擧芋<E693A7><E88A8B>㺭<EFBFBD>桐葉<E6A190>𣳇膄<F0A3B387>劐葉<E58A90><E89189><EFBFBD>蝏? selectedGradeIds.forEach(id => {
|
||
const index = mockGrades.findIndex(grade => grade.id === id);
|
||
if (index !== -1) {
|
||
mockGrades.splice(index, 1);
|
||
}
|
||
});
|
||
|
||
// <20>齿鰵皜脫<E79A9C>銵冽聢
|
||
renderGradeTable(mockGrades);
|
||
selectedGradeIds.clear();
|
||
selectAllCheckbox.checked = false;
|
||
|
||
batchDeleteBtn.innerHTML = '<i class="fas fa-trash-alt"></i> <20>寥<EFBFBD><E5AFA5>𣳇膄';
|
||
batchDeleteBtn.disabled = false;
|
||
|
||
showNotification(`<EFBFBD>𣂼<EFBFBD><EFBFBD>𣳇膄 ${selectedGradeIds.size} <20>⊥<EFBFBD>蝏抵扇敶𤏪<E695B6>`, 'success');
|
||
updateSelectedCount();
|
||
}, 1000);
|
||
}
|
||
|
||
// 蝻𤥁<E89DBB><F0A4A581>鞟貍
|
||
function editGrade(gradeId) {
|
||
// 餈䠷<E9A488>摨磰砲頝唾蓮<E594BE>啁<EFBFBD>颲煾△<E785BE>X<EFBFBD><EFBCB8>枏<EFBFBD>蝻𤥁<E89DBB>璅⊥<E79285><E28AA5><EFBFBD>
|
||
// <20><>𧒄<EFBFBD>曄內<E69B84>鞟內
|
||
alert(`蝻𤥁<EFBFBD><EFBFBD>鞟貍 ID: ${gradeId}\n<EFBFBD>典<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>其葉嚗諹<EFBFBD><EFBFBD>䔶<EFBFBD><EFBFBD>枏<EFBFBD>蝻𤥁<EFBFBD>銵典<EFBFBD><EFBFBD><EFBFBD>);
|
||
}
|
||
|
||
// <20>𣳇膄<F0A3B387>蓥葵<E893A5>鞟貍
|
||
function deleteGrade(gradeId) {
|
||
if (confirm('蝖桀<E89D96>閬<EFBFBD><E996AC><EFBFBD>方<EFBFBD><E696B9>⊥<EFBFBD>蝏抵扇敶訫<E695B6>嚗<EFBFBD>迨<EFBFBD>滢<EFBFBD>銝滚虾<E6BB9A>日<EFBFBD><E697A5>?)) {
|
||
// 餈䠷<E9A488>摨磰砲靚<E7A0B2>鍂<EFBFBD>𡒊垢API<50>𣳇膄<F0A3B387>鞟貍
|
||
// <20><>𧒄雿輻鍂璅⊥<E79285><E28AA5>𣳇膄
|
||
const index = mockGrades.findIndex(grade => grade.id === gradeId);
|
||
if (index !== -1) {
|
||
mockGrades.splice(index, 1);
|
||
renderGradeTable(mockGrades);
|
||
selectedGradeIds.delete(gradeId);
|
||
updateSelectedCount();
|
||
showNotification('<27>鞟貍霈啣<E99C88>撌脣<E6928C><E884A3>歹<EFBFBD>', 'success');
|
||
}
|
||
}
|
||
}
|
||
|
||
// <20>湔鰵<E6B994>劐葉霈⊥㺭
|
||
function updateSelectedCount() {
|
||
const count = selectedGradeIds.size;
|
||
if (count > 0) {
|
||
batchDeleteBtn.innerHTML = `<i class="fas fa-trash-alt"></i> <EFBFBD>寥<EFBFBD><EFBFBD>𣳇膄 (${count})`;
|
||
} else {
|
||
batchDeleteBtn.innerHTML = '<i class="fas fa-trash-alt"></i> <20>寥<EFBFBD><E5AFA5>𣳇膄';
|
||
}
|
||
}
|
||
|
||
// <20>曄內<E69B84>𡁶䰻
|
||
function showNotification(message, type = 'info') {
|
||
// <20>典<EFBFBD><E585B8><EFBFBD><EFBFBD><EFBFBD>其葉嚗諹<E59A97><E8ABB9>䔶<EFBFBD><E494B6>曄內銝<E585A7>銝芰<E98A9D>閫<EFBFBD><E996AB><EFBFBD>𡁶䰻蝏<E4B0BB>辣
|
||
// <20><>𧒄雿輻鍂alert
|
||
alert(message);
|
||
}
|
||
|
||
// 憿菟𢒰<E88F9F>㰘蝸摰峕<E691B0><E5B395>𤾸<EFBFBD>憪见<E686AA>
|
||
document.addEventListener('DOMContentLoaded', initPage);
|
||
</script>
|
||
</body>
|
||
</html>
|