当前位置:   article > 正文

vue3 + UEditor puls富文本编辑器_vue3 ueditor

vue3 ueditor

也是第一次用,记录一下,万一以后再次用到呢

UEditorPlus 配置文档: UEditorPlus 配置文档 | UEditorPlus 使用文档

一、准备工具

        前端用的是ruoyi-vue框架。

        1.下载UEditor puls代码和官方相关说明:ueditor-plus: 基于 UEditor 二次开发的富文本编辑器 - Gitee.com       

        2.解压压缩包,如图:

        

        3.拿到“dist”文件夹的内容,重命名为UEditorPlus,并将其复制到vue项目的public下,如图: 

        

        4.回到项目中,在终端安装UEditor插件 npm i vue-ueditor-wrap 

        5.全局挂载组件并封装成公共组件

        全局挂载,在项目中找到main.js文件,添加代码

  1. // 富文本组件
  2. import UEditorPlus from "@/components/UEditorPlus"
  3. // 全局组件挂载
  4. Vue.component('UEditorPlus', UEditorPlus)

        6.在项目中的公共组件文件夹下新建UEditorPlus>index.vue

        

        7.在index.vue中添加代码

  1. <template>
  2. <div class="u-editor-content" style="width: 100%">
  3. <vue-ueditor-wrap v-model="content" :editor-id="props.id" :config="editorConfig"
  4. :editorDependencies="['ueditor.config.js', 'ueditor.all.js']" />
  5. </div>
  6. </template>
  7. <script lang="ts" setup>
  8. import { VueUeditorWrap } from 'vue-ueditor-wrap'
  9. import { getToken } from "../../utils/auth";
  10. import { computed, ref } from 'vue'
  11. const props = defineProps({
  12. // 内容
  13. modelValue: {
  14. type: String,
  15. default: ''
  16. },
  17. // serverUrl 是你服务器上传地址
  18. // 一般情况下,直接用import.meta.env.VITE_APP_BASE_API + "/这是你的服务器上传地址"
  19. // 但是我的项目有点问题,没找到什么原因,用不了,只能每次引用组件的时候传值
  20. serverUrl: {
  21. type: String,
  22. default: ''
  23. },
  24. // 必须得有,如果要在一个页面内写两个或以上的组件,需要用id去区分
  25. id: {
  26. type: String,
  27. default: ''
  28. }
  29. })
  30. const emits = defineEmits(['update:modelValue'])
  31. const content = computed({
  32. get() {
  33. return props.modelValue || ''
  34. },
  35. set(value) {
  36. emits('update:modelValue', value)
  37. return value
  38. }
  39. })
  40. const editorConfig = {
  41. // 图片限制最大3M
  42. imageMaxSize: 3145728,
  43. // 富文本输入框高度
  44. initialFrameHeight: 500,
  45. // 富文本输入框宽度
  46. initialFrameWidth: '100%',
  47. // 初始化样式 编辑区自定义样式,如果自定义,最好给 p 标签如下的行高,要不输入中文时,会有跳动感
  48. initialStyle: 'body p{line-height:1.8em; margin: 0 ;} h1,h2,h3,h4,blockquote{margin: 0 ;} body table{margin: 0 ;}',
  49. autoFloatEnabled: false,
  50. // 获取上传配置路径
  51. // configUrl: import.meta.env.VITE_APP_BASE_API + '/UEditor/',
  52. // 上传服务路径
  53. serverUrl: props.serverUrl,
  54. // 必须配置域名,否则发版后获取不到页面资源
  55. UEDITOR_HOME_URL: location.origin + '/UEditorPlus/',
  56. // 配置请求头token
  57. serverHeaders: {
  58. 'Authorization': `Bearer + ${getToken()}`,
  59. // 看具体情况需不需要token
  60. 'Token': getToken()
  61. },
  62. // 上传图片配置
  63. imageConfig: {
  64. // 禁止在线管理
  65. disableOnline: true,
  66. }
  67. }
  68. </script>
  69. <style lang="scss" scoped>
  70. .u-editor-content {
  71. :deep(.edui-default) {
  72. .edui-editor {
  73. border-top: none;
  74. }
  75. }
  76. :deep(.edui-editor-toolbarbox) {
  77. position: sticky;
  78. top: 0;
  79. background-color: #fff;
  80. z-index: 1100;
  81. border-top: 1px solid #eee;
  82. }
  83. :deep(body) {
  84. margin: 0 !important;
  85. * {
  86. margin: 0;
  87. }
  88. }
  89. }
  90. </style>

       8.相关配置

        找到之前引入的public > UEditorPlus > ueditor.all.js文件

        

       (下面的这些是我遇到的问题,去百度的解决办法,每个人可能不一样,可以先不用管,等出问题的时候再说)

        更换路径

        

        然后把public > UEditorPlus文件夹下的所有html中删除以下代码

        

9.去组要引用组件的页面,引入使用

        @update:modelValue  是编辑器发生变化时调用的方法

                

10.最关键的步骤(这个组件的配置不单单需要前端来完成,还需要后端配合)

后端代码

  1. {
  2. /* 上传图片配置项 */
  3. "imageActionName": "uploadimage", /* 执行上传图片的action名称 */
  4. "imageFieldName": "upfile", /* 提交的图片表单名称 */
  5. "imageMaxSize": 2048000, /* 上传大小限制,单位B */
  6. "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 上传图片格式显示 */
  7. "imageCompressEnable": true, /* 是否压缩图片,默认是true */
  8. "imageCompressBorder": 1600, /* 图片压缩最长边限制 */
  9. "imageInsertAlign": "none", /* 插入的图片浮动方式 */
  10. "imageUrlPrefix": "http://localhost:81/dev-api/", /* 图片访问路径前缀 */
  11. "imagePathFormat": "image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
  12. /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */
  13. /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */
  14. /* {time} 会替换成时间戳 */ /* {yyyy} 会替换成四位年份 */
  15. /* {yy} 会替换成两位年份 */
  16. /* {mm} 会替换成两位月份 */
  17. /* {dd} 会替换成两位日期 */
  18. /* {hh} 会替换成两位小时 */
  19. /* {ii} 会替换成两位分钟 */
  20. /* {ss} 会替换成两位秒 */
  21. /* 非法字符 \ : * ? " < > | */
  22. /* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */
  23. /* 涂鸦图片上传配置项 */
  24. "scrawlActionName": "uploadscrawl", /* 执行上传涂鸦的action名称 */
  25. "scrawlFieldName": "upfile", /* 提交的图片表单名称 */
  26. "scrawlPathFormat": "image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
  27. "scrawlMaxSize": 2048000, /* 上传大小限制,单位B */
  28. "scrawlUrlPrefix": "", /* 图片访问路径前缀 */
  29. "scrawlInsertAlign": "none", /* 截图工具上传 */
  30. "snapscreenActionName": "uploadimage", /* 执行上传截图的action名称 */
  31. "snapscreenPathFormat": "image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
  32. "snapscreenUrlPrefix": "", /* 图片访问路径前缀 */
  33. "snapscreenInsertAlign": "none", /* 插入的图片浮动方式 */
  34. /* 抓取远程图片配置 */
  35. "catcherLocalDomain": ["127.0.0.1", "localhost", "img.baidu.com"],
  36. "catcherActionName": "catchimage", /* 执行抓取远程图片的action名称 */
  37. "catcherFieldName": "source", /* 提交的图片列表表单名称 */
  38. "catcherPathFormat": "image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
  39. "catcherUrlPrefix": "", /* 图片访问路径前缀 */
  40. "catcherMaxSize": 2048000, /* 上传大小限制,单位B */
  41. "catcherAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 抓取图片格式显示 */
  42. /* 上传视频配置 */
  43. "videoActionName": "uploadvideo", /* 执行上传视频的action名称 */
  44. "videoFieldName": "upfile", /* 提交的视频表单名称 */
  45. "videoPathFormat": "video/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
  46. "videoUrlPrefix": "http://localhost:81/dev-api/", /* 视频访问路径前缀 */
  47. "videoMaxSize": 102400000, /* 上传大小限制,单位B,默认100MB */
  48. "videoAllowFiles": [ ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"], /* 上传视频格式显示 */
  49. /* 上传文件配置 */
  50. "fileActionName": "uploadfile", /* controller里,执行上传视频的action名称 */
  51. "fileFieldName": "upfile", /* 提交的文件表单名称 */
  52. "filePathFormat": "file/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
  53. "fileUrlPrefix": "", /* 文件访问路径前缀 */
  54. "fileMaxSize": 51200000, /* 上传大小限制,单位B,默认50MB */
  55. "fileAllowFiles": [ ".png", ".jpg", ".jpeg", ".gif", ".bmp", ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid", ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml" ], /* 上传文件格式显示 */
  56. /* 列出指定目录下的图片 */
  57. "imageManagerActionName": "listimage", /* 执行图片管理的action名称 */
  58. "imageManagerListPath": "image/", /* 指定要列出图片的目录 */
  59. "imageManagerListSize": 20, /* 每次列出文件数量 */
  60. "imageManagerUrlPrefix": "", /* 图片访问路径前缀 */
  61. "imageManagerInsertAlign": "none", /* 插入的图片浮动方式 */
  62. "imageManagerAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 列出的文件类型 */
  63. /* 列出指定目录下的文件 */
  64. "fileManagerActionName": "listfile", /* 执行文件管理的action名称 */
  65. "fileManagerListPath": "file/", /* 指定要列出文件的目录 */
  66. "fileManagerUrlPrefix": "", /* 文件访问路径前缀 */
  67. "fileManagerListSize": 20, /* 每次列出文件数量 */
  68. "fileManagerAllowFiles": [ ".png", ".jpg", ".jpeg", ".gif", ".bmp", ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid", ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml" ] /* 列出的文件类型 */
  69. }

11.到此,就差不多可以正常使用了

特别提醒:因为每个人的项目不一样,可能遇到的问题不一样,不敢保证能够一定适合你的项目,

如果遇到什么问题,欢迎随时和我沟通

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/733942
推荐阅读
相关标签
  

闽ICP备14008679号