Vue中通过集成Quill富文本编辑器实现公告的发布。Vue项目中vue-quill-editor的安装与使用【实战开发应用】

简介: 文章展示了在Vue项目中通过集成Quill富文本编辑器实现公告功能的完整开发过程,包括前端的公告发布、修改、删除操作以及后端的数据存储和处理逻辑。

前言

   闲的无聊、给原有的系统添加一个公告的功能。就是后台可以写一些公告信息,然后前台可以看到发布的信息。一般来说一个公告就是一些文字描述+图片+视频等。还有排版样式啥的。使用文本编辑器就可以实现。然后正好用到了Quill,通过Quill富文本编辑器集成到Vue中,就可以实现这个效果。具体实现过程中遇到的几个小问题:1、如何将插入的图片进行缩放? 2、如何获取文本中的内容?3、如何将保存到数据库中的内容,重新按照原格式展示出来? 真正弄出来,发现也不难

提示

本篇博客是在下方博客的基础上进行的。建议先看一下基础版本的,然后再回过头来看这个实战的。
在Vue项目中vue-quill-editor的安装与使用【详细图解+过程+包含图片的缩放拖拽】

1、具体实现的效果

在Vue项目中使用Quill富文本编辑器实现公告的发布与修改

   **提示**:在修改的时候,重新上传的图片是可以调整大小的。不知道是不是录制视频的软件影响。导致修改公告信息的时候,重新上传的图片缩放不好用了。

2、添加公告

1.1 前端代码

   这里只给出方法,具体的页面设计,建议看上一篇博客介绍。这里遇到的问题,就是如何将用户输入的公告信息收集起来,然后传给后端。**富文本的内容在content里边,直接获取就行**。然后把数据组合一下发送给后端。
    //添加公告信息
    addAnnounceInfo() {
      const _this = this;
      let entity = this.entity;
      entity.content = this.content;
      entity.name = this.name;
      console.error("entity:" + JSON.stringify(entity));

      this.$axios.addAnnounceInfo(this.entity).then(function (resp) {
        if (resp.code == 200) {
          _this.$alert("《" + _this.entity.name + "》添加成功", "消息", {
            confirmButtonText: "确定",
            callback: (action) => {
              _this.adddialogVisible = false; //dialog对话窗口关闭
              _this.showAllAnnounceMentInfo();
            },
          });
          _this.showAllAnnounceMentInfo();
        } else {
          _this.$message.error(resp.data.errMessage);
        }
      });
    },
   看这里调用富文本的组件,然后双向绑定的值是content,然后你在编辑器里边做的操作,数据都在这里。你直接拿这个数据就行了。

在这里插入图片描述

   这里是测试从content中拿到的数据

在这里插入图片描述

1.2 后端代码

   后端就是存储从前端获取的数据,这里用实体类接收前端传来的参数,具体的保存,我这里用的mybatis-plus。
    /**
     *  添加公告信息
     */

    @RequestMapping(value = "/announce/addAnnounceInfo", method = RequestMethod.POST)
    public Result addAnnounceInfo(@RequestBody AdvertiserInfo advertiserInfo){
        int result = 0;
        if(advertiserInfo == null){
            return Result.error().data("errMessage","信息不能为空!");
        }
        String createTime = CurrentTime.getCurrentTime();
        advertiserInfo.setTime(createTime);

        result = advertiserInfoMapper.insert(advertiserInfo);

        if(result > 0){
            return Result.ok();
        }else{
            return Result.error().data("errMessage","添加失败!");
        }

    }
    这里我将公告的信息用一个实体类表示。

在这里插入图片描述
在这里插入图片描述

1.3 数据库存储

   这里将图片存储直接存储到数据库了,你可以选择在上传图片的时候,将图片上传到服务器,然后数据库中保存访问该图片的地址。视频也同理。  

在这里插入图片描述

3、删除公告

1.1 前端代码

   删除就是获取对应公告的id,然后传给后端。后端根据这个id进行对应公告的删除。
//html
                      <el-popconfirm
                        confirm-button-text="好的"
                        cancel-button-text="不用了"
                        icon="el-icon-info"
                        icon-color="red"
                        title="确定删除吗?"
                        @confirm="handleDelete(scope.$index, scope.row)"
                      >
                        <el-button
                          type="danger"
                          icon="el-icon-delete"
                          slot="reference"
                        ></el-button>
                      </el-popconfirm>

//methods

    //删除公告信息
    handleDelete(index, row) {
      const _this = this;
      const params = {
        id: row.id,
      };
      this.$axios.handleDeleteAnnounceInfo(params).then((resp) => {
        if (resp.code == 200) {
          _this.$alert("删除成功", "消息", {
            confirmButtonText: "确定",
            callback: (action) => {
              _this.showAllAnnounceMentInfo();
            },
          });
        } else {
          _this.$message.error(resp.data.errMessage);
        }
      });
    },

1.2 后端代码

   拿到id删除就行了,没啥好说的

    /**
     * 删除公告信息
     *
     * @param
     * @return
     */
    @RequestMapping(value = "/announce/deleteAnnounceInfo", method = RequestMethod.DELETE)
    public Result deletelAnnounceInfo(@RequestParam  Map<String,Object> maps) {
        String id = (String) maps.get("id");
        HashMap<String, Object> map = new HashMap<>();
        map.put("id", id);
        int rs = advertiserInfoMapper.deleteByMap(map);

        if (rs > 0) {
            return Result.ok();
        } else {
            return Result.error().data("errMessage", "删除失败");
        }

    }

4、修改公告

1.1 前端代码

   要修改哪个公告,就先获取到哪个公告的相关信息。然后修改后,提交数据到后端进行数据修改。**这里有一点,就是保存到数据库中的文本,再次展示的富文本框的时候,样式是不变的。**
    //修改公告信息
    UpdateAnnounceInfo(index, row) {
      console.error("====:" + index, +"-----:" + row);
      this.updateDialogVisible = true;
      this.content = row.content;
      this.name = row.name;
      this.id = row.id
    },
    updateAnnounceInfo1() {
      const _this = this;
      let entity = this.entity;
      entity.id = this.id
      entity.content = this.content;
      entity.name = this.name;
      console.error("entity:" + JSON.stringify(entity));

      this.$axios.submitUpdateAnnounce(this.entity).then(function (resp) {
        if (resp.code == 200) {
          _this.$alert("《" + _this.entity.name + "》信息修改成功", "消息", {
            confirmButtonText: "确定",
            callback: (action) => {
              _this.updateDialogVisible = false;
              _this.showAllAnnounceMentInfo();
            },
          });
        } else {
          _this.$message.error(resp.data.errMessage);
        }
      });
    },

1.2 后端代码

就是一个修改操作,没啥好说的

    /**
     * 修改公告信息
     *
     * @param advertiserInfo
     * @return
     */
    @RequestMapping(value = "/announce/updateAnnounceInfo", method = RequestMethod.PUT)
    public Result updateAnnounceInfo(@RequestBody AdvertiserInfo advertiserInfo) {

        if (advertiserInfo == null) {
            return Result.error().data("errMessage", "信息不能为空");
        }

        UpdateWrapper<AdvertiserInfo> updateUserWrapper = new UpdateWrapper<>();
        updateUserWrapper.like("id", advertiserInfo.getId());
        int rs = advertiserInfoMapper.update(advertiserInfo, updateUserWrapper);
        if (rs > 0) {
            return Result.ok();
        } else {
            return Result.error().data("errMessage", "信息修改失败");
        }

    }

5、后语

这是一个简单的小案例,可以借鉴看看。主要目的是练习Quill富文本的使用。以及如何在Vue中使用

相关文章
|
1月前
|
机器学习/深度学习 数据采集 存储
朴素贝叶斯处理混合数据类型,基于投票与堆叠集成的系统化方法理论基础与实践应用
本文探讨了朴素贝叶斯算法在处理混合数据类型中的应用,通过投票和堆叠集成方法构建分类框架。实验基于电信客户流失数据集,验证了该方法的有效性。文章详细分析了算法的数学理论基础、条件独立性假设及参数估计方法,并针对二元、类别、多项式和高斯分布特征设计专门化流水线。实验结果表明,集成学习显著提升了分类性能,但也存在特征分类自动化程度低和计算开销大的局限性。作者还探讨了特征工程、深度学习等替代方案,为未来研究提供了方向。(239字)
73 5
朴素贝叶斯处理混合数据类型,基于投票与堆叠集成的系统化方法理论基础与实践应用
|
4月前
|
消息中间件 存储 Java
微服务——SpringBoot使用归纳——Spring Boot中集成ActiveMQ——ActiveMQ安装
本教程介绍ActiveMQ的安装与基本使用。首先从官网下载apache-activemq-5.15.3版本,解压后即可完成安装,非常便捷。启动时进入解压目录下的bin文件夹,根据系统选择win32或win64,运行activemq.bat启动服务。通过浏览器访问`http://127.0.0.1:8161/admin/`可进入管理界面,默认用户名密码为admin/admin。ActiveMQ支持两种消息模式:点对点(Queue)和发布/订阅(Topic)。前者确保每条消息仅被一个消费者消费,后者允许多个消费者同时接收相同消息。
107 0
微服务——SpringBoot使用归纳——Spring Boot中集成ActiveMQ——ActiveMQ安装
|
4月前
|
NoSQL Java Redis
微服务——SpringBoot使用归纳——Spring Boot 中集成Redis——Redis 安装
本教程介绍在 VMware 虚拟机(CentOS 7)或阿里云服务器中安装 Redis 的过程,包括安装 gcc 编译环境、下载 Redis(官网或 wget)、解压安装、修改配置文件(如 bind、daemonize、requirepass 等设置)、启动 Redis 服务及测试客户端连接。通过 set 和 get 命令验证安装是否成功。适用于初学者快速上手 Redis 部署。
72 0
|
4月前
|
SQL 弹性计算 DataWorks
Flink CDC 在阿里云 DataWorks 数据集成入湖场景的应用实践
Flink CDC 在阿里云 DataWorks 数据集成入湖场景的应用实践
162 6
|
5月前
|
存储 人工智能 NoSQL
Airweave:快速集成应用数据打造AI知识库的开源平台,支持多源整合和自动同步数据
Airweave 是一个开源工具,能够将应用程序的数据同步到图数据库和向量数据库中,实现智能代理检索。它支持无代码集成、多租户支持和自动同步等功能。
279 14
|
5月前
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
290 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
6月前
|
安全 数据安全/隐私保护
DzzOffice:太完美啦,开源免费Word、Exce、PPT,多人同时协作,最主要还有免费的网盘,将这个项目集成到你的产品里面,项目立刻拥有整套offce解决方案
嗨,大家好,我是小华同学。DzzOffice是一个免费开源的企业协同办公平台,适合中小型企业及团队使用,功能涵盖网盘、文档、表格、演示文稿等,支持企业微信和钉钉移动办公,保障数据私有部署安全。 关注我们,获取更多优质开源项目和高效工作学习方法。
847 5
|
6月前
|
机器人 应用服务中间件 API
轻松集成私有化部署Dify文本生成型应用
Dify 是一款开源的大语言模型应用开发平台,融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者能快速搭建生产级生成式 AI 应用。通过阿里云计算巢,用户可以一键部署 Dify 社区版,享受独享的计算和网络资源,并无代码完成钉钉、企业微信等平台的应用集成。本文将详细介绍如何部署 Dify 并将其集成到钉钉群聊机器人和企业微信中,帮助您轻松实现 AI 应用的定义与数据运营,提升工作效率。
3839 65
轻松集成私有化部署Dify文本生成型应用
|
6月前
|
人工智能 数据可视化 开发者
FlowiseAI:34K Star!集成多种模型和100+组件的 LLM 应用低代码开发平台,拖拽组件轻松构建程序
FlowiseAI 是一款开源的低代码工具,通过拖拽可视化组件,用户可以快速构建自定义的 LLM 应用程序,支持多模型集成和记忆功能。
434 14
FlowiseAI:34K Star!集成多种模型和100+组件的 LLM 应用低代码开发平台,拖拽组件轻松构建程序
|
7月前
|
存储 人工智能 数据库
Codel:AI代理工具,支持在终端、浏览器、编辑器执行复杂任务和项目
Codel是一款全自主AI代理工具,支持在终端、浏览器和编辑器中执行复杂任务和项目。它运行在沙盒化的Docker环境中,具备自主操作能力,内置浏览器和文本编辑器,所有操作记录存储于PostgreSQL数据库。Codel能够自动完成复杂任务,如创建项目结构、进行网络搜索等,适用于自动化编程、研究与开发、教育与培训以及数据科学与分析等多个领域。
214 11
Codel:AI代理工具,支持在终端、浏览器、编辑器执行复杂任务和项目