diff --git a/backend/competition/judge_views.py b/backend/competition/judge_views.py
index b4684e4..e1439d3 100644
--- a/backend/competition/judge_views.py
+++ b/backend/competition/judge_views.py
@@ -313,7 +313,8 @@ def project_detail_api(request, project_id):
if latest_task:
ai_data = {
'transcription': latest_task.transcription,
- 'summary': latest_task.summary
+ 'summary': latest_task.summary,
+ 'auto_chapters_data': latest_task.auto_chapters_data
}
data = {
diff --git a/backend/competition/templates/judge/dashboard.html b/backend/competition/templates/judge/dashboard.html
index 36178d1..40093b5 100644
--- a/backend/competition/templates/judge/dashboard.html
+++ b/backend/competition/templates/judge/dashboard.html
@@ -99,8 +99,13 @@
AI 总结
-
-
逐字稿片段
+
+
+
逐字稿片段
+
+
@@ -202,6 +207,37 @@
+
+
+
+
+
+
+
完整逐字稿与章节
+
+
+
+
+
+
{% endblock %}
{% block extra_js %}
@@ -223,6 +259,56 @@ function openUploadModal() {
document.getElementById('uploadModal').classList.add('active');
}
+function openFullTranscriptionModal() {
+ if (!window.currentAiData) return;
+
+ document.getElementById('modalFullTrans').innerText = window.currentAiData.transcription || '暂无完整逐字稿';
+
+ let chaptersData = window.currentAiData.auto_chapters_data;
+ const chaptersSection = document.getElementById('chaptersSection');
+ const chaptersContent = document.getElementById('modalChaptersContent');
+
+ // Check if chaptersData is a string and parse it if necessary
+ if (typeof chaptersData === 'string') {
+ try {
+ chaptersData = JSON.parse(chaptersData);
+ } catch (e) {
+ console.error('Failed to parse auto_chapters_data:', e);
+ chaptersData = null;
+ }
+ }
+
+ if (chaptersData && chaptersData.AutoChapters && chaptersData.AutoChapters.length > 0) {
+ chaptersSection.style.display = 'block';
+ chaptersContent.innerHTML = chaptersData.AutoChapters.map(chapter => {
+ // Convert ms to mm:ss format
+ const formatTime = ms => {
+ const totalSeconds = Math.floor(ms / 1000);
+ const minutes = Math.floor(totalSeconds / 60);
+ const seconds = totalSeconds % 60;
+ return `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;
+ };
+
+ const start = formatTime(chapter.Start);
+ const end = formatTime(chapter.End);
+
+ return `
+
+
+
${chapter.Headline || '未命名章节'}
+ ${start} - ${end}
+
+
${chapter.Summary || '无摘要'}
+
+ `;
+ }).join('');
+ } else {
+ chaptersSection.style.display = 'none';
+ }
+
+ document.getElementById('fullTranscriptionModal').classList.add('active');
+}
+
async function viewProject(id) {
try {
// Show loading state or skeleton if possible, for now just fetch
@@ -240,8 +326,12 @@ async function viewProject(id) {
aiSection.style.display = 'block';
document.getElementById('modalAiSummary').innerText = (data.ai_result.summary || '暂无总结').substring(0, 300) + (data.ai_result.summary && data.ai_result.summary.length > 300 ? '...' : '');
document.getElementById('modalAiTrans').innerText = (data.ai_result.transcription || '暂无内容').substring(0, 150) + '...';
+
+ // Store full data for full transcription modal
+ window.currentAiData = data.ai_result;
} else {
aiSection.style.display = 'none';
+ window.currentAiData = null;
}
// Render History Comments