diff --git a/web/src/views/editor/Editor.vue b/web/src/views/editor/Editor.vue index ac90955..6f709fd 100644 --- a/web/src/views/editor/Editor.vue +++ b/web/src/views/editor/Editor.vue @@ -13,6 +13,8 @@ import { PATHS, FILE_RUNNERS } from '@/constants' import FileSidebar from './components/FileSidebar.vue' import RunConfigDialog from './components/RunConfigDialog.vue' import FileActionDialogs from './components/FileActionDialogs.vue' +import BaihuDialog from '@/components/ui/BaihuDialog.vue' +import { AlertCircle } from 'lucide-vue-next' const route = useRoute() const router = useRouter() @@ -31,6 +33,12 @@ const isRefreshing = ref(false) const isEditMode = ref(false) const hasChanges = computed(() => fileContent.value !== originalContent.value) +const confirmLeave = ref({ + show: false, + path: '', + onConfirm: () => {} +}) + // Component Refs const dialogsRef = ref | null>(null) const terminalRef = ref | null>(null) @@ -166,7 +174,17 @@ async function handleSelect(node: FileNode) { expandedDirs.value = new Set(expandedDirs.value) selectedFile.value = null } else { - if (hasChanges.value && !confirm('当前文件有未保存的更改,是否放弃?')) return + if (hasChanges.value) { + confirmLeave.value = { + show: true, + path: node.path, + onConfirm: () => { + originalContent.value = fileContent.value // 假装保存或标记为已确认放弃 + loadFile(node.path) + } + } + return + } await loadFile(node.path) } } @@ -528,5 +546,28 @@ onUnmounted(() => { + + +
+
+ +
+
+

文件尚未保存

+

+ 当前文件有未保存的更改。如果现在离开,您的更改将会丢失。 +

+
+ {{ confirmLeave.path }} +
+
+
+ +
diff --git a/web/src/views/editor/components/FileSidebar.vue b/web/src/views/editor/components/FileSidebar.vue index 487b3e2..7c9e10e 100644 --- a/web/src/views/editor/components/FileSidebar.vue +++ b/web/src/views/editor/components/FileSidebar.vue @@ -1,11 +1,12 @@