2.0.3 • Published 1 month ago

@qingbing/ts-v3-editor v2.0.3

Weekly downloads
-
License
MIT
Repository
-
Last release
1 month ago

Editor 插件介绍

1. 概要说明

1.1 地址

1.2 插件描述

vite + ts + vue3 技术,以 @wangeditor/editor 为基础, 二次封装的在线富文本编辑器

1.3 重要依赖

  • @qingbing/ts-utils: ^2.0.15
  • @qingbing/ts-v3-element-plus: ^2.1.3
  • @wangeditor/editor: ^5.1.23
  • @wangeditor/editor-for-vue: ^5.1.12
  • element-plus: ^2.6.2
  • vue: ^3.4.21

1.4 插件安装

# yarn 安装
yarn add @qingbing/ts-v3-editor

# npm 安装
npm i @qingbing/ts-v3-editor

2. 包说明

2.1 属性说明

属性名类型是否必需默认值意义
modelValueString-编辑器的初始值
showHtmlBooleanfalse是否显示组件自定义的html源代码功能
modeString'simple'控制编辑器工具栏按钮的模式: mini, simple, default, all
heightString'300px'编辑区域的高度
toolbarConfObject{}工具栏配置, 参考 @wangeditor/editor 的配置
editorConfObject{ placeholder: "请输入内容..." }编辑器配置, 参考 @wangeditor/editor 的配置
editorEventsObject{}编辑器触发事件, 参考 @wangeditor/editor 的配置
uploadImageServerString""图片上传服务地址,控制上传图片工具是否有效
uploadImageUseInsertBooleantrue是否使用当前插件的上传格式,否则使用 @wangeditor/editor 的返回格式
uploadImageObject{}图片上传配置, 会和 uploadImageServer, uploadImageUseInsert 进行整合
uploadVideoServerString""视频上传服务地址,控制上传视频工具是否有效
uploadVideoUseInsertBooleantrue是否使用当前插件的上传格式,否则使用 @wangeditor/editor 的返回格式
uploadVideoObject{}视频上传配置, 会和 uploadVideoServer, uploadVideoUseInsert 进行整合

2.1.1 toolbarConf 重要属性说明

属性类型默认值说明
toolbarKeysArray参考 @wangeditor/editor 官网重新配置工具栏
insertKeysObject{}在当前 toolbarKeys 的基础上继续插入新菜单,如自定义扩展的菜单
excludeKeysArray[]在当前 toolbarKeys 的基础上排除某些菜单
modalAppendToBodyBoolean参考 @wangeditor/editor 官网菜单弹出的 modal 添加到 body 下,并自定义 modal 的定位和其他样式

2.1.2 editorConf 重要属性说明

属性类型默认值说明
placeholderstring'Type here...'编辑器 placeholder 提示
readOnlybooleanfalse配置编辑器是否只读, 可通过 editor.enable() 和 editor.disable() 进行切换
autoFocusbooleantrue编辑器默认是否 focus
scrollbooleantrue编辑器是否支持滚动
maxLengthnumber0配置编辑器的 maxlength, 无特殊需求,慎用,耗资源,易卡顿
onMaxLength(editor: IDomEditor)=>voidxxx配置编辑器的 maxlength, 无特殊需求,慎用,耗资源,易卡顿

2.1.3 editorEvents 重要属性说明

属性类型说明
onCreated(editor: IDomEditor) => void编辑器创建完毕时的回调函数
onChange(editor: IDomEditor) => void编辑器内容、选区变化时的回调函数
onDestroyed(editor: IDomEditor) => void编辑器销毁时的回调函数。调用 editor.destroy() 即可销毁编辑器
onFocus(editor: IDomEditor) => void编辑器 focus 时的回调函数
onBlur(editor: IDomEditor) => void编辑器 blur 时的回调函数
customPaste(editor: IDomEditor) => void自定义粘贴。可阻止编辑器的默认粘贴,实现自己的粘贴逻辑
customAlert(editor: IDomEditor) => void自定义编辑器 alert

2.2 事件说明

支持 @wangeditor/editor 的事件, 配置上属性 editorEvents 中, 参考 2.1.3 editorEvents 重要属性说明

2.3 实例暴露说明

属性名类型说明
editorIDomEditor当前编辑器
getToolbar()Toolbar获取当前编辑器的工具栏

3. 示例

3.1 全局注册使用

  • 一旦注册, Editor 作为组件全局通用
  • 使用方法参考 3.2 模板组件使用, 去掉组件导入的语句即可
// main.ts
import "@qingbing/ts-v3-editor/dist/style.css"
import { EditorPlugin } from '@qingbing/ts-v3-editor'
app.use(EditorPlugin, {
  name: 'Editor',
  options: {}
})

3.2 模板组件使用

<template>
    <h2>mini</h2>
    <Editor ref="editor-mini" v-model="miniContent" mode="mini" :showHtml="true" />
    <h2>normal</h2>
    <Editor ref="editor-normal" v-model="normalContent" mode="normal" :showHtml="true" />
    <h2>full</h2>
    <Editor ref="editor-full" v-model="fullContent" mode="full" :showHtml="true" />
    <h2>default</h2>
    <Editor ref="editor-default" v-model="defaultContent" mode="default" :showHtml="true" />
    <h2>simple</h2>
    <Editor ref="editor-simple" v-model="simpleContent" mode="simple" :showHtml="true" />
    <hr>
    <button @click="onClick">获取 editor</button>
    <Editor ref="editorRef" v-model="content" :showHtml="true" :editorEvents="events" :uploadImageServer="uploadImageServer"
        :uploadImage="uploadImage" mode="default" />
    <p>{{ content }}</p>
</template>

<script setup lang="ts">
import "@qingbing/ts-v3-editor/dist/style.css"
import type { IDomEditor } from "@wangeditor/editor";
import type { TEditorEvents } from '@qingbing/ts-v3-editor' // 如果注册成了全局组件,这句将不再需要
import { Editor } from '@qingbing/ts-v3-editor' // 如果注册成了全局组件,这句将不再需要
import { Toolbar } from "@wangeditor/editor";
import { ref } from "vue";

const content = ref("what")
const uploadImageServer = 'http://mock.qiyezhu.net/mock/64e35b8e4a2b7b001dd2e4ec/example/upload-image-server'
const uploadImage = {
    headers: {
        'Access-Control-Allow-Origin': '*',
        'Access-Control-Allow-Headers': "Content-Type"
    }
}
const events: TEditorEvents = {
    onBlur(editor) {
        console.log("blur", editor);
    },
    onChange: (editor) => {
        console.log("change", editor);
    }
}
const editorRef = ref({
    editor: "",
    getToolbar: ((): Toolbar | void => { return })
})
const onClick = () => {
    const editor: IDomEditor = editorRef.value.editor as unknown as IDomEditor
    const toolbar: Toolbar = editorRef.value.getToolbar() as Toolbar

    const menuKeys = editor.getAllMenuKeys()
    const toolbarConf = toolbar.getConfig()
    const toolbarMenus = toolbar.getMenus()

    console.log(menuKeys);
    console.log(toolbarConf);
    console.log(toolbarConf.toolbarKeys);
    console.log(toolbarMenus);
}

const miniContent = ref("mini")
const normalContent = ref("normal")
const fullContent = ref("full")
const defaultContent = ref("default")
const simpleContent = ref("simple")
</script>