# vue-svgEditor **Repository Path**: wusyJava/vue-svg-editor ## Basic Information - **Project Name**: vue-svgEditor - **Description**: 一个功能强大的 SVG 可视化编辑器,支持拖拽式创建组态图、实时数据绑定、MQTT 协议集成等功能,适用于工业监控、物联网可视化、电力系统、水务系统等多种场景。 - **Primary Language**: JavaScript - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-11-10 - **Last Updated**: 2025-11-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Vue Web SVG 组态编辑器 > 基于 Vue 3 + TypeScript 的企业级 SVG 组态可视化编辑器 一个功能强大的 SVG 可视化编辑器,支持拖拽式创建组态图、实时数据绑定、MQTT 协议集成等功能,适用于工业监控、物联网可视化、电力系统、水务系统等多种场景。 ## ✨ 核心特性 ### 🎨 丰富的组件支持 - **SVG 矢量组件** - 支持任意 SVG 图标和矢量图形 - **图片组件** - 支持 PNG、JPG、GIF 等格式 - **视频组件** - 支持 MP4 等视频格式 - **文本组件** - 支持富文本和多行文本 - **图表组件** - 支持折线图、柱状图、饼图等 ECharts 图表 - **绘制组件** - 支持直线、矩形、圆形等基础图形绘制 - **表格组件** - 支持数据表格展示 ### 🖱️ 便捷的操作功能 - **拖拽式编辑** - 组件库拖拽即可添加 - **框选功能** - 支持框选多个组件,统一移动、删除等操作 - **多种选择模式** - 点击单个选择、框选批量选择 - **键盘快捷键** - 支持 Ctrl+C 复制、Delete 删除、方向键移动 - **右键菜单** - 支持复制、删除、图层调整等操作 ### 🔌 实时数据集成 - **MQTT 协议支持** - 支持 MQTT 实时数据订阅和推送 - **数据驱动更新** - 组件属性可绑定动态数据 - **多点数据绑定** - 单个组件可绑定多个数据源 - **表达式支持** - 支持 JavaScript 表达式计算 ### 🎯 专业的编辑功能 - **属性面板** - 可视化修改组件所有属性 - **画布配置** - 支持自定义画布大小、背景色 - **图层管理** - 支持组件置于顶层/底层、上移/下移 - **撤销重做** - 支持操作历史记录(规划中) - **保存/加载** - 支持本地保存 JSON 配置和 SVG 导出 ### 💻 技术栈 - **前端框架**:Vue 3.2+ (Composition API) - **类型系统**:TypeScript - **UI 框架**:Element Plus + Naive UI - **构建工具**:Vite - **样式预处理**:SCSS / Less - **实时通信**:MQTT.js - **图表库**:ECharts (vue-echarts) - **状态管理**:Vue Reactivity - **HTTP 客户端**:Axios - **路由管理**:Vue Router 4 ## 🚀 快速开始 ### 环境要求 - Node.js >= 14.0 - npm >= 6.0 或 pnpm ### 安装依赖 ```bash # 克隆项目 git clone [repository-url] # 进入项目目录 cd vue-web-svgeditor # 安装依赖 npm install # 或 pnpm install ``` ### 启动开发服务器 ```bash npm run dev # 或 pnpm dev ``` 访问 http://localhost:5173 ### 构建生产版本 ```bash npm run build # 或 pnpm build ``` ## 📖 使用指南 ### 组件分类 编辑器提供了以下组件分类: 1. **📝 文本组件** - 文字、标签、标题等文本组件 2. **📦 常规组件** - 通用 SVG 图标和图形组件 3. **⚡ 电力组件** - 电力系统专用组件(变压器、开关、继电器等) 4. **✏️ 绘制组件** - 直线、矩形、圆形等绘制工具 5. **📊 图表组件** - ECharts 图表组件 6. **💧 水务组件** - 水务系统专用组件 7. **⛏️ 煤炭组件** - 煤炭工业专用组件 ### 如何添加自定义组件 组件定义在 `public/json/InterfaceReturn.json` 文件中,添加新组件只需在该文件中新增一个对象。 #### 基础组件格式 ```json { "type": "CustomComponent", // 组件唯一标识 "title": "自定义组件", // 组件显示名称 "panel_class": "common", // 左侧工具栏分类:common/text/power/draw/chart/water/coal "template": "...", // SVG 模板代码 "props": ["prop_data"], // 组件属性 "extend_attr": { // 扩展属性(右侧面板可编辑) "color": { "title": "颜色", "val": "#FF0000", "type": "colorinputbox" } }, "create_type": "draggable", // 创建方式:draggable(拖拽)或 draw(绘制) "priview_img": "/path/to/img.png" // 左侧工具栏预览图 } ``` #### SVG 模板示例 ```vue ``` #### 扩展属性类型 - `colorinputbox` - 颜色选择器 - `textinputbox` - 文本输入框 - `textareainputbox` - 多行文本域 - `numberinputbox` - 数字输入框 - `select` - 下拉选择框 - `radiogroup` - 单选按钮组 ### 如何操作 #### 基础操作 - **添加组件**:从左侧工具栏拖拽组件到画布 - **选择组件**:点击组件选中,选中后右侧显示属性面板 - **移动组件**:拖拽选中的组件 - **框选多个**:按住鼠标左键拖拽框选 - **复制组件**:选中组件后按 `Ctrl+C` - **删除组件**:选中组件后按 `Delete` - **移动组件**:选中组件后使用方向键 `↑↓←→` #### 快捷键 - `Ctrl + C` - 复制组件 - `Delete` - 删除组件 - `Ctrl + →` - 置于顶层 - `Ctrl + ←` - 置于底层 - `Ctrl + ↑` - 上移一层 - `Ctrl + ↓` - 下移一层 - `↑↓←→` - 移动选中的组件 ### MQTT 数据绑定 #### 配置 MQTT 主题 在组件属性中配置 `nodeKey`,该 key 将作为 MQTT 订阅的主题: ```javascript // 组件数据示例 { nodeKey: "temperature001", // MQTT 主题 active: { active_color: { alarm: [{ expression: { val: "value>50" }, color: { val: "#FF0000" } }] } } } ``` #### MQTT 消息格式 ```json { "temperature001": 25.5, "pressure001": 1013.2 } ``` 编辑器会自动订阅配置的主题并更新组件状态。 ## 🏗️ 项目结构 ``` vue-web-svgeditor/ ├── public/ # 静态资源 │ ├── json/ # 组件配置文件 │ └── images/ # 图片资源 ├── src/ │ ├── api/ # API 接口 │ ├── assets/ # 资源文件 │ ├── components/ # 组件 │ │ ├── LeftToolBar.vue # 左侧工具栏 │ │ ├── RightToolBar.vue # 右侧属性面板 │ │ ├── SvgEditor.vue # SVG 编辑器 │ │ ├── SvgPrview.vue # 预览组件 │ │ └── SvgDb/ # 数据库相关组件 │ ├── view/ # 页面 │ │ └── main.vue # 主页面 │ ├── router/ # 路由配置 │ ├── utils/ # 工具函数 │ └── main.ts # 入口文件 ├── package.json └── vite.config.ts # Vite 配置 ``` ## 🎯 主要功能 ### 组件管理 - 支持多种组件类型:SVG、图片、视频、图表、文本、表格等 - 组件可拖拽、缩放、旋转 - 支持组件分组和批量操作 - 图层管理(置于顶层/底层、上移/下移) ### 数据绑定 - 支持 MQTT 实时数据绑定 - 多点数据绑定 - 支持 JavaScript 表达式 - 数据驱动组件状态变化 ### 编辑器功能 - 框选多个组件统一操作 - 属性面板可视化编辑 - 快捷键操作 - 右键菜单 - 复制粘贴 - 撤销重做(规划中) ### 保存与导出 - JSON 配置保存 - SVG 导出 - 数据库持久化 - 本地文件下载 ## 📝 开发者文档 ### 添加新组件类型 1. 在 `public/json/InterfaceReturn.json` 中添加组件定义 2. 根据组件类型,在对应的分类中添加 3. 配置 `panel_class` 指定左侧工具栏分类 4. 配置 `extend_attr` 定义可编辑属性 ### 自定义属性编辑器 组件扩展属性支持以下类型: - `colorinputbox` - 颜色选择器 - `textinputbox` - 文本输入框 - `textareainputbox` - 多行文本域 - `numberinputbox` - 数字输入框 - `select` - 下拉选择 - `radiogroup` - 单选按钮 ### 集成后端 项目已集成基础 API,修改 `src/api/business.js` 中的接口地址即可连接后端。 ### 自定义主题 修改 `src/components/SvgEditor.vue` 中的样式部分,可自定义编辑器外观。 ## 🐛 常见问题 ### Q: 如何添加自定义组件? A: 在 `public/json/InterfaceReturn.json` 中添加组件定义,配置模板和属性即可。 ### Q: 组件不显示怎么办? A: 检查 SVG 代码是否正确转义了双引号,template 中的双引号需要用 `\"` 表示。 ### Q: 如何调整 SVG 组件的中心点? A: 在 template 中添加 `transform="translate(-x, -y)"` 调整,x 和 y 为组件宽度和高度的一半。 ### Q: 支持哪些浏览器? A: 支持 Chrome、Firefox、Edge 等现代浏览器,建议使用最新版本。 ## 🤝 贡献指南 欢迎提交 Issue 和 Pull Request! ### 如何贡献 1. Fork 本项目 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 开启 Pull Request ## 📄 License 本项目采用 [MIT License](http://opensource.org/licenses/MIT) 开源协议。 ## 🙏 致谢 - [vue-webtopo-svgeditor](https://github.com/yaolunmao/vue-webtopo-svgeditor) - 原始项目参考 - [Element Plus](https://element-plus.org/) - UI 组件库 - [Naive UI](https://www.naiveui.com/) - 辅助 UI 组件 - [ECharts](https://echarts.apache.org/) - 图表库 - [MQTT.js](https://github.com/mqttjs/MQTT.js) - MQTT 客户端 ## 📞 联系方式 如有问题或建议,欢迎提交 Issue 或联系维护团队。