Bladeren bron

知识图谱

Kevin Jiang 2 jaren geleden
bovenliggende
commit
102a272d66

+ 103 - 106
package-lock.json

@@ -8,7 +8,7 @@
       "name": "front",
       "version": "0.0.0",
       "dependencies": {
-        "@antv/g6": "^4.7.16",
+        "@antv/g6": "^4.8.7",
         "@tinymce/tinymce-vue": "^5.0.0",
         "@types/lodash": "^4.14.188",
         "ant-design-vue": "^3.2.13",
@@ -106,9 +106,9 @@
       "integrity": "sha512-4ddpsiHN9Pd4UIlWuKVK1C4IiZIdbwQvy9i7DUSI3xNJ89FPUFt8lxDYj8GzzfdllV0NkJTRxnG+FvLk0llidg=="
     },
     "node_modules/@antv/g-base": {
-      "version": "0.5.12",
-      "resolved": "https://registry.npmmirror.com/@antv/g-base/-/g-base-0.5.12.tgz",
-      "integrity": "sha512-KDM3K1rDnemvTAoPYsRYue+ZX7bR4D0TvOQ5Ib6osGtSpZcstwhA0CuQGI0wNXb/ax7h6/KyzNPVFqESrtWbqw==",
+      "version": "0.5.14",
+      "resolved": "https://registry.npmmirror.com/@antv/g-base/-/g-base-0.5.14.tgz",
+      "integrity": "sha512-Wyx+ddatDdQBjidLHXmV3NgKp1oiyNZNX9gGflaBFDfGgywnvs85bXnKswayFXsFBg5TQ6Goi8SnBufEqwemgg==",
       "dependencies": {
         "@antv/event-emitter": "^0.1.1",
         "@antv/g-math": "^0.1.9",
@@ -193,17 +193,17 @@
       }
     },
     "node_modules/@antv/g6": {
-      "version": "4.7.16",
-      "resolved": "https://registry.npmmirror.com/@antv/g6/-/g6-4.7.16.tgz",
-      "integrity": "sha512-mUFeJ02nGtGhwcpWz8qikmjEuS1qf5YoaJf0mUIejXXiF6B3D/skrElfWdf57RcWlIkqlm1bmW9NLDZDRmizTQ==",
+      "version": "4.8.7",
+      "resolved": "https://registry.npmmirror.com/@antv/g6/-/g6-4.8.7.tgz",
+      "integrity": "sha512-80kk9EHsVynWRROW8VjkjxTTbu23ZLC/06bkar01c5ANQcmpJFPfVrnvYTbk67EAym8zXhHHn68CQ2XMXmkPOQ==",
       "dependencies": {
-        "@antv/g6-pc": "0.7.16"
+        "@antv/g6-pc": "0.8.7"
       }
     },
     "node_modules/@antv/g6-core": {
-      "version": "0.7.16",
-      "resolved": "https://registry.npmmirror.com/@antv/g6-core/-/g6-core-0.7.16.tgz",
-      "integrity": "sha512-H4SciZdiT/RZDxvS/M075rodTq9W2nGmyhCZjE9dJc7YIz5jtGSAXJ5lZoDeTlrRg5y4atr7DWLxnAHoAFblfA==",
+      "version": "0.8.7",
+      "resolved": "https://registry.npmmirror.com/@antv/g6-core/-/g6-core-0.8.7.tgz",
+      "integrity": "sha512-na3kjtGwnZ10/yZQSQB6fkywN21jQp3CE0PRgO3N3dBke9F1tHy8Y8b4bpY14H6ob9Q8lGFozXO/Aqy266SWjA==",
       "dependencies": {
         "@antv/algorithm": "^0.1.8",
         "@antv/dom-util": "^2.0.1",
@@ -218,19 +218,19 @@
       }
     },
     "node_modules/@antv/g6-element": {
-      "version": "0.7.16",
-      "resolved": "https://registry.npmmirror.com/@antv/g6-element/-/g6-element-0.7.16.tgz",
-      "integrity": "sha512-I15daD73CijntB35nRU/E5kyvl9RmnXoYqxKHE0ARBqVKEKgHf401i+w1yphCZEZv+SC+lRGbx9mhYOv6hpbUA==",
+      "version": "0.8.7",
+      "resolved": "https://registry.npmmirror.com/@antv/g6-element/-/g6-element-0.8.7.tgz",
+      "integrity": "sha512-39QDIbRxXqJGhEoltMEj9/jQf7xTIDNM8xsSBhaqNTXFF8l0G0XrQ3kcOqi0/147tjxDVGhcgOPANi9p4Yj3WA==",
       "dependencies": {
         "@antv/g-base": "^0.5.1",
-        "@antv/g6-core": "0.7.16",
+        "@antv/g6-core": "0.8.7",
         "@antv/util": "~2.0.5"
       }
     },
     "node_modules/@antv/g6-pc": {
-      "version": "0.7.16",
-      "resolved": "https://registry.npmmirror.com/@antv/g6-pc/-/g6-pc-0.7.16.tgz",
-      "integrity": "sha512-uVXEQaakUcE7jqyHhAuLgwM9+ygRqfkAWWIJxr2LAOBVyF5V8XSduz5lWNZas/Kr4QOBanZT4wLMeqks15HqeQ==",
+      "version": "0.8.7",
+      "resolved": "https://registry.npmmirror.com/@antv/g6-pc/-/g6-pc-0.8.7.tgz",
+      "integrity": "sha512-oUe2vQ6UpT2SUeEvQQeO6BIQPFrC7xCSzUZBJv9FLAuQ/6p0/NIzQ/s4JU7rfZG6X31XqKDhdOg+kvDlMC27lg==",
       "dependencies": {
         "@ant-design/colors": "^4.0.5",
         "@antv/algorithm": "^0.1.8",
@@ -240,10 +240,10 @@
         "@antv/g-canvas": "^0.5.2",
         "@antv/g-math": "^0.1.1",
         "@antv/g-svg": "^0.5.1",
-        "@antv/g6-core": "0.7.16",
-        "@antv/g6-element": "0.7.16",
-        "@antv/g6-plugin": "0.7.16",
-        "@antv/hierarchy": "^0.6.7",
+        "@antv/g6-core": "0.8.7",
+        "@antv/g6-element": "0.8.7",
+        "@antv/g6-plugin": "0.8.7",
+        "@antv/hierarchy": "^0.6.10",
         "@antv/layout": "^0.3.0",
         "@antv/matrix-util": "^3.1.0-beta.3",
         "@antv/path-util": "^2.0.3",
@@ -264,16 +264,16 @@
       }
     },
     "node_modules/@antv/g6-plugin": {
-      "version": "0.7.16",
-      "resolved": "https://registry.npmmirror.com/@antv/g6-plugin/-/g6-plugin-0.7.16.tgz",
-      "integrity": "sha512-jpl8jIkT/rm09SuOsMI/ONw1lEFrINpQhUOhNtXFvavgc/oi/e5WguefJeXphtjOAAwaT7jMd2h+R/ZLQ2dDLQ==",
+      "version": "0.8.7",
+      "resolved": "https://registry.npmmirror.com/@antv/g6-plugin/-/g6-plugin-0.8.7.tgz",
+      "integrity": "sha512-BnVwFvFnAy4J5mBETHp6mO2M9k2kJVuWeYmkVBWc1LmqSBt5zeevuRvQVgwFOS0YYdQ9XkzoTw9jDBeLWsWOtw==",
       "dependencies": {
         "@antv/dom-util": "^2.0.2",
         "@antv/g-base": "^0.5.1",
         "@antv/g-canvas": "^0.5.2",
         "@antv/g-svg": "^0.5.2",
-        "@antv/g6-core": "0.7.16",
-        "@antv/g6-element": "0.7.16",
+        "@antv/g6-core": "0.8.7",
+        "@antv/g6-element": "0.8.7",
         "@antv/matrix-util": "^3.1.0-beta.3",
         "@antv/path-util": "^2.0.3",
         "@antv/scale": "^0.3.4",
@@ -287,17 +287,17 @@
       "integrity": "sha512-hhJOMThec51nU4Fe5p/viLlNIL71uDEgYFzKPajWjr2715SFG1HAgiP6AVylIeqBcAZ04u3Lw7usjl/TuI5RuQ=="
     },
     "node_modules/@antv/hierarchy": {
-      "version": "0.6.8",
-      "resolved": "https://registry.npmmirror.com/@antv/hierarchy/-/hierarchy-0.6.8.tgz",
-      "integrity": "sha512-wVzUl+pxny5gyGJ2mkWx8IiEypX6bnMHgr/NILgbxY6shoy0Vf4FhZpI3CY8Ez7bQT6js8fMkB2NymPW7d7i8A==",
+      "version": "0.6.11",
+      "resolved": "https://registry.npmmirror.com/@antv/hierarchy/-/hierarchy-0.6.11.tgz",
+      "integrity": "sha512-RJVhEMCuu4vj+Dt25lXIiNdd7jaqm/fqWGYikiELha4S5tnzdJoTUaUvvpfWlxLx4B0RsS9XRwBs1bOKN71TKg==",
       "dependencies": {
         "@antv/util": "^2.0.7"
       }
     },
     "node_modules/@antv/layout": {
-      "version": "0.3.11",
-      "resolved": "https://registry.npmmirror.com/@antv/layout/-/layout-0.3.11.tgz",
-      "integrity": "sha512-0WJxwdUMOfhjw3rO1oa8W70/U7J93uAKHaSN7b300Qm2wYV8pWjfmyVGaVtBho+u83i84Q1krbnmeeswBfAFHw==",
+      "version": "0.3.13",
+      "resolved": "https://registry.npmmirror.com/@antv/layout/-/layout-0.3.13.tgz",
+      "integrity": "sha512-N5dNTH3EW2B1/gNUg38OuOvc7jtHMjvY8i5+BDZn4ejYAovyhPJeIvhIhdjOir6UTXWhvtzVYYDXYfpr8/mQtQ==",
       "dependencies": {
         "@antv/g-webgpu": "0.7.2",
         "@antv/graphlib": "^1.0.0",
@@ -1130,26 +1130,26 @@
       "dev": true
     },
     "node_modules/@probe.gl/env": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmmirror.com/@probe.gl/env/-/env-3.5.2.tgz",
-      "integrity": "sha512-JlNvJ2p6+ObWX7es6n3TycGPTv5CfVrCS8vblI1eHhrFCcZ6RxIo727ffRVwldpp0YTzdgjx3/4fB/1dnVYElw==",
+      "version": "3.6.0",
+      "resolved": "https://registry.npmmirror.com/@probe.gl/env/-/env-3.6.0.tgz",
+      "integrity": "sha512-4tTZYUg/8BICC3Yyb9rOeoKeijKbZHRXBEKObrfPmX4sQmYB15ZOUpoVBhAyJkOYVAM8EkPci6Uw5dLCwx2BEQ==",
       "dependencies": {
         "@babel/runtime": "^7.0.0"
       }
     },
     "node_modules/@probe.gl/log": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmmirror.com/@probe.gl/log/-/log-3.5.2.tgz",
-      "integrity": "sha512-5yo8Dg8LrSltuPBdGlLh/WOvt4LdU7DDHu75GMeiS0fKM+J4IACRpGV8SOrktCj1MWZ6JVHcNQkJnoyZ6G7p/w==",
+      "version": "3.6.0",
+      "resolved": "https://registry.npmmirror.com/@probe.gl/log/-/log-3.6.0.tgz",
+      "integrity": "sha512-hjpyenpEvOdowgZ1qMeCJxfRD4JkKdlXz0RC14m42Un62NtOT+GpWyKA4LssT0+xyLULCByRAtG2fzZorpIAcA==",
       "dependencies": {
         "@babel/runtime": "^7.0.0",
-        "@probe.gl/env": "3.5.2"
+        "@probe.gl/env": "3.6.0"
       }
     },
     "node_modules/@probe.gl/stats": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmmirror.com/@probe.gl/stats/-/stats-3.5.2.tgz",
-      "integrity": "sha512-YKaYXiHF//fgy1OkX38JD70Lc8qxg2Viw8Q2CTNMwGPDJe12wda7kEmMKPJNw2oYLyFUfTzv00KJMA5h18z02w==",
+      "version": "3.6.0",
+      "resolved": "https://registry.npmmirror.com/@probe.gl/stats/-/stats-3.6.0.tgz",
+      "integrity": "sha512-JdALQXB44OP4kUBN/UrQgzbJe4qokbVF4Y8lkIA8iVCFnjVowWIgkD/z/0QO65yELT54tTrtepw1jScjKB+rhQ==",
       "dependencies": {
         "@babel/runtime": "^7.0.0"
       }
@@ -6824,14 +6824,14 @@
       }
     },
     "node_modules/probe.gl": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmmirror.com/probe.gl/-/probe.gl-3.5.2.tgz",
-      "integrity": "sha512-8lFQVmi7pMQZkqfj8+VjX4GU9HTkyxgRm5/h/xxA/4/IvZPv3qtP996L+awPwZsrPRKEw99t12SvqEHqSls/sA==",
+      "version": "3.6.0",
+      "resolved": "https://registry.npmmirror.com/probe.gl/-/probe.gl-3.6.0.tgz",
+      "integrity": "sha512-19JydJWI7+DtR4feV+pu4Mn1I5TAc0xojuxVgZdXIyfmTLfUaFnk4OloWK1bKbPtkgGKLr2lnbnCXmpZEcEp9g==",
       "dependencies": {
         "@babel/runtime": "^7.0.0",
-        "@probe.gl/env": "3.5.2",
-        "@probe.gl/log": "3.5.2",
-        "@probe.gl/stats": "3.5.2"
+        "@probe.gl/env": "3.6.0",
+        "@probe.gl/log": "3.6.0",
+        "@probe.gl/stats": "3.6.0"
       }
     },
     "node_modules/proxy-from-env": {
@@ -7739,12 +7739,9 @@
       "dev": true
     },
     "node_modules/tinycolor2": {
-      "version": "1.4.2",
-      "resolved": "https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.4.2.tgz",
-      "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==",
-      "engines": {
-        "node": "*"
-      }
+      "version": "1.6.0",
+      "resolved": "https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.6.0.tgz",
+      "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw=="
     },
     "node_modules/tinymce": {
       "version": "6.3.1",
@@ -8617,9 +8614,9 @@
       "integrity": "sha512-4ddpsiHN9Pd4UIlWuKVK1C4IiZIdbwQvy9i7DUSI3xNJ89FPUFt8lxDYj8GzzfdllV0NkJTRxnG+FvLk0llidg=="
     },
     "@antv/g-base": {
-      "version": "0.5.12",
-      "resolved": "https://registry.npmmirror.com/@antv/g-base/-/g-base-0.5.12.tgz",
-      "integrity": "sha512-KDM3K1rDnemvTAoPYsRYue+ZX7bR4D0TvOQ5Ib6osGtSpZcstwhA0CuQGI0wNXb/ax7h6/KyzNPVFqESrtWbqw==",
+      "version": "0.5.14",
+      "resolved": "https://registry.npmmirror.com/@antv/g-base/-/g-base-0.5.14.tgz",
+      "integrity": "sha512-Wyx+ddatDdQBjidLHXmV3NgKp1oiyNZNX9gGflaBFDfGgywnvs85bXnKswayFXsFBg5TQ6Goi8SnBufEqwemgg==",
       "requires": {
         "@antv/event-emitter": "^0.1.1",
         "@antv/g-math": "^0.1.9",
@@ -8704,17 +8701,17 @@
       }
     },
     "@antv/g6": {
-      "version": "4.7.16",
-      "resolved": "https://registry.npmmirror.com/@antv/g6/-/g6-4.7.16.tgz",
-      "integrity": "sha512-mUFeJ02nGtGhwcpWz8qikmjEuS1qf5YoaJf0mUIejXXiF6B3D/skrElfWdf57RcWlIkqlm1bmW9NLDZDRmizTQ==",
+      "version": "4.8.7",
+      "resolved": "https://registry.npmmirror.com/@antv/g6/-/g6-4.8.7.tgz",
+      "integrity": "sha512-80kk9EHsVynWRROW8VjkjxTTbu23ZLC/06bkar01c5ANQcmpJFPfVrnvYTbk67EAym8zXhHHn68CQ2XMXmkPOQ==",
       "requires": {
-        "@antv/g6-pc": "0.7.16"
+        "@antv/g6-pc": "0.8.7"
       }
     },
     "@antv/g6-core": {
-      "version": "0.7.16",
-      "resolved": "https://registry.npmmirror.com/@antv/g6-core/-/g6-core-0.7.16.tgz",
-      "integrity": "sha512-H4SciZdiT/RZDxvS/M075rodTq9W2nGmyhCZjE9dJc7YIz5jtGSAXJ5lZoDeTlrRg5y4atr7DWLxnAHoAFblfA==",
+      "version": "0.8.7",
+      "resolved": "https://registry.npmmirror.com/@antv/g6-core/-/g6-core-0.8.7.tgz",
+      "integrity": "sha512-na3kjtGwnZ10/yZQSQB6fkywN21jQp3CE0PRgO3N3dBke9F1tHy8Y8b4bpY14H6ob9Q8lGFozXO/Aqy266SWjA==",
       "requires": {
         "@antv/algorithm": "^0.1.8",
         "@antv/dom-util": "^2.0.1",
@@ -8729,19 +8726,19 @@
       }
     },
     "@antv/g6-element": {
-      "version": "0.7.16",
-      "resolved": "https://registry.npmmirror.com/@antv/g6-element/-/g6-element-0.7.16.tgz",
-      "integrity": "sha512-I15daD73CijntB35nRU/E5kyvl9RmnXoYqxKHE0ARBqVKEKgHf401i+w1yphCZEZv+SC+lRGbx9mhYOv6hpbUA==",
+      "version": "0.8.7",
+      "resolved": "https://registry.npmmirror.com/@antv/g6-element/-/g6-element-0.8.7.tgz",
+      "integrity": "sha512-39QDIbRxXqJGhEoltMEj9/jQf7xTIDNM8xsSBhaqNTXFF8l0G0XrQ3kcOqi0/147tjxDVGhcgOPANi9p4Yj3WA==",
       "requires": {
         "@antv/g-base": "^0.5.1",
-        "@antv/g6-core": "0.7.16",
+        "@antv/g6-core": "0.8.7",
         "@antv/util": "~2.0.5"
       }
     },
     "@antv/g6-pc": {
-      "version": "0.7.16",
-      "resolved": "https://registry.npmmirror.com/@antv/g6-pc/-/g6-pc-0.7.16.tgz",
-      "integrity": "sha512-uVXEQaakUcE7jqyHhAuLgwM9+ygRqfkAWWIJxr2LAOBVyF5V8XSduz5lWNZas/Kr4QOBanZT4wLMeqks15HqeQ==",
+      "version": "0.8.7",
+      "resolved": "https://registry.npmmirror.com/@antv/g6-pc/-/g6-pc-0.8.7.tgz",
+      "integrity": "sha512-oUe2vQ6UpT2SUeEvQQeO6BIQPFrC7xCSzUZBJv9FLAuQ/6p0/NIzQ/s4JU7rfZG6X31XqKDhdOg+kvDlMC27lg==",
       "requires": {
         "@ant-design/colors": "^4.0.5",
         "@antv/algorithm": "^0.1.8",
@@ -8751,10 +8748,10 @@
         "@antv/g-canvas": "^0.5.2",
         "@antv/g-math": "^0.1.1",
         "@antv/g-svg": "^0.5.1",
-        "@antv/g6-core": "0.7.16",
-        "@antv/g6-element": "0.7.16",
-        "@antv/g6-plugin": "0.7.16",
-        "@antv/hierarchy": "^0.6.7",
+        "@antv/g6-core": "0.8.7",
+        "@antv/g6-element": "0.8.7",
+        "@antv/g6-plugin": "0.8.7",
+        "@antv/hierarchy": "^0.6.10",
         "@antv/layout": "^0.3.0",
         "@antv/matrix-util": "^3.1.0-beta.3",
         "@antv/path-util": "^2.0.3",
@@ -8777,16 +8774,16 @@
       }
     },
     "@antv/g6-plugin": {
-      "version": "0.7.16",
-      "resolved": "https://registry.npmmirror.com/@antv/g6-plugin/-/g6-plugin-0.7.16.tgz",
-      "integrity": "sha512-jpl8jIkT/rm09SuOsMI/ONw1lEFrINpQhUOhNtXFvavgc/oi/e5WguefJeXphtjOAAwaT7jMd2h+R/ZLQ2dDLQ==",
+      "version": "0.8.7",
+      "resolved": "https://registry.npmmirror.com/@antv/g6-plugin/-/g6-plugin-0.8.7.tgz",
+      "integrity": "sha512-BnVwFvFnAy4J5mBETHp6mO2M9k2kJVuWeYmkVBWc1LmqSBt5zeevuRvQVgwFOS0YYdQ9XkzoTw9jDBeLWsWOtw==",
       "requires": {
         "@antv/dom-util": "^2.0.2",
         "@antv/g-base": "^0.5.1",
         "@antv/g-canvas": "^0.5.2",
         "@antv/g-svg": "^0.5.2",
-        "@antv/g6-core": "0.7.16",
-        "@antv/g6-element": "0.7.16",
+        "@antv/g6-core": "0.8.7",
+        "@antv/g6-element": "0.8.7",
         "@antv/matrix-util": "^3.1.0-beta.3",
         "@antv/path-util": "^2.0.3",
         "@antv/scale": "^0.3.4",
@@ -8800,17 +8797,17 @@
       "integrity": "sha512-hhJOMThec51nU4Fe5p/viLlNIL71uDEgYFzKPajWjr2715SFG1HAgiP6AVylIeqBcAZ04u3Lw7usjl/TuI5RuQ=="
     },
     "@antv/hierarchy": {
-      "version": "0.6.8",
-      "resolved": "https://registry.npmmirror.com/@antv/hierarchy/-/hierarchy-0.6.8.tgz",
-      "integrity": "sha512-wVzUl+pxny5gyGJ2mkWx8IiEypX6bnMHgr/NILgbxY6shoy0Vf4FhZpI3CY8Ez7bQT6js8fMkB2NymPW7d7i8A==",
+      "version": "0.6.11",
+      "resolved": "https://registry.npmmirror.com/@antv/hierarchy/-/hierarchy-0.6.11.tgz",
+      "integrity": "sha512-RJVhEMCuu4vj+Dt25lXIiNdd7jaqm/fqWGYikiELha4S5tnzdJoTUaUvvpfWlxLx4B0RsS9XRwBs1bOKN71TKg==",
       "requires": {
         "@antv/util": "^2.0.7"
       }
     },
     "@antv/layout": {
-      "version": "0.3.11",
-      "resolved": "https://registry.npmmirror.com/@antv/layout/-/layout-0.3.11.tgz",
-      "integrity": "sha512-0WJxwdUMOfhjw3rO1oa8W70/U7J93uAKHaSN7b300Qm2wYV8pWjfmyVGaVtBho+u83i84Q1krbnmeeswBfAFHw==",
+      "version": "0.3.13",
+      "resolved": "https://registry.npmmirror.com/@antv/layout/-/layout-0.3.13.tgz",
+      "integrity": "sha512-N5dNTH3EW2B1/gNUg38OuOvc7jtHMjvY8i5+BDZn4ejYAovyhPJeIvhIhdjOir6UTXWhvtzVYYDXYfpr8/mQtQ==",
       "requires": {
         "@antv/g-webgpu": "0.7.2",
         "@antv/graphlib": "^1.0.0",
@@ -9472,26 +9469,26 @@
       "dev": true
     },
     "@probe.gl/env": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmmirror.com/@probe.gl/env/-/env-3.5.2.tgz",
-      "integrity": "sha512-JlNvJ2p6+ObWX7es6n3TycGPTv5CfVrCS8vblI1eHhrFCcZ6RxIo727ffRVwldpp0YTzdgjx3/4fB/1dnVYElw==",
+      "version": "3.6.0",
+      "resolved": "https://registry.npmmirror.com/@probe.gl/env/-/env-3.6.0.tgz",
+      "integrity": "sha512-4tTZYUg/8BICC3Yyb9rOeoKeijKbZHRXBEKObrfPmX4sQmYB15ZOUpoVBhAyJkOYVAM8EkPci6Uw5dLCwx2BEQ==",
       "requires": {
         "@babel/runtime": "^7.0.0"
       }
     },
     "@probe.gl/log": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmmirror.com/@probe.gl/log/-/log-3.5.2.tgz",
-      "integrity": "sha512-5yo8Dg8LrSltuPBdGlLh/WOvt4LdU7DDHu75GMeiS0fKM+J4IACRpGV8SOrktCj1MWZ6JVHcNQkJnoyZ6G7p/w==",
+      "version": "3.6.0",
+      "resolved": "https://registry.npmmirror.com/@probe.gl/log/-/log-3.6.0.tgz",
+      "integrity": "sha512-hjpyenpEvOdowgZ1qMeCJxfRD4JkKdlXz0RC14m42Un62NtOT+GpWyKA4LssT0+xyLULCByRAtG2fzZorpIAcA==",
       "requires": {
         "@babel/runtime": "^7.0.0",
-        "@probe.gl/env": "3.5.2"
+        "@probe.gl/env": "3.6.0"
       }
     },
     "@probe.gl/stats": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmmirror.com/@probe.gl/stats/-/stats-3.5.2.tgz",
-      "integrity": "sha512-YKaYXiHF//fgy1OkX38JD70Lc8qxg2Viw8Q2CTNMwGPDJe12wda7kEmMKPJNw2oYLyFUfTzv00KJMA5h18z02w==",
+      "version": "3.6.0",
+      "resolved": "https://registry.npmmirror.com/@probe.gl/stats/-/stats-3.6.0.tgz",
+      "integrity": "sha512-JdALQXB44OP4kUBN/UrQgzbJe4qokbVF4Y8lkIA8iVCFnjVowWIgkD/z/0QO65yELT54tTrtepw1jScjKB+rhQ==",
       "requires": {
         "@babel/runtime": "^7.0.0"
       }
@@ -13924,14 +13921,14 @@
       "dev": true
     },
     "probe.gl": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmmirror.com/probe.gl/-/probe.gl-3.5.2.tgz",
-      "integrity": "sha512-8lFQVmi7pMQZkqfj8+VjX4GU9HTkyxgRm5/h/xxA/4/IvZPv3qtP996L+awPwZsrPRKEw99t12SvqEHqSls/sA==",
+      "version": "3.6.0",
+      "resolved": "https://registry.npmmirror.com/probe.gl/-/probe.gl-3.6.0.tgz",
+      "integrity": "sha512-19JydJWI7+DtR4feV+pu4Mn1I5TAc0xojuxVgZdXIyfmTLfUaFnk4OloWK1bKbPtkgGKLr2lnbnCXmpZEcEp9g==",
       "requires": {
         "@babel/runtime": "^7.0.0",
-        "@probe.gl/env": "3.5.2",
-        "@probe.gl/log": "3.5.2",
-        "@probe.gl/stats": "3.5.2"
+        "@probe.gl/env": "3.6.0",
+        "@probe.gl/log": "3.6.0",
+        "@probe.gl/stats": "3.6.0"
       }
     },
     "proxy-from-env": {
@@ -14683,9 +14680,9 @@
       "dev": true
     },
     "tinycolor2": {
-      "version": "1.4.2",
-      "resolved": "https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.4.2.tgz",
-      "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA=="
+      "version": "1.6.0",
+      "resolved": "https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.6.0.tgz",
+      "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw=="
     },
     "tinymce": {
       "version": "6.3.1",

+ 1 - 1
package.json

@@ -13,7 +13,7 @@
     "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore"
   },
   "dependencies": {
-    "@antv/g6": "^4.7.16",
+    "@antv/g6": "^4.8.7",
     "@tinymce/tinymce-vue": "^5.0.0",
     "@types/lodash": "^4.14.188",
     "ant-design-vue": "^3.2.13",

+ 2 - 0
src/assets/variables.scss

@@ -1,2 +1,4 @@
 
 $border-color: #d9d9d9;
+
+$bg-color-gray-light: #eee;

+ 11 - 0
src/client/knowledgeGraph.client.ts

@@ -0,0 +1,11 @@
+import httpClient from "@/services/httpClient";
+import type { Response } from "@/types/response.types";
+import * as urlHelper from "@/libs/url.lib"
+import type { SubjectNode, Request } from "@/types/knowledgeGraph.types";
+
+const _url = urlHelper.withPrefix("/gw/search/knowledgeGraph");
+
+export async function find(request: Request): Promise<SubjectNode[]> {
+  const resp = await httpClient.post<Response<SubjectNode[]>>(_url("/find"), request)
+  return resp.data.data
+}

+ 66 - 0
src/models/knowledgeGraph.model.ts

@@ -0,0 +1,66 @@
+import type { SubjectNode } from "@/types/knowledgeGraph.types";
+import type { GraphData } from "@antv/g6";
+
+export class GraphDataManager {
+  private graphData: GraphData = {nodes: [], edges: []};
+  private nodeNames: Set<string> = new Set();
+  private edgeNames: Set<string> = new Set();
+
+  constructor() {}
+
+  public addSubjectNodes(nodes: SubjectNode[]) {
+    for (const node of nodes) {
+      this.addSubjectNode(node)
+    }
+  }
+
+  public addSubjectNode(node: SubjectNode) {
+    console.log('add subject node', node)
+    if (node.children && node.children.length > 0) {
+      this.addEdge(node);
+    }
+    if (this.nodeNames.has(node.name)) {
+      console.log('node', node.name, 'exists')
+      return;
+    }
+
+    this.graphData.nodes?.push({
+      id: node.fieldID,
+      label: node.name,
+    })
+    this.nodeNames.add(node.name);
+  }
+
+  private addEdge(node: SubjectNode, deepth: number = 0) {
+    console.log('add edge')
+    if (!node.children || node.children.length <= 0 || deepth > 2) {
+      return;
+    }
+    for (const child of node.children) {
+      const key = `${node.name}_${child.name}`;
+      console.log('key', key)
+      if (this.edgeNames.has(key)) {
+        continue;
+      }
+      console.log('add edge: ', {
+        source: node.fieldID,
+        target: child.fieldID,
+      })
+      this.graphData.edges?.push({
+        source: node.fieldID,
+        target: child.fieldID,
+      })
+      this.edgeNames.add(key);
+    }
+  }
+
+  public pruge() {
+    this.graphData = {nodes: [], edges: []};
+    this.nodeNames = new Set();
+    this.edgeNames = new Set();
+  }
+
+  public getGraphData() {
+    return this.graphData;
+  }
+}

+ 6 - 1
src/services/knowledgeGraph.service.ts

@@ -1,7 +1,8 @@
 import type { AxiosResponse } from "axios";
 import httpClient from "./httpClient";
+import * as knowledgeGraphClient from "@/client/knowledgeGraph.client"
 import type { Response } from "@/types/response.types";
-import type { Property } from "@/types/knowledgeGraph.types";
+import type { SubjectNode, Property, Request } from "@/types/knowledgeGraph.types";
 
 /**
  * 根据学科ID查询学科属性
@@ -11,3 +12,7 @@ import type { Property } from "@/types/knowledgeGraph.types";
 export function fetchProperty(id: number): Promise<AxiosResponse<Response<Property>>> {
   return httpClient.get(`/knowledgeGraph/property/${id}`);
 }
+
+export async function find(request: Request): Promise<SubjectNode[]> {
+  return knowledgeGraphClient.find(request)
+}

+ 0 - 30
src/stores/knowledge-graph.ts

@@ -9,35 +9,6 @@ import { message } from "ant-design-vue";
 export const useKnowledgeGraphStore = defineStore('knowledgeGraph', () => {
   const property: Ref<Property> = ref({} as Property);
 
-  const graphData: Ref<GraphData> = ref({
-    // 点集
-    nodes: [
-      {
-        id: 'node1',
-        label: '建筑工程',
-      },
-      {
-        id: 'node2',
-        label: '的',
-      },
-      {
-        id: 'node3',
-        label: '的',
-      }
-    ],
-    // 边集
-    edges: [
-      {
-        source: 'node1',
-        target: 'node2',
-      },
-      {
-        source: 'node1',
-        target: 'node3',
-      }
-    ],
-  });
-
   const searchResult: Ref<SearchResult | null> = ref(null);
 
   function fetchGraph(query?: string) {
@@ -69,7 +40,6 @@ export const useKnowledgeGraphStore = defineStore('knowledgeGraph', () => {
   }
 
   return {
-    graphData,
     property,
     searchResult,
     fetchGraph,

+ 18 - 0
src/types/knowledgeGraph.types.ts

@@ -2,6 +2,9 @@ type GraphNodeID = string;
 
 export interface GraphNode {
   id: GraphNodeID;
+  name: string;
+  fieldID: string;
+  child: GraphNode[];
   label: string;
 }
 
@@ -20,3 +23,18 @@ export interface Property {
   docCount: number,
   keywords: {[index: string]: number}
 }
+
+export interface Request {
+  name: string;
+  size: number;
+  findParents: boolean;
+  findChildren: boolean;
+}
+
+export interface SubjectNode {
+  id: number;
+  name: string;
+  fieldID: string;
+  children: SubjectNode[];
+}
+

+ 98 - 19
src/views/knowledgeGraph/KnowledgeGraphView.vue

@@ -1,14 +1,14 @@
 <script setup lang="ts">
 import { onMounted, ref, computed, type Ref } from "vue";
-import G6 from '@antv/g6';
-
-// import * as searchService from "@/services/search.service";
+import G6, { type Graph, type Item } from '@antv/g6';
 import type { SearchResult } from "@/types/search.types";
-import type { GraphData } from "@/types/knowledgeGraph.types";
+import type { Request } from "@/types/knowledgeGraph.types";
 import SearchResultList from "../search/components/SearchResultList.vue";
 import PropertyComponent from "./components/PropertyComponent.vue";
-import { message } from "ant-design-vue";
 import { useKnowledgeGraphStore } from "@/stores/knowledge-graph";
+import * as knowledgeGraphService from "@/services/knowledgeGraph.service"
+import { GraphDataManager } from "@/models/knowledgeGraph.model";
+import { message } from "ant-design-vue";
 
 const kgGraphStore = useKnowledgeGraphStore();
 
@@ -16,16 +16,66 @@ const keyword = ref('');
 
 const currentPage = ref(1);
 
-function onSearch() {
-  console.log('keyword', keyword);
+let graph: Graph | null = null;
+
+const graphDataManager = new GraphDataManager();
+
+function find(request: Request) {
+  const msgHandler = message.loading("正在查找关联节点...", 60)
+  knowledgeGraphService.find(request).then((nodes) => {
+    graphDataManager.addSubjectNodes(nodes);
+    if (graph && nodes.length > 0) {
+      graph.read(graphDataManager.getGraphData() as any)
+    }
+    msgHandler()
+  }).catch(() => {
+    msgHandler()
+  })
 }
 
-// 搜索结果
-const searchResult: Ref<SearchResult | null> = computed(() => kgGraphStore.searchResult);
+function findParents(name: string) {
+  find({name, size: 10, findParents: true, findChildren: false})
+}
+
+function findChildren(name: string) {
+  find({name, size: 10, findParents: false, findChildren: true})
+}
 
-const data = computed(() => kgGraphStore.graphData);
+function findName(name: string) {
+  find({name, size: 10, findParents: false, findChildren: false})
+}
+
+const menu = new G6.Menu({
+  offsetX: 6,
+  offsetY: 10,
+  itemTypes: ['node'],
+  getContent(e) {
+    const outDiv = document.createElement('div');
+    outDiv.style.width = '100px';
+    outDiv.innerHTML = `<ul class='graph-context-menu'>
+        <li name='parent' class='graph-context-menu-item'>上级学科</li>
+        <li name='child' class='graph-context-menu-item'>下级学科</li>
+      </ul>`
+    return outDiv
+  },
+  handleMenuClick(target: HTMLElement, item: Item) {
+    console.log(target, item)
+    const menuName = target.getAttribute("name")
+    const model = item.getModel()
+    if (model.label) {
+      if (menuName == 'parent') {
+        findParents(model.label as string)
+        console.log("请求parent")
+      } else if (menuName == 'child') {
+        findChildren(model.label as string)
+        console.log("请求child")
+      }
+    }
+    console.log('menu name', menuName, 'label', item.getModel().label)
+  },
+});
 
-function initGraph(data: GraphData) {
+function initGraph() {
   const graph = new G6.Graph({
     container: 'graph',
     layout: {
@@ -63,11 +113,12 @@ function initGraph(data: GraphData) {
         },
       },
     },
+    plugins: [menu],
   });
-  // 读取数据源到图上
-  graph.data(data as any);
-  // 渲染图
-  graph.render();
+  // // 读取数据源到图上
+  // graph.data(data as any);
+  // // 渲染图
+  // graph.render();
   // 监听节点点击事件
   // graph.on('node:click', event => {
   //   const nodes = data['nodes']
@@ -79,13 +130,20 @@ function initGraph(data: GraphData) {
   //     kgGraphStore.search(node.label);
   //   }
   // });
+  return graph;
+}
+
+function onSearch() {
+  graphDataManager.pruge();
+  findName(keyword.value);
 }
 
+// 搜索结果
+const searchResult: Ref<SearchResult | null> = computed(() => kgGraphStore.searchResult);
+
 onMounted(() => {
-  kgGraphStore.fetchGraph(keyword.value).then((resp) => {
-    message.info(resp as string);
-    initGraph(data.value);
-  });
+  graph = initGraph()
+  findName("")
 });
 
 // function searchSubject(name: string) {
@@ -166,6 +224,27 @@ onMounted(() => {
   .property-wrap {
     height: 100%;
   }
+
+  :deep(ul.graph-context-menu) {
+    list-style: none;
+    margin: 0;
+    padding: 0;
+
+    li.graph-context-menu-item {
+      font-size: 1.25em;
+      padding: 5px 10px;
+      margin-top: 6px;
+      cursor: pointer;
+
+      &:first-child {
+        margin-top: 0;
+      }
+
+      &:hover {
+        background-color: $bg-color-gray-light;
+      }
+    }
+  }
 }
 
 .articles-wrap {