1
0
mirror of https://github.com/sahadev/vue-component-creater-ui.git synced 2025-06-09 07:22:44 +08:00
2021-04-22 15:11:31 +08:00

119 lines
2.8 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<el-dialog title="代码预览" :visible.sync="codeDialogVisible" width="70%" top="10vh" :before-close="handleClose"
:center=true>
<pre style="max-height: 60vh;">
<code v-html="formatCode"></code>
</pre>
<div>
<center style="color: #666; font-size: 12px;">使用代码前请确认相应的组件库已集成至项目</center>
</div>
<span slot="footer">
<el-tooltip effect="dark" content="拷贝" placement="left">
<img class="round-icon" :src="iconCopy" alt="" @click="copyCheck">
</el-tooltip>
<el-tooltip effect="dark" content="下载" placement="right">
<img class="round-icon" :src="iconDownload" alt="" @click="download">
</el-tooltip>
</span>
</el-dialog>
</template>
<script>
import './prism.css'
import Prism from "prismjs";
import prettier from "prettier/standalone";
import parserHtml from "prettier/parser-html";
import copy from 'copy-to-clipboard';
import { saveAs } from "file-saver";
export default {
props: ['rawCode', 'codeDialogVisible'],
data() {
return {
// 在此自动生成
iconCopy: ("https://static.imonkey.xueersi.com/download/vcc-resource/icon/copy-outline.svg"),
iconDownload: ("https://static.imonkey.xueersi.com/download/vcc-resource/icon/code-download-outline.svg"),
};
},
beforeCreate() { },
created() { },
beforeMount() { },
mounted() { },
beforeUpdate() { },
updated() { },
destoryed() { },
methods: {
// 在此自动生成
request() {
// 网络请求,可选
},
handleClose() {
this.$emit("update:codeDialogVisible", false);
},
copyCheck() {
this.copy();
},
copy() {
if (copy(this.prettyCode)) {
this.$message.success("代码已复制到剪贴板");
} else {
this.$message.error("代码复制有点问题?");
}
},
download() {
let blob = new Blob([this.prettyCode], {
type: "text/plain;charset=utf-8",
});
saveAs(blob, "VueComponent.vue");
},
},
watch: {
codeDialogVisible(newValue) {
if (newValue) {
} else {
}
}
},
computed: {
prettyCode() {
return prettier.format(this.rawCode, {
parser: "html",
plugins: [parserHtml],
vueIndentScriptAndStyle: true,
});
},
formatCode() {
// 代码格式化工具需要赓续为支持Vue的当前prettier对js代码不够友好
return Prism.highlight(this.prettyCode, Prism.languages.markup, "html");
}
},
fillter: {},
};
</script>
<style scoped>
/* 在此自动生成 */
::v-deep .el-dialog__body {
padding: 0 30px !important;
}
.round-icon {
background: #4dba87;
width: 40px;
height: 40px;
border-radius: 20px;
padding: 10px;
margin-left: 10px;
box-sizing: border-box;
}
</style>