feat: add summary registration and deletion review
This commit is contained in:
+63
-3
@@ -23,6 +23,12 @@ const correctionTeacher = document.querySelector("#correctionTeacher");
|
||||
const correctionSubject = document.querySelector("#correctionSubject");
|
||||
const closeCorrectionBtn = document.querySelector("#closeCorrectionBtn");
|
||||
const cancelCorrectionBtn = document.querySelector("#cancelCorrectionBtn");
|
||||
const deleteDialog = document.querySelector("#deleteDialog");
|
||||
const deleteOriginal = document.querySelector("#deleteOriginal");
|
||||
const deleteError = document.querySelector("#deleteError");
|
||||
const closeDeleteBtn = document.querySelector("#closeDeleteBtn");
|
||||
const cancelDeleteBtn = document.querySelector("#cancelDeleteBtn");
|
||||
const confirmDeleteBtn = document.querySelector("#confirmDeleteBtn");
|
||||
|
||||
const WEEKDAYS = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
|
||||
const COPY_LINE_BREAK = "\r\n";
|
||||
@@ -32,6 +38,7 @@ let recordSort = { date: "asc", time: "asc" };
|
||||
let currentRecordOrder = [];
|
||||
let correctedRecords = new Map();
|
||||
let activeCorrectionKey = "";
|
||||
let activeDeleteKey = "";
|
||||
|
||||
function fmtHours(value) {
|
||||
return Number(value || 0).toLocaleString("zh-CN", { maximumFractionDigits: 2 });
|
||||
@@ -185,6 +192,7 @@ function renderRecordRow(row) {
|
||||
<td class="record-action-cell">
|
||||
<div class="record-actions">
|
||||
<button class="small-button correction-edit" type="button" data-record-key="${escapeHtml(key)}">${actionLabel}</button>
|
||||
<button class="small-button record-delete" type="button" data-record-key="${escapeHtml(key)}">删除</button>
|
||||
${badge}
|
||||
</div>
|
||||
</td>
|
||||
@@ -385,6 +393,45 @@ function closeCorrectionDialog() {
|
||||
setCorrectionError("");
|
||||
}
|
||||
|
||||
function setDeleteError(message) {
|
||||
deleteError.textContent = message;
|
||||
deleteError.hidden = !message;
|
||||
}
|
||||
|
||||
function openDeleteDialog(key) {
|
||||
const original = findCurrentRecord(key);
|
||||
if (!original) return;
|
||||
activeDeleteKey = key;
|
||||
deleteOriginal.textContent = `将提交删除审核:${buildRecordLine(original)}`;
|
||||
setDeleteError("");
|
||||
deleteDialog.hidden = false;
|
||||
}
|
||||
|
||||
function closeDeleteDialog() {
|
||||
deleteDialog.hidden = true;
|
||||
activeDeleteKey = "";
|
||||
setDeleteError("");
|
||||
}
|
||||
|
||||
async function submitDeleteRecord() {
|
||||
const original = findCurrentRecord(activeDeleteKey);
|
||||
if (!original) return;
|
||||
confirmDeleteBtn.disabled = true;
|
||||
try {
|
||||
const data = await fetchJson("/api/deletions", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ items: [{ original_line: buildRecordLine(original) }] }),
|
||||
});
|
||||
closeDeleteDialog();
|
||||
updateCorrectionToolbar(`已提交 ${data.submitted} 条删除审核`);
|
||||
} catch (error) {
|
||||
setDeleteError(`提交失败:${error.message}`);
|
||||
} finally {
|
||||
confirmDeleteBtn.disabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
function saveCorrection() {
|
||||
const original = findCurrentRecord(activeCorrectionKey);
|
||||
if (!original) return;
|
||||
@@ -550,9 +597,13 @@ document.querySelectorAll("[data-query]").forEach((button) => {
|
||||
});
|
||||
|
||||
recordRows.addEventListener("click", (event) => {
|
||||
const button = event.target.closest(".correction-edit");
|
||||
if (!button) return;
|
||||
openCorrectionDialog(button.dataset.recordKey);
|
||||
const editButton = event.target.closest(".correction-edit");
|
||||
const deleteButton = event.target.closest(".record-delete");
|
||||
if (editButton) {
|
||||
openCorrectionDialog(editButton.dataset.recordKey);
|
||||
return;
|
||||
}
|
||||
if (deleteButton) openDeleteDialog(deleteButton.dataset.recordKey);
|
||||
});
|
||||
|
||||
[correctionDate, correctionTime, correctionStudent, correctionTeacher, correctionSubject].forEach((input) => {
|
||||
@@ -574,10 +625,19 @@ cancelCorrectionBtn.addEventListener("click", closeCorrectionDialog);
|
||||
correctionDialog.addEventListener("click", (event) => {
|
||||
if (event.target === correctionDialog) closeCorrectionDialog();
|
||||
});
|
||||
closeDeleteBtn.addEventListener("click", closeDeleteDialog);
|
||||
cancelDeleteBtn.addEventListener("click", closeDeleteDialog);
|
||||
confirmDeleteBtn.addEventListener("click", submitDeleteRecord);
|
||||
deleteDialog.addEventListener("click", (event) => {
|
||||
if (event.target === deleteDialog) closeDeleteDialog();
|
||||
});
|
||||
document.addEventListener("keydown", (event) => {
|
||||
if (event.key === "Escape" && !correctionDialog.hidden) {
|
||||
closeCorrectionDialog();
|
||||
}
|
||||
if (event.key === "Escape" && !deleteDialog.hidden) {
|
||||
closeDeleteDialog();
|
||||
}
|
||||
});
|
||||
|
||||
copyCorrectedBtn.addEventListener("click", copyCorrectedRecords);
|
||||
|
||||
Reference in New Issue
Block a user