vue2中使用tinymce

vue2中使用tinymce的记录

本篇文章主要实现的功能:
(1)【查看】时禁用编辑
(2)【编辑】时某些内容是不可编辑的
(3)【内容】前端拼接编辑器模板
(4)【内容】编辑器模板中table样式修改

实现效果图:
在这里插入图片描述

第一个功能的主要代码

disabled属性

 // 使用地地方,传递disabled属性
 <HTinyEditor
 	ref="HTinyEditor"
    :value="editHtml"
    :disabled="isReadonly"
  ></HTinyEditor>     

 // 组件接受,并赋给【`disabled`】属性
 <Editor v-model="myValue" :init="init" :api-key="apiKey" :disabled="disabled" />

第二个功能的主要代码

(1)contenteditable=“false” 禁止编辑
(2)监听删除操作,对有data-protected属性和data-mce-bogus属性的内容不可删除

// 下面为测试数据
<p contenteditable="false" data-protected="protected" style="text-align: center; line-height: 1;"><span style="font-size: 12pt;">通告内容预览</span></p>
<p style="text-align: center; line-height: 1;"><span style="font-family: 隶书; font-size: 24pt;"><strong><span data-edit="edit" style="color: #e03e2d;">XX通告</span></strong></span></p>

// 组件中的方法
setup: (editor) => {
   // 限制有data-protected和data-mce-bogus属性的内容不可删除(应用场景:某些属性是固定不可编辑的)
  editor.on("keydown", (e) => {
  	if (e.keyCode === 46 || e.keyCode === 8) {
         const node = editor.selection.getNode();
          if (node && (node.getAttribute("data-protected") || node.getAttribute("data-mce-bogus"))) {
                e.preventDefault();
           }
         }
      });
  },

使用步骤

下载依赖

npm install tinymce@5.10.3 -S

npm install @tinymce/tinymce-vue@3.0.1 -S

public文件夹下需要的依赖包文件与语言包

执行完上面的两条命令后,在node_modules 中找到 tinymce文件夹,将tinymce目录中的skins文件夹复制到public文件夹下,其他可按需引入。需要汉化的可以在官网下载语言包(汉化包地址),下载完成后将解压后的文件夹存放在与skins文件夹相同的位置。(我这里在最外层包裹了tinymce这一层文件夹方便查找,可不包)
在这里插入图片描述

HTinyEditor组件封装
<template>
  <div class="tinymce-editor">
  	<!-- :api-key="apiKey" -->
    <Editor v-model="myValue"  :init="init" :disabled="disabled" />
    <!-- <button @click="onClick()">测试</button> -->
  </div>
</template>

<script>
import tinymce from "tinymce/tinymce";
import Editor from "@tinymce/tinymce-vue";

// import 'tinymce/themes/modern/theme'
import "tinymce/themes/silver/theme";
import "tinymce/icons/default/icons";
import "tinymce/plugins/image"; // 插入上传图片插件
import "tinymce/plugins/media"; // 插入视频插件
import "tinymce/plugins/table"; // 插入表格插件
import "tinymce/plugins/link"; // 超链接插件
import "tinymce/plugins/code"; // 代码块插件
import "tinymce/plugins/lists"; // 列表插件
import "tinymce/plugins/contextmenu"; // 右键菜单插件
import "tinymce/plugins/wordcount"; // 字数统计插件
import "tinymce/plugins/colorpicker"; // 选择颜色插件
import "tinymce/plugins/textcolor"; // 文本颜色插件
import "tinymce/plugins/fullscreen"; // 全屏
// import 'tinymce/plugins/help' // 帮助
import "tinymce/plugins/charmap";

import "tinymce/plugins/print"; // 打印
import "tinymce/plugins/preview"; // 预览
import "tinymce/plugins/hr"; // 水平线

import "tinymce/plugins/spellchecker";
import "tinymce/plugins/imagetools";
import "tinymce/plugins/noneditable";
// import 'tinymce/plugins/save'
// import 'tinymce/plugins/tabfocus'
// import 'tinymce/plugins/textpattern'
// import 'tinymce/plugins/template'

import "tinymce/icons/default/icons";
import "tinymce/plugins/advlist"; //高级列表
import "tinymce/plugins/anchor"; //锚点
import "tinymce/plugins/autolink"; //自动链接
import "tinymce/plugins/autoresize"; //编辑器高度自适应,注:plugins里引入此插件时,Init里设置的height将失效
import "tinymce/plugins/autosave"; //自动存稿
import "tinymce/plugins/charmap"; //特殊字符
import "tinymce/plugins/code"; //编辑源码
import "tinymce/plugins/codesample"; //代码示例
import "tinymce/plugins/directionality"; //文字方向
import "tinymce/plugins/emoticons"; //表情
import "tinymce/plugins/fullpage"; //文档属性
// import "tinymce/plugins/fullscreen"; //全屏
import "tinymce/plugins/help"; //帮助
// import 'tinymce/plugins/hr' //水平分割线
import "tinymce/plugins/importcss"; //引入css
import "tinymce/plugins/insertdatetime"; //插入日期时间
// import 'tinymce/plugins/link' //超链接
// import 'tinymce/plugins/lists' //列表插件
// import 'tinymce/plugins/media' //插入编辑媒体
// import 'tinymce/plugins/image' // 插入图片
import "tinymce/plugins/nonbreaking"; //插入不间断空格
import "tinymce/plugins/pagebreak"; //插入分页符
import "tinymce/plugins/paste"; //粘贴插件
// import 'tinymce/plugins/preview' //预览
// import 'tinymce/plugins/print' //打印
import "tinymce/plugins/quickbars"; //快速工具栏
import "tinymce/plugins/save"; //保存
import "tinymce/plugins/searchreplace"; //查找替换
// import 'tinymce/plugins/spellchecker'  //拼写检查,未加入汉化,不建议使用
import "tinymce/plugins/tabfocus"; //切入切出,按tab键切出编辑器,切入页面其他输入框中
// import 'tinymce/plugins/table' //表格
import "tinymce/plugins/template"; //内容模板
// import 'tinymce/plugins/textcolor' //文字颜色
import "tinymce/plugins/textpattern"; //快速排版
import "tinymce/plugins/toc"; //目录生成器
import "tinymce/plugins/visualblocks"; //显示元素范围
import "tinymce/plugins/visualchars"; //显示不可见字符
// import 'tinymce/plugins/wordcount' //字数统计

export default {
  name: "HTinyEditor",
  components: {
    Editor,
  },
  props: {
    // 传入的编辑器中的内容,使组件支持v-model绑定
    value: {
      type: String,
      default: "",
    },
    // 是否禁用
    disabled: {
      type: Boolean,
      default: false,
    },
    plugins: {
      type: [String, Array],
      default:
        "lists image media table textcolor wordcount contextmenu preview",
    },
    toolbar: {
      type: [String, Array],
      default:
        "undo redo |  formatselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | lists image media table | removeformat table| fontsizeselect | fontselect'",
    },
  },
  data() {
    return {
      apiKey: "jzlds2e6urz6akm9wxp4f70mnwg83d8fovsialqazxowyity",
      // 配置文件服务器的静态访问路径前缀
      // static_web_preurl: 'http://localhost/files/hxzy_img/',
      // 初始化配置
      init: {
        placeholder: "在这里输入文字",
        language_url: "/tinymce/langs/zh_CN.js", // plugin文件夹下的汉化路径
        language: "zh_CN",
        skin_url: "/tinymce/skins/ui/oxide",
        height: 600, // 编辑器高度,可以考虑获取窗口高度,以适配不同设备屏幕
        end_container_on_empty_block: true,
        powerpaste_word_import: "clean",
        advlist_bullet_styles: "square",
        advlist_number_styles: "default",
        imagetools_cors_hosts: ["www.tinymce.com", "codepen.io"],
        default_link_target: "_blank",
        link_title: false,
        media_live_embeds: true,
        content_style: "img {max-width:100%;} html{background-color: #fff;}", // 直接自定义可编辑区域的css样式
        images_upload_url: "/api/attch/upload",
        nonbreaking_force_tab: true, // inserting nonbreaking space &nbsp; need Nonbreaking Space Plugin
        // plugins: this.plugins,
        // toolbar: this.toolbar,
        // @ts-nocheckplugins: 'link lists image code table colorpicker textcolor wordcount contextmenu',
        plugins:
          "advlist anchor autolink autosave code codesample colorpicker  contextmenu directionality toc  fullscreen hr image imagetools insertdatetime link lists media nonbreaking noneditable pagebreak paste preview print save searchreplace spellchecker tabfocus table template textcolor textpattern visualblocks visualchars wordcount",
        // toolbar:'bold italic underline strikethrough | fontsizeselect | forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist | outdent indent blockquote | undo redo | link unlink image code | removeformat | table',
        toolbar: [
          "searchreplace bold italic underline strikethrough fontselect fontsizeselect  alignleft aligncenter alignright outdent indent  blockquote undo redo removeformat subscript superscript code codesample",
          "hr bullist numlist link image charmap preview anchor pagebreak insertdatetime media table emoticons forecolor backcolor fullscreen",
        ],
        fontsize_formats: "8pt 10pt 12pt 14pt 18pt 24pt 36pt", // 第二步
        font_formats:
          "微软雅黑='微软雅黑';宋体='宋体';黑体='黑体';仿宋='仿宋';楷体='楷体';隶书='隶书';幼圆='幼圆';Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings",
        branding: false,
        elementpath: false, //隐藏底栏的元素路径
        // inline: true, //开启内联模式
        // icons: 'custom',
        readonly: true,
        menubar: true, // `是否显示菜单栏(文件、编辑等菜单)`
        file_picker_types: "media",
        setup: (editor) => {
          // 限制有data-protected和data-mce-bogus属性的内容不可删除(应用场景:某些属性是固定不可编辑的)
          editor.on("keydown", (e) => {
            if (e.keyCode === 46 || e.keyCode === 8) {
              const node = editor.selection.getNode();
              if (
                node &&
                (node.getAttribute("data-protected") ||
                  node.getAttribute("data-mce-bogus"))
              ) {
                e.preventDefault();
              }
            }
          });
        },
      },
      myValue: this.value,
    };
  },
  watch: {
    value(newValue) {
      this.myValue = newValue;
    },
    myValue(newValue) {
      this.$emit("input", newValue);
    },
  },
  mounted() {
    tinymce.init({});
  },
  methods: {
    onClick() {
      let editContent = tinymce.editors[0].getContent();
      this.$emit("onClick", editContent);
      console.log("编辑器中的内容:", editContent);
    },
    // 可以添加一些自己的自定义事件,如清空内容
    clear() {
      this.myValue = "";
    },
  },
};
</script>
<style scoped>
.tinymce-editor {
  min-height: 100%;
}
</style>

使用组件
<template>
  <div>
    <PopToggle :title="title" :visible="visible" @close="onClose">
      <template #content v-if="visible">
        <HTinyEditor
          ref="HTinyEditor"
          :value="editHtml"
          :disabled="isReadonly"
        ></HTinyEditor>
      </template>
      <template #footer>
        <div class="bg-white text-right project-popup-bottom">
          <a-button @click="onClose">取消</a-button>
          <a-button
            type="primary"
            v-if="!isReadonly"
            @click="confirm"
            class="m-l-10"
            >确定</a-button
          >
        </div>
      </template>
    </PopToggle>
  </div>
</template>

<script>
import PopToggle from "@com/business/PopToggle"; //弹窗组件
import HTinyEditor from "@/components/business/HTinyEditor";

export default {
  data() {
    return {
      editHtml: "", //编辑器中的内容
    };
  },
  props: {
    visible: {
      type: Boolean,
      required: true,
    },
    title: {
      type: String,
      required: true,
    },
    id: String,
  },
  components: {
    PopToggle,
    HTinyEditor,
  },
  computed: {
    // 操作状态
    operateState() {
      return this.title.includes("编辑");
    },
    // 只读状态
    isReadonly() {
      return this.title.includes("详情");
    },
  },
  watch: {
    visible(val) {
      if (val) {
        
      }
    },
  },
  methods: {
     // 取消
    onClose() {
      this.$emit("toggleVisible");
    },
    // 确定
    confirm() {
      // 获取富文本数据
      console.log(this.$refs.HTinyEditor.myValue);
     },
   },
};
</script>

<style lang="less" scoped></style>
模板中数据动态拼接
  1. 拼接模板数据共用方法
/**
 *
 * @param {Sting} sysHtml 要拼接的数据1
 * @param {Sting} quantityHtml 要拼接的数据2
 * @param {Object} data 内容字段数据
 * @returns
 */
export function editContent(sysHtml, quantityHtml, data) {
  let content = `
    <p style="text-align: center; line-height: 1;" contenteditable="false" data-protected="protected">&nbsp;</p>
    <p style="text-align: center; line-height: 1;"><span style="font-size: 18pt;">通告内容预览</span></p>
    <p style="text-align: center; line-height: 1;">&nbsp;</p>
    <p style="text-align: center; line-height: 1;"><span style="font-family: 楷体; font-size: 36pt;"><strong><span style="color: #e03e2d;">XX通告</span></strong></span></p>
    <p style="text-align: center; line-height: 1;" contenteditable="false" data-protected="protected"><span style="text-decoration: underline;"><span style="font-size: 24pt; color: #e03e2d; text-decoration: underline;"><span style="color: #000000; font-size: 10pt; text-decoration: underline;">&nbsp; &nbsp; &nbsp; &nbsp;<span style="font-size: 14pt;"> XXX部门&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;XXX编号 </span>&nbsp; &nbsp; &nbsp;&nbsp;</span></span></span></p>
    <p style="text-align: center; line-height: 1;">&nbsp;</p>
    <p style="text-align: left; line-height: 1; padding-left: 40px;" contenteditable="false" data-protected="protected"><span style="font-size: 24pt; color: #e03e2d;"><span style="font-size: 10pt;">${data.orgName}<span style="color: #000000;"></span></span></span></p>
    <p style="text-align: left; line-height: 1; padding-left: 40px;" contenteditable="false" data-protected="protected"><span style="font-size: 24pt; color: #e03e2d;"><span style="font-size: 10pt;">你好,XXX:</span></span></p>
    <p style="text-align: left; line-height: 1; padding-left: 40px;" contenteditable="false" data-protected="protected"><span style="font-size: 24pt; color: #000000;"><span style="font-size: 10pt;">(1)XX数据</span></span></p>
    <table style="border-collapse: collapse; width: 99.9552%;" border="1" contenteditable="false" data-protected="protected">
    <tbody>
      <tr style="height: 32.1429px; background-color: rgba(24, 144, 255, 1);">
        <td style="width: 12.1856%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td>
        <td style="width: 11.8782%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td>
        <td style="width: 11.1064%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td>
        <td style="width: 12.3404%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td>
        <td style="width: 10.9521%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td>
        <td style="width: 13.4202%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td>
        <td style="width: 16.9681%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td>
        <td style="width: 10.9521%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td>
      </tr>`;

  content += sysHtml;
  content += `
      </tbody>
      </table>
      <p style="text-align: left; line-height: 1; padding-left: 40px;"  ><span style="font-size: 24pt; color: #000000;"><span style="font-size: 10pt;">(2)XX数据</span></span></p>
      <table style="border-collapse: collapse; width: 99.9552%;" border="1">
      <tbody>
        <tr style="height: 32.1429px; background-color: rgba(24, 144, 255, 1);">
          <td style="width: 12.5506%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td>
          <td style="width: 12.5506%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td>
          <td style="width: 12.5506%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td>
          <td style="width: 12.5506%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td>
          <td style="width: 10.8249%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td>
          <td style="width: 11.6093%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td>
          <td style="width: 16.0033%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td>
          <td style="width: 11.2943%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td>
        </tr>`;

  content += quantityHtml;

  content += `
      </tbody>
      </table>
      <p style="text-align: left; line-height: 1; padding-left: 40px;"  ><span class="mce-nbsp-wrap"  >&nbsp;&nbsp;&nbsp;</span></p>
      <p style="text-align: left; line-height: 1; padding-left: 40px;"  ><span style="font-size: 12pt; color: #e03e2d;">XXX</span></p>
      <p style="line-height: 1; text-align: right;"><span style="color: #e03e2d;">${data.orgName}&nbsp; &nbsp; &nbsp;</span></p>
      <p style="line-height: 1; text-align: right;">&nbsp; &nbsp; <span style="color: #e03e2d;">${data.issueTime}&nbsp; &nbsp; &nbsp;</span></p>`;

  return content;
}
  1. 调用模板
this.editHtml = editContent(sysHtml, quantityHtml, otherData);

注意:编辑器模板中不要给table加高度,否则会导致table没有数据时表头会很高

  1. 模板中table表头样式修改
  • 实现效果
    在这里插入图片描述

  • 编辑器模板中table代码

<tbody>
     <tr style="height: 32.1429px; background-color: rgba(24, 144, 255, 1);">
     	 ...
    </tr>
</tbody>

也可使用其他富文本编辑器,像vueup/vue-quill等

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【漏洞复现】锐捷校园网自助服务系统 login_judge.jsf 任意文件读取漏洞(XVE-2024-2116)

0x01 产品简介 锐捷校园网自助服务系统是锐捷网络推出的一款面向学校和校园网络管理的解决方案。该系统旨在提供便捷的网络自助服务&#xff0c;使学生、教职员工和网络管理员能够更好地管理和利用校园网络资源。 0x02 漏洞概述 校园网自助服务系统/selfservice/selfservice…

Java核心: 为图片生成水印

今天干了一件特别不务正业的事&#xff0c;做了一个小程序用来给图片添加水印。事情的起因是需要将自己的身份证照片分享给别人&#xff0c;手边并没有一个趁手的工具来生成图片水印。很多APP提供了水印的功能&#xff0c;但会把我的图片上传到他们的服务器&#xff0c;身份证太…

台式机安装Windows 11和Ubuntu 22双系统引导问题

一、基本情况 1.1、硬件情况 电脑有2个NVMe固态硬盘&#xff0c;1个SATA固态硬盘&#xff0c;1个机械硬盘。其中一个NVMe固态硬盘是Windows系统盘&#xff0c;另一个NVMe固态为Windows软件和文件盘&#xff0c;SATA固态硬盘为Ubuntu专用&#xff0c;机械硬盘为数据备份盘。 …

Find My电动螺丝刀|苹果Find My技术与螺丝刀结合,智能防丢,全球定位

电动螺丝刀&#xff0c;别名电批、电动起子&#xff0c;是用于拧紧和旋松螺钉用的电动工具。它不仅提高了工作效率&#xff0c;还大大减轻了工作者的体力负担。在装配线等生产环境中&#xff0c;电动螺丝刀已经成为了不可或缺的工具。电动螺丝刀的批头还具备接地防静电功能&…

Leetcode:四数之和

题目链接&#xff1a;18. 四数之和 - 力扣&#xff08;LeetCode&#xff09; 普通版本&#xff08;排序 双指针&#xff09; 主旨&#xff1a;类似于三数之和的解法&#xff0c;但需要多加一些限制&#xff0c;同时为了防止多个数组元素的相加之和出现整型溢出问题还要将整型…

IDEA 2022

介绍 【尚硅谷IDEA安装idea实战教程&#xff08;百万播放&#xff0c;新版来袭&#xff09;】 jetbrains 中文官网 IDEA 官网 IDEA 从 IDEA 2022.1 版本开始支持 JDK 17&#xff0c;也就是说如果想要使用 JDK 17&#xff0c;那么就要下载 IDEA 2022.1 或之后的版本。 公司…

《TCP/IP网络编程》(第十三章)多种I/O函数(2)

使用readv和writev函数可以提高数据通信的效率&#xff0c;它们的功能可以概括为**“对数据进行整合传输及发送”**。 即使用writev函数可以将分散在多个缓冲中的数据一并发送&#xff0c;使用readv函数可以由多个缓冲分别接受&#xff0c;所以适当使用他们可以减少I/O函数的调…

Refused to load the stylesheet问题解决方案

今天项目部署的过程中遇到一个安全策略问题的报错&#xff0c;大概意思就是处于安全考虑&#xff0c;不允许src外链其他不安全的静态文件 解决这种问题的一个思路大概就是找到index.html文件先看下是否存在 <meta http-equiv"Content-Security-Policy" content&…

用PlayCanvas打造一个令人惊叹的3D图在线展示

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 PlayCanvas实例化渲染&#xff1a;大规模渲染优化 应用场景 在游戏开发中&#xff0c;经常需要渲染大量相同或相似模型。传统方法需要为每个模型创建单独的渲染对象&#xff0c;这会消耗大量内存和GPU资源。实…

问你为什么选择Kafka,你会怎么回答?

可靠的含义在百度百科的解释是&#xff1a;可以信赖、可以相信、可靠的朋友。那Kafka究竟是不是一个可靠的朋友呢&#xff1f;既然全世界绝大部分高可用系统都有Kafka的支持&#xff0c;Kafka必定有其过人之处&#xff0c;跟着我来分析分析。 另外多提一嘴Kafka在GitHub目前已…

【AIGC X UML 落地】通过多智能体实现自然语言绘制UML图

前天写了篇博文讲到用PlantUML来绘制C类图和流程图。后台有读者留言&#xff0c;问这步能否自动化生成&#xff0c;不想学习 PlantUML 语法。 我想了下&#xff0c;发现这事可行&#xff0c;确实可以做到通过自然语言的描述就能实现 UML图的绘制&#xff0c;昨天晚上加了个班到…

安装TPMmanager

sudo apt-get install qt4-qmake sudo apt-get install libqt4-dev下载TPMManager&#xff0c;解压之后拖入Ubuntu&#xff0c;进入目录 https://gitcode.com/Rohde-Schwarz/TPMManager/overview?utm_sourcecsdn_github_accelerator&isLogin1 cd tpmmanager-master qmake…

快速排序(Quick Sort)(C语言) 超详细解析!!!

生活的本质是什么呢? 无非就是你要什么就不给你什么. 而生活的智慧是什么呢? 是给你什么就用好什么. ---马斯克 索引 一. 前言二. 快速排序的概念三. 快速排序的实现1. hoare2. 挖坑法3. 前后指针法 总结 正文开始 一. 前言 接上文, 前面我们了解了插入排序, 与优化版本希尔…

Vulnhub-DC-2

靶机IP:192.168.20.135 网络有问题的可以看下搭建Vulnhub靶机网络问题(获取不到IP) kaliIP:192.168.20.128 扫描靶机端口及服务版本 发现开放了80和7744端口 并且是wordpress建站 dirsearch扫描目录 访问前端界面&#xff0c;发现存在重定向 在hosts文件中增加192.168.2…

【UML用户指南】-09-对基本结构建模-类图

目录 1、概述 2、引入 3、过程 4、常用建模技术 4.1、对简单协作建模 4.2、对逻辑数据库模式建模 4.3、正向工程 1、概述 类图是面向对象系统建模中最常见的图。 类图显示一组类、接口、协作以及它们之间的关系 类图用于对系统静态设计视图建模。其大多数涉及到对系统的…

这个世界,对于心态好的人,就是个大游乐场,越刺激越好玩。对于胆小鬼,那就是地狱,随时随地都会受伤

心态决定你的世界&#xff1a;游乐场还是地狱 在这个充满变数的世界里&#xff0c;我们的心态决定了我们看待世界的方式。对于心态积极的人来说&#xff0c;世界就像一个巨大的游乐场&#xff0c;每一个挑战都是一个新的游戏&#xff0c;每一个刺激都是乐趣的一部分。而对于那…

纷享销客安全体系: 组织及人员安全

组织及人员安全是纷享销客安全战略中的重要组成部分。 我们致力于确保组织内部和员工的安全&#xff0c;并采取一系列措施来预防和应对安全威胁。我们将持续改进和更新安全措施&#xff0c;以适应不断变化的威胁环境&#xff0c;并确保组织和员工的安全意识和培训得到充分关注…

鹧鸪云设计系统:太阳能光伏发电设计图纸绘制全攻略

随着全球对可持续能源的需求不断增加&#xff0c;越来越多的人开始关注太阳能发电技术。对于初学者来说&#xff0c;掌握一套有效的太阳能光伏发电设计图纸至关重要。本为了实现这一目标&#xff0c;鹧鸪云设计系统的出现为初学者的电站图纸绘制降低了难度。 接下来&#xff0c…

微信小程序uniapp的父子之间的通信传递

1.父传递给子信息 my-test是子组件 demo是父组件 这是定义在父组件中的的info信息 要将这个传递给子组件 子组件在properties 中接收父组件传递来的数据 msg type 是类型 value是默认值&#xff0c;当父组件没有传递数据时&#xff0c;就会默认使用value的数据 子组件…

STM32 音乐播放器之音频入门实验(pwm、dac、.wav、.mp3)

1.pwm实现简易电子琴实验 1.改变PWM频率&#xff0c;输出不同音调 2.改变占空比&#xff0c;调节音量大小 3.按键弹奏&#xff0c;支持按按键录取弹奏音 4.播放:中高低音&#xff1b;录取音&#xff1b;指定歌曲 5.支持按上一首&#xff0c;下一首&#xff0c;调弹奏速度&#…