<div class="tinymce-editor">
<editor v-model="myValue" :init="init" :disabled="disabled" />
</div>
</template>
<script>
import tinymce from 'tinymce/tinymce'
import Editor from '@tinymce/tinymce-vue'
import 'tinymce/themes/silver'
// 编辑器插件plugins
// 更多插件参考:https://www.tiny.cloud/docs/plugins/
import 'tinymce/plugins/image'// 插入上传图片插件
import 'tinymce/plugins/media'// 插入视频插件
import 'tinymce/plugins/table'// 插入表格插件
import 'tinymce/plugins/lists'// 列表插件
import 'tinymce/plugins/wordcount'// 字数统计插件
import 'tinymce/icons/default/icons'
import 'tinymce/icons/default/icons.min.js'
export default {
components: {
Editor
},
props: {
value: {
type: String,
default: ''
},
// 基本路径,默认为空根目录,如果你的项目发布后的地址为目录形式,
// 即abc.com/tinymce,baseUrl需要配置成tinymce,不然发布后资源会找不到
baseUrl: {
type: String,
default: ''
},
disabled: {
type: Boolean,
default: false
},
plugins: {
type: [String, Array],
default: 'lists image media table wordcount'
},
toolbar: {
type: [String, Array],
default: 'undo redo | formatselect | bold italic forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | lists image media table | removeformat'
}
},
data() {
return {
init: {
language_url: process.env.BASE_URL + `/tinymce/langs/zh_CN.js`,
language: 'zh_CN',
skin_url: process.env.BASE_URL + `/tinymce/skins/ui/oxide`,
content_css: process.env.BASE_URL + `/tinymce/skins/content/default/content.css`,
// skin_url: `${this.baseUrl}/tinymce/skins/ui/oxide-dark`, // 暗色系
// content_css: `${this.baseUrl}/tinymce/skins/content/dark/content.css`, // 暗色系
height: 300,
plugins: this.plugins,
toolbar: this.toolbar,
branding: false,
menubar: false,
images_upload_handler: function(blobInfo, success, failure) {
const xhr = new XMLHttpRequest()
xhr.withCredentials = false
xhr.open('POST', process.env.VUE_APP_BASE_API + 'ntocc-tps-api/fileUpload')
xhr.onload = function() {
if (xhr.status !== 200) {
failure('HTTP Error: ' + xhr.status)
return
}
const json = JSON.parse(xhr.responseText)
if (!json || json.status !== 0) {
failure('Invalid JSON: ' + xhr.responseText)
return
}
success(json.data)
}
const formData = new FormData()
formData.append('file', blobInfo.blob(), blobInfo.filename())
xhr.send(formData)
}
},
myValue: this.value
}
},
watch: {
value(newValue) {
this.myValue = newValue
},
myValue(newValue) {
this.$emit('input', newValue)
}
},
mounted() {
tinymce.init({})
},
methods: {
// 添加相关的事件,可用的事件参照文档=> https://github.com/tinymce/tinymce-vue => All available events
clear() {
this.myValue = ''
}
}
}
</script>
import myEditor from "@/components/MyEditor"
<myEditor v-model="form.content" :disabled="false" />
<el-form-item label="新闻内容" prop="content" style="margin-right:15px">
<myEditor v-model="form.content" :disabled="false" />
</el-form-item>