镜像自地址
https://gitee.com/medical-alliance/Medical-nlp.git
已同步 2025-12-06 01:16:47 +00:00
增加知识图谱可视化
这个提交包含在:
8
.idea/Medical-nlp.iml
自动生成的
普通文件
8
.idea/Medical-nlp.iml
自动生成的
普通文件
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="PYTHON_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
4
.idea/misc.xml
自动生成的
普通文件
4
.idea/misc.xml
自动生成的
普通文件
@@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.6.6 (E:\python+\python\envs\lidunwei\python.exe)" project-jdk-type="Python SDK" />
|
||||||
|
</project>
|
||||||
8
.idea/modules.xml
自动生成的
普通文件
8
.idea/modules.xml
自动生成的
普通文件
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/Medical-nlp.iml" filepath="$PROJECT_DIR$/.idea/Medical-nlp.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
32
.idea/workspace.xml
自动生成的
普通文件
32
.idea/workspace.xml
自动生成的
普通文件
@@ -0,0 +1,32 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ChangeListManager">
|
||||||
|
<option name="TRACKING_ENABLED" value="true" />
|
||||||
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||||
|
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||||
|
</component>
|
||||||
|
<component name="PropertiesComponent">
|
||||||
|
<property name="settings.editor.selected.configurable" value="configurable.group.appearance" />
|
||||||
|
</component>
|
||||||
|
<component name="ShelveChangesManager" show_recycled="false">
|
||||||
|
<option name="remove_strategy" value="false" />
|
||||||
|
</component>
|
||||||
|
<component name="TaskManager">
|
||||||
|
<task active="true" id="Default" summary="Default task">
|
||||||
|
<created>1598520322413</created>
|
||||||
|
<option name="number" value="Default" />
|
||||||
|
<option name="presentableId" value="Default" />
|
||||||
|
<updated>1598520322413</updated>
|
||||||
|
</task>
|
||||||
|
<servers />
|
||||||
|
</component>
|
||||||
|
<component name="VcsContentAnnotationSettings">
|
||||||
|
<option name="myLimit" value="2678400000" />
|
||||||
|
</component>
|
||||||
|
<component name="XDebuggerManager">
|
||||||
|
<breakpoint-manager />
|
||||||
|
<watches-manager />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
12
kg/README.md
普通文件
12
kg/README.md
普通文件
@@ -0,0 +1,12 @@
|
|||||||
|
# knowledge_graph
|
||||||
|
|
||||||
|
一个基于D3.js画图组件的纯js的知识图谱树
|
||||||
|
|
||||||
|
# 效果预览
|
||||||
|

|
||||||
|
|
||||||
|
# 预览地址
|
||||||
|
https://liaocan.top/knowledge_graph/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
56
kg/css/strucMap.min.css
vendored
普通文件
56
kg/css/strucMap.min.css
vendored
普通文件
@@ -0,0 +1,56 @@
|
|||||||
|
#topomap{
|
||||||
|
width: 1440px;
|
||||||
|
height: 1440px;
|
||||||
|
background-color: rgb(237, 245, 238);
|
||||||
|
}
|
||||||
|
svg {
|
||||||
|
cursor: move;
|
||||||
|
position: relative
|
||||||
|
}
|
||||||
|
|
||||||
|
svg text {
|
||||||
|
font-family: fantasy;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #ffffe0;
|
||||||
|
}
|
||||||
|
|
||||||
|
svg .node {
|
||||||
|
cursor: pointer
|
||||||
|
}
|
||||||
|
|
||||||
|
svg .node .ring {
|
||||||
|
stroke-width: 4px;
|
||||||
|
stroke: #6ac6ff;
|
||||||
|
/* opacity: .2;外圈的阴影,我设置为透明看不见 */
|
||||||
|
opacity: 0;
|
||||||
|
transition: opacity .6s
|
||||||
|
}
|
||||||
|
|
||||||
|
svg .node:active .ring,
|
||||||
|
svg .node:hover .ring {
|
||||||
|
opacity: .1
|
||||||
|
}
|
||||||
|
|
||||||
|
svg .link {
|
||||||
|
fill: none;
|
||||||
|
stroke: #6ac6ff;
|
||||||
|
opacity: .8;
|
||||||
|
stroke-width: 2
|
||||||
|
}
|
||||||
|
|
||||||
|
svg text.desc {
|
||||||
|
fill: #000;
|
||||||
|
font-family: fantasy;
|
||||||
|
font-size: 10px;
|
||||||
|
font-weight: bolder
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#title {
|
||||||
|
margin: 0 auto;
|
||||||
|
text-align: center;
|
||||||
|
padding: 43px;
|
||||||
|
font-size: 33px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #30B5C7;
|
||||||
|
}
|
||||||
187
kg/file/3.json
普通文件
187
kg/file/3.json
普通文件
@@ -0,0 +1,187 @@
|
|||||||
|
|
||||||
|
{"id":134,"index":3,"prop":{"name":"二叉树","size":29}},
|
||||||
|
{"id":135,"index":3,"prop":{"name":"完全二叉树","size":29}},
|
||||||
|
{"id":136,"index":3,"prop":{"name":"平衡二叉树","size":29}},
|
||||||
|
{"id":137,"index":3,"prop":{"name":"二叉查找树(BST)","size":29}},
|
||||||
|
{"id":138,"index":3,"prop":{"name":"红黑树","size":29}},
|
||||||
|
{"id":139,"index":3,"prop":{"name":"B,B+,B*树","size":29}},
|
||||||
|
{"id":140,"index":3,"prop":{"name":"LSM 树","size":29}},
|
||||||
|
|
||||||
|
{"id":141,"index":3,"prop":{"name":"选择排序","size":29}},
|
||||||
|
{"id":142,"index":3,"prop":{"name":"冒泡排序","size":29}},
|
||||||
|
{"id":143,"index":3,"prop":{"name":"插入排序","size":29}},
|
||||||
|
{"id":144,"index":3,"prop":{"name":"归并排序","size":29}},
|
||||||
|
{"id":145,"index":3,"prop":{"name":"希尔排序","size":29}},
|
||||||
|
{"id":141,"index":3,"prop":{"name":"堆排序","size":29}},
|
||||||
|
{"id":142,"index":3,"prop":{"name":"计数排序","size":29}},
|
||||||
|
{"id":143,"index":3,"prop":{"name":"桶排序","size":29}},
|
||||||
|
{"id":144,"index":3,"prop":{"name":"基数排序","size":29}},
|
||||||
|
{"id":145,"index":3,"prop":{"name":"二分查找","size":29}},
|
||||||
|
{"id":145,"index":3,"prop":{"name":"Java中的排序工具","size":29}},
|
||||||
|
|
||||||
|
{"id":141,"index":3,"prop":{"name":"KMP 算法","size":29}},
|
||||||
|
|
||||||
|
{"id":142,"index":3,"prop":{"name":"事务 ACID 特性","size":29}},
|
||||||
|
{"id":143,"index":3,"prop":{"name":"事务的隔离级别","size":29}},
|
||||||
|
{"id":144,"index":3,"prop":{"name":"MVCC","size":29}},
|
||||||
|
|
||||||
|
{"id":145,"index":3,"prop":{"name":"Java中的锁和同步类","size":29}},
|
||||||
|
{"id":141,"index":3,"prop":{"name":"公平锁&非公平锁","size":29}},
|
||||||
|
{"id":142,"index":3,"prop":{"name":"悲观锁","size":29}},
|
||||||
|
{"id":143,"index":3,"prop":{"name":"乐观锁&CAS","size":29}},
|
||||||
|
{"id":144,"index":3,"prop":{"name":"ABA问题","size":29}},
|
||||||
|
{"id":145,"index":3,"prop":{"name":"CopyOnWrite容器","size":29}},
|
||||||
|
{"id":145,"index":3,"prop":{"name":"RingBuffer","size":29}},
|
||||||
|
{"id":144,"index":3,"prop":{"name":"可重入锁&不可重入锁","size":29}},
|
||||||
|
{"id":145,"index":3,"prop":{"name":"互斥锁&共享锁","size":29}},
|
||||||
|
{"id":145,"index":3,"prop":{"name":"死锁","size":29}},
|
||||||
|
|
||||||
|
{"id":145,"index":3,"prop":{"name":"多级缓存","size":29}},
|
||||||
|
|
||||||
|
{"id":141,"index":3,"prop":{"name":"康威定律","size":29}},
|
||||||
|
|
||||||
|
|
||||||
|
{"id":142,"index":3,"prop":{"name":"Jenkins","size":29}},
|
||||||
|
{"id":143,"index":3,"prop":{"name":"环境分离","size":29}},
|
||||||
|
|
||||||
|
{"id":144,"index":3,"prop":{"name":"Ansible","size":29}},
|
||||||
|
{"id":145,"index":3,"prop":{"name":"puppet","size":29}},
|
||||||
|
{"id":145,"index":3,"prop":{"name":"chef","size":29}},
|
||||||
|
|
||||||
|
{"id":144,"index":3,"prop":{"name":"TDD理论","size":29}},
|
||||||
|
{"id":145,"index":3,"prop":{"name":"单元测试","size":29}},
|
||||||
|
{"id":145,"index":3,"prop":{"name":"压力测试","size":29}},
|
||||||
|
{"id":144,"index":3,"prop":{"name":"全链路压测","size":29}},
|
||||||
|
{"id":145,"index":3,"prop":{"name":"A/B 、灰度、蓝绿测试","size":29}},
|
||||||
|
|
||||||
|
{"id":145,"index":3,"prop":{"name":"KVM","size":29}},
|
||||||
|
{"id":145,"index":3,"prop":{"name":"Xen","size":29}},
|
||||||
|
{"id":141,"index":3,"prop":{"name":"OpenVZ","size":29}},
|
||||||
|
|
||||||
|
{"id":142,"index":3,"prop":{"name":"Docker","size":29}},
|
||||||
|
|
||||||
|
{"id":143,"index":3,"prop":{"name":"OpenStack","size":29}},
|
||||||
|
|
||||||
|
{"id":144,"index":3,"prop":{"name":"Nginx","size":29}},
|
||||||
|
{"id":145,"index":3,"prop":{"name":"OpenResty","size":29}},
|
||||||
|
{"id":146,"index":3,"prop":{"name":"Tengine","size":29}},
|
||||||
|
{"id":147,"index":3,"prop":{"name":"Apache Httpd","size":29}},
|
||||||
|
{"id":148,"index":3,"prop":{"name":"Tomcat","size":29}},
|
||||||
|
{"id":149,"index":3,"prop":{"name":"Jetty","size":29}},
|
||||||
|
|
||||||
|
{"id":150,"index":3,"prop":{"name":"本地缓存","size":29}},
|
||||||
|
|
||||||
|
{"id":151,"index":3,"prop":{"name":"Web缓存","size":29}},
|
||||||
|
{"id":152,"index":3,"prop":{"name":"Memcached","size":29}},
|
||||||
|
{"id":153,"index":3,"prop":{"name":"Redis","size":29}},
|
||||||
|
{"id":154,"index":3,"prop":{"name":"Tair","size":29}},
|
||||||
|
|
||||||
|
{"id":155,"index":3,"prop":{"name":"消息总线","size":29}},
|
||||||
|
{"id":156,"index":3,"prop":{"name":"消息的顺序","size":29}},
|
||||||
|
{"id":157,"index":3,"prop":{"name":"RabbitMQ","size":29}},
|
||||||
|
{"id":158,"index":3,"prop":{"name":"RocketMQ","size":29}},
|
||||||
|
{"id":159,"index":3,"prop":{"name":"ActiveMQ","size":29}},
|
||||||
|
{"id":160,"index":3,"prop":{"name":"Kafka","size":29}},
|
||||||
|
{"id":161,"index":3,"prop":{"name":"Redis 消息推送","size":29}},
|
||||||
|
{"id":162,"index":3,"prop":{"name":"ZeroMQ","size":29}},
|
||||||
|
|
||||||
|
{"id":163,"index":3,"prop":{"name":"单机定时调度","size":29}},
|
||||||
|
{"id":164,"index":3,"prop":{"name":"分布式定时调度","size":29}},
|
||||||
|
|
||||||
|
{"id":165,"index":3,"prop":{"name":"Dubbo","size":29}},
|
||||||
|
{"id":166,"index":3,"prop":{"name":"Thrift","size":29}},
|
||||||
|
{"id":167,"index":3,"prop":{"name":"gRPC","size":29}},
|
||||||
|
|
||||||
|
{"id":168,"index":3,"prop":{"name":"Sharding Jdbc","size":29}},
|
||||||
|
|
||||||
|
{"id":169,"index":3,"prop":{"name":"日志搜集","size":29}},
|
||||||
|
|
||||||
|
{"id":170,"index":3,"prop":{"name":"OSI 七层协议","size":29}},
|
||||||
|
{"id":171,"index":3,"prop":{"name":"TCP/IP","size":29}},
|
||||||
|
{"id":172,"index":3,"prop":{"name":"HTTP","size":29}},
|
||||||
|
{"id":173,"index":3,"prop":{"name":"HTTP2.0","size":29}},
|
||||||
|
{"id":174,"index":3,"prop":{"name":"HTTPS","size":29}},
|
||||||
|
|
||||||
|
{"id":175,"index":3,"prop":{"name":"Epoll","size":29}},
|
||||||
|
{"id":176,"index":3,"prop":{"name":"Java NIO","size":29}},
|
||||||
|
{"id":177,"index":3,"prop":{"name":"kqueue","size":29}},
|
||||||
|
|
||||||
|
{"id":178,"index":3,"prop":{"name":"Hessian","size":29}},
|
||||||
|
{"id":179,"index":3,"prop":{"name":"Protobuf","size":29}},
|
||||||
|
|
||||||
|
{"id":180,"index":3,"prop":{"name":"原理","size":29}},
|
||||||
|
{"id":181,"index":3,"prop":{"name":"InnoDB","size":29}},
|
||||||
|
{"id":182,"index":3,"prop":{"name":"优化","size":29}},
|
||||||
|
{"id":183,"index":3,"prop":{"name":"索引","size":29}},
|
||||||
|
{"id":184,"index":3,"prop":{"name":"explain","size":29}},
|
||||||
|
|
||||||
|
{"id":185,"index":3,"prop":{"name":"MongoDB","size":29}},
|
||||||
|
{"id":186,"index":3,"prop":{"name":"Hbase","size":29}},
|
||||||
|
|
||||||
|
{"id":187,"index":3,"prop":{"name":"Storm","size":29}},
|
||||||
|
{"id":188,"index":3,"prop":{"name":"Flink","size":29}},
|
||||||
|
{"id":189,"index":3,"prop":{"name":"Kafka Stream","size":29}},
|
||||||
|
{"id":190,"index":3,"prop":{"name":"应用场景","size":29}},
|
||||||
|
|
||||||
|
{"id":191,"index":3,"prop":{"name":"HDFS","size":29}},
|
||||||
|
{"id":192,"index":3,"prop":{"name":"MapReduce","size":29}},
|
||||||
|
{"id":193,"index":3,"prop":{"name":"Yarn","size":29}},
|
||||||
|
|
||||||
|
{"id":194,"index":3,"prop":{"name":"XSS","size":29}},
|
||||||
|
{"id":195,"index":3,"prop":{"name":"CSRF","size":29}},
|
||||||
|
{"id":196,"index":3,"prop":{"name":"SQL 注入","size":29}},
|
||||||
|
{"id":197,"index":3,"prop":{"name":"Hash Dos","size":29}},
|
||||||
|
{"id":198,"index":3,"prop":{"name":"脚本注入","size":29}},
|
||||||
|
{"id":199,"index":3,"prop":{"name":"漏洞扫描工具","size":29}},
|
||||||
|
{"id":200,"index":3,"prop":{"name":"验证码","size":29}},
|
||||||
|
|
||||||
|
|
||||||
|
{"id":201,"index":3,"prop":{"name":"对称加密","size":29}},
|
||||||
|
{"id":202,"index":3,"prop":{"name":"哈希算法","size":29}},
|
||||||
|
{"id":203,"index":3,"prop":{"name":"非对称加密","size":29}},
|
||||||
|
|
||||||
|
{"id":204,"index":3,"prop":{"name":"数据备份","size":29}},
|
||||||
|
|
||||||
|
{"id":205,"index":3,"prop":{"name":"内外网分离","size":29}},
|
||||||
|
{"id":206,"index":3,"prop":{"name":"登录跳板机","size":29}},
|
||||||
|
|
||||||
|
{"id":207,"index":3,"prop":{"name":"RBAC","size":29}},
|
||||||
|
{"id":208,"index":3,"prop":{"name":"OAuth2.0","size":29}},
|
||||||
|
{"id":209,"index":3,"prop":{"name":"双因素认证(2FA)","size":29}},
|
||||||
|
{"id":210,"index":3,"prop":{"name":"单点登录(SSO)","size":29}},
|
||||||
|
|
||||||
|
{"id":211,"index":3,"prop":{"name":"Log4j、Log4j2","size":29}},
|
||||||
|
{"id":212,"index":3,"prop":{"name":"Logback","size":29}},
|
||||||
|
|
||||||
|
{"id":213,"index":3,"prop":{"name":"Spring 家族","size":29}},
|
||||||
|
|
||||||
|
{"id":214,"index":3,"prop":{"name":"硬件负载均衡","size":29}},
|
||||||
|
{"id":215,"index":3,"prop":{"name":"软件负载均衡","size":29}},
|
||||||
|
{"id":216,"index":3,"prop":{"name":"限流","size":29}},
|
||||||
|
{"id":217,"index":3,"prop":{"name":"应用层容灾","size":29}},
|
||||||
|
{"id":218,"index":3,"prop":{"name":"跨机房容灾","size":29}},
|
||||||
|
{"id":219,"index":3,"prop":{"name":"容灾演练流程","size":29}},
|
||||||
|
{"id":220,"index":3,"prop":{"name":"平滑启动","size":29}},
|
||||||
|
|
||||||
|
{"id":221,"index":3,"prop":{"name":"读写分离模式","size":29}},
|
||||||
|
{"id":222,"index":3,"prop":{"name":"分片模式","size":29}},
|
||||||
|
|
||||||
|
{"id":223,"index":3,"prop":{"name":"服务注册与发现","size":29}},
|
||||||
|
{"id":224,"index":3,"prop":{"name":"服务路由控制","size":29}},
|
||||||
|
|
||||||
|
{"id":225,"index":3,"prop":{"name":"CAP 与 BASE 理论","size":29}},
|
||||||
|
{"id":226,"index":3,"prop":{"name":"分布式锁","size":29}},
|
||||||
|
{"id":227,"index":3,"prop":{"name":"分布式一致性算法","size":29}},
|
||||||
|
{"id":228,"index":3,"prop":{"name":"幂等","size":29}},
|
||||||
|
{"id":229,"index":3,"prop":{"name":"分布式锁","size":29}},
|
||||||
|
{"id":230,"index":3,"prop":{"name":"分布式一致方案","size":29}},
|
||||||
|
{"id":231,"index":3,"prop":{"name":"TCC(Try/Confirm/Cancel) 柔性事务","size":29}},
|
||||||
|
|
||||||
|
{"id":232,"index":3,"prop":{"name":"全局唯一ID","size":29}},
|
||||||
|
|
||||||
|
{"id":233,"index":3,"prop":{"name":"命令查询职责分离(CQRS)","size":29}},
|
||||||
|
{"id":234,"index":3,"prop":{"name":"贫血,充血模型","size":29}},
|
||||||
|
|
||||||
|
{"id":235,"index":3,"prop":{"name":"Reactor","size":29}},
|
||||||
|
{"id":236,"index":3,"prop":{"name":"RxJava","size":29}},
|
||||||
|
{"id":237,"index":3,"prop":{"name":"Vert.x","size":29}}
|
||||||
386
kg/index.html
普通文件
386
kg/index.html
普通文件
@@ -0,0 +1,386 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title></title>
|
||||||
|
<script type="text/javascript" src="js/d3.min.js" ></script>
|
||||||
|
<script type="text/javascript" src="js/strucMap.min.js" ></script>
|
||||||
|
<link rel="stylesheet" href="css/strucMap.min.css" />
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="title" >后端架构师技术栈知识图谱</div>
|
||||||
|
<div id="topomap" style="margin: 0 auto;" ></div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
var nodePX = 0;
|
||||||
|
var nodePY = 0;
|
||||||
|
|
||||||
|
var options = {
|
||||||
|
selector:"#topomap",
|
||||||
|
width: 1440,//实际展开图宽度
|
||||||
|
height: 1440,//实际展开图高度
|
||||||
|
lineLength:100,
|
||||||
|
// textColor:"#000",
|
||||||
|
// textFontFamily:'',
|
||||||
|
nodesClick: function(t) {
|
||||||
|
//if(t.index==0) t.fixed=1;//判断如果是第一级,移动后就将它固定
|
||||||
|
t.fixed = 1;
|
||||||
|
console.log(t);
|
||||||
|
var nodeX = JSON.parse(JSON.stringify(t.x));
|
||||||
|
var nodeY = JSON.parse(JSON.stringify(t.y));
|
||||||
|
//xy都没有变,说明没有拖动
|
||||||
|
if((nodeX == nodePX)&&(nodeY == nodePY)){
|
||||||
|
console.info("跳页面啦~~~~~~");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
nodesDragstart:function(t) {
|
||||||
|
nodePX = JSON.parse(JSON.stringify(t.x));
|
||||||
|
nodePY = JSON.parse(JSON.stringify(t.y));
|
||||||
|
//console.log("移动开始",JSON.parse(JSON.stringify(t.x)),JSON.parse(JSON.stringify(t.y)));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var nodesJson = [{"fixed":true,"id":0,"index":0,"prop":{"name":"后端架构师技术图谱","size":32},"x":724,"y":616},
|
||||||
|
{"id":1,"index":1,"prop":{"name":"数据结构","size":25}},
|
||||||
|
{"id":2,"index":1,"prop":{"name":"常用算法","size":25}},
|
||||||
|
{"id":3,"index":1,"prop":{"name":"并发","size":25}},
|
||||||
|
{"id":4,"index":1,"prop":{"name":"操作系统","size":25}},
|
||||||
|
{"id":5,"index":1,"prop":{"name":"设计模式","size":25}},
|
||||||
|
{"id":6,"index":1,"prop":{"name":"运维","size":25}},
|
||||||
|
{"id":7,"index":1,"prop":{"name":"中间件","size":25}},
|
||||||
|
{"id":8,"index":1,"prop":{"name":"网络","size":25}},
|
||||||
|
{"id":9,"index":1,"prop":{"name":"数据库","size":25}},
|
||||||
|
{"id":10,"index":1,"prop":{"name":"搜索引擎","size":25}},
|
||||||
|
{"id":11,"index":1,"prop":{"name":"性能优化","size":25}},
|
||||||
|
{"id":12,"index":1,"prop":{"name":"大数据","size":25}},
|
||||||
|
{"id":13,"index":1,"prop":{"name":"安全","size":25}},
|
||||||
|
{"id":14,"index":1,"prop":{"name":"常用开源框架","size":25}},
|
||||||
|
{"id":15,"index":1,"prop":{"name":"分布式设计","size":25}},
|
||||||
|
{"id":16,"index":1,"prop":{"name":"设计思想&开发模式","size":25}},
|
||||||
|
{"id":17,"index":1,"prop":{"name":"项目管理","size":25}},
|
||||||
|
|
||||||
|
{"id":18,"index":2,"prop":{"name":"队列","size":15}},
|
||||||
|
{"id":19,"index":2,"prop":{"name":"集合","size":15}},
|
||||||
|
{"id":20,"index":2,"prop":{"name":"链表、数组","size":15}},
|
||||||
|
{"id":21,"index":2,"prop":{"name":"字典、关联数组","size":15}},
|
||||||
|
{"id":22,"index":2,"prop":{"name":"栈","size":15}},
|
||||||
|
{"id":23,"index":2,"prop":{"name":"树","size":15}},
|
||||||
|
{"id":24,"index":2,"prop":{"name":"BitSet","size":15}},
|
||||||
|
|
||||||
|
{"id":25,"index":2,"prop":{"name":"排序、查找算法","size":15}},
|
||||||
|
{"id":26,"index":2,"prop":{"name":"布隆过滤器","size":15}},
|
||||||
|
{"id":27,"index":2,"prop":{"name":"字符串比较","size":15}},
|
||||||
|
{"id":28,"index":2,"prop":{"name":"深度优先、广度优先","size":15}},
|
||||||
|
{"id":29,"index":2,"prop":{"name":"贪心算法","size":15}},
|
||||||
|
{"id":30,"index":2,"prop":{"name":"回溯算法","size":15}},
|
||||||
|
{"id":31,"index":2,"prop":{"name":"剪枝算法","size":15}},
|
||||||
|
{"id":32,"index":2,"prop":{"name":"动态规划","size":15}},
|
||||||
|
{"id":33,"index":2,"prop":{"name":"朴素贝叶斯","size":15}},
|
||||||
|
{"id":34,"index":2,"prop":{"name":"推荐算法","size":15}},
|
||||||
|
{"id":35,"index":2,"prop":{"name":"最小生成树算法","size":15}},
|
||||||
|
{"id":36,"index":2,"prop":{"name":"最短路径算法","size":15}},
|
||||||
|
|
||||||
|
{"id":37,"index":2,"prop":{"name":"Java 并发","size":15}},
|
||||||
|
{"id":38,"index":2,"prop":{"name":"多线程","size":15}},
|
||||||
|
{"id":39,"index":2,"prop":{"name":"线程安全","size":15}},
|
||||||
|
{"id":40,"index":2,"prop":{"name":"一致性、事务","size":15}},
|
||||||
|
{"id":41,"index":2,"prop":{"name":"锁","size":15}},
|
||||||
|
|
||||||
|
|
||||||
|
{"id":42,"index":2,"prop":{"name":"计算机原理","size":15}},
|
||||||
|
{"id":43,"index":2,"prop":{"name":"CPU","size":15}},
|
||||||
|
{"id":44,"index":2,"prop":{"name":"进程","size":15}},
|
||||||
|
{"id":45,"index":2,"prop":{"name":"线程","size":15}},
|
||||||
|
{"id":46,"index":2,"prop":{"name":"协程","size":15}},
|
||||||
|
{"id":47,"index":2,"prop":{"name":"Linux","size":15}},
|
||||||
|
|
||||||
|
{"id":48,"index":2,"prop":{"name":"设计模式的六大原则","size":15}},
|
||||||
|
{"id":49,"index":2,"prop":{"name":"23种常见设计模式","size":15}},
|
||||||
|
{"id":50,"index":2,"prop":{"name":"应用场景","size":15}},
|
||||||
|
{"id":51,"index":2,"prop":{"name":"单例模式","size":15}},
|
||||||
|
{"id":52,"index":2,"prop":{"name":"责任链模式","size":15}},
|
||||||
|
{"id":53,"index":2,"prop":{"name":"MVC","size":15}},
|
||||||
|
{"id":54,"index":2,"prop":{"name":"IOC","size":15}},
|
||||||
|
{"id":55,"index":2,"prop":{"name":"AOP","size":15}},
|
||||||
|
{"id":56,"index":2,"prop":{"name":"UML","size":15}},
|
||||||
|
{"id":57,"index":2,"prop":{"name":"微服务思想","size":15}},
|
||||||
|
|
||||||
|
{"id":58,"index":2,"prop":{"name":"常规监控","size":15}},
|
||||||
|
{"id":59,"index":2,"prop":{"name":"APM","size":15}},
|
||||||
|
{"id":60,"index":2,"prop":{"name":"持续集成(CI/CD)","size":15}},
|
||||||
|
{"id":61,"index":2,"prop":{"name":"自动化运维","size":15}},
|
||||||
|
{"id":62,"index":2,"prop":{"name":"测试","size":15}},
|
||||||
|
{"id":63,"index":2,"prop":{"name":"虚拟化","size":15}},
|
||||||
|
{"id":64,"index":2,"prop":{"name":"容器技术","size":15}},
|
||||||
|
{"id":65,"index":2,"prop":{"name":"云技术","size":15}},
|
||||||
|
{"id":66,"index":2,"prop":{"name":"统计分析","size":15}},
|
||||||
|
{"id":67,"index":2,"prop":{"name":"DevOps","size":15}},
|
||||||
|
{"id":68,"index":2,"prop":{"name":"文档管理","size":15}},
|
||||||
|
|
||||||
|
|
||||||
|
{"id":69,"index":2,"prop":{"name":"Web Server","size":15}},
|
||||||
|
{"id":70,"index":2,"prop":{"name":"缓存","size":15}},
|
||||||
|
{"id":71,"index":2,"prop":{"name":"客户端缓存","size":15}},
|
||||||
|
{"id":72,"index":2,"prop":{"name":"服务端缓存","size":15}},
|
||||||
|
{"id":73,"index":2,"prop":{"name":"消息队列","size":15}},
|
||||||
|
{"id":74,"index":2,"prop":{"name":"定时调度","size":15}},
|
||||||
|
{"id":75,"index":2,"prop":{"name":"数据库中间件","size":15}},
|
||||||
|
{"id":76,"index":2,"prop":{"name":"日志系统","size":15}},
|
||||||
|
{"id":77,"index":2,"prop":{"name":"配置中心","size":15}},
|
||||||
|
{"id":78,"index":2,"prop":{"name":"日志系统","size":15}},
|
||||||
|
{"id":79,"index":2,"prop":{"name":"API 网关","size":15}},
|
||||||
|
|
||||||
|
{"id":80,"index":2,"prop":{"name":"协议","size":15}},
|
||||||
|
{"id":81,"index":2,"prop":{"name":"网络模型","size":15}},
|
||||||
|
{"id":82,"index":2,"prop":{"name":"连接和短连接","size":15}},
|
||||||
|
{"id":83,"index":2,"prop":{"name":"框架","size":15}},
|
||||||
|
{"id":84,"index":2,"prop":{"name":"零拷贝(Zero-copy)","size":15}},
|
||||||
|
{"id":85,"index":2,"prop":{"name":"序列化(二进制协议)","size":15}},
|
||||||
|
|
||||||
|
{"id":86,"index":2,"prop":{"name":"基础理论","size":15}},
|
||||||
|
{"id":87,"index":2,"prop":{"name":"MySQL","size":15}},
|
||||||
|
{"id":88,"index":2,"prop":{"name":"Oracle","size":15}},
|
||||||
|
{"id":90,"index":2,"prop":{"name":"NoSQL","size":15}},
|
||||||
|
|
||||||
|
{"id":91,"index":2,"prop":{"name":"搜索引擎原理","size":15}},
|
||||||
|
{"id":92,"index":2,"prop":{"name":"Lucene","size":15}},
|
||||||
|
{"id":93,"index":2,"prop":{"name":"Elasticsearch","size":15}},
|
||||||
|
{"id":94,"index":2,"prop":{"name":"Solr","size":15}},
|
||||||
|
{"id":95,"index":2,"prop":{"name":"sphinx","size":15}},
|
||||||
|
|
||||||
|
{"id":96,"index":2,"prop":{"name":"性能优化方法论","size":15}},
|
||||||
|
{"id":97,"index":2,"prop":{"name":"容量评估","size":15}},
|
||||||
|
{"id":98,"index":2,"prop":{"name":"CDN 网络","size":15}},
|
||||||
|
{"id":99,"index":2,"prop":{"name":"连接池","size":15}},
|
||||||
|
{"id":100,"index":2,"prop":{"name":"性能调优","size":15}},
|
||||||
|
|
||||||
|
{"id":101,"index":2,"prop":{"name":"流式计算","size":15}},
|
||||||
|
{"id":102,"index":2,"prop":{"name":"Hadoop","size":15}},
|
||||||
|
{"id":103,"index":2,"prop":{"name":"Spark","size":15}},
|
||||||
|
|
||||||
|
|
||||||
|
{"id":104,"index":2,"prop":{"name":"web 安全","size":15}},
|
||||||
|
{"id":105,"index":2,"prop":{"name":"WDDoS 防范","size":15}},
|
||||||
|
{"id":106,"index":2,"prop":{"name":"用户隐私信息保护","size":15}},
|
||||||
|
{"id":107,"index":2,"prop":{"name":"序列化漏洞","size":15}},
|
||||||
|
{"id":108,"index":2,"prop":{"name":"加密解密","size":15}},
|
||||||
|
{"id":109,"index":2,"prop":{"name":"服务器安全","size":15}},
|
||||||
|
{"id":110,"index":2,"prop":{"name":"数据安全","size":15}},
|
||||||
|
{"id":111,"index":2,"prop":{"name":"网络隔离","size":15}},
|
||||||
|
{"id":112,"index":2,"prop":{"name":"授权、认证","size":15}},
|
||||||
|
|
||||||
|
{"id":113,"index":2,"prop":{"name":"开源协议","size":15}},
|
||||||
|
{"id":114,"index":2,"prop":{"name":"日志框架","size":15}},
|
||||||
|
{"id":115,"index":2,"prop":{"name":"ORM","size":15}},
|
||||||
|
{"id":116,"index":2,"prop":{"name":"网络框架","size":15}},
|
||||||
|
{"id":117,"index":2,"prop":{"name":"Web 框架","size":15}},
|
||||||
|
{"id":118,"index":2,"prop":{"name":"工具框架","size":15}},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{"id":119,"index":2,"prop":{"name":"扩展性设计","size":15}},
|
||||||
|
{"id":120,"index":2,"prop":{"name":"稳定性&高可用","size":15}},
|
||||||
|
{"id":121,"index":2,"prop":{"name":"数据库扩展","size":15}},
|
||||||
|
{"id":122,"index":2,"prop":{"name":"服务治理","size":15}},
|
||||||
|
{"id":123,"index":2,"prop":{"name":"分布式一致","size":15}},
|
||||||
|
{"id":124,"index":2,"prop":{"name":"分布式文件系统","size":15}},
|
||||||
|
{"id":125,"index":2,"prop":{"name":"唯一ID生成","size":15}},
|
||||||
|
{"id":126,"index":2,"prop":{"name":"一致性Hash算法","size":15}},
|
||||||
|
|
||||||
|
{"id":127,"index":2,"prop":{"name":"DDD(Domain-driven Design - 领域驱动设计","size":15}},
|
||||||
|
{"id":128,"index":2,"prop":{"name":"Actor 模式","size":15}},
|
||||||
|
{"id":115,"index":2,"prop":{"name":"响应式编程","size":15}},
|
||||||
|
{"id":130,"index":2,"prop":{"name":"分布式文件系统","size":15}},
|
||||||
|
{"id":131,"index":2,"prop":{"name":"DODAF2.0","size":15}},
|
||||||
|
{"id":132,"index":2,"prop":{"name":"Serverless","size":15}},
|
||||||
|
{"id":133,"index":2,"prop":{"name":"Service Mesh","size":15}},
|
||||||
|
|
||||||
|
|
||||||
|
{"id":134,"index":2,"prop":{"name":"架构评审","size":15}},
|
||||||
|
{"id":135,"index":2,"prop":{"name":"重构","size":15}},
|
||||||
|
{"id":136,"index":2,"prop":{"name":"代码规范","size":15}},
|
||||||
|
{"id":137,"index":2,"prop":{"name":"代码 Review","size":15}},
|
||||||
|
{"id":138,"index":2,"prop":{"name":"RUP","size":15}},
|
||||||
|
{"id":139,"index":2,"prop":{"name":"看板管理","size":15}},
|
||||||
|
{"id":140,"index":2,"prop":{"name":"SCRUM","size":15}},
|
||||||
|
{"id":141,"index":2,"prop":{"name":"敏捷开发","size":15}},
|
||||||
|
{"id":142,"index":2,"prop":{"name":"极限编程(XP)","size":15}},
|
||||||
|
{"id":143,"index":2,"prop":{"name":"结对编程","size":15}},
|
||||||
|
{"id":144,"index":2,"prop":{"name":"PDCA 循环质量管理","size":15}},
|
||||||
|
{"id":145,"index":2,"prop":{"name":"FMEA管理模式","size":15}},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
];
|
||||||
|
//source和target都是按照数组的顺序来的,下标
|
||||||
|
var linksJson = [
|
||||||
|
{"source":0,"target":1,},
|
||||||
|
{"source":0,"target":2,},
|
||||||
|
{"source":0,"target":3,},
|
||||||
|
{"source":0,"target":4,},
|
||||||
|
{"source":0,"target":5,},
|
||||||
|
{"source":0,"target":6,},
|
||||||
|
{"source":0,"target":7,},
|
||||||
|
{"source":0,"target":8,},
|
||||||
|
{"source":0,"target":9,},
|
||||||
|
{"source":0,"target":10,},
|
||||||
|
{"source":0,"target":11,},
|
||||||
|
{"source":0,"target":12,},
|
||||||
|
{"source":0,"target":13,},
|
||||||
|
{"source":0,"target":14,},
|
||||||
|
{"source":0,"target":15,},
|
||||||
|
{"source":0,"target":16,},
|
||||||
|
{"source":0,"target":17,},
|
||||||
|
|
||||||
|
{"source":1,"target":18,},
|
||||||
|
{"source":1,"target":19,},
|
||||||
|
{"source":1,"target":20,},
|
||||||
|
{"source":1,"target":21,},
|
||||||
|
{"source":1,"target":22,},
|
||||||
|
{"source":1,"target":23,},
|
||||||
|
{"source":1,"target":24,},
|
||||||
|
|
||||||
|
{"source":2,"target":25,},
|
||||||
|
{"source":2,"target":26,},
|
||||||
|
{"source":2,"target":27,},
|
||||||
|
{"source":2,"target":28,},
|
||||||
|
{"source":2,"target":29,},
|
||||||
|
{"source":2,"target":30,},
|
||||||
|
{"source":2,"target":31,},
|
||||||
|
{"source":2,"target":32,},
|
||||||
|
{"source":2,"target":33,},
|
||||||
|
{"source":2,"target":34,},
|
||||||
|
{"source":2,"target":35,},
|
||||||
|
{"source":2,"target":36,},
|
||||||
|
|
||||||
|
{"source":3,"target":37,},
|
||||||
|
{"source":3,"target":38,},
|
||||||
|
{"source":3,"target":39,},
|
||||||
|
{"source":3,"target":40,},
|
||||||
|
{"source":3,"target":41,},
|
||||||
|
|
||||||
|
{"source":4,"target":42,},
|
||||||
|
{"source":4,"target":43,},
|
||||||
|
{"source":4,"target":44,},
|
||||||
|
{"source":4,"target":45,},
|
||||||
|
{"source":4,"target":46,},
|
||||||
|
{"source":4,"target":47,},
|
||||||
|
|
||||||
|
{"source":5,"target":48,},
|
||||||
|
{"source":5,"target":49,},
|
||||||
|
{"source":5,"target":50,},
|
||||||
|
{"source":5,"target":51,},
|
||||||
|
{"source":5,"target":52,},
|
||||||
|
{"source":5,"target":53,},
|
||||||
|
{"source":5,"target":54,},
|
||||||
|
{"source":5,"target":55,},
|
||||||
|
{"source":5,"target":56,},
|
||||||
|
{"source":5,"target":57,},
|
||||||
|
{"source":6,"target":58,},
|
||||||
|
{"source":6,"target":59,},
|
||||||
|
{"source":6,"target":60,},
|
||||||
|
{"source":6,"target":61,},
|
||||||
|
{"source":6,"target":62,},
|
||||||
|
{"source":6,"target":63,},
|
||||||
|
{"source":6,"target":64,},
|
||||||
|
{"source":6,"target":65,},
|
||||||
|
{"source":6,"target":66,},
|
||||||
|
{"source":6,"target":67,},
|
||||||
|
{"source":6,"target":68,},
|
||||||
|
{"source":7,"target":69,},
|
||||||
|
{"source":7,"target":70,},
|
||||||
|
{"source":7,"target":71,},
|
||||||
|
{"source":7,"target":72,},
|
||||||
|
{"source":7,"target":73,},
|
||||||
|
{"source":7,"target":74,},
|
||||||
|
{"source":7,"target":75,},
|
||||||
|
{"source":7,"target":76,},
|
||||||
|
{"source":7,"target":77,},
|
||||||
|
{"source":7,"target":78,},
|
||||||
|
{"source":7,"target":79,},
|
||||||
|
{"source":8,"target":80,},
|
||||||
|
{"source":8,"target":81,},
|
||||||
|
{"source":8,"target":82,},
|
||||||
|
{"source":8,"target":83,},
|
||||||
|
{"source":8,"target":84,},
|
||||||
|
{"source":8,"target":85,},
|
||||||
|
{"source":9,"target":86,},
|
||||||
|
{"source":9,"target":87,},
|
||||||
|
{"source":9,"target":88,},
|
||||||
|
{"source":9,"target":89,},
|
||||||
|
{"source":9,"target":90,},
|
||||||
|
|
||||||
|
{"source":10,"target":91,},
|
||||||
|
{"source":10,"target":92,},
|
||||||
|
{"source":10,"target":93,},
|
||||||
|
{"source":10,"target":94,},
|
||||||
|
{"source":10,"target":95,},
|
||||||
|
|
||||||
|
{"source":11,"target":96,},
|
||||||
|
{"source":11,"target":97,},
|
||||||
|
{"source":11,"target":98,},
|
||||||
|
{"source":11,"target":99,},
|
||||||
|
{"source":11,"target":100,},
|
||||||
|
|
||||||
|
{"source":12,"target":101,},
|
||||||
|
{"source":12,"target":102,},
|
||||||
|
{"source":12,"target":103,},
|
||||||
|
|
||||||
|
{"source":13,"target":104,},
|
||||||
|
{"source":13,"target":105,},
|
||||||
|
{"source":13,"target":106,},
|
||||||
|
{"source":13,"target":107,},
|
||||||
|
{"source":13,"target":108,},
|
||||||
|
{"source":13,"target":109,},
|
||||||
|
{"source":13,"target":110,},
|
||||||
|
{"source":13,"target":111,},
|
||||||
|
{"source":13,"target":112,},
|
||||||
|
|
||||||
|
{"source":14,"target":113,},
|
||||||
|
{"source":14,"target":114,},
|
||||||
|
{"source":14,"target":115,},
|
||||||
|
{"source":14,"target":116,},
|
||||||
|
{"source":14,"target":117,},
|
||||||
|
{"source":14,"target":118,},
|
||||||
|
|
||||||
|
{"source":15,"target":119,},
|
||||||
|
{"source":15,"target":120,},
|
||||||
|
{"source":15,"target":121,},
|
||||||
|
{"source":15,"target":122,},
|
||||||
|
{"source":15,"target":123,},
|
||||||
|
{"source":15,"target":124,},
|
||||||
|
{"source":15,"target":125,},
|
||||||
|
{"source":15,"target":126,},
|
||||||
|
|
||||||
|
{"source":16,"target":127,},
|
||||||
|
{"source":16,"target":128,},
|
||||||
|
{"source":16,"target":129,},
|
||||||
|
{"source":16,"target":130,},
|
||||||
|
{"source":16,"target":131,},
|
||||||
|
{"source":16,"target":132,},
|
||||||
|
{"source":16,"target":133,},
|
||||||
|
|
||||||
|
{"source":17,"target":134,},
|
||||||
|
{"source":17,"target":135,},
|
||||||
|
{"source":17,"target":136,},
|
||||||
|
{"source":17,"target":137,},
|
||||||
|
{"source":17,"target":138,},
|
||||||
|
{"source":17,"target":139,},
|
||||||
|
{"source":17,"target":140,},
|
||||||
|
{"source":17,"target":141,},
|
||||||
|
{"source":17,"target":142,},
|
||||||
|
{"source":17,"target":143,},
|
||||||
|
{"source":17,"target":144,}
|
||||||
|
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
console.log("初始化打印",linksJson);
|
||||||
|
loadMap(options, nodesJson, linksJson);
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
二进制
kg/java_knowledge_graph.png
普通文件
二进制
kg/java_knowledge_graph.png
普通文件
二进制文件未显示。
|
之后 宽度: | 高度: | 大小: 575 KiB |
5
kg/js/d3.min.js
vendored
普通文件
5
kg/js/d3.min.js
vendored
普通文件
文件差异因一行或多行过长而隐藏
117
kg/js/strucMap.min.js
vendored
普通文件
117
kg/js/strucMap.min.js
vendored
普通文件
@@ -0,0 +1,117 @@
|
|||||||
|
function loadMap(options, nodesJson, linkJson) {
|
||||||
|
debugger;
|
||||||
|
var t = options,
|
||||||
|
a = nodesJson,
|
||||||
|
n = linkJson,
|
||||||
|
c = ["#1f77b4", "#ff7f0e", "#2ca02c", "#9467bd", "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf"],
|
||||||
|
l = t.width,
|
||||||
|
i = t.height,
|
||||||
|
o = d3.select(t.selector).append("svg").attr({
|
||||||
|
id: "map",
|
||||||
|
width: l,
|
||||||
|
height: i
|
||||||
|
}),
|
||||||
|
s = o.append("g"),
|
||||||
|
u = d3.layout.force();
|
||||||
|
u.on("tick", function() {
|
||||||
|
s.selectAll("line.link").each(function(t) {
|
||||||
|
var e, r, a, n, c = d3.select(this);
|
||||||
|
if("NEXT" == t.type) {
|
||||||
|
var l = t.target.x - t.source.x,
|
||||||
|
i = t.target.y - t.source.y,
|
||||||
|
o = Math.sqrt(l * l + i * i),
|
||||||
|
s = l / o,
|
||||||
|
u = i / o,
|
||||||
|
d = 35,
|
||||||
|
f = 35;
|
||||||
|
e = t.source.x + d * s, r = t.target.x - f * s, a = t.source.y + d * u, n = t.target.y - f * u, c.attr("marker-end", "url(#arrow)")
|
||||||
|
} else e = t.source.x, a = t.source.y, r = t.target.x, n = t.target.y;
|
||||||
|
c.attr("x1", e), c.attr("x2", r), c.attr("y1", a), c.attr("y2", n)
|
||||||
|
}), s.selectAll("g.node").selectAll("circle.ring").attr({
|
||||||
|
cx: function(t) {
|
||||||
|
return t.x
|
||||||
|
},
|
||||||
|
cy: function(t) {
|
||||||
|
return t.y
|
||||||
|
}
|
||||||
|
}), s.selectAll("g.node").selectAll("circle.outline").attr({
|
||||||
|
cx: function(t) {
|
||||||
|
return t.x
|
||||||
|
},
|
||||||
|
cy: function(t) {
|
||||||
|
return t.y
|
||||||
|
}
|
||||||
|
}), s.selectAll("g.node").selectAll("text.nTxt").attr({
|
||||||
|
x: function(t) {
|
||||||
|
return t.x - 15
|
||||||
|
},
|
||||||
|
y: function(t) {
|
||||||
|
return t.y + 6
|
||||||
|
}
|
||||||
|
}), s.selectAll("g.node").selectAll("text.propName").attr({
|
||||||
|
x: function(t) {
|
||||||
|
return t.x - 35
|
||||||
|
},
|
||||||
|
y: function(t) {
|
||||||
|
return t.y - 35
|
||||||
|
}
|
||||||
|
}), d.attr({
|
||||||
|
x: function(t) {
|
||||||
|
return(t.source.x + t.target.x) / 2 - 25
|
||||||
|
},
|
||||||
|
y: function(t) {
|
||||||
|
return(t.source.y + t.target.y) / 2 + 5
|
||||||
|
},
|
||||||
|
transform: function(t) {
|
||||||
|
var e = t.target.x - t.source.x,
|
||||||
|
r = t.target.y - t.source.y,
|
||||||
|
a = 360 * Math.atan(r / e) / (2 * Math.PI),
|
||||||
|
n = (t.target.x + t.source.x) / 2,
|
||||||
|
c = (t.target.y + t.source.y) / 2;
|
||||||
|
return "rotate(" + a + "," + n + "," + c + ")"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}).charge(-1300).linkDistance(t.lineLength || 200).nodes(a).links(n).size([l, i]).alpha(.1), o.append("svg:defs").append("svg:marker").attr("id", "arrow").attr("viewBox", "0 -5 10 10").attr("refX", 6).attr("markerWidth", 5).attr("markerHeight", 5).attr("orient", "auto").append("svg:path").attr("d", "M0,-5L10,0L0,5").attr("fill", "#6ac6ff"), s.selectAll("line.link").data(n).enter().append("line").attr("class", "link");
|
||||||
|
var d = s.selectAll("link.desc").data(n).enter().append("text").attr("class", "desc").text(function(t) {
|
||||||
|
return t.desc
|
||||||
|
}),
|
||||||
|
f = (u.drag().on("dragstart", function(t) {
|
||||||
|
t.fixed = !0;
|
||||||
|
options.nodesDragstart(t)
|
||||||
|
}), s.selectAll("g.node").data(a)),
|
||||||
|
p = f.enter().append("g").attr("class", function(t, e) {
|
||||||
|
return 0 === e ? "node active" : "node"
|
||||||
|
}).call(u.drag).on("click", function(t) {
|
||||||
|
t.fixed = 0;
|
||||||
|
options.nodesClick(t)
|
||||||
|
});
|
||||||
|
p.append("circle").attr({
|
||||||
|
r: 17,
|
||||||
|
class: "ring"
|
||||||
|
}), p.append("circle").attr({
|
||||||
|
r: function(t){
|
||||||
|
return t.prop.size
|
||||||
|
},
|
||||||
|
class: "outline"
|
||||||
|
}).style({
|
||||||
|
fill: function(t) {
|
||||||
|
return c[t.index]
|
||||||
|
},
|
||||||
|
//r: t.prop.size,//12~30
|
||||||
|
stroke: "#5CA8DB",
|
||||||
|
"stroke-width": "2px"
|
||||||
|
}), p.append("text").attr("class", "nTxt").text(function(t) {
|
||||||
|
return t.prop.nTxt
|
||||||
|
}).style({
|
||||||
|
fill: "black"
|
||||||
|
}), p.append("text").attr("class", "propName").text(function(t) {
|
||||||
|
return t.prop.name //球上面的文字
|
||||||
|
}).style({
|
||||||
|
fill: t.textColor || "black",
|
||||||
|
"font-family": t.textFontFamily || "arial, tahoma, 'Microsoft Yahei', '\5b8b\4f53', sans-serif"
|
||||||
|
}), u.start();
|
||||||
|
for(var x = 0; x < 50; x++) u.tick();
|
||||||
|
var g = setInterval(function() {
|
||||||
|
u.alpha() < .01 ? clearInterval(g) : u.tick()
|
||||||
|
}, 80)
|
||||||
|
}
|
||||||
在新工单中引用
屏蔽一个用户