1.0.4 • Published 11 months ago

@keyblade/tinymce-editor-vue2 v1.0.4

Weekly downloads
-
License
-
Repository
-
Last release
11 months ago

tinymce 富文本编辑器

一码游 tinymce 编辑器

前提

必须将 vue 版本升级至 2.7+,按如下文档操作,一般来说只需要升级 vue、及 @vue/cli-xxx 版本即可

升级指南:https://v2.cn.vuejs.org/v2/guide/migration-vue-2-7.html

版本区分

  • 0.x.x - 图片使用第三方 imgpond 组件
  • 1.x.x - 图片使用自己封装的 ProVue2ImageUpload 组件

一、安装

yarn add @keyblade/tinymce-editor-vue2
# 下面两个是编辑器需要的第三方依赖,如原项目中有,可以不用安装,但要注意版本,必须匹配,否则css样式有问题。

# 0.x.x版本 需要安装如下:
yarn add pic-viewer@0.5.1
yarn add imgpond@0.6.2

# 1.x.x版本 需要安装如下:
yarn add @keyblade/pro-components-vue2@1.12.6

二、使用

1.注入组件并设置全局属性(可选)

import TinymceEditor from '@keyblade/tinymce-editor-vue2'

// 0.x.x版本
// 如原项目中,则不需要
import PicViewer from 'pic-viewer'
import 'pic-viewer/dist/style.css'

// 如原项目中,则不需要(0.x.x版本)
import ImgPond from 'imgpond'
import 'imgpond/dist/style.css'

Vue.use(PicViewer, {})
Vue.use(ImgPond, {})

// 1.x.x版本
import { ProVue2ImageUpload } from '@keyblade/pro-components-vue2'
import '@keyblade/pro-components-vue2/es/style.css'
Vue.use(ProVue2ImageUpload)


Vue.use(TinymceEditor, {
  // 图片
  imageUploadOptions: {
    /** 1.x.x版本新增 */
    action: '/api/man/uploadFile/uploadSingleFile',
    handlerResponse: (response: any) => {
      return new Promise((resolve) => {
        resolve({
          success: !!response?.data.fileUrl,
          url: response?.data.fileUrl,
          errorMessage: response?.data.fileUrl ? undefined : response?.msg
        })
      })
    },
    headers: (parameters: { file: File | Blob, extParameters: Record<string, any> }) => {
      console.log(parameters)
      return {}
    },
    data: (parameters: { file: File | Blob, extParameters: Record<string, any> }) => {
      return {}
    },
    /** 1.x.x版本新增 */
    
    handleRequest: (file: File, filename: string, parameters: { extParameters: Record<string, any> }) => {
      return new Promise((resolve) => {
        setTimeout(() => {
          resolve({
            success: true,
            url: 'https://object.gcongo.com.cn/onecode-travel/nonClassic/8cefe379c03b5f39cd8ef725293a3c02/2024/5/1715995588295/d0b5bb458b694130be0c63e2f1d0090b.png'
          })
        }, 1000)
      })
    },
    // 网络图片,将URL传给后端,让后端下载后校验、转换、压缩等操作
    handleRequestByUrl: (url: string, parameters: { extParameters: Record<string, any> }) => {
      return new Promise((resolve) => {
        setTimeout(() => {
          resolve({
            success: true,
            url: 'https://object.gcongo.com.cn/onecode-travel/nonClassic/8cefe379c03b5f39cd8ef725293a3c02/2024/5/1715995588295/d0b5bb458b694130be0c63e2f1d0090b.png'
          })
        }, 1000)
      })
    }
  },
  // 音频
  audioUploadOptions: {
    action: '/api/man/file/upload',
    headers: (parameters: { file: File | Blob, extParameters: Record<string, any> }) => {
      return {
        Appkey: 'dsy_2AeyG8N0CqEC',
        Authorization: 'Bearer eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJNell4T1RnNE1qSmtOVGhuWnpVM05qbGlaamM2WWpFMlpUTTBNak16Tnpkbk16RXhNVEkyTVRJek9VSk1SRnRNTjFZPTQ2VkdDWk84VzFDUSIsImlzcyI6IjM2MTFlY2IyYTY3NzMzZDk1OTI4OWQzYzM4ZjY0Y2Q3Iiwic3ViIjoiQVBQIiwiYXVkIjoiZHN5XzJBZXlHOE4wQ3FFQyIsImlhdCI6MTcxNjY4NzU2MCwiZXhwIjoxNzE3MjkyMzYwfQ.PPhupuc_X0yHB3ex1dVEGVdFyCMmlGYRvZHokVIGcaU'
      }
    },
    data: (parameters: { file: File | Blob, extParameters: Record<string, any> }) => {
      return {}
    },
    handlerResponse: (response: any) => {
      return { url: response.data, errorMessage: response.msg }
    }
  },
  // 视频
  videoUploadOptions: {
    action: '/api/man/file/upload',
    headers: (parameters: { file: File | Blob, extParameters: Record<string, any> }) => {
      return {
        Appkey: 'dsy_2AeyG8N0CqEC',
        Authorization: 'Bearer eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJNell4T1RnNE1qSmtOVGhuWnpVM05qbGlaamM2WWpFMlpUTTBNak16Tnpkbk16RXhNVEkyTVRJek9VSk1SRnRNTjFZPTQ2VkdDWk84VzFDUSIsImlzcyI6IjM2MTFlY2IyYTY3NzMzZDk1OTI4OWQzYzM4ZjY0Y2Q3Iiwic3ViIjoiQVBQIiwiYXVkIjoiZHN5XzJBZXlHOE4wQ3FFQyIsImlhdCI6MTcxNjY4NzU2MCwiZXhwIjoxNzE3MjkyMzYwfQ.PPhupuc_X0yHB3ex1dVEGVdFyCMmlGYRvZHokVIGcaU'
      }
    },
    data: (parameters: { file: File | Blob, extParameters: Record<string, any> }) => {
      return {}
    },
    handlerResponse: (response: any) => {
      return { url: response.data, errorMessage: response.msg }
    }
  }
})

2.使用组件

<template>
  <KbTinymceEditor
    v-model="text"
    :extParameters="{a: 1}"
  />
</template>

<script setup lang="ts">
import { onMounted, ref } from 'vue'

const text = ref<string>('')

onMounted(() => {
  console.log('onMounted')
})
</script>

三、Api

1.全局属性

interface TinymceEditorGlobalOptions {
  /** 富文本编辑器选项 */
  options?: RawEditorOptions;

  /** 图片上传选项 */
  imageUploadOptions?: ImageUploadOptions;
  
  /** imgPond 选项(1.x.x版本废弃) */
  imgPondOptions?: Record<string, any>;

  /** 音频上传选项 */
  audioUploadOptions?: AudioUploadOptions;

  /** 视频上传选项 */
  videoUploadOptions?: VideoUploadOptions;
}

2.组件属性

interface ComponentOptions {
  /** vue2 v-model */
  value?: string
  /** 是否禁止编辑 */
  disabled?: boolean;
  /** 额外参数 */
  extParameters?: Record<string, any>;

  /** 富文本编辑器选项 */
  options?: Partial<RawEditorOptions>

  /** 图片上传选项 */
  imageUploadOptions?: ImageUploadOptions;
  
  /** imgPond选项(1.x.x版本废弃) */
  imgPondOptions?: Record<string, any>;

  /** 音频上传组件选项 */
  audioUploadOptions?: AudioUploadOptions;

  /** 视频上传选项 */
  videoUploadOptions?: VideoUploadOptions;

  /** 初始化完成 */
  initComplete?: (params: { editorIns: Editor }) => void;
}

3.图片上传配置

// 1.x.x版本
export interface ImageUploadOptions {
  /** 上传的文件字段名 - 默认: file */
  name?: string;
  /** 接受上传的文件类型 - 默认: ['jpg', 'jpeg', 'png', 'bmp', 'heif', 'heic', 'gif', 'webp'] */
  accept?: string[];
  /** 是否支持多选文件 - 默认: true */
  multiple?: boolean;
  /** 单次最大限制 - 默认: 10 */
  singleLimit?: number;
  /** 最大允许上传个数 */
  limit?: number;
  /** 是否禁用 - 默认: false */
  disabled?: boolean;
  /** 隐藏内置上传文件之前的loading效果 - 默认: false */
  hideInnerBeforeUploadLoading?: boolean;
  /** 校验选项 */
  checkOptions?: ImageUploadCheckOptions;
  /** 压缩选项 */
  compressorOptions?: ImageUploadCompressorOptions;
  /** 剪裁选项 */
  cropOptions?: ImageUploadCropOptions;

  /** 上传地址(启用必传) */
  action?: string;
  /** 请求头 */
  headers?: (parameters: { file: File | Blob | undefined, extParameters?: Record<string, any> }) => Record<string, any>;
  /** 额外请求体 */
  data?: (parameters: { file: File | Blob | undefined, extParameters?: Record<string, any> }) => Record<string, any>;
  /** 响应处理(启用必传) */
  handlerResponse?: (response: any) => { success: boolean; url?: string; errorMessage?: string }
  /** 图片上传请求处理(图片粘贴、复制时调用) */
  handleRequest?: (file: File, filename: string, options?: {
    extParameters?: Record<string, any>
  }) => Promise<{success: boolean; url?: string; errorMessage?: string}>;
  /** 图片URL上传请求处理(图片粘贴、复制时调用,前端跨域,交给后端处理) */
  handleRequestByUrl?: (url: string, options?: {
    extParameters?: Record<string, any>
  }) => Promise<{success: boolean; url?: string; errorMessage?: string}>;
}

// 0.x.x版本
export interface ImageUploadOptions {
  /** 图片上传组件最大数量 */
  maxCount?: number;
  /** 图片上传组件下方文字 */
  tipText?: string;
  /** 图片最大值(单位M,主要用于错误提示) */
  maxSize?: number;
  /** 图片允许的后缀类型(小写,如: png、jpg) */
  allowedType?: string[];
  /** 图片最小宽度 */
  minWidth?: number;
  /** 图片最小高度 */
  minHeight?: number;
  /** 图片最大宽度 */
  maxWidth?: number;
  /** 图片最大高度 */
  maxHeight?: number;
  /** 图片上传请求处理 */
  handleRequest?: (file: File, filename: string, options?: {
    extParameters?: Record<string, any>
  }) => Promise<{success: boolean; url?: string; errorMessage?: string}>;
  /** 图片URL上传请求处理(前端跨域,交给后端处理) */
  handleRequestByUrl?: (url: string, options?: {
    extParameters?: Record<string, any>
  }) => Promise<{success: boolean; url?: string; errorMessage?: string}>;
}

4.视频上传配置

export interface VideoUploadOptions {
  /** 是否启用 */
  enable?: boolean;
  /** 最大尺寸(M) */
  maxSize?: number;
  /** 允许的后缀类型(小写,如: mp4) */
  allowedType?: string[];
  /** 文件接收的类型 */
  accept?: string;
  /** 上传地址(启用必传) */
  action?: string;
  /** 请求头 */
  headers?: (parameters: { file: File | Blob, extParameters?: Record<string, any> }) => Record<string, any>;
  /** 额外请求体 */
  data?: (parameters: { file: File | Blob, extParameters?: Record<string, any> }) => Record<string, any>;
  /** 上传之前回调结束(开始调用上传接口) */
  beforeUploadEnd?: (file: File | Blob) => void
  /** 响应处理(启用必传) */
  handlerResponse?: (response: any) => { url?: string; errorMessage?: string }
}

5.音频上传配置

export interface AudioUploadOptions {
  /** 是否启用 */
  enable?: boolean;
  /** 最大尺寸(M) */
  maxSize?: number;
  /** 允许的后缀类型(小写,如: mp4) */
  allowedType?: string[];
  /** 文件接收的类型 */
  accept?: string;
  /** 上传地址(启用必传) */
  action?: string;
  /** 请求头 */
  headers?: (parameters: { file: File | Blob, extParameters?: Record<string, any> }) => Record<string, any>;
  /** 额外请求体 */
  data?: (parameters: { file: File | Blob, extParameters?: Record<string, any> }) => Record<string, any>;
  /** 上传之前回调结束(开始调用上传接口) */
  beforeUploadEnd?: (file: File | Blob) => void
  /** 响应处理(启用必传) */
  handlerResponse?: (response: any) => { url?: string; errorMessage?: string }
}
1.0.2

11 months ago

0.0.12-alpha.17

1 year ago

1.0.1

12 months ago

0.0.12-alpha.18

1 year ago

1.0.0

12 months ago

0.0.12-alpha.15

1 year ago

0.0.12-alpha.16

1 year ago

0.0.12-alpha.57

1 year ago

0.0.12-alpha.13

1 year ago

0.0.12-alpha.14

1 year ago

0.0.12-alpha.55

1 year ago

0.0.12-alpha.11

1 year ago

0.0.12-alpha.56

1 year ago

0.0.12-alpha.12

1 year ago

1.0.4

11 months ago

0.0.12-alpha.19

1 year ago

1.0.3

11 months ago

0.0.12-alpha.20

1 year ago

0.0.12-alpha.21

1 year ago

0.0.12-alpha.48

1 year ago

0.0.12-alpha.49

1 year ago

0.0.12-alpha.46

1 year ago

0.0.12-alpha.47

1 year ago

0.0.12-alpha.44

1 year ago

0.0.12-alpha.45

1 year ago

0.1.0

12 months ago

0.1.2

11 months ago

0.1.1

12 months ago

0.0.12-alpha.53

1 year ago

0.0.12-alpha.54

1 year ago

0.0.12-alpha.10

1 year ago

0.0.12-alpha.51

1 year ago

0.0.12-alpha.52

1 year ago

0.0.12-alpha.50

1 year ago

0.0.12-alpha.39

1 year ago

0.0.12-alpha.37

1 year ago

0.0.12-alpha.38

1 year ago

0.0.12-alpha.35

1 year ago

0.0.12-alpha.36

1 year ago

0.0.12-alpha.33

1 year ago

0.0.12-alpha.34

1 year ago

0.0.12-alpha.43

1 year ago

0.0.12-alpha.40

1 year ago

0.0.12-alpha.41

1 year ago

0.0.12-alpha.28

1 year ago

0.0.12-alpha.29

1 year ago

0.0.12-alpha.26

1 year ago

0.0.12-alpha.27

1 year ago

0.0.12-alpha.24

1 year ago

0.0.12-alpha.25

1 year ago

0.0.13

12 months ago

0.0.12-alpha.22

1 year ago

0.0.12-alpha.23

1 year ago

0.0.12-alpha.9

1 year ago

0.0.12-alpha.31

1 year ago

0.0.12-alpha.32

1 year ago

0.0.12-alpha.30

1 year ago

0.0.12-alpha.7

1 year ago

0.0.12-alpha.8

1 year ago

0.0.12-alpha.3

1 year ago

0.0.12-alpha.2

1 year ago

0.0.12-alpha.6

1 year ago

0.0.12-alpha.4

1 year ago

0.0.11

1 year ago

0.0.10

1 year ago

0.0.9-alpha.1

1 year ago

0.0.8-alpha.2

1 year ago

0.0.8-alpha.1

1 year ago

0.0.6-alpha.1

1 year ago

0.0.7

1 year ago

0.0.6

1 year ago

0.0.5-alpha.6

1 year ago

0.0.5-alpha.5

1 year ago

0.0.5-alpha.4

1 year ago

0.0.5-alpha.3

1 year ago

0.0.5-alpha.2

1 year ago

0.0.5-alpha.1

1 year ago

0.0.4

1 year ago

0.0.3

1 year ago

0.0.2

1 year ago

0.0.1

1 year ago