From c1be93739d79bc4c257be42a34e82150af5b2f23 Mon Sep 17 00:00:00 2001 From: Miao_Spring <539943419@qq.com> Date: Tue, 25 Mar 2025 13:24:17 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E6=96=87=E7=AB=A0?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E5=8A=A0=E8=BD=BD=E8=A1=A8=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/codeMirror.vue | 155 ++++++++++++++++++++-------------- components/markdownRender.vue | 73 ++++++++-------- pages/posts.vue | 4 +- pages/posts/index.vue | 4 +- pages/posts/post-[id].vue | 51 +++-------- utils/getPost.ts | 2 +- utils/html2VNode.ts | 16 ++-- 7 files changed, 157 insertions(+), 148 deletions(-) diff --git a/components/codeMirror.vue b/components/codeMirror.vue index c09d984..96583c7 100644 --- a/components/codeMirror.vue +++ b/components/codeMirror.vue @@ -2,9 +2,13 @@
- CodeMirror + {{ props.type ?? 'CodeMirror' }}
+
+ 复制 +
{{ show ? '收起' : '展开' }}
@@ -35,7 +39,7 @@ const cmRootRef = ref() const isLoading = ref(true) const wrapperClass = computed(() => { - return ['cm-rander-wrapper', props.inline === true ? 'cm-rander-wrapper-inline' : ''] + return ['cm-rander-wrapper', props.inline === true ? 'cm-rander-wrapper-inline' : ''] }) const rows = computed(() => { @@ -50,60 +54,65 @@ const rows = computed(() => { }) const useLangExtensions = async () => { - const ext = props.type - switch (ext) { - case 'js': - case 'jsx': - case 'ts': - case 'tsx': - const { javascript } = await import('@codemirror/lang-javascript') - return [ - javascript({ - jsx: ext.substring(2, 3) === 'x', - typescript: ext.substring(0, 2) === 'js' - }) - ] - break - case 'css': - case 'scss': - const { sass } = await import('@codemirror/lang-sass') - return [sass()] - break - case 'html': - const { html } = await import('@codemirror/lang-html') - return [html()] - break - case 'py': - const { python } = await import('@codemirror/lang-python') - return [python()] - break - case 'go': - const { go } = await import('@codemirror/lang-go') - return [go()] - break - case 'json': - const { json } = await import('@codemirror/lang-json') - return [json()] - break - case 'md': - const { markdown } = await import('@codemirror/lang-markdown') - return [markdown()] - break - case 'yaml': - const { yaml } = await import('@codemirror/lang-yaml') - return [yaml()] - break - case 'vue': - const { vue } = await import('@codemirror/lang-vue') - return [vue()] - break - case 'xml': - const { xml } = await import('@codemirror/lang-xml') - return [xml()] - break - default: - return [] - } + const ext = props.type + switch (ext) { + case 'js': + case 'jsx': + case 'ts': + case 'tsx': + const { javascript } = await import('@codemirror/lang-javascript') + return [ + javascript({ + jsx: ext.substring(2, 3) === 'x', + typescript: ext.substring(0, 2) === 'js' + }) + ] + break + case 'css': + case 'scss': + const { sass } = await import('@codemirror/lang-sass') + return [sass()] + break + case 'html': + const { html } = await import('@codemirror/lang-html') + return [html()] + break + case 'py': + const { python } = await import('@codemirror/lang-python') + return [python()] + break + case 'go': + const { go } = await import('@codemirror/lang-go') + return [go()] + break + case 'json': + const { json } = await import('@codemirror/lang-json') + return [json()] + break + case 'md': + const { markdown } = await import('@codemirror/lang-markdown') + return [markdown()] + break + case 'yaml': + const { yaml } = await import('@codemirror/lang-yaml') + return [yaml()] + break + case 'vue': + const { vue } = await import('@codemirror/lang-vue') + return [vue()] + break + case 'xml': + const { xml } = await import('@codemirror/lang-xml') + return [xml()] + break + default: + return [] + } +} + +const copyCode = () => { + navigator.clipboard.writeText(props.data) + ElMessage.success('复制成功') } let cm: EditorView @@ -141,14 +150,17 @@ onBeforeUnmount(() => {