基于若依框架实现markdown在线编辑

基于若依框架实现markdown在线编辑

1. 下载mavon-editor

npm install mavon-editor --save

2. 打开main.js文件, 添加如下

// markdown组件
import { mavonEditor } from "mavon-editor";
import "mavon-editor/dist/css/index.css";

// markdown组件
Vue.component("mavon-editor", mavonEditor);

3. 打开package.json, 找到 “dependencies”

// 添加
"mavon-editor": "^2.10.4",

4. 新建vue页面

<template>
  <div>
    <mavon-editor class="markdown"
                  :value="get_mark_data()"
                  :subfield="true"
                  :defaultOpen="prop.defaultOpen"
                  :toolbarsFlag="prop.toolbarsFlag"
                  :editable="prop.editable"
                  :scrollStyle="prop.scrollStyle"
                  :toolbars="toolbars"
                  :code-style="prop.codeStyle"
                  @change="changeFn"
                  @save="saveFn"
                  @imgAdd="imgAddFn"
                  language="zh"
                  navigation
                  ishljs
                  ref="md"
    >
      <!-- 左工具栏后加入自定义按钮  -->
      <template slot="left-toolbar-after">
        <button
          type="button"
          @click="downFile()"
          class="op-icon fa fa-mavon-align-left"
          aria-hidden="true"
          title="下载"
        ></button>
      </template>
    </mavon-editor>
</template>

<script>
import { saveAs } from 'file-saver'
import { saveFileAndData } from '@/utils/util'

export default {
  data() {
    return {
      fileInfo: '',
      context: '',//输入的数据
      html: '',
      toolbars: {
        bold: true, // 粗体
        italic: true, // 斜体
        header: true, // 标题
        underline: true, // 下划线
        strikethrough: true, // 中划线
        mark: true, // 标记
        superscript: true, // 上角标
        subscript: true, // 下角标
        quote: true, // 引用
        ol: true, // 有序列表
        ul: true, // 无序列表
        link: true, // 链接
        imagelink: true, // 图片链接
        code: true, // code
        table: true, // 表格
        fullscreen: true, // 全屏编辑
        readmodel: true, // 沉浸式阅读
        htmlcode: true, // 展示html源码
        help: true, // 帮助
        /* 1.3.5 */
        undo: true, // 上一步
        redo: true, // 下一步
        trash: true, // 清空
        save: true, // 保存(触发events中的save事件)
        /* 1.4.2 */
        navigation: true, // 导航目录
        /* 2.1.8 */
        alignleft: true, // 左对齐
        aligncenter: true, // 居中
        alignright: true, // 右对齐
        /* 2.2.1 */
        subfield: true, // 单双栏模式
        preview: true // 预览
      }
    }
  },
  created() {
    
  },
  computed: {
    prop() {
      let data = {
        subfield: false,// 单双栏模式
        defaultOpen: 'preview',//edit: 默认展示编辑区域 , preview: 默认展示预览区域
        editable: true,
        toolbarsFlag: true,
        scrollStyle: true,
        bold: false,
        codeStyle: 'code-github'
      }
      return data
    }
  },

  methods: {
    // 编辑区域内容改变
    changeFn(value, render) {
      console.log('编辑改变数据====')
      this.fileInfo = render
      this.html = render
    },
    // 保存的时候的事件
    saveFn(e) {
      this.fileInfo = e
    },
    // 下载.md文件
    downFile() {
      console.log('下载文件')
      let name = new Date()+'.md'
      let str = new Blob([this.fileInfo], {type: 'application/x-genesis-rom'});
      // 注意这里要手动写上文件的后缀名
      saveAs(str, name );
    },
    // 添加上传图片事件
    imgAddFn(pos, imgfile) {
      var formdata = new FormData()
      formdata.append('file', imgfile)
      // 第一步.将图片上传到服务器.
      saveFileAndData('yizhi-note', formdata).then(res => {
        // 第二步.将返回的url替换到文本原位置![...](0) -> ![...](url)
        /**
         * $vm 指为mavonEditor实例,可以通过如下两种方式获取
         * 1. 通过引入对象获取: `import {mavonEditor} from ...` 等方式引入后,`$vm`为`mavonEditor`
         * 2. 通过$refs获取: html声明ref : `<mavon-editor ref=md ></mavon-editor>,`$vm`为 `this.$refs.md`
         */
        // 第一种不知道为什么$vm不好使,未解决
        // $vm.$img2Url(pos, res);
        // 第二种 需要在上方添加 添加 ref = md,然后才可以使用
        this.$refs.md.$img2Url(pos, res.data.url)
      })
    },

    get_mark_data() {
      // return 'asd'
    }
  }
}
</script>
<style scoped>
.markdown {
  /*width: 700px;*/
  width: 100%;
  /* 暂时未限制高度 height: 500px;*/
  margin: 0 auto;
}
</style>

解析:

  1. changeFn():监听编辑区域改变数据,根据需要完善功能
  1. saveFn():保存事件,根据需要完善功能

  2. 自定义添加按钮

    <!-- 左工具栏后加入自定义按钮  -->
          <template slot="left-toolbar-after">
            <button
              type="button"
              @click="downFile()"
              class="op-icon fa fa-mavon-align-left"
              aria-hidden="true"
              title="下载"
            ></button>
          </template>
    

    downFile():下载.md文件到本地

  3. imgAddFn():上传文件事件,这里集成了自己的oss服务器,最后用的是图片路径
    在这里插入图片描述

03-08
### RuoYi框架概述 RuoYi是一个基于Spring Boot的快速开发平台,旨在简化企业级应用的构建过程[^1]。该框架集成了多种常用技术栈,如MyBatis Plus、Shiro、Redis等,提供了丰富的功能模块和插件支持。 #### 主要特点 - **前后端分离架构**:前端采用Vue.js实现响应式设计;后端则由Java语言编写的服务端逻辑构成。 - **权限管理系统**:内置完善的菜单管理、角色分配以及用户认证授权机制。 - **代码生成器**:提供可视化界面自动生成增删改查(CRUD)操作的基础代码模板。 - **集成第三方组件**:轻松接入诸如ECharts图表库、Quartz调度框架等功能扩展包。 #### 开发环境准备 为了能够顺利地运行并调试RuoYi项目,在本地计算机上需预先完成如下几项准备工作: - 安装JDK (建议版本8以上),确保JAVA_HOME环境变量已正确设置; - 下载并安装IDEA社区版或者专业版作为主要编程工具; - 配置Maven仓库地址以便于依赖管理和打包编译; - 设置MySQL数据库服务及其连接参数; - 可选地部署Redis缓存服务器来提升性能表现。 对于具体的安装指南可以参阅相关文档说明。 #### 获取源码方法 有两种途径可以获得完整的RuoYi开源工程文件夹结构: - 如果已经配置好了Git客户端,则可以直接通过克隆远程仓库的方式获取最新版本的源码资源[^3]; - 否则也可以手动前往GitHub页面下载ZIP压缩包形式发布的稳定发行版。 #### 关键概念解析 针对提到的任务调度方面的问题,确实应该遵循良好的编码习惯将定时作业相关的业务逻辑封装到专门负责此类工作的类中去处理而不是混杂在其他地方[^2]。例如创建名为`ScheduleMain.java`的新文件用于集中管理所有的计划任务定义。 ```java import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public class ScheduleMain { @Scheduled(cron = "0 0 * * * ?") // 每小时执行一次 public void performTask() { System.out.println("Executing scheduled task..."); } } ``` 上述示例展示了如何利用注解驱动的方式来声明周期性的后台线程调用特定函数体内的指令序列。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yizhi-w

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值