Files
cutejava/cutejava-front/src/views/components/dev/CuteYamlEditor.vue
T
odboy 902173a9e9 refactor(front): 重构前端组件和 API
- 更新了多个组件的样式和结构
- 重命名了一些 API 文件
- 添加了新的 API 接口
- 优化了部分代码的可读性和性能
2025-07-23 20:58:15 +08:00

89 lines
2.0 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.
<!--Yaml编辑器 基于-->
<!--<a href="https://github.com/codemirror/CodeMirror" target="_blank">CodeMirror</a>,-->
<!--主题预览地址 <a href="https://codemirror.net/demo/theme.html#idea" target="_blank">Theme</a>-->
<!--</p>-->
<template>
<textarea ref="textarea" />
</template>
<script>
import CodeMirror from 'codemirror'
import 'codemirror/lib/codemirror.css'
// 替换主题这里需修改名称
// 主题预览地址 https://blog.csdn.net/qq_41694291/article/details/106429772
import 'codemirror/theme/darcula.css'
import 'codemirror/mode/yaml/yaml'
export default {
name: 'CuteYamlEditor',
props: {
content: {
type: String,
required: true,
default: ''
},
height: {
type: String,
required: false,
default: '500px'
},
readOnly: {
type: Boolean,
required: false,
default: false
}
},
data() {
return {
editor: false
}
},
watch: {
content(newVal, oldVal) {
const editorValue = this.editor.getValue()
if (newVal !== editorValue) {
this.editor.setValue(newVal)
}
},
height(newVal, oldVal) {
this.editor.setSize('auto', newVal)
}
},
mounted() {
this.editor = CodeMirror.fromTextArea(this.$refs.textarea, {
mode: 'text/x-yaml',
autoRefresh: true,
lineNumbers: true,
lint: true,
lineWrapping: true,
tabSize: 2,
cursorHeight: 1,
// 替换主题这里需修改名称
theme: 'darcula'
})
this.editor.setSize('auto', this.height)
if (this.content) {
this.editor.setValue(this.content)
}
this.editor.setOption('readOnly', this.readOnly)
this.editor.on('change', cm => {
this.$emit('change', cm.getValue())
})
},
methods: {
getValue() {
if (this.editor == null) {
return ''
}
return this.editor.getValue()
},
setValue(val) {
if (this.editor == null) {
return
}
this.editor.setValue(val)
}
}
}
</script>