feat: 优化二次打开编辑器的体验

This commit is contained in:
Frankie Huang 2025-04-09 02:11:37 +08:00
parent 85bb507f98
commit 33e1a79ad2
3 changed files with 50 additions and 11 deletions

View File

@ -16,12 +16,25 @@ async function greet() {
} }
const markdownRef = ref(null); const markdownRef = ref(null);
const markdownCode = ref("# Hello Markdown")
// localStorage imageUploadURL // localStorage imageUploadURL
const imageUploadURLOfEditor = ref(localStorage.getItem('imageUploadURLOfEditor') || "") const imageUploadURLOfEditor = ref(localStorage.getItem('imageUploadURLOfEditor') || "")
function changeImageUploadURL(newImageUploadURL) { function changeImageUploadURL(newImageUploadURL) {
console.log("new imageUploadURL: ", newImageUploadURL) console.log("new imageUploadURL: ", newImageUploadURL)
localStorage.setItem('imageUploadURLOfEditor', newImageUploadURL) localStorage.setItem('imageUploadURLOfEditor', newImageUploadURL)
} }
async function initMarkdownEditor() {
if (currentFilePath.value.length > 0) {
try {
markdownCode.value = await readTextFile(currentFilePath.value)
loadingCurrentFile.value = true
Message.success('已读取文件内容,并加载到编辑器中:' + currentFilePath.value);
} catch (err) {
Message.error('文件读取失败:' + err);
}
}
markdownRef.value.initEditor()
}
// markdown // markdown
function reloadEditorHeight() { function reloadEditorHeight() {
markdownRef.value.resetHeight(window.innerHeight) markdownRef.value.resetHeight(window.innerHeight)
@ -37,8 +50,6 @@ const handleWindowResize = () => {
reloadEditorHeight() reloadEditorHeight()
reloadEditorWidth() reloadEditorWidth()
} }
onMounted(() => window.addEventListener('resize', handleWindowResize))
onUnmounted(() => window.removeEventListener('resize', handleWindowResize))
// //
const split = ref(0.2) const split = ref(0.2)
@ -76,24 +87,29 @@ function showFileTree(treeData) {
// <FolderTree> currentFilePath // <FolderTree> currentFilePath
// currentFilePath MarkdownEditor // currentFilePath MarkdownEditor
const currentFilePath = ref(""); const currentFilePath = ref(localStorage.getItem('currentSelectedFilePath') || "");
const loadingCurrentFile = ref(true); const loadingCurrentFile = ref(false);
async function loadFileContent(fileNodeData) { async function fileSelected(fileNodeData) {
console.log(fileNodeData) console.log(fileNodeData)
const filePath = fileNodeData.path const filePath = fileNodeData.path
currentFilePath.value = filePath localStorage.setItem('currentSelectedFilePath', filePath)
loadingCurrentFile.value = true
await readFileContent(filePath) await readFileContent(filePath)
} }
async function readFileContent(filePath) { async function readFileContent(filePath) {
try { try {
markdownRef.value.setMarkdownCode(await readTextFile(filePath)) markdownRef.value.setMarkdownCode(await readTextFile(filePath))
currentFilePath.value = filePath
loadingCurrentFile.value = true
Message.success('已读取文件内容,并加载到编辑器中:' + filePath); Message.success('已读取文件内容,并加载到编辑器中:' + filePath);
} catch (err) { } catch (err) {
Message.error('文件读取失败:' + err); Message.error('文件读取失败:' + err);
} }
} }
async function writeFileContent() { async function writeFileContent() {
//
if (currentFilePath.value.length == 0) {
return;
}
try { try {
// //
if (!loadingCurrentFile.value) { if (!loadingCurrentFile.value) {
@ -104,6 +120,14 @@ async function writeFileContent() {
Message.error('文件更新失败:' + err); Message.error('文件更新失败:' + err);
} }
} }
onMounted(() => {
window.addEventListener('resize', handleWindowResize);
initMarkdownEditor();
})
onUnmounted(() => {
window.removeEventListener('resize', handleWindowResize);
})
</script> </script>
<template> <template>
@ -114,7 +138,7 @@ async function writeFileContent() {
<SelectFolder :class="hiddenSplitRight" :rootPath="rootPathOfFolderTree" <SelectFolder :class="hiddenSplitRight" :rootPath="rootPathOfFolderTree"
@update:rootPath="changeRootPath" @folder-selected="showFileTree" /> @update:rootPath="changeRootPath" @folder-selected="showFileTree" />
<FolderTree :class="hiddenSplitRight" :treeData="folderTreeData" :expandLevel="1" <FolderTree :class="hiddenSplitRight" :treeData="folderTreeData" :expandLevel="1"
:specifyFileSuffix="['md']" @file-selected="loadFileContent" /> :selectedNode="[currentFilePath]" :specifyFileSuffix="['md']" @file-selected="fileSelected" />
</div> </div>
</template> </template>
<template #trigger> <template #trigger>
@ -122,8 +146,8 @@ async function writeFileContent() {
</template> </template>
<template #right> <template #right>
<div ref="splitRight" class="split-right"> <div ref="splitRight" class="split-right">
<MarkdownEditor ref="markdownRef" width="100%" height="100%" markdownCode="# Hello Markdown" <MarkdownEditor ref="markdownRef" width="100%" height="100%" :autoInit="false"
:imageUpload="true" :imageUploadURL="imageUploadURLOfEditor" :markdownCode="markdownCode" :imageUpload="true" :imageUploadURL="imageUploadURLOfEditor"
:imageUploadURLChange="changeImageUploadURL" :onload="reloadEditorHeight" :imageUploadURLChange="changeImageUploadURL" :onload="reloadEditorHeight"
:onfullscreenExit="handleWindowResize" @update:markdownCode="writeFileContent" /> :onfullscreenExit="handleWindowResize" @update:markdownCode="writeFileContent" />
</div> </div>

View File

@ -22,6 +22,11 @@ export default {
}], }],
}, },
}, },
selectedNode: {
type: Array,
required: false,
default: [],
},
expandLevel: { expandLevel: {
type: Number, type: Number,
required: false, required: false,
@ -87,6 +92,7 @@ export default {
expand: (allowExpand && nodeData.directory) ? true : false, expand: (allowExpand && nodeData.directory) ? true : false,
// //
path: nodeData.path, path: nodeData.path,
selected: this.selectedNode.includes(nodeData.path),
} }
if (nodeData.directory) { if (nodeData.directory) {
let childrenRenderData = [] let childrenRenderData = []

View File

@ -15,6 +15,13 @@ let editorClient = defaultEditorValue;
export default { export default {
name: 'MarkdownEditor', name: 'MarkdownEditor',
props: { props: {
// initEditor
// false
autoInit: {
type: Boolean,
required: false,
default: true
},
// markdown // markdown
markdownCode: { markdownCode: {
type: String, type: String,
@ -78,7 +85,9 @@ export default {
} }
}, },
mounted() { mounted() {
this.initEditor() if (this.autoInit) {
this.initEditor()
}
// markdown,, // markdown,,
// setTimeout(() => { // setTimeout(() => {
// this.initEditor() // this.initEditor()