一、安装

npm install summernote-vue jquery summernote bootstrap @popperjs/core

二、summernoteEditor.vue

<template><div ref="editorRef"></div>
</template><script setup>
import {ref, onMounted, onBeforeUnmount, watch} from 'vue';
import $ from 'jquery';  // 直接导入 jQuery 并设置全局变量
window.$ = window.jQuery = $;// 使用 ES6 导入替代 require
import 'bootstrap/dist/css/bootstrap.min.css';
import 'bootstrap/dist/js/bootstrap.bundle.min.js';
import 'summernote/dist/summernote.min.css';
import 'summernote/dist/summernote.min.js';
import 'summernote/dist/lang/summernote-zh-CN.js';const props = defineProps({modelValue: {type: String,default: ''}
});const emit = defineEmits(['update:modelValue', 'init', 'change']);
const editorRef = ref(null);
let summernoteInstance = null;
const { proxy } = getCurrentInstance();
onMounted(() => {// 合并默认配置和用户配置const mergedOptions = {lang: 'zh-CN',height: 800,fontNames: [//字体类型配置'宋体', '微软雅黑', '楷体', '黑体', '隶书', 'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New','Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande','Tahoma', 'Times New Roman', 'Verdana'],fontNamesIgnoreCheck: [//字体类型配置'宋体', '微软雅黑', '楷体', '黑体', '隶书', 'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New','Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande','Tahoma', 'Times New Roman', 'Verdana'],fontSize: ['8', '9', '10', '11', '12', '14', '16', '18', '24', '36', '48', '60', '72', '90'],toolbar: [// 字体样式['style', ['bold', 'italic', 'underline', 'clear']],// 字体类型['font', ['fontname']],// 字体大小['fontsize', ['fontsize']],// 字体颜色['color', ['color']],// 列表['para', ['ul', 'ol', 'paragraph']],// 表格['table', ['table']],// 插入['insert', ['link', 'picture', 'video']],// 视图['view', ['fullscreen', 'codeview', 'help']]],callbacks: {onChange: (contents) => {emit('update:modelValue', contents);emit('change', contents);},onImageUpload: (files) => {uploadImage(files[0]);}},placeholder: '请输入内容...'};// 初始化编辑器summernoteInstance = $(editorRef.value).summernote(mergedOptions);// 设置初始内容if (props.modelValue) {summernoteInstance.summernote('code', props.modelValue);}emit('init', summernoteInstance);
});// 监听外部内容变化并更新编辑器
watch(() => props.modelValue, (newValue) => {if (summernoteInstance && newValue !== summernoteInstance.summernote('code')) {summernoteInstance.summernote('code', newValue);}
});// 组件销毁前清理资源
onBeforeUnmount(() => {if (summernoteInstance) {summernoteInstance.summernote('destroy');summernoteInstance = null;}
});// 图片上传函数
const uploadImage = (file) => {proxy.$modal.loading("正在上传文件,请稍候...");const formData = new FormData();formData.append('file', file);// 调用后端API上传图片fetch(import.meta.env.VITE_APP_BASE_API + "/common/upload", {method: 'POST',body: formData}).then(response => response.json()).then(data => {if (data.url) {// 将图片插入编辑器const imgHtml = `<img src="${data.url}" alt="上传图片">`;console.log(imgHtml)console.log(summernoteInstance)summernoteInstance.summernote('code', summernoteInstance.summernote("code") + imgHtml);proxy.$modal.closeLoading();} else {alert('图片上传失败');}}).catch(error => {console.error('上传错误:', error);alert('网络错误,上传失败');});
};
</script>

三、使用

<SummernoteEditor :modelValue="form.content"/>import SummernoteEditor from '@/components/summernoteEditor.vue';

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/87865.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/87865.shtml
英文地址,请注明出处:http://en.pswp.cn/web/87865.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

低代码平台的性能测试实践与挑战

一、引言 近年来&#xff0c;低代码平台&#xff08;Low-Code Platform&#xff09;正在快速改变企业软件开发方式。Gartner 预测&#xff0c;到 2025 年&#xff0c;超过 70% 的应用开发将基于低代码或无代码技术。通过“拖拉拽建模 图形化逻辑 一键发布”&#xff0c;企业…

Stereolabs ZED系列与ZED X立体相机系列对比:如何根据项目需求选择?

Stereolabs是全球领先的三维视觉技术公司&#xff0c;专注于为机器人、自动化和空间感知等领域提供高性能视觉解决方案。其ZED立体相机系列包括ZED和ZED X两大系列&#xff0c;分别针对多场景三维感知和工业级应用设计&#xff0c;为企业和开发者提供了丰富的选择。ZED系列&…

Spring Boot登录认证实现学习心得:从皮肤信息系统项目中学到的经验

前言 最近通过一个皮肤信息管理系统的项目实践&#xff0c;深入学习了Spring Boot框架中登录认证功能的实现方式。这个项目涵盖了从后端配置到前端集成的完整流程&#xff0c;让我对现代Web应用的安全机制有了更深刻的理解。本文将分享我在这个过程中的学习心得和技术要点。 …

【初阶数据结构】双向链表

文章目录 双向链表1.申请节点2.链表初始化3.尾插4.打印链表5.头插6.尾删7.头删8.查找9.指定位置插入10.删除pos节点11.链表的销毁12.程序源码 双向链表 链表分类 8种 (带头/不带头 单向/双向 循环/循环) 最常用两种 单链表(不带头单向不循环链表) 双向链表&#xff08;带头双向…

从 Prompt 管理到人格稳定:探索 Cursor AI 编辑器如何赋能 Prompt 工程与人格风格设计(下)

六、引入 Cursor AI 编辑器的开发流程革新 在整个系统开发过程中&#xff0c;我大量采用了 Cursor 编辑器作为主要的开发环境&#xff0c;并获得以下关键收益&#xff1a; 具备 AI 补全与代码联想功能&#xff1a;支持通过内置 Copilot 模型对 Python、FastAPI、YAML、JSON 等…

Spark运行架构

Spark框架的核心是一个计算引擎&#xff0c;整体来说&#xff0c;它采用了标准master-slave的结构  如下图所示&#xff0c;它展示了一个Spark执行时的基本结构&#xff0c;图形中的Driver表示master&#xff0c;负责管理整个集群中的作业任务调度&#xff0c;图形中的Executo…

基于未合入PR创建增量patch的git管理方法

目录前言准备操作步骤精准移植基础PR到本地分支修改代码鸿蒙编译、调试、测试具体编译指令、测试步骤这里带过&#xff0c;这不是本文论述重点创建diff文件工作仓库应用最新patch总结前言 作为程序员&#xff0c;多人协同开发同一个需求是正常的。即使是自己一个人搞需求&…

git真正更新项目

背景 Fetch all remote后flutter代码都拉下来&#xff0c;都是Android项目应用不上&#xff1b;git–>update project才生效&#xff01;&#xff01;&#xff01;

AI时代如何拓展Web前端开发的边界

文章目录 1 从“页面仔”到“智能体验构建者”——前端的变与不变2 AI 如何重塑 Web 前端&#xff1a;从开发到用户体验的革命2.1 AI 赋能开发效率&#xff1a;前端工程师的“超级外挂”2.1.1 智能代码辅助与生成2.1.2 自动化测试与 Bug 定位 2.2 AI 提升用户体验&#xff0c;构…

chrome webdrive异常处理-session not created falled opening key——仙盟创梦IDE

注册表错误 :EKKOK:chromeinstallerut1 Lgoogle update settings.cc:26b falled opening key .( e\Update\ClientStateMedium 8A69D345-D564-463c-AFF1-A69D9E530F96} to set usagestats 连接超时 disconnected: received Inspector.detached eventfailed to check if windo…

【Java EE初阶 --- 多线程(进阶)】JUC

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 &#xff0c;Java 欢迎大家访问~ 创作不易&#xff0c;大佬们点赞鼓励下吧~ 文章目录 JUC组件ReentrantLock与s…

免费静态网站搭建

免费静态网站搭建 内容简介搭建步骤GitHub仓库创建Jekyll安装使用Jekyll安装指南Jekyll快速搭建测试Jekyll后续玩法 内容简介 &#x1f6a9;Tech Contents&#xff1a;GithubPage/Jekyll/Custom URLs &#x1f431;GitHub Pages&#xff1a;静态网站托管服务&#xff0c;自动将…

MySQL 8.0 OCP 1Z0-908 题目解析(21)

题目81 Choose two. Examine the modified output: mysql> SHOW SLAVE STATUS\G *************************** 1. row ***************************Slave_IO_Running: YesSlave_SQL_Running: YesSeconds_Behind_Master: 1612Seconds_Behind_Master value is steadily gro…

Web前端开发-HTML、CSS

文章目录是什么&#xff1f;HTML快速入门VS Code开发工具基础标签&样式新浪新闻-标题标题排版标题样式标题样式-1标题样式-2超链接新浪新闻-正文新浪新闻-正文排版新浪新闻-页面布局表格标签表单标签表单标签-表单项是什么&#xff1f; HTML快速入门 VS Code开发工具 基础标…

Vue.js状态管理: Vuex在大型项目中的实际应用

# Vue.js状态管理: Vuex在大型项目中的实际应用 ## 一、Vuex核心架构与大型项目适配 ### 1.1 状态管理&#xff08;State Management&#xff09;的本质需求 在复杂前端系统中&#xff0c;组件间的数据传递成本随项目规模呈指数级增长。根据Vue官方统计&#xff0c;超过500个组…

C++开发:结构体作为函数形参的值传递与引用传递

笔者定义了一个结构体变量&#xff0c;用于作为函数的形参&#xff0c;定义如下&#xff1a;struct CardParameters {float* Average nullptr;int averageSize 0; }; 需求描述&#xff1a;结构体变量作为函数的形参&#xff0c;在函数体中给指针变量分配内存空间并赋值&#…

【unity小技巧】在 Unity 中将 2D 精灵添加到 3D 游戏中,并实现阴影投射效果,实现类《八分旅人》《饥荒》等等的2.5D游戏效果

注意&#xff1a;考虑到unity小技巧的内容比较多&#xff0c;我将该内容分开&#xff0c;并全部整合放在【unity小技巧】专栏里&#xff0c;感兴趣的小伙伴可以前往逐一查看学习。 文章目录 前言实战1、在3D场景中&#xff0c;新建一些不同形状的2D图片2、我们新建一个Lit材质3…

Rust 内存结构:深入解析

Rust 的内存管理系统是其核心特性之一&#xff0c;结合了手动内存管理的效率与自动内存管理的安全性。以下是 Rust 内存结构的全面解析&#xff1a; 内存布局概览 ----------------------- | 代码段 (Text) | 只读&#xff0c;存储可执行指令 ----------------------…

【Chrome】‘Good助手‘ 扩展程序使用介绍

这是我开发的一款 Chrome 浏览器扩展程序&#xff0c;目前主要集成了‘AI对话‘&#xff0c;’总结页面’&#xff0c;‘基于页面问答’等功能&#xff0c;最近几天我也将写一篇介绍如何开发 chrome 扩展程序的博客&#xff0c;带你了解如何开发属于自己的插件。 注&#xff1…

基于mysql8.0.27部署1主2从的MHA集群

目录 一、mysql概述 1.1、关系型数据库 1.2、MySQL数据库 1.3、RDBMS术语 二、mysql的部署 2.1、拉取mysql 2.2、解压 2.3、 改名 2.4、 指定安装文件位置 2.5、 创建用户组 2.6、 修改mysql配置文件 2.7、创建data文件夹 2.8、更改mysql目录权限 2.9、初始化数据…