pixel
3 years ago
1 changed files with 84 additions and 44 deletions
@ -1,58 +1,98 @@ |
|||||
<template> |
<template> |
||||
<div class="previewCode"> |
|
||||
<el-tabs v-model="activeName"> |
|
||||
<el-tab-pane :label="key" :name="key" v-for="(item,key) in previewCode" :key="key"> |
|
||||
<div style="background:#fff;padding:0 20px" :id="key"></div> |
|
||||
</el-tab-pane> |
|
||||
</el-tabs> |
|
||||
|
<div class="previewCode"> |
||||
|
<div class="previewCodeTool"> |
||||
|
<p>操作栏:</p> |
||||
|
<el-button @click="selectText">全选</el-button> |
||||
|
<el-button @click="copy">复制</el-button> |
||||
</div> |
</div> |
||||
|
<el-tabs v-model="activeName"> |
||||
|
<el-tab-pane :label="key" :name="key" v-for="(item, key) in previewCode" :key="key"> |
||||
|
<div class="tab-info" :id="key"></div> |
||||
|
</el-tab-pane> |
||||
|
</el-tabs> |
||||
|
</div> |
||||
</template> |
</template> |
||||
|
|
||||
<script> |
<script> |
||||
import marked from "marked" |
|
||||
|
import marked from "marked"; |
||||
import hljs from "highlight.js"; |
import hljs from "highlight.js"; |
||||
// import 'highlight.js/styles/atelier-cave-light.css'; |
// import 'highlight.js/styles/atelier-cave-light.css'; |
||||
import 'highlight.js/styles/atelier-plateau-light.css'; |
|
||||
|
import "highlight.js/styles/atelier-plateau-light.css"; |
||||
export default { |
export default { |
||||
props:{ |
|
||||
previewCode:{ |
|
||||
type:Object, |
|
||||
default(){ |
|
||||
return {} |
|
||||
} |
|
||||
} |
|
||||
|
props: { |
||||
|
previewCode: { |
||||
|
type: Object, |
||||
|
default() { |
||||
|
return {}; |
||||
|
}, |
||||
}, |
}, |
||||
data(){ |
|
||||
return{ |
|
||||
activeName: "", |
|
||||
} |
|
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
activeName: "", |
||||
|
}; |
||||
|
}, |
||||
|
methods: { |
||||
|
selectText() { |
||||
|
const element = document.getElementById(this.activeName); |
||||
|
if (document.body.createTextRange) { |
||||
|
let range = document.body.createTextRange(); |
||||
|
range.moveToElementText(element); |
||||
|
range.select(); |
||||
|
} else if (window.getSelection) { |
||||
|
let selection = window.getSelection(); |
||||
|
let range = document.createRange(); |
||||
|
range.selectNodeContents(element); |
||||
|
selection.removeAllRanges(); |
||||
|
selection.addRange(range); |
||||
|
} else { |
||||
|
alert("none"); |
||||
|
} |
||||
}, |
}, |
||||
mounted(){ |
|
||||
marked.setOptions({ |
|
||||
renderer: new marked.Renderer(), |
|
||||
highlight: function(code) { |
|
||||
return hljs.highlightAuto(code).value; |
|
||||
}, |
|
||||
pedantic: false, |
|
||||
gfm: true, |
|
||||
tables: true, |
|
||||
breaks: false, |
|
||||
sanitize: false, |
|
||||
smartLists: true, |
|
||||
smartypants: false, |
|
||||
xhtml: false |
|
||||
} |
|
||||
); |
|
||||
for(const key in this.previewCode){ |
|
||||
if(this.activeName == ""){ |
|
||||
this.activeName = key |
|
||||
} |
|
||||
document.getElementById(key).innerHTML = marked(this.previewCode[key]) |
|
||||
} |
|
||||
|
copy() { |
||||
|
this.selectText(); |
||||
|
document.execCommand("copy"); |
||||
|
this.$message.success("复制成功"); |
||||
|
}, |
||||
|
}, |
||||
|
mounted() { |
||||
|
marked.setOptions({ |
||||
|
renderer: new marked.Renderer(), |
||||
|
highlight: function (code) { |
||||
|
return hljs.highlightAuto(code).value; |
||||
|
}, |
||||
|
pedantic: false, |
||||
|
gfm: true, |
||||
|
tables: true, |
||||
|
breaks: false, |
||||
|
sanitize: false, |
||||
|
smartLists: true, |
||||
|
smartypants: false, |
||||
|
xhtml: false, |
||||
|
}); |
||||
|
for (const key in this.previewCode) { |
||||
|
if (this.activeName == "") { |
||||
|
this.activeName = key; |
||||
|
} |
||||
|
document.getElementById(key).innerHTML = marked(this.previewCode[key]); |
||||
} |
} |
||||
} |
|
||||
|
}, |
||||
|
}; |
||||
</script> |
</script> |
||||
|
|
||||
<style lang="scss"> |
<style lang="scss"> |
||||
|
|
||||
</style> |
|
||||
|
.previewCode { |
||||
|
.previewCodeTool { |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
padding: 5px 0; |
||||
|
margin-top: -40px; |
||||
|
} |
||||
|
.tab-info { |
||||
|
height: 50vh; |
||||
|
background: #fff; |
||||
|
padding: 0 20px; |
||||
|
overflow-y: scroll; |
||||
|
} |
||||
|
} |
||||
|
</style> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue