From 6cb5014fcef6051db0daa21b7f67f27608d22586 Mon Sep 17 00:00:00 2001 From: limil Date: Wed, 18 Mar 2026 23:08:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=BB=91=E5=90=8D=E5=8D=95?= =?UTF-8?q?=E4=B8=8D=E7=94=9F=E6=95=88=E9=97=AE=E9=A2=98=EF=BC=9B=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0vscode=E8=B0=83=E8=AF=95=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + .vscode/launch.json | 25 +++++++++++++++++++++++++ package-lock.json | 14 +------------- src/components/CustomNode.tsx | 18 +++++++++--------- 4 files changed, 36 insertions(+), 22 deletions(-) create mode 100644 .vscode/launch.json diff --git a/.gitignore b/.gitignore index a547bf3..3968980 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ dist-ssr # Editor directories and files .vscode/* !.vscode/extensions.json +!.vscode/launch.json .idea .DS_Store *.suo diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..79d2dc6 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,25 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Vite: 启动开发服务器", + "type": "node", + "request": "launch", + "runtimeExecutable": "npm", + "runtimeArgs": [ + "run", + "dev" + ], + "cwd": "${workspaceFolder}/src", + "console": "integratedTerminal" + }, + { + "name": "React: Chrome 调试", + "type": "chrome", + "request": "launch", + "url": "http://localhost:5173", + "webRoot": "${workspaceFolder}/src", + "sourceMaps": true + } + ] +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 55802fe..51586b0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -65,7 +65,6 @@ "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/generator": "^7.28.6", @@ -1649,7 +1648,6 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.9.tgz", "integrity": "sha512-Lpo8kgb/igvMIPeNV2rsYKTgaORYdO1XGVZ4Qz3akwOj0ySGYMPlQWa8BaLn0G63D1aSaAQ5ldR06wCpChQCjA==", "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -1732,7 +1730,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -1872,7 +1869,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -2030,8 +2026,7 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/d3-color": { "version": "3.1.0", @@ -2090,7 +2085,6 @@ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "license": "ISC", - "peer": true, "engines": { "node": ">=12" } @@ -2259,7 +2253,6 @@ "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -3078,7 +3071,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -3151,7 +3143,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -3161,7 +3152,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -3553,7 +3543,6 @@ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -3675,7 +3664,6 @@ "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/src/components/CustomNode.tsx b/src/components/CustomNode.tsx index 8a4add2..728bccf 100644 --- a/src/components/CustomNode.tsx +++ b/src/components/CustomNode.tsx @@ -50,12 +50,10 @@ function getFromChildRouterMapper(subnet: SubnetInfo, graph: AppGraph, nodeId: s queue.push(child); }); - const allNodes = []; while(queue.length > 0) { const curr = queue.shift()!; const fromChild = fromChildMapper.get(curr); if(!fromChild) continue; - allNodes.push(curr); const nexts = subGraph.getChildren(curr); for(const next of nexts) { if(visited.has(next)) continue; @@ -65,19 +63,21 @@ function getFromChildRouterMapper(subnet: SubnetInfo, graph: AppGraph, nodeId: s } } - const allCIDRs = allNodes.flatMap((nodeId: string) => { - const cidr = subnet.nodes.find(n => n.nodeId === nodeId)?.cidr; - return cidr ? [cidr] : []; - }); - + const result: Map = new Map(); for (const [fromChild, nodes] of fromChildMapper) { - const targetCIDRs = nodes.flatMap((nodeId: string) => { + const targetCIDRs = nodes.flatMap((nodeId: string) => { const cidr = subnet.nodes.find(n => n.nodeId === nodeId)?.cidr; if(!cidr || disallowCIDRs.some(disallow => disallow.contains(cidr))) return []; return [cidr]; }); - + + const allCIDRs = [...nodes.flatMap((nodeId: string) => { + const cidr = subnet.nodes.find(n => n.nodeId === nodeId)?.cidr; + return cidr ? [cidr] : []; + }), ...disallowCIDRs]; + + const mergeResult = IPUtils.mergeCIDRs(allCIDRs, targetCIDRs); if(!mergeResult) { return Result.Error("无法生成路由配置");