vue中图谱关系插件relation-graph

vue中图谱关系插件relation-graph

  • 一、效果图
  • 二、安装下载(vue2.0版本的)
  • 三、直接上代码

一、效果图

在这里插入图片描述

二、安装下载(vue2.0版本的)

npm install --save relation-graph
var foo = 'bar';

三、直接上代码

<template><div class="graphClass" ref="myPage"><RelationGraphref="seeksRelationGraph":options="graphOptions":on-node-click="onNodeClick":on-line-click="onLineClick"><divclass="node"style="height: 100%"slot="node"slot-scope="{ node }"@mouseover="showNodeTips(node, $event)"@mouseout="hideNodeTips(node, $event)"><pstyle="position: absolute;top: 8px;left: 38px;min-width: 350px;font-size: 10px;color: #8c9094;text-align: left;">{{ node.text }}</p></div></RelationGraph><!-- 点击提示 --><divv-show="isShowNodeTipsPanel":style="{left: nodeMenuPanelPosition.x + 'px',top: nodeMenuPanelPosition.y + 'px',}"style="position: absolute;padding: 5px 10px;width: 250px;background: rgba(230, 217, 202, 0.8);z-index: 999;"><div style="line-height: 15px; color: #888888; font-size: 10px">{{ currentNode.text }};[{{ currentNode.id }}]</div></div></div>
</template>
<script>
import RelationGraph from 'relation-graph';
import { knowledgeGraphList } from '../../api';
export default {components: { RelationGraph },props: {id: {type: [Number, String],default: '',},},data() {return {activeKey: '',isShowNodeTipsPanel: false,nodeMenuPanelPosition: { x: 0, y: 0 },currentNode: {},graphOptions: {allowShowMiniToolBar: false, //是否显示工具栏allowSwitchLineShape: true,allowSwitchJunctionPoint: true,defaultNodeShape: 0, //默认的节点形状,0:圆形;1:矩形// defaultExpandHolderPosition: 'bottom', //节点展开关闭的按钮位置defaultLineShape: 1, //默认的线条样式(1:直线/2:样式2/3:样式3/4:折线/5:样式5/6:样式6)defaultJunctionPoint: 'border', //默认的连线与节点接触的方式(border:边缘/ltrb:上下左右/tb:上下/lr:左右)当布局为树状布局时应使用tb或者lr,这样才会好看//   defaultNodeBorderWidth: 0, //节点边框粗细defaultcolor: '#8c9094', //默认的线条颜色defaultNodeColor: '#FACD91', //默认的节点背景颜色defaultNodeWidth: '30', //节点宽度defaultNodeHeight: '30', //节点高度defaultFocusRootNode: true, //默认为根节点添加一个被选中的样式moveToCenterWhenResize: true, //当图谱的大小发生变化时,是否重新让图谱的内容看起来居中debug: true,layouts: [{label: '中心',layoutName: 'center', //布局方式(tree树状布局/center中心布局/force自动布局)//   layoutClassName: 'seeks-layout-center', //当使用这个布局时,会将此样式添加到图谱上defaultJunctionPoint: 'border', //默认的连线与节点接触的方式defaultNodeShape: 0, //默认的节点形状,0:圆形;1:矩形defaultLineShape: 1, //默认的线条样式(1:直线/2:样式2/3:样式3/4:折线/5:样式5/6:样式6)},],},};},mounted() {this.showSeeksGraph();},methods: {showNodeTips(nodeObject, $event) {this.currentNode = nodeObject;const _base_position = this.$refs.myPage.getBoundingClientRect();this.isShowNodeTipsPanel = true;this.nodeMenuPanelPosition.x = $event.clientX - _base_position.x + 10;this.nodeMenuPanelPosition.y = $event.clientY - _base_position.y + 10;},hideNodeTips(nodeObject, $event) {this.isShowNodeTipsPanel = false;},callback(val) {this.activeKey = val;this.showSeeksGraph();},//渲染节点和连接线showSeeksGraph() {knowledgeGraphList({ id: this.id }).then(({ data }) => {// 线let lines = data.edges.map(item => ({from: item.from.toString(),to: item.to.toString(),text: item.label,color: item.label == '依据' ? '#FACD91' : item.label == '历史' ? '#67C23A' : '#82D2F8',styleClass: 'my-line-highlightxxxxxxxxxxxxxxx',lineShape: 6,fromJunctionPoint: 'border',toJunctionPoint: 'bottom',}));// 节点let nodes = [];data.nodes.forEach((item, index) => {let color =lines.filter(c => c.to == item.id).length > 0? lines.filter(c => c.to == item.id)[0].color: '#FACD91';if (index == 0) {nodes.push({id: item.id.toString(),text: item.label,color: '#3e7afa',});} else {nodes.push({id: item.id.toString(),text: item.label,color: color,});}});var __graph_json_data = {rootId: 'a',nodes: nodes,lines: lines,};// 以上数据中的node和link可以参考"Node节点"和"Link关系"中的参数进行配置this.$refs.seeksRelationGraph.setJsonData(__graph_json_data, graphInstance => {setTimeout(() => {graphInstance.stopAutoLayout();}, 1000);});});},//点击节点触发的函数onNodeClick(nodeObject, $event) {const allLinks = this.$refs.seeksRelationGraph.getLinks();allLinks.forEach(link => {// 还原所有样式link.relations.forEach(line => {if (line.data.orignColor) {line.color = line.data.orignColor;}if (line.data.orignFontColor) {line.fontColor = line.data.orignColor;}if (line.data.orignLineWidth) {line.lineWidth = line.data.orignLineWidth;}});});// 让与{nodeObject}相关的所有连线高亮allLinks.filter(link => link.fromNode === nodeObject || link.toNode === nodeObject).forEach(link => {link.relations.forEach(line => {line.data.orignColor = line.color;line.data.orignFontColor = line.fontColor || line.color;line.data.orignLineWidth = line.lineWidth || 1;line.color = '#3e7afa';line.fontColor = '#3e7afa';line.lineWidth = 1;});});// 有时候更改一些属性后,并不能马上同步到视图,这需要以下方法让视图强制根据数据同步到最新this.$refs.seeksRelationGraph.getInstance().dataUpdated();},//店家连接线触发的函数onLineClick(lineObject, $event) {console.log('onLineClick:', lineObject);},},
};
</script>
<style lang="scss">
.graphClass {height: 700px;position: relative;border: 1px solid #f2f3f3;.rel-map-canvas {margin-left: calc(50% - 10px) !important;}
}
</style>
<style lang="scss" scoped>
::v-deep .relation-graph {.my-line-highlightxxxxxxxxxxxxxxx {animation: my-line-easy-anm1 2s linear infinite;}.rg-line-anm-1 {animation: my-line-easy-anm1 2s linear infinite;}//取消点击线条后节点的闪烁效果rel-node-flashing {animation: none;}
}@keyframes my-line-easy-anm1 {0% {stroke-dashoffset: 100px;stroke-dasharray: 5, 5, 5;}100% {stroke-dasharray: 5, 5, 5;stroke-dashoffset: 3px;}
}
</style>

链接: https://relation-graph.com/#/docs/start
链接: https://cloud.tencent.com/developer/article/2325304

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

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

相关文章

【从0实现React18】 (五) 初探react mount流程 完成核心递归流程

更新流程的目的&#xff1a; 生成wip fiberNode树标记副作用flags 更新流程的步骤&#xff1a; 递&#xff1a;beginWork归&#xff1a;completeWork 在 上一节 &#xff0c;我们探讨了 React 应用在首次渲染或后续更新时的整体更新流程。在 Reconciler 工作流程中&#xff…

LLC开关电源开发:LLC设计参考文档(模态分析)

电源简析和全桥LLC模型分析 1.1模拟电源、开关电源和数字电源简介 1.1.1 模拟电源 模拟电源&#xff1a;即变压器电源&#xff0c;通过铁芯、线圈来实现&#xff0c;线圈的匝数决定了两端的电压比&#xff0c;铁芯的作用是传递变化磁场&#xff0c;&#xff08;我国&#xff09…

摒弃反模式:使用Kotlin委托优化Android BaseActivity

摒弃反模式&#xff1a;使用Kotlin委托优化Android BaseActivity 在Android开发中&#xff0c;许多开发者习惯于创建名为“BaseActivity”或“BaseFragment”的基类&#xff0c;以便在所有Activity或Fragment中共享一些通用行为。这种方法乍一看似乎是个好主意&#xff0c;但实…

零基础女生如何入门人工智能,从哪里下手?学习时间大概要多久?

作为一个理工科早期毕业生&#xff0c;出于近乎本能的敏感&#xff0c;格外关注全网热议的ChatGPT。 本来国内就业环境就不好&#xff0c;各行各业内卷越来越严重&#xff0c;加上人工智能的异军突起&#xff0c;各行各业势必将迎来科技进步跨时代的巨大冲击&#xff0c;在此情…

000005 - HDFS 读写流程

HDFS 读写流程 1 HDFS 写数据流程1.1 HDFS 写数据流程图1.2 HDFS 写数据之网络拓扑 - 节点距离计算1.3 机架感知&#xff08;副本存储节点选择&#xff09; 2 HDFS 读数据流程2.1 HDFS 读数据流程图 3 HDFS 如何做到机架感知 1 HDFS 写数据流程 1.1 HDFS 写数据流程图 &#x…

【代码随想录刷题】day02——977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

977.有序数组的平方 方法一&#xff1a;暴力法 class Solution { public:vector<int> sortedSquares(vector<int>& nums) {// 暴力法for(int i 0; i < nums.size(); i){nums[i] * nums[i];}sort(nums.begin(), nums.end());return nums;} };方法二&#…

安美数字酒店宽带运营系统——命令执行漏洞(CNVD-2021-37784)

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 安美数字酒店宽带运营系统 server_ping.php 存在远程命令执行漏洞&#…

2-15 基于matlab的蚁群,模拟退火,遗传,神经网络,禁忌搜索等智能优化算法对TSP问题

基于matlab的蚁群&#xff0c;模拟退火&#xff0c;遗传&#xff0c;神经网络&#xff0c;禁忌搜索等智能优化算法对TSP问题。五种优化算法对多个城市路径进行规划&#xff0c;通过优化速度、距离可比较五种方法的优劣。程序已调通&#xff0c;可直接运行。 2-15 蚁群优化算法 …

智能屏幕人体雷达感应开关模块,飞睿智能低功耗毫米波雷达技术,让冰箱更节能

在智能家居日益普及的今天&#xff0c;各种创新技术层出不穷&#xff0c;极大地提升了人们的生活品质。其中&#xff0c;人体雷达感应开关模块作为一种创新的传感器技术&#xff0c;正在逐步改变我们对家电设备的传统认知。本文将深入探讨飞睿智能人体雷达感应开关中的毫米波雷…

qml自定义组件

不管是component还是分文件编写的一个自定义组件&#xff0c;遵循如下&#xff1a; a:不管哪一级的子对象 都可以直接调根节点下的方法和属性 b:不管哪一级的子对象 调用非根节点的方法和属性&#xff0c;前面要加上该节点的id,即id.方法()或id.属性的形式 import QtQuick 2.…

使用插件和微调优化 GPT 模型

文章目录 LLM 用例和示例产品警惕 AI 幻觉&#xff1a;限制与考虑使⽤插件和微调优化 GPT 模型 OpenAI 在其网站上展示了许多激励人心的客户故事&#xff0c;我们需要了解这些模型如何改变我们的社会并为商业和创造力开辟新机遇。正如你将看到的&#xff0c;许多企业已经开始使…

JSON.parse(JSON.stringify())导致的响应式属性丢失

console.log("formdata赋值前", this.formdata);console.log("row",row);console.log("row序列化后", JSON.parse(JSON.stringify(row)));this.formdata JSON.parse(JSON.stringify(row)); console.log("formdata赋值后", this.formd…

加密的记事本app哪个好用 记事本哪款好用能上锁

随着科技的进步&#xff0c;越来越多的人开始倾向于使用记事本app来记录生活中的点点滴滴。相较于传统的纸质记事本&#xff0c;这些app不仅记录内容丰富&#xff0c;而且安全性更高。其中&#xff0c;敬业签就是一款备受好评的记事本软件。 敬业签以其强大的功能和出色的安全…

【C++进阶之路】C++11——正则表达式

序言 正则表达式&#xff0c;简而言之就是用来匹配指定模式字符串的工具&#xff0c;在计算机的世界中&#xff0c;它发挥着很大的作用&#xff0c;比如编译器的词法分析&#xff0c;注册时验证密码的复杂度&#xff0c;爬虫爬取固定格式的数据时等场景都要用到。那么本篇的目的…

【SpringCloud-Seata源码分析3】

文章目录 事务的提交客户端提交流程服务端提交流程客户端删除undo_log 事务回滚客户端事务回滚服务端回滚事务 事务的提交 前面两篇我们分析了seata的TC初始化和TM,RM初始化&#xff0c;并且事务准备阶段源码及业务Sql执行&#xff0c;下面我们分析事务的提交源码。 客户端提…

如何应对 Android 面试官 -> MVVM 实战一个新闻客户端 (中)

前言 本章我们基于重构的方式进行一个 MVVM 的实战&#xff0c;我们将一个新闻列表的普通实现&#xff0c;一步一步的改造成 MVVM 的架构模式&#xff0c;一共分为上中下三个章节&#xff0c;本章继续上一章&#xff0c;开始中篇的讲解&#xff1b; 控件化 我们本章向控件化进…

2024年华东杯B题数学建模论文:基于车辆运动学转弯模型的自动驾驶规划问题

摘要 随着自动驾驶技术的发展&#xff0c;车辆转弯问题成为关键挑战。本文针对自动驾驶车辆在转弯过程中的数学建模、路径规划及避障策略进行了深入研究&#xff0c;旨在提升自动驾驶车辆的行驶安全性与效率。 针对问题1&#xff0c;对于四轮前轮驱动车辆的转弯问题&#xff0c…

【C++LeetCode】【热题100】两数相加【中等】-不同效率的题解【1】

题目&#xff1a; 暴力方法&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNo…

常见硬件工程师面试题(二)

大家好&#xff0c;我是山羊君Goat。 对于硬件工程师&#xff0c;学习的东西主要和电路硬件相关&#xff0c;所以在硬件工程师的面试中&#xff0c;对于经验是十分看重的&#xff0c;像PCB设计&#xff0c;电路设计原理&#xff0c;模拟电路&#xff0c;数字电路等等相关的知识…

ps基础入门

1.基础 1.1新建文件 1.2创建指定形状 1.4移动工具 1.41移动画布中的任意元素 1.42移动画布 1.43修改画布大小 1.44修改图像大小 1.5框选工具 1.6矩形工具 1.7图层 1.71图层颜色修改 1.72…