Files
WebWork/frontend/views/teacher/grade_management.html
祀梦 bcf2c71fad refactor(frontend): 重构前端目录结构并优化认证流程
将前端文件从html目录迁移到views目录,按功能模块组织
重构认证中间件和路由处理,简化页面权限控制
更新静态资源引用路径,统一使用/public前缀
添加学生仪表板页面,优化移动端显示
移除旧版html和js文件,更新样式和脚本
2025-12-21 22:07:23 +08:00

575 lines
23 KiB
HTML
Raw 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><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><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>&copy; 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><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>