feat: add admin console and review workflow
This commit is contained in:
+34
-2
@@ -10,6 +10,7 @@ const inlineAccount = document.querySelector("#inlineAccount");
|
||||
const correctionToolbar = document.querySelector("#correctionToolbar");
|
||||
const correctionStatus = document.querySelector("#correctionStatus");
|
||||
const copyCorrectedBtn = document.querySelector("#copyCorrectedBtn");
|
||||
const submitCorrectionsBtn = document.querySelector("#submitCorrectionsBtn");
|
||||
const correctionDialog = document.querySelector("#correctionDialog");
|
||||
const correctionForm = document.querySelector("#correctionForm");
|
||||
const correctionOriginal = document.querySelector("#correctionOriginal");
|
||||
@@ -260,7 +261,9 @@ function updateCorrectionToolbar(message = "", isError = false) {
|
||||
const count = correctedRecords.size;
|
||||
correctionToolbar.hidden = count === 0;
|
||||
copyCorrectedBtn.disabled = count === 0;
|
||||
submitCorrectionsBtn.disabled = count === 0;
|
||||
copyCorrectedBtn.textContent = `复制已修改记录 ${count} 条`;
|
||||
submitCorrectionsBtn.textContent = `提交审核 ${count} 条`;
|
||||
correctionStatus.textContent = message || `已修改 ${count} 条记录`;
|
||||
correctionStatus.classList.toggle("is-error", isError);
|
||||
}
|
||||
@@ -435,8 +438,36 @@ async function copyCorrectedRecords() {
|
||||
}
|
||||
}
|
||||
|
||||
async function fetchJson(url) {
|
||||
const response = await fetch(url, { cache: "no-store" });
|
||||
async function submitCorrectedRecords() {
|
||||
const items = currentRecordOrder
|
||||
.map((key) => {
|
||||
const original = findCurrentRecord(key);
|
||||
const corrected = correctedRecords.get(key);
|
||||
if (!original || !corrected) return null;
|
||||
return {
|
||||
original_line: buildRecordLine(original),
|
||||
corrected_line: buildRecordLine(corrected),
|
||||
};
|
||||
})
|
||||
.filter(Boolean);
|
||||
if (!items.length) return;
|
||||
submitCorrectionsBtn.disabled = true;
|
||||
try {
|
||||
const data = await fetchJson("/api/corrections", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ items }),
|
||||
});
|
||||
updateCorrectionToolbar(`已提交 ${data.submitted} 条纠错审核`);
|
||||
} catch (error) {
|
||||
updateCorrectionToolbar(`提交失败:${error.message}`, true);
|
||||
} finally {
|
||||
submitCorrectionsBtn.disabled = correctedRecords.size === 0;
|
||||
}
|
||||
}
|
||||
|
||||
async function fetchJson(url, options = {}) {
|
||||
const response = await fetch(url, { cache: "no-store", ...options });
|
||||
if (!response.ok) {
|
||||
let detail = `${response.status} ${response.statusText}`;
|
||||
try {
|
||||
@@ -550,6 +581,7 @@ document.addEventListener("keydown", (event) => {
|
||||
});
|
||||
|
||||
copyCorrectedBtn.addEventListener("click", copyCorrectedRecords);
|
||||
submitCorrectionsBtn.addEventListener("click", submitCorrectedRecords);
|
||||
|
||||
updateRecordSortButtons();
|
||||
loadHealth();
|
||||
|
||||
Reference in New Issue
Block a user