add merging sentences action

This commit is contained in:
2026-09-04 09:09:34 +08:00
parent a38679d4a0
commit ff1341e191
6 changed files with 287 additions and 4 deletions

View File

@@ -254,7 +254,7 @@ async function openSentences(video) {
elements.sentenceMeta.textContent = `${sentences.length} 句 / ${detail.video.video_hash}`;
elements.sentenceRows.replaceChildren();
for (const sentence of sentences) {
elements.sentenceRows.append(sentenceRow(video, sentence));
elements.sentenceRows.append(sentenceRow(video, sentence, sentences.length));
}
if (!elements.dialog.open) elements.dialog.showModal();
} catch (error) {
@@ -262,7 +262,7 @@ async function openSentences(video) {
}
}
function sentenceRow(video, sentence) {
function sentenceRow(video, sentence, totalCount) {
const row = document.createElement("tr");
const textArea = document.createElement("textarea");
textArea.value = sentence.text || "";
@@ -307,6 +307,26 @@ function sentenceRow(video, sentence) {
}
});
saveContainer.append(save);
if (sentence.index < totalCount - 1) {
const merge = button("合并下句", async () => {
const preview = `${(textArea.value || sentence.text || "").trim()} + 下一句`;
const confirmed = window.confirm(`确定将第 ${sentence.index + 1} 句与下一句合并成一句吗?\n${preview}`);
if (!confirmed) return;
merge.disabled = true;
try {
await api(`/api/v1/admin/videos/${video.video_hash}/sentences/${sentence.index}/merge`, {
method: "PUT",
});
merge.textContent = "已合并";
await openSentences(video);
} catch (error) {
elements.serviceState.textContent = `句子合并失败: ${error.message}`;
merge.textContent = error.message;
window.setTimeout(() => { merge.disabled = false; merge.textContent = "合并下句"; }, 1600);
}
});
saveContainer.append(merge);
}
const timeContainer = document.createElement("td");
const startLabel = document.createElement("span");
startLabel.textContent = formatDuration(sentence.start_ms);