@riil-frontend/component-topology 9.0.0-a.11 → 9.0.0-a.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/build/index.js +9 -9
  2. package/es/core/editor/components/settings/core/updateElementProperty.js +6 -1
  3. package/es/core/editor/components/settings/propertyViews/node/data/BindIpInput.js +61 -0
  4. package/es/core/editor/components/settings/propertyViews/node/data/Data.js +27 -8
  5. package/es/core/hooks/useTopoEdit.js +133 -16
  6. package/es/core/models/TopoApp.js +1 -1
  7. package/es/core/models/utils/linkUtils.js +18 -0
  8. package/es/core/store/models/topoConfig.js +36 -7
  9. package/es/core/test/Test.js +52 -0
  10. package/es/core/viewer/components/plugins/ResourceDetail/components/ResourceOverview/ResourceOverview.js +7 -78
  11. package/es/core/viewer/components/plugins/ResourceDetail/components/ResourceOverview/components/LinkTopo/hooks/useMetricPolling.js +27 -37
  12. package/es/core/viewer/components/plugins/ResourceDetail/components/ResourceOverview/components/LinkTopo/services/index.js +57 -1
  13. package/es/networkTopo/services/link.js +1 -1
  14. package/es/networkTopo/services/topo/basic.js +4 -3
  15. package/es/networkTopo/services/topo/networkLink.js +45 -3
  16. package/es/networkTopo/utils/exitLinkUtil.js +110 -0
  17. package/es/utils/htElementUtils.js +43 -21
  18. package/lib/core/editor/components/settings/core/updateElementProperty.js +6 -1
  19. package/lib/core/editor/components/settings/propertyViews/node/data/BindIpInput.js +74 -0
  20. package/lib/core/editor/components/settings/propertyViews/node/data/Data.js +28 -8
  21. package/lib/core/hooks/useTopoEdit.js +133 -15
  22. package/lib/core/models/TopoApp.js +1 -1
  23. package/lib/core/models/utils/linkUtils.js +21 -1
  24. package/lib/core/store/models/topoConfig.js +37 -7
  25. package/lib/core/test/Test.js +52 -0
  26. package/lib/core/viewer/components/plugins/ResourceDetail/components/ResourceOverview/ResourceOverview.js +6 -78
  27. package/lib/core/viewer/components/plugins/ResourceDetail/components/ResourceOverview/components/LinkTopo/hooks/useMetricPolling.js +27 -36
  28. package/lib/core/viewer/components/plugins/ResourceDetail/components/ResourceOverview/components/LinkTopo/services/index.js +58 -1
  29. package/lib/networkTopo/services/topo/basic.js +5 -3
  30. package/lib/networkTopo/services/topo/networkLink.js +45 -3
  31. package/lib/networkTopo/utils/exitLinkUtil.js +115 -0
  32. package/lib/utils/htElementUtils.js +45 -21
  33. package/package.json +2 -2
@@ -15,7 +15,7 @@ function getElementData(element) {
15
15
  styleMap: element.getStyleMap()
16
16
  };
17
17
 
18
- if (className === 'ht.Edge') {
18
+ if (className === "ht.Edge") {
19
19
  return _extends({}, commonData);
20
20
  }
21
21
 
@@ -27,7 +27,7 @@ function getElementData(element) {
27
27
  export function isNode(element) {
28
28
  // HT为了支持区域内无节点可展开增加了站位节点,因此 节点的layer等于container_blank的过滤掉就可以了
29
29
  // eslint-disable-next-line no-underscore-dangle
30
- return element instanceof ht.Node && !isLayer(element) && element._layer !== 'container_blank';
30
+ return element instanceof ht.Node && !isLayer(element) && element._layer !== "container_blank";
31
31
  }
32
32
  export function isEdge(element) {
33
33
  return element instanceof ht.Edge;
@@ -38,7 +38,7 @@ export function isValidEdge(element) {
38
38
  }
39
39
 
40
40
  if (!element.getSource() || !element.getTarget()) {
41
- rlog.error('isValidEdge 连线异常:源或目的为空', element);
41
+ rlog.error("isValidEdge 连线异常:源或目的为空", element);
42
42
  return false;
43
43
  }
44
44
 
@@ -51,7 +51,29 @@ export function isLayer(element) {
51
51
  return element instanceof ht.Grid;
52
52
  }
53
53
  export function isText(element) {
54
- return element instanceof ht.Text && element.a('isText');
54
+ return element instanceof ht.Text && element.a("isText");
55
+ }
56
+ export function isUniqueIp(dataModel, ip) {
57
+ console.log("isUniqueIp", ip);
58
+ var nodes = getNodes(dataModel);
59
+ var isUnique = true;
60
+
61
+ for (var i = 0; i < nodes.length; i++) {
62
+ var element = nodes[i];
63
+ var tagTxt = element.getTag();
64
+ console.log("isUniqueIp-element", tagTxt, ip);
65
+
66
+ if (tagTxt !== null && tagTxt !== void 0 && tagTxt.startsWith("ip_")) {
67
+ var ipTxt = tagTxt.replace("ip_", '');
68
+
69
+ if (ipTxt === ip) {
70
+ isUnique = false;
71
+ break;
72
+ }
73
+ }
74
+ }
75
+
76
+ return isUnique;
55
77
  }
56
78
  export function getElements(dataModel) {
57
79
  // console.error(111, dataModel.getDatas().getArray())
@@ -72,7 +94,7 @@ export function getGroupDatas(dataModel) {
72
94
  }
73
95
  export function getGroupElementByTag(dataModel, tag) {
74
96
  return dataModel.getDataByTag(tag) || dataModel.getDatas().toArray().filter(function (item) {
75
- return item.a('tag') === tag;
97
+ return item.a("tag") === tag;
76
98
  })[0];
77
99
  }
78
100
  export function getGroupData(element) {
@@ -83,14 +105,14 @@ export function getGroupData(element) {
83
105
  var parent = element.getParent();
84
106
  var groupInfo = parent ? {
85
107
  groupId: parent.getTag(),
86
- groupTag: parent.a('tag') // 父容器
108
+ groupTag: parent.a("tag") // 父容器
87
109
 
88
110
  } : {};
89
111
  return _extends({
90
112
  name: element.getStyleMap().label
91
113
  }, element.getAttrObject(), {
92
114
  id: element.getTag(),
93
- tag: element.a('tag'),
115
+ tag: element.a("tag"),
94
116
  image: element.getImage()
95
117
  }, groupInfo);
96
118
  }
@@ -104,7 +126,7 @@ export function getNodeData(element) {
104
126
  var parent = element.getParent();
105
127
  var groupInfo = parent ? {
106
128
  groupId: parent.getTag(),
107
- groupTag: parent.a('tag') // 父容器
129
+ groupTag: parent.a("tag") // 父容器
108
130
 
109
131
  } : {};
110
132
  return _extends({}, element.getAttrObject(), {
@@ -116,12 +138,12 @@ export function getEdges(dataModel) {
116
138
  return getElements(dataModel).filter(isValidEdge);
117
139
  }
118
140
  export function isEdgeGroupExpanded(edge) {
119
- return isEdge(edge) && edge.getEdgeGroup() && !!edge.s('edge.expanded');
141
+ return isEdge(edge) && edge.getEdgeGroup() && !!edge.s("edge.expanded");
120
142
  }
121
143
  /**
122
144
  * 是否连线组代理
123
- * @param {*} edge
124
- * @returns
145
+ * @param {*} edge
146
+ * @returns
125
147
  */
126
148
 
127
149
  export function isEdgeGroupAgent(edge) {
@@ -129,9 +151,9 @@ export function isEdgeGroupAgent(edge) {
129
151
  }
130
152
  /**
131
153
  * 获得两个节点间的连线列表
132
- * @param {*} node1
133
- * @param {*} node2
134
- * @returns
154
+ * @param {*} node1
155
+ * @param {*} node2
156
+ * @returns
135
157
  */
136
158
 
137
159
  export function getEdgesBetweenNodes(node1, node2) {
@@ -153,7 +175,7 @@ export function getEdgesBetweenNodes(node1, node2) {
153
175
  }
154
176
  /**
155
177
  * 获得节点间的连线组,连线<=1时返回null
156
- * @returns
178
+ * @returns
157
179
  */
158
180
 
159
181
  export function getEdgeGroupByNodes(node1, node2) {
@@ -172,7 +194,7 @@ export function getEdgeGroupByNodes(node1, node2) {
172
194
  }
173
195
  /**
174
196
  * 获得节点间的连线组,连线<=1时返回null
175
- * @returns
197
+ * @returns
176
198
  */
177
199
 
178
200
  export function getEdgeGroupByNodeTags(dataModel, nodeTag1, nodeTag2) {
@@ -180,7 +202,7 @@ export function getEdgeGroupByNodeTags(dataModel, nodeTag1, nodeTag2) {
180
202
  var node2 = dataModel.getDataByTag(nodeTag2);
181
203
 
182
204
  if (!node1 || !node2) {
183
- console.warn('getEdgeGroupByNodes 未找到节点', {
205
+ console.warn("getEdgeGroupByNodes 未找到节点", {
184
206
  node1: node1,
185
207
  node2: node2,
186
208
  nodeTag1: nodeTag1,
@@ -261,7 +283,7 @@ export function getGroupChildren(group) {
261
283
 
262
284
 
263
285
  return group.getChildren().getArray().filter(function (node) {
264
- return node._layer !== 'container_blank';
286
+ return node._layer !== "container_blank";
265
287
  });
266
288
  }
267
289
  /**
@@ -291,7 +313,7 @@ export function getGroupChildrenData(group) {
291
313
  export function setElementRuntimeStyle(element, name, value) {
292
314
  var _extends2;
293
315
 
294
- var prevRuntimeStyle = element.a('runtimeStyles') || {};
316
+ var prevRuntimeStyle = element.a("runtimeStyles") || {};
295
317
 
296
318
  var runtimeStyle = _extends({}, prevRuntimeStyle, (_extends2 = {}, _extends2[name] = value, _extends2)); // if (prevRuntimeStyle[name] === undefined && value === undefined) {
297
319
  // return
@@ -302,7 +324,7 @@ export function setElementRuntimeStyle(element, name, value) {
302
324
  runtimeStyle[name] = undefined; // delete runtimeStyle[name]
303
325
  }
304
326
 
305
- element.a('runtimeStyles', runtimeStyle);
327
+ element.a("runtimeStyles", runtimeStyle);
306
328
  }
307
329
  /**
308
330
  * 判断拓扑图是否存在元素
@@ -315,7 +337,7 @@ export function isExistedElement(htTopo, dataModel, data) {
315
337
 
316
338
 
317
339
  var element = getElements(dataModel).find(function (item) {
318
- return data.tag && item.a('tag') === data.tag;
340
+ return data.tag && item.a("tag") === data.tag;
319
341
  });
320
342
 
321
343
  if (element) {
@@ -5,7 +5,12 @@ exports["default"] = updateElementProperty;
5
5
 
6
6
  function updateElementProperty(topo, name, value) {
7
7
  // const element = topo.getDataModel().getDataById(selection[0].id);
8
- var element = topo.getSelectionModel().getFirstData(); // console.info("updateElementProperty",topo.getSelectionModel().getSelection(), { selection, element, name, value });
8
+ var element = topo.getSelectionModel().getFirstData();
9
+ console.info("updateElementProperty", topo.getSelectionModel().getSelection(), {
10
+ element: element,
11
+ name: name,
12
+ value: value
13
+ });
9
14
 
10
15
  if (name.startsWith('attrObject.')) {
11
16
  element.setAttr(name.replace('attrObject.', ''), value);
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ exports.__esModule = true;
6
+ exports["default"] = BindIpInput;
7
+
8
+ var _button = _interopRequireDefault(require("@alifd/next/lib/button"));
9
+
10
+ var _input = _interopRequireDefault(require("@alifd/next/lib/input"));
11
+
12
+ var _react = _interopRequireWildcard(require("react"));
13
+
14
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
+
16
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
+
18
+ /**
19
+ * @return {React.ReactNode | null}
20
+ */
21
+ function BindIpInput(props) {
22
+ var _node$attrObjectIpv;
23
+
24
+ var nodeElement = props.nodeElement,
25
+ topo = props.topo,
26
+ topoEditApi = props.topoEditApi,
27
+ node = props.node,
28
+ onChange = props.onChange,
29
+ value = props.value; // const currentResId = node.tag;
30
+
31
+ console.log("nodeElement, topo, topoEditApi, node", nodeElement, topo, topoEditApi, node, value);
32
+
33
+ var _useState = (0, _react.useState)(''),
34
+ error = _useState[0],
35
+ setError = _useState[1];
36
+
37
+ var _useState2 = (0, _react.useState)((_node$attrObjectIpv = node["attrObject.ipv4"]) !== null && _node$attrObjectIpv !== void 0 ? _node$attrObjectIpv : ""),
38
+ txtValue = _useState2[0],
39
+ setTxtValue = _useState2[1];
40
+
41
+ var saveIp = function saveIp(v) {
42
+ console.log("saveIp", txtValue);
43
+ var rex = /^((25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))$/;
44
+ var reg = txtValue.match(rex);
45
+
46
+ if (reg === null) {
47
+ setError('error');
48
+ } else {
49
+ setError('');
50
+ onChange(txtValue);
51
+ topoEditApi.relateNodeIp(txtValue, nodeElement);
52
+ }
53
+ };
54
+
55
+ return /*#__PURE__*/_react["default"].createElement("div", {
56
+ style: {
57
+ display: "flex"
58
+ }
59
+ }, /*#__PURE__*/_react["default"].createElement(_input["default"], {
60
+ placeholder: "\u8BF7\u8F93\u5165Ip\u5730\u5740",
61
+ name: "attrObject.ipv4",
62
+ state: error,
63
+ value: txtValue,
64
+ maxLength: 128,
65
+ onChange: setTxtValue
66
+ }), /*#__PURE__*/_react["default"].createElement(_button["default"], {
67
+ type: "primary",
68
+ text: true,
69
+ onClick: saveIp,
70
+ style: {
71
+ marginLeft: 10
72
+ }
73
+ }, "\u4FDD\u5B58"));
74
+ }
@@ -27,6 +27,8 @@ var _NodeRelateResourceButton = _interopRequireDefault(require("./NodeRelateReso
27
27
 
28
28
  var _PlatformDisplay = _interopRequireDefault(require("./PlatformDisplay"));
29
29
 
30
+ var _BindIpInput = _interopRequireDefault(require("./BindIpInput"));
31
+
30
32
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
31
33
 
32
34
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -37,13 +39,14 @@ var CollapsePanel = _collapse["default"].Panel;
37
39
  function parseValues(values) {
38
40
  return (0, _extends2["default"])({}, values, {
39
41
  "attrObject.customName": values["attrObject.customName"] || values["attrObject.name"],
40
- "attrObject.bindTopo": values["attrObject.bindTopo"] || "" // 解决切换节点时关联拓扑选项未重置
41
-
42
+ "attrObject.bindTopo": values["attrObject.bindTopo"] || "",
43
+ // 解决切换节点时关联拓扑选项未重置
44
+ "attrObject.ipv4": values["attrObject.ipv4"] || ""
42
45
  });
43
46
  }
44
47
 
45
48
  function getBindType(values) {
46
- if (values.tag) {
49
+ if (values.tag && !values.tag.startsWith('Ip_')) {
47
50
  return "resource";
48
51
  }
49
52
 
@@ -62,6 +65,7 @@ function Data(props) {
62
65
  _onChange = props.onChange,
63
66
  editorProps = props.editorProps;
64
67
  var bindType = getBindType(values);
68
+ console.log("node, values", node, values);
65
69
 
66
70
  var field = _field["default"].useField({
67
71
  autoUnmount: false,
@@ -129,7 +133,7 @@ function Data(props) {
129
133
  }, /*#__PURE__*/_react["default"].createElement(_form["default"], {
130
134
  field: field,
131
135
  labelAlign: "top"
132
- }, !values.tag && /*#__PURE__*/_react["default"].createElement(_form["default"].Item, {
136
+ }, (!values.tag || bindType === "ip") && /*#__PURE__*/_react["default"].createElement(_form["default"].Item, {
133
137
  label: "\u5173\u8054\u7C7B\u578B"
134
138
  }, /*#__PURE__*/_react["default"].createElement(_select["default"], {
135
139
  name: "bindType",
@@ -143,7 +147,9 @@ function Data(props) {
143
147
  value: "none"
144
148
  }, "\u672A\u5173\u8054"), /*#__PURE__*/_react["default"].createElement(Option, {
145
149
  value: "resource"
146
- }, "\u5173\u8054\u8D44\u6E90"), RelateTopoTree && /*#__PURE__*/_react["default"].createElement(Option, {
150
+ }, "\u5173\u8054\u8D44\u6E90"), /*#__PURE__*/_react["default"].createElement(Option, {
151
+ value: "ip"
152
+ }, "\u5173\u8054IP"), RelateTopoTree && /*#__PURE__*/_react["default"].createElement(Option, {
147
153
  value: "topo"
148
154
  }, "\u5173\u8054\u62D3\u6251"))), bindType === "resource" && /*#__PURE__*/_react["default"].createElement(_form["default"].Item, {
149
155
  label: "\u5173\u8054\u8D44\u6E90"
@@ -157,7 +163,7 @@ function Data(props) {
157
163
  flex: 1,
158
164
  paddingRight: 16,
159
165
  color: "#4D6277",
160
- lineHeight: '20px'
166
+ lineHeight: "20px"
161
167
  },
162
168
  title: values.tag ? values.name : null
163
169
  }, values.tag ? values.name : "—"), /*#__PURE__*/_react["default"].createElement(_NodeRelateResourceButton["default"], {
@@ -166,13 +172,27 @@ function Data(props) {
166
172
  topo: topo,
167
173
  topoEditApi: topoEditApi,
168
174
  nodeBindResourceDrawerComponent: editorProps.nodeBindResourceDrawerComponent
169
- }))), bindType === "topo" && RelateTopoTree && /*#__PURE__*/_react["default"].createElement(_form["default"].Item, {
175
+ }))), bindType === "ip" && /*#__PURE__*/_react["default"].createElement(_form["default"].Item, {
176
+ label: "\u5173\u8054IP" // style={{ display: "flex" }}
177
+ ,
178
+ pattern: /^((25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))$/,
179
+ patternTrigger: "onBlur",
180
+ patternMessage: "IP\u5730\u5740\u683C\u5F0F\u4E0D\u6B63\u786E"
181
+ }, /*#__PURE__*/_react["default"].createElement(_BindIpInput["default"], {
182
+ nodeElement: node,
183
+ node: values,
184
+ topo: topo,
185
+ topoEditApi: topoEditApi,
186
+ placeholder: "\u8BF7\u8F93\u5165",
187
+ name: "attrObject.ipv4",
188
+ maxLength: 128
189
+ })), bindType === "topo" && RelateTopoTree && /*#__PURE__*/_react["default"].createElement(_form["default"].Item, {
170
190
  label: "\u5173\u8054\u62D3\u6251"
171
191
  }, /*#__PURE__*/_react["default"].createElement(RelateTopoTree, {
172
192
  name: "attrObject.bindTopo",
173
193
  topo: topo,
174
194
  onChange: handleBindTopoChange
175
- })), (editorProps === null || editorProps === void 0 ? void 0 : editorProps.topoType) === 'cmpTopo' && node.getTag() && /*#__PURE__*/_react["default"].createElement(_form["default"].Item, {
195
+ })), (editorProps === null || editorProps === void 0 ? void 0 : editorProps.topoType) === "cmpTopo" && node.getTag() && /*#__PURE__*/_react["default"].createElement(_form["default"].Item, {
176
196
  label: "\u6240\u5C5E\u5E73\u53F0"
177
197
  }, /*#__PURE__*/_react["default"].createElement(_PlatformDisplay["default"], props)))));
178
198
  }
@@ -37,6 +37,8 @@ var _htElementDataUtil = require("../../utils/htElementDataUtil");
37
37
 
38
38
  var _clusterUtil = require("../../utils/clusterUtil");
39
39
 
40
+ var _linkUtils = require("../models/utils/linkUtils");
41
+
40
42
  var useTopoEdit = function useTopoEdit(params) {
41
43
  var topo = params.topo,
42
44
  topoId = params.topoId,
@@ -342,7 +344,7 @@ var useTopoEdit = function useTopoEdit(params) {
342
344
 
343
345
  edges.map(function (edge) {
344
346
  if (edge.a("dtype") === "link" && exportLinkIdList.indexOf(edge.getTag()) >= 0) {
345
- // exLink.push(edge);
347
+ // exLink.push(edge);
346
348
  topo.getGraphView().dm().remove(edge);
347
349
  exportLinkIdList.splice(config.exportLinkIdList.indexOf(edge.getTag()), 1);
348
350
  }
@@ -406,8 +408,8 @@ var useTopoEdit = function useTopoEdit(params) {
406
408
  };
407
409
  /**
408
410
  * 获得未存在的连线元素
409
- * @param {*} elements
410
- * @returns
411
+ * @param {*} elements
412
+ * @returns
411
413
  */
412
414
 
413
415
 
@@ -420,8 +422,8 @@ var useTopoEdit = function useTopoEdit(params) {
420
422
  }
421
423
  /**
422
424
  * 获得未存在的元素
423
- * @param {Array} elements
424
- * @returns
425
+ * @param {Array} elements
426
+ * @returns
425
427
  */
426
428
 
427
429
 
@@ -600,7 +602,7 @@ var useTopoEdit = function useTopoEdit(params) {
600
602
  // 2022-11-10 修复 添加资源后分层重新布局问题,仅布局新增资源。替换api topo.updateElements(data)
601
603
  newElements = findUNExistedElements(elements);
602
604
 
603
- _rlog["default"].debug('添加分层资源', {
605
+ _rlog["default"].debug("添加分层资源", {
604
606
  layer: group,
605
607
  newElements: newElements
606
608
  });
@@ -674,8 +676,8 @@ var useTopoEdit = function useTopoEdit(params) {
674
676
  }
675
677
  /**
676
678
  * 未选中元素添加资源
677
- *
678
- * @param {*} data
679
+ *
680
+ * @param {*} data
679
681
  */
680
682
 
681
683
 
@@ -835,7 +837,7 @@ var useTopoEdit = function useTopoEdit(params) {
835
837
  newLinkElements = findUNExistedLinkElements(elements);
836
838
  createElementsData = null;
837
839
 
838
- if (newData.type === 'group') {
840
+ if (newData.type === "group") {
839
841
  groupChildren = (0, _topoData.findGroupChildren)(elements, newData);
840
842
  newGroupChildren = [];
841
843
  existedGroupChildren = [];
@@ -852,10 +854,10 @@ var useTopoEdit = function useTopoEdit(params) {
852
854
  groups: [newData],
853
855
  nodes: newGroupChildren,
854
856
  links: newLinkElements.filter(function (item) {
855
- return item.type === 'link';
857
+ return item.type === "link";
856
858
  }),
857
859
  linkGroups: newLinkElements.filter(function (item) {
858
- return item.type === 'linkGroup';
860
+ return item.type === "linkGroup";
859
861
  })
860
862
  };
861
863
  htTopo.createElements(createElementsData); // 切换前图上如果存在集群内的节点,切换节点为集群后,移到集群内
@@ -870,16 +872,16 @@ var useTopoEdit = function useTopoEdit(params) {
870
872
  groups: [],
871
873
  nodes: [newData],
872
874
  links: newLinkElements.filter(function (item) {
873
- return item.type === 'link';
875
+ return item.type === "link";
874
876
  }),
875
877
  linkGroups: newLinkElements.filter(function (item) {
876
- return item.type === 'linkGroup';
878
+ return item.type === "linkGroup";
877
879
  })
878
880
  };
879
881
  htTopo.createElements(createElementsData);
880
882
  }
881
883
 
882
- _rlog["default"].debug('批量创建元素', createElementsData); // 恢复图标、大小、位置
884
+ _rlog["default"].debug("批量创建元素", createElementsData); // 恢复图标、大小、位置
883
885
 
884
886
 
885
887
  newElement = dm.getDataByTag(newData.id);
@@ -999,6 +1001,117 @@ var useTopoEdit = function useTopoEdit(params) {
999
1001
  return _ref8.apply(this, arguments);
1000
1002
  };
1001
1003
  }();
1004
+ /**
1005
+ * 关联IP的图片节点
1006
+ */
1007
+
1008
+
1009
+ function relateNodeIp(_x15, _x16) {
1010
+ return _relateNodeIp.apply(this, arguments);
1011
+ }
1012
+
1013
+ function _relateNodeIp() {
1014
+ _relateNodeIp = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee16(txtValue, nodeElement) {
1015
+ var dm, htTopo, elements, _yield$editDispatcher5, elementDatas, isUnique, ipTxt, ids, ip, re, config, linksData, createElementsData;
1016
+
1017
+ return _regenerator["default"].wrap(function _callee16$(_context16) {
1018
+ while (1) {
1019
+ switch (_context16.prev = _context16.next) {
1020
+ case 0:
1021
+ // console.log("bindIPtoNode", data);
1022
+ // 根据配置查询拓扑数据
1023
+ dm = topo.getDataModel();
1024
+ htTopo = topo.getHtTopo();
1025
+ elements = (0, _htElementUtils.getNodes)(dm);
1026
+ _context16.next = 5;
1027
+ return editDispatchers.fetchDataByConfig();
1028
+
1029
+ case 5:
1030
+ _yield$editDispatcher5 = _context16.sent;
1031
+ elementDatas = _yield$editDispatcher5.elementDatas;
1032
+ console.log("bindIPtoNode", txtValue, nodeElement, elements);
1033
+ console.log("elementDatas", elementDatas);
1034
+ isUnique = true;
1035
+ ipTxt = txtValue;
1036
+ ids = []; // 执行唯一性验证
1037
+
1038
+ elements.map(function (element) {
1039
+ // if (node.getId() !== element.getId()) {
1040
+ // }
1041
+ if (element.getTag()) {
1042
+ ids.push(element.getTag());
1043
+ }
1044
+ });
1045
+ ip = {
1046
+ id: "ip_1.1.1.1",
1047
+ name: "1.1.1.1",
1048
+ customName: null,
1049
+ // 'groupId': null,
1050
+ // 'groupTag': null,
1051
+ ipAddress: "1.1.1.1",
1052
+ // 'attributes': [],
1053
+ // 'metrics': [],
1054
+ type: "node" // 'dtype': 'device'
1055
+
1056
+ }; // 获取关联链路
1057
+
1058
+ if (!isUnique) {
1059
+ _context16.next = 27;
1060
+ break;
1061
+ }
1062
+
1063
+ nodeElement.a(ip);
1064
+ nodeElement.setName(txtValue);
1065
+ nodeElement.a("name", txtValue);
1066
+ nodeElement.a("customName", null);
1067
+ nodeElement.setTag("ip_" + txtValue);
1068
+ _context16.next = 22;
1069
+ return editDispatchers.queryAllLinkByIp({
1070
+ ids: ids,
1071
+ ip: txtValue
1072
+ });
1073
+
1074
+ case 22:
1075
+ re = _context16.sent;
1076
+ console.log("queryAllLinkByIp", re);
1077
+ config = resourceConfig.getConfig();
1078
+ console.log("resourceConfig.getConfig", config);
1079
+
1080
+ if (re && re.length > 0) {
1081
+ linksData = [];
1082
+ re.map(function (link) {
1083
+ var sourceId = link.attributes["network_link.source_device_id"];
1084
+ var source = dm.getDataByTag(sourceId);
1085
+ var target = nodeElement; // console.log("source, nodeElement, link", source, target, link);
1086
+
1087
+ if (source && target) {
1088
+ var linkData = (0, _linkUtils.mergeExportLinkData)({
1089
+ source: source,
1090
+ target: target,
1091
+ link: link
1092
+ });
1093
+ console.log("linkData", linkData);
1094
+ linksData.push(linkData); // htTopo.createEdge(source, target, link);
1095
+ }
1096
+ });
1097
+ createElementsData = {
1098
+ groups: [],
1099
+ nodes: [],
1100
+ links: [].concat(linksData),
1101
+ linkGroups: []
1102
+ };
1103
+ htTopo.createElements(createElementsData); // htTopo.addElements({ lines: [...re] });
1104
+ }
1105
+
1106
+ case 27:
1107
+ case "end":
1108
+ return _context16.stop();
1109
+ }
1110
+ }
1111
+ }, _callee16);
1112
+ }));
1113
+ return _relateNodeIp.apply(this, arguments);
1114
+ }
1002
1115
 
1003
1116
  var onEvent = function onEvent(e) {
1004
1117
  var map = {};
@@ -1016,7 +1129,7 @@ var useTopoEdit = function useTopoEdit(params) {
1016
1129
  */
1017
1130
 
1018
1131
  var setViewMouseMode = function setViewMouseMode(mode) {
1019
- _rlog["default"].debug('设置视图鼠标模式', mode);
1132
+ _rlog["default"].debug("设置视图鼠标模式", mode);
1020
1133
 
1021
1134
  topo.getHtTopo().setViewMouseMode(mode);
1022
1135
  topoEditDispatchers.update({
@@ -1095,6 +1208,11 @@ var useTopoEdit = function useTopoEdit(params) {
1095
1208
  */
1096
1209
  onDeleteElement: onDeleteElement,
1097
1210
 
1211
+ /**
1212
+ * 绑定图片ip
1213
+ */
1214
+ relateNodeIp: relateNodeIp,
1215
+
1098
1216
  /**
1099
1217
  * 拓扑图保存回调
1100
1218
  */
@@ -56,7 +56,7 @@ var _SelectionModel = _interopRequireDefault(require("./SelectionModel"));
56
56
  var _CiCache = _interopRequireDefault(require("./cache/CiCache"));
57
57
 
58
58
  // eslint-disable-next-line no-undef
59
- var version = typeof "9.0.0-a.11" === 'string' ? "9.0.0-a.11" : null;
59
+ var version = typeof "9.0.0-a.12" === 'string' ? "9.0.0-a.12" : null;
60
60
  console.info("\u62D3\u6251\u7248\u672C: " + version);
61
61
  /**
62
62
  * 拓扑显示和编辑
@@ -8,6 +8,7 @@ exports.compatibleWith = void 0;
8
8
  exports.getLinksDetail = getLinksDetail;
9
9
  exports.isCrucialLink = isCrucialLink;
10
10
  exports.isExitLink = isExitLink;
11
+ exports.mergeExportLinkData = void 0;
11
12
  exports.mergeLinksData = mergeLinksData;
12
13
  exports.showLinkByConfig = exports.plurals = void 0;
13
14
 
@@ -218,4 +219,23 @@ var showLinkByConfig = function showLinkByConfig(props) {
218
219
  }
219
220
  };
220
221
 
221
- exports.showLinkByConfig = showLinkByConfig;
222
+ exports.showLinkByConfig = showLinkByConfig;
223
+
224
+ var mergeExportLinkData = function mergeExportLinkData(props) {
225
+ var source = props.source,
226
+ target = props.target,
227
+ link = props.link;
228
+ var attrObj = link.attributes;
229
+ var linkData = (0, _extends2["default"])({}, link, {
230
+ name: attrObj.name,
231
+ source: attrObj["network_link.source_device_id"],
232
+ target: attrObj.destination_type === 'ip' ? target.getTag() : attrObj["network_link.destination_device_id"],
233
+ operation: attrObj.operation,
234
+ interfaceSource: attrObj["source_id"],
235
+ interfaceTarget: attrObj["destination_id"],
236
+ ciType: link.typeCode
237
+ });
238
+ return linkData;
239
+ };
240
+
241
+ exports.mergeExportLinkData = mergeExportLinkData;