<template>
<div>
<div style="border: 1px solid #ccc">
<!-- 工具栏 -->
<Toolbar
style="border-bottom: 1px solid #ccc"
:editor="editor"
:defaultConfig="toolbarConfig"
/>
<!-- 编辑器 -->
<Editor
:style="styles"
:defaultConfig="editorConfig"
v-model="html"
@onChange="onChange"
@onCreated="onCreated"
/>
</div>
</div>
</template>
<script>
import { Editor, Toolbar } from "@wangeditor/editor-for-vue";
import { getToken } from "@/utils/auth";
import axios from "axios";
export default {
name: "MyEditor",
components: {
Editor,
Toolbar,
},
props: {
/* 编辑器的内容 */
value: {
type: String,
},
/* 高度 */
height: {
type: Number,
default: null,
},
/* 最小高度 */
minHeight: {
type: Number,
default: null,
},
/* 只读 */
readOnly: {
type: Boolean,
default: false,
},
// 上传文件大小限制(MB)
fileSize: {
type: Number,
default: 9,
},
/* 类型(base64格式、url格式) */
type: {
type: String,
default: "url",
},
},
//监控传参,及时更新为新值
watch: {
value: {
handler(val) {
if (val !== this.html) {
this.html = val === null ? "" : val;
}
},
immediate: true,
},
},
computed: {
styles() {
let style = {};
if (this.minHeight) {
style.minHeight = `${this.minHeight}px`;
}
if (this.height) {
style.height = `${this.height}px`;
}
return style;
},
},
data() {
return {
editorVisible: false,
editor: null,
currentValue: "",
html: "",
toolbarConfig: {
// toolbarKeys: [ /* 显示哪些菜单,如何排序、分组 */ ],
// excludeKeys: [ /* 隐藏哪些菜单 */ ],
},
showUpload: false, //是否显示上传对话框
uploadUrl: process.env.VUE_APP_BASE_API + "api/manage/article/upload", // 上传的图片服务器地址
headers: {
Authorization: "Bearer " + getToken(),
},
editorConfig: {
placeholder: "请输入内容你要上传的内容...",
// 所有的菜单配置,都要在 MENU_CONF 属性下
MENU_CONF: {
// 配置上传图片
uploadImage: {
customUpload: this.update,
},
// 继续其他菜单配置...
uploadVideo: {
customUpload: this.update,
},
},
},
};
},
methods: {
onCreated(editor) {
this.editor = Object.seal(editor); // 【注意】一定要用 Object.seal() 否则会报错
this.$nextTick(() => {
setTimeout(() => {
this.editor.toolbar.change(); // 重新计算工具栏样式
}, 100);
});
},
onChange(editor) {
this.$emit("input", this.html); // onChange 时获取编辑器最新内容
},
insertTextHandler() {
const editor = this.editor;
if (editor == null) return;
editor.insertText(" hello ");
},
printEditorHtml() {
const editor = this.editor;
if (editor == null) return;
console.log(editor.getHtml());
},
disableHandler() {
const editor = this.editor;
if (editor == null) return;
editor.disable();
},
// 上传前校检格式和大小
handleBeforeUpload(file) {
console.log("上传前校验");
// 校检文件大小
if (this.fileSize) {
const isLt = file.size / 1024 / 1024 < this.fileSize;
if (!isLt) {
this.$modal.msgError(`上传文件大小不能超过 ${this.fileSize} MB!`);
return false;
}
}
return true;
},
//自定义上传图片
// update(file, insertFn) {
// if (this.handleBeforeUpload(file)) {
// let formData = new FormData();
// formData.append("file", file);
// console.log(file);
// axios({
// method: "post",
// url: this.uploadUrl,
// data: formData,
// headers: this.headers,
// }).then((res) => {
// console.log(res);
// if (res.data.code == 200) {
// console.log("上传成功");
// let url = process.env.VUE_APP_BASE_API + res.data.fileName;
// insertFn(url);
// } else {
// this.$modal.msgError("插入失败");
// }
// });
// }
// },
update(file, insertFn) {
if (!file) {
this.$modal.msgError("文件不能为空");
return;
}
if (this.handleBeforeUpload(file)) {
let formData = new FormData();
formData.append("file", file);
const headers = {
"Content-Type": "multipart/form-data",
...this.headers,
};
// 添加文件类型检查
const allowedTypes = [
"video/mp4",
"video/webm",
"video/ogg",
"image/jpeg",
"image/png",
"image/gif",
];
if (!allowedTypes.includes(file.type)) {
this.$modal.msgError("不支持的文件类型");
return;
}
// 添加文件大小检查(例如限制为100MB)
const maxSize = 100 * 1024 * 1024;
if (file.size > maxSize) {
this.$modal.msgError("文件大小超出限制");
return;
}
axios({
method: "post",
url: this.uploadUrl,
data: formData,
headers: headers,
// 添加上传进度处理
onUploadProgress: (progressEvent) => {
const percentCompleted = Math.round(
(progressEvent.loaded * 100) / progressEvent.total
);
console.log("上传进度:", percentCompleted);
},
})
.then((res) => {
if (res.data.code == 200) {
console.log("上传成功");
let url =
process.env.VUE_APP_BASE_API +
"api/manage/annex/" +
res.data.data.id;
insertFn(url);
this.$modal.msgSuccess("上传成功");
} else {
this.$modal.msgError(res.data.msg || "上传失败");
}
})
.catch((error) => {
console.error("上传失败:", error);
this.$modal.msgError(error.response?.data?.msg || "上传失败");
});
}
},
},
mounted() {
this.$nextTick(() => {
setTimeout(() => {
console.log("初始化菜单 DOM:", document.querySelector(".w-e-menu-panel"));
console.log("margin:", getComputedStyle(document.querySelector(".w-e-menu-panel")).margin);
}, 200);
});
},
beforeDestroy() {
const editor = this.editor;
if (editor == null) return;
editor.destroy(); // 组件销毁时,及时销毁 editor ,重要!!!
},
};
</script>
<style src="@wangeditor/editor/dist/css/style.css">
.w-e-toolbar {
z-index: 10000 !important;
}
/* .w-e-bar-item {
.title {
margin: 0 auto;
}
} */
.w-e-menu-panel {
display: block !important;
visibility: visible !important;
opacity: 1 !important;
}
</style>
相关推荐
VUE #4 封装一个 wangEditor 组件
以封装 wangEditor 富文本编辑器为例,浅记 VUE 组件封装方式。本篇不涉及 wangEditor 具体使用方法介绍,如需要了解,请移步官网:wangEditor-轻量级 web 富文本编辑器。 VUE 版本:3.0。 插件页面定义 <template> <div id="demoEditor"> </div> </template> <script> //导入 WangEditor 插件 import WangE
若依项目整合wangEditor实现视频文件上传
若依项目自带的富文本组件缺少视频上传功能,作为一个CV专家当然是找一个支持视频上传的富文本组件(我就不会,)出现报错不用管,忽略错误强行安装就好了,或者你有更好的解决版本可以在评论区留言,我来改改教程。至此若依项目引入wangEditor算是完成了,组件编写好了,接下来就是引入组件,挂载组件。最后盯上了wangEditor,实现方式。在main.js里面相对应位置添加如下。下新建一个index.vue。
vue 富文本组件封装之wangeditor
一、准备工作: 1、npm install wangeditor 2、文档地址:https://www.kancloud.cn/wangfupeng/wangeditor3/ISSUE.md 二、组件代码 <template> <div> <div id="editor" ref='myEditor'></div> &...
wangeditor: 上传图片+上传视频+上传附件(自定义)完整使用
wangeditor: 上传图片+上传视频+上传附件(自定义)完整使用 一:项目需求:①角色为管理员可以新增编辑文章 + ②点击可以看文章详情 +③ 角色为管理员可以修改编辑文章 二:效果: ①角色为管理员可以新增编辑文章 步骤: ①下载安装相关依赖 npm i wangeditor --save ②引入 ③初始化创建编辑器 代码中的initialEditor函数 ④自定义上传附件按钮 主要思路:在编辑器上增加新的菜单按钮 --》实例化按钮 --》结合an...
wangeditor:一个页面使用多个wangeditor编辑器,并对wangeditor进行组件封装以及上传图片到自己的服务器
这里记录两个地方 1.如何在富文本编辑器中上传图片到自己的服务器 2.对富文本编辑器进行组件封装,并在一个页面使用多个编辑器 一、如何在富文本编辑器中上传图片到自己的服务器(只需要两步绝对可以解决问题) ...
wangEditor3上传本地视频
<!--下载js和贴上这段代码即可--> [removed][removed] <!-- 注意, 只需要引用 JS,无需引用任何 CSS !!!--> [removed] function loadEditor(){ var E = window.wangEditor; var editor = new E('#editor'); //上传视频 editor.customConfig.customUploadVideo = function (files, obj) { var date = new FormData(); date.append("file", files[0]); $.ajax({ type: "POST", url: "../../import/upload", data: date, dataType: 'json', async: false, cache: false, contentType: false, processData: false, success: function (result) { obj.callback(result.data); } }); }; editor.create();//创建富文本 } [removed]
wangeditor封装使用
wangeditor定制化需求的封装使用
WangEditor-3.1.1-本地视频上传.rar
添加了对本地视频上传的支持 具体教程看 https://blog.csdn.net/I_am_Yong_Ge/article/details/100118109
vue3封装wangEditor插件
vue3、富文本框、wangEditor
Cadence IC618/Spectre231安装避坑指南:详解环境变量配置与License管理那些事儿
本文深入解析Cadence IC618/Spectre231安装过程中的环境变量配置与License管理难题,提供从变量冲突解决到高效License管理的实用方案。针对常见的64位标识冲突、路径污染及License服务器连接问题,给出具体诊断步骤和优化建议,帮助用户构建稳定可靠的EDA环境。
ESP32连接OneNet云平台实现多设备联动控制完整示例
通过esp32连接onenet云平台,实现远程设备间的智能联动控制,利用MQTT协议完成数据通信,esp32连接onenet云平台后可高效稳定地上传与下发指令,提升物联网系统响应速度与自动化水平。
在vue中封装一个wangeditor组件
在Vue封装一个富文本组件 以后使用就方遍了 wangeditor文档 第一步安装 npm install wangeditor --save 第二步封装组件 在@/components/Editor/WangEditor.vue <template> <div :class="prefixCls"> <div ref="editor" class="editor-wrapper"></div> </div> </templ
Jetson Orin NX上PyTorch环境搭建与性能优化指南
本文详细指导如何在Jetson Orin NX上搭建高效的PyTorch开发环境。内容涵盖CUDA与cuDNN的“隐藏”配置、Miniconda虚拟环境管理、PyTorch for Jetson的正确安装与验证,并提供了电源模式设置、TensorRT加速、混合精度等关键性能优化实战技巧,帮助开发者充分释放边缘AI设备的算力。
超详细!在vue 中二次封装 wangEditor 富文本
在vue 中二次封装 wangEditor 富文本 wangEditor真的非常简洁好用,而且一直有更新,缺点就是文档内容比较少。 wangEditor文档链接 看网上很多二次封装都把逻辑放到 mounted 中,对于新手的我不太友好,逻辑不太清晰。决定自己封装一个。将各配置以方法分割,在初始化调用。 //以下是封装的组件 SimpleEditor <template> <div> <div ref="editor" style="text-align:
Plecs standalone 4.9.5最新版本,赶紧来下载使用吧,需要做并网逆变器及光伏储能变换器的朋友赶紧下载起来
PLECS 4.9.5较4.7.1版实现全面升级:采用自适应求解器切换技术,支持多核CPU/GPU加速,仿真速度提升30-50%;新增模型引用功能,实现模块化设计;强化光伏/风电等新能源组件,支持多物理场耦合分析;优化代码生成功能,兼容多种硬件平台和FMU导入。新版特别适用于复杂电力电子系统、多域联合仿真及硬件在环测试项目,但对硬件配置要求更高。基础教学项目仍可使用4.7.1版本。建议用户根据项目复杂度选择升级方案。
建模simulink - 手把手教你搭建xpc平台
概述xpc半实物仿真目标是个基于RTW对低端实时仿真和开发平台,可将计算机或者工控机转变为一个实时系统,不需要第三方操作系统对支持,在计算机上配置输入输入出设备就能和外部交换信息,进行硬件...
Vue3 富文本组件封装wangeditor
在找到这个组件之前尝试了vue-quill-editor,onChange事件失效,搜到说是不支持vue3tinymce-vue,报搜不到model.js,没找到解决方案都不好用,封装过程中存在bug最后找到了wangeditor这个富文本组件,封装成功,直接上代码引入参照文档中正常引入就好
电脑硬件:电脑主板上的接口介绍,看完你就懂了
它们主要用于连接老式的键盘和鼠标,虽然速度和兼容性不如USB接口,但在某些特定场合依然发挥着重要作用。PCIe接口是主板上的扩展能力象征,可以连接各种扩展卡,如显卡、声卡、网卡等。电脑主板作为电脑硬件组成关键的部分,今天给大家分享一下电脑主板上有哪些接口,具体每一个接口的特点、使用场景,有需要的朋友可以来了解一下!它们不仅能连接鼠标、键盘、U盘、打印机,还能连接各种外设,如移动硬盘、游戏手柄等。:虽然现在用得越来越少,但在一些特定场合,如工业控制、老旧设备上,仍然需要使用PS/2接口。
vue轻度封装wangEditor
由于有点点嫌弃QuillEditor呢,于是简单的封装了wangEditior,不过从长期来看,QuillEditor的自定义和拓展更强。 完整代码如下(部分代码来自网上,引用出处忘了,作者要是看到觉得侵权的,联系我): <template lang="html"> <div class="editor"> <div ref="toolbar" class...
Windows10环境下激活虚拟环境报错【source : 无法将“source”项识别为 cmdlet、函数、脚本文件或可运行程序的名称】
在使用Django创建Web程序前,需要创建一个虚拟的工作环境,在使用【source ll_env/bin/activate】命令激活虚拟环境时报错:source : 无法将“source”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。所在位置 行:1 字符: 2。
基于Python的上市公司年报PDF文本抓取与财务风险分析系统
随着大数据时代的到来,金融数据分析已成为投资决策和风险管理的重要工具。上市公司年报包含了丰富的财务信息和经营数据,通过对这些数据的提取和分析,可以评估公司的财务状况和潜在风险。本文将详细介绍如何使用Python构建一个完整的上市公司年报文本抓取与财务风险分析系统,涵盖PDF文本提取、数据清洗、财务指标计算和风险分析等全流程。
wangeditor 封装组件及使用
【代码】wangeditor 封装组件及使用。
SAP B1中文培訓教材_SDK
公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说
vue项目中使用wangeditor开发并进行二次封装
vue中使用wangeditor并进行二次封装
怀旧版电脑GBC模拟器
再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。
win10 跳过U8环境检测的IE WebControls.rar
win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。
Vue3: 二次封装WangEditor富文本编辑器为hook
作者:糖墨夕原文:https://juejin.cn/post/7279346413914718263初衷是基于WangEditor[1]进行了一次特殊处理,使其更加易于使用和灵活。这个编辑器可以让你像写文字一样轻松地编辑富文本内容。不论你是要写一篇精彩的博客文章,还是设计一个华丽的网页,这个编辑器都能满足我们的需求。我使用了“Hook”的机制,可以自由地定制和控制编辑器的各种功能。其实,主要是方...
NTscan扫描工具
ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。
wangEditor编辑器封装组件
2、emmiter.js自行搜索。
Vue封装WangEditor富文本编辑器
Vue中很多用vue-quill-editor编辑器的,但是感觉并不是很好用,于是决定使用以前感觉不错的WangEditor编辑器。 1、安装WangEditor npm install wangeditor 注:wangeditor全小写 2、封装WangEditor组件(WangEditor.vue) <template lang="html"> <div class="editor"> <div ref="toolbar" class="toolbar.
672



被折叠的 条评论
为什么被折叠?



