aldehyde 0.2.488 → 0.2.490

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 (576) 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/decoration/decoration1/index.less +7 -7
  122. package/lib/lowcode-components/decoration/decoration10/index.js +3 -3
  123. package/lib/lowcode-components/decoration/decoration10/index.less +5 -5
  124. package/lib/lowcode-components/decoration/decoration11/index.less +5 -5
  125. package/lib/lowcode-components/decoration/decoration2/index.less +6 -6
  126. package/lib/lowcode-components/decoration/decoration3/index.less +7 -7
  127. package/lib/lowcode-components/decoration/decoration4/index.less +29 -29
  128. package/lib/lowcode-components/decoration/decoration5/index.less +3 -3
  129. package/lib/lowcode-components/decoration/decoration6/index.less +7 -7
  130. package/lib/lowcode-components/decoration/decoration7/index.less +4 -4
  131. package/lib/lowcode-components/decoration/decoration8/index.less +14 -14
  132. package/lib/lowcode-components/decoration/decoration9/index.less +4 -4
  133. package/lib/lowcode-components/effectScatter-map/index.js +6 -6
  134. package/lib/lowcode-components/effectScatter-map-3d/index.js +6 -6
  135. package/lib/lowcode-components/lowcode-view/index.less +19 -19
  136. package/lib/lowcode-components/search-form/index.less +25 -25
  137. package/lib/module/dtmpl-edit-card.d.ts.map +1 -1
  138. package/lib/module/dtmpl-edit-page.d.ts.map +1 -1
  139. package/lib/module/index.less +4 -4
  140. package/lib/module/ltmpl-modal.d.ts.map +1 -1
  141. package/lib/module/ltmpl-table.d.ts.map +1 -1
  142. package/lib/routable/index.less +25 -25
  143. package/lib/table/act-table.d.ts.map +1 -1
  144. package/lib/table/column/index.less +85 -85
  145. package/lib/table/index.css +211 -211
  146. package/lib/table/modal-select-table.d.ts.map +1 -1
  147. package/lib/table/page-chart.d.ts +1 -1
  148. package/lib/table/page-chart.d.ts.map +1 -1
  149. package/lib/table/page-chart.js +4 -1
  150. package/lib/table/page-chart.js.map +1 -1
  151. package/lib/table/page-chart.less +9 -9
  152. package/lib/table/pagination.css +14 -14
  153. package/lib/table/pagination.d.ts.map +1 -1
  154. package/lib/table/relation-table.d.ts.map +1 -1
  155. package/lib/table/selected-rows-card.d.ts.map +1 -1
  156. package/lib/table/stat/restat.d.ts.map +1 -1
  157. package/lib/tree/act-tree.d.ts.map +1 -1
  158. package/lib/tree/block-menu-auth-tree.d.ts.map +1 -1
  159. package/lib/tree/index.css +22 -22
  160. package/lib/tree/tmpl-tree.d.ts.map +1 -1
  161. package/lib/welcome/components/menu-card.less +96 -96
  162. package/lib/welcome/components/page-card.less +49 -49
  163. package/lib/welcome/components/quick-entrance.less +120 -120
  164. package/lib/welcome/components/user-menus.less +192 -192
  165. package/lib/welcome/components/workbench.less +118 -118
  166. package/lib/welcome/index.css +13 -13
  167. package/package.json +224 -224
  168. package/src/aldehyde/controls/2dEditor/2dEditor/index.less +5 -5
  169. package/src/aldehyde/controls/2dEditor/2dEditor/index.tsx +270 -270
  170. package/src/aldehyde/controls/2dEditor/2dView/index.less +8 -8
  171. package/src/aldehyde/controls/2dEditor/2dView/index.tsx +110 -110
  172. package/src/aldehyde/controls/2dEditor/components/card.tsx +256 -256
  173. package/src/aldehyde/controls/2dEditor/components/component.less +83 -83
  174. package/src/aldehyde/controls/2dEditor/components/data.d.ts +32 -32
  175. package/src/aldehyde/controls/2dEditor/components/hotspot.tsx +80 -80
  176. package/src/aldehyde/controls/2dEditor/components/html-box.tsx +101 -101
  177. package/src/aldehyde/controls/2dEditor/components/image.tsx +99 -99
  178. package/src/aldehyde/controls/2dEditor/components/line.tsx +73 -73
  179. package/src/aldehyde/controls/action/index.css +8 -8
  180. package/src/aldehyde/controls/action/index.tsx +406 -406
  181. package/src/aldehyde/controls/action/utils.tsx +306 -306
  182. package/src/aldehyde/controls/auto-complete/index.tsx +82 -82
  183. package/src/aldehyde/controls/cascader/index.tsx +112 -112
  184. package/src/aldehyde/controls/chemstruc/graph.tsx +185 -185
  185. package/src/aldehyde/controls/chemstruc/index.css +28 -28
  186. package/src/aldehyde/controls/code-editor/sql-code-editor.tsx +73 -73
  187. package/src/aldehyde/controls/collapse-card/index.css +8 -8
  188. package/src/aldehyde/controls/collapse-card/index.tsx +109 -109
  189. package/src/aldehyde/controls/color-picker/index.tsx +21 -21
  190. package/src/aldehyde/controls/counting-tag/index.tsx +53 -53
  191. package/src/aldehyde/controls/cquery/cquick-button.tsx +145 -145
  192. package/src/aldehyde/controls/date-picker/index.tsx +199 -199
  193. package/src/aldehyde/controls/direct-file-view/drawer-file-view.tsx +54 -54
  194. package/src/aldehyde/controls/direct-file-view/index.tsx +147 -147
  195. package/src/aldehyde/controls/direct-upload/index.tsx +140 -140
  196. package/src/aldehyde/controls/entity-select/entity-select.tsx +791 -791
  197. package/src/aldehyde/controls/entity-select/index.css +7 -7
  198. package/src/aldehyde/controls/entity-select/lab-tree-select.tsx +154 -154
  199. package/src/aldehyde/controls/entity-select/popover-entity-select.tsx +205 -205
  200. package/src/aldehyde/controls/entry-control.tsx +431 -431
  201. package/src/aldehyde/controls/enum-badge/index.tsx +42 -42
  202. package/src/aldehyde/controls/enum-tag/index.tsx +45 -45
  203. package/src/aldehyde/controls/field-history/index.tsx +81 -81
  204. package/src/aldehyde/controls/file-export/select-code-export.tsx +40 -40
  205. package/src/aldehyde/controls/file-view/drawer-file-view.tsx +117 -117
  206. package/src/aldehyde/controls/file-view/index.less +9 -9
  207. package/src/aldehyde/controls/file-view/index.tsx +148 -148
  208. package/src/aldehyde/controls/file-view/multi-file-view.tsx +39 -39
  209. package/src/aldehyde/controls/file-view/newin-file-view.tsx +40 -40
  210. package/src/aldehyde/controls/html-editor/draft.tsx +136 -136
  211. package/src/aldehyde/controls/html-editor/index.less +67 -67
  212. package/src/aldehyde/controls/icon-selector/app-icon-selector.tsx +68 -68
  213. package/src/aldehyde/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.css +147 -147
  214. package/src/aldehyde/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.json +240 -240
  215. package/src/aldehyde/controls/icon-selector/pc-icon-selector.tsx +68 -68
  216. package/src/aldehyde/controls/input-number/index.tsx +148 -148
  217. package/src/aldehyde/controls/input-range/index.tsx +59 -59
  218. package/src/aldehyde/controls/password-setter/index.css +2 -2
  219. package/src/aldehyde/controls/password-setter/index.js +88 -88
  220. package/src/aldehyde/controls/progress/index.tsx +74 -74
  221. package/src/aldehyde/controls/qr-code/index.less +28 -28
  222. package/src/aldehyde/controls/qr-code/index.tsx +40 -40
  223. package/src/aldehyde/controls/relation-existion/index.css +3 -3
  224. package/src/aldehyde/controls/relation-existion/index.tsx +144 -144
  225. package/src/aldehyde/controls/rfield/index.css +4 -4
  226. package/src/aldehyde/controls/rfield/index.tsx +225 -225
  227. package/src/aldehyde/controls/select/index.tsx +226 -226
  228. package/src/aldehyde/controls/signature/index.tsx +226 -226
  229. package/src/aldehyde/controls/single-checkbox/index.tsx +18 -18
  230. package/src/aldehyde/controls/steps/index.tsx +59 -59
  231. package/src/aldehyde/controls/text/ellipsis-text.tsx +98 -98
  232. package/src/aldehyde/controls/text/index.less +7 -7
  233. package/src/aldehyde/controls/tree-select/navigation-tree.tsx +122 -122
  234. package/src/aldehyde/controls/tree-select/tree-entity-select.tsx +121 -121
  235. package/src/aldehyde/controls/upload/index.tsx +128 -128
  236. package/src/aldehyde/controls/upload/mult-file-upload.tsx +240 -240
  237. package/src/aldehyde/controls/upload-read-excel/index.tsx +43 -43
  238. package/src/aldehyde/controls/view-control.tsx +289 -289
  239. package/src/aldehyde/custom-page/custom-detail-modal-page.tsx +69 -69
  240. package/src/aldehyde/custom-page/custom-page-router.tsx +64 -64
  241. package/src/aldehyde/custom-page/def-custom-page.tsx +17 -17
  242. package/src/aldehyde/custom-page/dtmpl-custom-edit-modal-page.tsx +88 -88
  243. package/src/aldehyde/detail/button/bottom-submit-button-bar.tsx +91 -91
  244. package/src/aldehyde/detail/button/cquery-button-bar.tsx +144 -144
  245. package/src/aldehyde/detail/button/edit-button.tsx +61 -61
  246. package/src/aldehyde/detail/button/fix-right-submit-button-bar.tsx +186 -186
  247. package/src/aldehyde/detail/button/index.css +42 -42
  248. package/src/aldehyde/detail/button/inline-edit-button.tsx +40 -40
  249. package/src/aldehyde/detail/button/submit-button-bar.tsx +57 -57
  250. package/src/aldehyde/detail/button/view-button.tsx +64 -64
  251. package/src/aldehyde/detail/dtmpl.css +72 -72
  252. package/src/aldehyde/detail/edit/dtmpl-edit.tsx +279 -279
  253. package/src/aldehyde/detail/edit/fields-edit-card.tsx +145 -145
  254. package/src/aldehyde/detail/edit/modal-row-edit.tsx +95 -95
  255. package/src/aldehyde/detail/edit/popover-edit-card.tsx +167 -167
  256. package/src/aldehyde/detail/edit/popover-editor.tsx +70 -70
  257. package/src/aldehyde/detail/edit/post-result/index.tsx +86 -86
  258. package/src/aldehyde/detail/rightbar/index.css +34 -34
  259. package/src/aldehyde/detail/rightbar/index.tsx +92 -92
  260. package/src/aldehyde/detail/tooltipbar/index.tsx +32 -32
  261. package/src/aldehyde/detail/view/act-dtmpl-view.tsx +288 -288
  262. package/src/aldehyde/detail/view/dtmpl-view.tsx +334 -334
  263. package/src/aldehyde/detail/view/field-view-group.tsx +88 -88
  264. package/src/aldehyde/detail/view/modal-dtmpl-view.tsx +73 -73
  265. package/src/aldehyde/detail/view/snapshot-timeline.tsx +231 -231
  266. package/src/aldehyde/detail/view/tab-act-dtmpl-view.tsx +304 -304
  267. package/src/aldehyde/detail/view/view-compare-panel.tsx +57 -57
  268. package/src/aldehyde/draw-canvas-edit/components/render/components/index.less +60 -60
  269. package/src/aldehyde/draw-canvas-edit/components/render/components/index.ts +3 -3
  270. package/src/aldehyde/draw-canvas-edit/components/render/components/workstation-component.tsx +220 -220
  271. package/src/aldehyde/draw-canvas-edit/components/render/draws/bg-draw.ts +177 -177
  272. package/src/aldehyde/draw-canvas-edit/components/render/draws/contextmenu-draw.ts +330 -330
  273. package/src/aldehyde/draw-canvas-edit/components/render/draws/graph-draw.ts +249 -249
  274. package/src/aldehyde/draw-canvas-edit/components/render/draws/link-draw.ts +1415 -1415
  275. package/src/aldehyde/draw-canvas-edit/components/render/draws/preview-draw.ts +274 -274
  276. package/src/aldehyde/draw-canvas-edit/components/render/draws/ref-line-draw.ts +71 -71
  277. package/src/aldehyde/draw-canvas-edit/components/render/draws/ruler-draw.ts +166 -166
  278. package/src/aldehyde/draw-canvas-edit/components/render/graphs/bezier.ts +542 -542
  279. package/src/aldehyde/draw-canvas-edit/components/render/handlers/drag-outside-handlers.ts +77 -77
  280. package/src/aldehyde/draw-canvas-edit/components/render/handlers/selection-handlers.ts +410 -410
  281. package/src/aldehyde/draw-canvas-edit/components/render/index.ts +817 -817
  282. package/src/aldehyde/draw-canvas-edit/components/render/tools/attract-tool.ts +457 -457
  283. package/src/aldehyde/draw-canvas-edit/components/render/tools/component-factory.ts +269 -269
  284. package/src/aldehyde/draw-canvas-edit/components/render/tools/copy-tool.ts +244 -244
  285. package/src/aldehyde/draw-canvas-edit/components/render/tools/import-export-tool.ts +588 -588
  286. package/src/aldehyde/draw-canvas-edit/components/render/tools/index.ts +10 -10
  287. package/src/aldehyde/draw-canvas-edit/components/render/tools/position-tool.ts +191 -191
  288. package/src/aldehyde/draw-canvas-edit/components/render/tools/selection-tool.ts +140 -140
  289. package/src/aldehyde/draw-canvas-edit/components/render/types.ts +298 -298
  290. package/src/aldehyde/draw-canvas-edit/components/setting-form/index.tsx +305 -305
  291. package/src/aldehyde/draw-canvas-edit/constant.ts +5 -5
  292. package/src/aldehyde/draw-canvas-edit/index.less +48 -48
  293. package/src/aldehyde/draw-canvas-edit/index.tsx +213 -213
  294. package/src/aldehyde/draw-canvas-view/index.less +66 -66
  295. package/src/aldehyde/draw-canvas-view/index.tsx +49 -49
  296. package/src/aldehyde/draw-canvas-view/view.tsx +237 -237
  297. package/src/aldehyde/export/export-frame.css +2 -2
  298. package/src/aldehyde/export/export-frame.tsx +301 -301
  299. package/src/aldehyde/export/select-code-export-frame.tsx +212 -212
  300. package/src/aldehyde/form/criteria-form.tsx +604 -604
  301. package/src/aldehyde/form/dtmpl-form.css +3 -3
  302. package/src/aldehyde/form/dtmpl-form.tsx +571 -571
  303. package/src/aldehyde/form/field-group-form.tsx +103 -103
  304. package/src/aldehyde/form/fields-form.tsx +45 -45
  305. package/src/aldehyde/form/form-Item-group.tsx +246 -246
  306. package/src/aldehyde/form/index.css +12 -12
  307. package/src/aldehyde/hooks/use-match-route/index.tsx +62 -62
  308. package/src/aldehyde/hooks/use-tabs/index.tsx +139 -139
  309. package/src/aldehyde/hooks/useVarCssColor.ts +6 -6
  310. package/src/aldehyde/icon/aliIcon.tsx +9 -9
  311. package/src/aldehyde/icon/index.tsx +28 -28
  312. package/src/aldehyde/import/excel-import.tsx +450 -450
  313. package/src/aldehyde/import/index.css +53 -53
  314. package/src/aldehyde/import/template.css +50 -50
  315. package/src/aldehyde/index.tsx +220 -220
  316. package/src/aldehyde/layout/MainPage.tsx +334 -334
  317. package/src/aldehyde/layout/common.css +64 -64
  318. package/src/aldehyde/layout/coverstyle.css +51 -51
  319. package/src/aldehyde/layout/footer/index.css +5 -5
  320. package/src/aldehyde/layout/footer/index.js +17 -17
  321. package/src/aldehyde/layout/header/index.css +122 -122
  322. package/src/aldehyde/layout/header/index.tsx +152 -152
  323. package/src/aldehyde/layout/menu/block.css +7 -7
  324. package/src/aldehyde/layout/menu/block.tsx +174 -174
  325. package/src/aldehyde/layout/menu/l2menu-message-bar.tsx +160 -160
  326. package/src/aldehyde/layout/menu/l2menu-quick-bar.tsx +175 -175
  327. package/src/aldehyde/layout/menu/menu-2layers.tsx +117 -117
  328. package/src/aldehyde/layout/menu/menu-render.tsx +168 -168
  329. package/src/aldehyde/layout/menu/message-bar.less +73 -73
  330. package/src/aldehyde/layout/menu/reset-password.tsx +255 -255
  331. package/src/aldehyde/layout/menu/user-bar.tsx +259 -259
  332. package/src/aldehyde/layout/menu/userinfo-bar.tsx +69 -69
  333. package/src/aldehyde/layout/sidebar/index.css +57 -57
  334. package/src/aldehyde/layout/sidebar/index.tsx +84 -84
  335. package/src/aldehyde/layout2/components/icon-font.tsx +7 -7
  336. package/src/aldehyde/layout2/components/screenfull-button.tsx +21 -21
  337. package/src/aldehyde/layout2/components/search-menu.tsx +85 -85
  338. package/src/aldehyde/layout2/components/system-messages.tsx +75 -75
  339. package/src/aldehyde/layout2/components/theme-button.tsx +65 -65
  340. package/src/aldehyde/layout2/components/user-button.tsx +258 -258
  341. package/src/aldehyde/layout2/components/user-notification.tsx +74 -74
  342. package/src/aldehyde/layout2/css/header.css +41 -41
  343. package/src/aldehyde/layout2/css/sider.less +17 -17
  344. package/src/aldehyde/layout2/css/tabs-layout.less +18 -18
  345. package/src/aldehyde/layout2/header.tsx +278 -278
  346. package/src/aldehyde/layout2/layout-context.tsx +95 -95
  347. package/src/aldehyde/layout2/main.tsx +30 -30
  348. package/src/aldehyde/layout2/page.tsx +315 -315
  349. package/src/aldehyde/layout2/sider.tsx +230 -230
  350. package/src/aldehyde/layout2/tabs/tabs-context.tsx +37 -37
  351. package/src/aldehyde/layout2/tabs/tabs-layout.tsx +146 -146
  352. package/src/aldehyde/layout2/type/layout-type.ts +15 -15
  353. package/src/aldehyde/layout2/util/menu-util.tsx +125 -125
  354. package/src/aldehyde/layout3/components/tabs-layout.tsx +110 -110
  355. package/src/aldehyde/layout3/components/time.tsx +25 -25
  356. package/src/aldehyde/layout3/css/header.less +195 -195
  357. package/src/aldehyde/layout3/css/main.less +161 -161
  358. package/src/aldehyde/layout3/css/sider.less +32 -32
  359. package/src/aldehyde/layout3/css/tabs-layout.less +38 -38
  360. package/src/aldehyde/layout3/header.tsx +187 -187
  361. package/src/aldehyde/layout3/main.tsx +29 -29
  362. package/src/aldehyde/layout3/page.tsx +110 -110
  363. package/src/aldehyde/layout3/sider.tsx +198 -198
  364. package/src/aldehyde/layout4/components/tabs-layout.tsx +110 -110
  365. package/src/aldehyde/layout4/css/header.less +196 -196
  366. package/src/aldehyde/layout4/css/main.less +154 -154
  367. package/src/aldehyde/layout4/css/sider.less +37 -37
  368. package/src/aldehyde/layout4/css/tabs-layout.less +42 -42
  369. package/src/aldehyde/layout4/header.tsx +190 -190
  370. package/src/aldehyde/layout4/main.tsx +29 -29
  371. package/src/aldehyde/layout4/page.tsx +125 -125
  372. package/src/aldehyde/layout4/sider.tsx +201 -201
  373. package/src/aldehyde/layout5/css/header.less +35 -35
  374. package/src/aldehyde/layout5/css/sider.less +18 -18
  375. package/src/aldehyde/layout5/header.tsx +204 -204
  376. package/src/aldehyde/layout5/page.tsx +107 -107
  377. package/src/aldehyde/layout5/sider.tsx +235 -235
  378. package/src/aldehyde/list/calendar/index.less +20 -20
  379. package/src/aldehyde/list/calendar/index.tsx +157 -157
  380. package/src/aldehyde/list/card-list/card-list-item.tsx +112 -112
  381. package/src/aldehyde/list/card-list/index.less +154 -154
  382. package/src/aldehyde/list/card-list/index.tsx +83 -83
  383. package/src/aldehyde/list/gantt/index.less +8 -8
  384. package/src/aldehyde/list/gantt/index.tsx +508 -508
  385. package/src/aldehyde/list/vertical-list/index.less +208 -208
  386. package/src/aldehyde/list/vertical-list/index.tsx +55 -55
  387. package/src/aldehyde/list/vertical-list/item.tsx +136 -136
  388. package/src/aldehyde/locale/LocaleButton.tsx +48 -48
  389. package/src/aldehyde/locale/LocaleProvider.tsx +265 -265
  390. package/src/aldehyde/locale/langMp.ts +45 -45
  391. package/src/aldehyde/locale/translate.ts +80 -80
  392. package/src/aldehyde/locale/useLocale.ts +72 -72
  393. package/src/aldehyde/login/context-setter.tsx +130 -130
  394. package/src/aldehyde/login/index.css +19 -19
  395. package/src/aldehyde/login/login.tsx +255 -255
  396. package/src/aldehyde/login/router-login.tsx +107 -107
  397. package/src/aldehyde/login/vertify/index.css +143 -143
  398. package/src/aldehyde/login/vertify/index.tsx +360 -360
  399. package/src/aldehyde/login/vertify/tool.ts +13 -13
  400. package/src/aldehyde/login2/login-page.tsx +92 -92
  401. package/src/aldehyde/login2/login.tsx +227 -227
  402. package/src/aldehyde/login3/index.less +136 -136
  403. package/src/aldehyde/login3/login-page.tsx +71 -71
  404. package/src/aldehyde/lowcode-components/act-table/index.less +26 -26
  405. package/src/aldehyde/lowcode-components/act-table/index.tsx +139 -139
  406. package/src/aldehyde/lowcode-components/assets/lowcode-constant.tsx +12 -12
  407. package/src/aldehyde/lowcode-components/bar-chart/index.tsx +272 -272
  408. package/src/aldehyde/lowcode-components/base-button/index.less +7 -7
  409. package/src/aldehyde/lowcode-components/base-button/index.tsx +197 -197
  410. package/src/aldehyde/lowcode-components/base-image/index.tsx +220 -220
  411. package/src/aldehyde/lowcode-components/base-map/index.tsx +292 -292
  412. package/src/aldehyde/lowcode-components/base-radio/index.less +23 -23
  413. package/src/aldehyde/lowcode-components/base-radio/index.tsx +157 -157
  414. package/src/aldehyde/lowcode-components/base-table/index.tsx +268 -268
  415. package/src/aldehyde/lowcode-components/base-tabs/index.less +14 -14
  416. package/src/aldehyde/lowcode-components/base-tabs/index.tsx +183 -183
  417. package/src/aldehyde/lowcode-components/base-text/index.tsx +58 -58
  418. package/src/aldehyde/lowcode-components/border/border1/index.tsx +70 -70
  419. package/src/aldehyde/lowcode-components/border/border10/index.less +26 -26
  420. package/src/aldehyde/lowcode-components/border/border10/index.tsx +45 -45
  421. package/src/aldehyde/lowcode-components/border/border11/index.less +17 -17
  422. package/src/aldehyde/lowcode-components/border/border11/index.tsx +232 -232
  423. package/src/aldehyde/lowcode-components/border/border12/index.less +13 -13
  424. package/src/aldehyde/lowcode-components/border/border12/index.tsx +115 -115
  425. package/src/aldehyde/lowcode-components/border/border13/index.less +13 -13
  426. package/src/aldehyde/lowcode-components/border/border13/index.tsx +69 -69
  427. package/src/aldehyde/lowcode-components/border/border2/index.less +17 -17
  428. package/src/aldehyde/lowcode-components/border/border2/index.tsx +51 -51
  429. package/src/aldehyde/lowcode-components/border/border3/index.less +25 -25
  430. package/src/aldehyde/lowcode-components/border/border3/index.tsx +61 -61
  431. package/src/aldehyde/lowcode-components/border/border4/index.less +72 -72
  432. package/src/aldehyde/lowcode-components/border/border4/index.tsx +79 -79
  433. package/src/aldehyde/lowcode-components/border/border5/index.less +35 -35
  434. package/src/aldehyde/lowcode-components/border/border5/index.tsx +75 -75
  435. package/src/aldehyde/lowcode-components/border/border6/index.less +17 -17
  436. package/src/aldehyde/lowcode-components/border/border6/index.tsx +60 -60
  437. package/src/aldehyde/lowcode-components/border/border7/index.less +26 -26
  438. package/src/aldehyde/lowcode-components/border/border7/index.tsx +75 -75
  439. package/src/aldehyde/lowcode-components/border/border8/index.less +13 -13
  440. package/src/aldehyde/lowcode-components/border/border8/index.tsx +84 -84
  441. package/src/aldehyde/lowcode-components/border/border9/index.less +13 -13
  442. package/src/aldehyde/lowcode-components/border/border9/index.tsx +154 -154
  443. package/src/aldehyde/lowcode-components/capsule-bar-chart/index.tsx +290 -290
  444. package/src/aldehyde/lowcode-components/carousel/index.tsx +218 -218
  445. package/src/aldehyde/lowcode-components/circular-progress-chart/index.tsx +263 -263
  446. package/src/aldehyde/lowcode-components/column-3d-chart/index.tsx +442 -442
  447. package/src/aldehyde/lowcode-components/column-chart/index.tsx +297 -297
  448. package/src/aldehyde/lowcode-components/data-number/index.tsx +219 -219
  449. package/src/aldehyde/lowcode-components/data.d.ts +19 -19
  450. package/src/aldehyde/lowcode-components/decoration/decoration1/index.less +7 -7
  451. package/src/aldehyde/lowcode-components/decoration/decoration1/index.tsx +153 -153
  452. package/src/aldehyde/lowcode-components/decoration/decoration10/index.less +5 -5
  453. package/src/aldehyde/lowcode-components/decoration/decoration10/index.tsx +89 -89
  454. package/src/aldehyde/lowcode-components/decoration/decoration11/index.less +5 -5
  455. package/src/aldehyde/lowcode-components/decoration/decoration11/index.tsx +133 -133
  456. package/src/aldehyde/lowcode-components/decoration/decoration2/index.less +6 -6
  457. package/src/aldehyde/lowcode-components/decoration/decoration2/index.tsx +61 -61
  458. package/src/aldehyde/lowcode-components/decoration/decoration3/index.less +7 -7
  459. package/src/aldehyde/lowcode-components/decoration/decoration3/index.tsx +87 -87
  460. package/src/aldehyde/lowcode-components/decoration/decoration4/index.less +29 -29
  461. package/src/aldehyde/lowcode-components/decoration/decoration4/index.tsx +53 -53
  462. package/src/aldehyde/lowcode-components/decoration/decoration5/index.less +3 -3
  463. package/src/aldehyde/lowcode-components/decoration/decoration5/index.tsx +116 -116
  464. package/src/aldehyde/lowcode-components/decoration/decoration6/index.less +7 -7
  465. package/src/aldehyde/lowcode-components/decoration/decoration6/index.tsx +121 -121
  466. package/src/aldehyde/lowcode-components/decoration/decoration7/index.less +4 -4
  467. package/src/aldehyde/lowcode-components/decoration/decoration7/index.tsx +70 -70
  468. package/src/aldehyde/lowcode-components/decoration/decoration8/index.less +14 -14
  469. package/src/aldehyde/lowcode-components/decoration/decoration8/index.tsx +122 -122
  470. package/src/aldehyde/lowcode-components/decoration/decoration9/index.less +4 -4
  471. package/src/aldehyde/lowcode-components/decoration/decoration9/index.tsx +196 -196
  472. package/src/aldehyde/lowcode-components/effectScatter-map/index.tsx +315 -315
  473. package/src/aldehyde/lowcode-components/effectScatter-map-3d/index.tsx +419 -419
  474. package/src/aldehyde/lowcode-components/gauge-chart/index.tsx +254 -254
  475. package/src/aldehyde/lowcode-components/index.ts +130 -130
  476. package/src/aldehyde/lowcode-components/line-bar-chart/index.tsx +304 -304
  477. package/src/aldehyde/lowcode-components/line-chart/index.tsx +294 -294
  478. package/src/aldehyde/lowcode-components/liquid-chart/index.tsx +250 -250
  479. package/src/aldehyde/lowcode-components/lowcode-view/component/assets.ts +478 -478
  480. package/src/aldehyde/lowcode-components/lowcode-view/component/component-controller.ts +153 -153
  481. package/src/aldehyde/lowcode-components/lowcode-view/component/component-definition.ts +23 -23
  482. package/src/aldehyde/lowcode-components/lowcode-view/component/loading.tsx +20 -20
  483. package/src/aldehyde/lowcode-components/lowcode-view/component/util.ts +27 -27
  484. package/src/aldehyde/lowcode-components/lowcode-view/index.less +19 -19
  485. package/src/aldehyde/lowcode-components/lowcode-view/index.tsx +277 -277
  486. package/src/aldehyde/lowcode-components/lowcode-view/interface.ts +189 -189
  487. package/src/aldehyde/lowcode-components/pie-chart/index.tsx +353 -353
  488. package/src/aldehyde/lowcode-components/progress-chart/index.tsx +295 -295
  489. package/src/aldehyde/lowcode-components/radar-chart/index.tsx +322 -322
  490. package/src/aldehyde/lowcode-components/search-form/index.less +25 -25
  491. package/src/aldehyde/lowcode-components/search-form/index.tsx +121 -121
  492. package/src/aldehyde/lowcode-components/stroke-animation/index.tsx +219 -219
  493. package/src/aldehyde/module/block-menu-tree-drawer.tsx +118 -118
  494. package/src/aldehyde/module/criteria-page.tsx1 +175 -175
  495. package/src/aldehyde/module/draggable-modal.tsx +66 -66
  496. package/src/aldehyde/module/dtmpl-edit-card.tsx +477 -477
  497. package/src/aldehyde/module/dtmpl-edit-drawer.tsx +23 -23
  498. package/src/aldehyde/module/dtmpl-edit-modal.tsx +25 -25
  499. package/src/aldehyde/module/dtmpl-edit-page.tsx +597 -597
  500. package/src/aldehyde/module/dtmpl-editor.tsx +165 -165
  501. package/src/aldehyde/module/dtmpl-view-card.tsx +64 -64
  502. package/src/aldehyde/module/dtmpl-view-drawer.tsx +71 -71
  503. package/src/aldehyde/module/dtmpl-view-modal.tsx +56 -56
  504. package/src/aldehyde/module/embed-dtmpl-edit-page.tsx +137 -137
  505. package/src/aldehyde/module/index.less +4 -4
  506. package/src/aldehyde/module/ltmpl-drawer.tsx +60 -60
  507. package/src/aldehyde/module/ltmpl-modal.tsx +63 -63
  508. package/src/aldehyde/module/ltmpl-table.tsx +379 -379
  509. package/src/aldehyde/module/ttmpl-tree.tsx +47 -47
  510. package/src/aldehyde/routable/dtmpl-route.tsx +173 -173
  511. package/src/aldehyde/routable/import-route.tsx +35 -35
  512. package/src/aldehyde/routable/index.less +25 -25
  513. package/src/aldehyde/routable/ltmpl-route.tsx +539 -539
  514. package/src/aldehyde/routable/splitview-ltmpl-route.tsx +377 -377
  515. package/src/aldehyde/routable/ttmpl-route.tsx +93 -93
  516. package/src/aldehyde/routable/withroute.tsx +36 -36
  517. package/src/aldehyde/sso-Login/index.tsx +73 -73
  518. package/src/aldehyde/sso-Login/service/index.js +16 -16
  519. package/src/aldehyde/sso-Login/service/login.js +75 -75
  520. package/src/aldehyde/table/act-table.tsx +1844 -1844
  521. package/src/aldehyde/table/column/column-builder.tsx +876 -876
  522. package/src/aldehyde/table/column/column-selector.tsx +130 -130
  523. package/src/aldehyde/table/column/index.less +85 -85
  524. package/src/aldehyde/table/column/summary-builder.tsx +712 -712
  525. package/src/aldehyde/table/column/theme-color-getter.tsx +25 -25
  526. package/src/aldehyde/table/control-table-x-axis-wrapper.tsx +80 -80
  527. package/src/aldehyde/table/index.css +211 -211
  528. package/src/aldehyde/table/l2-act-table.tsx +91 -91
  529. package/src/aldehyde/table/modal-select-table.tsx +308 -308
  530. package/src/aldehyde/table/page-chart.less +9 -9
  531. package/src/aldehyde/table/page-chart.tsx +196 -192
  532. package/src/aldehyde/table/page-config-button.tsx +203 -203
  533. package/src/aldehyde/table/pagination.css +14 -14
  534. package/src/aldehyde/table/pagination.tsx +81 -81
  535. package/src/aldehyde/table/query-table.tsx +668 -668
  536. package/src/aldehyde/table/relation-table.tsx +1078 -1078
  537. package/src/aldehyde/table/report-table.tsx +125 -125
  538. package/src/aldehyde/table/resizable-table.tsx +97 -97
  539. package/src/aldehyde/table/row-table.tsx +22 -22
  540. package/src/aldehyde/table/select-table.tsx +559 -559
  541. package/src/aldehyde/table/selected-rows-card.tsx +78 -78
  542. package/src/aldehyde/table/stat/restat.tsx +122 -122
  543. package/src/aldehyde/table/table-util.tsx +25 -25
  544. package/src/aldehyde/tmpl/control-type-supportor.tsx +154 -154
  545. package/src/aldehyde/tmpl/hc-data-source.tsx +574 -574
  546. package/src/aldehyde/tmpl/hcservice-v3.tsx +1590 -1590
  547. package/src/aldehyde/tmpl/interface.tsx +936 -936
  548. package/src/aldehyde/tmpl/model-struc-v3.tsx +111 -111
  549. package/src/aldehyde/tmpl/superagent.js +146 -146
  550. package/src/aldehyde/tmpl/tmpl-config-analysis.tsx +585 -585
  551. package/src/aldehyde/tmpl/web-socket.ts +366 -366
  552. package/src/aldehyde/tree/act-tree.tsx +217 -217
  553. package/src/aldehyde/tree/block-menu-auth-tree.tsx +189 -189
  554. package/src/aldehyde/tree/index.css +22 -22
  555. package/src/aldehyde/tree/navigation-tree.tsx +39 -39
  556. package/src/aldehyde/tree/tmpl-tree.tsx +751 -751
  557. package/src/aldehyde/tree/tree-node.tsx +73 -73
  558. package/src/aldehyde/tree/tree-utils.tsx +317 -317
  559. package/src/aldehyde/units/EncryptUtils.js +37 -37
  560. package/src/aldehyde/units/image.d.ts +7 -7
  561. package/src/aldehyde/units/index.tsx +1367 -1367
  562. package/src/aldehyde/units/storage.js +2 -2
  563. package/src/aldehyde/utils/dsu.ts +27 -27
  564. package/src/aldehyde/welcome/HCWelcome.js +404 -404
  565. package/src/aldehyde/welcome/HCWelcome1.js +259 -259
  566. package/src/aldehyde/welcome/components/menu-card.less +96 -96
  567. package/src/aldehyde/welcome/components/menu-card.tsx +70 -70
  568. package/src/aldehyde/welcome/components/page-card.less +49 -49
  569. package/src/aldehyde/welcome/components/page-card.tsx +97 -97
  570. package/src/aldehyde/welcome/components/quick-entrance.less +120 -120
  571. package/src/aldehyde/welcome/components/quick-entrance.tsx +80 -80
  572. package/src/aldehyde/welcome/components/user-menus.less +192 -192
  573. package/src/aldehyde/welcome/components/user-menus.tsx +279 -279
  574. package/src/aldehyde/welcome/components/workbench.less +118 -118
  575. package/src/aldehyde/welcome/components/workbench.tsx +146 -146
  576. 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;