当前位置: 首页 > backend >正文

vue3项目中使用CanvasEditor开箱即用(组件的形式,组件封装好了)

canvas-editor-vue

这是canvas-editor项目的vue版本,我封装成组建了,当然了这是个已经把canvas-editor封装好的的Vue项目

项目地址GitHub地址:GitHub - aini-aini/canvas-editor-vue: this is a project than can be used in vue project as Componentthis is a project than can be used in vue project as Component - aini-aini/canvas-editor-vuehttps://github.com/aini-aini/canvas-editor-vue

1. 启动项目

1-1 安装依赖

 npm install

1-2 运行项目

 npm run dev

image-20250515204127794

2.项目说明

这是一个只有一个组件的,没有配置路由,没有配置仓库一个空白项目,components目录下自由我封装好的canvas-editor的组件

项目启动以后界面如下

image-20250515204756148

大家看到这个启动起来的项目根源码是不一样的,首先我加了一个顶部的导航栏,右边的侧边栏,左边的目录侧边栏也做了修改,这些地方会慢慢后面我会做讲解,我先告诉大家如果把这个组件用到你们的项目当中

image-20250515205216465

3.把组件用到自己的Vue项目中(Ts项目)

第一步: 把components目录下的CanvasEditor.vue放到你们项目中的components目录下

image-20250515205641156

第二部:父组建中导入使用

 <script setup lang="ts">// 导入CanvasEditor.vue组件import CanvasEditor from "./components/CanvasEditor/CanvasEditor.vue";import { ref, onMounted, nextTick } from "vue";​// 定义用于接受Editor实例的变量const canvasEditorRef = ref();</script>​<template><!-- canvasEditorRef就是CanvasEditor.vue传递过来的Editor实例 --><!-- 有了这个实例以后大家还安装插件 --><CanvasEditor ref="canvasEditorRef" /></template>​<style scoped></style>

我父组建是App.vue

image-20250515205857429

4.对于修改部分做一些说明

 <script setup lang="ts">import CanvasEditor from "./components/CanvasEditor/CanvasEditor.vue";import { ref, onMounted, nextTick } from "vue";​const canvasEditorRef = ref();onMounted(() => {nextTick(() => {const canvasEditor = canvasEditorRef.value;console.log(canvasEditor);});});</script>​<template><!--  --><CanvasEditor ref="canvasEditorRef" /></template>​<style scoped></style>
 

image-20250515210440561

反正这种组件式的封装已经可以直接在Vue项目中直接使用,关于功能你们可以直接修改组件源码,源吗就在CanvasEditor里面的Src目录

image-20250515210708070

我把源项目里面Src目录下的main.ts里面的内容放到了CanvasEditor目录下的index.ts

image-20250515210934292

把源项目里的index.html里面的html内容放到了CanvasEditor.vue里面,并且自己做了一些修改

image-20250515211058806

UI样式我也直接放到了CanvasEditor.vue里面的style里面

image-20250515211130654

5.自己修改的部分代码说明

5-1 顶部菜单栏

image-20250515211432264

下面是源码里index.html结构

image-20250515211943833

下面是我做的一些结构调整

image-20250515212050276

Top_menu_bar下面多了一个top_menu的div就是我添加的顶部菜单栏源码里面menu菜单栏fixed定位,占据60px的高度

我在修改后Top_menu_bar fix定位,占据100像素的高度;top_menu占据40像素,menu占据60像素,这其实很简单的,大家应该能看得懂

 
.top_menu_bar {width: 100%;height: 100px;background-color: #e1e5e9;position: fixed;top: 0;z-index: 9;border-bottom: 2px solid #e2e6ed;}​.top_menu {width: 100%;height: 40px;display: flex;align-items: center;justify-content: start;padding: 0 110px;}​.menu {width: 100%;height: 60px;/* top: 0; *//* z-index: 9; *//* position: fixed; */display: flex;align-items: center;justify-content: center;/* background: #F2F4F7; */background-color: #fff;box-shadow: 0 2px 4px 0 transparent;}

当然了菜单来功能我没有实现,大家需要的话自己实现一下,如果不需要菜单栏,那就再改源码,改回去,当然了,有一些动态计算的地方都需要改回去,所以如果要改回去的朋友注意去这些地方把100改回去

image-20250515212756007

5-2 关于右边菜单栏

5-2-1 菜单栏是干什么的?

我有个需求就是我希望集成Ai功能实现对文档内容的提问和替换,所以其实这个就是一个Ai侧边栏工具

5-2-2 如何实现的

其实纯插件的形式实现的,功能完全独立于组件本身,大家不想用只要注释掉几行代码即可

image-20250515213139334

CanvasEditor/src/plugin/card文件夹里就是这个插件的代码,这个功能是我自己实现的

image-20250515213318294

用法就是首先导入这个插件

 import { cardPlugin } from "./src/plugins/card"; // 插件统一导出文件

然后挂在到Editor实例上面即可,目前我只接了一个deepseek模型(⚠️:你的模型的key自己在本地这样用用可以,但是不安全的,有泄露key的风险,需要注意)

  instance.use(cardPlugin, { apiKey: "你的deepseek模型的apikey" });

大家不想用的话,直接删除导入使用逻辑即可我现在注释掉了,再看看页面

image-20250515213540970

image-20250515213732475

我再把代码加回来,给大家演示下功能

5-2-3 功能演示
1. 菜单栏显示或隐藏

插件注册以后通过工具栏就会有这个展开或合上侧边栏的图标,点击可以进行一个隐藏或者显示

image-20250515213848570

2. ai提问

选中一段文本,进行提问,并替换

image-20250515214208820

image-20250515214246474

image-20250515214317793

3. 侧边栏拖放

我这个侧边栏是可以脱离文档流进行拖拽的

image-20250515214501000

image-20250515214522989

如果想要还原回去也很简单,拖动拖到离右边窗口10px以内时,这个侧边栏边框变蓝色,意思就是可以放手吸附到侧边,此时放手即可

image-20250515214724087

image-20250515214742591

或者

image-20250515214813332

5-3 关于左边目录栏

这个其实改动不大,我只是加了过渡动画和改变了宽度,这个大家自己找找源码吧

5-4 关于目前文档内容

大家发现项目启动后是默认有内容的,其实内容也是通过独立的插件去渲染的

我有个需求就是我想要把一些从ai拿到的结果渲染到页面上,就得通过代码去操作了,所以对一些数据的插入我写了一个aiWrite插件来操作的,具体源码在

image-20250515215124299

导入和使用

我是从./src/test导入了一个testFunction;这是我用来测试用的,然后把Editor实例instanca传递过去了

image-20250515215543465

咱再来看看这个testFunction

image-20250515215808562

大家有没有注意,这个插件注册完以后Editor实例就又了新的方法就是aiWrite;在插件内容我就给editor实力家了这个aiWrite,注册后就有这个方法了,所以页面上的内容就是这么来的

image-20250515220147020

如果我把test Function注释掉看看

image-20250515220305136

可以看看页面清空了

好了,今天我就分享到这里,下面我想说一说侧边栏插件,下面的内容根上面说的把canvas-editor用到Vue项目无关了

6.源码里安装右边侧边栏

我刚开始侧边栏是直接以插件的形式开发的并做了打包发不到npm上了,不过只能在源码里使用

npm包地址:@aini_ai/ai-assistant - npm

插件源码github地址:GitHub - aini-aini/canvas-editor-ai-assistant

image-20250515220807683

我做个演示,下面这个现在是一个源码项目

image-20250515220831763

安装我发布的插件包

image-20250515220943669

然后在main.ts里面使用

首先导入和注册

 import cardPlugin from '@aini_ai/ai-assistant';// 在 canvas-editor 中注册插件instance.use(cardPlugin,{ apiKey: '你的seepseek模型的apiKey' })

image-20250515221407325

再重新启动项目即可,可以看到已经有侧边栏了

image-20250515221517967

大家需要的话可以继续修改源码去完善其功能

有问题欢迎交流

http://www.xdnf.cn/news/6357.html

相关文章:

  • AI数字人融合VR全景:从技术突破到可信场景落地
  • Hive PredicatePushDown 谓词下推规则的计算逻辑
  • Springboot3自定义starter笔记
  • 数据科学和机器学习的“看家兵器”——pandas模块 之五
  • AI实时对话的通信基础,WebRTC技术综合指南
  • 网络安全-等级保护(等保) 2-5 GB/T 25070—2019《信息安全技术 网络安全等级保护安全设计技术要求》-2019-05-10发布【现行】
  • WebRTC技术下的EasyRTC音视频实时通话SDK,助力车载通信打造安全高效的智能出行体验
  • day 17 无监督学习之聚类算法
  • Swagger go中文版本手册
  • 虚拟Python 环境构建器virtualenv安装(macOS版)
  • Prometheus监控系统部署
  • AI 治理进行时:网信办审核加速,AI 合规刻不容缓
  • 2025.05.14华为机考笔试题-第二题-200分
  • C#语法基础
  • 第30节:现代CNN架构-轻量级架构EfficientNet
  • mysql:如何查询版本号与社区版/企业版
  • 算法分析:蛮力法
  • Redis--基础知识点--27--redis缓存分类树
  • 计算机视觉----基于锚点的车道线检测、从Line-CNN到CLRNet到CLRKDNet 本文所提算法Line-CNN 后续会更新以下全部算法
  • OneNote内容太多插入标记卡死的解决办法
  • 在Rocky Linux 9.5上部署MongoDB 8.0.9:从安装到认证的完整指南
  • 【HTML】个人博客页面
  • 为什么浏览器设置代理ip后不能上网?原因与对应解决方案
  • maven报错 You have to use a classifier to attach supplemental artifacts
  • XBL6501/02/03在POE设备上的应用方案
  • JSX语法介绍
  • python制造一个报错
  • 音频/AI/BLE/WIFI/玩具/商业等方向的论坛网站总结
  • 【有理数加法结构体】2022-1-3
  • 深度理解用于多智能体强化学习的单调价值函数分解QMIX算法:基于python从零实现