diff --git a/static/js/note-editor.js b/static/js/note-editor.js
index 7b5bbd4..6105491 100644
--- a/static/js/note-editor.js
+++ b/static/js/note-editor.js
@@ -152,7 +152,7 @@ const NoteEditor = {
*/
async exportPDF() {
if (!this.analysisId) {
- alert('请先完成审查再导出 PDF');
+ showToast('请先完成审查再导出 PDF', 'warning');
return;
}
@@ -189,7 +189,7 @@ const NoteEditor = {
document.body.removeChild(a);
URL.revokeObjectURL(url);
} catch (err) {
- alert('PDF 导出失败: ' + err.message);
+ showToast('PDF 导出失败: ' + err.message, 'error');
} finally {
if (btn) {
btn.disabled = false;
diff --git a/templates/layouts/base.html b/templates/layouts/base.html
index 04425fc..5f0c623 100644
--- a/templates/layouts/base.html
+++ b/templates/layouts/base.html
@@ -6,6 +6,48 @@
+
+
{{end}}
diff --git a/templates/pages/generate.html b/templates/pages/generate.html
index 013bc2a..79213a1 100644
--- a/templates/pages/generate.html
+++ b/templates/pages/generate.html
@@ -191,7 +191,7 @@
const headRef = document.getElementById('head-ref').value;
if (!baseRef || !headRef) {
- alert('请选择 Base 和 Head 分支');
+ showToast('请选择 Base 和 Head 分支', 'warning');
return;
}
@@ -258,7 +258,7 @@
btn.textContent = '生成 PR 描述';
},
error(data) {
- alert('生成失败: ' + (data.message || '未知错误'));
+ showToast('生成失败: ' + (data.message || '未知错误'), 'error');
streaming.classList.add('hidden');
output.classList.add('hidden');
btn.disabled = false;
@@ -275,7 +275,7 @@
function copyMarkdown() {
const markdown = markdownContent || document.getElementById('pr-markdown').textContent;
navigator.clipboard.writeText(markdown).then(() => {
- alert('已复制到剪贴板');
+ showToast('已复制到剪贴板', 'success');
}).catch(() => {
const textarea = document.createElement('textarea');
textarea.value = markdown;
@@ -283,7 +283,7 @@
textarea.select();
document.execCommand('copy');
document.body.removeChild(textarea);
- alert('已复制到剪贴板');
+ showToast('已复制到剪贴板', 'success');
});
}
diff --git a/templates/pages/repo.html b/templates/pages/repo.html
index a11139b..483e58a 100644
--- a/templates/pages/repo.html
+++ b/templates/pages/repo.html
@@ -405,7 +405,7 @@
const base = document.getElementById('select-base').value;
const head = document.getElementById('select-head').value;
if (!base || !head) {
- alert('请选择 Base 和 Head 分支');
+ showToast('请选择 Base 和 Head 分支', 'warning');
return;
}
DiffViewer.loadDiff(repoId, base, head);
@@ -436,7 +436,7 @@
const base = document.getElementById('select-base').value;
const head = document.getElementById('select-head').value;
if (!base || !head) {
- alert('请先选择 Base 和 Head 并查看 Diff');
+ showToast('请先选择 Base 和 Head 并查看 Diff', 'warning');
return;
}
@@ -499,7 +499,7 @@
viewLink.href = `/repo/${repoId}/review?base=${encodeURIComponent(base)}&head=${encodeURIComponent(head)}`;
},
error(data) {
- alert('审查失败: ' + (data.message || '未知错误'));
+ showToast('审查失败: ' + (data.message || '未知错误'), 'error');
progress.classList.add('hidden');
btn.disabled = false;
btn.textContent = '🤖 AI 评审';
diff --git a/templates/pages/review.html b/templates/pages/review.html
index c769b5e..3a2ace0 100644
--- a/templates/pages/review.html
+++ b/templates/pages/review.html
@@ -229,7 +229,7 @@
const topN = document.getElementById('top-n').value;
if (!baseRef || !headRef) {
- alert('请选择 Base 和 Head 分支');
+ showToast('请选择 Base 和 Head 分支', 'warning');
return;
}
@@ -340,7 +340,7 @@
NoteEditor.loadNotes();
},
error(data) {
- alert('审查失败: ' + (data.message || '未知错误'));
+ showToast('审查失败: ' + (data.message || '未知错误'), 'error');
progress.classList.add('hidden');
btn.disabled = false;
btn.textContent = '开始审查';
@@ -471,7 +471,7 @@
const result = data.result;
if (!result || !result.file_reviews) {
- alert('该历史记录没有完整的评审数据');
+ showToast('该历史记录没有完整的评审数据', 'warning');
return;
}
@@ -533,7 +533,7 @@
} catch (e) {
console.error('Load history error:', e);
- alert('加载历史评审失败: ' + e.message);
+ showToast('加载历史评审失败: ' + e.message, 'error');
}
}