diff --git a/frontend/src/views/Workbench.vue b/frontend/src/views/Workbench.vue index 89a0254..5fb09fc 100644 --- a/frontend/src/views/Workbench.vue +++ b/frontend/src/views/Workbench.vue @@ -2,9 +2,10 @@ import { computed, onMounted, onUnmounted, ref } from 'vue' import { useRouter } from 'vue-router' import { useI18n } from 'vue-i18n' -import { Star, Folder, Code2, GitCommitHorizontal, ListTodo, TicketCheck, StickyNote, ArrowRight, Circle, CircleDot, CircleCheck, Play, Check, CalendarDays, Plus, Bell, Save } from 'lucide-vue-next' +import { Star, Folder, Code2, GitCommitHorizontal, ListTodo, TicketCheck, StickyNote, ArrowRight, Circle, CircleDot, CircleCheck, Play, Check, CalendarDays, Plus, Bell, Save, Pencil, Eye } from 'lucide-vue-next' import StatCard from '../components/StatCard.vue' import AIDayPanel from '../components/AIDayPanel.vue' +import MarkdownView from '../components/MarkdownView.vue' import { call } from '../api' import { useAppStore } from '../store' @@ -19,6 +20,8 @@ const noteText = ref('') const noteSavedAt = ref('') const noteDirty = ref(false) const noteSaving = ref(false) +// 编辑/预览切换(预览走 Markdown 渲染),选择记忆在本地 +const notePreview = ref(localStorage.getItem('cc-wb-note-preview') === '1') const messages = ref([]) let noteTimer @@ -76,6 +79,13 @@ function editNote() { clearTimeout(noteTimer) noteTimer = setTimeout(() => { saveNote(false) }, 800) } +// 切到预览前先落盘,避免防抖窗口内的改动丢失 +async function setNotePreview(on) { + if (notePreview.value === on) return + if (on && noteDirty.value) await saveNote(false) + notePreview.value = on + localStorage.setItem('cc-wb-note-preview', on ? '1' : '0') +} async function saveNote(manual = true) { if (noteSaving.value) return noteSaving.value = true @@ -201,6 +211,10 @@ onUnmounted(() => clearTimeout(noteTimer))
{{ t('noteUnsaved') }} {{ t('autoSaved') }} {{ noteSavedAt }} +
+ + +
@@ -221,7 +235,8 @@ onUnmounted(() => clearTimeout(noteTimer))
{{ t('noteEmpty') }}
-