aldehyde 0.2.487 → 0.2.489

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 (717) 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/direct-file-view/index.d.ts.map +1 -1
  14. package/lib/controls/direct-file-view/index.js +2 -1
  15. package/lib/controls/direct-file-view/index.js.map +1 -1
  16. package/lib/controls/entity-select/entity-select.d.ts.map +1 -1
  17. package/lib/controls/entity-select/index.css +7 -7
  18. package/lib/controls/entity-select/lab-tree-select.d.ts.map +1 -1
  19. package/lib/controls/entity-select/popover-entity-select.d.ts.map +1 -1
  20. package/lib/controls/file-view/index.less +9 -9
  21. package/lib/controls/html-editor/index.less +67 -67
  22. package/lib/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.css +147 -147
  23. package/lib/controls/password-setter/index.css +2 -2
  24. package/lib/controls/password-setter/index.d.ts.map +1 -1
  25. package/lib/controls/qr-code/index.less +28 -28
  26. package/lib/controls/relation-existion/index.css +3 -3
  27. package/lib/controls/relation-existion/index.d.ts.map +1 -1
  28. package/lib/controls/rfield/index.css +4 -4
  29. package/lib/controls/rfield/index.d.ts.map +1 -1
  30. package/lib/controls/select/index.d.ts.map +1 -1
  31. package/lib/controls/signature/index.d.ts.map +1 -1
  32. package/lib/controls/text/ellipsis-text.d.ts.map +1 -1
  33. package/lib/controls/text/index.less +7 -7
  34. package/lib/controls/upload/index.d.ts.map +1 -1
  35. package/lib/controls/upload/mult-file-upload.d.ts.map +1 -1
  36. package/lib/custom-page/dtmpl-custom-edit-modal-page.d.ts.map +1 -1
  37. package/lib/detail/button/bottom-submit-button-bar.d.ts.map +1 -1
  38. package/lib/detail/button/cquery-button-bar.d.ts.map +1 -1
  39. package/lib/detail/button/fix-right-submit-button-bar.d.ts.map +1 -1
  40. package/lib/detail/button/index.css +42 -42
  41. package/lib/detail/dtmpl.css +72 -72
  42. package/lib/detail/edit/fields-edit-card.d.ts.map +1 -1
  43. package/lib/detail/edit/modal-row-edit.d.ts.map +1 -1
  44. package/lib/detail/edit/popover-edit-card.d.ts.map +1 -1
  45. package/lib/detail/rightbar/index.css +34 -34
  46. package/lib/detail/rightbar/index.d.ts.map +1 -1
  47. package/lib/detail/view/act-dtmpl-view.d.ts.map +1 -1
  48. package/lib/detail/view/field-view-group.d.ts.map +1 -1
  49. package/lib/detail/view/modal-dtmpl-view.d.ts.map +1 -1
  50. package/lib/detail/view/snapshot-timeline.d.ts.map +1 -1
  51. package/lib/detail/view/tab-act-dtmpl-view.d.ts.map +1 -1
  52. package/lib/draw-canvas-edit/components/main-header/index.js +1 -1
  53. package/lib/draw-canvas-edit/components/render/components/index.less +60 -60
  54. package/lib/draw-canvas-edit/components/render/components/workstation-component.js +6 -6
  55. package/lib/draw-canvas-edit/components/render/draws/bg-draw.d.ts +1 -0
  56. package/lib/draw-canvas-edit/components/render/draws/bg-draw.d.ts.map +1 -1
  57. package/lib/draw-canvas-edit/components/render/draws/bg-draw.js +3 -2
  58. package/lib/draw-canvas-edit/components/render/draws/bg-draw.js.map +1 -1
  59. package/lib/draw-canvas-edit/components/render/draws/contextmenu-draw.d.ts +1 -0
  60. package/lib/draw-canvas-edit/components/render/draws/contextmenu-draw.d.ts.map +1 -1
  61. package/lib/draw-canvas-edit/components/render/draws/contextmenu-draw.js +2 -1
  62. package/lib/draw-canvas-edit/components/render/draws/contextmenu-draw.js.map +1 -1
  63. package/lib/draw-canvas-edit/components/render/draws/graph-draw.d.ts +1 -0
  64. package/lib/draw-canvas-edit/components/render/draws/graph-draw.d.ts.map +1 -1
  65. package/lib/draw-canvas-edit/components/render/draws/graph-draw.js +9 -8
  66. package/lib/draw-canvas-edit/components/render/draws/graph-draw.js.map +1 -1
  67. package/lib/draw-canvas-edit/components/render/draws/link-draw.d.ts +1 -0
  68. package/lib/draw-canvas-edit/components/render/draws/link-draw.d.ts.map +1 -1
  69. package/lib/draw-canvas-edit/components/render/draws/link-draw.js +24 -23
  70. package/lib/draw-canvas-edit/components/render/draws/link-draw.js.map +1 -1
  71. package/lib/draw-canvas-edit/components/render/draws/preview-draw.d.ts +1 -0
  72. package/lib/draw-canvas-edit/components/render/draws/preview-draw.d.ts.map +1 -1
  73. package/lib/draw-canvas-edit/components/render/draws/preview-draw.js +6 -5
  74. package/lib/draw-canvas-edit/components/render/draws/preview-draw.js.map +1 -1
  75. package/lib/draw-canvas-edit/components/render/draws/ref-line-draw.d.ts +1 -0
  76. package/lib/draw-canvas-edit/components/render/draws/ref-line-draw.d.ts.map +1 -1
  77. package/lib/draw-canvas-edit/components/render/draws/ref-line-draw.js +3 -2
  78. package/lib/draw-canvas-edit/components/render/draws/ref-line-draw.js.map +1 -1
  79. package/lib/draw-canvas-edit/components/render/draws/ruler-draw.d.ts +1 -0
  80. package/lib/draw-canvas-edit/components/render/draws/ruler-draw.d.ts.map +1 -1
  81. package/lib/draw-canvas-edit/components/render/draws/ruler-draw.js +8 -7
  82. package/lib/draw-canvas-edit/components/render/draws/ruler-draw.js.map +1 -1
  83. package/lib/draw-canvas-edit/components/render/graphs/base-graph.js +3 -3
  84. package/lib/draw-canvas-edit/components/render/graphs/bezier.js +5 -5
  85. package/lib/draw-canvas-edit/components/render/graphs/circle.js +4 -4
  86. package/lib/draw-canvas-edit/components/render/graphs/curve.js +5 -5
  87. package/lib/draw-canvas-edit/components/render/graphs/line.js +5 -5
  88. package/lib/draw-canvas-edit/components/render/graphs/rect.js +4 -4
  89. package/lib/draw-canvas-edit/components/render/handlers/drag-handlers.d.ts +1 -0
  90. package/lib/draw-canvas-edit/components/render/handlers/drag-handlers.d.ts.map +1 -1
  91. package/lib/draw-canvas-edit/components/render/handlers/drag-handlers.js +7 -6
  92. package/lib/draw-canvas-edit/components/render/handlers/drag-handlers.js.map +1 -1
  93. package/lib/draw-canvas-edit/components/render/handlers/drag-outside-handlers.d.ts +1 -0
  94. package/lib/draw-canvas-edit/components/render/handlers/drag-outside-handlers.d.ts.map +1 -1
  95. package/lib/draw-canvas-edit/components/render/handlers/drag-outside-handlers.js +4 -3
  96. package/lib/draw-canvas-edit/components/render/handlers/drag-outside-handlers.js.map +1 -1
  97. package/lib/draw-canvas-edit/components/render/handlers/graph-handlers.d.ts +1 -0
  98. package/lib/draw-canvas-edit/components/render/handlers/graph-handlers.d.ts.map +1 -1
  99. package/lib/draw-canvas-edit/components/render/handlers/graph-handlers.js +2 -1
  100. package/lib/draw-canvas-edit/components/render/handlers/graph-handlers.js.map +1 -1
  101. package/lib/draw-canvas-edit/components/render/handlers/key-move-handlers.d.ts +1 -0
  102. package/lib/draw-canvas-edit/components/render/handlers/key-move-handlers.d.ts.map +1 -1
  103. package/lib/draw-canvas-edit/components/render/handlers/key-move-handlers.js +5 -4
  104. package/lib/draw-canvas-edit/components/render/handlers/key-move-handlers.js.map +1 -1
  105. package/lib/draw-canvas-edit/components/render/handlers/link-handlers.d.ts +1 -0
  106. package/lib/draw-canvas-edit/components/render/handlers/link-handlers.d.ts.map +1 -1
  107. package/lib/draw-canvas-edit/components/render/handlers/link-handlers.js +3 -2
  108. package/lib/draw-canvas-edit/components/render/handlers/link-handlers.js.map +1 -1
  109. package/lib/draw-canvas-edit/components/render/handlers/selection-handlers.d.ts +1 -0
  110. package/lib/draw-canvas-edit/components/render/handlers/selection-handlers.d.ts.map +1 -1
  111. package/lib/draw-canvas-edit/components/render/handlers/selection-handlers.js +5 -4
  112. package/lib/draw-canvas-edit/components/render/handlers/selection-handlers.js.map +1 -1
  113. package/lib/draw-canvas-edit/components/render/handlers/shutcut-handlers.d.ts +1 -0
  114. package/lib/draw-canvas-edit/components/render/handlers/shutcut-handlers.d.ts.map +1 -1
  115. package/lib/draw-canvas-edit/components/render/handlers/shutcut-handlers.js +1 -0
  116. package/lib/draw-canvas-edit/components/render/handlers/shutcut-handlers.js.map +1 -1
  117. package/lib/draw-canvas-edit/components/render/handlers/text-handlers.d.ts +1 -0
  118. package/lib/draw-canvas-edit/components/render/handlers/text-handlers.d.ts.map +1 -1
  119. package/lib/draw-canvas-edit/components/render/handlers/text-handlers.js +1 -0
  120. package/lib/draw-canvas-edit/components/render/handlers/text-handlers.js.map +1 -1
  121. package/lib/draw-canvas-edit/components/render/handlers/zoom-handlers.d.ts +1 -0
  122. package/lib/draw-canvas-edit/components/render/handlers/zoom-handlers.d.ts.map +1 -1
  123. package/lib/draw-canvas-edit/components/render/handlers/zoom-handlers.js +7 -6
  124. package/lib/draw-canvas-edit/components/render/handlers/zoom-handlers.js.map +1 -1
  125. package/lib/draw-canvas-edit/components/render/index.js +48 -48
  126. package/lib/draw-canvas-edit/components/render/tools/align-tool.js +4 -4
  127. package/lib/draw-canvas-edit/components/render/tools/asset-tool.js +1 -1
  128. package/lib/draw-canvas-edit/components/render/tools/copy-tool.js +4 -4
  129. package/lib/draw-canvas-edit/components/render/tools/import-export-tool.js +7 -7
  130. package/lib/draw-canvas-edit/components/render/tools/link-tool.js +9 -9
  131. package/lib/draw-canvas-edit/components/render/tools/position-tool.js +18 -18
  132. package/lib/draw-canvas-edit/components/render/tools/selection-tool.js +2 -2
  133. package/lib/draw-canvas-edit/components/render/tools/z-index-tool.js +16 -16
  134. package/lib/draw-canvas-edit/index.less +48 -48
  135. package/lib/draw-canvas-view/index.less +66 -66
  136. package/lib/export/export-frame.css +2 -2
  137. package/lib/export/export-frame.d.ts.map +1 -1
  138. package/lib/export/select-code-export-frame.d.ts.map +1 -1
  139. package/lib/form/dtmpl-form.css +3 -3
  140. package/lib/form/dtmpl-form.d.ts.map +1 -1
  141. package/lib/form/field-group-form.d.ts.map +1 -1
  142. package/lib/form/form-Item-group.d.ts.map +1 -1
  143. package/lib/form/index.css +12 -12
  144. package/lib/import/excel-import.d.ts.map +1 -1
  145. package/lib/import/index.css +53 -53
  146. package/lib/import/template.css +50 -50
  147. package/lib/layout/common.css +64 -64
  148. package/lib/layout/coverstyle.css +51 -51
  149. package/lib/layout/footer/index.css +5 -5
  150. package/lib/layout/header/index.css +122 -122
  151. package/lib/layout/menu/block.css +7 -7
  152. package/lib/layout/menu/block.d.ts.map +1 -1
  153. package/lib/layout/menu/l2menu-quick-bar.d.ts.map +1 -1
  154. package/lib/layout/menu/menu-2layers.d.ts.map +1 -1
  155. package/lib/layout/menu/message-bar.less +73 -73
  156. package/lib/layout/menu/reset-password.d.ts.map +1 -1
  157. package/lib/layout/menu/user-bar.d.ts.map +1 -1
  158. package/lib/layout/menu/userinfo-bar.d.ts.map +1 -1
  159. package/lib/layout/sidebar/index.css +57 -57
  160. package/lib/layout2/css/header.css +41 -41
  161. package/lib/layout2/css/sider.less +17 -17
  162. package/lib/layout2/css/tabs-layout.less +18 -18
  163. package/lib/layout3/css/header.less +195 -195
  164. package/lib/layout3/css/main.less +161 -161
  165. package/lib/layout3/css/sider.less +32 -32
  166. package/lib/layout3/css/tabs-layout.less +38 -38
  167. package/lib/layout4/css/header.less +196 -196
  168. package/lib/layout4/css/main.less +154 -154
  169. package/lib/layout4/css/sider.less +37 -37
  170. package/lib/layout4/css/tabs-layout.less +42 -42
  171. package/lib/layout5/css/header.less +35 -35
  172. package/lib/layout5/css/sider.less +18 -18
  173. package/lib/list/calendar/index.less +20 -20
  174. package/lib/list/card-list/index.less +154 -154
  175. package/lib/list/gantt/index.less +8 -8
  176. package/lib/list/vertical-list/index.less +208 -208
  177. package/lib/login/index.css +19 -19
  178. package/lib/login/login.d.ts.map +1 -1
  179. package/lib/login/vertify/index.css +143 -143
  180. package/lib/login3/index.less +136 -136
  181. package/lib/lowcode-components/act-table/index.less +26 -26
  182. package/lib/lowcode-components/bar-chart/index.d.ts +4 -1
  183. package/lib/lowcode-components/bar-chart/index.d.ts.map +1 -1
  184. package/lib/lowcode-components/bar-chart/index.js +3 -0
  185. package/lib/lowcode-components/bar-chart/index.js.map +1 -1
  186. package/lib/lowcode-components/base-button/index.less +7 -7
  187. package/lib/lowcode-components/base-map/index.js +6 -6
  188. package/lib/lowcode-components/base-radio/index.less +23 -23
  189. package/lib/lowcode-components/base-tabs/index.less +14 -14
  190. package/lib/lowcode-components/border/border10/index.less +26 -26
  191. package/lib/lowcode-components/border/border11/index.js +46 -46
  192. package/lib/lowcode-components/border/border11/index.less +17 -17
  193. package/lib/lowcode-components/border/border12/index.js +13 -13
  194. package/lib/lowcode-components/border/border12/index.less +13 -13
  195. package/lib/lowcode-components/border/border13/index.js +5 -5
  196. package/lib/lowcode-components/border/border13/index.less +13 -13
  197. package/lib/lowcode-components/border/border2/index.less +17 -17
  198. package/lib/lowcode-components/border/border3/index.less +25 -25
  199. package/lib/lowcode-components/border/border4/index.js +2 -2
  200. package/lib/lowcode-components/border/border4/index.less +72 -72
  201. package/lib/lowcode-components/border/border5/index.js +2 -2
  202. package/lib/lowcode-components/border/border5/index.less +35 -35
  203. package/lib/lowcode-components/border/border6/index.less +17 -17
  204. package/lib/lowcode-components/border/border7/index.less +26 -26
  205. package/lib/lowcode-components/border/border8/index.less +13 -13
  206. package/lib/lowcode-components/border/border9/index.js +14 -14
  207. package/lib/lowcode-components/border/border9/index.less +13 -13
  208. package/lib/lowcode-components/column-3d-chart/index.d.ts +4 -1
  209. package/lib/lowcode-components/column-3d-chart/index.d.ts.map +1 -1
  210. package/lib/lowcode-components/column-3d-chart/index.js +3 -0
  211. package/lib/lowcode-components/column-3d-chart/index.js.map +1 -1
  212. package/lib/lowcode-components/column-chart/index.d.ts +6 -3
  213. package/lib/lowcode-components/column-chart/index.d.ts.map +1 -1
  214. package/lib/lowcode-components/column-chart/index.js +4 -1
  215. package/lib/lowcode-components/column-chart/index.js.map +1 -1
  216. package/lib/lowcode-components/decoration/decoration1/index.less +7 -7
  217. package/lib/lowcode-components/decoration/decoration10/index.js +3 -3
  218. package/lib/lowcode-components/decoration/decoration10/index.less +5 -5
  219. package/lib/lowcode-components/decoration/decoration11/index.less +5 -5
  220. package/lib/lowcode-components/decoration/decoration2/index.less +6 -6
  221. package/lib/lowcode-components/decoration/decoration3/index.less +7 -7
  222. package/lib/lowcode-components/decoration/decoration4/index.less +29 -29
  223. package/lib/lowcode-components/decoration/decoration5/index.less +3 -3
  224. package/lib/lowcode-components/decoration/decoration6/index.less +7 -7
  225. package/lib/lowcode-components/decoration/decoration7/index.less +4 -4
  226. package/lib/lowcode-components/decoration/decoration8/index.less +14 -14
  227. package/lib/lowcode-components/decoration/decoration9/index.less +4 -4
  228. package/lib/lowcode-components/effectScatter-map/index.js +6 -6
  229. package/lib/lowcode-components/effectScatter-map-3d/index.js +6 -6
  230. package/lib/lowcode-components/line-bar-chart/index.d.ts +4 -1
  231. package/lib/lowcode-components/line-bar-chart/index.d.ts.map +1 -1
  232. package/lib/lowcode-components/line-bar-chart/index.js +3 -0
  233. package/lib/lowcode-components/line-bar-chart/index.js.map +1 -1
  234. package/lib/lowcode-components/line-chart/index.d.ts +5 -2
  235. package/lib/lowcode-components/line-chart/index.d.ts.map +1 -1
  236. package/lib/lowcode-components/line-chart/index.js +6 -2
  237. package/lib/lowcode-components/line-chart/index.js.map +1 -1
  238. package/lib/lowcode-components/lowcode-view/index.less +19 -19
  239. package/lib/lowcode-components/pie-chart/index.d.ts +4 -1
  240. package/lib/lowcode-components/pie-chart/index.d.ts.map +1 -1
  241. package/lib/lowcode-components/pie-chart/index.js +3 -0
  242. package/lib/lowcode-components/pie-chart/index.js.map +1 -1
  243. package/lib/lowcode-components/search-form/index.less +25 -25
  244. package/lib/module/dtmpl-edit-card.d.ts.map +1 -1
  245. package/lib/module/dtmpl-edit-card.js +15 -5
  246. package/lib/module/dtmpl-edit-card.js.map +1 -1
  247. package/lib/module/dtmpl-edit-page.d.ts.map +1 -1
  248. package/lib/module/dtmpl-edit-page.js +15 -5
  249. package/lib/module/dtmpl-edit-page.js.map +1 -1
  250. package/lib/module/index.less +4 -4
  251. package/lib/module/ltmpl-modal.d.ts.map +1 -1
  252. package/lib/module/ltmpl-table.d.ts.map +1 -1
  253. package/lib/routable/index.less +25 -25
  254. package/lib/table/act-table.d.ts +2 -0
  255. package/lib/table/act-table.d.ts.map +1 -1
  256. package/lib/table/act-table.js +20 -17
  257. package/lib/table/act-table.js.map +1 -1
  258. package/lib/table/column/index.less +85 -85
  259. package/lib/table/index.css +211 -211
  260. package/lib/table/modal-select-table.d.ts.map +1 -1
  261. package/lib/table/page-chart.d.ts +15 -0
  262. package/lib/table/page-chart.d.ts.map +1 -0
  263. package/lib/table/page-chart.js +150 -0
  264. package/lib/table/page-chart.js.map +1 -0
  265. package/lib/table/page-chart.less +10 -0
  266. package/lib/table/pagination.css +14 -14
  267. package/lib/table/pagination.d.ts.map +1 -1
  268. package/lib/table/relation-table.d.ts +2 -0
  269. package/lib/table/relation-table.d.ts.map +1 -1
  270. package/lib/table/row-table.d.ts +11 -0
  271. package/lib/table/row-table.d.ts.map +1 -0
  272. package/lib/table/row-table.js +11 -0
  273. package/lib/table/row-table.js.map +1 -0
  274. package/lib/table/selected-rows-card.d.ts.map +1 -1
  275. package/lib/table/stat/restat.d.ts.map +1 -1
  276. package/lib/tmpl/interface.d.ts +12 -1
  277. package/lib/tmpl/interface.d.ts.map +1 -1
  278. package/lib/tmpl/interface.js.map +1 -1
  279. package/lib/tmpl/tmpl-config-analysis.js +1 -1
  280. package/lib/tmpl/tmpl-config-analysis.js.map +1 -1
  281. package/lib/tree/act-tree.d.ts.map +1 -1
  282. package/lib/tree/block-menu-auth-tree.d.ts.map +1 -1
  283. package/lib/tree/index.css +22 -22
  284. package/lib/tree/tmpl-tree.d.ts.map +1 -1
  285. package/lib/welcome/components/menu-card.less +96 -96
  286. package/lib/welcome/components/page-card.less +49 -49
  287. package/lib/welcome/components/quick-entrance.less +120 -120
  288. package/lib/welcome/components/user-menus.less +192 -192
  289. package/lib/welcome/components/workbench.less +118 -118
  290. package/lib/welcome/index.css +13 -13
  291. package/package.json +224 -224
  292. package/src/aldehyde/controls/2dEditor/2dEditor/index.less +5 -5
  293. package/src/aldehyde/controls/2dEditor/2dEditor/index.tsx +270 -270
  294. package/src/aldehyde/controls/2dEditor/2dView/index.less +8 -8
  295. package/src/aldehyde/controls/2dEditor/2dView/index.tsx +110 -110
  296. package/src/aldehyde/controls/2dEditor/components/card.tsx +256 -256
  297. package/src/aldehyde/controls/2dEditor/components/component.less +83 -83
  298. package/src/aldehyde/controls/2dEditor/components/data.d.ts +32 -32
  299. package/src/aldehyde/controls/2dEditor/components/hotspot.tsx +80 -80
  300. package/src/aldehyde/controls/2dEditor/components/html-box.tsx +101 -101
  301. package/src/aldehyde/controls/2dEditor/components/image.tsx +99 -99
  302. package/src/aldehyde/controls/2dEditor/components/line.tsx +73 -73
  303. package/src/aldehyde/controls/action/index.css +8 -8
  304. package/src/aldehyde/controls/action/index.tsx +406 -406
  305. package/src/aldehyde/controls/action/utils.tsx +306 -306
  306. package/src/aldehyde/controls/auto-complete/index.tsx +82 -82
  307. package/src/aldehyde/controls/cascader/index.tsx +112 -112
  308. package/src/aldehyde/controls/chemstruc/graph.tsx +185 -185
  309. package/src/aldehyde/controls/chemstruc/index.css +28 -28
  310. package/src/aldehyde/controls/code-editor/sql-code-editor.tsx +73 -73
  311. package/src/aldehyde/controls/collapse-card/index.css +8 -8
  312. package/src/aldehyde/controls/collapse-card/index.tsx +109 -109
  313. package/src/aldehyde/controls/color-picker/index.tsx +21 -21
  314. package/src/aldehyde/controls/counting-tag/index.tsx +53 -53
  315. package/src/aldehyde/controls/cquery/cquick-button.tsx +145 -145
  316. package/src/aldehyde/controls/date-picker/index.tsx +199 -199
  317. package/src/aldehyde/controls/direct-file-view/drawer-file-view.tsx +54 -54
  318. package/src/aldehyde/controls/direct-file-view/index.tsx +147 -146
  319. package/src/aldehyde/controls/direct-upload/index.tsx +140 -140
  320. package/src/aldehyde/controls/entity-select/entity-select.tsx +791 -791
  321. package/src/aldehyde/controls/entity-select/index.css +7 -7
  322. package/src/aldehyde/controls/entity-select/lab-tree-select.tsx +154 -154
  323. package/src/aldehyde/controls/entity-select/popover-entity-select.tsx +205 -205
  324. package/src/aldehyde/controls/entry-control.tsx +431 -431
  325. package/src/aldehyde/controls/enum-badge/index.tsx +42 -42
  326. package/src/aldehyde/controls/enum-tag/index.tsx +45 -45
  327. package/src/aldehyde/controls/field-history/index.tsx +81 -81
  328. package/src/aldehyde/controls/file-export/select-code-export.tsx +40 -40
  329. package/src/aldehyde/controls/file-view/drawer-file-view.tsx +117 -117
  330. package/src/aldehyde/controls/file-view/index.less +9 -9
  331. package/src/aldehyde/controls/file-view/index.tsx +148 -148
  332. package/src/aldehyde/controls/file-view/multi-file-view.tsx +39 -39
  333. package/src/aldehyde/controls/file-view/newin-file-view.tsx +40 -40
  334. package/src/aldehyde/controls/html-editor/draft.tsx +136 -136
  335. package/src/aldehyde/controls/html-editor/index.less +67 -67
  336. package/src/aldehyde/controls/icon-selector/app-icon-selector.tsx +68 -68
  337. package/src/aldehyde/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.css +147 -147
  338. package/src/aldehyde/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.json +240 -240
  339. package/src/aldehyde/controls/icon-selector/pc-icon-selector.tsx +68 -68
  340. package/src/aldehyde/controls/input-number/index.tsx +148 -148
  341. package/src/aldehyde/controls/input-range/index.tsx +59 -59
  342. package/src/aldehyde/controls/password-setter/index.css +2 -2
  343. package/src/aldehyde/controls/password-setter/index.js +88 -88
  344. package/src/aldehyde/controls/progress/index.tsx +74 -74
  345. package/src/aldehyde/controls/qr-code/index.less +28 -28
  346. package/src/aldehyde/controls/qr-code/index.tsx +40 -40
  347. package/src/aldehyde/controls/relation-existion/index.css +3 -3
  348. package/src/aldehyde/controls/relation-existion/index.tsx +144 -144
  349. package/src/aldehyde/controls/rfield/index.css +4 -4
  350. package/src/aldehyde/controls/rfield/index.tsx +225 -225
  351. package/src/aldehyde/controls/select/index.tsx +226 -226
  352. package/src/aldehyde/controls/signature/index.tsx +226 -226
  353. package/src/aldehyde/controls/single-checkbox/index.tsx +18 -18
  354. package/src/aldehyde/controls/steps/index.tsx +59 -59
  355. package/src/aldehyde/controls/text/ellipsis-text.tsx +98 -98
  356. package/src/aldehyde/controls/text/index.less +7 -7
  357. package/src/aldehyde/controls/tree-select/navigation-tree.tsx +122 -122
  358. package/src/aldehyde/controls/tree-select/tree-entity-select.tsx +121 -121
  359. package/src/aldehyde/controls/upload/index.tsx +128 -128
  360. package/src/aldehyde/controls/upload/mult-file-upload.tsx +240 -240
  361. package/src/aldehyde/controls/upload-read-excel/index.tsx +43 -43
  362. package/src/aldehyde/controls/view-control.tsx +289 -289
  363. package/src/aldehyde/custom-page/custom-detail-modal-page.tsx +69 -69
  364. package/src/aldehyde/custom-page/custom-page-router.tsx +64 -64
  365. package/src/aldehyde/custom-page/def-custom-page.tsx +17 -17
  366. package/src/aldehyde/custom-page/dtmpl-custom-edit-modal-page.tsx +88 -88
  367. package/src/aldehyde/detail/button/bottom-submit-button-bar.tsx +91 -91
  368. package/src/aldehyde/detail/button/cquery-button-bar.tsx +144 -144
  369. package/src/aldehyde/detail/button/edit-button.tsx +61 -61
  370. package/src/aldehyde/detail/button/fix-right-submit-button-bar.tsx +186 -186
  371. package/src/aldehyde/detail/button/index.css +42 -42
  372. package/src/aldehyde/detail/button/inline-edit-button.tsx +40 -40
  373. package/src/aldehyde/detail/button/submit-button-bar.tsx +57 -57
  374. package/src/aldehyde/detail/button/view-button.tsx +64 -64
  375. package/src/aldehyde/detail/dtmpl.css +72 -72
  376. package/src/aldehyde/detail/edit/dtmpl-edit.tsx +279 -279
  377. package/src/aldehyde/detail/edit/fields-edit-card.tsx +145 -145
  378. package/src/aldehyde/detail/edit/modal-row-edit.tsx +95 -95
  379. package/src/aldehyde/detail/edit/popover-edit-card.tsx +167 -167
  380. package/src/aldehyde/detail/edit/popover-editor.tsx +70 -70
  381. package/src/aldehyde/detail/edit/post-result/index.tsx +86 -86
  382. package/src/aldehyde/detail/rightbar/index.css +34 -34
  383. package/src/aldehyde/detail/rightbar/index.tsx +92 -92
  384. package/src/aldehyde/detail/tooltipbar/index.tsx +32 -32
  385. package/src/aldehyde/detail/view/act-dtmpl-view.tsx +288 -288
  386. package/src/aldehyde/detail/view/dtmpl-view.tsx +334 -334
  387. package/src/aldehyde/detail/view/field-view-group.tsx +88 -88
  388. package/src/aldehyde/detail/view/modal-dtmpl-view.tsx +73 -73
  389. package/src/aldehyde/detail/view/snapshot-timeline.tsx +231 -231
  390. package/src/aldehyde/detail/view/tab-act-dtmpl-view.tsx +304 -304
  391. package/src/aldehyde/detail/view/view-compare-panel.tsx +57 -57
  392. package/src/aldehyde/draw-canvas-edit/components/main-header/index.tsx +1 -1
  393. package/src/aldehyde/draw-canvas-edit/components/render/components/index.less +60 -60
  394. package/src/aldehyde/draw-canvas-edit/components/render/components/index.ts +3 -3
  395. package/src/aldehyde/draw-canvas-edit/components/render/components/workstation-component.tsx +220 -220
  396. package/src/aldehyde/draw-canvas-edit/components/render/draws/bg-draw.ts +177 -176
  397. package/src/aldehyde/draw-canvas-edit/components/render/draws/contextmenu-draw.ts +330 -329
  398. package/src/aldehyde/draw-canvas-edit/components/render/draws/graph-draw.ts +249 -249
  399. package/src/aldehyde/draw-canvas-edit/components/render/draws/link-draw.ts +1415 -1414
  400. package/src/aldehyde/draw-canvas-edit/components/render/draws/preview-draw.ts +274 -273
  401. package/src/aldehyde/draw-canvas-edit/components/render/draws/ref-line-draw.ts +71 -70
  402. package/src/aldehyde/draw-canvas-edit/components/render/draws/ruler-draw.ts +166 -165
  403. package/src/aldehyde/draw-canvas-edit/components/render/graphs/base-graph.ts +3 -3
  404. package/src/aldehyde/draw-canvas-edit/components/render/graphs/bezier.ts +542 -542
  405. package/src/aldehyde/draw-canvas-edit/components/render/graphs/circle.ts +4 -4
  406. package/src/aldehyde/draw-canvas-edit/components/render/graphs/curve.ts +5 -5
  407. package/src/aldehyde/draw-canvas-edit/components/render/graphs/line.ts +5 -5
  408. package/src/aldehyde/draw-canvas-edit/components/render/graphs/rect.ts +4 -4
  409. package/src/aldehyde/draw-canvas-edit/components/render/handlers/drag-handlers.ts +7 -6
  410. package/src/aldehyde/draw-canvas-edit/components/render/handlers/drag-outside-handlers.ts +77 -76
  411. package/src/aldehyde/draw-canvas-edit/components/render/handlers/graph-handlers.ts +2 -1
  412. package/src/aldehyde/draw-canvas-edit/components/render/handlers/key-move-handlers.ts +5 -4
  413. package/src/aldehyde/draw-canvas-edit/components/render/handlers/link-handlers.ts +3 -2
  414. package/src/aldehyde/draw-canvas-edit/components/render/handlers/selection-handlers.ts +410 -409
  415. package/src/aldehyde/draw-canvas-edit/components/render/handlers/shutcut-handlers.ts +1 -0
  416. package/src/aldehyde/draw-canvas-edit/components/render/handlers/text-handlers.ts +1 -0
  417. package/src/aldehyde/draw-canvas-edit/components/render/handlers/zoom-handlers.ts +7 -6
  418. package/src/aldehyde/draw-canvas-edit/components/render/index.ts +817 -817
  419. package/src/aldehyde/draw-canvas-edit/components/render/tools/align-tool.ts +4 -4
  420. package/src/aldehyde/draw-canvas-edit/components/render/tools/asset-tool.ts +1 -1
  421. package/src/aldehyde/draw-canvas-edit/components/render/tools/attract-tool.ts +457 -457
  422. package/src/aldehyde/draw-canvas-edit/components/render/tools/component-factory.ts +269 -269
  423. package/src/aldehyde/draw-canvas-edit/components/render/tools/copy-tool.ts +244 -244
  424. package/src/aldehyde/draw-canvas-edit/components/render/tools/import-export-tool.ts +588 -588
  425. package/src/aldehyde/draw-canvas-edit/components/render/tools/index.ts +10 -10
  426. package/src/aldehyde/draw-canvas-edit/components/render/tools/link-tool.ts +9 -9
  427. package/src/aldehyde/draw-canvas-edit/components/render/tools/position-tool.ts +191 -191
  428. package/src/aldehyde/draw-canvas-edit/components/render/tools/selection-tool.ts +140 -140
  429. package/src/aldehyde/draw-canvas-edit/components/render/tools/z-index-tool.ts +16 -16
  430. package/src/aldehyde/draw-canvas-edit/components/render/types.ts +298 -298
  431. package/src/aldehyde/draw-canvas-edit/components/setting-form/index.tsx +305 -305
  432. package/src/aldehyde/draw-canvas-edit/constant.ts +5 -5
  433. package/src/aldehyde/draw-canvas-edit/index.less +48 -48
  434. package/src/aldehyde/draw-canvas-edit/index.tsx +213 -213
  435. package/src/aldehyde/draw-canvas-view/index.less +66 -66
  436. package/src/aldehyde/draw-canvas-view/index.tsx +49 -49
  437. package/src/aldehyde/draw-canvas-view/view.tsx +237 -237
  438. package/src/aldehyde/export/export-frame.css +2 -2
  439. package/src/aldehyde/export/export-frame.tsx +301 -301
  440. package/src/aldehyde/export/select-code-export-frame.tsx +212 -212
  441. package/src/aldehyde/form/criteria-form.tsx +604 -604
  442. package/src/aldehyde/form/dtmpl-form.css +3 -3
  443. package/src/aldehyde/form/dtmpl-form.tsx +571 -571
  444. package/src/aldehyde/form/field-group-form.tsx +103 -103
  445. package/src/aldehyde/form/fields-form.tsx +45 -45
  446. package/src/aldehyde/form/form-Item-group.tsx +246 -246
  447. package/src/aldehyde/form/index.css +12 -12
  448. package/src/aldehyde/hooks/use-match-route/index.tsx +62 -62
  449. package/src/aldehyde/hooks/use-tabs/index.tsx +139 -139
  450. package/src/aldehyde/hooks/useVarCssColor.ts +6 -6
  451. package/src/aldehyde/icon/aliIcon.tsx +9 -9
  452. package/src/aldehyde/icon/index.tsx +28 -28
  453. package/src/aldehyde/import/excel-import.tsx +450 -450
  454. package/src/aldehyde/import/index.css +53 -53
  455. package/src/aldehyde/import/template.css +50 -50
  456. package/src/aldehyde/index.tsx +220 -220
  457. package/src/aldehyde/layout/MainPage.tsx +334 -334
  458. package/src/aldehyde/layout/common.css +64 -64
  459. package/src/aldehyde/layout/coverstyle.css +51 -51
  460. package/src/aldehyde/layout/footer/index.css +5 -5
  461. package/src/aldehyde/layout/footer/index.js +17 -17
  462. package/src/aldehyde/layout/header/index.css +122 -122
  463. package/src/aldehyde/layout/header/index.tsx +152 -152
  464. package/src/aldehyde/layout/menu/block.css +7 -7
  465. package/src/aldehyde/layout/menu/block.tsx +174 -174
  466. package/src/aldehyde/layout/menu/l2menu-message-bar.tsx +160 -160
  467. package/src/aldehyde/layout/menu/l2menu-quick-bar.tsx +175 -175
  468. package/src/aldehyde/layout/menu/menu-2layers.tsx +117 -117
  469. package/src/aldehyde/layout/menu/menu-render.tsx +168 -168
  470. package/src/aldehyde/layout/menu/message-bar.less +73 -73
  471. package/src/aldehyde/layout/menu/reset-password.tsx +255 -255
  472. package/src/aldehyde/layout/menu/user-bar.tsx +259 -259
  473. package/src/aldehyde/layout/menu/userinfo-bar.tsx +69 -69
  474. package/src/aldehyde/layout/sidebar/index.css +57 -57
  475. package/src/aldehyde/layout/sidebar/index.tsx +84 -84
  476. package/src/aldehyde/layout2/components/icon-font.tsx +7 -7
  477. package/src/aldehyde/layout2/components/screenfull-button.tsx +21 -21
  478. package/src/aldehyde/layout2/components/search-menu.tsx +85 -85
  479. package/src/aldehyde/layout2/components/system-messages.tsx +75 -75
  480. package/src/aldehyde/layout2/components/theme-button.tsx +65 -65
  481. package/src/aldehyde/layout2/components/user-button.tsx +258 -258
  482. package/src/aldehyde/layout2/components/user-notification.tsx +74 -74
  483. package/src/aldehyde/layout2/css/header.css +41 -41
  484. package/src/aldehyde/layout2/css/sider.less +17 -17
  485. package/src/aldehyde/layout2/css/tabs-layout.less +18 -18
  486. package/src/aldehyde/layout2/header.tsx +278 -278
  487. package/src/aldehyde/layout2/layout-context.tsx +95 -95
  488. package/src/aldehyde/layout2/main.tsx +30 -30
  489. package/src/aldehyde/layout2/page.tsx +315 -315
  490. package/src/aldehyde/layout2/sider.tsx +230 -230
  491. package/src/aldehyde/layout2/tabs/tabs-context.tsx +37 -37
  492. package/src/aldehyde/layout2/tabs/tabs-layout.tsx +146 -146
  493. package/src/aldehyde/layout2/type/layout-type.ts +15 -15
  494. package/src/aldehyde/layout2/util/menu-util.tsx +125 -125
  495. package/src/aldehyde/layout3/components/tabs-layout.tsx +110 -110
  496. package/src/aldehyde/layout3/components/time.tsx +25 -25
  497. package/src/aldehyde/layout3/css/header.less +195 -195
  498. package/src/aldehyde/layout3/css/main.less +161 -161
  499. package/src/aldehyde/layout3/css/sider.less +32 -32
  500. package/src/aldehyde/layout3/css/tabs-layout.less +38 -38
  501. package/src/aldehyde/layout3/header.tsx +187 -187
  502. package/src/aldehyde/layout3/main.tsx +29 -29
  503. package/src/aldehyde/layout3/page.tsx +110 -110
  504. package/src/aldehyde/layout3/sider.tsx +198 -198
  505. package/src/aldehyde/layout4/components/tabs-layout.tsx +110 -110
  506. package/src/aldehyde/layout4/css/header.less +196 -196
  507. package/src/aldehyde/layout4/css/main.less +154 -154
  508. package/src/aldehyde/layout4/css/sider.less +37 -37
  509. package/src/aldehyde/layout4/css/tabs-layout.less +42 -42
  510. package/src/aldehyde/layout4/header.tsx +190 -190
  511. package/src/aldehyde/layout4/main.tsx +29 -29
  512. package/src/aldehyde/layout4/page.tsx +125 -125
  513. package/src/aldehyde/layout4/sider.tsx +201 -201
  514. package/src/aldehyde/layout5/css/header.less +35 -35
  515. package/src/aldehyde/layout5/css/sider.less +18 -18
  516. package/src/aldehyde/layout5/header.tsx +204 -204
  517. package/src/aldehyde/layout5/page.tsx +107 -107
  518. package/src/aldehyde/layout5/sider.tsx +235 -235
  519. package/src/aldehyde/list/calendar/index.less +20 -20
  520. package/src/aldehyde/list/calendar/index.tsx +157 -157
  521. package/src/aldehyde/list/card-list/card-list-item.tsx +112 -112
  522. package/src/aldehyde/list/card-list/index.less +154 -154
  523. package/src/aldehyde/list/card-list/index.tsx +83 -83
  524. package/src/aldehyde/list/gantt/index.less +8 -8
  525. package/src/aldehyde/list/gantt/index.tsx +508 -508
  526. package/src/aldehyde/list/vertical-list/index.less +208 -208
  527. package/src/aldehyde/list/vertical-list/index.tsx +55 -55
  528. package/src/aldehyde/list/vertical-list/item.tsx +136 -136
  529. package/src/aldehyde/locale/LocaleButton.tsx +48 -48
  530. package/src/aldehyde/locale/LocaleProvider.tsx +265 -265
  531. package/src/aldehyde/locale/langMp.ts +45 -45
  532. package/src/aldehyde/locale/translate.ts +80 -80
  533. package/src/aldehyde/locale/useLocale.ts +72 -72
  534. package/src/aldehyde/login/context-setter.tsx +130 -130
  535. package/src/aldehyde/login/index.css +19 -19
  536. package/src/aldehyde/login/login.tsx +255 -255
  537. package/src/aldehyde/login/router-login.tsx +107 -107
  538. package/src/aldehyde/login/vertify/index.css +143 -143
  539. package/src/aldehyde/login/vertify/index.tsx +360 -360
  540. package/src/aldehyde/login/vertify/tool.ts +13 -13
  541. package/src/aldehyde/login2/login-page.tsx +92 -92
  542. package/src/aldehyde/login2/login.tsx +227 -227
  543. package/src/aldehyde/login3/index.less +136 -136
  544. package/src/aldehyde/login3/login-page.tsx +71 -71
  545. package/src/aldehyde/lowcode-components/act-table/index.less +26 -26
  546. package/src/aldehyde/lowcode-components/act-table/index.tsx +139 -139
  547. package/src/aldehyde/lowcode-components/assets/lowcode-constant.tsx +12 -12
  548. package/src/aldehyde/lowcode-components/bar-chart/index.tsx +272 -268
  549. package/src/aldehyde/lowcode-components/base-button/index.less +7 -7
  550. package/src/aldehyde/lowcode-components/base-button/index.tsx +197 -197
  551. package/src/aldehyde/lowcode-components/base-image/index.tsx +220 -220
  552. package/src/aldehyde/lowcode-components/base-map/index.tsx +292 -292
  553. package/src/aldehyde/lowcode-components/base-radio/index.less +23 -23
  554. package/src/aldehyde/lowcode-components/base-radio/index.tsx +157 -157
  555. package/src/aldehyde/lowcode-components/base-table/index.tsx +268 -268
  556. package/src/aldehyde/lowcode-components/base-tabs/index.less +14 -14
  557. package/src/aldehyde/lowcode-components/base-tabs/index.tsx +183 -183
  558. package/src/aldehyde/lowcode-components/base-text/index.tsx +58 -58
  559. package/src/aldehyde/lowcode-components/border/border1/index.tsx +70 -70
  560. package/src/aldehyde/lowcode-components/border/border10/index.less +26 -26
  561. package/src/aldehyde/lowcode-components/border/border10/index.tsx +45 -45
  562. package/src/aldehyde/lowcode-components/border/border11/index.less +17 -17
  563. package/src/aldehyde/lowcode-components/border/border11/index.tsx +232 -232
  564. package/src/aldehyde/lowcode-components/border/border12/index.less +13 -13
  565. package/src/aldehyde/lowcode-components/border/border12/index.tsx +115 -115
  566. package/src/aldehyde/lowcode-components/border/border13/index.less +13 -13
  567. package/src/aldehyde/lowcode-components/border/border13/index.tsx +69 -69
  568. package/src/aldehyde/lowcode-components/border/border2/index.less +17 -17
  569. package/src/aldehyde/lowcode-components/border/border2/index.tsx +51 -51
  570. package/src/aldehyde/lowcode-components/border/border3/index.less +25 -25
  571. package/src/aldehyde/lowcode-components/border/border3/index.tsx +61 -61
  572. package/src/aldehyde/lowcode-components/border/border4/index.less +72 -72
  573. package/src/aldehyde/lowcode-components/border/border4/index.tsx +79 -79
  574. package/src/aldehyde/lowcode-components/border/border5/index.less +35 -35
  575. package/src/aldehyde/lowcode-components/border/border5/index.tsx +75 -75
  576. package/src/aldehyde/lowcode-components/border/border6/index.less +17 -17
  577. package/src/aldehyde/lowcode-components/border/border6/index.tsx +60 -60
  578. package/src/aldehyde/lowcode-components/border/border7/index.less +26 -26
  579. package/src/aldehyde/lowcode-components/border/border7/index.tsx +75 -75
  580. package/src/aldehyde/lowcode-components/border/border8/index.less +13 -13
  581. package/src/aldehyde/lowcode-components/border/border8/index.tsx +84 -84
  582. package/src/aldehyde/lowcode-components/border/border9/index.less +13 -13
  583. package/src/aldehyde/lowcode-components/border/border9/index.tsx +154 -154
  584. package/src/aldehyde/lowcode-components/capsule-bar-chart/index.tsx +290 -290
  585. package/src/aldehyde/lowcode-components/carousel/index.tsx +218 -218
  586. package/src/aldehyde/lowcode-components/circular-progress-chart/index.tsx +263 -263
  587. package/src/aldehyde/lowcode-components/column-3d-chart/index.tsx +442 -438
  588. package/src/aldehyde/lowcode-components/column-chart/index.tsx +297 -293
  589. package/src/aldehyde/lowcode-components/data-number/index.tsx +219 -219
  590. package/src/aldehyde/lowcode-components/data.d.ts +19 -19
  591. package/src/aldehyde/lowcode-components/decoration/decoration1/index.less +7 -7
  592. package/src/aldehyde/lowcode-components/decoration/decoration1/index.tsx +153 -153
  593. package/src/aldehyde/lowcode-components/decoration/decoration10/index.less +5 -5
  594. package/src/aldehyde/lowcode-components/decoration/decoration10/index.tsx +89 -89
  595. package/src/aldehyde/lowcode-components/decoration/decoration11/index.less +5 -5
  596. package/src/aldehyde/lowcode-components/decoration/decoration11/index.tsx +133 -133
  597. package/src/aldehyde/lowcode-components/decoration/decoration2/index.less +6 -6
  598. package/src/aldehyde/lowcode-components/decoration/decoration2/index.tsx +61 -61
  599. package/src/aldehyde/lowcode-components/decoration/decoration3/index.less +7 -7
  600. package/src/aldehyde/lowcode-components/decoration/decoration3/index.tsx +87 -87
  601. package/src/aldehyde/lowcode-components/decoration/decoration4/index.less +29 -29
  602. package/src/aldehyde/lowcode-components/decoration/decoration4/index.tsx +53 -53
  603. package/src/aldehyde/lowcode-components/decoration/decoration5/index.less +3 -3
  604. package/src/aldehyde/lowcode-components/decoration/decoration5/index.tsx +116 -116
  605. package/src/aldehyde/lowcode-components/decoration/decoration6/index.less +7 -7
  606. package/src/aldehyde/lowcode-components/decoration/decoration6/index.tsx +121 -121
  607. package/src/aldehyde/lowcode-components/decoration/decoration7/index.less +4 -4
  608. package/src/aldehyde/lowcode-components/decoration/decoration7/index.tsx +70 -70
  609. package/src/aldehyde/lowcode-components/decoration/decoration8/index.less +14 -14
  610. package/src/aldehyde/lowcode-components/decoration/decoration8/index.tsx +122 -122
  611. package/src/aldehyde/lowcode-components/decoration/decoration9/index.less +4 -4
  612. package/src/aldehyde/lowcode-components/decoration/decoration9/index.tsx +196 -196
  613. package/src/aldehyde/lowcode-components/effectScatter-map/index.tsx +315 -315
  614. package/src/aldehyde/lowcode-components/effectScatter-map-3d/index.tsx +419 -419
  615. package/src/aldehyde/lowcode-components/gauge-chart/index.tsx +254 -254
  616. package/src/aldehyde/lowcode-components/index.ts +130 -130
  617. package/src/aldehyde/lowcode-components/line-bar-chart/index.tsx +304 -300
  618. package/src/aldehyde/lowcode-components/line-chart/index.tsx +294 -290
  619. package/src/aldehyde/lowcode-components/liquid-chart/index.tsx +250 -250
  620. package/src/aldehyde/lowcode-components/lowcode-view/component/assets.ts +478 -478
  621. package/src/aldehyde/lowcode-components/lowcode-view/component/component-controller.ts +153 -153
  622. package/src/aldehyde/lowcode-components/lowcode-view/component/component-definition.ts +23 -23
  623. package/src/aldehyde/lowcode-components/lowcode-view/component/loading.tsx +20 -20
  624. package/src/aldehyde/lowcode-components/lowcode-view/component/util.ts +27 -27
  625. package/src/aldehyde/lowcode-components/lowcode-view/index.less +19 -19
  626. package/src/aldehyde/lowcode-components/lowcode-view/index.tsx +277 -277
  627. package/src/aldehyde/lowcode-components/lowcode-view/interface.ts +189 -189
  628. package/src/aldehyde/lowcode-components/pie-chart/index.tsx +353 -349
  629. package/src/aldehyde/lowcode-components/progress-chart/index.tsx +295 -295
  630. package/src/aldehyde/lowcode-components/radar-chart/index.tsx +322 -322
  631. package/src/aldehyde/lowcode-components/search-form/index.less +25 -25
  632. package/src/aldehyde/lowcode-components/search-form/index.tsx +121 -121
  633. package/src/aldehyde/lowcode-components/stroke-animation/index.tsx +219 -219
  634. package/src/aldehyde/module/block-menu-tree-drawer.tsx +118 -118
  635. package/src/aldehyde/module/criteria-page.tsx1 +175 -175
  636. package/src/aldehyde/module/draggable-modal.tsx +66 -66
  637. package/src/aldehyde/module/dtmpl-edit-card.tsx +477 -467
  638. package/src/aldehyde/module/dtmpl-edit-drawer.tsx +23 -23
  639. package/src/aldehyde/module/dtmpl-edit-modal.tsx +25 -25
  640. package/src/aldehyde/module/dtmpl-edit-page.tsx +597 -588
  641. package/src/aldehyde/module/dtmpl-editor.tsx +165 -165
  642. package/src/aldehyde/module/dtmpl-view-card.tsx +64 -64
  643. package/src/aldehyde/module/dtmpl-view-drawer.tsx +71 -71
  644. package/src/aldehyde/module/dtmpl-view-modal.tsx +56 -56
  645. package/src/aldehyde/module/embed-dtmpl-edit-page.tsx +137 -137
  646. package/src/aldehyde/module/index.less +4 -4
  647. package/src/aldehyde/module/ltmpl-drawer.tsx +60 -60
  648. package/src/aldehyde/module/ltmpl-modal.tsx +63 -63
  649. package/src/aldehyde/module/ltmpl-table.tsx +379 -379
  650. package/src/aldehyde/module/ttmpl-tree.tsx +47 -47
  651. package/src/aldehyde/routable/dtmpl-route.tsx +173 -173
  652. package/src/aldehyde/routable/import-route.tsx +35 -35
  653. package/src/aldehyde/routable/index.less +25 -25
  654. package/src/aldehyde/routable/ltmpl-route.tsx +539 -539
  655. package/src/aldehyde/routable/splitview-ltmpl-route.tsx +377 -377
  656. package/src/aldehyde/routable/ttmpl-route.tsx +93 -93
  657. package/src/aldehyde/routable/withroute.tsx +36 -36
  658. package/src/aldehyde/sso-Login/index.tsx +73 -73
  659. package/src/aldehyde/sso-Login/service/index.js +16 -16
  660. package/src/aldehyde/sso-Login/service/login.js +75 -75
  661. package/src/aldehyde/table/act-table.tsx +1844 -1838
  662. package/src/aldehyde/table/column/column-builder.tsx +876 -876
  663. package/src/aldehyde/table/column/column-selector.tsx +130 -130
  664. package/src/aldehyde/table/column/index.less +85 -85
  665. package/src/aldehyde/table/column/summary-builder.tsx +712 -712
  666. package/src/aldehyde/table/column/theme-color-getter.tsx +25 -25
  667. package/src/aldehyde/table/control-table-x-axis-wrapper.tsx +80 -80
  668. package/src/aldehyde/table/index.css +211 -211
  669. package/src/aldehyde/table/l2-act-table.tsx +91 -91
  670. package/src/aldehyde/table/modal-select-table.tsx +308 -308
  671. package/src/aldehyde/table/page-chart.less +10 -0
  672. package/src/aldehyde/table/page-chart.tsx +196 -0
  673. package/src/aldehyde/table/page-config-button.tsx +203 -203
  674. package/src/aldehyde/table/pagination.css +14 -14
  675. package/src/aldehyde/table/pagination.tsx +81 -81
  676. package/src/aldehyde/table/query-table.tsx +668 -668
  677. package/src/aldehyde/table/relation-table.tsx +1078 -1078
  678. package/src/aldehyde/table/report-table.tsx +125 -125
  679. package/src/aldehyde/table/resizable-table.tsx +97 -97
  680. package/src/aldehyde/table/row-table.tsx +23 -0
  681. package/src/aldehyde/table/select-table.tsx +559 -559
  682. package/src/aldehyde/table/selected-rows-card.tsx +78 -78
  683. package/src/aldehyde/table/stat/restat.tsx +122 -122
  684. package/src/aldehyde/table/table-util.tsx +25 -25
  685. package/src/aldehyde/tmpl/control-type-supportor.tsx +154 -154
  686. package/src/aldehyde/tmpl/hc-data-source.tsx +574 -574
  687. package/src/aldehyde/tmpl/hcservice-v3.tsx +1590 -1590
  688. package/src/aldehyde/tmpl/interface.tsx +936 -924
  689. package/src/aldehyde/tmpl/model-struc-v3.tsx +111 -111
  690. package/src/aldehyde/tmpl/superagent.js +146 -146
  691. package/src/aldehyde/tmpl/tmpl-config-analysis.tsx +585 -585
  692. package/src/aldehyde/tmpl/web-socket.ts +366 -366
  693. package/src/aldehyde/tree/act-tree.tsx +217 -217
  694. package/src/aldehyde/tree/block-menu-auth-tree.tsx +189 -189
  695. package/src/aldehyde/tree/index.css +22 -22
  696. package/src/aldehyde/tree/navigation-tree.tsx +39 -39
  697. package/src/aldehyde/tree/tmpl-tree.tsx +751 -751
  698. package/src/aldehyde/tree/tree-node.tsx +73 -73
  699. package/src/aldehyde/tree/tree-utils.tsx +317 -317
  700. package/src/aldehyde/units/EncryptUtils.js +37 -37
  701. package/src/aldehyde/units/image.d.ts +7 -7
  702. package/src/aldehyde/units/index.tsx +1367 -1367
  703. package/src/aldehyde/units/storage.js +2 -2
  704. package/src/aldehyde/utils/dsu.ts +27 -27
  705. package/src/aldehyde/welcome/HCWelcome.js +404 -404
  706. package/src/aldehyde/welcome/HCWelcome1.js +259 -259
  707. package/src/aldehyde/welcome/components/menu-card.less +96 -96
  708. package/src/aldehyde/welcome/components/menu-card.tsx +70 -70
  709. package/src/aldehyde/welcome/components/page-card.less +49 -49
  710. package/src/aldehyde/welcome/components/page-card.tsx +97 -97
  711. package/src/aldehyde/welcome/components/quick-entrance.less +120 -120
  712. package/src/aldehyde/welcome/components/quick-entrance.tsx +80 -80
  713. package/src/aldehyde/welcome/components/user-menus.less +192 -192
  714. package/src/aldehyde/welcome/components/user-menus.tsx +279 -279
  715. package/src/aldehyde/welcome/components/workbench.less +118 -118
  716. package/src/aldehyde/welcome/components/workbench.tsx +146 -146
  717. package/src/aldehyde/welcome/index.css +13 -13
@@ -1,1838 +1,1844 @@
1
- import React, { ReactNode } from "react";
2
- import {
3
- Button, Card, Checkbox, Col, Divider, Popover, Row, Space, Drawer, Tooltip,
4
- message, Layout, Table, Form as AntdForm, FormInstance, Modal, Input, Alert, Tabs, Radio, Typography
5
- } from "antd";
6
- import {
7
- ExportOutlined, FundOutlined, LineChartOutlined,
8
- PlusCircleOutlined, PlusOutlined, ReloadOutlined, RetweetOutlined, SearchOutlined,
9
- TableOutlined, ImportOutlined
10
- } from "@ant-design/icons";
11
- import _ from "lodash";
12
- import "./index.css";
13
- import {
14
- ActTableMode, ActTableViewModel, AggregateVO, ClassAddConfig, ColumnConfig,
15
- CustomButton, CustomButtonConfig, DoEditParam, DtmplData, JumpConfig, LtmplConfig, QueryKey,
16
- SelectedRow, ShowViewParam, TmplBaseProps,
17
- } from "../tmpl/interface";
18
- import HcserviceV3 from "../tmpl/hcservice-v3";
19
- import HCDataSource from "../tmpl/hc-data-source";
20
- import QueryTable from "./query-table";
21
- import CriteriaForm from "./../form/criteria-form";
22
- import ProgramConfig from "../units";
23
- import ColumnSelector from "./column/column-selector";
24
- import ExportFrame, { ExportType, ExportMode } from "../export/export-frame";
25
- import L2ActTable from "./l2-act-table";
26
- import Restat from "./stat/restat";
27
- import CollapseCard from "../controls/collapse-card";
28
- import ToolTipBar from "../detail/tooltipbar";
29
- import { LocaleContext } from "../locale/LocaleProvider";
30
- import BlockMenuTreeDrawer from "../module/block-menu-tree-drawer";
31
- import ModelSelectTable from "./../table/modal-select-table";
32
- import ColumnBuilder from "./column/column-builder";
33
- import ReportTable from "./report-table";
34
- import EntryControl from "../controls/entry-control";
35
- import DraggableModal from "../module/draggable-modal";
36
- import Icon from "../icon/aliIcon";
37
- import PageConfigButton from "./page-config-button";
38
- import { defPageSizeOptions } from "./pagination"; // 默认分页数
39
-
40
- const { Content, Sider } = Layout;
41
- const { Text } = Typography;
42
-
43
- type Level = "l1" | "l2";
44
-
45
- const enumTypes = ["select", "multiselect", "texttags", "checkbox", "radio", "steps"];
46
-
47
-
48
- const defaultDisabledColIds: string[] = ["20000", "10000"];
49
-
50
- interface ActTableProps extends TmplBaseProps {
51
- criteriaData: object;
52
- pageNo: number;
53
- pageSize: number;
54
- onChangePage: (pageNo: number, pageSize: number, pageSizeOptions?: number[]) => void;
55
- ltmplConfig: LtmplConfig;
56
- menuId?: string;
57
- showView?: (showVievParam: ShowViewParam) => void;
58
- doCreate?: (addtmplId: string, toCustomPage: boolean) => void;
59
- customCreatable?: boolean;
60
- doEdit?: (doEditParam: DoEditParam) => void;
61
- customEditable?: boolean;
62
- doDelete?: (code: string) => void;
63
- doSearch?: (params: object) => void;
64
- doRAction?: (ractionId: string, mainCode: string) => void;
65
- level?: Level;
66
- funcMode?: ActTableMode;
67
- title?: ReactNode;
68
- tip?: any;
69
- collapsible?: boolean;
70
- initCollapse?: boolean;
71
- readOnly?: boolean;
72
- tableType?: "common" | "report" | "select";
73
- operatable?: boolean;
74
- onSelectChange?: (val: { selectedRows: SelectedRow[], selectedDatas: DtmplData[] }) => void;
75
- defShowType?: ActTableViewModel; // 默认视图
76
- showPagination?: boolean; // 是否显示分页
77
- showAggregates?: boolean; // 是否显示统计数据
78
- userPageConfig?: { [key: string]: any }; // 用户页面配置本地缓存
79
- setUserPageConfig?: (config: { [key: string]: any }) => void; // 更新用户页面配置本地缓存
80
- resetUserPageConfig?: () => void; // 重置用户页面配置本地缓存
81
- allowUserConfig?: boolean; // 是否可用户自定义配置
82
- deleteCallback?: (val: object) => void; // 删除回调
83
- onUpdatePageSizeOptions?: (val: number[]) => void; // 更新分页数数组
84
- showEmpty?: boolean; // 空数据是否显示空状态,默认显示
85
- loadDataCallback?: (val: object[]) => void; // 请求数据回调函数
86
- doEdit2D?: (val: string) => void; // 2D图编辑
87
- doView2D?: (val: string) => void; // 2D图查看
88
- }
89
-
90
- interface ActTableStat {
91
- sortedColConfigs?: ColumnConfig[];
92
- queryKey?: QueryKey;
93
- loading?: boolean;
94
- selectedRows?: SelectedRow[];
95
- selectedDatas?: DtmplData[];
96
- hiddenColIds?: string[];
97
- drillingColIds?: string[];
98
- disabledColIds?: string[];
99
- hiddenRowCodes?: string[];
100
- viewModels?: ActTableViewModel[];
101
- showL2ActTable?: boolean;
102
- showL2Chart?: boolean;
103
- recordCode?: string;
104
- record?: DtmplData;
105
- blockMenuTreeDrawerOpen?: boolean;
106
- showCustomCard?: boolean;
107
- customButton?: CustomButton;
108
- customButtonData?: DtmplData[];
109
- showRatmplSelector?: boolean;
110
- aggregateVO?: AggregateVO;
111
- restatParams?: object;
112
- pageInfo?: object;
113
- ltreeData?: object;
114
- userCriteriaData: object;
115
- editings: string[]; // 行内编辑code
116
- delModalOpen?: boolean; // 强删除弹窗是否打开
117
- tabsOptions?: { key: string, value: string, label: React.ReactNode, title?: string, id?: string, ids?: string[] }[]; // tabs选项
118
- tabActiveKey?: string; // Tabs选中项
119
- pageSizeOptions?: number[]; // 设备分页数
120
- customDrawerSize?: number | string; // 自定义页面抽屉宽度
121
- }
122
- let serial_number = new Date().getTime();
123
- let busyReminderTime = 0;
124
- class ActTable extends React.PureComponent<ActTableProps, ActTableStat> {
125
- state = {
126
- //tableColumns: undefined,
127
- sortedColConfigs: undefined,
128
- queryKey: undefined,
129
- loading: true,
130
- disableCols: undefined,
131
- hiddenColIds: defaultDisabledColIds,
132
- selectedRows: [],
133
- selectedDatas: [],
134
- hiddenRowCodes: [],
135
- viewModels: [],
136
- drillingColIds: undefined,
137
- disabledColIds: undefined,
138
- showL2ActTable: false,
139
- showL2Chart: false,
140
- recordCode: undefined,
141
- record: undefined,
142
- blockMenuTreeDrawerOpen: false,
143
- showCustomCard: false,
144
- customButtonData: undefined,
145
- customButton: undefined,
146
- showRatmplSelector: false,
147
- aggregateVO: undefined,
148
- restatParams: undefined,
149
- pageInfo: { pageNo: 1, pageSize: 10 },
150
- ltreeData: {},
151
- userCriteriaData: undefined,
152
- editings: [], // 行内编辑code
153
- delModalOpen: false, // 强删除弹窗是否打开
154
- tabsOptions: [],
155
- tabActiveKey: "all",
156
- pageSizeOptions: defPageSizeOptions,
157
- customDrawerSize: undefined
158
- };
159
-
160
- static contextType = LocaleContext;
161
- context: React.ContextType<typeof LocaleContext>;
162
- formRef = React.createRef<FormInstance>(); // 可编辑表格的form Ref
163
- isJumpRef = React.createRef<boolean>(); // 是否是action跳转
164
-
165
- static defaultProps = {
166
- criteriaData: {},
167
- funcMode: "complete",
168
- collapsible: false,
169
- initCollapse: false,
170
- readOnly: false,
171
- operatable: true,
172
- showPagination: true,
173
- showAggregates: true,
174
- showEmpty: true,
175
- };
176
-
177
- // 获取标签选项
178
- getTabsOptions = async () => {
179
- const { ltmplConfig, criteriaData, sourceId } = this.props;
180
- const { translate } = this.context;
181
- const { split2TabCriteria, showSplitTabDataCount } = ltmplConfig || {};
182
- if (!split2TabCriteria) {
183
- return;
184
- }
185
- const allIds = [];
186
- let groupCount = [];
187
- if (showSplitTabDataCount) {
188
- groupCount = await HcserviceV3.getLtmplDataGroupCount(sourceId);
189
- }
190
- const options = split2TabCriteria.map(fieldConfig => {
191
- const id = `c_${fieldConfig.id}`;
192
- allIds.push(id);
193
- if (enumTypes.includes(fieldConfig.controlType || fieldConfig.extControlType)) {
194
- const items = HCDataSource.getEnums(fieldConfig.mstrucId);
195
- const options = items.map((item) => {
196
- const count = groupCount.find(r => r[0]?.fieldId === fieldConfig.id && r[0]?.value === item.title)?.[1]?.value;
197
- const countVal = (count || count === 0) ? ` (${count})` : "";
198
- return {
199
- label: <span style={{ padding: "0 10px" }}>{translate("${" + item.title + "}")}{countVal}</span>,
200
- key: item.value,
201
- id,
202
- title: translate("${" + item.title + "}") + countVal,
203
- value: item.value
204
- };
205
- });
206
- if (fieldConfig.relDeduplication && fieldConfig.exceptCodes?.length) {
207
- return options.filter(item => !fieldConfig.exceptCodes.includes(item.key));
208
- }
209
- return options;
210
- }
211
- if ([fieldConfig.controlType, fieldConfig.extControlType].includes("single-checkbox")) {
212
- const count = groupCount.find(r => r[0]?.fieldId === fieldConfig.id)?.[1]?.value;
213
- const countVal = (count || count === 0) ? ` (${count})` : "";
214
- return [{
215
- label: <span style={{ padding: "0 10px" }}>{translate("${" + fieldConfig.title + "}")}{countVal}</span>,
216
- key: "1",
217
- id,
218
- title: translate("${" + fieldConfig.title + "}") + countVal,
219
- value: "1",
220
- }];
221
- }
222
- return [];
223
- })?.flat() || [];
224
- const defOption = {
225
- label: <span style={{ padding: "0 10px" }}>{translate("${全部}")}</span>,
226
- key: "all",
227
- ids: allIds,
228
- title: translate("${全部}"),
229
- value: "all"
230
- };
231
- const temId = Object.keys(criteriaData).find(r => allIds.includes(r));
232
- const tabActiveKey = temId ? criteriaData[temId] : "all";
233
- this.setState({ tabsOptions: [defOption, ...options], tabActiveKey });
234
- }
235
-
236
- loadData = async (
237
- hiddenColIds: string[],
238
- hiddenRowCodes: string[],
239
- sortedColConfigs: ColumnConfig[]
240
- ) => {
241
- const {
242
- sourceId, criteriaData, ltmplConfig,
243
- mainCode, level, pageNo, pageSize, serverKey, defShowType, userPageConfig
244
- } = this.props;
245
-
246
- if (!this.isSameSourceQuery(sourceId, criteriaData)) {
247
- return
248
- }
249
-
250
-
251
- if (!ltmplConfig) {
252
- return;
253
- }
254
- // 处理菜单切换,查询条件清空,重置tab拆解条件选中项
255
- const tabActiveKey = ltmplConfig.split2TabCriteria?.find(r => criteriaData[`c_${r.id}`])?.id;
256
- this.setState({
257
- loading: true,
258
- userCriteriaData: criteriaData,
259
- tabActiveKey: tabActiveKey ? criteriaData[`c_${tabActiveKey}`] : "all"
260
- });
261
- let disabledColIds: string[] = [];
262
- let hiddenColIds_ = [...hiddenColIds];
263
- if (criteriaData && criteriaData["drillingColIds"]) {
264
- let dColIds = [...criteriaData["drillingColIds"]];
265
- ltmplConfig.columns.forEach((item) => {
266
- if (
267
- item.statColType == "dimension" &&
268
- !dColIds.includes(item.id) &&
269
- !hiddenColIds_.includes(item.id)
270
- ) {
271
- hiddenColIds_.push(item.id);
272
- disabledColIds.push(item.id);
273
- }
274
- if (
275
- item.statColType == "dimension" &&
276
- !dColIds.includes(item.id) &&
277
- !disabledColIds.includes(item.id)
278
- ) {
279
- disabledColIds.push(item.id);
280
- }
281
- });
282
- hiddenColIds_ = hiddenColIds_.filter((id) => {
283
- return !dColIds.includes(id);
284
- });
285
- }
286
- ltmplConfig.columns.forEach((item) => {
287
- if (item.hidden) {
288
- hiddenColIds_.push(item.id);
289
- }
290
- });
291
- /** 构建column **/
292
- const { defaultPageSize, showType } = ltmplConfig;
293
-
294
- let pageInfo = {
295
- pageNo: pageNo || 1,
296
- pageSize: pageSize || defaultPageSize || 10,
297
- virtualEndPageNo: undefined,
298
- };
299
- const viewModels = this.state.viewModels.length > 0 ? this.state.viewModels : (userPageConfig?.["viewModels"] || [defShowType || showType || "table"]);
300
-
301
- /** 构建 dataSource **/
302
- //构建过滤条件
303
- const params = { ...criteriaData, ...pageInfo, mainCode };
304
- let queryKey: QueryKey;
305
- if (level && level === "l2") {
306
- queryKey = await HcserviceV3.requestL2LtmplQueryKey(serverKey, sourceId, params);
307
- } else {
308
- if (viewModels.includes("ganttChart")) {
309
- queryKey = await HcserviceV3.requestGttRootQueryKey(serverKey, sourceId, params);
310
- } else {
311
- queryKey = await HcserviceV3.requestLtmplQueryKey(serverKey, sourceId, params);
312
- }
313
- }
314
-
315
- if (!queryKey.sourceId || queryKey.sourceId == this.props.sourceId) {
316
- this.setState({
317
- pageInfo,
318
- disabledColIds, hiddenColIds: hiddenColIds_, hiddenRowCodes,
319
- sortedColConfigs, queryKey, showL2Chart: false, selectedRows: [], selectedDatas: [],
320
- viewModels
321
- });
322
- }
323
- this.setState({
324
- loading: false,
325
- });
326
- };
327
-
328
- doCustomButton = async (customButton: CustomButton, records: DtmplData[]) => {
329
- if (!this.buttonClickable()) {
330
- return;
331
- }
332
- const { serverKey, sourceId } = this.props;
333
- let doType = customButton.doType;
334
- let config: CustomButtonConfig = ProgramConfig.getCustomButtonConfig(customButton.id);
335
- if ("request_refresh" == doType) {
336
- if (config && config.doAction) {
337
- await config.doAction(customButton, records);
338
- } else if (config && config.getRequestUrl) {
339
- let url = await config.getRequestUrl(customButton, records);
340
- await HcserviceV3.doPostRequest(serverKey, url);
341
- } else if (customButton.path) {
342
- let codes = [];
343
- let res = undefined;
344
- if (records != null) {
345
- records.forEach(item => {
346
- codes.push(item.code)
347
- })
348
- }
349
- if (customButton.requestMethod === "get") {
350
- res = await HcserviceV3.doGetRequest(serverKey, customButton.path, { codes });
351
- } else {
352
- res = await HcserviceV3.doPostRequest(serverKey, customButton.path, { codes });
353
- }
354
- if (res?.msg || res?.message) {
355
- message.info(res.msg || res.message);
356
- }
357
- } else {
358
- message.error("Button Config Error");
359
- return;
360
- }
361
- this.doSearchDirect(null);
362
- } else if ("show_window" == doType) {
363
- this.setState({
364
- showCustomCard: true,
365
- customButton,
366
- customButtonData: records,
367
- });
368
- } else {
369
- message.error("Unsuport Button dotype " + doType);
370
- }
371
- };
372
-
373
- renderAboveCustomPage = () => {
374
- return this.renderCustomPage("above-table");
375
- };
376
-
377
- renderOhterCustomPage = () => {
378
- return (
379
- <>
380
- {this.renderCustomPage("under-table")}
381
- {this.renderCustomPage("modal-window")}
382
- {this.renderCustomPage("left-drawer")}
383
- {this.renderCustomPage("right-drawer")}
384
- </>
385
- );
386
- };
387
-
388
- renderCustomPage = (
389
- windowPosition:
390
- | "under-table"
391
- | "above-table"
392
- | "modal-window"
393
- | "left-drawer"
394
- | "right-drawer"
395
- ) => {
396
- const { translate } = this.context;
397
- const { customButton, customButtonData, customDrawerSize } = this.state;
398
-
399
- if (!customButton) {
400
- return "";
401
- }
402
- if (windowPosition && windowPosition != customButton.windowPosition) {
403
- return "";
404
- }
405
-
406
- let customProps = {
407
- customButton: customButton, data: customButtonData,
408
- onOk: () => { this.actTableDoSearch(null) }
409
- , onclose: () => {
410
- this.setState({ customButton: undefined });
411
- }
412
- };
413
-
414
- let config: CustomButtonConfig = ProgramConfig.getCustomButtonConfig(customButton.id);
415
- let page;
416
- if (config && config.getCurrentPage) {
417
- page = config.getCurrentPage(customButton, customButtonData);
418
- }
419
- if (!page) {
420
- page = ProgramConfig.getCustomPage(customButton.id);
421
- }
422
-
423
- if (!page) {
424
- message.error("Not found CustomButton Page");
425
- this.setState({
426
- customButton: undefined
427
- })
428
- return;
429
- }
430
-
431
- let customElement = React.createElement(page, customProps);
432
- if (
433
- customButton.windowPosition == "under-table" ||
434
- customButton.windowPosition == "above-table"
435
- ) {
436
- return (
437
- <Card
438
- id={"CustomCard" + customButton.id}
439
- size={"small"}
440
- style={{ marginTop: "6px" }}
441
- extra={
442
- <Button
443
- size={"small"}
444
- danger={true}
445
- onClick={() => {
446
- this.setState({ customButton: undefined });
447
- }}
448
- >
449
- {translate("${关闭}")}
450
- </Button>
451
- }
452
- >
453
- {customElement}
454
- </Card>
455
- );
456
- } else if (
457
- customButton.windowPosition == "left-drawer" ||
458
- customButton.windowPosition == "right-drawer"
459
- ) {
460
- return (
461
- <Drawer
462
- open={true}
463
- id={"CustomCard" + customButton.id}
464
- placement={
465
- customButton.windowPosition == "right-drawer" ? "right" : "left"
466
- }
467
- resizable={{ onResize: (newSize => this.setState({ customDrawerSize: newSize })) }}
468
- size={customDrawerSize !== undefined ? customDrawerSize : customButton.windowWidth}
469
- onClose={() => {
470
- this.setState({ customButton: undefined });
471
- }}
472
- styles={{ body: { minWidth: customButton.windowWidth } }}
473
- >
474
- {customElement}
475
- </Drawer>
476
- );
477
- } else if (customButton.windowPosition == "modal-window") {
478
- return (
479
- <DraggableModal
480
- open={true}
481
- closable={true}
482
- width={customButton.windowWidth}
483
- style={{ height: customButton.windowHeight }}
484
- onCancel={() => {
485
- this.setState({ customButton: undefined });
486
- }}
487
- >
488
- {customElement}
489
- </DraggableModal>
490
- );
491
- }
492
- };
493
-
494
-
495
- async componentDidMount() {
496
- const { ltmplConfig, tableType, userPageConfig, defShowType, onUpdatePageSizeOptions, setUserPageConfig, pageSize } = this.props;
497
- const { sortedColIds } = userPageConfig || {};
498
- const { translate } = this.context;
499
- let sortedColConfigs = undefined;
500
- if (ltmplConfig) {
501
- sortedColConfigs = tableType == 'report' ? ltmplConfig.columns : [
502
- { id: "10000", title: translate("${排序}"), originalId: "10000" },
503
- { id: "20000", title: translate("${隐藏}"), originalId: "20000" },
504
- ...ltmplConfig.columns,
505
- ];
506
- if (sortedColIds) { // 使用缓存的列排序
507
- sortedColConfigs.sort((a, b) => sortedColIds.indexOf(a.id) - sortedColIds.indexOf(b.id));
508
- }
509
- const temViewModels = userPageConfig?.["viewModels"] || [defShowType || ltmplConfig?.showType || "table"];
510
- this.setState({ viewModels: temViewModels });
511
- if (onUpdatePageSizeOptions && temViewModels.includes("cardList")) { // 初始化是卡片视图,则更新父组件中分页数组
512
- const temPageSizes = Array.from({ length: 7 }, (_, i) => ltmplConfig.rowCardCount * Math.pow(2, i));
513
- onUpdatePageSizeOptions(temPageSizes);
514
- if (setUserPageConfig && !(userPageConfig?.pageSize >= 0)) setUserPageConfig({ pageSize: 1 });
515
- this.setState({ pageSizeOptions: temPageSizes, sortedColConfigs });
516
- } else {
517
- this.loadData(userPageConfig?.hiddenColIds || defaultDisabledColIds, [], sortedColConfigs);
518
- }
519
- }
520
- this.getTabsOptions();
521
- }
522
-
523
- // 卡片列表-更新列表分页数
524
- handleCardListPageSize(preViewModels, viewModels) {
525
- const { ltmplConfig, onChangePage, pageSize, pageNo } = this.props;
526
- const { defaultPageSize } = ltmplConfig || {};
527
- const preIsCard = preViewModels.includes("cardList");
528
- const isCard = viewModels.includes("cardList");
529
- let temPageSizes = defPageSizeOptions;
530
- let temPageSize = defaultPageSize;
531
- if ((!preIsCard && !isCard) || (preIsCard && isCard)) {
532
- return;
533
- }
534
- if (!preIsCard && isCard) { // 普通切换到Card
535
- temPageSizes = Array.from({ length: 7 }, (_, i) => ltmplConfig.rowCardCount * Math.pow(2, i));
536
- temPageSize = temPageSizes.includes(Number(pageSize)) ? pageSize : (temPageSizes.includes(Number(defaultPageSize)) ? defaultPageSize : temPageSizes[1]);
537
- } else if (preIsCard && !isCard) { // card切换到普通
538
- temPageSize = defPageSizeOptions.includes(Number(pageSize)) ? pageSize : (defPageSizeOptions.includes(Number(defaultPageSize)) ? defaultPageSize : defPageSizeOptions[1]);
539
- }
540
- this.setState({ pageSizeOptions: temPageSizes });
541
- onChangePage(pageNo || 1, temPageSize, temPageSizes);
542
- }
543
-
544
- async componentDidUpdate(prevProps, prevState) {
545
- const { sourceId, criteriaData, ltmplConfig, tableType, pageSize, pageNo, userPageConfig, defShowType } = this.props;
546
- // const {userCriteriaData:preUserCriteriaData}=prevState;
547
- const { userCriteriaData } = this.state;
548
- const { translate } = this.context;
549
- let {
550
- ltmplConfig: preLtmplConfig,
551
- criteriaData: preCriteriaData,
552
- sourceId: preSourceId, pageSize: prePageSize, pageNo: prePageNo,
553
- userPageConfig: preUserPageConfig
554
- } = prevProps;
555
- if (!this.isSameSourceQuery(sourceId, criteriaData)) {
556
- return false;
557
- }
558
-
559
- if (prePageSize != pageSize || pageNo != prePageNo) {
560
- this.setState({
561
- pageInfo: { pageNo, pageSize },
562
- userCriteriaData: criteriaData,
563
- })
564
- }
565
- if (!preUserPageConfig && userPageConfig) {
566
- this.setState({ viewModels: userPageConfig?.["viewModels"] || [defShowType || ltmplConfig?.showType || "table"] });
567
- }
568
- if (!_.isEqual(prevState.viewModels, this.state.viewModels)) { // 显示视图变化-更改卡片列表分页条数
569
- this.handleCardListPageSize(prevState.viewModels, this.state.viewModels);
570
- }
571
- let { hiddenColIds, sortedColConfigs } = this.state;
572
- let currentQueryParams = ProgramConfig.transQueryParamsToStr(criteriaData, false, [
573
- "pageSize",
574
- "pageNo",
575
- ]);
576
- let preCurrentQueryParams = ProgramConfig.transQueryParamsToStr(userCriteriaData, false, [
577
- "pageSize",
578
- "pageNo",
579
- ]);
580
- if ((sourceId && preSourceId != sourceId) ||
581
- (ltmplConfig &&
582
- (!preLtmplConfig || ltmplConfig.id != preLtmplConfig.id)) ||
583
- ((currentQueryParams != preCurrentQueryParams) &&
584
- (!criteriaData['menuId'] || preCriteriaData.menuId == criteriaData['menuId']))
585
- ) {
586
- //5秒后允许再次请求数据
587
- //refresh=false;
588
- if (preLtmplConfig && ltmplConfig.id == preLtmplConfig.id) {
589
- await this.loadData(hiddenColIds, [], sortedColConfigs);
590
- } else {
591
- let sColConfigs = undefined;
592
- const { sortedColIds } = userPageConfig || {};
593
- if (ltmplConfig) {
594
- sColConfigs = tableType == 'report' ? ltmplConfig.columns : [
595
- { id: "10000", title: translate("${排序}"), originalId: "10000" },
596
- { id: "20000", title: translate("${隐藏}"), originalId: "20000" },
597
- ...ltmplConfig.columns,
598
- ];
599
- if (sortedColIds) { // 使用缓存的列排序
600
- sColConfigs.sort((a, b) => sortedColIds.indexOf(a.id) - sortedColIds.indexOf(b.id));
601
- }
602
- }
603
- await this.loadData(userPageConfig?.hiddenColIds || defaultDisabledColIds, [], sColConfigs);
604
- }
605
-
606
- } else {
607
- return false;
608
- }
609
- }
610
-
611
- isSameSourceQuery = (sourceId, criteriaData) => {
612
- // action跳转,路由变化时,变化后路由不存在sourceId||menuId,则不触发查询
613
- if (this.isJumpRef.current && !criteriaData['sourceId'] && !criteriaData['menuId']) {
614
- this.isJumpRef.current = false;
615
- return false;
616
- }
617
-
618
- if (sourceId && criteriaData && (criteriaData['sourceId'] && criteriaData['sourceId'] != sourceId)
619
- || (criteriaData['menuId'] && criteriaData['menuId'] != sourceId)) {
620
- return false;
621
- } else {
622
- return true;
623
- }
624
- };
625
-
626
- handleShowChart = () => {
627
- this.setState({
628
- showL2Chart: !this.state.showL2Chart,
629
- });
630
- };
631
-
632
- handleDataAnalysis = () => {
633
- this.setState({
634
- showL2ActTable: !this.state.showL2ActTable,
635
- });
636
- };
637
-
638
- unHiden = () => {
639
- const { ltmplConfig } = this.props;
640
- const { hiddenColIds, sortedColConfigs } = this.state;
641
- this.setState({
642
- hiddenRowCodes: [],
643
- });
644
- };
645
-
646
- onHide = (code: string) => {
647
- const { hiddenRowCodes } = this.state;
648
- let hiddenCodes = [...hiddenRowCodes, code];
649
- this.setState({
650
- hiddenRowCodes: hiddenCodes,
651
- });
652
- };
653
-
654
- changeViewModel = (viewModels) => {
655
- const { setUserPageConfig } = this.props;
656
- const { hiddenColIds, hiddenRowCodes, sortedColConfigs, viewModels: oldViewModels } = this.state;
657
- setUserPageConfig && setUserPageConfig({ viewModels });
658
- this.setState({ viewModels }, () => {
659
- if (viewModels.length && viewModels.includes("ganttChart") !== oldViewModels.includes("ganttChart")) {
660
- this.loadData(hiddenColIds, hiddenRowCodes, sortedColConfigs); // 前后选择是否存在甘特图,刷新数据
661
- }
662
- });
663
- };
664
-
665
- changeHiddenColumns = (hiddenColIds: string[]) => {
666
- const { setUserPageConfig } = this.props;
667
- this.setState({ showL2Chart: false, hiddenColIds });
668
- setUserPageConfig && setUserPageConfig({ hiddenColIds });
669
- };
670
-
671
- doSelectedAction = async (actionId: string, codes, params: object) => {
672
- const { selectedRows } = this.state;
673
- this.doAction(actionId, selectedRows, params);
674
- };
675
-
676
- doAction = async (actionId: string, selectedRows: SelectedRow[], params) => {
677
- const { serverKey } = this.props;
678
- const { hiddenColIds, hiddenRowCodes, sortedColConfigs } = this.state;
679
- this.setState({
680
- loading: true,
681
- });
682
- let result: boolean = await HcserviceV3.postActions(
683
- serverKey,
684
- actionId,
685
- selectedRows,
686
- params
687
- );
688
- if (result) {
689
- //重新加载数据
690
- this.loadData(hiddenColIds, hiddenRowCodes, sortedColConfigs);
691
- } else {
692
- this.setState({
693
- loading: false,
694
- });
695
- }
696
- };
697
-
698
- doRowAction = async (actionId: string, codes: string[], params: object) => {
699
- this.doAction(actionId, [{ title: undefined, code: codes[0] }], params);
700
- };
701
-
702
- doDelete = async () => {
703
- const { sourceId, serverKey, mainCode } = this.props;
704
- const {
705
- selectedRows,
706
- hiddenColIds,
707
- hiddenRowCodes,
708
- sortedColConfigs,
709
- } = this.state;
710
- this.setState({
711
- loading: true,
712
- });
713
- let result: boolean = await HcserviceV3.deleteData(
714
- serverKey,
715
- sourceId,
716
- selectedRows,
717
- mainCode
718
- );
719
- if (result) {
720
- //重新加载数据
721
- this.loadData(hiddenColIds, hiddenRowCodes, sortedColConfigs);
722
- } else {
723
- this.setState({
724
- loading: false,
725
- });
726
- }
727
- };
728
-
729
- doDeleteByCode = async (record: DtmplData) => {
730
- const { sourceId, serverKey, mainCode, doDelete, deleteCallback } = this.props;
731
- const { hiddenColIds, hiddenRowCodes, sortedColConfigs } = this.state;
732
- this.setState({
733
- loading: true,
734
- });
735
- let result: boolean = await HcserviceV3.deleteByCode(
736
- serverKey,
737
- sourceId,
738
- [record.code],
739
- mainCode
740
- );
741
- if (result) {
742
- //重新加载数据
743
- this.loadData(hiddenColIds, hiddenRowCodes, sortedColConfigs);
744
- doDelete && doDelete(record.code);
745
- deleteCallback && deleteCallback(record);
746
- this.setState({ loading: false, delModalOpen: false, recordCode: undefined, record: undefined });
747
- } else {
748
- this.setState({ loading: false });
749
- }
750
- };
751
-
752
- doSelectedCQuery = async (cqueryId: string) => { };
753
-
754
- doJump = async (jump: JumpConfig, record_: DtmplData) => {
755
- let record = record_.fieldMap ? record_.fieldMap : record_;
756
- const version = localStorage.getItem("version") || "";
757
-
758
- let url = null;
759
- let path = jump.path;
760
- if (!path) {
761
- path = "/";
762
- }
763
- //是否以http开头
764
- if (path?.indexOf("#") == 0 || url?.indexOf("/#") == 0) {
765
- url = "";
766
- } else if (
767
- path.indexOf("http://") == 0 ||
768
- path.indexOf("HTTP://") == 0 ||
769
- path.indexOf("https://") == 0 ||
770
- path.indexOf("HTTPS://") == 0
771
- ) {
772
- url = path.split("//")[0] + "//";
773
- path = path.split("//")[1];
774
- } else {
775
- url = `/#/${version}`;
776
- }
777
-
778
- //处理路由参数
779
- let paths = path.split("/");
780
-
781
- let routeParamConfigs = jump.routeParams;
782
- if (routeParamConfigs) {
783
- for (let i = 0; i < paths.length; i++) {
784
- if (paths[i].indexOf(":") == 0) {
785
- let pa = paths[i].substring(1);
786
- //根据参数名匹配参数
787
- for (let p of routeParamConfigs) {
788
- if (p && pa == p.title) {
789
- //赋值替换
790
- let v = record[p.id] ? record[p.id] : p.defaultValue;
791
- paths[i] = v;
792
- break;
793
- }
794
- }
795
- }
796
- }
797
- url = ProgramConfig.joinPath(url, paths.join("/"));
798
- } else {
799
- url = ProgramConfig.joinPath(url, path);
800
- }
801
-
802
- //处理search 参数
803
- let searchParamConfigs = jump.searchParams;
804
- let searchs = [];
805
- //放入token
806
- if (jump.tokenName) {
807
- searchs[0] = jump.tokenName + "=" + ProgramConfig.hydrocarbonToken();
808
- }
809
-
810
- if (searchParamConfigs) {
811
- let initSearchLength = searchs.length;
812
- for (let i = 0; i < searchParamConfigs.length; i++) {
813
- let p = searchParamConfigs[i];
814
- let v = record[p.id] ? record[p.id] : p.defaultValue;
815
- if (!v && p.title == "code") {
816
- v = record_.code;
817
- }
818
- searchs[initSearchLength + i] = p.title + "=" + v;
819
- }
820
- }
821
- if (searchs.length > 0) {
822
- if (url.indexOf("?") != url.length - 1) {
823
- url = url + "?";
824
- }
825
- url = url + searchs.join("&");
826
- }
827
- if (jump.linkTarget == '_self') {
828
- this.isJumpRef.current = true;
829
- window.location.hash = url.substring(url.indexOf("#") + 1);
830
- } else {
831
- debugger
832
- if (url.indexOf("/#") == 0) {
833
- // url=window.location.href.split("#/")[0]+url;
834
- url = window.location.href.split("#/")[0] + url.substring(url.indexOf("/#") + 1);
835
- }
836
- window.open(url);
837
- }
838
- // if (
839
- // url.indexOf("#") == 0 ||
840
- // url.indexOf("/#") == 0 ||
841
- // url.indexOf("//#") == 0
842
- // ) {
843
- // window.location.hash = url.substring(url.indexOf("#") + 1);
844
- // } else {
845
- // window.open(url);
846
- // }
847
- };
848
-
849
- blockMenuTreeDrawerOpen = (record) => {
850
- this.setState({
851
- blockMenuTreeDrawerOpen: true,
852
- recordCode: record.code,
853
- record
854
- })
855
- }
856
-
857
- doRowJump = async (jump: JumpConfig, record: DtmplData) => {
858
- this.doJump(jump, record);
859
- };
860
-
861
- renderExportButton = (title, type: ExportType, sourceId?: string) => {
862
- const { pageNo, pageSize, serverKey, ltmplConfig, tableType } = this.props;
863
-
864
- //let buttons = ltmplConfig?.buttons;
865
-
866
- const { queryKey } = this.state;
867
- const { translate } = this.context;
868
- let exportModes: ExportMode[] = tableType == "report" ?
869
- ["all"] : ["current", "page", "all"];
870
-
871
- return (
872
- <Popover
873
- content={
874
- <ExportFrame //导出组件
875
- currentPage={{
876
- pageNo: pageNo ? pageNo : 1,
877
- pageSize: pageSize ? pageSize : ltmplConfig.defaultPageSize,
878
- }}
879
- exportModes={exportModes}
880
- type={type}
881
- serverKey={serverKey}
882
- queryKey={queryKey}
883
- sourceId={sourceId}
884
- title={translate(
885
- "${" + ltmplConfig.title + "}" + "-" + "${" + title + "}"
886
- )}
887
- />
888
- }
889
- title={translate("${" + title + "}")}
890
- placement="bottomRight"
891
- trigger="click"
892
- >
893
- <Tooltip title={translate("${" + title + "}")}>
894
- <Button
895
- style={{
896
- // marginLeft: "5px",
897
- }}
898
- //为了点击到没有导出模块,使组件不致销毁,丢失导出数据
899
- >{type == "ltmpl-data-excel" ? <ExportOutlined /> : title}
900
- </Button>
901
- </Tooltip>
902
- </Popover>
903
- );
904
- };
905
-
906
- renderFileExportButton = () => {
907
- const { ltmplConfig } = this.props;
908
- let fileExports = ltmplConfig?.topFileExports;
909
- if (fileExports) {
910
- return fileExports.map((fileExport) => {
911
- return this.renderExportButton(
912
- fileExport.title,
913
- "ltmpl-data-filedata",
914
- fileExport.id
915
- );
916
- });
917
- } else {
918
- return <></>;
919
- }
920
- };
921
-
922
- doSelectedJump = async (jump: JumpConfig) => {
923
- const { selectedDatas } = this.state;
924
- if (selectedDatas.length == 1) {
925
- this.doJump(jump, selectedDatas[0]);
926
- }
927
- };
928
-
929
- changeRowSelection = (
930
- selectedRows: SelectedRow[],
931
- selectedDatas: DtmplData[]
932
- ) => {
933
- const { onSelectChange } = this.props;
934
- this.setState({ selectedRows, selectedDatas });
935
- if (onSelectChange) {
936
- onSelectChange({ selectedRows, selectedDatas });
937
- }
938
- };
939
-
940
- onChangeColSort = (sortedColConfigs: ColumnConfig[]) => {
941
- const { setUserPageConfig } = this.props;
942
- this.setState({ sortedColConfigs });
943
- const sortedColIds = sortedColConfigs.map(r => r.id);
944
- setUserPageConfig && setUserPageConfig({ sortedColIds });
945
- };
946
-
947
- // 更新本地缓存列宽度
948
- onChangeResize = (colResize: { [key: string]: number }) => {
949
- const { setUserPageConfig, userPageConfig } = this.props;
950
- const oldColResize = userPageConfig?.colResize || {};
951
- setUserPageConfig && setUserPageConfig({ colResize: { ...oldColResize, ...colResize } });
952
- }
953
-
954
- getAddTmplButton = (classAddConfigs: ClassAddConfig[]) => {
955
- const { translate } = this.context;
956
- if (classAddConfigs && classAddConfigs.length < 1) {
957
- return translate("${没有分类添加按钮}");
958
- }
959
- return classAddConfigs.map((config) => {
960
- return (
961
- <p>
962
- <Button
963
- size={"small"}
964
- type={"text"}
965
- onClick={() => this.props.doCreate(config.id, false)}
966
- >
967
- {config.title}
968
- </Button>
969
- </p>
970
- );
971
- });
972
- };
973
-
974
- // 重置当前页面配置
975
- handleResetUserPageConfig = () => {
976
- const { resetUserPageConfig, ltmplConfig, tableType, defShowType } = this.props;
977
- const { translate } = this.context;
978
- let sortedColConfigs = undefined;
979
- if (ltmplConfig) {
980
- sortedColConfigs = tableType === 'report' ? ltmplConfig.columns : [
981
- { id: "10000", title: translate("${排序}"), originalId: "10000" },
982
- { id: "20000", title: translate("${隐藏}"), originalId: "20000" },
983
- ...ltmplConfig.columns,
984
- ];
985
- }
986
- this.setState({ viewModels: [defShowType || ltmplConfig.showType || "table"], hiddenColIds: defaultDisabledColIds, sortedColConfigs });
987
- resetUserPageConfig();
988
- }
989
-
990
- // 更新当前页面配置
991
- handleUpdateUserPageConfig = (val: { [key: string]: any }) => {
992
- const { sortedColIds, hiddenColIds, viewModels, criteriaData } = val || {};
993
- const { setUserPageConfig, ltmplConfig, tableType, defShowType, menuId } = this.props;
994
- const { userCriteriaData } = this.state;
995
- const { translate } = this.context;
996
- let sortedColConfigs = undefined;
997
- if (ltmplConfig) {
998
- sortedColConfigs = tableType === 'report' ? ltmplConfig.columns : [
999
- { id: "10000", title: translate("${排序}"), originalId: "10000" },
1000
- { id: "20000", title: translate("${隐藏}"), originalId: "20000" },
1001
- ...ltmplConfig.columns,
1002
- ];
1003
- }
1004
- if (sortedColIds) { // 页面配置更新列排序
1005
- sortedColConfigs.sort((a, b) => sortedColIds.indexOf(a.id) - sortedColIds.indexOf(b.id));
1006
- }
1007
- // 旧过滤参数设置为空
1008
- const oldParms = Object.keys(userCriteriaData || {}).reduce((total, item) => { total[item] = ""; return total; }, {});
1009
- this.actTableDoSearch({ ...oldParms, ...(criteriaData || { menuId }) });
1010
- this.setState({ userCriteriaData: criteriaData, viewModels: viewModels || [defShowType || ltmplConfig.showType || "table"], hiddenColIds: hiddenColIds || defaultDisabledColIds, sortedColConfigs });
1011
- setUserPageConfig({ ...val, criteriaData: undefined });
1012
- }
1013
-
1014
- renderHeaderButtons = () => {
1015
- let {
1016
- hiddenColIds, viewModels, sortedColConfigs, disabledColIds, showL2Chart,
1017
- showL2ActTable, restatParams, userCriteriaData
1018
- } = this.state;
1019
- const {
1020
- ltmplConfig, sourceId, doCreate, doSearch, menuId,
1021
- funcMode, customCreatable, serverKey, readOnly, userPageConfig, allowUserConfig
1022
- } = this.props;
1023
- const { translate } = this.context;
1024
- let { buttons } = ltmplConfig;
1025
- const version = localStorage.getItem("version") || "";
1026
-
1027
- return (
1028
- <>
1029
- <Space>
1030
- {userPageConfig && allowUserConfig ? <PageConfigButton menuCode={menuId} handleResetUserPageConfig={this.handleResetUserPageConfig} handleUpdateUserPageConfig={this.handleUpdateUserPageConfig} userCriteriaData={userCriteriaData} /> : ""}
1031
- {funcMode == "common" && this.criteriaFormUseful() ? (
1032
- <Popover trigger="click" content={this.renderCriteriaForm()}>
1033
- <Button>
1034
- <SearchOutlined />
1035
- </Button>
1036
- </Popover>
1037
- ) : null}
1038
- {buttons.includes("ratmplSelect") && !readOnly ? (
1039
- <Button onClick={() => this.setState({ showRatmplSelector: true })}>
1040
- {translate("${选择}")}
1041
- </Button>
1042
- ) : (
1043
- ""
1044
- )}
1045
- {buttons.includes("dtmplAdd") && doCreate && !readOnly ? (
1046
- ltmplConfig.classAddConfigs &&
1047
- ltmplConfig.classAddConfigs.length > 0 ? (
1048
- <Popover
1049
- arrow={false}
1050
- content={this.getAddTmplButton(ltmplConfig.classAddConfigs)}
1051
- placement="bottomRight"
1052
- >
1053
- <Tooltip>
1054
- <Button>
1055
- <PlusOutlined />
1056
- </Button>
1057
- </Tooltip>
1058
- </Popover>
1059
- ) : (
1060
- <Tooltip title={translate("${" + (ltmplConfig.createBtnTitle || "创建") + "}")}>
1061
- <Button onClick={() => doCreate(null, false)}>
1062
- <PlusOutlined />
1063
- </Button>
1064
- </Tooltip>
1065
- )
1066
- ) : (
1067
- ""
1068
- )}
1069
- {(buttons.includes("dtmplCustomAdd") || customCreatable) &&
1070
- doCreate &&
1071
- !readOnly ? (
1072
- <Tooltip title={translate("${" + (ltmplConfig.createBtnTitle || "创建") + "}")}>
1073
- <Button onClick={() => doCreate(null, true)}>
1074
- <PlusCircleOutlined />
1075
- </Button>
1076
- </Tooltip>
1077
- ) : (
1078
- ""
1079
- )}
1080
- {buttons.includes("importLtmplExcel") && !readOnly ? (
1081
- <Tooltip title={translate("${导入}")}>
1082
- <Button
1083
- href={`#/${version}/${sourceId}/importer?menuId=${menuId}`}
1084
- target={"_blank"}
1085
- >
1086
- <ImportOutlined />
1087
- </Button>
1088
- </Tooltip>
1089
- ) : (
1090
- ""
1091
- )}
1092
- {buttons.includes("exportLtmplExcel") && !readOnly
1093
- ? this.renderExportButton("导出", "ltmpl-data-excel")
1094
- : ""}
1095
- {this.renderFileExportButton()}
1096
- {false
1097
- && buttons.includes("showChart") ? (
1098
- <Tooltip
1099
- title={
1100
- showL2Chart
1101
- ? translate("${隐藏}${图表}")
1102
- : translate("${展示}${图表}")
1103
- }
1104
- >
1105
- <Button onClick={this.handleShowChart}>
1106
- <LineChartOutlined />
1107
- </Button>
1108
- </Tooltip>
1109
- ) : (
1110
- ""
1111
- )}
1112
- {buttons.includes("analysis") ? (
1113
- <Tooltip
1114
- title={
1115
- showL2ActTable
1116
- ? translate("${隐藏}${数据分析}")
1117
- : translate("${展示}${数据分析}")
1118
- }
1119
- >
1120
- <Button onClick={this.handleDataAnalysis}>
1121
- <FundOutlined />
1122
- </Button>
1123
- </Tooltip>
1124
- ) : (
1125
- ""
1126
- )}
1127
- {buttons.includes("reStat") && !readOnly ? (
1128
- <Restat
1129
- value={restatParams}
1130
- serverKey={serverKey}
1131
- fields={ltmplConfig.reStatParams}
1132
- sourceId={sourceId}
1133
- onfinish={(restatParams) => {
1134
- this.actTableDoSearch(null);
1135
- this.setState({ restatParams: restatParams });
1136
- }
1137
- }
1138
- ></Restat>
1139
- ) : (
1140
- ""
1141
- )}
1142
- <Popover
1143
- content={
1144
- <Checkbox.Group
1145
- value={viewModels}
1146
- onChange={this.changeViewModel}
1147
- >
1148
- <Row style={{ width: "120px" }}>
1149
- <Col span={24}>
1150
- <Checkbox value={"table"}>{translate("${表格}")}</Checkbox>
1151
- </Col>
1152
- <Col span={24}>
1153
- <Checkbox value={"verticalList"}>
1154
- {translate("${纵向列表}")}
1155
- </Checkbox>
1156
- </Col>
1157
- <Col span={24}>
1158
- <Checkbox value="cardList">
1159
- {translate("${卡片列表}")}
1160
- </Checkbox>
1161
- </Col>
1162
- <Col span={24}>
1163
- <Checkbox value="ganttChart">
1164
- {translate("${甘特图}")}
1165
- </Checkbox>
1166
- </Col>
1167
- <Col span={24}>
1168
- <Checkbox value="calendar">
1169
- {translate("${日历}")}
1170
- </Checkbox>
1171
- </Col>
1172
- {/*<Col span={24}><Checkbox value={'horizontalList'}>横向列表</Checkbox></Col>*/}
1173
- </Row>
1174
- </Checkbox.Group>
1175
- }
1176
- title={translate("${视图}")}
1177
- placement="bottomRight"
1178
- trigger="click"
1179
- >
1180
- <Tooltip title={translate("${选择视图}")}>
1181
- <Button>
1182
- <RetweetOutlined />
1183
- </Button>
1184
- </Tooltip>
1185
- </Popover>
1186
- <Popover
1187
- content={
1188
- <ColumnSelector
1189
- columns={sortedColConfigs}
1190
- disabledColIds={disabledColIds}
1191
- hiddenColIds={hiddenColIds}
1192
- onChangeColSort={this.onChangeColSort}
1193
- onChangeHiddenCols={this.changeHiddenColumns}
1194
- />
1195
- }
1196
- title={translate("${排序和选择列}")}
1197
- placement="bottomRight"
1198
- trigger="click"
1199
- >
1200
- <Tooltip title={translate("${点击排序和选择列}")}>
1201
- <Button>
1202
- <TableOutlined />
1203
- </Button>
1204
- </Tooltip>
1205
- </Popover>
1206
- {doSearch ? (
1207
- <Button
1208
- className="hoverbig"
1209
- title={translate("${刷新}")}
1210
- onClick={() => {
1211
- this.actTableDoSearch(null);
1212
- }}
1213
- >
1214
- <ReloadOutlined />
1215
- </Button>
1216
- ) : (
1217
- ""
1218
- )}
1219
- {/*<Tooltip title={translate("${常用配置}")}>*/}
1220
- {/* <Button*/}
1221
- {/* className="hoverbig"*/}
1222
- {/* onClick={() => {*/}
1223
- {/* //doSearch(null);*/}
1224
- {/* }}*/}
1225
- {/* >*/}
1226
- {/* <SettingOutlined />*/}
1227
- {/* </Button>*/}
1228
- {/*</Tooltip>*/}
1229
-
1230
- </Space>
1231
- </>
1232
- );
1233
- };
1234
-
1235
- criteriaFormUseful = () => {
1236
- const { ltmplConfig } = this.props;
1237
- let { buttons, criteria, updrillButtonConfigs } = ltmplConfig;
1238
- if (
1239
- ((buttons.includes("query") ||
1240
- (updrillButtonConfigs && updrillButtonConfigs.length > 0)) &&
1241
- ((criteria && criteria.length > 0) ||
1242
- buttons.includes("drilling"))) ||
1243
- this.checkBoxUseful() || buttons.includes("multiRowEdit")
1244
- ) {
1245
- return true;
1246
- } else {
1247
- return false;
1248
- }
1249
- };
1250
-
1251
- checkBoxUseful = () => {
1252
- const { ltmplConfig } = this.props;
1253
- let { buttons, jumps, actions, fileExports, customButtons } = ltmplConfig;
1254
- if (
1255
- buttons.includes("batchDelete") ||
1256
- (actions && actions.length > 0) || (customButtons && customButtons.length > 0) ||
1257
- (jumps && jumps.length > 0) || (fileExports && fileExports.length > 0)
1258
- ) {
1259
- return true;
1260
- } else {
1261
- return false;
1262
- }
1263
- };
1264
-
1265
- actTableDoSearch = (data: object) => {
1266
- const { ltreeData } = this.state;
1267
- this.doSearch_(data, ltreeData);
1268
- }
1269
-
1270
- doSearch_ = async (criteriaData, ltreeData) => {
1271
- const { doSearch } = this.props;
1272
-
1273
- let new_serial_number = new Date().getTime();
1274
- if (doSearch && new_serial_number - serial_number > 2000) {
1275
- serial_number = new_serial_number;
1276
- await doSearch({ ...criteriaData, serial_number, ...ltreeData });
1277
- //busyReminderTime=0;
1278
- // }else{
1279
- // if(busyReminder){
1280
- // if(busyReminderTime==1){
1281
- // const { translate } = this.context;
1282
- // message.warning(translate("${系统忙,请稍后再试}"));
1283
- // busyReminderTime=0;
1284
- // }else{
1285
- // busyReminderTime=1;
1286
- // }
1287
- //}
1288
- }
1289
- }
1290
-
1291
- ltreeValueChange = async (v) => {
1292
- let ltreeEntitySelect = this.getLtreeEntitySelectCriteria();
1293
- const { ltreeData } = this.state;
1294
- const { criteriaData } = this.props;
1295
- if (ltreeData && ltreeData["c_" + ltreeEntitySelect.id] != v) {
1296
- let ltreeData_ = {};
1297
- ltreeData_["c_" + ltreeEntitySelect.id] = v;
1298
- await this.doSearch_(criteriaData, ltreeData_);
1299
- this.setState({ ltreeData: ltreeData_ });
1300
- }
1301
- }
1302
-
1303
-
1304
- doSearchDirect = (data: object) => {
1305
-
1306
- let { doSearch } = this.props;
1307
- if (doSearch) {
1308
- doSearch({ ...data, serial_number });
1309
- }
1310
- }
1311
-
1312
-
1313
- buttonClickable = () => {
1314
- let new_serial_number = new Date().getTime();
1315
- if (new_serial_number - serial_number > 1500) {
1316
- serial_number = new_serial_number;
1317
- return true;
1318
- } else {
1319
- return false;
1320
- }
1321
- }
1322
-
1323
- renderCriteriaForm = () => {
1324
- let { loading, selectedRows, selectedDatas, userCriteriaData, editings, tabActiveKey, tabsOptions } = this.state;
1325
- let { ltmplConfig, serverKey, sourceId } = this.props;
1326
- const tabCriteriaId = tabsOptions.find(r => r.key === tabActiveKey)?.id;
1327
- return (
1328
- <CriteriaForm
1329
- key={sourceId}
1330
- serverKey={serverKey}
1331
- loading={loading}
1332
- selectedDatas={selectedDatas}
1333
- selectedRows={selectedRows}
1334
- doCustomButton={this.doCustomButton}
1335
- ltmplConfig={ltmplConfig}
1336
- data={userCriteriaData}
1337
- doCQuery={this.doSelectedCQuery}
1338
- doAction={this.doSelectedAction}
1339
- doDelete={this.doDelete}
1340
- doJump={this.doSelectedJump}
1341
- doSearch={this.actTableDoSearch}
1342
- doMultiRowEdit={this.doMultiRowEdit}
1343
- multiRowEditDisabled={!editings.length}
1344
- tabCriteriaId={tabCriteriaId}
1345
- />
1346
- );
1347
- };
1348
- //暂时无用
1349
- // queryTotal = async () => {
1350
- // const { queryKey} = this.state;
1351
- // const { serverKey }=this.props;
1352
- // let aggregateVO:AggregateVO = await HcserviceV3.requestQueryAggregates(serverKey, queryKey.key);
1353
- // this.setState({
1354
- // aggregateVO,
1355
- // });
1356
- // return aggregateVO;
1357
- // };
1358
-
1359
- getLtreeEntitySelectCriteria = () => {
1360
- let { ltmplConfig } = this.props
1361
-
1362
- if (ltmplConfig && ltmplConfig.criteria) {
1363
- for (let c of ltmplConfig.criteria) {
1364
- if (c?.extControlType == "ltree-entity-select" || c?.extControlType == "ltree-entity-select-value") {
1365
- return c;
1366
- }
1367
- }
1368
- }
1369
- return undefined;
1370
- }
1371
-
1372
- // 行内编辑start
1373
- editRowEdit = (code: string) => {
1374
- this.setState({ editings: [...this.state.editings, code] });
1375
- }
1376
-
1377
- cancelRowEdit = (code: string) => {
1378
- this.setState({ editings: this.state.editings.filter(r => r !== code) });
1379
- }
1380
-
1381
- // 单独提交
1382
- postLtmplData = async (dtmplData) => {
1383
- const { serverKey, sourceId } = this.props;
1384
- let res = await HcserviceV3.postLtmplData(
1385
- serverKey,
1386
- sourceId,
1387
- dtmplData,
1388
- message
1389
- );
1390
- if (res.status === "success") {
1391
- this.cancelRowEdit(dtmplData["唯一编码"]);
1392
- this.actTableDoSearch(undefined);
1393
- this.formRef.current.resetFields([]);
1394
- }
1395
- };
1396
-
1397
- // 批量提交
1398
- postLtmplMultiData = async (dtmplData) => {
1399
- const { serverKey, sourceId } = this.props;
1400
- let res = await HcserviceV3.postLtmplMultiData(
1401
- serverKey,
1402
- sourceId,
1403
- dtmplData,
1404
- message
1405
- );
1406
- if (res.status === "success") {
1407
- this.cancelRowEdit(dtmplData["唯一编码"]);
1408
- this.actTableDoSearch(undefined);
1409
- this.formRef.current.resetFields([]); // 重置表单数据
1410
- this.setState({ editings: [] });
1411
- }
1412
- };
1413
-
1414
- saveRowData = async (data: DtmplData) => {
1415
- const { code } = data;
1416
- let currentForm = this.formRef.current;
1417
- let dtmplData = { "唯一编码": code };
1418
- await currentForm.validateFields().then((values) => {
1419
- for (let key in values) {
1420
- if (values.hasOwnProperty(key) && key.startsWith(code)) {
1421
- dtmplData[key.split("_")[1]] = values[key];
1422
- }
1423
- }
1424
- this.postLtmplData(dtmplData);
1425
- });
1426
- }
1427
-
1428
- // 批量提交
1429
- doMultiRowEdit = async () => {
1430
- const { editings } = this.state;
1431
- if (!editings.length) {
1432
- return;
1433
- }
1434
- let currentForm = this.formRef.current;
1435
- let dtmplData = {};
1436
- await currentForm.validateFields().then((values) => {
1437
- for (let key in values) {
1438
- if (values.hasOwnProperty(key)) {
1439
- const code = key.split("_")[0];
1440
- if (editings.includes(code)) {
1441
- dtmplData[code] = { "唯一编码": code, ...(dtmplData[code] || {}), [key.split("_")[1]]: (values[key] || values[key] === 0) ? values[key] : null }
1442
- }
1443
- }
1444
- }
1445
- this.postLtmplMultiData({ data: JSON.stringify(Object.values(dtmplData)) });
1446
- });
1447
- }
1448
-
1449
- // 批量编辑表单值更新
1450
- doRowEditFormChange = (data: { [key: string]: any }) => {
1451
- const { editings } = this.state;
1452
- const code = Object.keys(data)[0].split("_")[0];
1453
- if (!editings.includes(code)) {
1454
- this.setState({ editings: [...editings, code] });
1455
- }
1456
- }
1457
- // 行内编辑end
1458
-
1459
- // 删除确认弹窗打开
1460
- doDelModalOpen = (record: DtmplData) => {
1461
- this.setState({ record, recordCode: record.code, delModalOpen: true });
1462
- };
1463
-
1464
- // tab页切换查询
1465
- doTabSearch = (val: string) => {
1466
- const { tabsOptions, tabActiveKey } = this.state;
1467
- let new_serial_number = new Date().getTime();
1468
- if (new_serial_number - serial_number < 2000) return;
1469
- if (tabActiveKey === val) return;
1470
- const ids = tabsOptions.find(r => r.key === "all").ids || [];
1471
- const item = tabsOptions.find(r => r.key === val);
1472
- let params = ids?.reduce((total, cur) => {
1473
- total[cur] = (val === "all" || cur !== item.id) ? undefined : val;
1474
- return total;
1475
- }, {});
1476
- this.actTableDoSearch(params);
1477
- this.setState({ tabActiveKey: val });
1478
- }
1479
-
1480
- renderAggregates() { // 统计数据渲染
1481
- const { aggregateVO } = this.state;
1482
- const { ltmplConfig } = this.props;
1483
- const aggregates = aggregateVO?.aggregates || [];
1484
- const columns = ltmplConfig?.columns || [];
1485
- return aggregates?.length ? <div className="aggregates">{aggregates.map(item => {
1486
- const column = columns.find(r => r.id === item.fieldId);
1487
- if (!column) {
1488
- return "";
1489
- }
1490
- const { dataUnit, themeColor, themeIcon } = column;
1491
- return <Card className="aggregate-card" hoverable styles={{ body: { padding: 20 } }}>
1492
- <div style={{ display: "flex", alignItems: "start", justifyContent: "space-between" }}>
1493
- <div style={{ width: "calc(100% - 40px)" }}>
1494
- <p className="title">{item.fieldTitle}</p>
1495
- <div className="value">
1496
- <Text
1497
- style={{ maxWidth: "100%" }}
1498
- ellipsis={{ tooltip: item.value }}
1499
- >
1500
- <span className="number">{item.value}</span>
1501
- </Text>
1502
- {dataUnit ? <span className="unit">{dataUnit}</span> : ""}
1503
- </div>
1504
- </div>
1505
- {themeIcon ?
1506
- <div className="icon" style={{ color: themeColor, background: `${themeColor}26` }}>
1507
- <Icon type={themeIcon} />
1508
- </div> :
1509
- ""}
1510
- </div>
1511
- </Card>
1512
- }).filter(Boolean)
1513
- }</div > : "";
1514
- }
1515
-
1516
- renderContent = () => {
1517
- let {
1518
- queryKey, loading, selectedRows, hiddenRowCodes, viewModels, sortedColConfigs, hiddenColIds, showL2ActTable,
1519
- pageInfo, editings, userCriteriaData, tabsOptions, tabActiveKey, pageSizeOptions
1520
- } = this.state;
1521
- let {
1522
- mainCode, sourceId, ltmplConfig, funcMode, operatable,
1523
- title, collapsible,
1524
- onChangePage, serverKey, criteriaData, showEmpty, loadDataCallback,
1525
- showView, doEdit, doRAction, customEditable, readOnly, tableType, showPagination, showAggregates, userPageConfig,
1526
- doEdit2D, doView2D
1527
- } = this.props;
1528
- const { translate } = this.context;
1529
-
1530
- if (!ltmplConfig || !sourceId) {
1531
- return (
1532
- <>
1533
- <Card loading={loading}></Card>
1534
- <Table loading={loading}></Table>
1535
- </>
1536
- );
1537
- }
1538
-
1539
- let tableColumns = ColumnBuilder.buildTableColumns(
1540
- {
1541
- ltmplConfig, operatable,
1542
- hiddenColIds, hiddenRowCodes, sortedColConfigs, showView,
1543
- doEdit,
1544
- doRAction, customEditable,
1545
- serverKey, readOnly,
1546
- sourceId, translate, unHiden: this.unHiden,
1547
- onHide: this.onHide, doCustomButton: this.doCustomButton, doRowJump: this.doRowJump,
1548
- blockMenuTreeDrawerOpen: this.blockMenuTreeDrawerOpen,
1549
- doRowAction: this.doRowAction, doDeleteByCode: this.doDeleteByCode, sortColumns: criteriaData["sortColIds"],
1550
- editings, editRowEdit: this.editRowEdit, cancelRowEdit: this.cancelRowEdit, saveRowData: this.saveRowData,
1551
- doDelModalOpen: this.doDelModalOpen, mainCode, criteriaData: userCriteriaData, actTableDoSearch: this.actTableDoSearch,
1552
- columnResize: userPageConfig?.colResize, doEdit2D, doView2D
1553
- }
1554
- );
1555
-
1556
- let { buttons, extDisplayConfig, rowCardCount, customViewPagePath, splitTabShowType } = ltmplConfig;
1557
- let { primaryColumn, primaryColumnLabel, secondColumn, secondColumnLabel, mainPicture, mainPictureLabel, labelColumn, cardShowCols, notDisplayFieldName, colNumOnRow } = extDisplayConfig;
1558
- let displayCriteriaCard: boolean = false;
1559
- if (funcMode == "simple" || funcMode == "common") {
1560
- displayCriteriaCard = false;
1561
- } else if (this.criteriaFormUseful()) {
1562
- displayCriteriaCard = true;
1563
- }
1564
-
1565
- let columnConfigs = [];
1566
- if (sortedColConfigs) {
1567
- for (let colConfig of sortedColConfigs) {
1568
- if (!hiddenColIds.includes(colConfig.id)) {
1569
- columnConfigs.push(colConfig);
1570
- }
1571
- }
1572
- }
1573
-
1574
- const sortColumnData = [];
1575
- if (Array.isArray(criteriaData["sortColIds"])) {
1576
- sortColumnData.push(...criteriaData["sortColIds"]);
1577
- }
1578
-
1579
- let ltreeEntitySelect = this.getLtreeEntitySelectCriteria();
1580
-
1581
- // actTable渲染
1582
- const renderActTable = loading ? (
1583
- <Table loading={loading}></Table>
1584
- ) : (tableType == "report" ? <ReportTable
1585
- tableProps={{ scrollY: ltmplConfig.scrollY, clickDisplayTotal: !ltmplConfig.directShowTotal }}
1586
- serverKey={serverKey} hiddenColIds={hiddenColIds}
1587
- maxSelectedRows={this.checkBoxUseful() ? 1000 : -1}
1588
- columns={tableColumns}
1589
- selectedRows={selectedRows} queryKey={queryKey}
1590
- onChangeRowSelection={this.changeRowSelection}
1591
- leftFixedCols={ltmplConfig.leftFixedCols}
1592
- onChangeResize={this.onChangeResize}
1593
- showEmpty={showEmpty}
1594
- /> :
1595
- <QueryTable key={"querytable" + sourceId} sourceId={sourceId}
1596
- // queryTotal={this.queryTotal}
1597
- tableProps={{ scrollY: ltmplConfig.scrollY, clickDisplayTotal: !ltmplConfig.directShowTotal }}
1598
- serverKey={serverKey}
1599
- onChangePage={onChangePage}
1600
- viewModels={viewModels}
1601
- primaryColumn={primaryColumn}
1602
- columnConfigs={columnConfigs} summaryConfigs={ltmplConfig.totalColumnConfigs}
1603
- maxSelectedRows={this.props?.tableType === "select" || this.checkBoxUseful() ? 10000 : -1}
1604
- selectedRows={selectedRows} columns={tableColumns}
1605
- hiddenRowCodes={hiddenRowCodes}
1606
- pageInfo={pageInfo}
1607
- queryKey={queryKey}
1608
- onChangeRowSelection={this.changeRowSelection}
1609
- subtotalXColumn={
1610
- ltmplConfig.subtotalXColumn == null ||
1611
- ltmplConfig.subtotalXColumn.length <= 0
1612
- ? null
1613
- : ltmplConfig.subtotalXColumn
1614
- }
1615
- groupIColumns={ltmplConfig.groupIColumns}
1616
- doSearch={this.actTableDoSearch}
1617
- sortColumnData={sortColumnData}
1618
- cardListConfig={{ primaryColumn, primaryColumnLabel, secondColumn, secondColumnLabel, mainPicture, mainPictureLabel, labelColumn, cardShowCols, rowCardCount, buttons, customViewPagePath, mainCode, notDisplayFieldName, colNumOnRow }}
1619
- ltmplConfig={ltmplConfig}
1620
- showView={showView}
1621
- showPagination={showPagination}
1622
- onChangeAggregateVO={(val) => this.setState({ aggregateVO: val })}
1623
- onChangeResize={this.onChangeResize}
1624
- pageSizeOptions={pageSizeOptions}
1625
- showEmpty={showEmpty}
1626
- loadDataCallback={loadDataCallback}
1627
- />);
1628
-
1629
- // tab拆解条件渲染
1630
- const renderSplitTab = <>
1631
- {splitTabShowType === "tab" ? <Tabs tabBarGutter={12} size="small" activeKey={tabActiveKey} items={tabsOptions} onChange={this.doTabSearch} tabBarExtraContent={this.renderHeaderButtons()} /> : ""}
1632
- {splitTabShowType === "tag" ? <div className="split-tab" ><Space className="split-tab-left" >{tabsOptions.map(r => <Button style={{ height: "28px" }} size="small" onClick={() => this.doTabSearch(r.key)} shape="round" type={tabActiveKey === r.key ? "primary" : "default"}>{r.title}</Button>)}</Space><div className="split-tab-right">{this.renderHeaderButtons()}</div></div> : ""}
1633
- {splitTabShowType === "radio" ? <div className="split-tab" ><div className="split-tab-left"><Radio.Group onChange={(e) => this.doTabSearch(e.target.value)} value={tabActiveKey} options={tabsOptions} /></div><div className="split-tab-right">{this.renderHeaderButtons()}</div></div> : ""}
1634
- </>;
1635
-
1636
- return (
1637
- <>
1638
- {buttons.includes("analysis") && showL2ActTable ? (
1639
- <div>
1640
- <L2ActTable
1641
- serverKey={serverKey}
1642
- innerQueryKey={queryKey.key}
1643
- sourceId={sourceId}
1644
- />
1645
- <Divider
1646
- dashed
1647
- style={{ borderTopColor: "#40a9ff" }}
1648
- plain
1649
- ></Divider>
1650
- </div>
1651
- ) : (
1652
- ""
1653
- )}
1654
- <div className="actTable">
1655
- {["complete", "common"].includes(funcMode) ?
1656
- <Row>
1657
- <Col span={24}>
1658
- {collapsible ? null : (
1659
- <span>
1660
- {ltmplConfig.header ? (
1661
- <div
1662
- style={{ padding: "6px" }}
1663
- dangerouslySetInnerHTML={{ __html: ltmplConfig.header }}
1664
- ></div>
1665
- ) : null}
1666
- {tabsOptions.length ? renderSplitTab :
1667
- <>
1668
- <h3 >
1669
- <p className="act-table-title" style={{ position: "relative", float: "left", marginBottom: "4px" }}> {!title
1670
- ? translate("${" + ltmplConfig.title + "}")
1671
- : typeof title == "string"
1672
- ? translate("${" + title + "}")
1673
- : title}</p>
1674
- </h3>
1675
- <p className="fr" style={{ marginBottom: "4px" }}>{this.renderHeaderButtons()}</p>
1676
- </>}
1677
- </span>
1678
- )}
1679
- </Col>
1680
- </Row> : null}
1681
- {(<Row><Col span={24}><Layout hasSider style={{ backgroundColor: "#fff" }}>
1682
- <Sider
1683
- width={ltreeEntitySelect ? 260 : 0}
1684
- theme={"light"}
1685
- style={{
1686
- paddingRight: ltreeEntitySelect ? '10px' : "0px"
1687
- }}
1688
- >
1689
- {ltreeEntitySelect ?
1690
- <EntryControl style={{ width: "300px" }} onChange={this.ltreeValueChange} fieldConfig={ltreeEntitySelect}></EntryControl>
1691
- // <NavigationTree fieldConfig={ltreeEntitySelect} />
1692
- : null}
1693
- </Sider>
1694
- <Layout style={{ backgroundColor: "#fff" }}>
1695
- <Content style={{ overflow: "initial" }}>
1696
- {showAggregates ? this.renderAggregates() : ""}
1697
- {displayCriteriaCard ? this.renderCriteriaForm() : null}
1698
- {buttons.includes("rowEdit") ? <AntdForm ref={this.formRef} component={false} onValuesChange={this.doRowEditFormChange}>{renderActTable}</AntdForm> : renderActTable}
1699
- </Content>
1700
- </Layout>
1701
- </Layout></Col></Row>
1702
- )}
1703
- {/*此处放页脚*/}
1704
- {ltmplConfig.footer ? (
1705
- <div
1706
- style={{ padding: "6px" }}
1707
- dangerouslySetInnerHTML={{ __html: ltmplConfig.footer }}
1708
- ></div>
1709
- ) : null}
1710
- </div>
1711
- </>
1712
- );
1713
- };
1714
-
1715
- saveRatmplSelect = async (selectedRows: SelectedRow[]) => {
1716
- this.setState({
1717
- showRatmplSelector: false,
1718
- });
1719
- const { serverKey, sourceId, mainCode, doSearch } = this.props;
1720
- if (!selectedRows || selectedRows.length <= 0) {
1721
- return;
1722
- }
1723
-
1724
- //查询
1725
- const codes: string[] = [];
1726
- for (let row of selectedRows) {
1727
- codes.push(row.code);
1728
- }
1729
- await HcserviceV3.saveRatmplSelectCodes(
1730
- serverKey,
1731
- sourceId,
1732
- mainCode,
1733
- codes
1734
- );
1735
- this.actTableDoSearch(null);
1736
- };
1737
-
1738
- render() {
1739
- let { queryKey, loading, blockMenuTreeDrawerOpen, recordCode, record, showRatmplSelector, delModalOpen } = this.state;
1740
- let { sourceId, ltmplConfig, title, collapsible, initCollapse, tip, serverKey, mainCode } = this.props;
1741
- const { strongDeleteConfirmText } = ltmplConfig || {};
1742
- const { translate } = this.context;
1743
- const delFormRef = React.createRef<FormInstance>(); // 强删除表单的form Ref
1744
-
1745
- if (!ltmplConfig || !sourceId) {
1746
- return (
1747
- <>
1748
- <Card loading={loading}></Card>
1749
- <Table loading={loading}></Table>
1750
- </>
1751
- );
1752
- }
1753
-
1754
- return (
1755
- <>
1756
- {this.renderAboveCustomPage()}
1757
- {collapsible ? (
1758
- <CollapseCard
1759
- initCollapse={initCollapse}
1760
- title={
1761
- <>
1762
- {!title ? ltmplConfig.title : title}
1763
- <ToolTipBar
1764
- content={tip ? tip : ltmplConfig ? ltmplConfig.tip : null}
1765
- />
1766
- </>
1767
- }
1768
- id={queryKey + ltmplConfig.id}
1769
- className={`hoverable`}
1770
- styles={{ header: { background: "#f2f4f5" }, body: { padding: "6px" } }}
1771
- loading={loading}
1772
- //暂时注释掉,后续要支持配置。
1773
- extra={this.renderHeaderButtons()}
1774
- >
1775
- {this.renderContent()}
1776
- </CollapseCard>
1777
- ) : (
1778
- <>{this.renderContent()}</>
1779
- )}
1780
- {this.renderOhterCustomPage()}
1781
- <BlockMenuTreeDrawer
1782
- onOk={() => {
1783
- this.setState({
1784
- blockMenuTreeDrawerOpen: false,
1785
- });
1786
- }}
1787
- onCancel={() => {
1788
- this.setState({
1789
- blockMenuTreeDrawerOpen: false,
1790
- });
1791
- }}
1792
- open={blockMenuTreeDrawerOpen}
1793
- roleCode={recordCode}
1794
- />
1795
- {showRatmplSelector ? (
1796
- <ModelSelectTable
1797
- serverKey={serverKey}
1798
- // defaultCriteriaValue={fieldGroupConfig.defaultCriteriaValue}
1799
- // maxSelectedRows={fieldGroupConfig.max}
1800
- open={showRatmplSelector}
1801
- onOK={this.saveRatmplSelect}
1802
- onCancel={() => {
1803
- this.setState({ showRatmplSelector: false });
1804
- }}
1805
- mainCode={mainCode}
1806
- sourceId={sourceId}
1807
- existRelation={"false"}
1808
- />
1809
- ) : ""}
1810
- {delModalOpen ?
1811
- <Modal
1812
- open={delModalOpen}
1813
- title={translate("${确定要[删除]此数据吗}?")}
1814
- onOk={() => delFormRef.current.validateFields().then(() => this.doDeleteByCode(record)).catch(() => { })}
1815
- onCancel={() => this.setState({ record: undefined, recordCode: undefined, delModalOpen: false })}
1816
- >
1817
- <AntdForm ref={delFormRef} layout="vertical">
1818
- <AntdForm.Item noStyle >
1819
- <Alert message={translate("${风险操作,此操作不可逆,是否继续操作}?")} type="warning" showIcon style={{ margin: "12px 0" }} />
1820
- </AntdForm.Item>
1821
- <AntdForm.Item
1822
- label={<div>{translate("${请手动输入}")}<span style={{ color: "#ff4d4f" }}> “ {translate("${" + strongDeleteConfirmText + "}")} ” </span>{translate("${完成验证}")}</div>}
1823
- name="rule"
1824
- rules={[
1825
- { required: true, message: translate("${请输入}" + "${" + strongDeleteConfirmText + "}") },
1826
- { validator: (_, value) => value && value !== translate("${" + strongDeleteConfirmText + "}") ? Promise.reject(new Error(translate("${请输入}" + "${" + strongDeleteConfirmText + "}"))) : Promise.resolve() }
1827
- ]}
1828
- >
1829
- <Input placeholder={translate("${" + strongDeleteConfirmText + "}")} />
1830
- </AntdForm.Item>
1831
- </AntdForm>
1832
- </Modal> : ""}
1833
- </>
1834
- );
1835
- }
1836
- }
1837
-
1838
- export default ActTable;
1
+ import React, { ReactNode } from "react";
2
+ import {
3
+ Button, Card, Checkbox, Col, Divider, Popover, Row, Space, Drawer, Tooltip,
4
+ message, Layout, Table, Form as AntdForm, FormInstance, Modal, Input, Alert, Tabs, Radio, Typography
5
+ } from "antd";
6
+ import {
7
+ ExportOutlined, FundOutlined, LineChartOutlined,
8
+ PlusCircleOutlined, PlusOutlined, ReloadOutlined, RetweetOutlined, SearchOutlined,
9
+ TableOutlined, ImportOutlined, AppstoreAddOutlined
10
+ } from "@ant-design/icons";
11
+ import _ from "lodash";
12
+ import "./index.css";
13
+ import {
14
+ ActTableMode, ActTableViewModel, AggregateVO, ClassAddConfig, ColumnConfig,
15
+ CustomButton, CustomButtonConfig, DoEditParam, DtmplData, JumpConfig, LtmplConfig, QueryKey,
16
+ SelectedRow, ShowViewParam, TmplBaseProps,
17
+ } from "../tmpl/interface";
18
+ import HcserviceV3 from "../tmpl/hcservice-v3";
19
+ import HCDataSource from "../tmpl/hc-data-source";
20
+ import QueryTable from "./query-table";
21
+ import CriteriaForm from "./../form/criteria-form";
22
+ import ProgramConfig from "../units";
23
+ import ColumnSelector from "./column/column-selector";
24
+ import ExportFrame, { ExportType, ExportMode } from "../export/export-frame";
25
+ import L2ActTable from "./l2-act-table";
26
+ import Restat from "./stat/restat";
27
+ import CollapseCard from "../controls/collapse-card";
28
+ import ToolTipBar from "../detail/tooltipbar";
29
+ import { LocaleContext } from "../locale/LocaleProvider";
30
+ import BlockMenuTreeDrawer from "../module/block-menu-tree-drawer";
31
+ import ModelSelectTable from "./../table/modal-select-table";
32
+ import ColumnBuilder from "./column/column-builder";
33
+ import ReportTable from "./report-table";
34
+ import EntryControl from "../controls/entry-control";
35
+ import DraggableModal from "../module/draggable-modal";
36
+ import Icon from "../icon/aliIcon";
37
+ import PageConfigButton from "./page-config-button";
38
+ import { defPageSizeOptions } from "./pagination"; // 默认分页数
39
+ import PageChart from "./page-chart"; // 展示图表
40
+ import RowTable from "./row-table";
41
+
42
+ const { Content, Sider } = Layout;
43
+ const { Text } = Typography;
44
+
45
+ type Level = "l1" | "l2";
46
+
47
+ const enumTypes = ["select", "multiselect", "texttags", "checkbox", "radio", "steps"];
48
+
49
+
50
+ const defaultDisabledColIds: string[] = ["20000", "10000"];
51
+
52
+ interface ActTableProps extends TmplBaseProps {
53
+ criteriaData: object;
54
+ pageNo: number;
55
+ pageSize: number;
56
+ onChangePage: (pageNo: number, pageSize: number, pageSizeOptions?: number[]) => void;
57
+ ltmplConfig: LtmplConfig;
58
+ menuId?: string;
59
+ showView?: (showVievParam: ShowViewParam) => void;
60
+ doCreate?: (addtmplId: string, toCustomPage: boolean) => void;
61
+ customCreatable?: boolean;
62
+ doEdit?: (doEditParam: DoEditParam) => void;
63
+ customEditable?: boolean;
64
+ doDelete?: (code: string) => void;
65
+ doSearch?: (params: object) => void;
66
+ doRAction?: (ractionId: string, mainCode: string) => void;
67
+ level?: Level;
68
+ funcMode?: ActTableMode;
69
+ title?: ReactNode;
70
+ tip?: any;
71
+ collapsible?: boolean;
72
+ initCollapse?: boolean;
73
+ readOnly?: boolean;
74
+ tableType?: "common" | "report" | "select";
75
+ operatable?: boolean;
76
+ onSelectChange?: (val: { selectedRows: SelectedRow[], selectedDatas: DtmplData[] }) => void;
77
+ defShowType?: ActTableViewModel; // 默认视图
78
+ showPagination?: boolean; // 是否显示分页
79
+ showAggregates?: boolean; // 是否显示统计数据
80
+ userPageConfig?: { [key: string]: any }; // 用户页面配置本地缓存
81
+ setUserPageConfig?: (config: { [key: string]: any }) => void; // 更新用户页面配置本地缓存
82
+ resetUserPageConfig?: () => void; // 重置用户页面配置本地缓存
83
+ allowUserConfig?: boolean; // 是否可用户自定义配置
84
+ deleteCallback?: (val: object) => void; // 删除回调
85
+ onUpdatePageSizeOptions?: (val: number[]) => void; // 更新分页数数组
86
+ showEmpty?: boolean; // 空数据是否显示空状态,默认显示
87
+ loadDataCallback?: (val: object[]) => void; // 请求数据回调函数
88
+ doEdit2D?: (val: string) => void; // 2D图编辑
89
+ doView2D?: (val: string) => void; // 2D图查看
90
+ }
91
+
92
+ interface ActTableStat {
93
+ sortedColConfigs?: ColumnConfig[];
94
+ queryKey?: QueryKey;
95
+ loading?: boolean;
96
+ selectedRows?: SelectedRow[];
97
+ selectedDatas?: DtmplData[];
98
+ hiddenColIds?: string[];
99
+ drillingColIds?: string[];
100
+ disabledColIds?: string[];
101
+ hiddenRowCodes?: string[];
102
+ viewModels?: ActTableViewModel[];
103
+ showL2ActTable?: boolean;
104
+ showL2Chart?: boolean;
105
+ recordCode?: string;
106
+ record?: DtmplData;
107
+ blockMenuTreeDrawerOpen?: boolean;
108
+ showCustomCard?: boolean;
109
+ customButton?: CustomButton;
110
+ customButtonData?: DtmplData[];
111
+ showRatmplSelector?: boolean;
112
+ aggregateVO?: AggregateVO;
113
+ restatParams?: object;
114
+ pageInfo?: object;
115
+ ltreeData?: object;
116
+ userCriteriaData: object;
117
+ editings: string[]; // 行内编辑code
118
+ delModalOpen?: boolean; // 强删除弹窗是否打开
119
+ tabsOptions?: { key: string, value: string, label: React.ReactNode, title?: string, id?: string, ids?: string[] }[]; // tabs选项
120
+ tabActiveKey?: string; // Tabs选中项
121
+ pageSizeOptions?: number[]; // 设备分页数
122
+ customDrawerSize?: number | string; // 自定义页面抽屉宽度
123
+ tableNumber?: number; // 添加多表格-显示表格数量
124
+ }
125
+ let serial_number = new Date().getTime();
126
+ let busyReminderTime = 0;
127
+ class ActTable extends React.PureComponent<ActTableProps, ActTableStat> {
128
+ state = {
129
+ //tableColumns: undefined,
130
+ sortedColConfigs: undefined,
131
+ queryKey: undefined,
132
+ loading: true,
133
+ disableCols: undefined,
134
+ hiddenColIds: defaultDisabledColIds,
135
+ selectedRows: [],
136
+ selectedDatas: [],
137
+ hiddenRowCodes: [],
138
+ viewModels: [],
139
+ drillingColIds: undefined,
140
+ disabledColIds: undefined,
141
+ showL2ActTable: false,
142
+ showL2Chart: false,
143
+ recordCode: undefined,
144
+ record: undefined,
145
+ blockMenuTreeDrawerOpen: false,
146
+ showCustomCard: false,
147
+ customButtonData: undefined,
148
+ customButton: undefined,
149
+ showRatmplSelector: false,
150
+ aggregateVO: undefined,
151
+ restatParams: undefined,
152
+ pageInfo: { pageNo: 1, pageSize: 10 },
153
+ ltreeData: {},
154
+ userCriteriaData: undefined,
155
+ editings: [], // 行内编辑code
156
+ delModalOpen: false, // 强删除弹窗是否打开
157
+ tabsOptions: [],
158
+ tabActiveKey: "all",
159
+ pageSizeOptions: defPageSizeOptions,
160
+ customDrawerSize: undefined,
161
+ tableNumber: undefined,
162
+ };
163
+
164
+ static contextType = LocaleContext;
165
+ context: React.ContextType<typeof LocaleContext>;
166
+ formRef = React.createRef<FormInstance>(); // 可编辑表格的form Ref
167
+ isJumpRef = React.createRef<boolean>(); // 是否是action跳转
168
+
169
+ static defaultProps = {
170
+ criteriaData: {},
171
+ funcMode: "complete",
172
+ collapsible: false,
173
+ initCollapse: false,
174
+ readOnly: false,
175
+ operatable: true,
176
+ showPagination: true,
177
+ showAggregates: true,
178
+ showEmpty: true,
179
+ };
180
+
181
+ // 获取标签选项
182
+ getTabsOptions = async () => {
183
+ const { ltmplConfig, criteriaData, sourceId } = this.props;
184
+ const { translate } = this.context;
185
+ const { split2TabCriteria, showSplitTabDataCount } = ltmplConfig || {};
186
+ if (!split2TabCriteria) {
187
+ return;
188
+ }
189
+ const allIds = [];
190
+ let groupCount = [];
191
+ if (showSplitTabDataCount) {
192
+ groupCount = await HcserviceV3.getLtmplDataGroupCount(sourceId);
193
+ }
194
+ const options = split2TabCriteria.map(fieldConfig => {
195
+ const id = `c_${fieldConfig.id}`;
196
+ allIds.push(id);
197
+ if (enumTypes.includes(fieldConfig.controlType || fieldConfig.extControlType)) {
198
+ const items = HCDataSource.getEnums(fieldConfig.mstrucId);
199
+ const options = items.map((item) => {
200
+ const count = groupCount.find(r => r[0]?.fieldId === fieldConfig.id && r[0]?.value === item.title)?.[1]?.value;
201
+ const countVal = (count || count === 0) ? ` (${count})` : "";
202
+ return {
203
+ label: <span style={{ padding: "0 10px" }}>{translate("${" + item.title + "}")}{countVal}</span>,
204
+ key: item.value,
205
+ id,
206
+ title: translate("${" + item.title + "}") + countVal,
207
+ value: item.value
208
+ };
209
+ });
210
+ if (fieldConfig.relDeduplication && fieldConfig.exceptCodes?.length) {
211
+ return options.filter(item => !fieldConfig.exceptCodes.includes(item.key));
212
+ }
213
+ return options;
214
+ }
215
+ if ([fieldConfig.controlType, fieldConfig.extControlType].includes("single-checkbox")) {
216
+ const count = groupCount.find(r => r[0]?.fieldId === fieldConfig.id)?.[1]?.value;
217
+ const countVal = (count || count === 0) ? ` (${count})` : "";
218
+ return [{
219
+ label: <span style={{ padding: "0 10px" }}>{translate("${" + fieldConfig.title + "}")}{countVal}</span>,
220
+ key: "1",
221
+ id,
222
+ title: translate("${" + fieldConfig.title + "}") + countVal,
223
+ value: "1",
224
+ }];
225
+ }
226
+ return [];
227
+ })?.flat() || [];
228
+ const defOption = {
229
+ label: <span style={{ padding: "0 10px" }}>{translate("${全部}")}</span>,
230
+ key: "all",
231
+ ids: allIds,
232
+ title: translate("${全部}"),
233
+ value: "all"
234
+ };
235
+ const temId = Object.keys(criteriaData).find(r => allIds.includes(r));
236
+ const tabActiveKey = temId ? criteriaData[temId] : "all";
237
+ this.setState({ tabsOptions: [defOption, ...options], tabActiveKey });
238
+ }
239
+
240
+ loadData = async (
241
+ hiddenColIds: string[],
242
+ hiddenRowCodes: string[],
243
+ sortedColConfigs: ColumnConfig[]
244
+ ) => {
245
+ const {
246
+ sourceId, criteriaData, ltmplConfig,
247
+ mainCode, level, pageNo, pageSize, serverKey, defShowType, userPageConfig
248
+ } = this.props;
249
+
250
+ if (!this.isSameSourceQuery(sourceId, criteriaData)) {
251
+ return
252
+ }
253
+
254
+
255
+ if (!ltmplConfig) {
256
+ return;
257
+ }
258
+ // 处理菜单切换,查询条件清空,重置tab拆解条件选中项
259
+ const tabActiveKey = ltmplConfig.split2TabCriteria?.find(r => criteriaData[`c_${r.id}`])?.id;
260
+ this.setState({
261
+ loading: true,
262
+ userCriteriaData: criteriaData,
263
+ tabActiveKey: tabActiveKey ? criteriaData[`c_${tabActiveKey}`] : "all"
264
+ });
265
+ let disabledColIds: string[] = [];
266
+ let hiddenColIds_ = [...hiddenColIds];
267
+ if (criteriaData && criteriaData["drillingColIds"]) {
268
+ let dColIds = [...criteriaData["drillingColIds"]];
269
+ ltmplConfig.columns.forEach((item) => {
270
+ if (
271
+ item.statColType == "dimension" &&
272
+ !dColIds.includes(item.id) &&
273
+ !hiddenColIds_.includes(item.id)
274
+ ) {
275
+ hiddenColIds_.push(item.id);
276
+ disabledColIds.push(item.id);
277
+ }
278
+ if (
279
+ item.statColType == "dimension" &&
280
+ !dColIds.includes(item.id) &&
281
+ !disabledColIds.includes(item.id)
282
+ ) {
283
+ disabledColIds.push(item.id);
284
+ }
285
+ });
286
+ hiddenColIds_ = hiddenColIds_.filter((id) => {
287
+ return !dColIds.includes(id);
288
+ });
289
+ }
290
+ ltmplConfig.columns.forEach((item) => {
291
+ if (item.hidden) {
292
+ hiddenColIds_.push(item.id);
293
+ }
294
+ });
295
+ /** 构建column **/
296
+ const { defaultPageSize, showType } = ltmplConfig;
297
+
298
+ let pageInfo = {
299
+ pageNo: pageNo || 1,
300
+ pageSize: pageSize || defaultPageSize || 10,
301
+ virtualEndPageNo: undefined,
302
+ };
303
+ const viewModels = this.state.viewModels.length > 0 ? this.state.viewModels : (userPageConfig?.["viewModels"] || [defShowType || showType || "table"]);
304
+
305
+ /** 构建 dataSource **/
306
+ //构建过滤条件
307
+ const params = { ...criteriaData, ...pageInfo, mainCode };
308
+ let queryKey: QueryKey;
309
+ if (level && level === "l2") {
310
+ queryKey = await HcserviceV3.requestL2LtmplQueryKey(serverKey, sourceId, params);
311
+ } else {
312
+ if (viewModels.includes("ganttChart")) {
313
+ queryKey = await HcserviceV3.requestGttRootQueryKey(serverKey, sourceId, params);
314
+ } else {
315
+ queryKey = await HcserviceV3.requestLtmplQueryKey(serverKey, sourceId, params);
316
+ }
317
+ }
318
+
319
+ if (!queryKey.sourceId || queryKey.sourceId == this.props.sourceId) {
320
+ this.setState({
321
+ pageInfo,
322
+ disabledColIds, hiddenColIds: hiddenColIds_, hiddenRowCodes,
323
+ sortedColConfigs, queryKey, showL2Chart: false, selectedRows: [], selectedDatas: [],
324
+ viewModels
325
+ });
326
+ }
327
+ this.setState({
328
+ loading: false,
329
+ });
330
+ };
331
+
332
+ doCustomButton = async (customButton: CustomButton, records: DtmplData[]) => {
333
+ if (!this.buttonClickable()) {
334
+ return;
335
+ }
336
+ const { serverKey, sourceId } = this.props;
337
+ let doType = customButton.doType;
338
+ let config: CustomButtonConfig = ProgramConfig.getCustomButtonConfig(customButton.id);
339
+ if ("request_refresh" == doType) {
340
+ if (config && config.doAction) {
341
+ await config.doAction(customButton, records);
342
+ } else if (config && config.getRequestUrl) {
343
+ let url = await config.getRequestUrl(customButton, records);
344
+ await HcserviceV3.doPostRequest(serverKey, url);
345
+ } else if (customButton.path) {
346
+ let codes = [];
347
+ let res = undefined;
348
+ if (records != null) {
349
+ records.forEach(item => {
350
+ codes.push(item.code)
351
+ })
352
+ }
353
+ if (customButton.requestMethod === "get") {
354
+ res = await HcserviceV3.doGetRequest(serverKey, customButton.path, { codes });
355
+ } else {
356
+ res = await HcserviceV3.doPostRequest(serverKey, customButton.path, { codes });
357
+ }
358
+ if (res?.msg || res?.message) {
359
+ message.info(res.msg || res.message);
360
+ }
361
+ } else {
362
+ message.error("Button Config Error");
363
+ return;
364
+ }
365
+ this.doSearchDirect(null);
366
+ } else if ("show_window" == doType) {
367
+ this.setState({
368
+ showCustomCard: true,
369
+ customButton,
370
+ customButtonData: records,
371
+ });
372
+ } else {
373
+ message.error("Unsuport Button dotype " + doType);
374
+ }
375
+ };
376
+
377
+ renderAboveCustomPage = () => {
378
+ return this.renderCustomPage("above-table");
379
+ };
380
+
381
+ renderOhterCustomPage = () => {
382
+ return (
383
+ <>
384
+ {this.renderCustomPage("under-table")}
385
+ {this.renderCustomPage("modal-window")}
386
+ {this.renderCustomPage("left-drawer")}
387
+ {this.renderCustomPage("right-drawer")}
388
+ </>
389
+ );
390
+ };
391
+
392
+ renderCustomPage = (
393
+ windowPosition:
394
+ | "under-table"
395
+ | "above-table"
396
+ | "modal-window"
397
+ | "left-drawer"
398
+ | "right-drawer"
399
+ ) => {
400
+ const { translate } = this.context;
401
+ const { customButton, customButtonData, customDrawerSize } = this.state;
402
+
403
+ if (!customButton) {
404
+ return "";
405
+ }
406
+ if (windowPosition && windowPosition != customButton.windowPosition) {
407
+ return "";
408
+ }
409
+
410
+ let customProps = {
411
+ customButton: customButton, data: customButtonData,
412
+ onOk: () => { this.actTableDoSearch(null) }
413
+ , onclose: () => {
414
+ this.setState({ customButton: undefined });
415
+ }
416
+ };
417
+
418
+ let config: CustomButtonConfig = ProgramConfig.getCustomButtonConfig(customButton.id);
419
+ let page;
420
+ if (config && config.getCurrentPage) {
421
+ page = config.getCurrentPage(customButton, customButtonData);
422
+ }
423
+ if (!page) {
424
+ page = ProgramConfig.getCustomPage(customButton.id);
425
+ }
426
+
427
+ if (!page) {
428
+ message.error("Not found CustomButton Page");
429
+ this.setState({
430
+ customButton: undefined
431
+ })
432
+ return;
433
+ }
434
+
435
+ let customElement = React.createElement(page, customProps);
436
+ if (
437
+ customButton.windowPosition == "under-table" ||
438
+ customButton.windowPosition == "above-table"
439
+ ) {
440
+ return (
441
+ <Card
442
+ id={"CustomCard" + customButton.id}
443
+ size={"small"}
444
+ style={{ marginTop: "6px" }}
445
+ extra={
446
+ <Button
447
+ size={"small"}
448
+ danger={true}
449
+ onClick={() => {
450
+ this.setState({ customButton: undefined });
451
+ }}
452
+ >
453
+ {translate("${关闭}")}
454
+ </Button>
455
+ }
456
+ >
457
+ {customElement}
458
+ </Card>
459
+ );
460
+ } else if (
461
+ customButton.windowPosition == "left-drawer" ||
462
+ customButton.windowPosition == "right-drawer"
463
+ ) {
464
+ return (
465
+ <Drawer
466
+ open={true}
467
+ id={"CustomCard" + customButton.id}
468
+ placement={
469
+ customButton.windowPosition == "right-drawer" ? "right" : "left"
470
+ }
471
+ resizable={{ onResize: (newSize => this.setState({ customDrawerSize: newSize })) }}
472
+ size={customDrawerSize !== undefined ? customDrawerSize : customButton.windowWidth}
473
+ onClose={() => {
474
+ this.setState({ customButton: undefined });
475
+ }}
476
+ styles={{ body: { minWidth: customButton.windowWidth } }}
477
+ >
478
+ {customElement}
479
+ </Drawer>
480
+ );
481
+ } else if (customButton.windowPosition == "modal-window") {
482
+ return (
483
+ <DraggableModal
484
+ open={true}
485
+ closable={true}
486
+ width={customButton.windowWidth}
487
+ style={{ height: customButton.windowHeight }}
488
+ onCancel={() => {
489
+ this.setState({ customButton: undefined });
490
+ }}
491
+ >
492
+ {customElement}
493
+ </DraggableModal>
494
+ );
495
+ }
496
+ };
497
+
498
+
499
+ async componentDidMount() {
500
+ const { ltmplConfig, tableType, userPageConfig, defShowType, onUpdatePageSizeOptions, setUserPageConfig, pageSize } = this.props;
501
+ const { sortedColIds } = userPageConfig || {};
502
+ const { translate } = this.context;
503
+ let sortedColConfigs = undefined;
504
+ if (ltmplConfig) {
505
+ sortedColConfigs = tableType == 'report' ? ltmplConfig.columns : [
506
+ { id: "10000", title: translate("${排序}"), originalId: "10000" },
507
+ { id: "20000", title: translate("${隐藏}"), originalId: "20000" },
508
+ ...ltmplConfig.columns,
509
+ ];
510
+ if (sortedColIds) { // 使用缓存的列排序
511
+ sortedColConfigs.sort((a, b) => sortedColIds.indexOf(a.id) - sortedColIds.indexOf(b.id));
512
+ }
513
+ const temViewModels = userPageConfig?.["viewModels"] || [defShowType || ltmplConfig?.showType || "table"];
514
+ this.setState({ viewModels: temViewModels });
515
+ if (onUpdatePageSizeOptions && temViewModels.includes("cardList")) { // 初始化是卡片视图,则更新父组件中分页数组
516
+ const temPageSizes = Array.from({ length: 7 }, (_, i) => ltmplConfig.rowCardCount * Math.pow(2, i));
517
+ onUpdatePageSizeOptions(temPageSizes);
518
+ if (setUserPageConfig && !(userPageConfig?.pageSize >= 0)) setUserPageConfig({ pageSize: 1 });
519
+ this.setState({ pageSizeOptions: temPageSizes, sortedColConfigs });
520
+ } else {
521
+ this.loadData(userPageConfig?.hiddenColIds || defaultDisabledColIds, [], sortedColConfigs);
522
+ }
523
+ }
524
+ this.getTabsOptions();
525
+ }
526
+
527
+ // 卡片列表-更新列表分页数
528
+ handleCardListPageSize(preViewModels, viewModels) {
529
+ const { ltmplConfig, onChangePage, pageSize, pageNo } = this.props;
530
+ const { defaultPageSize } = ltmplConfig || {};
531
+ const preIsCard = preViewModels.includes("cardList");
532
+ const isCard = viewModels.includes("cardList");
533
+ let temPageSizes = defPageSizeOptions;
534
+ let temPageSize = defaultPageSize;
535
+ if ((!preIsCard && !isCard) || (preIsCard && isCard)) {
536
+ return;
537
+ }
538
+ if (!preIsCard && isCard) { // 普通切换到Card
539
+ temPageSizes = Array.from({ length: 7 }, (_, i) => ltmplConfig.rowCardCount * Math.pow(2, i));
540
+ temPageSize = temPageSizes.includes(Number(pageSize)) ? pageSize : (temPageSizes.includes(Number(defaultPageSize)) ? defaultPageSize : temPageSizes[1]);
541
+ } else if (preIsCard && !isCard) { // card切换到普通
542
+ temPageSize = defPageSizeOptions.includes(Number(pageSize)) ? pageSize : (defPageSizeOptions.includes(Number(defaultPageSize)) ? defaultPageSize : defPageSizeOptions[1]);
543
+ }
544
+ this.setState({ pageSizeOptions: temPageSizes });
545
+ onChangePage(pageNo || 1, temPageSize, temPageSizes);
546
+ }
547
+
548
+ async componentDidUpdate(prevProps, prevState) {
549
+ const { sourceId, criteriaData, ltmplConfig, tableType, pageSize, pageNo, userPageConfig, defShowType } = this.props;
550
+ // const {userCriteriaData:preUserCriteriaData}=prevState;
551
+ const { userCriteriaData } = this.state;
552
+ const { translate } = this.context;
553
+ let {
554
+ ltmplConfig: preLtmplConfig,
555
+ criteriaData: preCriteriaData,
556
+ sourceId: preSourceId, pageSize: prePageSize, pageNo: prePageNo,
557
+ userPageConfig: preUserPageConfig
558
+ } = prevProps;
559
+ if (!this.isSameSourceQuery(sourceId, criteriaData)) {
560
+ return false;
561
+ }
562
+
563
+ if (prePageSize != pageSize || pageNo != prePageNo) {
564
+ this.setState({
565
+ pageInfo: { pageNo, pageSize },
566
+ userCriteriaData: criteriaData,
567
+ })
568
+ }
569
+ if (!preUserPageConfig && userPageConfig) {
570
+ this.setState({ viewModels: userPageConfig?.["viewModels"] || [defShowType || ltmplConfig?.showType || "table"] });
571
+ }
572
+ if (!_.isEqual(prevState.viewModels, this.state.viewModels)) { // 显示视图变化-更改卡片列表分页条数
573
+ this.handleCardListPageSize(prevState.viewModels, this.state.viewModels);
574
+ }
575
+ let { hiddenColIds, sortedColConfigs } = this.state;
576
+ let currentQueryParams = ProgramConfig.transQueryParamsToStr(criteriaData, false, [
577
+ "pageSize",
578
+ "pageNo",
579
+ ]);
580
+ let preCurrentQueryParams = ProgramConfig.transQueryParamsToStr(userCriteriaData, false, [
581
+ "pageSize",
582
+ "pageNo",
583
+ ]);
584
+ if ((sourceId && preSourceId != sourceId) ||
585
+ (ltmplConfig &&
586
+ (!preLtmplConfig || ltmplConfig.id != preLtmplConfig.id)) ||
587
+ ((currentQueryParams != preCurrentQueryParams) &&
588
+ (!criteriaData['menuId'] || preCriteriaData.menuId == criteriaData['menuId']))
589
+ ) {
590
+ //5秒后允许再次请求数据
591
+ //refresh=false;
592
+ if (preLtmplConfig && ltmplConfig.id == preLtmplConfig.id) {
593
+ await this.loadData(hiddenColIds, [], sortedColConfigs);
594
+ } else {
595
+ let sColConfigs = undefined;
596
+ const { sortedColIds } = userPageConfig || {};
597
+ if (ltmplConfig) {
598
+ sColConfigs = tableType == 'report' ? ltmplConfig.columns : [
599
+ { id: "10000", title: translate("${排序}"), originalId: "10000" },
600
+ { id: "20000", title: translate("${隐藏}"), originalId: "20000" },
601
+ ...ltmplConfig.columns,
602
+ ];
603
+ if (sortedColIds) { // 使用缓存的列排序
604
+ sColConfigs.sort((a, b) => sortedColIds.indexOf(a.id) - sortedColIds.indexOf(b.id));
605
+ }
606
+ }
607
+ await this.loadData(userPageConfig?.hiddenColIds || defaultDisabledColIds, [], sColConfigs);
608
+ }
609
+
610
+ } else {
611
+ return false;
612
+ }
613
+ }
614
+
615
+ isSameSourceQuery = (sourceId, criteriaData) => {
616
+ // action跳转,路由变化时,变化后路由不存在sourceId||menuId,则不触发查询
617
+ if (this.isJumpRef.current && !criteriaData['sourceId'] && !criteriaData['menuId']) {
618
+ this.isJumpRef.current = false;
619
+ return false;
620
+ }
621
+
622
+ if (sourceId && criteriaData && (criteriaData['sourceId'] && criteriaData['sourceId'] != sourceId)
623
+ || (criteriaData['menuId'] && criteriaData['menuId'] != sourceId)) {
624
+ return false;
625
+ } else {
626
+ return true;
627
+ }
628
+ };
629
+
630
+ handleShowChart = () => {
631
+ this.setState({
632
+ showL2Chart: !this.state.showL2Chart,
633
+ });
634
+ };
635
+
636
+ handleDataAnalysis = () => {
637
+ this.setState({
638
+ showL2ActTable: !this.state.showL2ActTable,
639
+ });
640
+ };
641
+
642
+ unHiden = () => {
643
+ const { ltmplConfig } = this.props;
644
+ const { hiddenColIds, sortedColConfigs } = this.state;
645
+ this.setState({
646
+ hiddenRowCodes: [],
647
+ });
648
+ };
649
+
650
+ onHide = (code: string) => {
651
+ const { hiddenRowCodes } = this.state;
652
+ let hiddenCodes = [...hiddenRowCodes, code];
653
+ this.setState({
654
+ hiddenRowCodes: hiddenCodes,
655
+ });
656
+ };
657
+
658
+ changeViewModel = (viewModels) => {
659
+ const { setUserPageConfig } = this.props;
660
+ const { hiddenColIds, hiddenRowCodes, sortedColConfigs, viewModels: oldViewModels } = this.state;
661
+ setUserPageConfig && setUserPageConfig({ viewModels });
662
+ this.setState({ viewModels }, () => {
663
+ if (viewModels.length && viewModels.includes("ganttChart") !== oldViewModels.includes("ganttChart")) {
664
+ this.loadData(hiddenColIds, hiddenRowCodes, sortedColConfigs); // 前后选择是否存在甘特图,刷新数据
665
+ }
666
+ });
667
+ };
668
+
669
+ changeHiddenColumns = (hiddenColIds: string[]) => {
670
+ const { setUserPageConfig } = this.props;
671
+ this.setState({ showL2Chart: false, hiddenColIds });
672
+ setUserPageConfig && setUserPageConfig({ hiddenColIds });
673
+ };
674
+
675
+ doSelectedAction = async (actionId: string, codes, params: object) => {
676
+ const { selectedRows } = this.state;
677
+ this.doAction(actionId, selectedRows, params);
678
+ };
679
+
680
+ doAction = async (actionId: string, selectedRows: SelectedRow[], params) => {
681
+ const { serverKey } = this.props;
682
+ const { hiddenColIds, hiddenRowCodes, sortedColConfigs } = this.state;
683
+ this.setState({
684
+ loading: true,
685
+ });
686
+ let result: boolean = await HcserviceV3.postActions(
687
+ serverKey,
688
+ actionId,
689
+ selectedRows,
690
+ params
691
+ );
692
+ if (result) {
693
+ //重新加载数据
694
+ this.loadData(hiddenColIds, hiddenRowCodes, sortedColConfigs);
695
+ } else {
696
+ this.setState({
697
+ loading: false,
698
+ });
699
+ }
700
+ };
701
+
702
+ doRowAction = async (actionId: string, codes: string[], params: object) => {
703
+ this.doAction(actionId, [{ title: undefined, code: codes[0] }], params);
704
+ };
705
+
706
+ doDelete = async () => {
707
+ const { sourceId, serverKey, mainCode } = this.props;
708
+ const {
709
+ selectedRows,
710
+ hiddenColIds,
711
+ hiddenRowCodes,
712
+ sortedColConfigs,
713
+ } = this.state;
714
+ this.setState({
715
+ loading: true,
716
+ });
717
+ let result: boolean = await HcserviceV3.deleteData(
718
+ serverKey,
719
+ sourceId,
720
+ selectedRows,
721
+ mainCode
722
+ );
723
+ if (result) {
724
+ //重新加载数据
725
+ this.loadData(hiddenColIds, hiddenRowCodes, sortedColConfigs);
726
+ } else {
727
+ this.setState({
728
+ loading: false,
729
+ });
730
+ }
731
+ };
732
+
733
+ doDeleteByCode = async (record: DtmplData) => {
734
+ const { sourceId, serverKey, mainCode, doDelete, deleteCallback } = this.props;
735
+ const { hiddenColIds, hiddenRowCodes, sortedColConfigs } = this.state;
736
+ this.setState({
737
+ loading: true,
738
+ });
739
+ let result: boolean = await HcserviceV3.deleteByCode(
740
+ serverKey,
741
+ sourceId,
742
+ [record.code],
743
+ mainCode
744
+ );
745
+ if (result) {
746
+ //重新加载数据
747
+ this.loadData(hiddenColIds, hiddenRowCodes, sortedColConfigs);
748
+ doDelete && doDelete(record.code);
749
+ deleteCallback && deleteCallback(record);
750
+ this.setState({ loading: false, delModalOpen: false, recordCode: undefined, record: undefined });
751
+ } else {
752
+ this.setState({ loading: false });
753
+ }
754
+ };
755
+
756
+ doSelectedCQuery = async (cqueryId: string) => { };
757
+
758
+ doJump = async (jump: JumpConfig, record_: DtmplData) => {
759
+ let record = record_.fieldMap ? record_.fieldMap : record_;
760
+ const version = localStorage.getItem("version") || "";
761
+
762
+ let url = null;
763
+ let path = jump.path;
764
+ if (!path) {
765
+ path = "/";
766
+ }
767
+ //是否以http开头
768
+ if (path?.indexOf("#") == 0 || url?.indexOf("/#") == 0) {
769
+ url = "";
770
+ } else if (
771
+ path.indexOf("http://") == 0 ||
772
+ path.indexOf("HTTP://") == 0 ||
773
+ path.indexOf("https://") == 0 ||
774
+ path.indexOf("HTTPS://") == 0
775
+ ) {
776
+ url = path.split("//")[0] + "//";
777
+ path = path.split("//")[1];
778
+ } else {
779
+ url = `/#/${version}`;
780
+ }
781
+
782
+ //处理路由参数
783
+ let paths = path.split("/");
784
+
785
+ let routeParamConfigs = jump.routeParams;
786
+ if (routeParamConfigs) {
787
+ for (let i = 0; i < paths.length; i++) {
788
+ if (paths[i].indexOf(":") == 0) {
789
+ let pa = paths[i].substring(1);
790
+ //根据参数名匹配参数
791
+ for (let p of routeParamConfigs) {
792
+ if (p && pa == p.title) {
793
+ //赋值替换
794
+ let v = record[p.id] ? record[p.id] : p.defaultValue;
795
+ paths[i] = v;
796
+ break;
797
+ }
798
+ }
799
+ }
800
+ }
801
+ url = ProgramConfig.joinPath(url, paths.join("/"));
802
+ } else {
803
+ url = ProgramConfig.joinPath(url, path);
804
+ }
805
+
806
+ //处理search 参数
807
+ let searchParamConfigs = jump.searchParams;
808
+ let searchs = [];
809
+ //放入token
810
+ if (jump.tokenName) {
811
+ searchs[0] = jump.tokenName + "=" + ProgramConfig.hydrocarbonToken();
812
+ }
813
+
814
+ if (searchParamConfigs) {
815
+ let initSearchLength = searchs.length;
816
+ for (let i = 0; i < searchParamConfigs.length; i++) {
817
+ let p = searchParamConfigs[i];
818
+ let v = record[p.id] ? record[p.id] : p.defaultValue;
819
+ if (!v && p.title == "code") {
820
+ v = record_.code;
821
+ }
822
+ searchs[initSearchLength + i] = p.title + "=" + v;
823
+ }
824
+ }
825
+ if (searchs.length > 0) {
826
+ if (url.indexOf("?") != url.length - 1) {
827
+ url = url + "?";
828
+ }
829
+ url = url + searchs.join("&");
830
+ }
831
+ if (jump.linkTarget == '_self') {
832
+ this.isJumpRef.current = true;
833
+ window.location.hash = url.substring(url.indexOf("#") + 1);
834
+ } else {
835
+ debugger
836
+ if (url.indexOf("/#") == 0) {
837
+ // url=window.location.href.split("#/")[0]+url;
838
+ url = window.location.href.split("#/")[0] + url.substring(url.indexOf("/#") + 1);
839
+ }
840
+ window.open(url);
841
+ }
842
+ // if (
843
+ // url.indexOf("#") == 0 ||
844
+ // url.indexOf("/#") == 0 ||
845
+ // url.indexOf("//#") == 0
846
+ // ) {
847
+ // window.location.hash = url.substring(url.indexOf("#") + 1);
848
+ // } else {
849
+ // window.open(url);
850
+ // }
851
+ };
852
+
853
+ blockMenuTreeDrawerOpen = (record) => {
854
+ this.setState({
855
+ blockMenuTreeDrawerOpen: true,
856
+ recordCode: record.code,
857
+ record
858
+ })
859
+ }
860
+
861
+ doRowJump = async (jump: JumpConfig, record: DtmplData) => {
862
+ this.doJump(jump, record);
863
+ };
864
+
865
+ renderExportButton = (title, type: ExportType, sourceId?: string) => {
866
+ const { pageNo, pageSize, serverKey, ltmplConfig, tableType } = this.props;
867
+
868
+ //let buttons = ltmplConfig?.buttons;
869
+
870
+ const { queryKey } = this.state;
871
+ const { translate } = this.context;
872
+ let exportModes: ExportMode[] = tableType == "report" ?
873
+ ["all"] : ["current", "page", "all"];
874
+
875
+ return (
876
+ <Popover
877
+ content={
878
+ <ExportFrame //导出组件
879
+ currentPage={{
880
+ pageNo: pageNo ? pageNo : 1,
881
+ pageSize: pageSize ? pageSize : ltmplConfig.defaultPageSize,
882
+ }}
883
+ exportModes={exportModes}
884
+ type={type}
885
+ serverKey={serverKey}
886
+ queryKey={queryKey}
887
+ sourceId={sourceId}
888
+ title={translate(
889
+ "${" + ltmplConfig.title + "}" + "-" + "${" + title + "}"
890
+ )}
891
+ />
892
+ }
893
+ title={translate("${" + title + "}")}
894
+ placement="bottomRight"
895
+ trigger="click"
896
+ >
897
+ <Tooltip title={translate("${" + title + "}")}>
898
+ <Button
899
+ style={{
900
+ // marginLeft: "5px",
901
+ }}
902
+ //为了点击到没有导出模块,使组件不致销毁,丢失导出数据
903
+ >{type == "ltmpl-data-excel" ? <ExportOutlined /> : title}
904
+ </Button>
905
+ </Tooltip>
906
+ </Popover>
907
+ );
908
+ };
909
+
910
+ renderFileExportButton = () => {
911
+ const { ltmplConfig } = this.props;
912
+ let fileExports = ltmplConfig?.topFileExports;
913
+ if (fileExports) {
914
+ return fileExports.map((fileExport) => {
915
+ return this.renderExportButton(
916
+ fileExport.title,
917
+ "ltmpl-data-filedata",
918
+ fileExport.id
919
+ );
920
+ });
921
+ } else {
922
+ return <></>;
923
+ }
924
+ };
925
+
926
+ doSelectedJump = async (jump: JumpConfig) => {
927
+ const { selectedDatas } = this.state;
928
+ if (selectedDatas.length == 1) {
929
+ this.doJump(jump, selectedDatas[0]);
930
+ }
931
+ };
932
+
933
+ changeRowSelection = (
934
+ selectedRows: SelectedRow[],
935
+ selectedDatas: DtmplData[]
936
+ ) => {
937
+ const { onSelectChange } = this.props;
938
+ this.setState({ selectedRows, selectedDatas });
939
+ if (onSelectChange) {
940
+ onSelectChange({ selectedRows, selectedDatas });
941
+ }
942
+ };
943
+
944
+ onChangeColSort = (sortedColConfigs: ColumnConfig[]) => {
945
+ const { setUserPageConfig } = this.props;
946
+ this.setState({ sortedColConfigs });
947
+ const sortedColIds = sortedColConfigs.map(r => r.id);
948
+ setUserPageConfig && setUserPageConfig({ sortedColIds });
949
+ };
950
+
951
+ // 更新本地缓存列宽度
952
+ onChangeResize = (colResize: { [key: string]: number }) => {
953
+ const { setUserPageConfig, userPageConfig } = this.props;
954
+ const oldColResize = userPageConfig?.colResize || {};
955
+ setUserPageConfig && setUserPageConfig({ colResize: { ...oldColResize, ...colResize } });
956
+ }
957
+
958
+ getAddTmplButton = (classAddConfigs: ClassAddConfig[]) => {
959
+ const { translate } = this.context;
960
+ if (classAddConfigs && classAddConfigs.length < 1) {
961
+ return translate("${没有分类添加按钮}");
962
+ }
963
+ return classAddConfigs.map((config) => {
964
+ return (
965
+ <p>
966
+ <Button
967
+ size={"small"}
968
+ type={"text"}
969
+ onClick={() => this.props.doCreate(config.id, false)}
970
+ >
971
+ {config.title}
972
+ </Button>
973
+ </p>
974
+ );
975
+ });
976
+ };
977
+
978
+ // 重置当前页面配置
979
+ handleResetUserPageConfig = () => {
980
+ const { resetUserPageConfig, ltmplConfig, tableType, defShowType } = this.props;
981
+ const { translate } = this.context;
982
+ let sortedColConfigs = undefined;
983
+ if (ltmplConfig) {
984
+ sortedColConfigs = tableType === 'report' ? ltmplConfig.columns : [
985
+ { id: "10000", title: translate("${排序}"), originalId: "10000" },
986
+ { id: "20000", title: translate("${隐藏}"), originalId: "20000" },
987
+ ...ltmplConfig.columns,
988
+ ];
989
+ }
990
+ this.setState({ viewModels: [defShowType || ltmplConfig.showType || "table"], hiddenColIds: defaultDisabledColIds, sortedColConfigs });
991
+ resetUserPageConfig();
992
+ }
993
+
994
+ // 更新当前页面配置
995
+ handleUpdateUserPageConfig = (val: { [key: string]: any }) => {
996
+ const { sortedColIds, hiddenColIds, viewModels, criteriaData } = val || {};
997
+ const { setUserPageConfig, ltmplConfig, tableType, defShowType, menuId } = this.props;
998
+ const { userCriteriaData } = this.state;
999
+ const { translate } = this.context;
1000
+ let sortedColConfigs = undefined;
1001
+ if (ltmplConfig) {
1002
+ sortedColConfigs = tableType === 'report' ? ltmplConfig.columns : [
1003
+ { id: "10000", title: translate("${排序}"), originalId: "10000" },
1004
+ { id: "20000", title: translate("${隐藏}"), originalId: "20000" },
1005
+ ...ltmplConfig.columns,
1006
+ ];
1007
+ }
1008
+ if (sortedColIds) { // 页面配置更新列排序
1009
+ sortedColConfigs.sort((a, b) => sortedColIds.indexOf(a.id) - sortedColIds.indexOf(b.id));
1010
+ }
1011
+ // 旧过滤参数设置为空
1012
+ const oldParms = Object.keys(userCriteriaData || {}).reduce((total, item) => { total[item] = ""; return total; }, {});
1013
+ this.actTableDoSearch({ ...oldParms, ...(criteriaData || { menuId }) });
1014
+ this.setState({ userCriteriaData: criteriaData, viewModels: viewModels || [defShowType || ltmplConfig.showType || "table"], hiddenColIds: hiddenColIds || defaultDisabledColIds, sortedColConfigs });
1015
+ setUserPageConfig({ ...val, criteriaData: undefined });
1016
+ }
1017
+
1018
+ renderHeaderButtons = () => {
1019
+ let {
1020
+ hiddenColIds, viewModels, sortedColConfigs, disabledColIds, showL2Chart,
1021
+ showL2ActTable, restatParams, userCriteriaData
1022
+ } = this.state;
1023
+ const {
1024
+ ltmplConfig, sourceId, doCreate, doSearch, menuId,
1025
+ funcMode, customCreatable, serverKey, readOnly, userPageConfig, allowUserConfig
1026
+ } = this.props;
1027
+ const { translate } = this.context;
1028
+ let { buttons } = ltmplConfig;
1029
+ const version = localStorage.getItem("version") || "";
1030
+
1031
+ return (
1032
+ <>
1033
+ <Space>
1034
+ {userPageConfig && allowUserConfig ? <PageConfigButton menuCode={menuId} handleResetUserPageConfig={this.handleResetUserPageConfig} handleUpdateUserPageConfig={this.handleUpdateUserPageConfig} userCriteriaData={userCriteriaData} /> : ""}
1035
+ {buttons.includes("showTableAdd") ?
1036
+ <Tooltip title={translate("${添加列表}")}>
1037
+ <Button onClick={() => { }}><AppstoreAddOutlined /></Button>
1038
+ </Tooltip> : ""}
1039
+ {funcMode == "common" && this.criteriaFormUseful() ? (
1040
+ <Popover trigger="click" content={this.renderCriteriaForm()}>
1041
+ <Button>
1042
+ <SearchOutlined />
1043
+ </Button>
1044
+ </Popover>
1045
+ ) : null}
1046
+ {buttons.includes("ratmplSelect") && !readOnly ? (
1047
+ <Button onClick={() => this.setState({ showRatmplSelector: true })}>
1048
+ {translate("${选择}")}
1049
+ </Button>
1050
+ ) : (
1051
+ ""
1052
+ )}
1053
+ {buttons.includes("dtmplAdd") && doCreate && !readOnly ? (
1054
+ ltmplConfig.classAddConfigs &&
1055
+ ltmplConfig.classAddConfigs.length > 0 ? (
1056
+ <Popover
1057
+ arrow={false}
1058
+ content={this.getAddTmplButton(ltmplConfig.classAddConfigs)}
1059
+ placement="bottomRight"
1060
+ >
1061
+ <Tooltip>
1062
+ <Button>
1063
+ <PlusOutlined />
1064
+ </Button>
1065
+ </Tooltip>
1066
+ </Popover>
1067
+ ) : (
1068
+ <Tooltip title={translate("${" + (ltmplConfig.createBtnTitle || "创建") + "}")}>
1069
+ <Button onClick={() => doCreate(null, false)}>
1070
+ <PlusOutlined />
1071
+ </Button>
1072
+ </Tooltip>
1073
+ )
1074
+ ) : (
1075
+ ""
1076
+ )}
1077
+ {(buttons.includes("dtmplCustomAdd") || customCreatable) &&
1078
+ doCreate &&
1079
+ !readOnly ? (
1080
+ <Tooltip title={translate("${" + (ltmplConfig.createBtnTitle || "创建") + "}")}>
1081
+ <Button onClick={() => doCreate(null, true)}>
1082
+ <PlusCircleOutlined />
1083
+ </Button>
1084
+ </Tooltip>
1085
+ ) : (
1086
+ ""
1087
+ )}
1088
+ {buttons.includes("importLtmplExcel") && !readOnly ? (
1089
+ <Tooltip title={translate("${导入}")}>
1090
+ <Button
1091
+ href={`#/${version}/${sourceId}/importer?menuId=${menuId}`}
1092
+ target={"_blank"}
1093
+ >
1094
+ <ImportOutlined />
1095
+ </Button>
1096
+ </Tooltip>
1097
+ ) : (
1098
+ ""
1099
+ )}
1100
+ {buttons.includes("exportLtmplExcel") && !readOnly
1101
+ ? this.renderExportButton("导出", "ltmpl-data-excel")
1102
+ : ""}
1103
+ {this.renderFileExportButton()}
1104
+ {false
1105
+ && buttons.includes("showChart") ? (
1106
+ <Tooltip
1107
+ title={
1108
+ showL2Chart
1109
+ ? translate("${隐藏}${图表}")
1110
+ : translate("${展示}${图表}")
1111
+ }
1112
+ >
1113
+ <Button onClick={this.handleShowChart}>
1114
+ <LineChartOutlined />
1115
+ </Button>
1116
+ </Tooltip>
1117
+ ) : (
1118
+ ""
1119
+ )}
1120
+ {buttons.includes("analysis") ? (
1121
+ <Tooltip
1122
+ title={
1123
+ showL2ActTable
1124
+ ? translate("${隐藏}${数据分析}")
1125
+ : translate("${展示}${数据分析}")
1126
+ }
1127
+ >
1128
+ <Button onClick={this.handleDataAnalysis}>
1129
+ <FundOutlined />
1130
+ </Button>
1131
+ </Tooltip>
1132
+ ) : (
1133
+ ""
1134
+ )}
1135
+ {buttons.includes("reStat") && !readOnly ? (
1136
+ <Restat
1137
+ value={restatParams}
1138
+ serverKey={serverKey}
1139
+ fields={ltmplConfig.reStatParams}
1140
+ sourceId={sourceId}
1141
+ onfinish={(restatParams) => {
1142
+ this.actTableDoSearch(null);
1143
+ this.setState({ restatParams: restatParams });
1144
+ }
1145
+ }
1146
+ ></Restat>
1147
+ ) : (
1148
+ ""
1149
+ )}
1150
+ <Popover
1151
+ content={
1152
+ <Checkbox.Group
1153
+ value={viewModels}
1154
+ onChange={this.changeViewModel}
1155
+ >
1156
+ <Row style={{ width: "120px" }}>
1157
+ <Col span={24}>
1158
+ <Checkbox value={"table"}>{translate("${表格}")}</Checkbox>
1159
+ </Col>
1160
+ <Col span={24}>
1161
+ <Checkbox value={"verticalList"}>
1162
+ {translate("${纵向列表}")}
1163
+ </Checkbox>
1164
+ </Col>
1165
+ <Col span={24}>
1166
+ <Checkbox value="cardList">
1167
+ {translate("${卡片列表}")}
1168
+ </Checkbox>
1169
+ </Col>
1170
+ <Col span={24}>
1171
+ <Checkbox value="ganttChart">
1172
+ {translate("${甘特图}")}
1173
+ </Checkbox>
1174
+ </Col>
1175
+ <Col span={24}>
1176
+ <Checkbox value="calendar">
1177
+ {translate("${日历}")}
1178
+ </Checkbox>
1179
+ </Col>
1180
+ {/*<Col span={24}><Checkbox value={'horizontalList'}>横向列表</Checkbox></Col>*/}
1181
+ </Row>
1182
+ </Checkbox.Group>
1183
+ }
1184
+ title={translate("${视图}")}
1185
+ placement="bottomRight"
1186
+ trigger="click"
1187
+ >
1188
+ <Tooltip title={translate("${选择视图}")}>
1189
+ <Button>
1190
+ <RetweetOutlined />
1191
+ </Button>
1192
+ </Tooltip>
1193
+ </Popover>
1194
+ <Popover
1195
+ content={
1196
+ <ColumnSelector
1197
+ columns={sortedColConfigs}
1198
+ disabledColIds={disabledColIds}
1199
+ hiddenColIds={hiddenColIds}
1200
+ onChangeColSort={this.onChangeColSort}
1201
+ onChangeHiddenCols={this.changeHiddenColumns}
1202
+ />
1203
+ }
1204
+ title={translate("${排序和选择列}")}
1205
+ placement="bottomRight"
1206
+ trigger="click"
1207
+ >
1208
+ <Tooltip title={translate("${点击排序和选择列}")}>
1209
+ <Button>
1210
+ <TableOutlined />
1211
+ </Button>
1212
+ </Tooltip>
1213
+ </Popover>
1214
+ {doSearch ? (
1215
+ <Button
1216
+ className="hoverbig"
1217
+ title={translate("${刷新}")}
1218
+ onClick={() => {
1219
+ this.actTableDoSearch(null);
1220
+ }}
1221
+ >
1222
+ <ReloadOutlined />
1223
+ </Button>
1224
+ ) : (
1225
+ ""
1226
+ )}
1227
+ {/*<Tooltip title={translate("${常用配置}")}>*/}
1228
+ {/* <Button*/}
1229
+ {/* className="hoverbig"*/}
1230
+ {/* onClick={() => {*/}
1231
+ {/* //doSearch(null);*/}
1232
+ {/* }}*/}
1233
+ {/* >*/}
1234
+ {/* <SettingOutlined />*/}
1235
+ {/* </Button>*/}
1236
+ {/*</Tooltip>*/}
1237
+
1238
+ </Space>
1239
+ </>
1240
+ );
1241
+ };
1242
+
1243
+ criteriaFormUseful = () => {
1244
+ const { ltmplConfig } = this.props;
1245
+ let { buttons, criteria, updrillButtonConfigs } = ltmplConfig;
1246
+ if (
1247
+ ((buttons.includes("query") ||
1248
+ (updrillButtonConfigs && updrillButtonConfigs.length > 0)) &&
1249
+ ((criteria && criteria.length > 0) ||
1250
+ buttons.includes("drilling"))) ||
1251
+ this.checkBoxUseful() || buttons.includes("multiRowEdit")
1252
+ ) {
1253
+ return true;
1254
+ } else {
1255
+ return false;
1256
+ }
1257
+ };
1258
+
1259
+ checkBoxUseful = () => {
1260
+ const { ltmplConfig } = this.props;
1261
+ let { buttons, jumps, actions, fileExports, customButtons } = ltmplConfig;
1262
+ if (
1263
+ buttons.includes("batchDelete") ||
1264
+ (actions && actions.length > 0) || (customButtons && customButtons.length > 0) ||
1265
+ (jumps && jumps.length > 0) || (fileExports && fileExports.length > 0)
1266
+ ) {
1267
+ return true;
1268
+ } else {
1269
+ return false;
1270
+ }
1271
+ };
1272
+
1273
+ actTableDoSearch = (data: object) => {
1274
+ const { ltreeData } = this.state;
1275
+ this.doSearch_(data, ltreeData);
1276
+ }
1277
+
1278
+ doSearch_ = async (criteriaData, ltreeData) => {
1279
+ const { doSearch } = this.props;
1280
+
1281
+ let new_serial_number = new Date().getTime();
1282
+ if (doSearch && new_serial_number - serial_number > 2000) {
1283
+ serial_number = new_serial_number;
1284
+ await doSearch({ ...criteriaData, serial_number, ...ltreeData });
1285
+ //busyReminderTime=0;
1286
+ // }else{
1287
+ // if(busyReminder){
1288
+ // if(busyReminderTime==1){
1289
+ // const { translate } = this.context;
1290
+ // message.warning(translate("${系统忙,请稍后再试}"));
1291
+ // busyReminderTime=0;
1292
+ // }else{
1293
+ // busyReminderTime=1;
1294
+ // }
1295
+ //}
1296
+ }
1297
+ }
1298
+
1299
+ ltreeValueChange = async (v) => {
1300
+ let ltreeEntitySelect = this.getLtreeEntitySelectCriteria();
1301
+ const { ltreeData } = this.state;
1302
+ const { criteriaData } = this.props;
1303
+ if (ltreeData && ltreeData["c_" + ltreeEntitySelect.id] != v) {
1304
+ let ltreeData_ = {};
1305
+ ltreeData_["c_" + ltreeEntitySelect.id] = v;
1306
+ await this.doSearch_(criteriaData, ltreeData_);
1307
+ this.setState({ ltreeData: ltreeData_ });
1308
+ }
1309
+ }
1310
+
1311
+
1312
+ doSearchDirect = (data: object) => {
1313
+
1314
+ let { doSearch } = this.props;
1315
+ if (doSearch) {
1316
+ doSearch({ ...data, serial_number });
1317
+ }
1318
+ }
1319
+
1320
+
1321
+ buttonClickable = () => {
1322
+ let new_serial_number = new Date().getTime();
1323
+ if (new_serial_number - serial_number > 1500) {
1324
+ serial_number = new_serial_number;
1325
+ return true;
1326
+ } else {
1327
+ return false;
1328
+ }
1329
+ }
1330
+
1331
+ renderCriteriaForm = () => {
1332
+ let { loading, selectedRows, selectedDatas, userCriteriaData, editings, tabActiveKey, tabsOptions } = this.state;
1333
+ let { ltmplConfig, serverKey, sourceId } = this.props;
1334
+ const tabCriteriaId = tabsOptions.find(r => r.key === tabActiveKey)?.id;
1335
+ return (
1336
+ <CriteriaForm
1337
+ key={sourceId}
1338
+ serverKey={serverKey}
1339
+ loading={loading}
1340
+ selectedDatas={selectedDatas}
1341
+ selectedRows={selectedRows}
1342
+ doCustomButton={this.doCustomButton}
1343
+ ltmplConfig={ltmplConfig}
1344
+ data={userCriteriaData}
1345
+ doCQuery={this.doSelectedCQuery}
1346
+ doAction={this.doSelectedAction}
1347
+ doDelete={this.doDelete}
1348
+ doJump={this.doSelectedJump}
1349
+ doSearch={this.actTableDoSearch}
1350
+ doMultiRowEdit={this.doMultiRowEdit}
1351
+ multiRowEditDisabled={!editings.length}
1352
+ tabCriteriaId={tabCriteriaId}
1353
+ />
1354
+ );
1355
+ };
1356
+ //暂时无用
1357
+ // queryTotal = async () => {
1358
+ // const { queryKey} = this.state;
1359
+ // const { serverKey }=this.props;
1360
+ // let aggregateVO:AggregateVO = await HcserviceV3.requestQueryAggregates(serverKey, queryKey.key);
1361
+ // this.setState({
1362
+ // aggregateVO,
1363
+ // });
1364
+ // return aggregateVO;
1365
+ // };
1366
+
1367
+ getLtreeEntitySelectCriteria = () => {
1368
+ let { ltmplConfig } = this.props
1369
+
1370
+ if (ltmplConfig && ltmplConfig.criteria) {
1371
+ for (let c of ltmplConfig.criteria) {
1372
+ if (c?.extControlType == "ltree-entity-select" || c?.extControlType == "ltree-entity-select-value") {
1373
+ return c;
1374
+ }
1375
+ }
1376
+ }
1377
+ return undefined;
1378
+ }
1379
+
1380
+ // 行内编辑start
1381
+ editRowEdit = (code: string) => {
1382
+ this.setState({ editings: [...this.state.editings, code] });
1383
+ }
1384
+
1385
+ cancelRowEdit = (code: string) => {
1386
+ this.setState({ editings: this.state.editings.filter(r => r !== code) });
1387
+ }
1388
+
1389
+ // 单独提交
1390
+ postLtmplData = async (dtmplData) => {
1391
+ const { serverKey, sourceId } = this.props;
1392
+ let res = await HcserviceV3.postLtmplData(
1393
+ serverKey,
1394
+ sourceId,
1395
+ dtmplData,
1396
+ message
1397
+ );
1398
+ if (res.status === "success") {
1399
+ this.cancelRowEdit(dtmplData["唯一编码"]);
1400
+ this.actTableDoSearch(undefined);
1401
+ this.formRef.current.resetFields([]);
1402
+ }
1403
+ };
1404
+
1405
+ // 批量提交
1406
+ postLtmplMultiData = async (dtmplData) => {
1407
+ const { serverKey, sourceId } = this.props;
1408
+ let res = await HcserviceV3.postLtmplMultiData(
1409
+ serverKey,
1410
+ sourceId,
1411
+ dtmplData,
1412
+ message
1413
+ );
1414
+ if (res.status === "success") {
1415
+ this.cancelRowEdit(dtmplData["唯一编码"]);
1416
+ this.actTableDoSearch(undefined);
1417
+ this.formRef.current.resetFields([]); // 重置表单数据
1418
+ this.setState({ editings: [] });
1419
+ }
1420
+ };
1421
+
1422
+ saveRowData = async (data: DtmplData) => {
1423
+ const { code } = data;
1424
+ let currentForm = this.formRef.current;
1425
+ let dtmplData = { "唯一编码": code };
1426
+ await currentForm.validateFields().then((values) => {
1427
+ for (let key in values) {
1428
+ if (values.hasOwnProperty(key) && key.startsWith(code)) {
1429
+ dtmplData[key.split("_")[1]] = values[key];
1430
+ }
1431
+ }
1432
+ this.postLtmplData(dtmplData);
1433
+ });
1434
+ }
1435
+
1436
+ // 批量提交
1437
+ doMultiRowEdit = async () => {
1438
+ const { editings } = this.state;
1439
+ if (!editings.length) {
1440
+ return;
1441
+ }
1442
+ let currentForm = this.formRef.current;
1443
+ let dtmplData = {};
1444
+ await currentForm.validateFields().then((values) => {
1445
+ for (let key in values) {
1446
+ if (values.hasOwnProperty(key)) {
1447
+ const code = key.split("_")[0];
1448
+ if (editings.includes(code)) {
1449
+ dtmplData[code] = { "唯一编码": code, ...(dtmplData[code] || {}), [key.split("_")[1]]: (values[key] || values[key] === 0) ? values[key] : null }
1450
+ }
1451
+ }
1452
+ }
1453
+ this.postLtmplMultiData({ data: JSON.stringify(Object.values(dtmplData)) });
1454
+ });
1455
+ }
1456
+
1457
+ // 批量编辑表单值更新
1458
+ doRowEditFormChange = (data: { [key: string]: any }) => {
1459
+ const { editings } = this.state;
1460
+ const code = Object.keys(data)[0].split("_")[0];
1461
+ if (!editings.includes(code)) {
1462
+ this.setState({ editings: [...editings, code] });
1463
+ }
1464
+ }
1465
+ // 行内编辑end
1466
+
1467
+ // 删除确认弹窗打开
1468
+ doDelModalOpen = (record: DtmplData) => {
1469
+ this.setState({ record, recordCode: record.code, delModalOpen: true });
1470
+ };
1471
+
1472
+ // tab页切换查询
1473
+ doTabSearch = (val: string) => {
1474
+ const { tabsOptions, tabActiveKey } = this.state;
1475
+ let new_serial_number = new Date().getTime();
1476
+ if (new_serial_number - serial_number < 2000) return;
1477
+ if (tabActiveKey === val) return;
1478
+ const ids = tabsOptions.find(r => r.key === "all").ids || [];
1479
+ const item = tabsOptions.find(r => r.key === val);
1480
+ let params = ids?.reduce((total, cur) => {
1481
+ total[cur] = (val === "all" || cur !== item.id) ? undefined : val;
1482
+ return total;
1483
+ }, {});
1484
+ this.actTableDoSearch(params);
1485
+ this.setState({ tabActiveKey: val });
1486
+ }
1487
+
1488
+ renderAggregates() { // 统计数据渲染
1489
+ const { aggregateVO } = this.state;
1490
+ const { ltmplConfig } = this.props;
1491
+ const aggregates = aggregateVO?.aggregates || [];
1492
+ const columns = ltmplConfig?.columns || [];
1493
+ return aggregates?.length ? <div className="aggregates">{aggregates.map(item => {
1494
+ const column = columns.find(r => r.id === item.fieldId);
1495
+ if (!column) {
1496
+ return "";
1497
+ }
1498
+ const { dataUnit, themeColor, themeIcon } = column;
1499
+ return <Card className="aggregate-card" hoverable styles={{ body: { padding: 20 } }}>
1500
+ <div style={{ display: "flex", alignItems: "start", justifyContent: "space-between" }}>
1501
+ <div style={{ width: "calc(100% - 40px)" }}>
1502
+ <p className="title">{item.fieldTitle}</p>
1503
+ <div className="value">
1504
+ <Text
1505
+ style={{ maxWidth: "100%" }}
1506
+ ellipsis={{ tooltip: item.value }}
1507
+ >
1508
+ <span className="number">{item.value}</span>
1509
+ </Text>
1510
+ {dataUnit ? <span className="unit">{dataUnit}</span> : ""}
1511
+ </div>
1512
+ </div>
1513
+ {themeIcon ?
1514
+ <div className="icon" style={{ color: themeColor, background: `${themeColor}26` }}>
1515
+ <Icon type={themeIcon} />
1516
+ </div> :
1517
+ ""}
1518
+ </div>
1519
+ </Card>
1520
+ }).filter(Boolean)
1521
+ }</div > : "";
1522
+ }
1523
+
1524
+ renderContent = () => {
1525
+ let {
1526
+ queryKey, loading, selectedRows, hiddenRowCodes, viewModels, sortedColConfigs, hiddenColIds, showL2ActTable,
1527
+ pageInfo, editings, userCriteriaData, tabsOptions, tabActiveKey, pageSizeOptions, tableNumber
1528
+ } = this.state;
1529
+ let {
1530
+ mainCode, sourceId, ltmplConfig, funcMode, operatable,
1531
+ title, collapsible,
1532
+ onChangePage, serverKey, criteriaData, showEmpty, loadDataCallback,
1533
+ showView, doEdit, doRAction, customEditable, readOnly, tableType, showPagination, showAggregates, userPageConfig,
1534
+ doEdit2D, doView2D
1535
+ } = this.props;
1536
+ const { translate } = this.context;
1537
+
1538
+ if (!ltmplConfig || !sourceId) {
1539
+ return (
1540
+ <>
1541
+ <Card loading={loading}></Card>
1542
+ <Table loading={loading}></Table>
1543
+ </>
1544
+ );
1545
+ }
1546
+
1547
+ let tableColumns = ColumnBuilder.buildTableColumns(
1548
+ {
1549
+ ltmplConfig, operatable,
1550
+ hiddenColIds, hiddenRowCodes, sortedColConfigs, showView,
1551
+ doEdit,
1552
+ doRAction, customEditable,
1553
+ serverKey, readOnly,
1554
+ sourceId, translate, unHiden: this.unHiden,
1555
+ onHide: this.onHide, doCustomButton: this.doCustomButton, doRowJump: this.doRowJump,
1556
+ blockMenuTreeDrawerOpen: this.blockMenuTreeDrawerOpen,
1557
+ doRowAction: this.doRowAction, doDeleteByCode: this.doDeleteByCode, sortColumns: criteriaData["sortColIds"],
1558
+ editings, editRowEdit: this.editRowEdit, cancelRowEdit: this.cancelRowEdit, saveRowData: this.saveRowData,
1559
+ doDelModalOpen: this.doDelModalOpen, mainCode, criteriaData: userCriteriaData, actTableDoSearch: this.actTableDoSearch,
1560
+ columnResize: userPageConfig?.colResize, doEdit2D, doView2D
1561
+ }
1562
+ );
1563
+
1564
+ let { buttons, extDisplayConfig, rowCardCount, customViewPagePath, splitTabShowType } = ltmplConfig;
1565
+ let { primaryColumn, primaryColumnLabel, secondColumn, secondColumnLabel, mainPicture, mainPictureLabel, labelColumn, cardShowCols, notDisplayFieldName, colNumOnRow } = extDisplayConfig;
1566
+ let displayCriteriaCard: boolean = false;
1567
+ if (funcMode == "simple" || funcMode == "common") {
1568
+ displayCriteriaCard = false;
1569
+ } else if (this.criteriaFormUseful()) {
1570
+ displayCriteriaCard = true;
1571
+ }
1572
+
1573
+ let columnConfigs = [];
1574
+ if (sortedColConfigs) {
1575
+ for (let colConfig of sortedColConfigs) {
1576
+ if (!hiddenColIds.includes(colConfig.id)) {
1577
+ columnConfigs.push(colConfig);
1578
+ }
1579
+ }
1580
+ }
1581
+
1582
+ const sortColumnData = [];
1583
+ if (Array.isArray(criteriaData["sortColIds"])) {
1584
+ sortColumnData.push(...criteriaData["sortColIds"]);
1585
+ }
1586
+
1587
+ let ltreeEntitySelect = this.getLtreeEntitySelectCriteria();
1588
+
1589
+ // actTable渲染
1590
+ const renderActTable = loading ? (
1591
+ <Table loading={loading}></Table>
1592
+ ) : (tableType == "report" ? <ReportTable
1593
+ tableProps={{ scrollY: ltmplConfig.scrollY, clickDisplayTotal: !ltmplConfig.directShowTotal }}
1594
+ serverKey={serverKey} hiddenColIds={hiddenColIds}
1595
+ maxSelectedRows={this.checkBoxUseful() ? 1000 : -1}
1596
+ columns={tableColumns}
1597
+ selectedRows={selectedRows} queryKey={queryKey}
1598
+ onChangeRowSelection={this.changeRowSelection}
1599
+ leftFixedCols={ltmplConfig.leftFixedCols}
1600
+ onChangeResize={this.onChangeResize}
1601
+ showEmpty={showEmpty}
1602
+ /> :
1603
+ <QueryTable key={"querytable" + sourceId} sourceId={sourceId}
1604
+ // queryTotal={this.queryTotal}
1605
+ tableProps={{ scrollY: ltmplConfig.scrollY, clickDisplayTotal: !ltmplConfig.directShowTotal }}
1606
+ serverKey={serverKey}
1607
+ onChangePage={onChangePage}
1608
+ viewModels={viewModels}
1609
+ primaryColumn={primaryColumn}
1610
+ columnConfigs={columnConfigs} summaryConfigs={ltmplConfig.totalColumnConfigs}
1611
+ maxSelectedRows={this.props?.tableType === "select" || this.checkBoxUseful() ? 10000 : -1}
1612
+ selectedRows={selectedRows} columns={tableColumns}
1613
+ hiddenRowCodes={hiddenRowCodes}
1614
+ pageInfo={pageInfo}
1615
+ queryKey={queryKey}
1616
+ onChangeRowSelection={this.changeRowSelection}
1617
+ subtotalXColumn={
1618
+ ltmplConfig.subtotalXColumn == null ||
1619
+ ltmplConfig.subtotalXColumn.length <= 0
1620
+ ? null
1621
+ : ltmplConfig.subtotalXColumn
1622
+ }
1623
+ groupIColumns={ltmplConfig.groupIColumns}
1624
+ doSearch={this.actTableDoSearch}
1625
+ sortColumnData={sortColumnData}
1626
+ cardListConfig={{ primaryColumn, primaryColumnLabel, secondColumn, secondColumnLabel, mainPicture, mainPictureLabel, labelColumn, cardShowCols, rowCardCount, buttons, customViewPagePath, mainCode, notDisplayFieldName, colNumOnRow }}
1627
+ ltmplConfig={ltmplConfig}
1628
+ showView={showView}
1629
+ showPagination={showPagination}
1630
+ onChangeAggregateVO={(val) => this.setState({ aggregateVO: val })}
1631
+ onChangeResize={this.onChangeResize}
1632
+ pageSizeOptions={pageSizeOptions}
1633
+ showEmpty={showEmpty}
1634
+ loadDataCallback={loadDataCallback}
1635
+ />);
1636
+
1637
+ // tab拆解条件渲染
1638
+ const renderSplitTab = <>
1639
+ {splitTabShowType === "tab" ? <Tabs tabBarGutter={12} size="small" activeKey={tabActiveKey} items={tabsOptions} onChange={this.doTabSearch} tabBarExtraContent={this.renderHeaderButtons()} /> : ""}
1640
+ {splitTabShowType === "tag" ? <div className="split-tab" ><Space className="split-tab-left" >{tabsOptions.map(r => <Button style={{ height: "28px" }} size="small" onClick={() => this.doTabSearch(r.key)} shape="round" type={tabActiveKey === r.key ? "primary" : "default"}>{r.title}</Button>)}</Space><div className="split-tab-right">{this.renderHeaderButtons()}</div></div> : ""}
1641
+ {splitTabShowType === "radio" ? <div className="split-tab" ><div className="split-tab-left"><Radio.Group onChange={(e) => this.doTabSearch(e.target.value)} value={tabActiveKey} options={tabsOptions} /></div><div className="split-tab-right">{this.renderHeaderButtons()}</div></div> : ""}
1642
+ </>;
1643
+
1644
+ const renderTable = <Layout hasSider style={{ backgroundColor: "#fff" }}>
1645
+ <Sider
1646
+ width={ltreeEntitySelect ? 260 : 0}
1647
+ theme={"light"}
1648
+ style={{ paddingRight: ltreeEntitySelect ? '10px' : "0px" }}
1649
+ >
1650
+ {ltreeEntitySelect ?
1651
+ <EntryControl style={{ width: "300px" }} onChange={this.ltreeValueChange} fieldConfig={ltreeEntitySelect}></EntryControl> : null}
1652
+ </Sider>
1653
+ <Layout style={{ backgroundColor: "#fff" }}>
1654
+ <Content style={{ overflow: "initial" }}>
1655
+ {showAggregates ? this.renderAggregates() : ""}
1656
+ {displayCriteriaCard ? this.renderCriteriaForm() : null}
1657
+ {buttons.includes("rowEdit") ? <AntdForm ref={this.formRef} component={false} onValuesChange={this.doRowEditFormChange}>{renderActTable}</AntdForm> : renderActTable}
1658
+ <PageChart ltmplConfig={ltmplConfig} criteriaData={userCriteriaData} />
1659
+ </Content>
1660
+ </Layout>
1661
+ </Layout>;
1662
+
1663
+ return (
1664
+ <>
1665
+ {buttons.includes("analysis") && showL2ActTable ? (
1666
+ <div>
1667
+ <L2ActTable
1668
+ serverKey={serverKey}
1669
+ innerQueryKey={queryKey.key}
1670
+ sourceId={sourceId}
1671
+ />
1672
+ <Divider
1673
+ dashed
1674
+ style={{ borderTopColor: "#40a9ff" }}
1675
+ plain
1676
+ ></Divider>
1677
+ </div>
1678
+ ) : (
1679
+ ""
1680
+ )}
1681
+ <div className="actTable">
1682
+ {["complete", "common"].includes(funcMode) ?
1683
+ <Row>
1684
+ <Col span={24}>
1685
+ {collapsible ? null : (
1686
+ <span>
1687
+ {ltmplConfig.header ? (
1688
+ <div
1689
+ style={{ padding: "6px" }}
1690
+ dangerouslySetInnerHTML={{ __html: ltmplConfig.header }}
1691
+ ></div>
1692
+ ) : null}
1693
+ {tabsOptions.length ? renderSplitTab :
1694
+ <>
1695
+ <h3 >
1696
+ <p className="act-table-title" style={{ position: "relative", float: "left", marginBottom: "4px" }}> {!title
1697
+ ? translate("${" + ltmplConfig.title + "}")
1698
+ : typeof title == "string"
1699
+ ? translate("${" + title + "}")
1700
+ : title}</p>
1701
+ </h3>
1702
+ <p className="fr" style={{ marginBottom: "4px" }}>{this.renderHeaderButtons()}</p>
1703
+ </>}
1704
+ </span>
1705
+ )}
1706
+ </Col>
1707
+ </Row> : null}
1708
+ {buttons.includes("showTableAdd") ? <RowTable mainTable={renderTable} ltmplConfig={ltmplConfig} tableNumber={tableNumber} sourceId={sourceId} /> : renderTable}
1709
+ {/*此处放页脚*/}
1710
+ {ltmplConfig.footer ? (
1711
+ <div
1712
+ style={{ padding: "6px" }}
1713
+ dangerouslySetInnerHTML={{ __html: ltmplConfig.footer }}
1714
+ ></div>
1715
+ ) : null}
1716
+ </div>
1717
+ </>
1718
+ );
1719
+ };
1720
+
1721
+ saveRatmplSelect = async (selectedRows: SelectedRow[]) => {
1722
+ this.setState({
1723
+ showRatmplSelector: false,
1724
+ });
1725
+ const { serverKey, sourceId, mainCode, doSearch } = this.props;
1726
+ if (!selectedRows || selectedRows.length <= 0) {
1727
+ return;
1728
+ }
1729
+
1730
+ //查询
1731
+ const codes: string[] = [];
1732
+ for (let row of selectedRows) {
1733
+ codes.push(row.code);
1734
+ }
1735
+ await HcserviceV3.saveRatmplSelectCodes(
1736
+ serverKey,
1737
+ sourceId,
1738
+ mainCode,
1739
+ codes
1740
+ );
1741
+ this.actTableDoSearch(null);
1742
+ };
1743
+
1744
+ render() {
1745
+ let { queryKey, loading, blockMenuTreeDrawerOpen, recordCode, record, showRatmplSelector, delModalOpen } = this.state;
1746
+ let { sourceId, ltmplConfig, title, collapsible, initCollapse, tip, serverKey, mainCode } = this.props;
1747
+ const { strongDeleteConfirmText } = ltmplConfig || {};
1748
+ const { translate } = this.context;
1749
+ const delFormRef = React.createRef<FormInstance>(); // 强删除表单的form Ref
1750
+
1751
+ if (!ltmplConfig || !sourceId) {
1752
+ return (
1753
+ <>
1754
+ <Card loading={loading}></Card>
1755
+ <Table loading={loading}></Table>
1756
+ </>
1757
+ );
1758
+ }
1759
+
1760
+ return (
1761
+ <>
1762
+ {this.renderAboveCustomPage()}
1763
+ {collapsible ? (
1764
+ <CollapseCard
1765
+ initCollapse={initCollapse}
1766
+ title={
1767
+ <>
1768
+ {!title ? ltmplConfig.title : title}
1769
+ <ToolTipBar
1770
+ content={tip ? tip : ltmplConfig ? ltmplConfig.tip : null}
1771
+ />
1772
+ </>
1773
+ }
1774
+ id={queryKey + ltmplConfig.id}
1775
+ className={`hoverable`}
1776
+ styles={{ header: { background: "#f2f4f5" }, body: { padding: "6px" } }}
1777
+ loading={loading}
1778
+ //暂时注释掉,后续要支持配置。
1779
+ extra={this.renderHeaderButtons()}
1780
+ >
1781
+ {this.renderContent()}
1782
+ </CollapseCard>
1783
+ ) : (
1784
+ <>{this.renderContent()}</>
1785
+ )}
1786
+ {this.renderOhterCustomPage()}
1787
+ <BlockMenuTreeDrawer
1788
+ onOk={() => {
1789
+ this.setState({
1790
+ blockMenuTreeDrawerOpen: false,
1791
+ });
1792
+ }}
1793
+ onCancel={() => {
1794
+ this.setState({
1795
+ blockMenuTreeDrawerOpen: false,
1796
+ });
1797
+ }}
1798
+ open={blockMenuTreeDrawerOpen}
1799
+ roleCode={recordCode}
1800
+ />
1801
+ {showRatmplSelector ? (
1802
+ <ModelSelectTable
1803
+ serverKey={serverKey}
1804
+ // defaultCriteriaValue={fieldGroupConfig.defaultCriteriaValue}
1805
+ // maxSelectedRows={fieldGroupConfig.max}
1806
+ open={showRatmplSelector}
1807
+ onOK={this.saveRatmplSelect}
1808
+ onCancel={() => {
1809
+ this.setState({ showRatmplSelector: false });
1810
+ }}
1811
+ mainCode={mainCode}
1812
+ sourceId={sourceId}
1813
+ existRelation={"false"}
1814
+ />
1815
+ ) : ""}
1816
+ {delModalOpen ?
1817
+ <Modal
1818
+ open={delModalOpen}
1819
+ title={translate("${确定要[删除]此数据吗}?")}
1820
+ onOk={() => delFormRef.current.validateFields().then(() => this.doDeleteByCode(record)).catch(() => { })}
1821
+ onCancel={() => this.setState({ record: undefined, recordCode: undefined, delModalOpen: false })}
1822
+ >
1823
+ <AntdForm ref={delFormRef} layout="vertical">
1824
+ <AntdForm.Item noStyle >
1825
+ <Alert message={translate("${风险操作,此操作不可逆,是否继续操作}?")} type="warning" showIcon style={{ margin: "12px 0" }} />
1826
+ </AntdForm.Item>
1827
+ <AntdForm.Item
1828
+ label={<div>{translate("${请手动输入}")}<span style={{ color: "#ff4d4f" }}> “ {translate("${" + strongDeleteConfirmText + "}")} ” </span>{translate("${完成验证}")}</div>}
1829
+ name="rule"
1830
+ rules={[
1831
+ { required: true, message: translate("${请输入}" + "${" + strongDeleteConfirmText + "}") },
1832
+ { validator: (_, value) => value && value !== translate("${" + strongDeleteConfirmText + "}") ? Promise.reject(new Error(translate("${请输入}" + "${" + strongDeleteConfirmText + "}"))) : Promise.resolve() }
1833
+ ]}
1834
+ >
1835
+ <Input placeholder={translate("${" + strongDeleteConfirmText + "}")} />
1836
+ </AntdForm.Item>
1837
+ </AntdForm>
1838
+ </Modal> : ""}
1839
+ </>
1840
+ );
1841
+ }
1842
+ }
1843
+
1844
+ export default ActTable;