【Vue引入JTopo及所遇到的问题】

article/2025/8/14 16:40:06

Vue引入JTopo及所遇到的问题

  • 前言
  • 一、方案选型
  • 二、使用步骤
  • 三、总结


前言

项目过程中总是会遇到稀奇古怪的需求,这不,咱老大又让我画一个系统拓扑图放在首页,要求部分数据需从后端获取,动态展示在页面上。对于一个后端人猿来说,只能慢慢摸索。不喜勿喷…- -


一、方案选型

由于需求还是比较简单,不需要支持在线画图,不需要工具栏等。所以笔者在这边采用了比较老的js开发工具包JTopo。使用原因主要是因为JTopo比较简单、灵活。其他地方笔者不再赘述,博友们可自行前往官网查看。

JTopo官网: 点击查看


二、使用步骤

vue引入JTopo库方案参考 vue使用JTopo

使用方式有两种:一种是将JTopo的官方js库引入到项目中后进行使用;另一种是直接安装JTopo的npm包。

方式一:

  1. 进入JTopo官网下载最新的js开发工具包-jtopo-0.4.8-min.js
  2. 将下载下来的工具包放在工程目录下。笔者放的位置如下
    在这里插入图片描述
  3. 找到public目录下的index.html,添加如下
    在这里插入图片描述
  4. demo案例
<template><div style="position: relative; width: 100%; height: 100%; margin: auto" id="topo_content"><canvas id="canvas" width="1400" height="800"></canvas></div>
</template><script>
import userImg1 from "./img/userImg-1.png";
import userImg2 from "./img/userImg-2.png";
import cloudImg from "./img/cloudImg.png";
import serverImg from "./img/server.png";
import emailImg from "./img/email.png";
import dbImg from "./img/db.png";export default {name: "index",data() {return {canvas: null,stage: null,scene: null,containerConsole: null};},computed: {},created() { },mounted() {this.init();},methods: {init() {this.canvas = document.getElementById("canvas");this.stage = new JTopo.Stage(this.canvas);this.stage.eagleEye.visible = false;this.scene = new JTopo.Scene(this.stage);// 用户节点var nodeUser1 = this.newNode("用户", "0,0,0", 80, 80, 40, 40, userImg1, 1, true);var nodeUser2 = this.newNode("用户", "0,0,0", 82, 240, 40, 40, userImg2, 1, true);var nodeCloud = this.newNode("局域网", "0,0,0", 160, 160, 40, 40, cloudImg, 1, true);// 控制台节点this.newNode("127.0.0.1", "0,0,0", 335, 160, 50, 38, serverImg, 1, true);var nodeConsole1 = this.newNode(null, null, 301, 98, 0, 0, null, 0, true);var nodeConsole2 = this.newNode(null, null, 301, 258, 0, 0, null, 0, true);var nodeConsole3 = this.newNode(null, null, 301, 178, 0, 0, null, 0, true);var nodeConsole4 = this.newNode(null, null, 380, 285, 0, 0, null, 0, true);this.newNode(null, null, 418, 170, 0, 0, null, 0, true);this.newNode(null, null, 380, 72, 0, 0, null, 0, true);this.newNode(null, null, 340, 72, 0, 0, null, 0, true);this.newNode(null, null, 336, 286, 0, 0, null, 0, true);this.newNode(null, null, 356, 286, 0, 0, null, 0, true);this.newNode("消息通知", "0,0,0", 200, 84, 20, 20, emailImg, 1, true);this.newNode("消息通知", "0,0,0", 200, 244, 20, 20, emailImg, 1, true);// 数据库节点var nodeDb = this.newNode("DB 127.0.0.1", "0,0,0", 470, 330, 40, 40, dbImg, 1, true);// 直线连接this.newLink(nodeUser1, nodeCloud, null, false);this.newLink(nodeUser2, nodeCloud, null, false);this.newLink(nodeCloud, nodeConsole3, null, true);this.newLink(nodeConsole1, nodeUser1, null, true);this.newLink(nodeConsole2, nodeUser2, null, true);// 折线连接this.newFoldLink(nodeConsole4, nodeDb, "数据读取、存储", true, "vertical");// 容器this.containerConsole = this.newContainer("决策分析系统", -30, null, 300, 72, 120, 216);this.containerConsole.dragable = false;},// 节点 文本,字体颜色,坐标,大小,图片,透明度(0-1, 1为不透明),选中时是否显示表示选中状态的矩形, 文字定位newNode(text, fontColor, x, y, w, h, img, alpha, showSelected, position) {var node = new JTopo.Node(text);node.fontColor = fontColor;node.setLocation(x, y);node.setSize(w, h);if (img != null || img != undefined) {node.setImage(img);} else {node.fillColor = "0,0,0";}if (position != null || position != undefined) {node.textPosition = position;}node.dragable = false;node.showSelected = showSelected;node.alpha = alpha;this.scene.add(node);return node;},// 简单连线 两节点,线条文本,是否需要箭头,虚线(不传代表实线, 传数字-越大虚线间隔越大)newLink(nodeA, nodeZ, text, isArrow, dashedPattern) {var link = new JTopo.Link(nodeA, nodeZ, text);link.fontColor = "0,0,0";if (isArrow) {link.arrowsRadius = 8; //箭头大小}link.lineWidth = 2; // 线宽link.dashedPattern = dashedPattern; // 虚线link.bundleOffset = 60; // 折线拐角处的长度link.bundleGap = 20; // 线条之间的间隔link.textOffsetY = 3; // 文本偏移量(向下3个像素)link.strokeColor = "0,200,255";this.scene.add(link);return link;},// 折线newFoldLink(nodeA, nodeZ, text, isArrow, direction, dashedPattern) {var link = new JTopo.FoldLink(nodeA, nodeZ, text);link.direction = direction || "horizontal";link.fontColor = "0,0,0";if (isArrow) {link.arrowsRadius = 8; //箭头大小}link.lineWidth = 2; // 线宽link.bundleOffset = 60; // 折线拐角处的长度link.bundleGap = 20; // 线条之间的间隔link.textOffsetY = 3; // 文本偏移量(向下3个像素)link.strokeColor = "0,200,255";link.dashedPattern = dashedPattern;this.scene.add(link);return link;},// 容器 文本,文本位置,布局,边界-x, y为左上角坐标,w, h为宽度和高度newContainer(text, position, layout, x, y, w, h) {var container = new JTopo.Container(text);if (text != null || text != undefined) {container.textOffsetY = position;container.fontColor = "0,0,0";container.font = "10pt 微软雅黑";}if (layout != null || layout != undefined) {container.layout = layout;}container.fillColor = "192,192,192";container.setBound(x, y, w, h);container.dragble = false;this.scene.add(container);return container;}},
};
</script><style scoped>
</style>

效果图:
在这里插入图片描述


方式二:

  1. 执行命令npm i jtopo-in-nodejtopo-in-node链接:点击这里
  2. 导入jtopo-in-node模块使用即可
    在这里插入图片描述

三、总结

~注意啦:~
上述方式一本地npm run dev后是正常的,但是上到服务器测试环境后页面啥也没有,打开F12后发现JTopo 为undefined;而方式二是正常的。由于笔者学识浅薄,若有哪位大佬知道原因,还请告知一二,笔者在此感激不敬!!!
以上便是笔者对JTopovue中使用的总结,希望对博友们有点帮助。


http://chatgpt.dhexx.cn/article/sFOPKGne.shtml

相关文章

Vue+JTopo(一)

1.下载js jtopo 更新下载 (不知道为什么网站被封禁了……在这提供下我现在用的 jtopo-1.4.4_trial-esm-min.js) 链接&#xff1a;https://pan.baidu.com/s/18V1HKwAuxzWM19RD4axGOg 提取码&#xff1a;0304 2.引用 文件放在public/js文件夹下&#xff0c;在index.hml内引用。…

jTopo(一)

jTopo(一) 一、jTopo是什么 jTopo&#xff08;Javascript Topology library)是一款完全基于HTML5 Canvas的关系、拓扑图形化界面开发工具包。 jTopo关注于数据的图形展示&#xff0c;它是面向开发人员的&#xff0c;需要进行二次开发。 使用jTopo很简单&#xff0c;可以快速…

windows10下安装MSYS2+MinGW64

1.下载msys2&#xff0c;官方地址&#xff1a;http://www.msys2.org/&#xff0c;这里选择64位的安装器 2.安装完成之后&#xff0c;先别启动msys2&#xff0c;在 安装根目录/etc/pacman.d/ 下找到mirrorlist.mingw32、mirrorlist.mingw64和mirrorlist.msys并进行修改。 mirr…

Win10 下安装 MSYS2

什么是 MSYS2 MSYS2 &#xff08;Minimal SYStem 2&#xff09; 是一个MSYS的独立改写版本&#xff0c;主要用于 shell 命令行开发环境。同时它也是一个在Cygwin &#xff08;POSIX 兼容性层&#xff09; 和 MinGW-w64&#xff08;从"MinGW-生成"&#xff09;基础上…

【msys2】使用msys2下载工具的旧版本

背景 苯人在计组实验中使用了msys2来安装verilator工具&#xff0c;结果最新版本的verilator有bug&#xff0c;几经探索找到了利用msys2下载旧版本工具的方法&#xff08;还可以将现有工具更新为旧版本&#xff09; 步骤 现以安装旧版本的verilator为例讲解方法。 这是msys…

【Window环境下使用MSYS2搭建CMake + MinGW环境】

目录标题 安装CMakecmake 测试 MSYS2下载MSYS2安装MSYS2修改软件下载源 MSYS2下安装MinGW配置MinGW配置到环境变量 hello world测试 安装CMake Cmake下载地址:https://cmake.org/download/,下一个windows压缩包就好了&#xff0c;因为我比较喜欢自己来配置&#xff0c;免得不知…

用MSYS2安装mingw

文章目录 前言卸载mingw安装MSYS2 前言 安装MSYS2的原因是&#xff0c;在windows安装protobuf时&#xff0c;想用mingw编译protobuf的库&#xff0c;而protobuf的官方手册只给出一句&#xff1a; To build from source using Cygwin or MinGW, follow the Unix installation i…

【VSCode】【msys2】VS Code + msys2配置Windows下C/C++开发环境

【VSCode】【msys2】VS Code msys2配置Windows下C/C开发环境 一、Msys2配置 1. 下载msys2, 网址&#xff1a;https://www.msys2.org/ 2. 安装msys2-x86_64-xxxx.exe 这里没什难度&#xff0c;记住安装路径就好&#xff0c;一路next就装好了。 3. 安装gcc 3.1. 更新msys2…

Msys2记录

MSYS2 ​ MSYS2是MSYS的升级版&#xff0c;集成了pacman和Mingw-w64的Cygwin升级版&#xff0c;提供了Mingw-w64的GNU工具&#xff0c;包括GCC&#xff0c;同时移植了Arch Linux的软件包管理系统pacman&#xff0c;具备了Cygwin的POSIX API&#xff0c;理论上在Linux上的程序使…

msys2在windows10系统的安装

测试系统: windows 10 首先需要msys2的安装包,可以去官网下载安装包 官网地址: http://www.msys2.org/ 本次下载的是 msys2-x86_64-20180531.exe 注意:1.msys2不可以安装在FAT*分区    2.msys2不能安装在win XP系统上 1.双击msys2-x86_64-20180531.exe,并点击下一步选择安…

MSYS2使用教程——win10系统64位安装msys2最新版(msys2-x86_xxxx.exe)

一、安装 测试系统: windows 10 首先需要msys2的安装包,可以去官网下载安装包 官网地址: http://www.msys2.org/ 本次下载的是 msys2-x86_64-latest.exe 注意: 1. msys2不可以安装在FAT*分区 2. msys2不能安装在win XP系统上 指定好安装路径&#xff08;一般D根目录即可&#…

初步使用MSYS2

在此镜像站点下载&#xff0c; https://mirror.tuna.tsinghua.edu.cn/help/msys2/ 根据资料&#xff0c; MSYS2 &#xff08;Minimal SYStem 2&#xff09; 是一个MSYS的独立改写版本&#xff0c;主要用于 shell 命令行开发环境。同时它也是一个在Cygwin &#xff08;POSIX …

超详细教程:windows安装MSYS2(mingw gcc)——更新于2021.11

目录 安装 MSYS2官网&#xff1a;https://www.msys2.org/ 安装 下载安装程序&#xff08;官网首页有&#xff09;&#xff1a;msys2-x86_64-20210725.exe 或 CSDN&#xff1a;https://download.csdn.net/download/ymzhu385/45988277运行安装程序。MSYS2 需要 64 位 Windows 7…

Argparse 教程

官方文档 argparse --- 命令行选项、参数和子命令解析器 — Python 3.10.2 文档 别人的笔记Argparse 教程 — Python 3.10.2 文档https://docs.python.org/zh-cn/3/howto/argparse.html#id1完整的argparse的API argparse --- 命令行选项、参数和子命令解析器 — Python 3.8…

python argparse

argparse 模块可以让人轻松编写用户友好的命令行接口。程序定义它需要的参数&#xff0c;然后 argparse 将弄清如何从 sys.argv 解析出那些参数。 argparse 模块还会自动生成帮助和使用手册&#xff0c;并在用户给程序传入无效参数时报出错误信息。 使用argparse从命令行传入参…

python argparse type_python argparse详解

1.argparse模块作用 用于解析命令行参数 2.位置参数和可选参数 运行以下代码: import argparse parser = argparse.ArgumentParser() args = parser.parse_args() 运行结果: 参数为-h或--help时,parser.parse_args()会输出命令行的位置参数position arguments和可选参数opti…

Python3中使用argparse模块解析命令行参数

argparse是Python的一个标准模块&#xff0c;用于解析命令行参数&#xff0c;即解析sys.argv中定义的参数。实现在&#xff1a;https://github.com/python/cpython/blob/main/Lib/argparse.py argparse模块还会自动生成帮助和使用信息&#xff0c;即在最后加-h或--help。当用户…

argparse教程

argparse教程 argparse是用来干什么的&#xff1f;位置参数和可选参数测试argparse的功能test1test2test3test4test5-可选参数test6-action选项test7-短选项test8-同时使用位置参数和可选参数test9test10-限定参数的取值范围test11-action"count"test12-None无法和in…

argparse 模块详解

文章目录 1. argparse 模块简介2. 未使用argparse示例3. 使用argparse示例3.1 argparse简单示例3.2 argparse进阶示例3.2.1 可选参数设置3.2.2 可选参数引用名3.2.3 清除帮助中的参数名信息3.2.4 必选参数设置3.2.5 列表参数&#xff08;多参数&#xff09;传入设置3.2.6 互斥参…

python中的argparse基本用法

1、argparse是一个python模块&#xff0c;用途是&#xff1a;命令行选项、参数和子命令的解释。 2、使用步骤&#xff1a; 导入argparse模块&#xff0c;并创建解释器添加所需参数解析参数 3、用法示例&#xff1a; import argparse# 1.创建解释器 parser argparse.Argume…