123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- <template>
- <div>
- <div style="border: 1px solid #ccc; margin-top: 10px;">
- <Toolbar
- :editor="editorRef"
- :defaultConfig="toolbarConfig"
- :mode="mode"
- style="border-bottom: 1px solid #ccc"
- />
- <Editor
- :defaultConfig="editorConfig"
- :mode="mode"
- v-model="valueHtml"
- style="height: 400px; overflow-y: hidden;"
- @onCreated="handleCreated"
- @onChange="handleChange"
- @onDestroyed="handleDestroyed"
- @onFocus="handleFocus"
- @onBlur="handleBlur"
- @customAlert="customAlert"
- />
- </div>
- <Button icon="md-add" size="small" @click="displayCodeState = !displayCodeState">显示代码视图</Button>
- <div style="margin-top: 10px;" v-if="displayCodeState">
- <textarea v-model="valueHtml" readonly style="width: 100%; height: 200px; outline: none;"></textarea>
- </div>
- </div>
- </template>
- <script>
- import '@wangeditor/editor/dist/css/style.css'
- import { onBeforeUnmount, ref, shallowRef, onMounted } from 'vue'
- import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
- import api from '@/request/apiConfig' //真实接口配置\
- import {compressFileM} from '@/utils/system/uploadCompress.js'
- export default {
- components: { Editor, Toolbar },
- setup() {
- // 编辑器实例,必须用 shallowRef,重要!
- const editorRef = shallowRef()
- // 内容 HTML
- const valueHtml = ref('')
- // 显示代码视图开关
- const displayCodeState = ref(false)
- const toolbarConfig = {}
- const editorConfig = {
- placeholder: '请输入内容...',
- MENU_CONF: {
- // 上传图片配置
- uploadImage: {
- server: api.apiManager + '/manager/images/upload', // 上传图片地址
- timeout: 60 * 1000, // 60s
- fieldName: 'file',
- headers: {'X-AIYANGNIU-SIGNATURE':localStorage.aynUserToken},
- maxFileSize: 10240 * 1024 * 1024, // 10G
- onBeforeUpload(file) {
- return file
- // return false 会阻止上传
- },
- onSuccess(file, res) {
- // console.log('onSuccess', file, res)
- },
- // 编辑器自身原因,无法识别上传成功,放在failed里执行
- onFailed(file, res) {
- },
- onError(file, err, res) {
- alert(err.message)
- },
- customInsert(res, insertFn) {
- insertFn(res.data, '图片', '')
- },
- },
- // 上传视频配置
- uploadVideo:{
- onInsertedVideo(videoNode) {
- console.log('inserted video', videoNode)
- },
- server: api.apiManager + '/manager/images/upload', // 上传图片地址
- timeout: 6000 * 1000, // 6000s
- fieldName: 'file',
- headers: {'X-AIYANGNIU-SIGNATURE':localStorage.aynUserToken},
- maxFileSize: 5120 * 1024 * 1024, // 5G
- onBeforeUpload(file) {
- console.log('onBeforeUpload', file)
- return file // will upload this file
- },
- onSuccess(file, res) {
- console.log('onSuccess', file, res)
- },
- onFailed(file, res) {
- console.log('onFailed', file, res)
- },
- onError(file, err, res) {
- alert(err.message)
- console.error('onError', file, err, res)
- },
- customInsert(res, insertFn) {
- insertFn(res.data, '')
- },
- }
- }
- }
- // 组件销毁时,也及时销毁编辑器,重要!
- onBeforeUnmount(() => {
- const editor = editorRef.value
- if (editor == null) return
- editor.destroy()
- })
- // 编辑器回调函数
- const handleCreated = (editor) => {
- console.log('created', editor);
- editorRef.value = editor // 记录 editor 实例,重要!
- }
- const handleChange = (editor) => {
- // console.log('change:', editor.getHtml());
- }
- const handleDestroyed = (editor) => {
- // console.log('destroyed', editor)
- }
- const handleFocus = (editor) => {
- // console.log('focus', editor)
- }
- const handleBlur = (editor) => {
- // console.log('blur', editor)
- }
- const customAlert = (info, type) => {
- alert(`【自定义提示】${type} - ${info}`)
- }
- // 自动贴入内容
- const customPaste = (editor, event, callback) => {
- console.log('ClipboardEvent 粘贴事件对象',editor, event)
- // 自定义插入内容
- editor.insertText('xxx')
- // 返回值(注意,vue 事件的返回值,不能用 return)
- callback(false) // 返回 false ,阻止默认粘贴行为
- // callback(true) // 返回 true ,继续默认的粘贴行为
- }
- const insertText = () => {
- const editor = editorRef.value
- if (editor == null) return
- editor.insertText('hello world')
- }
- const printHtml = () => {
- const editor = editorRef.value
- if (editor == null) return
- console.log(editor.getHtml())
- }
-
- // 禁用富文本
- const disable = () => {
- const editor = editorRef.value
- if (editor == null) return
- editor.disable()
- }
- return {
- editorRef,
- mode: 'default',
- valueHtml,
- toolbarConfig,
- editorConfig,
- handleCreated,
- handleChange,
- handleDestroyed,
- handleFocus,
- handleBlur,
- customAlert,
- customPaste,
- insertText,
- printHtml,
- disable,
- displayCodeState,
- };
- }
- }
- </script>
|