【Tinymce】富文本编辑器在vue项目中的使用;引入付费格式刷,上传视频、图片

news2024/11/29 10:53:21

引言

富文本编辑器有很多,对比了一下,还是决定用tinymce(号称宇宙最强),基础的插件确实好用,但是一些更好用的插件,比如格式刷等都是高级版(付费),当然也有人说去找不付费的富文本编辑器,那就考虑替换成本了

传送门:
tinymce中文文档

api英文版
本文项目的完整代码

在这里插入图片描述

基础概念&优势:

在这里插入图片描述
如何引入vue直接看文档就行


话不多说,先看效果图:

在这里插入图片描述

预览效果:

在这里插入图片描述

完整配置代码放在传送门&文末

一、如何使用免费格式刷

  • 找到 tinymice 的配置文件,分别在二维数组 pluginstoolbar 安原有格式增加工具单词名 formatpainter

在这里插入图片描述

  • 下载格式刷 js 文件 :传送门

  • 将格式刷文件 (包含下载的目录), 放到如下目录 项目 \public\vendor\dcat-admin\dcat\plugins\tinymce\plugins
    在这里插入图片描述

  • 大功告成:
    在这里插入图片描述

二、上传视频 图片 配置

先看效果:

图片上传
在这里插入图片描述
视频上传
在这里插入图片描述

代码展示:

 // 图片上传
    const example_image_upload_handler = (blobInfo, progress) =>
        new Promise((resolve, reject) => {
            const xhr = new XMLHttpRequest();
            const url = `${process.env.BASE_URL}` + `api/upload/multipartFile`
            xhr.withCredentials = false;
            xhr.open("POST", url);

            xhr.upload.onprogress = (e) => {
                progress((e.loaded / e.total) * 100);
            };
            xhr.onload = () => {
                if (xhr.status === 403) {
                    reject({
                        message: "HTTP错误:" + xhr.status,
                        remove: true
                    });
                    return;
                }

                if (xhr.status < 200 || xhr.status >= 300) {
                    reject("HTTP错误:" + xhr.status);
                    return;
                }

                const json = JSON.parse(xhr.responseText);

                if (!json || typeof json.location != "string") {
                    reject("无效的JSON格式: " + xhr.responseText);
                    return;
                }
                const location = `${process.env.BASE_URL}` + `api/static` + json.location
                // http: //192.168.10.231:8080/static
                // resolve(json.location);
                resolve(location);
            };
            xhr.onerror = () => {
                reject("由于XHR传输错误,图像上传失败。错误代码 " + xhr.status);
            };

            const formData = new FormData();
            formData.append("file", blobInfo.blob(), blobInfo.filename());

            xhr.send(formData);
        });

    const example_file_picker_callback = (callback, value, meta) => {
        if (meta.filetype === "media") {
            const input = document.createElement("input");
            input.setAttribute("type", "file");
            const that = this;
            input.onchange = async function () {
                const file = this.files[0];
                const isValid = await validateVideo(file);
                if (isValid) {
                    var formData = new FormData();
                    formData.append('file', file); // 假设file变量是你的视频文件

                    $.ajax({
                        url: `${process.env.BASE_URL}` + `api/upload/multipartFile`,
                        type: 'POST',
                        data: formData,
                        processData: false,
                        contentType: false,
                        success: function (response) {
                            callback(`${process.env.BASE_URL}` + `api/static` + response.location);
                        },
                        error: function (xhr, status, error) {
                            callback(error);
                        }
                    });
                } else {
                    callback();
                }
            };

            input.click();
        }
    }

三、自定义具体的菜单栏–格式

有一个需求是要去除默认是字体选项(fontfamily)
效果图如下:
在这里插入图片描述
具体配置:

menu: {
            format: {
                title: 'Format',
                // blocks fontfamily
                items: 'bold italic underline strikethrough superscript subscript codeformat | styles fontsize align lineheight | forecolor backcolor | language | removeformat'
            },

        },

四、完整的项目初始化配置

主要要展示 pluginstoolbarmenu
在这里插入图片描述

 tinyMCE.init({
        selector: "#mytextarea", // 选择器,要初始化的textarea的ID
        // 其他配置项
        auto_focus: true,
        branding: false,
        language_url: window.PPATH + "/libs/tinymce/langs/zh_CN.js",
        language: "zh_CN",
        toolbar: true, //工具栏
        menubar: true, //菜单栏
        branding: false, //右下角技术支持
        inline: false, //开启内联模式
        elementpath: false,
        min_height: 400, //最小高度
        max_height: 500, //高度
        skin: "oxide",
        toolbar_sticky: true,
        visualchars_default_state: true, //显示不可见字符
        image_caption: true,
        paste_data_images: true,
        relative_urls: false,
        // remove_script_host : false,
        removed_menuitems: "newdocument", //清除“文件”菜单
        plugins: "formatpainter,lists, advlist,autolink,autoresize,charmap,code,codesample,emoticons,fullscreen,image,media,pagebreak,preview,searchreplace,table,visualchars,wordcount", //依赖lists插件
        toolbar1: "undo redo | blocks | bold italic indent outdent  alignleft aligncenter alignright | bullist numlist ",
        toolbar2: "formatpainter emoticons alignjustif fullscreen  image insertdatetime media  preview  searchreplace textcolor wordcount",

        menu: {
            format: {
                title: 'Format',
                // blocks fontfamily
                items: 'bold italic underline strikethrough superscript subscript codeformat | styles fontsize align lineheight | forecolor backcolor | language | removeformat'
            },

        },
         images_upload_handler: example_image_upload_handler,
             // 视频上传----
         file_picker_callback: example_file_picker_callback,
         setup: function (editor) {
  // 省略。。。。
            
        },
       
    });

完整的项目代码:

本文项目的完整代码

综上所述,TinyMCE是一个功能强大、易于集成和高度可定制的富文本编辑器,适用于各种在线编辑场景,如内容管理系统、论坛、博客和电子邮件客户端等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2218635.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

day-69 构成整天的下标对数目 II

思路 根据题意&#xff0c;每个元素可以重复使用&#xff0c;所以只需统计对24取余后值值相同的个数&#xff0c;如当前数字对24取余后是3&#xff0c;那么只需知道取余后为21的元素个数即可知道当前元素可与&#xff0c;多少个元素构成整天的下标的数目 解题过程 从左往右遍历…

数据结构编程实践20讲(Python版)—20并查集

本文目录 20 并查集&#xff08;Union-Find Set&#xff09;S1 说明并查集的定义并查集基本操作并查集优化并查集特点应用领域 S2 示例S3 问题1&#xff1a;朋友圈问题S4 问题2&#xff1a;网络连接恢复问题S5 问题3&#xff1a;随机生成迷宫 往期链接 01 数组02 链表03 栈04 …

023_Layout_and_Containers_in_Matlab界面布局与容器

容器 基于uifigure进行的图形用户界面设计&#xff0c;可以分为以下几种容器类型&#xff1a; 图窗&#xff1a;uifigure布局&#xff1a;uigridlayout面板&#xff1a;uipanel标签页&#xff1a;uitabgroup、uitab 这几个对象除uifigure外相互可以形成嵌套的关系&#xff0…

【新人系列】Python 入门(二):Python IDE 介绍

✍ 个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4dd; 专栏地址&#xff1a;https://blog.csdn.net/newin2020/category_12801353.html &#x1f4e3; 专栏定位&#xff1a;为 0 基础刚入门 Python 的小伙伴提供详细的讲解&#xff0c;也欢迎大佬们…

leetcode.204.计数质数

#中等#枚举 给定整数 n &#xff0c;返回 所有小于非负整数 n 的质数的数量 。 埃氏筛 枚举没有考虑到数与数的关联性&#xff0c;因此难以再继续优化时间复杂度。接下来我们介绍一个常见的算法&#xff0c;该算法由希腊数学家厄拉多塞&#xff08;Eratosthenes&#xff09;提…

Python爬虫:自动化获取商品评论数据

为什么选择Python爬虫API 高效的数据处理&#xff1a;Python的数据处理能力&#xff0c;结合Pandas等库&#xff0c;可以轻松处理和分析大量的评论数据。丰富的库支持&#xff1a;Python拥有丰富的库&#xff0c;如requests用于发送HTTP请求&#xff0c;BeautifulSoup用于解析…

初识MySQL · 数据库

目录 前言&#xff1a; 数据库 简单使用 存储引擎 前言&#xff1a; 本文也是MySQL的第一篇文章了&#xff0c;新的知识点已经出现&#xff0c;怎么能够停止不前&#xff0c;穿越时空……(迪迦奥特曼乱入哈哈哈)。 言归正传&#xff0c;我们在本文的目标有&#xff1a; …

工厂生成中关于WiFi的一些问题

一 背景: 主要做高通和MTK,工厂生成中通过使用adb wifi,因为这样生产效率高并且避免了新机器有划痕,但是也经常碰到adb wifi无法连接的问题,那么是什么原因导致呢? 二 案例 测试步骤: 使用adb wifi连接手机测试工厂case adb usb adb tcpip 5555 adb connect DU…

高效监控系统:Nightingale本地化部署与远程访问指南

文章目录 前言1. Linux 部署Nightingale2. 本地访问测试3. Linux 安装cpolar4. 配置Nightingale公网访问地址5. 公网远程访问Nightingale管理界面6. 固定Nightingale公网地址 前言 本文主要介绍如何在本地Linux系统部署 Nightingale 夜莺监控并结合cpolar内网穿透工具实现远程…

Android组件化、模块化、Catalogs

前言 下载代码-----》码云下载 下载代码-----》github下载 本篇是Android最新的依赖架构设计&#xff0c;gradle版本要8.0以上&#xff0c;代码实现基于8.5.1。好多年开发过程中&#xff0c;我们碰到config.gradle&#xff0c;buildSrc&#xff0c;composing builds等依赖编译…

新款任天堂switch游戏机方案,支持4K60HZ投屏方案,显示器,手柄方案

据传任天堂将推出新的一代的switch掌机&#xff0c;而新款掌机将支持4K60HZ投屏 都2402年了再做1080P确实有点不太象话了 4K60HZ相较于1080P能够提升很多游戏体验&#xff0c;这时不管是HDMI显示器或者是VR眼睛清晰度都会让人舒服很多。 不过新一代的任天堂似乎也在PD协议上…

用作曲的手法写旋律 什么是动机 ​动机扩大 单音重复 移八度

【你怎么还不会写旋律&#xff01;&#xff01;&#xff01;猴子都听的懂的旋律教程来了&#xff01;两分钟让你快速上手&#xff01;】 你怎么还不会写旋律&#xff01;&#xff01;&#xff01;猴子都听的懂的旋律教程来了&#xff01;两分钟让你快速上手&#xff01;_哔哩哔…

同济子豪兄--图的基本表示【斯坦福CS224W图机器学习】

无向图&#xff08;Undirected Graph&#xff09;&#xff1a; 在无向图中&#xff0c;边没有方向&#xff0c;即如果顶点A和顶点B之间有一条边&#xff0c;那么这条边既表示A到B的关系&#xff0c;也表示B到A的关系。换句话说&#xff0c;边是双向的。无向图的边通常用一条线段…

WPF基础权限系统

一.开发环境 VisualStudio 2022NET SDK 8.0Prism 版本 8.1.97Sqlite 二. 功能介绍 WPF 基础权限系统&#xff0c;是一个支持前后端分离设计的 客户端(C/S)项目&#xff0c;该示例项目前端xaml使用UI库 &#xff0c;Material Design Themes UI 来构建用户界面&#xff0c;确保…

Ubuntu如何显示pcl版本

终端输入&#xff1a; apt-cache show libpcl-dev可以看到&#xff0c;Ubuntu20.04&#xff0c;下载的pcl&#xff0c;应该都是1.10版本的

一次性入门三款分布式定时任务调度框架:Quartz、ElasticJob3.0、xxl-job

分布式定时任务调度框架&#xff08;文末有源码&#xff09; 前言1、Quartz1.1 数据库1.2 maven依赖1.3 代码实现1.3.1 创建一个job1.3.1 为job设置trigger 1.4 配置文件1.5 启动、测试1.1 单机1.2 集群 2、ElasticJob2.1 下载zk2.2 新建三个类型的作业2.3 配置文件2.4 启动项目…

Windows下配置Nginx和PHP

之前在Windows开发php项目用的是phpstudy&#xff0c;好用的很。但是phpstudy好久没有更新了&#xff0c;感觉PHP像没有人再用了一样。但是PHP拿来开发小系统&#xff0c;还是很高效的&#xff0c;今天记录如何在Windows环境下配置Nginx和PHP。 1. 配置nginx Nginx软件下载解压…

基于Springboot+Vue的宠物管理系统(含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 这个系…

实现双向链表的增删改查

头文件 #pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <stdbool.h> typedef int LTDataType; typedef struct ListNode {LTDataType data;struct ListNode* prev;struct ListNode* next; } LTNode; //v…

QGraphics类型学习使用【Qt】【C++】

QGraphics类型学习使用 需求过程全部完整代码 首先已知&#xff0c;QGraphicsView&#xff0c;QGraphicsScene, QGraphicsItem&#xff0c;分别称为&#xff1a;视图&#xff0c;场景&#xff0c;图元&#xff0c;图表就是各种各样的元素&#xff0c;图片元素&#xff0c;线条元…