aldehyde 0.2.496 → 0.2.498

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 (585) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +2 -2
  3. package/lib/controls/2dEditor/2dEditor/index.less +5 -5
  4. package/lib/controls/2dEditor/2dView/index.less +8 -8
  5. package/lib/controls/2dEditor/components/component.less +83 -83
  6. package/lib/controls/action/index.css +8 -8
  7. package/lib/controls/action/index.d.ts.map +1 -1
  8. package/lib/controls/chemstruc/graph.d.ts.map +1 -1
  9. package/lib/controls/chemstruc/index.css +28 -28
  10. package/lib/controls/collapse-card/index.css +8 -8
  11. package/lib/controls/collapse-card/index.d.ts.map +1 -1
  12. package/lib/controls/cquery/cquick-button.d.ts.map +1 -1
  13. package/lib/controls/entity-select/entity-select.d.ts.map +1 -1
  14. package/lib/controls/entity-select/index.css +7 -7
  15. package/lib/controls/entity-select/lab-tree-select.d.ts.map +1 -1
  16. package/lib/controls/entity-select/popover-entity-select.d.ts.map +1 -1
  17. package/lib/controls/file-view/index.less +9 -9
  18. package/lib/controls/html-editor/index.less +67 -67
  19. package/lib/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.css +147 -147
  20. package/lib/controls/password-setter/index.css +2 -2
  21. package/lib/controls/password-setter/index.d.ts.map +1 -1
  22. package/lib/controls/qr-code/index.less +28 -28
  23. package/lib/controls/relation-existion/index.css +3 -3
  24. package/lib/controls/relation-existion/index.d.ts.map +1 -1
  25. package/lib/controls/rfield/index.css +4 -4
  26. package/lib/controls/rfield/index.d.ts.map +1 -1
  27. package/lib/controls/select/index.d.ts.map +1 -1
  28. package/lib/controls/signature/index.d.ts.map +1 -1
  29. package/lib/controls/text/ellipsis-text.d.ts.map +1 -1
  30. package/lib/controls/text/index.less +7 -7
  31. package/lib/controls/upload/index.d.ts.map +1 -1
  32. package/lib/controls/upload/mult-file-upload.d.ts.map +1 -1
  33. package/lib/custom-page/dtmpl-custom-edit-modal-page.d.ts.map +1 -1
  34. package/lib/detail/button/bottom-submit-button-bar.d.ts.map +1 -1
  35. package/lib/detail/button/cquery-button-bar.d.ts.map +1 -1
  36. package/lib/detail/button/fix-right-submit-button-bar.d.ts.map +1 -1
  37. package/lib/detail/button/index.css +42 -42
  38. package/lib/detail/dtmpl.css +72 -72
  39. package/lib/detail/edit/fields-edit-card.d.ts.map +1 -1
  40. package/lib/detail/edit/modal-row-edit.d.ts.map +1 -1
  41. package/lib/detail/edit/popover-edit-card.d.ts.map +1 -1
  42. package/lib/detail/rightbar/index.css +34 -34
  43. package/lib/detail/rightbar/index.d.ts.map +1 -1
  44. package/lib/detail/view/act-dtmpl-view.d.ts.map +1 -1
  45. package/lib/detail/view/field-view-group.d.ts.map +1 -1
  46. package/lib/detail/view/modal-dtmpl-view.d.ts.map +1 -1
  47. package/lib/detail/view/snapshot-timeline.d.ts.map +1 -1
  48. package/lib/detail/view/tab-act-dtmpl-view.d.ts.map +1 -1
  49. package/lib/draw-canvas-edit/components/render/components/index.less +60 -60
  50. package/lib/draw-canvas-edit/components/render/components/workstation-component.js +6 -6
  51. package/lib/draw-canvas-edit/index.less +48 -48
  52. package/lib/draw-canvas-view/index.less +66 -66
  53. package/lib/export/export-frame.css +2 -2
  54. package/lib/export/export-frame.d.ts.map +1 -1
  55. package/lib/export/select-code-export-frame.d.ts.map +1 -1
  56. package/lib/form/dtmpl-form.css +3 -3
  57. package/lib/form/dtmpl-form.d.ts.map +1 -1
  58. package/lib/form/field-group-form.d.ts.map +1 -1
  59. package/lib/form/form-Item-group.d.ts.map +1 -1
  60. package/lib/form/index.css +12 -12
  61. package/lib/import/excel-import.d.ts.map +1 -1
  62. package/lib/import/index.css +53 -53
  63. package/lib/import/template.css +50 -50
  64. package/lib/layout/common.css +64 -64
  65. package/lib/layout/coverstyle.css +51 -51
  66. package/lib/layout/footer/index.css +5 -5
  67. package/lib/layout/header/index.css +122 -122
  68. package/lib/layout/menu/block.css +7 -7
  69. package/lib/layout/menu/block.d.ts.map +1 -1
  70. package/lib/layout/menu/l2menu-quick-bar.d.ts.map +1 -1
  71. package/lib/layout/menu/menu-2layers.d.ts.map +1 -1
  72. package/lib/layout/menu/message-bar.less +73 -73
  73. package/lib/layout/menu/reset-password.d.ts.map +1 -1
  74. package/lib/layout/menu/user-bar.d.ts.map +1 -1
  75. package/lib/layout/menu/userinfo-bar.d.ts.map +1 -1
  76. package/lib/layout/sidebar/index.css +57 -57
  77. package/lib/layout2/css/header.css +41 -41
  78. package/lib/layout2/css/sider.less +17 -17
  79. package/lib/layout2/css/tabs-layout.less +18 -18
  80. package/lib/layout3/css/header.less +195 -195
  81. package/lib/layout3/css/main.less +161 -161
  82. package/lib/layout3/css/sider.less +32 -32
  83. package/lib/layout3/css/tabs-layout.less +38 -38
  84. package/lib/layout4/css/header.less +196 -196
  85. package/lib/layout4/css/main.less +154 -154
  86. package/lib/layout4/css/sider.less +37 -37
  87. package/lib/layout4/css/tabs-layout.less +42 -42
  88. package/lib/layout5/css/header.less +35 -35
  89. package/lib/layout5/css/sider.less +18 -18
  90. package/lib/list/calendar/index.less +20 -20
  91. package/lib/list/card-list/index.less +154 -154
  92. package/lib/list/gantt/index.less +8 -8
  93. package/lib/list/vertical-list/index.less +208 -208
  94. package/lib/login/index.css +19 -19
  95. package/lib/login/login.d.ts.map +1 -1
  96. package/lib/login/vertify/index.css +143 -143
  97. package/lib/login3/index.less +136 -136
  98. package/lib/lowcode-components/act-table/index.less +26 -26
  99. package/lib/lowcode-components/base-button/index.less +7 -7
  100. package/lib/lowcode-components/base-map/index.js +6 -6
  101. package/lib/lowcode-components/base-radio/index.less +23 -23
  102. package/lib/lowcode-components/base-tabs/index.less +14 -14
  103. package/lib/lowcode-components/border/border10/index.less +26 -26
  104. package/lib/lowcode-components/border/border11/index.js +46 -46
  105. package/lib/lowcode-components/border/border11/index.less +17 -17
  106. package/lib/lowcode-components/border/border12/index.js +13 -13
  107. package/lib/lowcode-components/border/border12/index.less +13 -13
  108. package/lib/lowcode-components/border/border13/index.js +5 -5
  109. package/lib/lowcode-components/border/border13/index.less +13 -13
  110. package/lib/lowcode-components/border/border2/index.less +17 -17
  111. package/lib/lowcode-components/border/border3/index.less +25 -25
  112. package/lib/lowcode-components/border/border4/index.js +2 -2
  113. package/lib/lowcode-components/border/border4/index.less +72 -72
  114. package/lib/lowcode-components/border/border5/index.js +2 -2
  115. package/lib/lowcode-components/border/border5/index.less +35 -35
  116. package/lib/lowcode-components/border/border6/index.less +17 -17
  117. package/lib/lowcode-components/border/border7/index.less +26 -26
  118. package/lib/lowcode-components/border/border8/index.less +13 -13
  119. package/lib/lowcode-components/border/border9/index.js +14 -14
  120. package/lib/lowcode-components/border/border9/index.less +13 -13
  121. package/lib/lowcode-components/column-3d-chart/index.d.ts.map +1 -1
  122. package/lib/lowcode-components/column-3d-chart/index.js +2 -1
  123. package/lib/lowcode-components/column-3d-chart/index.js.map +1 -1
  124. package/lib/lowcode-components/column-chart/index.d.ts.map +1 -1
  125. package/lib/lowcode-components/column-chart/index.js +3 -2
  126. package/lib/lowcode-components/column-chart/index.js.map +1 -1
  127. package/lib/lowcode-components/decoration/decoration1/index.less +7 -7
  128. package/lib/lowcode-components/decoration/decoration10/index.js +3 -3
  129. package/lib/lowcode-components/decoration/decoration10/index.less +5 -5
  130. package/lib/lowcode-components/decoration/decoration11/index.less +5 -5
  131. package/lib/lowcode-components/decoration/decoration2/index.less +6 -6
  132. package/lib/lowcode-components/decoration/decoration3/index.less +7 -7
  133. package/lib/lowcode-components/decoration/decoration4/index.less +29 -29
  134. package/lib/lowcode-components/decoration/decoration5/index.less +3 -3
  135. package/lib/lowcode-components/decoration/decoration6/index.less +7 -7
  136. package/lib/lowcode-components/decoration/decoration7/index.less +4 -4
  137. package/lib/lowcode-components/decoration/decoration8/index.less +14 -14
  138. package/lib/lowcode-components/decoration/decoration9/index.less +4 -4
  139. package/lib/lowcode-components/effectScatter-map/index.js +6 -6
  140. package/lib/lowcode-components/effectScatter-map-3d/index.js +6 -6
  141. package/lib/lowcode-components/line-bar-chart/index.d.ts.map +1 -1
  142. package/lib/lowcode-components/line-bar-chart/index.js +3 -6
  143. package/lib/lowcode-components/line-bar-chart/index.js.map +1 -1
  144. package/lib/lowcode-components/line-chart/index.d.ts +3 -0
  145. package/lib/lowcode-components/line-chart/index.d.ts.map +1 -1
  146. package/lib/lowcode-components/line-chart/index.js +19 -6
  147. package/lib/lowcode-components/line-chart/index.js.map +1 -1
  148. package/lib/lowcode-components/lowcode-view/index.less +19 -19
  149. package/lib/lowcode-components/search-form/index.less +25 -25
  150. package/lib/module/dtmpl-edit-card.d.ts.map +1 -1
  151. package/lib/module/dtmpl-edit-page.d.ts.map +1 -1
  152. package/lib/module/index.less +4 -4
  153. package/lib/module/ltmpl-modal.d.ts.map +1 -1
  154. package/lib/module/ltmpl-table.d.ts.map +1 -1
  155. package/lib/routable/index.less +25 -25
  156. package/lib/table/act-table.d.ts.map +1 -1
  157. package/lib/table/column/index.less +85 -85
  158. package/lib/table/index.css +211 -211
  159. package/lib/table/modal-select-table.d.ts.map +1 -1
  160. package/lib/table/page-chart.less +9 -9
  161. package/lib/table/pagination.css +14 -14
  162. package/lib/table/pagination.d.ts.map +1 -1
  163. package/lib/table/relation-table.d.ts.map +1 -1
  164. package/lib/table/selected-rows-card.d.ts.map +1 -1
  165. package/lib/table/stat/restat.d.ts.map +1 -1
  166. package/lib/tree/act-tree.d.ts.map +1 -1
  167. package/lib/tree/block-menu-auth-tree.d.ts.map +1 -1
  168. package/lib/tree/index.css +22 -22
  169. package/lib/tree/tmpl-tree.d.ts.map +1 -1
  170. package/lib/welcome/components/menu-card.less +96 -96
  171. package/lib/welcome/components/page-card.less +49 -49
  172. package/lib/welcome/components/quick-entrance.less +120 -120
  173. package/lib/welcome/components/user-menus.less +192 -192
  174. package/lib/welcome/components/workbench.less +118 -118
  175. package/lib/welcome/index.css +13 -13
  176. package/package.json +224 -224
  177. package/src/aldehyde/controls/2dEditor/2dEditor/index.less +5 -5
  178. package/src/aldehyde/controls/2dEditor/2dEditor/index.tsx +270 -270
  179. package/src/aldehyde/controls/2dEditor/2dView/index.less +8 -8
  180. package/src/aldehyde/controls/2dEditor/2dView/index.tsx +110 -110
  181. package/src/aldehyde/controls/2dEditor/components/card.tsx +256 -256
  182. package/src/aldehyde/controls/2dEditor/components/component.less +83 -83
  183. package/src/aldehyde/controls/2dEditor/components/data.d.ts +32 -32
  184. package/src/aldehyde/controls/2dEditor/components/hotspot.tsx +80 -80
  185. package/src/aldehyde/controls/2dEditor/components/html-box.tsx +101 -101
  186. package/src/aldehyde/controls/2dEditor/components/image.tsx +99 -99
  187. package/src/aldehyde/controls/2dEditor/components/line.tsx +73 -73
  188. package/src/aldehyde/controls/action/index.css +8 -8
  189. package/src/aldehyde/controls/action/index.tsx +406 -406
  190. package/src/aldehyde/controls/action/utils.tsx +306 -306
  191. package/src/aldehyde/controls/auto-complete/index.tsx +82 -82
  192. package/src/aldehyde/controls/cascader/index.tsx +112 -112
  193. package/src/aldehyde/controls/chemstruc/graph.tsx +185 -185
  194. package/src/aldehyde/controls/chemstruc/index.css +28 -28
  195. package/src/aldehyde/controls/code-editor/sql-code-editor.tsx +73 -73
  196. package/src/aldehyde/controls/collapse-card/index.css +8 -8
  197. package/src/aldehyde/controls/collapse-card/index.tsx +109 -109
  198. package/src/aldehyde/controls/color-picker/index.tsx +21 -21
  199. package/src/aldehyde/controls/counting-tag/index.tsx +53 -53
  200. package/src/aldehyde/controls/cquery/cquick-button.tsx +145 -145
  201. package/src/aldehyde/controls/date-picker/index.tsx +199 -199
  202. package/src/aldehyde/controls/direct-file-view/drawer-file-view.tsx +54 -54
  203. package/src/aldehyde/controls/direct-file-view/index.tsx +147 -147
  204. package/src/aldehyde/controls/direct-upload/index.tsx +140 -140
  205. package/src/aldehyde/controls/entity-select/entity-select.tsx +791 -791
  206. package/src/aldehyde/controls/entity-select/index.css +7 -7
  207. package/src/aldehyde/controls/entity-select/lab-tree-select.tsx +154 -154
  208. package/src/aldehyde/controls/entity-select/popover-entity-select.tsx +205 -205
  209. package/src/aldehyde/controls/entry-control.tsx +431 -431
  210. package/src/aldehyde/controls/enum-badge/index.tsx +42 -42
  211. package/src/aldehyde/controls/enum-tag/index.tsx +45 -45
  212. package/src/aldehyde/controls/field-history/index.tsx +81 -81
  213. package/src/aldehyde/controls/file-export/select-code-export.tsx +40 -40
  214. package/src/aldehyde/controls/file-view/drawer-file-view.tsx +117 -117
  215. package/src/aldehyde/controls/file-view/index.less +9 -9
  216. package/src/aldehyde/controls/file-view/index.tsx +148 -148
  217. package/src/aldehyde/controls/file-view/multi-file-view.tsx +39 -39
  218. package/src/aldehyde/controls/file-view/newin-file-view.tsx +40 -40
  219. package/src/aldehyde/controls/html-editor/draft.tsx +136 -136
  220. package/src/aldehyde/controls/html-editor/index.less +67 -67
  221. package/src/aldehyde/controls/icon-selector/app-icon-selector.tsx +68 -68
  222. package/src/aldehyde/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.css +147 -147
  223. package/src/aldehyde/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.json +240 -240
  224. package/src/aldehyde/controls/icon-selector/pc-icon-selector.tsx +68 -68
  225. package/src/aldehyde/controls/input-number/index.tsx +148 -148
  226. package/src/aldehyde/controls/input-range/index.tsx +59 -59
  227. package/src/aldehyde/controls/password-setter/index.css +2 -2
  228. package/src/aldehyde/controls/password-setter/index.js +88 -88
  229. package/src/aldehyde/controls/progress/index.tsx +74 -74
  230. package/src/aldehyde/controls/qr-code/index.less +28 -28
  231. package/src/aldehyde/controls/qr-code/index.tsx +40 -40
  232. package/src/aldehyde/controls/relation-existion/index.css +3 -3
  233. package/src/aldehyde/controls/relation-existion/index.tsx +144 -144
  234. package/src/aldehyde/controls/rfield/index.css +4 -4
  235. package/src/aldehyde/controls/rfield/index.tsx +225 -225
  236. package/src/aldehyde/controls/select/index.tsx +226 -226
  237. package/src/aldehyde/controls/signature/index.tsx +226 -226
  238. package/src/aldehyde/controls/single-checkbox/index.tsx +18 -18
  239. package/src/aldehyde/controls/steps/index.tsx +59 -59
  240. package/src/aldehyde/controls/text/ellipsis-text.tsx +98 -98
  241. package/src/aldehyde/controls/text/index.less +7 -7
  242. package/src/aldehyde/controls/tree-select/navigation-tree.tsx +122 -122
  243. package/src/aldehyde/controls/tree-select/tree-entity-select.tsx +121 -121
  244. package/src/aldehyde/controls/upload/index.tsx +128 -128
  245. package/src/aldehyde/controls/upload/mult-file-upload.tsx +240 -240
  246. package/src/aldehyde/controls/upload-read-excel/index.tsx +43 -43
  247. package/src/aldehyde/controls/view-control.tsx +289 -289
  248. package/src/aldehyde/custom-page/custom-detail-modal-page.tsx +69 -69
  249. package/src/aldehyde/custom-page/custom-page-router.tsx +64 -64
  250. package/src/aldehyde/custom-page/def-custom-page.tsx +17 -17
  251. package/src/aldehyde/custom-page/dtmpl-custom-edit-modal-page.tsx +91 -91
  252. package/src/aldehyde/detail/button/bottom-submit-button-bar.tsx +91 -91
  253. package/src/aldehyde/detail/button/cquery-button-bar.tsx +144 -144
  254. package/src/aldehyde/detail/button/edit-button.tsx +61 -61
  255. package/src/aldehyde/detail/button/fix-right-submit-button-bar.tsx +186 -186
  256. package/src/aldehyde/detail/button/index.css +42 -42
  257. package/src/aldehyde/detail/button/inline-edit-button.tsx +40 -40
  258. package/src/aldehyde/detail/button/submit-button-bar.tsx +57 -57
  259. package/src/aldehyde/detail/button/view-button.tsx +64 -64
  260. package/src/aldehyde/detail/dtmpl.css +72 -72
  261. package/src/aldehyde/detail/edit/dtmpl-edit.tsx +279 -279
  262. package/src/aldehyde/detail/edit/fields-edit-card.tsx +145 -145
  263. package/src/aldehyde/detail/edit/modal-row-edit.tsx +95 -95
  264. package/src/aldehyde/detail/edit/popover-edit-card.tsx +167 -167
  265. package/src/aldehyde/detail/edit/popover-editor.tsx +70 -70
  266. package/src/aldehyde/detail/edit/post-result/index.tsx +86 -86
  267. package/src/aldehyde/detail/rightbar/index.css +34 -34
  268. package/src/aldehyde/detail/rightbar/index.tsx +92 -92
  269. package/src/aldehyde/detail/tooltipbar/index.tsx +32 -32
  270. package/src/aldehyde/detail/view/act-dtmpl-view.tsx +288 -288
  271. package/src/aldehyde/detail/view/dtmpl-view.tsx +334 -334
  272. package/src/aldehyde/detail/view/field-view-group.tsx +88 -88
  273. package/src/aldehyde/detail/view/modal-dtmpl-view.tsx +73 -73
  274. package/src/aldehyde/detail/view/snapshot-timeline.tsx +231 -231
  275. package/src/aldehyde/detail/view/tab-act-dtmpl-view.tsx +304 -304
  276. package/src/aldehyde/detail/view/view-compare-panel.tsx +57 -57
  277. package/src/aldehyde/draw-canvas-edit/components/render/components/index.less +60 -60
  278. package/src/aldehyde/draw-canvas-edit/components/render/components/index.ts +3 -3
  279. package/src/aldehyde/draw-canvas-edit/components/render/components/workstation-component.tsx +220 -220
  280. package/src/aldehyde/draw-canvas-edit/components/render/draws/bg-draw.ts +177 -177
  281. package/src/aldehyde/draw-canvas-edit/components/render/draws/contextmenu-draw.ts +330 -330
  282. package/src/aldehyde/draw-canvas-edit/components/render/draws/graph-draw.ts +249 -249
  283. package/src/aldehyde/draw-canvas-edit/components/render/draws/link-draw.ts +1415 -1415
  284. package/src/aldehyde/draw-canvas-edit/components/render/draws/preview-draw.ts +274 -274
  285. package/src/aldehyde/draw-canvas-edit/components/render/draws/ref-line-draw.ts +71 -71
  286. package/src/aldehyde/draw-canvas-edit/components/render/draws/ruler-draw.ts +166 -166
  287. package/src/aldehyde/draw-canvas-edit/components/render/graphs/bezier.ts +542 -542
  288. package/src/aldehyde/draw-canvas-edit/components/render/handlers/drag-outside-handlers.ts +77 -77
  289. package/src/aldehyde/draw-canvas-edit/components/render/handlers/selection-handlers.ts +410 -410
  290. package/src/aldehyde/draw-canvas-edit/components/render/index.ts +817 -817
  291. package/src/aldehyde/draw-canvas-edit/components/render/tools/attract-tool.ts +457 -457
  292. package/src/aldehyde/draw-canvas-edit/components/render/tools/component-factory.ts +269 -269
  293. package/src/aldehyde/draw-canvas-edit/components/render/tools/copy-tool.ts +244 -244
  294. package/src/aldehyde/draw-canvas-edit/components/render/tools/import-export-tool.ts +588 -588
  295. package/src/aldehyde/draw-canvas-edit/components/render/tools/index.ts +10 -10
  296. package/src/aldehyde/draw-canvas-edit/components/render/tools/position-tool.ts +191 -191
  297. package/src/aldehyde/draw-canvas-edit/components/render/tools/selection-tool.ts +140 -140
  298. package/src/aldehyde/draw-canvas-edit/components/render/types.ts +298 -298
  299. package/src/aldehyde/draw-canvas-edit/components/setting-form/index.tsx +305 -305
  300. package/src/aldehyde/draw-canvas-edit/constant.ts +5 -5
  301. package/src/aldehyde/draw-canvas-edit/index.less +48 -48
  302. package/src/aldehyde/draw-canvas-edit/index.tsx +213 -213
  303. package/src/aldehyde/draw-canvas-view/index.less +66 -66
  304. package/src/aldehyde/draw-canvas-view/index.tsx +49 -49
  305. package/src/aldehyde/draw-canvas-view/view.tsx +237 -237
  306. package/src/aldehyde/export/export-frame.css +2 -2
  307. package/src/aldehyde/export/export-frame.tsx +301 -301
  308. package/src/aldehyde/export/select-code-export-frame.tsx +212 -212
  309. package/src/aldehyde/form/criteria-form.tsx +604 -604
  310. package/src/aldehyde/form/dtmpl-form.css +3 -3
  311. package/src/aldehyde/form/dtmpl-form.tsx +571 -571
  312. package/src/aldehyde/form/field-group-form.tsx +103 -103
  313. package/src/aldehyde/form/fields-form.tsx +45 -45
  314. package/src/aldehyde/form/form-Item-group.tsx +246 -246
  315. package/src/aldehyde/form/index.css +12 -12
  316. package/src/aldehyde/hooks/use-match-route/index.tsx +62 -62
  317. package/src/aldehyde/hooks/use-tabs/index.tsx +139 -139
  318. package/src/aldehyde/hooks/useVarCssColor.ts +6 -6
  319. package/src/aldehyde/icon/aliIcon.tsx +9 -9
  320. package/src/aldehyde/icon/index.tsx +28 -28
  321. package/src/aldehyde/import/excel-import.tsx +450 -450
  322. package/src/aldehyde/import/index.css +53 -53
  323. package/src/aldehyde/import/template.css +50 -50
  324. package/src/aldehyde/index.tsx +220 -220
  325. package/src/aldehyde/layout/MainPage.tsx +334 -334
  326. package/src/aldehyde/layout/common.css +64 -64
  327. package/src/aldehyde/layout/coverstyle.css +51 -51
  328. package/src/aldehyde/layout/footer/index.css +5 -5
  329. package/src/aldehyde/layout/footer/index.js +17 -17
  330. package/src/aldehyde/layout/header/index.css +122 -122
  331. package/src/aldehyde/layout/header/index.tsx +152 -152
  332. package/src/aldehyde/layout/menu/block.css +7 -7
  333. package/src/aldehyde/layout/menu/block.tsx +174 -174
  334. package/src/aldehyde/layout/menu/l2menu-message-bar.tsx +160 -160
  335. package/src/aldehyde/layout/menu/l2menu-quick-bar.tsx +175 -175
  336. package/src/aldehyde/layout/menu/menu-2layers.tsx +117 -117
  337. package/src/aldehyde/layout/menu/menu-render.tsx +168 -168
  338. package/src/aldehyde/layout/menu/message-bar.less +73 -73
  339. package/src/aldehyde/layout/menu/reset-password.tsx +255 -255
  340. package/src/aldehyde/layout/menu/user-bar.tsx +259 -259
  341. package/src/aldehyde/layout/menu/userinfo-bar.tsx +69 -69
  342. package/src/aldehyde/layout/sidebar/index.css +57 -57
  343. package/src/aldehyde/layout/sidebar/index.tsx +84 -84
  344. package/src/aldehyde/layout2/components/icon-font.tsx +7 -7
  345. package/src/aldehyde/layout2/components/screenfull-button.tsx +21 -21
  346. package/src/aldehyde/layout2/components/search-menu.tsx +85 -85
  347. package/src/aldehyde/layout2/components/system-messages.tsx +75 -75
  348. package/src/aldehyde/layout2/components/theme-button.tsx +65 -65
  349. package/src/aldehyde/layout2/components/user-button.tsx +258 -258
  350. package/src/aldehyde/layout2/components/user-notification.tsx +74 -74
  351. package/src/aldehyde/layout2/css/header.css +41 -41
  352. package/src/aldehyde/layout2/css/sider.less +17 -17
  353. package/src/aldehyde/layout2/css/tabs-layout.less +18 -18
  354. package/src/aldehyde/layout2/header.tsx +278 -278
  355. package/src/aldehyde/layout2/layout-context.tsx +95 -95
  356. package/src/aldehyde/layout2/main.tsx +30 -30
  357. package/src/aldehyde/layout2/page.tsx +323 -323
  358. package/src/aldehyde/layout2/sider.tsx +230 -230
  359. package/src/aldehyde/layout2/tabs/tabs-context.tsx +37 -37
  360. package/src/aldehyde/layout2/tabs/tabs-layout.tsx +146 -146
  361. package/src/aldehyde/layout2/type/layout-type.ts +16 -16
  362. package/src/aldehyde/layout2/util/menu-util.tsx +125 -125
  363. package/src/aldehyde/layout3/components/tabs-layout.tsx +110 -110
  364. package/src/aldehyde/layout3/components/time.tsx +25 -25
  365. package/src/aldehyde/layout3/css/header.less +195 -195
  366. package/src/aldehyde/layout3/css/main.less +161 -161
  367. package/src/aldehyde/layout3/css/sider.less +32 -32
  368. package/src/aldehyde/layout3/css/tabs-layout.less +38 -38
  369. package/src/aldehyde/layout3/header.tsx +187 -187
  370. package/src/aldehyde/layout3/main.tsx +29 -29
  371. package/src/aldehyde/layout3/page.tsx +110 -110
  372. package/src/aldehyde/layout3/sider.tsx +198 -198
  373. package/src/aldehyde/layout4/components/tabs-layout.tsx +110 -110
  374. package/src/aldehyde/layout4/css/header.less +196 -196
  375. package/src/aldehyde/layout4/css/main.less +154 -154
  376. package/src/aldehyde/layout4/css/sider.less +37 -37
  377. package/src/aldehyde/layout4/css/tabs-layout.less +42 -42
  378. package/src/aldehyde/layout4/header.tsx +190 -190
  379. package/src/aldehyde/layout4/main.tsx +29 -29
  380. package/src/aldehyde/layout4/page.tsx +125 -125
  381. package/src/aldehyde/layout4/sider.tsx +201 -201
  382. package/src/aldehyde/layout5/css/header.less +35 -35
  383. package/src/aldehyde/layout5/css/sider.less +18 -18
  384. package/src/aldehyde/layout5/header.tsx +204 -204
  385. package/src/aldehyde/layout5/page.tsx +107 -107
  386. package/src/aldehyde/layout5/sider.tsx +235 -235
  387. package/src/aldehyde/list/calendar/index.less +20 -20
  388. package/src/aldehyde/list/calendar/index.tsx +157 -157
  389. package/src/aldehyde/list/card-list/card-list-item.tsx +112 -112
  390. package/src/aldehyde/list/card-list/index.less +154 -154
  391. package/src/aldehyde/list/card-list/index.tsx +83 -83
  392. package/src/aldehyde/list/gantt/index.less +8 -8
  393. package/src/aldehyde/list/gantt/index.tsx +508 -508
  394. package/src/aldehyde/list/vertical-list/index.less +208 -208
  395. package/src/aldehyde/list/vertical-list/index.tsx +55 -55
  396. package/src/aldehyde/list/vertical-list/item.tsx +136 -136
  397. package/src/aldehyde/locale/LocaleButton.tsx +48 -48
  398. package/src/aldehyde/locale/LocaleProvider.tsx +265 -265
  399. package/src/aldehyde/locale/langMp.ts +45 -45
  400. package/src/aldehyde/locale/translate.ts +80 -80
  401. package/src/aldehyde/locale/useLocale.ts +72 -72
  402. package/src/aldehyde/login/context-setter.tsx +130 -130
  403. package/src/aldehyde/login/index.css +19 -19
  404. package/src/aldehyde/login/login.tsx +255 -255
  405. package/src/aldehyde/login/router-login.tsx +107 -107
  406. package/src/aldehyde/login/vertify/index.css +143 -143
  407. package/src/aldehyde/login/vertify/index.tsx +360 -360
  408. package/src/aldehyde/login/vertify/tool.ts +13 -13
  409. package/src/aldehyde/login2/login-page.tsx +92 -92
  410. package/src/aldehyde/login2/login.tsx +227 -227
  411. package/src/aldehyde/login3/index.less +136 -136
  412. package/src/aldehyde/login3/login-page.tsx +71 -71
  413. package/src/aldehyde/lowcode-components/act-table/index.less +26 -26
  414. package/src/aldehyde/lowcode-components/act-table/index.tsx +139 -139
  415. package/src/aldehyde/lowcode-components/assets/lowcode-constant.tsx +12 -12
  416. package/src/aldehyde/lowcode-components/bar-chart/index.tsx +272 -272
  417. package/src/aldehyde/lowcode-components/base-button/index.less +7 -7
  418. package/src/aldehyde/lowcode-components/base-button/index.tsx +197 -197
  419. package/src/aldehyde/lowcode-components/base-image/index.tsx +220 -220
  420. package/src/aldehyde/lowcode-components/base-map/index.tsx +292 -292
  421. package/src/aldehyde/lowcode-components/base-radio/index.less +23 -23
  422. package/src/aldehyde/lowcode-components/base-radio/index.tsx +157 -157
  423. package/src/aldehyde/lowcode-components/base-table/index.tsx +268 -268
  424. package/src/aldehyde/lowcode-components/base-tabs/index.less +14 -14
  425. package/src/aldehyde/lowcode-components/base-tabs/index.tsx +183 -183
  426. package/src/aldehyde/lowcode-components/base-text/index.tsx +58 -58
  427. package/src/aldehyde/lowcode-components/border/border1/index.tsx +70 -70
  428. package/src/aldehyde/lowcode-components/border/border10/index.less +26 -26
  429. package/src/aldehyde/lowcode-components/border/border10/index.tsx +45 -45
  430. package/src/aldehyde/lowcode-components/border/border11/index.less +17 -17
  431. package/src/aldehyde/lowcode-components/border/border11/index.tsx +232 -232
  432. package/src/aldehyde/lowcode-components/border/border12/index.less +13 -13
  433. package/src/aldehyde/lowcode-components/border/border12/index.tsx +115 -115
  434. package/src/aldehyde/lowcode-components/border/border13/index.less +13 -13
  435. package/src/aldehyde/lowcode-components/border/border13/index.tsx +69 -69
  436. package/src/aldehyde/lowcode-components/border/border2/index.less +17 -17
  437. package/src/aldehyde/lowcode-components/border/border2/index.tsx +51 -51
  438. package/src/aldehyde/lowcode-components/border/border3/index.less +25 -25
  439. package/src/aldehyde/lowcode-components/border/border3/index.tsx +61 -61
  440. package/src/aldehyde/lowcode-components/border/border4/index.less +72 -72
  441. package/src/aldehyde/lowcode-components/border/border4/index.tsx +79 -79
  442. package/src/aldehyde/lowcode-components/border/border5/index.less +35 -35
  443. package/src/aldehyde/lowcode-components/border/border5/index.tsx +75 -75
  444. package/src/aldehyde/lowcode-components/border/border6/index.less +17 -17
  445. package/src/aldehyde/lowcode-components/border/border6/index.tsx +60 -60
  446. package/src/aldehyde/lowcode-components/border/border7/index.less +26 -26
  447. package/src/aldehyde/lowcode-components/border/border7/index.tsx +75 -75
  448. package/src/aldehyde/lowcode-components/border/border8/index.less +13 -13
  449. package/src/aldehyde/lowcode-components/border/border8/index.tsx +84 -84
  450. package/src/aldehyde/lowcode-components/border/border9/index.less +13 -13
  451. package/src/aldehyde/lowcode-components/border/border9/index.tsx +154 -154
  452. package/src/aldehyde/lowcode-components/capsule-bar-chart/index.tsx +290 -290
  453. package/src/aldehyde/lowcode-components/carousel/index.tsx +218 -218
  454. package/src/aldehyde/lowcode-components/circular-progress-chart/index.tsx +263 -263
  455. package/src/aldehyde/lowcode-components/column-3d-chart/index.tsx +443 -442
  456. package/src/aldehyde/lowcode-components/column-chart/index.tsx +353 -352
  457. package/src/aldehyde/lowcode-components/data-number/index.tsx +219 -219
  458. package/src/aldehyde/lowcode-components/data.d.ts +19 -19
  459. package/src/aldehyde/lowcode-components/decoration/decoration1/index.less +7 -7
  460. package/src/aldehyde/lowcode-components/decoration/decoration1/index.tsx +153 -153
  461. package/src/aldehyde/lowcode-components/decoration/decoration10/index.less +5 -5
  462. package/src/aldehyde/lowcode-components/decoration/decoration10/index.tsx +89 -89
  463. package/src/aldehyde/lowcode-components/decoration/decoration11/index.less +5 -5
  464. package/src/aldehyde/lowcode-components/decoration/decoration11/index.tsx +133 -133
  465. package/src/aldehyde/lowcode-components/decoration/decoration2/index.less +6 -6
  466. package/src/aldehyde/lowcode-components/decoration/decoration2/index.tsx +61 -61
  467. package/src/aldehyde/lowcode-components/decoration/decoration3/index.less +7 -7
  468. package/src/aldehyde/lowcode-components/decoration/decoration3/index.tsx +87 -87
  469. package/src/aldehyde/lowcode-components/decoration/decoration4/index.less +29 -29
  470. package/src/aldehyde/lowcode-components/decoration/decoration4/index.tsx +53 -53
  471. package/src/aldehyde/lowcode-components/decoration/decoration5/index.less +3 -3
  472. package/src/aldehyde/lowcode-components/decoration/decoration5/index.tsx +116 -116
  473. package/src/aldehyde/lowcode-components/decoration/decoration6/index.less +7 -7
  474. package/src/aldehyde/lowcode-components/decoration/decoration6/index.tsx +121 -121
  475. package/src/aldehyde/lowcode-components/decoration/decoration7/index.less +4 -4
  476. package/src/aldehyde/lowcode-components/decoration/decoration7/index.tsx +70 -70
  477. package/src/aldehyde/lowcode-components/decoration/decoration8/index.less +14 -14
  478. package/src/aldehyde/lowcode-components/decoration/decoration8/index.tsx +122 -122
  479. package/src/aldehyde/lowcode-components/decoration/decoration9/index.less +4 -4
  480. package/src/aldehyde/lowcode-components/decoration/decoration9/index.tsx +196 -196
  481. package/src/aldehyde/lowcode-components/effectScatter-map/index.tsx +315 -315
  482. package/src/aldehyde/lowcode-components/effectScatter-map-3d/index.tsx +419 -419
  483. package/src/aldehyde/lowcode-components/gauge-chart/index.tsx +254 -254
  484. package/src/aldehyde/lowcode-components/index.ts +130 -130
  485. package/src/aldehyde/lowcode-components/line-bar-chart/index.tsx +360 -362
  486. package/src/aldehyde/lowcode-components/line-chart/index.tsx +367 -352
  487. package/src/aldehyde/lowcode-components/liquid-chart/index.tsx +250 -250
  488. package/src/aldehyde/lowcode-components/lowcode-view/component/assets.ts +478 -478
  489. package/src/aldehyde/lowcode-components/lowcode-view/component/component-controller.ts +153 -153
  490. package/src/aldehyde/lowcode-components/lowcode-view/component/component-definition.ts +23 -23
  491. package/src/aldehyde/lowcode-components/lowcode-view/component/loading.tsx +20 -20
  492. package/src/aldehyde/lowcode-components/lowcode-view/component/util.ts +27 -27
  493. package/src/aldehyde/lowcode-components/lowcode-view/index.less +19 -19
  494. package/src/aldehyde/lowcode-components/lowcode-view/index.tsx +279 -279
  495. package/src/aldehyde/lowcode-components/lowcode-view/interface.ts +189 -189
  496. package/src/aldehyde/lowcode-components/pie-chart/index.tsx +353 -353
  497. package/src/aldehyde/lowcode-components/progress-chart/index.tsx +295 -295
  498. package/src/aldehyde/lowcode-components/radar-chart/index.tsx +322 -322
  499. package/src/aldehyde/lowcode-components/search-form/index.less +25 -25
  500. package/src/aldehyde/lowcode-components/search-form/index.tsx +121 -121
  501. package/src/aldehyde/lowcode-components/stroke-animation/index.tsx +219 -219
  502. package/src/aldehyde/module/block-menu-tree-drawer.tsx +118 -118
  503. package/src/aldehyde/module/criteria-page.tsx1 +175 -175
  504. package/src/aldehyde/module/draggable-modal.tsx +66 -66
  505. package/src/aldehyde/module/dtmpl-edit-card.tsx +479 -479
  506. package/src/aldehyde/module/dtmpl-edit-drawer.tsx +24 -24
  507. package/src/aldehyde/module/dtmpl-edit-modal.tsx +26 -26
  508. package/src/aldehyde/module/dtmpl-edit-page.tsx +600 -600
  509. package/src/aldehyde/module/dtmpl-editor.tsx +165 -165
  510. package/src/aldehyde/module/dtmpl-view-card.tsx +64 -64
  511. package/src/aldehyde/module/dtmpl-view-drawer.tsx +71 -71
  512. package/src/aldehyde/module/dtmpl-view-modal.tsx +56 -56
  513. package/src/aldehyde/module/embed-dtmpl-edit-page.tsx +137 -137
  514. package/src/aldehyde/module/index.less +4 -4
  515. package/src/aldehyde/module/ltmpl-drawer.tsx +60 -60
  516. package/src/aldehyde/module/ltmpl-modal.tsx +63 -63
  517. package/src/aldehyde/module/ltmpl-table.tsx +387 -387
  518. package/src/aldehyde/module/ttmpl-tree.tsx +47 -47
  519. package/src/aldehyde/routable/dtmpl-route.tsx +179 -179
  520. package/src/aldehyde/routable/import-route.tsx +42 -42
  521. package/src/aldehyde/routable/index.less +25 -25
  522. package/src/aldehyde/routable/ltmpl-route.tsx +549 -549
  523. package/src/aldehyde/routable/splitview-ltmpl-route.tsx +385 -385
  524. package/src/aldehyde/routable/ttmpl-route.tsx +98 -98
  525. package/src/aldehyde/routable/withroute.tsx +36 -36
  526. package/src/aldehyde/sso-Login/index.tsx +73 -73
  527. package/src/aldehyde/sso-Login/service/index.js +16 -16
  528. package/src/aldehyde/sso-Login/service/login.js +75 -75
  529. package/src/aldehyde/table/act-table.tsx +1865 -1865
  530. package/src/aldehyde/table/column/column-builder.tsx +882 -882
  531. package/src/aldehyde/table/column/column-selector.tsx +130 -130
  532. package/src/aldehyde/table/column/index.less +85 -85
  533. package/src/aldehyde/table/column/summary-builder.tsx +712 -712
  534. package/src/aldehyde/table/column/theme-color-getter.tsx +25 -25
  535. package/src/aldehyde/table/control-table-x-axis-wrapper.tsx +80 -80
  536. package/src/aldehyde/table/index.css +211 -211
  537. package/src/aldehyde/table/l2-act-table.tsx +91 -91
  538. package/src/aldehyde/table/modal-select-table.tsx +308 -308
  539. package/src/aldehyde/table/page-chart.less +9 -9
  540. package/src/aldehyde/table/page-chart.tsx +196 -196
  541. package/src/aldehyde/table/page-config-button.tsx +203 -203
  542. package/src/aldehyde/table/pagination.css +14 -14
  543. package/src/aldehyde/table/pagination.tsx +81 -81
  544. package/src/aldehyde/table/query-table.tsx +668 -668
  545. package/src/aldehyde/table/relation-table.tsx +1078 -1078
  546. package/src/aldehyde/table/report-table.tsx +125 -125
  547. package/src/aldehyde/table/resizable-table.tsx +97 -97
  548. package/src/aldehyde/table/row-table.tsx +45 -45
  549. package/src/aldehyde/table/select-table.tsx +559 -559
  550. package/src/aldehyde/table/selected-rows-card.tsx +78 -78
  551. package/src/aldehyde/table/stat/restat.tsx +122 -122
  552. package/src/aldehyde/table/table-util.tsx +25 -25
  553. package/src/aldehyde/tmpl/control-type-supportor.tsx +154 -154
  554. package/src/aldehyde/tmpl/hc-data-source.tsx +574 -574
  555. package/src/aldehyde/tmpl/hcservice-v3.tsx +1590 -1590
  556. package/src/aldehyde/tmpl/interface.tsx +940 -940
  557. package/src/aldehyde/tmpl/model-struc-v3.tsx +111 -111
  558. package/src/aldehyde/tmpl/superagent.js +146 -146
  559. package/src/aldehyde/tmpl/tmpl-config-analysis.tsx +585 -585
  560. package/src/aldehyde/tmpl/web-socket.ts +366 -366
  561. package/src/aldehyde/tree/act-tree.tsx +219 -219
  562. package/src/aldehyde/tree/block-menu-auth-tree.tsx +189 -189
  563. package/src/aldehyde/tree/index.css +22 -22
  564. package/src/aldehyde/tree/navigation-tree.tsx +39 -39
  565. package/src/aldehyde/tree/tmpl-tree.tsx +751 -751
  566. package/src/aldehyde/tree/tree-node.tsx +73 -73
  567. package/src/aldehyde/tree/tree-utils.tsx +317 -317
  568. package/src/aldehyde/units/EncryptUtils.js +37 -37
  569. package/src/aldehyde/units/image.d.ts +7 -7
  570. package/src/aldehyde/units/index.tsx +1375 -1375
  571. package/src/aldehyde/units/storage.js +2 -2
  572. package/src/aldehyde/utils/dsu.ts +27 -27
  573. package/src/aldehyde/welcome/HCWelcome.js +404 -404
  574. package/src/aldehyde/welcome/HCWelcome1.js +259 -259
  575. package/src/aldehyde/welcome/components/menu-card.less +96 -96
  576. package/src/aldehyde/welcome/components/menu-card.tsx +70 -70
  577. package/src/aldehyde/welcome/components/page-card.less +49 -49
  578. package/src/aldehyde/welcome/components/page-card.tsx +97 -97
  579. package/src/aldehyde/welcome/components/quick-entrance.less +120 -120
  580. package/src/aldehyde/welcome/components/quick-entrance.tsx +80 -80
  581. package/src/aldehyde/welcome/components/user-menus.less +192 -192
  582. package/src/aldehyde/welcome/components/user-menus.tsx +279 -279
  583. package/src/aldehyde/welcome/components/workbench.less +118 -118
  584. package/src/aldehyde/welcome/components/workbench.tsx +146 -146
  585. package/src/aldehyde/welcome/index.css +13 -13
@@ -1,367 +1,367 @@
1
- import SockJS from 'sockjs-client';
2
- import { Client, IFrame, IMessage, StompSubscription } from '@stomp/stompjs';
3
- import Units from "../units";
4
-
5
- /**
6
- * 使用方法:
7
- * const webSocket= WebSocket.getInstance(WS_URL); // 创建连接
8
- * const subscribe = webSocket.subscribe('/topic/test',{}, (val)=>{console.log("推送的数据:",val)}); // 订阅
9
- * subscribe.unsubscribe(); // 销毁订阅
10
- * webSocket.disconnect(); // 关闭连接
11
- */
12
-
13
- // 获取订阅地址
14
- const getWebSocketConfig = (path, options) => {
15
- const serverKey = options.serverKey;
16
- const header = options.connectionHeaders || {};
17
- const programCode = header.programCode || Units.programCode(serverKey);
18
- let server = new URL(options.hydrocarbonServer ? options.hydrocarbonServer : Units.api(serverKey));
19
- let hydrocarbonToken = null;
20
- if (header?.hydrocarbonToken) {
21
- hydrocarbonToken = header.hydrocarbonToken;
22
- } else if (serverKey) {
23
- hydrocarbonToken = Units.serverHydrocarbonToken(serverKey)
24
- } else if (Units.hydrocarbonToken(programCode)) {
25
- hydrocarbonToken = Units.hydrocarbonToken(programCode);
26
- } else {
27
- hydrocarbonToken = Units.getAnoHydrocarbonToken()
28
- }
29
- const url = `${server.protocol}//${server.host}${server.pathname}/${path}`;
30
- return { url, hydrocarbonToken, programCode };
31
- }
32
-
33
- export interface WebSocketOptions {
34
- reconnectDelay?: number; // 重连间隔(ms)
35
- maxReconnectAttempts?: number; // 最大重连次数
36
- heartbeatIncoming?: number; // 接收心跳最大间隔
37
- heartbeatOutgoing?: number; // 发送心跳最小间隔
38
- debug?: boolean; // 是否开启调试日志
39
- connectionHeaders?: { [key: string]: string }; // 创建连接请求头信息
40
- }
41
-
42
- // 全局订阅Map类型
43
- interface SubscriptionRecord {
44
- topic: string;
45
- callback: (message: any, rawMessage: IMessage) => void;
46
- subscription: StompSubscription | null;
47
- }
48
-
49
- // 订阅队列
50
- interface QueuedOperation {
51
- type: 'SUBSCRIBE' | 'SEND';
52
- payload: any;
53
- }
54
-
55
- // 连接状态枚举
56
- enum ConnectionState {
57
- DISCONNECTED = 'DISCONNECTED', // 断开
58
- CONNECTING = 'CONNECTING', // 连接中
59
- CONNECTED = 'CONNECTED', // 已连接
60
- RECONNECTING = 'RECONNECTING', // 重连中
61
- }
62
-
63
- class WebSocket {
64
- private static instances = new Map<string, WebSocket>();
65
-
66
- /**
67
- * 获取单例实例的唯一入口
68
- * @param url WebSocket 服务器地址
69
- * @param options 配置项
70
- * @returns 返回对应 URL 的唯一 WebSocket 实例
71
- */
72
- public static getInstance(url: string, options: WebSocketOptions = {}): WebSocket {
73
- if (!WebSocket.instances.has(url)) {
74
- // 注意:这里调用的是私有的构造函数
75
- const instance = new WebSocket(url, options);
76
- WebSocket.instances.set(url, instance);
77
- }
78
- return WebSocket.instances.get(url)!;
79
- }
80
-
81
- /**
82
- * 私有构造函数
83
- * 防止外部直接使用 new WebSocket() 导致单例失效
84
- */
85
- private constructor(url: string, options: WebSocketOptions = {}) {
86
- this.url = url;
87
- this.config = { ...this.config, ...options };
88
- this.connect();
89
- }
90
-
91
- private url: string;
92
- private client: Client | null = null;
93
- private subscriptions = new Map<string, SubscriptionRecord>();
94
- private operationQueue: QueuedOperation[] = [];
95
- private state: ConnectionState = ConnectionState.DISCONNECTED;
96
- private reconnectAttempts = 0;
97
- private reconnectTimer: any = null;
98
- private connectPromises = new Map<string, { resolve: () => void; reject: (error: Error) => void }>();
99
- private config: Required<WebSocketOptions> = {
100
- reconnectDelay: 5000,
101
- maxReconnectAttempts: 5,
102
- heartbeatIncoming: 10000,
103
- heartbeatOutgoing: 10000,
104
- debug: false,
105
- connectionHeaders: {},
106
- };
107
-
108
- // 建立连接
109
- public connect(): Promise<void> {
110
- if (this.state === ConnectionState.CONNECTED) { // 当前已连接不重复创建连接
111
- return Promise.resolve();
112
- }
113
- this.state = ConnectionState.CONNECTING;
114
- const { url: wsUrl, hydrocarbonToken, programCode } = getWebSocketConfig(this.url, this.config);
115
- return new Promise<void>((resolve, reject) => {
116
- const currentPromiseId = Date.now().toString();
117
- this.connectPromises.set(currentPromiseId, { resolve, reject });
118
- const { heartbeatIncoming, heartbeatOutgoing, reconnectDelay } = this.config;
119
- const socket = new SockJS(wsUrl);
120
- this.client = new Client({
121
- webSocketFactory: () => socket,
122
- debug: this.config.debug ? (str) => console.log('[STOMP]', str) : () => { },
123
- heartbeatIncoming,
124
- heartbeatOutgoing,
125
- reconnectDelay,
126
- connectHeaders: {
127
- "hydrocarbon-token": hydrocarbonToken,
128
- "hydrocarbon-program-token": programCode
129
- },
130
- onConnect: (frame) => { // 连接成功回调
131
- // console.log("连接成功:frame", frame);
132
- this.state = ConnectionState.CONNECTED;
133
- this.reconnectAttempts = 0;
134
- this.connectPromises.forEach(({ resolve }) => resolve());
135
- this.connectPromises.clear();
136
- this._restoreSubscriptions();
137
- this._flushQueue().catch(console.error);
138
- },
139
- onStompError: (frame: IFrame) => {
140
- console.error('[WS] ❌ STOMP 协议错误', frame);
141
- const error = new Error(frame.headers['message'] || 'STOMP Error');
142
- if (this.state !== ConnectionState.DISCONNECTED) {
143
- this.state = ConnectionState.DISCONNECTED;
144
- this.client = null;
145
- this._scheduleReconnect();
146
- }
147
- this.connectPromises.forEach(({ reject }) => reject(error));
148
- this.connectPromises.clear();
149
- },
150
- onWebSocketClose: () => {
151
- if ([ConnectionState.CONNECTED, ConnectionState.CONNECTING].includes(this.state)) {
152
- console.warn('[WS] ⚠️ 连接意外断开,准备重连...');
153
- this.state = ConnectionState.DISCONNECTED;
154
- this.client = null;
155
- this._scheduleReconnect(); // 断开重连
156
- }
157
- },
158
- onWebSocketError: (error) => {
159
- console.error('[WS] ❌ WebSocket 错误', error);
160
- const wsError = new Error('WebSocket Error');
161
- if (this.state !== ConnectionState.DISCONNECTED) {
162
- this.state = ConnectionState.DISCONNECTED;
163
- this.client = null;
164
- this._scheduleReconnect();
165
- }
166
- this.connectPromises.forEach(({ reject }) => reject(wsError));
167
- this.connectPromises.clear();
168
- },
169
- });
170
- this.client.activate();
171
- });
172
- }
173
-
174
- // 订阅请求
175
- public async subscribe<T = any>(topic: string, params: { [key: string]: any }, callback: (message: T, rawMessage: IMessage) => void): Promise<StompSubscription> {
176
- if (this.state === ConnectionState.CONNECTED && this.client) {
177
- return this._doSubscribe(topic, callback, params);
178
- } else {
179
- return new Promise((resolve, reject) => {
180
- this.operationQueue.push({
181
- type: 'SUBSCRIBE',
182
- payload: { topic, callback, resolve, reject, params },
183
- });
184
- });
185
- }
186
- }
187
-
188
- // 执行实际订阅
189
- private _doSubscribe<T>(topic: string, callback: (message: T, rawMessage: IMessage) => void, params: { [key: string]: any }): Promise<StompSubscription> {
190
- return new Promise((resolve, reject) => {
191
- if (!this.client) {
192
- reject(new Error('Client not initialized'));
193
- return;
194
- }
195
- try {
196
- const stompSub = this.client.subscribe(topic, (message: IMessage) => {
197
- try {
198
- let body: any = message.body;
199
- if (typeof message.body === 'string') {
200
- body = JSON.parse(message.body);
201
- }
202
- callback(body, message);
203
- } catch (e) {
204
- console.error('[WS] JSON 解析错误', e);
205
- callback(message.body as any, message);
206
- }
207
- }, params || {});
208
- // 3. 更新内存记录
209
- this.subscriptions.set(topic, {
210
- topic,
211
- callback,
212
- subscription: stompSub // 关键:确保新的 subscription 对象被保存
213
- });
214
- resolve(stompSub);
215
- } catch (error) {
216
- reject(error);
217
- }
218
- });
219
- }
220
-
221
- // 发送消息
222
- public send(destination: string, body: any): void {
223
- if (this.state === ConnectionState.CONNECTED && this.client) {
224
- try {
225
- this.client.publish({
226
- destination,
227
- body: typeof body === 'string' ? body : JSON.stringify(body),
228
- headers: { 'content-type': 'application/json' },
229
- });
230
- } catch (error) {
231
- console.error('[WS] 发送消息失败:', error);
232
- }
233
- } else {
234
- this.operationQueue.push({ type: 'SEND', payload: { destination, body } });
235
- }
236
- }
237
-
238
- // 取消订阅
239
- public unsubscribe(topic: string): boolean {
240
- const record = this.subscriptions.get(topic);
241
- if (record) {
242
- record.subscription?.unsubscribe();
243
- this.subscriptions.delete(topic);
244
- console.log(`[WS] 🚫 已取消订阅: ${topic}`);
245
- return true;
246
- }
247
- return false;
248
- }
249
-
250
- // 取消所有订阅
251
- public unsubscribeAll(): void {
252
- this.subscriptions.forEach((record) => {
253
- record.subscription?.unsubscribe();
254
- });
255
- this.subscriptions.clear();
256
- console.log('[WS] 🚫 已取消所有订阅');
257
- }
258
-
259
- // 断开连接
260
- public disconnect(): void {
261
- this.state = ConnectionState.DISCONNECTED;
262
- if (this.reconnectTimer) {
263
- clearTimeout(this.reconnectTimer);
264
- this.reconnectTimer = null;
265
- }
266
- if (this.client) {
267
- WebSocket.instances.delete(this.client.webSocket.url);
268
- this.client.deactivate();
269
- this.client = null;
270
- }
271
- this.unsubscribeAll();
272
- this.operationQueue = [];
273
- this.connectPromises.forEach(({ reject }) => {
274
- reject(new Error('Connection manually disconnected'));
275
- });
276
- this.connectPromises.clear();
277
- console.log('[WS] 🔌 客户端已主动断开');
278
- }
279
-
280
- // 当前订阅数量
281
- public getSubscriptionCount(): number {
282
- return this.subscriptions.size;
283
- }
284
-
285
- // 连接后恢复订阅
286
- private _restoreSubscriptions() {
287
- if (this.subscriptions.size === 0 || !this.client) return;
288
- console.log(`[WS] 🔄 正在恢复 ${this.subscriptions.size} 个订阅...`);
289
- this.subscriptions.forEach((record, topic) => {
290
- try {
291
- const stompSub = this.client.subscribe(topic, (message: IMessage) => {
292
- try {
293
- let body: any = message.body;
294
- if (typeof message.body === 'string') {
295
- body = JSON.parse(message.body);
296
- }
297
- record.callback(body, message);
298
- } catch (e) {
299
- record.callback(message.body, message);
300
- }
301
- });
302
- record.subscription = stompSub;
303
- } catch (error) {
304
- console.error(`[WS] 恢复订阅失败: ${topic}`, error);
305
- }
306
- });
307
- }
308
-
309
- // 订阅队列
310
- private async _flushQueue() {
311
- if (this.operationQueue.length === 0) return;
312
- // console.log(`[WS] 🚀 正在执行 ${this.operationQueue.length} 个排队操作...`);
313
- const queue = [...this.operationQueue];
314
- this.operationQueue = [];
315
- for (const op of queue) {
316
- try {
317
- if (op.type === 'SUBSCRIBE') {
318
- const { topic, callback, resolve, reject, params } = op.payload;
319
- try {
320
- const subscription = await this._doSubscribe(topic, callback, params);
321
- resolve(subscription);
322
- } catch (error) {
323
- reject(error);
324
- }
325
- } else if (op.type === 'SEND') {
326
- const { destination, body } = op.payload;
327
- this.send(destination, body);
328
- }
329
- } catch (error) {
330
- console.error('[WS] 执行队列操作失败:', error);
331
- }
332
- }
333
- }
334
-
335
- // 断连重连
336
- private _scheduleReconnect() {
337
- if (this.reconnectAttempts >= this.config.maxReconnectAttempts) {
338
- console.error('[WS] ❌ 重连失败:达到最大尝试次数');
339
- return;
340
- }
341
- if (![ConnectionState.RECONNECTING, ConnectionState.DISCONNECTED].includes(this.state)) {
342
- return;
343
- }
344
- this.reconnectAttempts++;
345
- const delay = Math.min(this.config.reconnectDelay * Math.pow(1.5, this.reconnectAttempts - 1), 60000);
346
- console.log(`[WS] ⏱️ ${delay}ms 后进行第 ${this.reconnectAttempts} 次重连...`);
347
- this.reconnectTimer = setTimeout(() => {
348
- this.connect().catch((err) => {
349
- if (this.state !== ConnectionState.DISCONNECTED) {
350
- console.error('[WS] 重连尝试异常:', err);
351
- }
352
- });
353
- }, delay);
354
- }
355
-
356
- // 判断是否已连接
357
- public isConnected(): boolean {
358
- return this.state === ConnectionState.CONNECTED;
359
- }
360
-
361
- // 获取所有订阅的topic
362
- public getSubscribedTopics(): string[] {
363
- return Array.from(this.subscriptions.keys());
364
- }
365
- }
366
-
1
+ import SockJS from 'sockjs-client';
2
+ import { Client, IFrame, IMessage, StompSubscription } from '@stomp/stompjs';
3
+ import Units from "../units";
4
+
5
+ /**
6
+ * 使用方法:
7
+ * const webSocket= WebSocket.getInstance(WS_URL); // 创建连接
8
+ * const subscribe = webSocket.subscribe('/topic/test',{}, (val)=>{console.log("推送的数据:",val)}); // 订阅
9
+ * subscribe.unsubscribe(); // 销毁订阅
10
+ * webSocket.disconnect(); // 关闭连接
11
+ */
12
+
13
+ // 获取订阅地址
14
+ const getWebSocketConfig = (path, options) => {
15
+ const serverKey = options.serverKey;
16
+ const header = options.connectionHeaders || {};
17
+ const programCode = header.programCode || Units.programCode(serverKey);
18
+ let server = new URL(options.hydrocarbonServer ? options.hydrocarbonServer : Units.api(serverKey));
19
+ let hydrocarbonToken = null;
20
+ if (header?.hydrocarbonToken) {
21
+ hydrocarbonToken = header.hydrocarbonToken;
22
+ } else if (serverKey) {
23
+ hydrocarbonToken = Units.serverHydrocarbonToken(serverKey)
24
+ } else if (Units.hydrocarbonToken(programCode)) {
25
+ hydrocarbonToken = Units.hydrocarbonToken(programCode);
26
+ } else {
27
+ hydrocarbonToken = Units.getAnoHydrocarbonToken()
28
+ }
29
+ const url = `${server.protocol}//${server.host}${server.pathname}/${path}`;
30
+ return { url, hydrocarbonToken, programCode };
31
+ }
32
+
33
+ export interface WebSocketOptions {
34
+ reconnectDelay?: number; // 重连间隔(ms)
35
+ maxReconnectAttempts?: number; // 最大重连次数
36
+ heartbeatIncoming?: number; // 接收心跳最大间隔
37
+ heartbeatOutgoing?: number; // 发送心跳最小间隔
38
+ debug?: boolean; // 是否开启调试日志
39
+ connectionHeaders?: { [key: string]: string }; // 创建连接请求头信息
40
+ }
41
+
42
+ // 全局订阅Map类型
43
+ interface SubscriptionRecord {
44
+ topic: string;
45
+ callback: (message: any, rawMessage: IMessage) => void;
46
+ subscription: StompSubscription | null;
47
+ }
48
+
49
+ // 订阅队列
50
+ interface QueuedOperation {
51
+ type: 'SUBSCRIBE' | 'SEND';
52
+ payload: any;
53
+ }
54
+
55
+ // 连接状态枚举
56
+ enum ConnectionState {
57
+ DISCONNECTED = 'DISCONNECTED', // 断开
58
+ CONNECTING = 'CONNECTING', // 连接中
59
+ CONNECTED = 'CONNECTED', // 已连接
60
+ RECONNECTING = 'RECONNECTING', // 重连中
61
+ }
62
+
63
+ class WebSocket {
64
+ private static instances = new Map<string, WebSocket>();
65
+
66
+ /**
67
+ * 获取单例实例的唯一入口
68
+ * @param url WebSocket 服务器地址
69
+ * @param options 配置项
70
+ * @returns 返回对应 URL 的唯一 WebSocket 实例
71
+ */
72
+ public static getInstance(url: string, options: WebSocketOptions = {}): WebSocket {
73
+ if (!WebSocket.instances.has(url)) {
74
+ // 注意:这里调用的是私有的构造函数
75
+ const instance = new WebSocket(url, options);
76
+ WebSocket.instances.set(url, instance);
77
+ }
78
+ return WebSocket.instances.get(url)!;
79
+ }
80
+
81
+ /**
82
+ * 私有构造函数
83
+ * 防止外部直接使用 new WebSocket() 导致单例失效
84
+ */
85
+ private constructor(url: string, options: WebSocketOptions = {}) {
86
+ this.url = url;
87
+ this.config = { ...this.config, ...options };
88
+ this.connect();
89
+ }
90
+
91
+ private url: string;
92
+ private client: Client | null = null;
93
+ private subscriptions = new Map<string, SubscriptionRecord>();
94
+ private operationQueue: QueuedOperation[] = [];
95
+ private state: ConnectionState = ConnectionState.DISCONNECTED;
96
+ private reconnectAttempts = 0;
97
+ private reconnectTimer: any = null;
98
+ private connectPromises = new Map<string, { resolve: () => void; reject: (error: Error) => void }>();
99
+ private config: Required<WebSocketOptions> = {
100
+ reconnectDelay: 5000,
101
+ maxReconnectAttempts: 5,
102
+ heartbeatIncoming: 10000,
103
+ heartbeatOutgoing: 10000,
104
+ debug: false,
105
+ connectionHeaders: {},
106
+ };
107
+
108
+ // 建立连接
109
+ public connect(): Promise<void> {
110
+ if (this.state === ConnectionState.CONNECTED) { // 当前已连接不重复创建连接
111
+ return Promise.resolve();
112
+ }
113
+ this.state = ConnectionState.CONNECTING;
114
+ const { url: wsUrl, hydrocarbonToken, programCode } = getWebSocketConfig(this.url, this.config);
115
+ return new Promise<void>((resolve, reject) => {
116
+ const currentPromiseId = Date.now().toString();
117
+ this.connectPromises.set(currentPromiseId, { resolve, reject });
118
+ const { heartbeatIncoming, heartbeatOutgoing, reconnectDelay } = this.config;
119
+ const socket = new SockJS(wsUrl);
120
+ this.client = new Client({
121
+ webSocketFactory: () => socket,
122
+ debug: this.config.debug ? (str) => console.log('[STOMP]', str) : () => { },
123
+ heartbeatIncoming,
124
+ heartbeatOutgoing,
125
+ reconnectDelay,
126
+ connectHeaders: {
127
+ "hydrocarbon-token": hydrocarbonToken,
128
+ "hydrocarbon-program-token": programCode
129
+ },
130
+ onConnect: (frame) => { // 连接成功回调
131
+ // console.log("连接成功:frame", frame);
132
+ this.state = ConnectionState.CONNECTED;
133
+ this.reconnectAttempts = 0;
134
+ this.connectPromises.forEach(({ resolve }) => resolve());
135
+ this.connectPromises.clear();
136
+ this._restoreSubscriptions();
137
+ this._flushQueue().catch(console.error);
138
+ },
139
+ onStompError: (frame: IFrame) => {
140
+ console.error('[WS] ❌ STOMP 协议错误', frame);
141
+ const error = new Error(frame.headers['message'] || 'STOMP Error');
142
+ if (this.state !== ConnectionState.DISCONNECTED) {
143
+ this.state = ConnectionState.DISCONNECTED;
144
+ this.client = null;
145
+ this._scheduleReconnect();
146
+ }
147
+ this.connectPromises.forEach(({ reject }) => reject(error));
148
+ this.connectPromises.clear();
149
+ },
150
+ onWebSocketClose: () => {
151
+ if ([ConnectionState.CONNECTED, ConnectionState.CONNECTING].includes(this.state)) {
152
+ console.warn('[WS] ⚠️ 连接意外断开,准备重连...');
153
+ this.state = ConnectionState.DISCONNECTED;
154
+ this.client = null;
155
+ this._scheduleReconnect(); // 断开重连
156
+ }
157
+ },
158
+ onWebSocketError: (error) => {
159
+ console.error('[WS] ❌ WebSocket 错误', error);
160
+ const wsError = new Error('WebSocket Error');
161
+ if (this.state !== ConnectionState.DISCONNECTED) {
162
+ this.state = ConnectionState.DISCONNECTED;
163
+ this.client = null;
164
+ this._scheduleReconnect();
165
+ }
166
+ this.connectPromises.forEach(({ reject }) => reject(wsError));
167
+ this.connectPromises.clear();
168
+ },
169
+ });
170
+ this.client.activate();
171
+ });
172
+ }
173
+
174
+ // 订阅请求
175
+ public async subscribe<T = any>(topic: string, params: { [key: string]: any }, callback: (message: T, rawMessage: IMessage) => void): Promise<StompSubscription> {
176
+ if (this.state === ConnectionState.CONNECTED && this.client) {
177
+ return this._doSubscribe(topic, callback, params);
178
+ } else {
179
+ return new Promise((resolve, reject) => {
180
+ this.operationQueue.push({
181
+ type: 'SUBSCRIBE',
182
+ payload: { topic, callback, resolve, reject, params },
183
+ });
184
+ });
185
+ }
186
+ }
187
+
188
+ // 执行实际订阅
189
+ private _doSubscribe<T>(topic: string, callback: (message: T, rawMessage: IMessage) => void, params: { [key: string]: any }): Promise<StompSubscription> {
190
+ return new Promise((resolve, reject) => {
191
+ if (!this.client) {
192
+ reject(new Error('Client not initialized'));
193
+ return;
194
+ }
195
+ try {
196
+ const stompSub = this.client.subscribe(topic, (message: IMessage) => {
197
+ try {
198
+ let body: any = message.body;
199
+ if (typeof message.body === 'string') {
200
+ body = JSON.parse(message.body);
201
+ }
202
+ callback(body, message);
203
+ } catch (e) {
204
+ console.error('[WS] JSON 解析错误', e);
205
+ callback(message.body as any, message);
206
+ }
207
+ }, params || {});
208
+ // 3. 更新内存记录
209
+ this.subscriptions.set(topic, {
210
+ topic,
211
+ callback,
212
+ subscription: stompSub // 关键:确保新的 subscription 对象被保存
213
+ });
214
+ resolve(stompSub);
215
+ } catch (error) {
216
+ reject(error);
217
+ }
218
+ });
219
+ }
220
+
221
+ // 发送消息
222
+ public send(destination: string, body: any): void {
223
+ if (this.state === ConnectionState.CONNECTED && this.client) {
224
+ try {
225
+ this.client.publish({
226
+ destination,
227
+ body: typeof body === 'string' ? body : JSON.stringify(body),
228
+ headers: { 'content-type': 'application/json' },
229
+ });
230
+ } catch (error) {
231
+ console.error('[WS] 发送消息失败:', error);
232
+ }
233
+ } else {
234
+ this.operationQueue.push({ type: 'SEND', payload: { destination, body } });
235
+ }
236
+ }
237
+
238
+ // 取消订阅
239
+ public unsubscribe(topic: string): boolean {
240
+ const record = this.subscriptions.get(topic);
241
+ if (record) {
242
+ record.subscription?.unsubscribe();
243
+ this.subscriptions.delete(topic);
244
+ console.log(`[WS] 🚫 已取消订阅: ${topic}`);
245
+ return true;
246
+ }
247
+ return false;
248
+ }
249
+
250
+ // 取消所有订阅
251
+ public unsubscribeAll(): void {
252
+ this.subscriptions.forEach((record) => {
253
+ record.subscription?.unsubscribe();
254
+ });
255
+ this.subscriptions.clear();
256
+ console.log('[WS] 🚫 已取消所有订阅');
257
+ }
258
+
259
+ // 断开连接
260
+ public disconnect(): void {
261
+ this.state = ConnectionState.DISCONNECTED;
262
+ if (this.reconnectTimer) {
263
+ clearTimeout(this.reconnectTimer);
264
+ this.reconnectTimer = null;
265
+ }
266
+ if (this.client) {
267
+ WebSocket.instances.delete(this.client.webSocket.url);
268
+ this.client.deactivate();
269
+ this.client = null;
270
+ }
271
+ this.unsubscribeAll();
272
+ this.operationQueue = [];
273
+ this.connectPromises.forEach(({ reject }) => {
274
+ reject(new Error('Connection manually disconnected'));
275
+ });
276
+ this.connectPromises.clear();
277
+ console.log('[WS] 🔌 客户端已主动断开');
278
+ }
279
+
280
+ // 当前订阅数量
281
+ public getSubscriptionCount(): number {
282
+ return this.subscriptions.size;
283
+ }
284
+
285
+ // 连接后恢复订阅
286
+ private _restoreSubscriptions() {
287
+ if (this.subscriptions.size === 0 || !this.client) return;
288
+ console.log(`[WS] 🔄 正在恢复 ${this.subscriptions.size} 个订阅...`);
289
+ this.subscriptions.forEach((record, topic) => {
290
+ try {
291
+ const stompSub = this.client.subscribe(topic, (message: IMessage) => {
292
+ try {
293
+ let body: any = message.body;
294
+ if (typeof message.body === 'string') {
295
+ body = JSON.parse(message.body);
296
+ }
297
+ record.callback(body, message);
298
+ } catch (e) {
299
+ record.callback(message.body, message);
300
+ }
301
+ });
302
+ record.subscription = stompSub;
303
+ } catch (error) {
304
+ console.error(`[WS] 恢复订阅失败: ${topic}`, error);
305
+ }
306
+ });
307
+ }
308
+
309
+ // 订阅队列
310
+ private async _flushQueue() {
311
+ if (this.operationQueue.length === 0) return;
312
+ // console.log(`[WS] 🚀 正在执行 ${this.operationQueue.length} 个排队操作...`);
313
+ const queue = [...this.operationQueue];
314
+ this.operationQueue = [];
315
+ for (const op of queue) {
316
+ try {
317
+ if (op.type === 'SUBSCRIBE') {
318
+ const { topic, callback, resolve, reject, params } = op.payload;
319
+ try {
320
+ const subscription = await this._doSubscribe(topic, callback, params);
321
+ resolve(subscription);
322
+ } catch (error) {
323
+ reject(error);
324
+ }
325
+ } else if (op.type === 'SEND') {
326
+ const { destination, body } = op.payload;
327
+ this.send(destination, body);
328
+ }
329
+ } catch (error) {
330
+ console.error('[WS] 执行队列操作失败:', error);
331
+ }
332
+ }
333
+ }
334
+
335
+ // 断连重连
336
+ private _scheduleReconnect() {
337
+ if (this.reconnectAttempts >= this.config.maxReconnectAttempts) {
338
+ console.error('[WS] ❌ 重连失败:达到最大尝试次数');
339
+ return;
340
+ }
341
+ if (![ConnectionState.RECONNECTING, ConnectionState.DISCONNECTED].includes(this.state)) {
342
+ return;
343
+ }
344
+ this.reconnectAttempts++;
345
+ const delay = Math.min(this.config.reconnectDelay * Math.pow(1.5, this.reconnectAttempts - 1), 60000);
346
+ console.log(`[WS] ⏱️ ${delay}ms 后进行第 ${this.reconnectAttempts} 次重连...`);
347
+ this.reconnectTimer = setTimeout(() => {
348
+ this.connect().catch((err) => {
349
+ if (this.state !== ConnectionState.DISCONNECTED) {
350
+ console.error('[WS] 重连尝试异常:', err);
351
+ }
352
+ });
353
+ }, delay);
354
+ }
355
+
356
+ // 判断是否已连接
357
+ public isConnected(): boolean {
358
+ return this.state === ConnectionState.CONNECTED;
359
+ }
360
+
361
+ // 获取所有订阅的topic
362
+ public getSubscribedTopics(): string[] {
363
+ return Array.from(this.subscriptions.keys());
364
+ }
365
+ }
366
+
367
367
  export default WebSocket;