1
0
mirror of https://github.com/sahadev/vue-component-creater-ui.git synced 2025-06-08 14:34:05 +08:00

update: 调出代码展示框

This commit is contained in:
shangbin 2021-12-06 19:03:30 +08:00
parent d592b920e9
commit 870b865df0
5 changed files with 32 additions and 35 deletions

23
package-lock.json generated
View File

@ -3912,6 +3912,15 @@
"resolved": "https://r.cnpmjs.org/codemirror/download/codemirror-5.63.3.tgz", "resolved": "https://r.cnpmjs.org/codemirror/download/codemirror-5.63.3.tgz",
"integrity": "sha1-lwQqJCAn/gyHwJs2vAGTHTe3ZSc=" "integrity": "sha1-lwQqJCAn/gyHwJs2vAGTHTe3ZSc="
}, },
"codemirror-editor-vue3": {
"version": "0.2.4",
"resolved": "https://rg.cnpmjs.org/codemirror-editor-vue3/download/codemirror-editor-vue3-0.2.4.tgz",
"integrity": "sha1-oS9YvwWMp74lCK/jW45EiguknAo=",
"requires": {
"codemirror": "^5.62.3",
"diff-match-patch": "^1.0.5"
}
},
"collection-visit": { "collection-visit": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://r.cnpmjs.org/collection-visit/download/collection-visit-1.0.0.tgz", "resolved": "https://r.cnpmjs.org/collection-visit/download/collection-visit-1.0.0.tgz",
@ -10745,11 +10754,6 @@
} }
} }
}, },
"prismjs": {
"version": "1.25.0",
"resolved": "https://r.cnpmjs.org/prismjs/download/prismjs-1.25.0.tgz",
"integrity": "sha1-b4It8b2tllc0sxCzFaIzFc+Zl1Y="
},
"process": { "process": {
"version": "0.11.10", "version": "0.11.10",
"resolved": "https://r.cnpmjs.org/process/download/process-0.11.10.tgz", "resolved": "https://r.cnpmjs.org/process/download/process-0.11.10.tgz",
@ -13202,15 +13206,6 @@
"@vue/shared": "3.2.22" "@vue/shared": "3.2.22"
} }
}, },
"vue-codemirror": {
"version": "4.0.6",
"resolved": "https://r.cnpmjs.org/vue-codemirror/download/vue-codemirror-4.0.6.tgz",
"integrity": "sha1-t4a7gNjXYqk6q45G95qBAG8EN8Q=",
"requires": {
"codemirror": "^5.41.0",
"diff-match-patch": "^1.0.0"
}
},
"vue-demi": { "vue-demi": {
"version": "0.12.1", "version": "0.12.1",
"resolved": "https://r.cnpmjs.org/vue-demi/download/vue-demi-0.12.1.tgz", "resolved": "https://r.cnpmjs.org/vue-demi/download/vue-demi-0.12.1.tgz",

View File

@ -29,6 +29,7 @@
"@vue/compat": "^3.2.22", "@vue/compat": "^3.2.22",
"@vue/compiler-sfc": "^3.2.22", "@vue/compiler-sfc": "^3.2.22",
"axios": "^0.21.4", "axios": "^0.21.4",
"codemirror-editor-vue3": "^0.2.4",
"copy-to-clipboard": "^3.3.1", "copy-to-clipboard": "^3.3.1",
"core-js": "^3.6.4", "core-js": "^3.6.4",
"crypto-random-string": "^3.3.0", "crypto-random-string": "^3.3.0",
@ -51,7 +52,6 @@
"object-inspect": "^1.11.0", "object-inspect": "^1.11.0",
"parse-package-name": "^0.1.0", "parse-package-name": "^0.1.0",
"prettier": "^2.4.0", "prettier": "^2.4.0",
"prismjs": "^1.20.0",
"query-string": "^6.13.7", "query-string": "^6.13.7",
"register-service-worker": "^1.6.2", "register-service-worker": "^1.6.2",
"split.js": "^1.6.2", "split.js": "^1.6.2",
@ -59,7 +59,6 @@
"view-design": "^4.3.2", "view-design": "^4.3.2",
"vite": "^2.6.14", "vite": "^2.6.14",
"vue": "^3.2.22", "vue": "^3.2.22",
"vue-codemirror": "^4.0.6",
"vue-nestable": "^2.6.0", "vue-nestable": "^2.6.0",
"vue-router": "^3.4.9", "vue-router": "^3.4.9",
"vuex": "^3.1.2" "vuex": "^3.1.2"

View File

@ -1,11 +1,8 @@
<template> <template>
<el-dialog title="代码预览" v-model="codeDialogVisible" width="70%" top="10vh" :before-close="handleClose" :center=true> <el-dialog title="代码预览" v-model="codeDialogVisible" width="70%" top="10vh" :before-close="handleClose" :center=true>
<pre style="max-height: 60vh;"> <!-- 这里加v-if是因为CodeEditor内部不支持watch数据监测 -->
<code v-html="formatCode"></code> <CodeEditor v-if="codeDialogVisible" style="max-height: 65vh;" ref="codeEditor" :initCode="prettyCode" mode="text/html"></CodeEditor>
</pre> <div style="color: #666; font-size: 12px; text-align:center; margin: 5px;">使用代码前请确认相应的组件库已集成至项目</div>
<div>
<div style="color: #666; font-size: 12px;text-align">使用代码前请确认相应的组件库已集成至项目</div>
</div>
<template v-slot:footer> <template v-slot:footer>
<span> <span>
<el-tooltip effect="dark" content="拷贝" placement="left"> <el-tooltip effect="dark" content="拷贝" placement="left">
@ -22,14 +19,18 @@
<script> <script>
import './prism.css' import './prism.css'
import Prism from "prismjs";
import prettier from "prettier/standalone"; import prettier from "prettier/standalone";
import parserHtml from "prettier/parser-html"; import parserHtml from "prettier/parser-html";
import copy from 'copy-to-clipboard'; import copy from 'copy-to-clipboard';
import { saveAs } from "file-saver"; import { saveAs } from "file-saver";
import CodeEditor from './CodeEditor.vue'
export default { export default {
props: ['rawCode', 'codeDialogVisible'], props: ['rawCode', 'codeDialogVisible'],
components: {
CodeEditor
},
data() { data() {
return { return {
@ -94,10 +95,6 @@ export default {
} }
}, },
formatCode() {
return Prism.highlight(this.prettyCode, Prism.languages.markup, "html");
}
}, },
fillter: {}, fillter: {},
}; };

View File

@ -1,12 +1,12 @@
<template> <template>
<div class="codemirror"> <div class="codemirror">
<codemirror v-model="code" :options="cmOption" @cursorActivity="onCmCursorActivity" @ready="onCmReady" <codemirror v-model:value="code" :options="cmOption" @cursorActivity="onCmCursorActivity" @ready="onCmReady"
@focus="onCmFocus" @blur="onCmBlur" /> @focus="onCmFocus" @blur="onCmBlur" />
</div> </div>
</template> </template>
<script> <script>
import { codemirror } from 'vue-codemirror' import Codemirror from "codemirror-editor-vue3";
// base style // base style
import 'codemirror/lib/codemirror.css' import 'codemirror/lib/codemirror.css'
@ -62,7 +62,7 @@ export default {
name: 'code-editor', name: 'code-editor',
title: 'Mode: text/x-vue & Theme: monokai', title: 'Mode: text/x-vue & Theme: monokai',
components: { components: {
codemirror Codemirror
}, },
computed: { computed: {
code: { code: {
@ -74,6 +74,12 @@ export default {
} }
} }
}, },
watch: {
initCode(){
this.codeStore = this.initCode;
}
},
data() { data() {
return { return {
codeStore: this.initCode, codeStore: this.initCode,

View File

@ -1,7 +1,7 @@
<template> <template>
<el-dialog title="JS逻辑编辑" v-model="codeDialogVisible" width="70%" top="10vh" :before-close="handleClose" <el-dialog title="JS逻辑编辑" v-model="codeDialogVisible" width="70%" top="10vh" :before-close="handleClose"
:center=true> :center=true>
<!-- <CodeEditor style="max-height: 65vh;" ref="codeEditor" :initCode="code" mode="text/javascript"></CodeEditor> --> <CodeEditor style="max-height: 65vh;" ref="codeEditor" :initCode="code" mode="text/javascript"></CodeEditor>
<div style="text-align:center;padding: 10px;"> <div style="text-align:center;padding: 10px;">
<el-button type="primary" @click="onSave">确认修改</el-button> <el-button type="primary" @click="onSave">确认修改</el-button>
@ -14,13 +14,13 @@
<script> <script>
import dedent from 'dedent' import dedent from 'dedent'
// import CodeEditor from './CodeEditor.vue' import CodeEditor from './CodeEditor.vue'
export default { export default {
props: ['codeDialogVisible'], props: ['codeDialogVisible'],
emits: ['saveJSCode'], emits: ['saveJSCode', 'update:codeDialogVisible'],
components: { components: {
// CodeEditor CodeEditor
}, },
data() { data() {
@ -89,7 +89,7 @@ export default {
// //
}, },
handleClose() { handleClose() {
// this.$emit("update:codeDialogVisible", false); this.$emit("update:codeDialogVisible", false);
}, },
onSave() { onSave() {
const code = this.$refs.codeEditor.getEditorCode(); const code = this.$refs.codeEditor.getEditorCode();