update src/components/Editor/index.vue.

更新编辑器wangeditor 4.7.15 至 5.1.1
This commit is contained in:
‭‭胖就胖呗 2022-06-21 02:14:59 +00:00 committed by 不做码农
parent 2a3916571d
commit 0e89db757c

View File

@ -1,74 +1,135 @@
<template> <template>
<div class="editor-container"> <div style="border: 1px solid #ccc">
<div :id="id"></div> <Toolbar style="border-bottom: 1px solid #ccc" :editor="editorRef" :defaultConfig="toolbarConfig" :mode="mode" />
</div> <Editor
style="height: 500px; overflow-y: hidden"
v-model="valueHtml"
:defaultConfig="editorConfig"
:mode="mode"
@onCreated="handleCreated"
@onChange="handleChange" />
</div>
</template> </template>
<script> <script>
import { toRefs, reactive, onMounted, watch, defineComponent } from 'vue'; import '@wangeditor/editor/dist/css/style.css' // css
import wangeditor from 'wangeditor'; import { onBeforeUnmount, ref, shallowRef } from 'vue'
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
import { getToken } from '@/utils/auth'
import useUserStore from '@/store/modules/user'
export default {
components: { Editor, Toolbar },
props: {
placeholder: {
type: String,
default: () => '请输入内容',
},
modelValue: String,
},
setup(props, { emit }) {
const editorRef = shallowRef()
const valueHtml = ref(props.modelValue)
const toolbarConfig = {}
const editorConfig = {
MENU_CONF: {},
placeholder: props.placeholder,
}
//
editorConfig.MENU_CONF['uploadImage'] = {
server: import.meta.env.VITE_APP_BASE_API + '/common/UploadFile',
// form-data fieldName 'wangeditor-uploaded-image'
fieldName: 'file',
// 2M
maxFileSize: 1 * 1024 * 1024, // 1M
// 100
maxNumberOfFiles: 10,
// ['image/*'] []
allowedFileTypes: ['image/*'],
// meta url false
metaWithUrl: false,
// http header
headers: {
Authorization: 'Bearer ' + getToken(),
userid: useUserStore().userId,
},
// cookie false
withCredentials: true,
// 10
timeout: 5 * 1000, // 5
//
customInsert(res, insertFn) {
;-(
// res url alt href
insertFn(res.data.url)
)
},
}
//
editorConfig.MENU_CONF['uploadVideo'] = {
server: import.meta.env.VITE_APP_BASE_API + '/common/UploadFile',
// form-data fieldName 'wangeditor-uploaded-video'
fieldName: 'file',
export default defineComponent({ // 10M
name: 'wngEditor', maxFileSize: 5 * 1024 * 1024, // 5M
props: {
// id // 5
id: { maxNumberOfFiles: 3,
type: String,
default: () => 'wangeditor', // ['video/*'] []
}, allowedFileTypes: ['video/*'],
//
isDisable: { // meta url false
type: Boolean, metaWithUrl: false,
default: () => false,
}, // http header
// placeholder headers: {
placeholder: { Authorization: 'Bearer ' + getToken(),
type: String, userid: useUserStore().userId,
default: () => '请输入内容', },
},
// // cookie false
// withCredentials: true,
// https://v3.cn.vuejs.org/guide/migration/v-model.html#%E8%BF%81%E7%A7%BB%E7%AD%96%E7%95%A5 // 30
modelValue: String, timeout: 15 * 1000, // 15
}, //
setup(props, { emit }) { customInsert(res, insertFn) {
const state = reactive({ ;-(
editor: null, // res url alt href
}); insertFn(res.data.url)
// )
// https://doc.wangeditor.com/ },
const initWangeditor = () => { }
state.editor = new wangeditor(`#${props.id}`); onBeforeUnmount(() => {
state.editor.config.zIndex = 1; const editor = editorRef.value
state.editor.config.placeholder = props.placeholder; if (editor == null) return
state.editor.config.uploadImgShowBase64 = true; editor.destroy()
state.editor.config.showLinkImg = false; })
onWangeditorChange(); const handleCreated = (editor) => {
state.editor.create(); editorRef.value = editor
state.editor.txt.html(props.modelValue); }
props.isDisable ? state.editor.disable() : state.editor.enable(); const handleChange = (editor) => {
}; emit('update:modelValue', editor.getHtml())
// }
const onWangeditorChange = () => { watch(
state.editor.config.onchange = (html) => { () => props.modelValue,
emit('update:modelValue', html); (value) => {
}; const editor = editorRef.value
}; if (value == undefined) {
// editor.clear()
onMounted(() => { return
initWangeditor(); }
}); valueHtml.value = value;
// },
// https://gitee.com/lyt-top/vue-next-admin/issues/I4LM7I )
watch( return {
() => props.modelValue, editorRef,
(value) => { valueHtml,
state.editor.txt.html(value); mode: 'default',
} toolbarConfig,
); editorConfig,
return { handleCreated,
...toRefs(state), handleChange,
}; }
}, },
}); }
</script> </script>