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

news2024/11/18 6:10:45

前言

       闲的无聊、给原有的系统添加一个公告的功能。就是后台可以写一些公告信息,然后前台可以看到发布的信息。一般来说一个公告就是一些文字描述+图片+视频等。还有排版样式啥的。使用文本编辑器就可以实现。然后正好用到了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中使用

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

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

相关文章

JS逆向 -- 某视频vurl值的加密分析

接上节课内容 JS逆向 -- 某视频vid值的加密分析 JS逆向 -- 某视频val值和pid值的加密分析 一、在上节课中有个vurl的值需要分析&#xff0c;具体内容如下 vurl: https://mp4play-hs-cdn.ysp.cctv.cn/o000017kuww.jbZe10002.mp4? sdtfrom4330701& guidlhsuf6ia_0rieucp…

进程性能分析工具 pidstat 和用 python 的 matplotlib 库输出分析图表

文章目录 前情提要效果展示pidstat 简介matplotlib 简介认识 figure 和 axes绘制曲线图绘制柱形图创建两个轴&#xff0c;将上面两种图形放到一个 figure 中Backends of matplotlib如何使用 WebAgg注意事项 前情提要 这段时间在忙服务器压测的工作&#xff0c;虽然我们程序里面…

五种高效的原型设计工具推荐

软件产品的诞生注定要经历一个过程&#xff1a;需求分析、设计、开发、测试和在线。在设计阶段&#xff0c;原型设计是软件设计和开发的重要保证。与其他工作一样&#xff0c;高效的原型设计需要相应工具的帮助来完成原型设计。在许多原型设计工具中&#xff0c;这里推荐了五种…

洛谷P1420-最长连号

洛谷P1420-最长连号 这个题目很入门&#xff0c;但是我第一次做怎么做都做不出来&#xff0c;看了几个代码&#xff0c;方法各式各样&#xff0c;这个我是我觉得最通俗易懂的一个, 循环外面的两个输入第一个cin是个数第二个是输入的第一个数&#xff0c;所以下面for循环的条件…

毕业论文之转化为三线表格(wps)

目录 一、前言 1.修改之前的表格 2. 修改完成后&#xff08;三线表格式&#xff09; 二、操作步骤 一、前言 在论文里面的表格要求是三线表格式的时候&#xff0c;就需要我们去把这个表格修改成三线表格式。 1.修改之前的表格 2. 修改完成后&#xff08;三线表格式&…

Vulnhub靶机渗透:Raven1(超级详细)

Raven1 https://www.vulnhub.com/entry/raven-1,256/ kali:192.168.54.128 raven1:192.168.54.15 nmap扫描 端口扫描 # Nmap 7.93 scan initiated Thu May 18 16:41:33 2023 as: nmap --min-rate 20000 -p- -oN nmap/ports 192.168.54.15 Nmap scan report for 192.168.54.…

PPT / Powerpoint中利用LaTeX输入公式

新版的Word&#xff08;Office 2016后&#xff1f;&#xff09;是支持LaTeX公式输入的&#xff0c;但是Powerpoint并不支持。下面介绍如何利用latex-ppt插件实现PPT中输入LaTeX公式&#xff1a; 1 安装latex-ppt插件 1.1 下载插件 插件开源仓库&#xff1a;latex-ppt&#x…

Linux【Ubuntu】安装Docker配置docker-compose 编排工具

一&#xff1a;Docker具体安装传送门: 亲测有效 https://www.runoob.com/docker/ubuntu-docker-install.html 二&#xff1a;配置Docker编排工具docker-compose 1&#xff0c;下载Docker-compose 下载Docker-Compose&#xff08;下载完毕就是一个文件docker-compose-Linux-x…

实验10 超市订单管理系统综合实验

实验10 超市订单管理系统综合实验 应粉丝要求&#xff0c;本博主帮助实现基本效果&#xff01; 未避免产生版权问题&#xff0c;本项目博主不公开源码&#xff0c;如果您遇到相关问题可私聊博主&#xff01; 一、实验目的及任务 通过该实验&#xff0c;掌握利用SSM框架进行系…

生成式AI热潮:一场“添饭碗”的科技革命

今年以来&#xff0c;人工智能&#xff08;AI&#xff09;热潮席卷全球&#xff0c;被认为将掀起新的科技革命。 5月18日的2023天津世界智能大会&#xff0c;以“智行天下 能动未来”为主题&#xff0c;重点关注人工智能发展的新趋势、新技术、新业态。大会开幕式结束之后&…

lidar camera calibration

1 Automatic Extrinsic Calibration Method for LiDAR and Camera Sensor Setups 2022 vel2cam git 2 A Novel Method for LiDARCamera Calibration by PlaneFitting 本文介绍了一种使用带ArUco标记的立方体的3D-3D对应特征来校准LiDAR和相机的新方法。在LiDAR坐标系中&…

安全响应中心 — 垃圾邮件事件报告(5.16)

2023年5月 第二周 一. 样本概况 ✅ 类型1&#xff1a;二维码钓鱼(QRPhish) 利用二维码进行的钓鱼、投毒&#xff0c;成为目前常见的邮件攻击手段之一&#xff0c;该类二维码主要存在于网络链接图片、邮件内容图片、附件图片中。 近日&#xff0c;安全团队捕获到一类基于员工…

什么是DevOps?如何理解DevOps思想?

博文参考总结自&#xff1a;https://www.kuangstudy.com/course/play/1573900157572333569 仅供学习使用&#xff0c;若侵权&#xff0c;请联系我删除&#xff01; 1、什么是DevOps? DevOps是一种思想或方法论&#xff0c;它涵盖开发、测试、运维的整个过程。DevOps强调软件开…

三阶段项目相关内容

当虚拟网关和真实物理网关相同的时候&#xff0c;默认优先级是255 vrrp角色&#xff1a; 主路由器 备份路由器 虚拟路由器 计时器&#xff1a;发送hello报文的时间, 主网关&#xff1a;每隔1s会向备份发一次vrrp报文 备份网关&#xff1a;监听vrrp报文&#xff0c;主网…

【UE4】从零开始制作战斗机(上:准备模型、定义函数和变量)

资源连接&#xff1a;&#xff08;链接&#xff09; 步骤&#xff1a; 1. 下载完资源并解压&#xff0c;资源内容如下&#xff1a; 2. 将上图中所有的.fbx文件导入ue 使用默认的导入设置就行&#xff0c;直接点击导入所有 导入后内容如下&#xff1a; 将资源中的textures也导…

程序员必备的免费自然语言转SQL (摸鱼)工具,人手必备

程序员必备的免费自然语言转SQL (摸鱼)工具&#xff0c;人手必备 1、SQL查询中添加过滤 请对附加的SQL查询添加筛选条件&#xff0c;仅显示在加州居住且消费总额排名前10位的客户。 “SELECT customer_name, SUM(order_total) AS total_spent FROM orders GROUP BY customer…

web缓存—Squid代理服务

1.squid的相关知识 1.1 squid的概念 Squid服务器缓存频繁要求网页、媒体文件和其它加速回答时间并减少带宽堵塞的内容。 Squid代理服务器&#xff08;Squid proxy server&#xff09;一般和原始文件一起安装在单独服务器而不是网络服务器上。Squid通过追踪网络中的对象运用起…

一文搞懂Golang中的接口

目录 接口 接口介绍 接口定义 实现接口 空接口 实现空接口 类型断言 使用类型断言 结构体实现多接口 接口嵌套 结构体值接收者和指针接收者实现接口的区别 代码案例 接口 接口介绍 Go语言中的接口&#xff08;interface&#xff09;是一组方法签名的集合&#xf…

单片机--STM中断系统

目录 【1】中断系统 1.基本概念 2.中断的意义 中断提高了CPU效率&#xff1f; 3.中断处理过程 中断处理过程 4. 中断体系结构 5.NVIC NVIC主要功能 6.EXTI 【2】IIC IIC主要特点 【3】485 【1】中断系统 1.基本概念 在处理器中&#xff0c;中断相当于对于突发事件…

【Scala---02】Scala 类与对象 『 类 | 属性 | 访问权限 | 方法 | 继承 | 伴生对象伴生类』

文章目录 1. 定义类2. 属性3. 访问权限4. 方法4.1 方法 vs 函数4.2 方法重写4.3 方法重载4.4 构造方法(1) 构造器定义(2) 构造器的参数列表(3) 构造器私有化 5. 继承6. 伴生对象 & 伴生类6.1 伴生对象的由来6.2 伴生对象 & 伴生类 7. 后续 1. 定义类 Java文件&#xf…