基于语雀编辑器的在线文档编辑与查看功能

 更新时间:2024年07月12日 12:14:21   作者:牛老师讲GIS  
语雀是一个非常优秀的文档和知识库工具,其编辑器更是非常好用,虽无开源版本,但有编译好的可以使用,本文基于语雀编辑器实现在线文档的编辑与文章的预览,感兴趣的朋友一起看看吧

概述

语雀是一个非常优秀的文档和知识库工具,其编辑器更是非常好用,虽无开源版本,但有编译好的可以使用。本文基于语雀编辑器实现在线文档的编辑与文章的预览。

实现效果

实现

参考语雀编辑器官方文档,其实现需要引入以下文件:

<link rel="stylesheet" type="text/css" href="https://gw.alipayobjects.com/render/p/yuyan_npm/@alipay_lakex-doc/1.1.0-beta.1/umd/doc.css" rel="external nofollow" />
<link rel="stylesheet" type="text/css" href="https://unpkg.com/antd@4.24.13/dist/antd.css" rel="external nofollow" />
<script crossorigin src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script>
<script src="https://gw.alipayobjects.com/render/p/yuyan_npm/@alipay_lakex-doc/1.1.0-beta.1/umd/doc.umd.js"></script>

1. 文档编辑

const { createOpenEditor, toolbarItems } = window.Doc;
docEditor = createOpenEditor(this.$refs.editor, {
  toolbar: {
    agentConfig: {
      default: {
        items: [
          toolbarItems.cardSelect,
          '|',
          toolbarItems.undo,
          toolbarItems.redo,
          toolbarItems.formatPainter,
          toolbarItems.clearFormat,
          '|',
          toolbarItems.style,
          toolbarItems.fontsize,
          toolbarItems.bold,
          toolbarItems.italic,
          toolbarItems.strikethrough,
          toolbarItems.underline,
          toolbarItems.mixedTextStyle,
          '|',
          toolbarItems.color,
          toolbarItems.bgColor,
          '|',
          toolbarItems.alignment,
          toolbarItems.unorderedList,
          toolbarItems.orderedList,
          toolbarItems.indent,
          toolbarItems.lineHeight,
          '|',
          toolbarItems.taskList,
          toolbarItems.link,
          toolbarItems.quote,
          toolbarItems.hr,
        ]
      },
      // table选区工具栏
      table: {
        items: [
          toolbarItems.cardSelect,
          '|',
          toolbarItems.undo,
          toolbarItems.redo,
          toolbarItems.formatPainter,
          toolbarItems.clearFormat,
          '|',
          toolbarItems.style,
          toolbarItems.fontsize,
          toolbarItems.bold,
          toolbarItems.italic,
          toolbarItems.strikethrough,
          toolbarItems.underline,
          toolbarItems.mixedTextStyle,
          '|',
          toolbarItems.color,
          toolbarItems.bgColor,
          toolbarItems.tableCellBgColor,
          toolbarItems.tableBorderVisible,
          '|',
          toolbarItems.alignment,
          toolbarItems.tableVerticalAlign,
          toolbarItems.tableMergeCell,
          '|',
          toolbarItems.unorderedList,
          toolbarItems.orderedList,
          toolbarItems.indent,
          toolbarItems.lineHeight,
          '|',
          toolbarItems.taskList,
          toolbarItems.link,
          toolbarItems.quote,
          toolbarItems.hr,
        ],
      }
    }
  },
  image: {
    isCaptureImageURL:(url) => {
      // return false表示需要转存,会调用createUploadPromise
      return false;
    },
    // 配置上传接口,要返回一个promise对象
    createUploadPromise: (request) => {
      const {type, data} = request;
      if(type === 'url') {
        return Promise.resolve({
          url: url,
          filename: '上传图片'
        });
      } else if(type === 'file') {
        return new Promise(resolve => {
          let formData = new FormData();
          formData.set("file", data);
          //这里使用封装的上传文件的接口
          upload('file/upload/img', formData)
            .then(res => {
              if(res.code === 200) {
                const {fileName, url} = res.data
                resolve({
                  url: url,
                  filename: fileName
                });
              } else {
                ElMessage({
                  message: '图片上传失败!',
                  type: 'warning',
                })
              }
            })
        })
      }
    },
  }
});
window.docEditor = docEditor
// 获取文档内容
docEditor.getDocument('text/lake')
// 设置文档内容
docEditor.setDocument('text/lake', docContent);

2. 文章预览

const { createOpenViewer } = window.Doc;
// 创建阅读器
 const viewer = createOpenViewer(this.$refs.editor, {});
viewer.setDocument('text/lake', docContent);

到此这篇关于基于语雀编辑器的在线文档编辑与查看的文章就介绍到这了,更多相关语雀编辑器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅析getway网关

    浅析getway网关

    这篇文章主要介绍了getway网关的相关知识,getway可以实现nginx的请求转发和跨域(@CrossOrigin也可以实现跨域),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • Wordpress 忘记密码的处理方法

    Wordpress 忘记密码的处理方法

    有时候不小心忘了wordpress的密码了,大家可以按照下面的方法试试。
    2009-05-05
  • 详解git merge 与 git rebase的区别

    详解git merge 与 git rebase的区别

    这篇文章主要介绍了详解git merge 与 git rebase的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 漂流瓶推送需求的逻辑实现代码

    漂流瓶推送需求的逻辑实现代码

    假想有一个瓶子池,当点击附近标签的时候要从池里面推送一个瓶子给用户.推送按照一定的逻辑对池里的瓶子排序,排序规则主要由两个数据决定:瓶子上次推送时间和与用户之间的距离.
    2010-12-12
  • 各种编程语言中$符号的意义

    各种编程语言中$符号的意义

    这篇文章主要介绍了各种编程语言中$符号的意义,本文是给编程新看看的,$符号在多种编程语言中都在使用,需要的朋友可以参考下
    2014-09-09
  • 在VScode中创建你的代码模板的方法

    在VScode中创建你的代码模板的方法

    这篇文章主要介绍了在VScode中创建你的代码模板的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • 在github上怎样修改语言设置

    在github上怎样修改语言设置

    这篇文章主要介绍了在github上怎样修改语言设置问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • git与svn的区别及优缺点说明

    git与svn的区别及优缺点说明

    Git和SVN都是版本控制系统,用于代码管理,SVN是集中式的,需要联网并且中央服务器存在单点故障的风险,Git是分布式的,每个终端都是一个完整的仓库,不依赖中央服务器,提高了工作的灵活性和安全性,SVN易于管理权限,但必须联网工作且更新提交可能面临冲突
    2024-10-10
  • Websocket直播间聊天室教程  GoEasy快速实现聊天室

    Websocket直播间聊天室教程 GoEasy快速实现聊天室

    这篇文章主要介绍了Websocket直播间聊天室教程 GoEasy快速实现聊天室,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • 使用Git Hook技术定义和校验代码提交模板方式

    使用Git Hook技术定义和校验代码提交模板方式

    这篇文章主要介绍了使用Git Hook技术定义和校验代码提交模板方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11

最新评论