@riil-frontend/component-topology 2.5.4 → 2.6.0-alpha.0

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/1.js +2 -2
  2. package/build/2.js +1 -1
  3. package/build/index.css +1 -1
  4. package/build/index.html +1 -1
  5. package/build/index.js +31 -31
  6. package/es/components/TemplateButton/index.js +4 -3
  7. package/es/components/TemplateButton/index.module.scss +8 -3
  8. package/es/components/TemplateGroup/index.js +8 -4
  9. package/es/components/TemplateGroup/index.module.scss +0 -4
  10. package/es/components/TemplateSelect/index.d.ts +2 -0
  11. package/es/components/TemplateSelect/index.js +32 -0
  12. package/es/components/TemplateSelect/index.module.scss +3 -0
  13. package/es/core/components/titlebar/TitleBar.module.scss +4 -1
  14. package/es/core/editor/components/settings/common/NodeSizeInput/NodeSizeInput.js +1 -1
  15. package/es/core/editor/components/settings/common/text/TextStyle.js +6 -0
  16. package/es/core/editor/components/settings/text/TextPropertyView.js +11 -1
  17. package/es/core/viewer/components/titlebar/TopoViewerTitleBar.js +2 -1
  18. package/es/utils/tree.js +0 -1
  19. package/lib/components/TemplateButton/index.js +4 -3
  20. package/lib/components/TemplateButton/index.module.scss +8 -3
  21. package/lib/components/TemplateGroup/index.js +9 -4
  22. package/lib/components/TemplateGroup/index.module.scss +0 -4
  23. package/lib/components/TemplateSelect/index.d.ts +2 -0
  24. package/lib/components/TemplateSelect/index.js +45 -0
  25. package/lib/components/TemplateSelect/index.module.scss +3 -0
  26. package/lib/core/components/titlebar/TitleBar.module.scss +4 -1
  27. package/lib/core/editor/components/settings/common/NodeSizeInput/NodeSizeInput.js +1 -1
  28. package/lib/core/editor/components/settings/common/text/TextStyle.js +6 -0
  29. package/lib/core/editor/components/settings/text/TextPropertyView.js +12 -1
  30. package/lib/core/viewer/components/titlebar/TopoViewerTitleBar.js +3 -1
  31. package/lib/utils/tree.js +0 -1
  32. package/package.json +5 -5
  33. package/CHANGELOG.md +0 -26
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/objectWithoutPropertiesLoose";
3
- var _excluded = ["children", "icon", "id", "selected", "onSelect", "size"];
3
+ var _excluded = ["className", "children", "icon", "id", "selected", "onSelect", "size"];
4
4
  import React from 'react';
5
5
  import classnames from 'classnames';
6
6
  import Icon from "./Icon";
@@ -9,7 +9,8 @@ import styles from "./index.module.scss";
9
9
  var TemplateButton = function TemplateButton(props) {
10
10
  var _classnames;
11
11
 
12
- var children = props.children,
12
+ var className = props.className,
13
+ children = props.children,
13
14
  icon = props.icon,
14
15
  id = props.id,
15
16
  selected = props.selected,
@@ -23,7 +24,7 @@ var TemplateButton = function TemplateButton(props) {
23
24
  };
24
25
 
25
26
  return /*#__PURE__*/React.createElement("div", {
26
- className: classnames(styles.card, (_classnames = {}, _classnames[styles.selected] = selected, _classnames[styles.sizeSmall] = size === 'small', _classnames)),
27
+ className: classnames(styles.card, className, (_classnames = {}, _classnames[styles.selected] = selected, _classnames[styles.sizeSmall] = size === 'small', _classnames[styles.sizeLarge] = size === 'large', _classnames)),
27
28
  onClick: handleClick
28
29
  }, /*#__PURE__*/React.createElement(Icon, _extends({
29
30
  className: styles.icon,
@@ -6,18 +6,23 @@
6
6
  justify-content: center;
7
7
  align-items: center;
8
8
  border: 1px solid #c4c6cf;
9
- width: 100px;
10
- height: 100px;
11
- margin: 10px;
9
+ width: 120px;
10
+ height: 136px;
12
11
  background-color: #fff;
13
12
  text-align: center;
14
13
  cursor: pointer;
15
14
  vertical-align: middle;
15
+ margin-right: 12px;
16
16
 
17
17
  &:hover, &:focus, &.selected {
18
18
  border-color: $color-brand1-5;
19
19
  }
20
20
 
21
+ &.sizeNormal {
22
+ width: 120px;
23
+ height: 136px;
24
+ }
25
+
21
26
  &.sizeSmall {
22
27
  width: 50px;
23
28
  height: 50px;
@@ -1,3 +1,4 @@
1
+ import _Box from "@alifd/next/lib/box";
1
2
  import _extends from "@babel/runtime/helpers/extends";
2
3
  import React from 'react';
3
4
  import TemplateButton from "../TemplateButton";
@@ -7,17 +8,20 @@ var TemplateGroup = function TemplateGroup(props) {
7
8
  var name = props.name,
8
9
  _props$data = props.data,
9
10
  data = _props$data === void 0 ? [] : _props$data,
10
- size = props.size;
11
+ size = props.size,
12
+ _props$itemProps = props.itemProps,
13
+ itemProps = _props$itemProps === void 0 ? {} : _props$itemProps;
11
14
  return /*#__PURE__*/React.createElement(React.Fragment, null, name && /*#__PURE__*/React.createElement("div", {
12
15
  className: styles.name
13
- }, name), /*#__PURE__*/React.createElement("div", {
14
- className: styles.buttons
16
+ }, name), /*#__PURE__*/React.createElement(_Box, {
17
+ direction: "row",
18
+ spacing: 32
15
19
  }, data.map(function (item) {
16
20
  return /*#__PURE__*/React.createElement(TemplateButton, _extends({
17
21
  key: item.id
18
22
  }, item, {
19
23
  size: size
20
- }), item.name);
24
+ }, itemProps), item.name);
21
25
  })));
22
26
  };
23
27
 
@@ -1,7 +1,3 @@
1
1
  .name {
2
2
  margin: 20px 0 0 10px;
3
3
  }
4
-
5
- .buttons {
6
- margin: 10px 0;
7
- }
@@ -0,0 +1,2 @@
1
+ export default TemplateSelect;
2
+ declare function TemplateSelect(props: any): JSX.Element;
@@ -0,0 +1,32 @@
1
+ import _Tag from "@alifd/next/lib/tag";
2
+ import React from 'react';
3
+ import TemplateButton from "../TemplateButton";
4
+ import styles from "./index.module.scss";
5
+ import TemplateGroup from "../TemplateGroup";
6
+ var TagGroup = _Tag.Group,
7
+ SelectableTag = _Tag.Selectable;
8
+
9
+ var TemplateSelect = function TemplateSelect(props) {
10
+ return /*#__PURE__*/React.createElement(TemplateGroup, props); // const { data = [], size } = props;
11
+ // return (
12
+ // <TagGroup>
13
+ // {data.map((item) => (
14
+ // <SelectableTag
15
+ // key={item.name}
16
+ // checked={item.selected}
17
+ // onChange={() => {}}
18
+ // >
19
+ // <TemplateButton
20
+ // key={item.id}
21
+ // {...item}
22
+ // size={size}
23
+ // >
24
+ // {item.name}
25
+ // </TemplateButton>
26
+ // </SelectableTag>
27
+ // ))}
28
+ // </TagGroup>
29
+ // )
30
+ };
31
+
32
+ export default TemplateSelect;
@@ -0,0 +1,3 @@
1
+ .name {
2
+ margin: 20px 0 0 10px;
3
+ }
@@ -1,6 +1,5 @@
1
1
  .titlebar {
2
2
  display: flex;
3
- padding: 16px;
4
3
 
5
4
  .left {
6
5
  display: flex;
@@ -12,6 +11,10 @@
12
11
 
13
12
  }
14
13
 
14
+ &.titlebarViewMode {
15
+ padding: 16px 16px 16px 0;
16
+ }
17
+
15
18
  &.titlebarEditMode {
16
19
  padding: 10px 16px;
17
20
  }
@@ -101,7 +101,7 @@ function NodeSizeInput(props) {
101
101
  };
102
102
 
103
103
  function parseValue(val) {
104
- return val ? parseInt(val) : val;
104
+ return val ? Math.round(val) : val;
105
105
  }
106
106
 
107
107
  return /*#__PURE__*/React.createElement(_Form, {
@@ -80,6 +80,12 @@ export default function TextStyle(props) {
80
80
  fontFamily: '宋体'
81
81
  }
82
82
  }, "\u5B8B\u4F53")), /*#__PURE__*/React.createElement(Option, {
83
+ value: "\u5FAE\u8F6F\u96C5\u9ED1"
84
+ }, /*#__PURE__*/React.createElement("div", {
85
+ style: {
86
+ fontFamily: '微软雅黑'
87
+ }
88
+ }, "\u5FAE\u8F6F\u96C5\u9ED1")), /*#__PURE__*/React.createElement(Option, {
83
89
  value: "\u9ED1\u4F53"
84
90
  }, /*#__PURE__*/React.createElement("div", {
85
91
  style: {
@@ -1,4 +1,5 @@
1
1
  import _Form from "@alifd/next/lib/form";
2
+ import _Input from "@alifd/next/lib/input";
2
3
  import _Field from "@alifd/next/lib/field";
3
4
  import _extends from "@babel/runtime/helpers/extends";
4
5
  import _Collapse from "@alifd/next/lib/collapse";
@@ -70,7 +71,16 @@ export default function TextPropertyView(props) {
70
71
  style: {
71
72
  padding: 0
72
73
  }
73
- }, /*#__PURE__*/React.createElement(_Form.Item, null, /*#__PURE__*/React.createElement(TextStyle, {
74
+ }, /*#__PURE__*/React.createElement(_Form.Item, {
75
+ label: "\u6587\u672C"
76
+ }, /*#__PURE__*/React.createElement(_Input.TextArea, {
77
+ name: "styleMap.text",
78
+ autoHeight: {
79
+ minRows: 4,
80
+ maxRows: 4
81
+ },
82
+ placeholder: "\u8F93\u5165\u6587\u672C"
83
+ })), /*#__PURE__*/React.createElement(_Form.Item, null, /*#__PURE__*/React.createElement(TextStyle, {
74
84
  name: "styleMap.textObj"
75
85
  })))))));
76
86
  }
@@ -1,4 +1,5 @@
1
1
  import React, { useState, useEffect, useRef, useCallback } from 'react';
2
+ import classnames from 'classnames';
2
3
  import ViewerTools from "./ViewerTools";
3
4
  import styles from "../../../components/titlebar/TitleBar.module.scss";
4
5
  import SearchWidget from "./widgets/SearchWidget";
@@ -8,7 +9,7 @@ export default function TopoViewerTitleBar(props) {
8
9
  onEnterEdit = props.onEnterEdit,
9
10
  children = props.children;
10
11
  return /*#__PURE__*/React.createElement("div", {
11
- className: styles.titlebar
12
+ className: classnames(styles.titlebar, styles.titlebarViewMode)
12
13
  }, /*#__PURE__*/React.createElement("div", {
13
14
  className: styles.left
14
15
  }, children || /*#__PURE__*/React.createElement(SearchWidget, {
package/es/utils/tree.js CHANGED
@@ -40,7 +40,6 @@ export function formatTree(json, funcPermissions) {
40
40
  type: type,
41
41
  name: name,
42
42
  showDefault: showDefault,
43
- icon: iconImg[type],
44
43
  permission: node.operation,
45
44
  children: node !== null && node !== void 0 && node.children ? loop(node.children) : []
46
45
  };
@@ -17,12 +17,13 @@ var _Icon = _interopRequireDefault(require("./Icon"));
17
17
 
18
18
  var _indexModule = _interopRequireDefault(require("./index.module.scss"));
19
19
 
20
- var _excluded = ["children", "icon", "id", "selected", "onSelect", "size"];
20
+ var _excluded = ["className", "children", "icon", "id", "selected", "onSelect", "size"];
21
21
 
22
22
  var TemplateButton = function TemplateButton(props) {
23
23
  var _classnames;
24
24
 
25
- var children = props.children,
25
+ var className = props.className,
26
+ children = props.children,
26
27
  icon = props.icon,
27
28
  id = props.id,
28
29
  selected = props.selected,
@@ -36,7 +37,7 @@ var TemplateButton = function TemplateButton(props) {
36
37
  };
37
38
 
38
39
  return /*#__PURE__*/_react["default"].createElement("div", {
39
- className: (0, _classnames2["default"])(_indexModule["default"].card, (_classnames = {}, _classnames[_indexModule["default"].selected] = selected, _classnames[_indexModule["default"].sizeSmall] = size === 'small', _classnames)),
40
+ className: (0, _classnames2["default"])(_indexModule["default"].card, className, (_classnames = {}, _classnames[_indexModule["default"].selected] = selected, _classnames[_indexModule["default"].sizeSmall] = size === 'small', _classnames[_indexModule["default"].sizeLarge] = size === 'large', _classnames)),
40
41
  onClick: handleClick
41
42
  }, /*#__PURE__*/_react["default"].createElement(_Icon["default"], (0, _extends2["default"])({
42
43
  className: _indexModule["default"].icon,
@@ -6,18 +6,23 @@
6
6
  justify-content: center;
7
7
  align-items: center;
8
8
  border: 1px solid #c4c6cf;
9
- width: 100px;
10
- height: 100px;
11
- margin: 10px;
9
+ width: 120px;
10
+ height: 136px;
12
11
  background-color: #fff;
13
12
  text-align: center;
14
13
  cursor: pointer;
15
14
  vertical-align: middle;
15
+ margin-right: 12px;
16
16
 
17
17
  &:hover, &:focus, &.selected {
18
18
  border-color: $color-brand1-5;
19
19
  }
20
20
 
21
+ &.sizeNormal {
22
+ width: 120px;
23
+ height: 136px;
24
+ }
25
+
21
26
  &.sizeSmall {
22
27
  width: 50px;
23
28
  height: 50px;
@@ -5,6 +5,8 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  exports.__esModule = true;
6
6
  exports["default"] = void 0;
7
7
 
8
+ var _box = _interopRequireDefault(require("@alifd/next/lib/box"));
9
+
8
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
11
 
10
12
  var _react = _interopRequireDefault(require("react"));
@@ -17,17 +19,20 @@ var TemplateGroup = function TemplateGroup(props) {
17
19
  var name = props.name,
18
20
  _props$data = props.data,
19
21
  data = _props$data === void 0 ? [] : _props$data,
20
- size = props.size;
22
+ size = props.size,
23
+ _props$itemProps = props.itemProps,
24
+ itemProps = _props$itemProps === void 0 ? {} : _props$itemProps;
21
25
  return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, name && /*#__PURE__*/_react["default"].createElement("div", {
22
26
  className: _indexModule["default"].name
23
- }, name), /*#__PURE__*/_react["default"].createElement("div", {
24
- className: _indexModule["default"].buttons
27
+ }, name), /*#__PURE__*/_react["default"].createElement(_box["default"], {
28
+ direction: "row",
29
+ spacing: 32
25
30
  }, data.map(function (item) {
26
31
  return /*#__PURE__*/_react["default"].createElement(_TemplateButton["default"], (0, _extends2["default"])({
27
32
  key: item.id
28
33
  }, item, {
29
34
  size: size
30
- }), item.name);
35
+ }, itemProps), item.name);
31
36
  })));
32
37
  };
33
38
 
@@ -1,7 +1,3 @@
1
1
  .name {
2
2
  margin: 20px 0 0 10px;
3
3
  }
4
-
5
- .buttons {
6
- margin: 10px 0;
7
- }
@@ -0,0 +1,2 @@
1
+ export default TemplateSelect;
2
+ declare function TemplateSelect(props: any): JSX.Element;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ exports.__esModule = true;
6
+ exports["default"] = void 0;
7
+
8
+ var _tag = _interopRequireDefault(require("@alifd/next/lib/tag"));
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _TemplateButton = _interopRequireDefault(require("../TemplateButton"));
13
+
14
+ var _indexModule = _interopRequireDefault(require("./index.module.scss"));
15
+
16
+ var _TemplateGroup = _interopRequireDefault(require("../TemplateGroup"));
17
+
18
+ var TagGroup = _tag["default"].Group,
19
+ SelectableTag = _tag["default"].Selectable;
20
+
21
+ var TemplateSelect = function TemplateSelect(props) {
22
+ return /*#__PURE__*/_react["default"].createElement(_TemplateGroup["default"], props); // const { data = [], size } = props;
23
+ // return (
24
+ // <TagGroup>
25
+ // {data.map((item) => (
26
+ // <SelectableTag
27
+ // key={item.name}
28
+ // checked={item.selected}
29
+ // onChange={() => {}}
30
+ // >
31
+ // <TemplateButton
32
+ // key={item.id}
33
+ // {...item}
34
+ // size={size}
35
+ // >
36
+ // {item.name}
37
+ // </TemplateButton>
38
+ // </SelectableTag>
39
+ // ))}
40
+ // </TagGroup>
41
+ // )
42
+ };
43
+
44
+ var _default = TemplateSelect;
45
+ exports["default"] = _default;
@@ -0,0 +1,3 @@
1
+ .name {
2
+ margin: 20px 0 0 10px;
3
+ }
@@ -1,6 +1,5 @@
1
1
  .titlebar {
2
2
  display: flex;
3
- padding: 16px;
4
3
 
5
4
  .left {
6
5
  display: flex;
@@ -12,6 +11,10 @@
12
11
 
13
12
  }
14
13
 
14
+ &.titlebarViewMode {
15
+ padding: 16px 16px 16px 0;
16
+ }
17
+
15
18
  &.titlebarEditMode {
16
19
  padding: 10px 16px;
17
20
  }
@@ -123,7 +123,7 @@ function NodeSizeInput(props) {
123
123
  };
124
124
 
125
125
  function parseValue(val) {
126
- return val ? parseInt(val) : val;
126
+ return val ? Math.round(val) : val;
127
127
  }
128
128
 
129
129
  return /*#__PURE__*/_react["default"].createElement(_form["default"], {
@@ -96,6 +96,12 @@ function TextStyle(props) {
96
96
  fontFamily: '宋体'
97
97
  }
98
98
  }, "\u5B8B\u4F53")), /*#__PURE__*/_react["default"].createElement(Option, {
99
+ value: "\u5FAE\u8F6F\u96C5\u9ED1"
100
+ }, /*#__PURE__*/_react["default"].createElement("div", {
101
+ style: {
102
+ fontFamily: '微软雅黑'
103
+ }
104
+ }, "\u5FAE\u8F6F\u96C5\u9ED1")), /*#__PURE__*/_react["default"].createElement(Option, {
99
105
  value: "\u9ED1\u4F53"
100
106
  }, /*#__PURE__*/_react["default"].createElement("div", {
101
107
  style: {
@@ -9,6 +9,8 @@ exports["default"] = TextPropertyView;
9
9
 
10
10
  var _form = _interopRequireDefault(require("@alifd/next/lib/form"));
11
11
 
12
+ var _input = _interopRequireDefault(require("@alifd/next/lib/input"));
13
+
12
14
  var _field = _interopRequireDefault(require("@alifd/next/lib/field"));
13
15
 
14
16
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
@@ -86,7 +88,16 @@ function TextPropertyView(props) {
86
88
  style: {
87
89
  padding: 0
88
90
  }
89
- }, /*#__PURE__*/_react["default"].createElement(_form["default"].Item, null, /*#__PURE__*/_react["default"].createElement(_TextStyle["default"], {
91
+ }, /*#__PURE__*/_react["default"].createElement(_form["default"].Item, {
92
+ label: "\u6587\u672C"
93
+ }, /*#__PURE__*/_react["default"].createElement(_input["default"].TextArea, {
94
+ name: "styleMap.text",
95
+ autoHeight: {
96
+ minRows: 4,
97
+ maxRows: 4
98
+ },
99
+ placeholder: "\u8F93\u5165\u6587\u672C"
100
+ })), /*#__PURE__*/_react["default"].createElement(_form["default"].Item, null, /*#__PURE__*/_react["default"].createElement(_TextStyle["default"], {
90
101
  name: "styleMap.textObj"
91
102
  })))))));
92
103
  }
@@ -9,6 +9,8 @@ exports["default"] = TopoViewerTitleBar;
9
9
 
10
10
  var _react = _interopRequireWildcard(require("react"));
11
11
 
12
+ var _classnames = _interopRequireDefault(require("classnames"));
13
+
12
14
  var _ViewerTools = _interopRequireDefault(require("./ViewerTools"));
13
15
 
14
16
  var _TitleBarModule = _interopRequireDefault(require("../../../components/titlebar/TitleBar.module.scss"));
@@ -21,7 +23,7 @@ function TopoViewerTitleBar(props) {
21
23
  onEnterEdit = props.onEnterEdit,
22
24
  children = props.children;
23
25
  return /*#__PURE__*/_react["default"].createElement("div", {
24
- className: _TitleBarModule["default"].titlebar
26
+ className: (0, _classnames["default"])(_TitleBarModule["default"].titlebar, _TitleBarModule["default"].titlebarViewMode)
25
27
  }, /*#__PURE__*/_react["default"].createElement("div", {
26
28
  className: _TitleBarModule["default"].left
27
29
  }, children || /*#__PURE__*/_react["default"].createElement(_SearchWidget["default"], {
package/lib/utils/tree.js CHANGED
@@ -52,7 +52,6 @@ function formatTree(json, funcPermissions) {
52
52
  type: type,
53
53
  name: name,
54
54
  showDefault: showDefault,
55
- icon: iconImg[type],
56
55
  permission: node.operation,
57
56
  children: node !== null && node !== void 0 && node.children ? loop(node.children) : []
58
57
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@riil-frontend/component-topology",
3
- "version": "2.5.4",
3
+ "version": "2.6.0-alpha.0",
4
4
  "description": "拓扑",
5
5
  "scripts": {
6
6
  "start": "build-scripts start",
@@ -56,8 +56,8 @@
56
56
  "@riil-frontend/component-table-filter-tags": "latest",
57
57
  "@riil-frontend/component-table-layout": "^2.0.1",
58
58
  "@riil-frontend/component-topo-icon-select": "^1.0.1",
59
- "@riil-frontend/component-topology-graph": "^2.1.13",
60
- "@riil-frontend/component-topology-utils": "^2.0.14",
59
+ "@riil-frontend/component-topology-graph": "^2.2.0-alpha.0",
60
+ "@riil-frontend/component-topology-utils": "^2.0.16",
61
61
  "@riil-frontend/css": "^2.0.2",
62
62
  "@riil-frontend/hooks": "latest",
63
63
  "@riil-frontend/next-collapse": "^1.0.1-a.0",
@@ -100,6 +100,6 @@
100
100
  "access": "public"
101
101
  },
102
102
  "license": "MIT",
103
- "homepage": "https://unpkg.com/@riil-frontend/component-topology@2.5.4/build/index.html",
104
- "gitHead": "8d9f286eb5da11dfadbef62890d74d2c2dd4d3a9"
103
+ "homepage": "https://unpkg.com/@riil-frontend/component-topology@2.6.0-alpha.0/build/index.html",
104
+ "gitHead": "dbbdb9343bb67d3f8fcf18f628a2ed580f9da1bc"
105
105
  }
package/CHANGELOG.md DELETED
@@ -1,26 +0,0 @@
1
- ## v2.1.8
2
-
3
- - 支持自定义分层添加资源组件
4
- - 支持添加节点、连线接口 `addElements(data)`
5
-
6
- ## v2.1.4
7
-
8
- - ht 新旧版本共存
9
-
10
- ## v2.1.3
11
-
12
- - 自定义图标
13
-
14
-
15
- ## v2.0.2
16
-
17
- - 支持编辑模式右键菜单
18
-
19
- ## v2.0.1
20
-
21
- 新增功能
22
- - 拓扑图全量更新数据接口,更新时保留元素样式
23
- - 编辑模式右键菜单
24
-
25
- 阻断变更
26
- - 暂时恢复页面加载ht topo-client.js