aldehyde 0.2.495 → 0.2.496

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