aldehyde 0.2.196 → 0.2.198

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 (580) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +2 -2
  3. package/lib/custom-page/def-custom-page.d.ts.map +1 -1
  4. package/lib/custom-page/dtmpl-custom-edit-modal-page.d.ts.map +1 -1
  5. package/lib/detail/dtmpl.css +57 -57
  6. package/lib/export/export-frame.css +2 -2
  7. package/lib/export/export-frame.d.ts.map +1 -1
  8. package/lib/export/select-code-export-frame.d.ts.map +1 -1
  9. package/lib/form/dtmpl-form.css +3 -3
  10. package/lib/form/dtmpl-form.d.ts.map +1 -1
  11. package/lib/form/field-group-form.d.ts.map +1 -1
  12. package/lib/form/form-Item-group.d.ts.map +1 -1
  13. package/lib/form/index.css +12 -12
  14. package/lib/hooks/useVarCssColor.d.ts.map +1 -1
  15. package/lib/import/excel-import.d.ts.map +1 -1
  16. package/lib/import/index.css +53 -53
  17. package/lib/import/template.css +50 -50
  18. package/lib/layout/MainPage.d.ts.map +1 -1
  19. package/lib/layout/MainPage.js +0 -1
  20. package/lib/layout/MainPage.js.map +1 -1
  21. package/lib/layout/common.css +64 -64
  22. package/lib/layout/coverstyle.css +51 -51
  23. package/lib/layout2/LayoutContext.d.ts.map +1 -1
  24. package/lib/locale/LocaleButton.d.ts.map +1 -1
  25. package/lib/locale/LocaleProvider.d.ts.map +1 -1
  26. package/lib/locale/langMp.d.ts.map +1 -1
  27. package/lib/locale/translate.d.ts.map +1 -1
  28. package/lib/locale/useLocale.d.ts.map +1 -1
  29. package/lib/login/index.css +19 -19
  30. package/lib/login/login.d.ts +0 -4
  31. package/lib/login/login.d.ts.map +1 -1
  32. package/lib/login/login.js +1 -3
  33. package/lib/login/login.js.map +1 -1
  34. package/lib/login2/Login.d.ts.map +1 -1
  35. package/lib/login2/LoginPage.js +1 -1
  36. package/lib/login2/LoginPage.js.map +1 -1
  37. package/lib/module/dtmpl-edit-card.d.ts.map +1 -1
  38. package/lib/module/dtmpl-edit-page.d.ts.map +1 -1
  39. package/lib/module/dtmpl-editor.d.ts.map +1 -1
  40. package/lib/module/dtmpl-view-card.d.ts.map +1 -1
  41. package/lib/module/embed-dtmpl-edit-page.d.ts.map +1 -1
  42. package/lib/module/ltmpl-modal.d.ts.map +1 -1
  43. package/lib/module/ltmpl-table.d.ts.map +1 -1
  44. package/lib/routable/dtmpl-route.d.ts.map +1 -1
  45. package/lib/routable/dtmpl-route.js +1 -1
  46. package/lib/routable/dtmpl-route.js.map +1 -1
  47. package/lib/routable/withroute.d.ts.map +1 -1
  48. package/lib/table/act-table.d.ts.map +1 -1
  49. package/lib/table/act-table.js +2 -1
  50. package/lib/table/act-table.js.map +1 -1
  51. package/lib/table/control-table-x-axis-wrapper.d.ts +2 -11
  52. package/lib/table/control-table-x-axis-wrapper.d.ts.map +1 -1
  53. package/lib/table/index.css +71 -71
  54. package/lib/table/l2-act-table.d.ts.map +1 -1
  55. package/lib/table/modal-select-table.d.ts.map +1 -1
  56. package/lib/table/pagination.css +14 -14
  57. package/lib/table/pagination.d.ts.map +1 -1
  58. package/lib/table/query-table.d.ts.map +1 -1
  59. package/lib/table/relation-table.d.ts.map +1 -1
  60. package/lib/table/select-table.d.ts.map +1 -1
  61. package/lib/table/selected-rows-card.d.ts.map +1 -1
  62. package/lib/tmpl/control-type-supportor.d.ts.map +1 -1
  63. package/lib/tmpl/hc-data-source.d.ts.map +1 -1
  64. package/lib/tmpl/hcservice-v3.d.ts +1 -0
  65. package/lib/tmpl/hcservice-v3.d.ts.map +1 -1
  66. package/lib/tmpl/hcservice-v3.js +17 -0
  67. package/lib/tmpl/hcservice-v3.js.map +1 -1
  68. package/lib/tmpl/interface.d.ts +1 -0
  69. package/lib/tmpl/interface.d.ts.map +1 -1
  70. package/lib/tmpl/interface.js.map +1 -1
  71. package/lib/tmpl/tmpl-config-analysis.d.ts.map +1 -1
  72. package/lib/tree/act-tree.d.ts.map +1 -1
  73. package/lib/tree/block-menu-auth-tree.d.ts.map +1 -1
  74. package/lib/tree/index.css +20 -20
  75. package/lib/tree/tmpl-tree.d.ts.map +1 -1
  76. package/lib/tree/tree-node.d.ts.map +1 -1
  77. package/lib/tree/tree-utils.d.ts.map +1 -1
  78. package/lib/utils/dsu.d.ts.map +1 -1
  79. package/lib/welcome/index.css +13 -13
  80. package/lib/welcome/quick-entrance.d.ts.map +1 -1
  81. package/lib/welcome/workbench.d.ts.map +1 -1
  82. package/package.json +206 -206
  83. package/src/aldehyde/controls/action/index.css +8 -8
  84. package/src/aldehyde/controls/action/index.tsx +396 -401
  85. package/src/aldehyde/controls/action/utils.tsx +307 -307
  86. package/src/aldehyde/controls/auto-complete/index.tsx +82 -82
  87. package/src/aldehyde/controls/cascader/index.tsx +112 -112
  88. package/src/aldehyde/controls/chemstruc/graph.tsx +184 -184
  89. package/src/aldehyde/controls/chemstruc/index.css +28 -28
  90. package/src/aldehyde/controls/code-editor/sql-code-editor.tsx +73 -73
  91. package/src/aldehyde/controls/collapse-card/index.css +8 -8
  92. package/src/aldehyde/controls/collapse-card/index.tsx +109 -109
  93. package/src/aldehyde/controls/color-picker/index.css +26 -26
  94. package/src/aldehyde/controls/color-picker/index.tsx +114 -114
  95. package/src/aldehyde/controls/counting-tag/index.tsx +53 -53
  96. package/src/aldehyde/controls/cquery/cquick-button.tsx +144 -144
  97. package/src/aldehyde/controls/date-picker/index.tsx +146 -146
  98. package/src/aldehyde/controls/entity-select/entity-select.tsx +723 -723
  99. package/src/aldehyde/controls/entity-select/index.css +6 -6
  100. package/src/aldehyde/controls/entity-select/lab-tree-select.tsx +154 -154
  101. package/src/aldehyde/controls/entity-select/popover-entity-select.tsx +190 -190
  102. package/src/aldehyde/controls/entry-control.tsx +359 -359
  103. package/src/aldehyde/controls/enum-badge/index.tsx +31 -31
  104. package/src/aldehyde/controls/enum-tag/index.tsx +35 -35
  105. package/src/aldehyde/controls/field-history/index.tsx +81 -81
  106. package/src/aldehyde/controls/file-export/select-code-export.tsx +40 -40
  107. package/src/aldehyde/controls/file-view/drawer-file-view.tsx +75 -75
  108. package/src/aldehyde/controls/file-view/index.tsx +142 -142
  109. package/src/aldehyde/controls/file-view/newin-file-view.tsx +40 -40
  110. package/src/aldehyde/controls/html-editor/draft.tsx +161 -161
  111. package/src/aldehyde/controls/html-editor/tinymce.js +54 -54
  112. package/src/aldehyde/controls/input-number/index.tsx +148 -148
  113. package/src/aldehyde/controls/input-range/index.tsx +59 -59
  114. package/src/aldehyde/controls/password-setter/index.css +2 -2
  115. package/src/aldehyde/controls/password-setter/index.js +88 -88
  116. package/src/aldehyde/controls/progress/index.tsx +74 -74
  117. package/src/aldehyde/controls/relation-existion/index.css +4 -4
  118. package/src/aldehyde/controls/relation-existion/index.tsx +140 -140
  119. package/src/aldehyde/controls/rfield/index.css +4 -4
  120. package/src/aldehyde/controls/rfield/index.tsx +226 -226
  121. package/src/aldehyde/controls/select/index.tsx +211 -211
  122. package/src/aldehyde/controls/signature/index.tsx +226 -226
  123. package/src/aldehyde/controls/steps/index.tsx +59 -59
  124. package/src/aldehyde/controls/text/ellipsis-text.tsx +96 -96
  125. package/src/aldehyde/controls/upload/index.tsx +138 -138
  126. package/src/aldehyde/controls/view-control.tsx +284 -284
  127. package/src/aldehyde/custom-page/custom-page-router.tsx +75 -75
  128. package/src/aldehyde/custom-page/def-custom-page.tsx +17 -17
  129. package/src/aldehyde/custom-page/dtmpl-custom-edit-modal-page.tsx +87 -87
  130. package/src/aldehyde/detail/button/bottom-submit-button-bar.tsx +90 -90
  131. package/src/aldehyde/detail/button/cquery-button-bar.tsx +144 -144
  132. package/src/aldehyde/detail/button/edit-button.tsx +62 -62
  133. package/src/aldehyde/detail/button/fix-right-submit-button-bar.tsx +178 -178
  134. package/src/aldehyde/detail/button/index.css +42 -42
  135. package/src/aldehyde/detail/button/submit-button-bar.tsx +56 -56
  136. package/src/aldehyde/detail/button/view-button.tsx +61 -61
  137. package/src/aldehyde/detail/dtmpl.css +57 -57
  138. package/src/aldehyde/detail/edit/dtmpl-edit.tsx +267 -267
  139. package/src/aldehyde/detail/edit/fields-edit-card.tsx +143 -143
  140. package/src/aldehyde/detail/edit/modal-row-edit.tsx +94 -94
  141. package/src/aldehyde/detail/edit/post-result/index.tsx +85 -85
  142. package/src/aldehyde/detail/edit/row-edit-card.tsx +179 -179
  143. package/src/aldehyde/detail/edit/row-editor.tsx +72 -72
  144. package/src/aldehyde/detail/rightbar/index.css +34 -34
  145. package/src/aldehyde/detail/rightbar/index.tsx +92 -92
  146. package/src/aldehyde/detail/tooltipbar/index.tsx +32 -32
  147. package/src/aldehyde/detail/view/act-dtmpl-view.tsx +286 -271
  148. package/src/aldehyde/detail/view/dtmpl-view.tsx +319 -319
  149. package/src/aldehyde/detail/view/field-view-group.tsx +83 -83
  150. package/src/aldehyde/detail/view/modal-dtmpl-view.tsx +72 -72
  151. package/src/aldehyde/detail/view/snapshot-timeline.tsx +164 -164
  152. package/src/aldehyde/export/export-frame.css +2 -2
  153. package/src/aldehyde/export/export-frame.tsx +299 -299
  154. package/src/aldehyde/export/select-code-export-frame.tsx +218 -218
  155. package/src/aldehyde/form/criteria-form.tsx +488 -488
  156. package/src/aldehyde/form/dtmpl-form.css +3 -3
  157. package/src/aldehyde/form/dtmpl-form.tsx +502 -502
  158. package/src/aldehyde/form/field-group-form.tsx +98 -98
  159. package/src/aldehyde/form/fields-form.tsx +44 -44
  160. package/src/aldehyde/form/form-Item-group.tsx +211 -211
  161. package/src/aldehyde/form/index.css +12 -12
  162. package/src/aldehyde/hooks/useVarCssColor.ts +6 -6
  163. package/src/aldehyde/icon/index.tsx +28 -28
  164. package/src/aldehyde/import/excel-import.tsx +450 -450
  165. package/src/aldehyde/import/index.css +53 -53
  166. package/src/aldehyde/import/template.css +50 -50
  167. package/src/aldehyde/index.tsx +176 -176
  168. package/src/aldehyde/layout/MainPage.tsx +334 -335
  169. package/src/aldehyde/layout/common.css +64 -64
  170. package/src/aldehyde/layout/coverstyle.css +51 -51
  171. package/src/aldehyde/layout/footer/index.css +5 -5
  172. package/src/aldehyde/layout/footer/index.js +17 -17
  173. package/src/aldehyde/layout/header/index.css +122 -122
  174. package/src/aldehyde/layout/header/index.tsx +145 -145
  175. package/src/aldehyde/layout/menu/block.css +7 -7
  176. package/src/aldehyde/layout/menu/block.tsx +174 -174
  177. package/src/aldehyde/layout/menu/l2menu-message-bar.tsx +161 -161
  178. package/src/aldehyde/layout/menu/l2menu-quick-bar.tsx +159 -159
  179. package/src/aldehyde/layout/menu/menu-2layers.tsx +117 -117
  180. package/src/aldehyde/layout/menu/menu-render.tsx +165 -165
  181. package/src/aldehyde/layout/menu/reset-password.tsx +255 -227
  182. package/src/aldehyde/layout/menu/user-bar.tsx +258 -258
  183. package/src/aldehyde/layout/menu/userinfo-bar.tsx +69 -69
  184. package/src/aldehyde/layout/sidebar/index.css +57 -57
  185. package/src/aldehyde/layout/sidebar/index.tsx +85 -85
  186. package/src/aldehyde/layout2/LayoutContext.tsx +95 -95
  187. package/src/aldehyde/layout2/components/userButton.tsx +171 -171
  188. package/src/aldehyde/layout2/css/header.css +38 -38
  189. package/src/aldehyde/layout2/header.tsx +371 -371
  190. package/src/aldehyde/layout2/main.tsx +27 -27
  191. package/src/aldehyde/layout2/page.tsx +189 -189
  192. package/src/aldehyde/layout2/sider.tsx +335 -335
  193. package/src/aldehyde/layout2/type/layout.type.ts +10 -10
  194. package/src/aldehyde/layout2/util/menu.util.tsx +122 -122
  195. package/src/aldehyde/locale/LocaleButton.tsx +47 -47
  196. package/src/aldehyde/locale/LocaleProvider.tsx +204 -204
  197. package/src/aldehyde/locale/langMp.ts +45 -45
  198. package/src/aldehyde/locale/translate.ts +80 -80
  199. package/src/aldehyde/locale/useLocale.ts +56 -56
  200. package/src/aldehyde/login/context-setter.tsx +130 -130
  201. package/src/aldehyde/login/index.css +19 -19
  202. package/src/aldehyde/login/login.tsx +252 -256
  203. package/src/aldehyde/login/router-login.tsx +107 -107
  204. package/src/aldehyde/login/vertify/index.css +143 -143
  205. package/src/aldehyde/login/vertify/index.tsx +360 -360
  206. package/src/aldehyde/login/vertify/tool.ts +13 -13
  207. package/src/aldehyde/login2/Login.tsx +203 -203
  208. package/src/aldehyde/login2/LoginPage.tsx +64 -64
  209. package/src/aldehyde/login2/index.tsx +4 -4
  210. package/src/aldehyde/module/block-menu-tree-drawer.tsx +116 -116
  211. package/src/aldehyde/module/criteria-page.tsx1 +175 -175
  212. package/src/aldehyde/module/dtmpl-edit-card.tsx +313 -313
  213. package/src/aldehyde/module/dtmpl-edit-drawer.tsx +23 -23
  214. package/src/aldehyde/module/dtmpl-edit-modal.tsx +25 -25
  215. package/src/aldehyde/module/dtmpl-edit-page.tsx +396 -396
  216. package/src/aldehyde/module/dtmpl-editor.tsx +162 -162
  217. package/src/aldehyde/module/dtmpl-view-card.tsx +73 -73
  218. package/src/aldehyde/module/dtmpl-view-drawer.tsx +64 -64
  219. package/src/aldehyde/module/dtmpl-view-modal.tsx +53 -53
  220. package/src/aldehyde/module/embed-dtmpl-edit-page.tsx +137 -137
  221. package/src/aldehyde/module/ltmpl-drawer.tsx +57 -57
  222. package/src/aldehyde/module/ltmpl-modal.tsx +62 -62
  223. package/src/aldehyde/module/ltmpl-table.tsx +375 -375
  224. package/src/aldehyde/routable/dtmpl-route.tsx +166 -165
  225. package/src/aldehyde/routable/import-route.tsx +34 -34
  226. package/src/aldehyde/routable/ltmpl-route.tsx +436 -436
  227. package/src/aldehyde/routable/ttmpl-route.tsx +95 -95
  228. package/src/aldehyde/routable/withroute.tsx +25 -25
  229. package/src/aldehyde/table/act-table.tsx +1737 -1732
  230. package/src/aldehyde/table/column/column-selector.tsx +130 -130
  231. package/src/aldehyde/table/column/index.css +13 -13
  232. package/src/aldehyde/table/control-table-x-axis-wrapper.tsx +80 -80
  233. package/src/aldehyde/table/index.css +71 -71
  234. package/src/aldehyde/table/l2-act-table.tsx +91 -91
  235. package/src/aldehyde/table/modal-select-table.tsx +278 -278
  236. package/src/aldehyde/table/pagination.css +14 -14
  237. package/src/aldehyde/table/pagination.tsx +76 -76
  238. package/src/aldehyde/table/query-table.tsx +1421 -1421
  239. package/src/aldehyde/table/relation-table.tsx +855 -855
  240. package/src/aldehyde/table/select-table.tsx +272 -272
  241. package/src/aldehyde/table/selected-rows-card.tsx +75 -75
  242. package/src/aldehyde/table/stat/restat.tsx +123 -123
  243. package/src/aldehyde/table/table-util.tsx +25 -25
  244. package/src/aldehyde/tmpl/control-type-supportor.tsx +111 -111
  245. package/src/aldehyde/tmpl/hc-data-source.tsx +514 -514
  246. package/src/aldehyde/tmpl/hcservice-v3.tsx +1226 -1204
  247. package/src/aldehyde/tmpl/interface.tsx +614 -612
  248. package/src/aldehyde/tmpl/model-struc-v3.tsx +107 -107
  249. package/src/aldehyde/tmpl/superagent.js +165 -165
  250. package/src/aldehyde/tmpl/tmpl-config-analysis.tsx +342 -342
  251. package/src/aldehyde/tree/act-tree.tsx +220 -220
  252. package/src/aldehyde/tree/block-menu-auth-tree.tsx +187 -187
  253. package/src/aldehyde/tree/index.css +20 -20
  254. package/src/aldehyde/tree/tmpl-tree.tsx +678 -678
  255. package/src/aldehyde/tree/tree-node.tsx +73 -73
  256. package/src/aldehyde/tree/tree-utils.tsx +170 -170
  257. package/src/aldehyde/units/EncryptUtils.js +37 -37
  258. package/src/aldehyde/units/image.d.ts +7 -7
  259. package/src/aldehyde/units/index.tsx +978 -978
  260. package/src/aldehyde/units/storage.js +2 -2
  261. package/src/aldehyde/utils/dsu.ts +27 -27
  262. package/src/aldehyde/welcome/HCWelcome.js +321 -321
  263. package/src/aldehyde/welcome/HCWelcome1.js +259 -259
  264. package/src/aldehyde/welcome/index.css +13 -13
  265. package/src/aldehyde/welcome/quick-entrance.tsx +98 -98
  266. package/src/aldehyde/welcome/workbench.tsx +100 -100
  267. package/lib/controls/action/index.css +0 -9
  268. package/lib/controls/action/index.d.ts +0 -67
  269. package/lib/controls/action/index.d.ts.map +0 -1
  270. package/lib/controls/action/index.js +0 -243
  271. package/lib/controls/action/index.js.map +0 -1
  272. package/lib/controls/action/utils.d.ts +0 -15
  273. package/lib/controls/action/utils.d.ts.map +0 -1
  274. package/lib/controls/action/utils.js +0 -262
  275. package/lib/controls/action/utils.js.map +0 -1
  276. package/lib/controls/auto-complete/index.d.ts +0 -7
  277. package/lib/controls/auto-complete/index.d.ts.map +0 -1
  278. package/lib/controls/auto-complete/index.js +0 -58
  279. package/lib/controls/auto-complete/index.js.map +0 -1
  280. package/lib/controls/cascader/index.d.ts +0 -23
  281. package/lib/controls/cascader/index.d.ts.map +0 -1
  282. package/lib/controls/cascader/index.js +0 -108
  283. package/lib/controls/cascader/index.js.map +0 -1
  284. package/lib/controls/chemstruc/graph.d.ts +0 -40
  285. package/lib/controls/chemstruc/graph.d.ts.map +0 -1
  286. package/lib/controls/chemstruc/graph.js +0 -133
  287. package/lib/controls/chemstruc/graph.js.map +0 -1
  288. package/lib/controls/chemstruc/index.css +0 -28
  289. package/lib/controls/code-editor/sql-code-editor.d.ts +0 -15
  290. package/lib/controls/code-editor/sql-code-editor.d.ts.map +0 -1
  291. package/lib/controls/code-editor/sql-code-editor.js +0 -53
  292. package/lib/controls/code-editor/sql-code-editor.js.map +0 -1
  293. package/lib/controls/collapse-card/index.css +0 -9
  294. package/lib/controls/collapse-card/index.d.ts +0 -33
  295. package/lib/controls/collapse-card/index.d.ts.map +0 -1
  296. package/lib/controls/collapse-card/index.js +0 -74
  297. package/lib/controls/collapse-card/index.js.map +0 -1
  298. package/lib/controls/color-picker/index.css +0 -27
  299. package/lib/controls/color-picker/index.d.ts +0 -30
  300. package/lib/controls/color-picker/index.d.ts.map +0 -1
  301. package/lib/controls/color-picker/index.js +0 -64
  302. package/lib/controls/color-picker/index.js.map +0 -1
  303. package/lib/controls/counting-tag/index.d.ts +0 -20
  304. package/lib/controls/counting-tag/index.d.ts.map +0 -1
  305. package/lib/controls/counting-tag/index.js +0 -37
  306. package/lib/controls/counting-tag/index.js.map +0 -1
  307. package/lib/controls/cquery/cquick-button.d.ts +0 -36
  308. package/lib/controls/cquery/cquick-button.d.ts.map +0 -1
  309. package/lib/controls/cquery/cquick-button.js +0 -75
  310. package/lib/controls/cquery/cquick-button.js.map +0 -1
  311. package/lib/controls/date-picker/index.d.ts +0 -7
  312. package/lib/controls/date-picker/index.d.ts.map +0 -1
  313. package/lib/controls/date-picker/index.js +0 -91
  314. package/lib/controls/date-picker/index.js.map +0 -1
  315. package/lib/controls/entity-select/entity-select.d.ts +0 -87
  316. package/lib/controls/entity-select/entity-select.d.ts.map +0 -1
  317. package/lib/controls/entity-select/entity-select.js +0 -475
  318. package/lib/controls/entity-select/entity-select.js.map +0 -1
  319. package/lib/controls/entity-select/index.css +0 -6
  320. package/lib/controls/entity-select/lab-tree-select.d.ts +0 -36
  321. package/lib/controls/entity-select/lab-tree-select.d.ts.map +0 -1
  322. package/lib/controls/entity-select/lab-tree-select.js +0 -127
  323. package/lib/controls/entity-select/lab-tree-select.js.map +0 -1
  324. package/lib/controls/entity-select/popover-entity-select.d.ts +0 -33
  325. package/lib/controls/entity-select/popover-entity-select.d.ts.map +0 -1
  326. package/lib/controls/entity-select/popover-entity-select.js +0 -114
  327. package/lib/controls/entity-select/popover-entity-select.js.map +0 -1
  328. package/lib/controls/enum-badge/index.d.ts +0 -7
  329. package/lib/controls/enum-badge/index.d.ts.map +0 -1
  330. package/lib/controls/enum-badge/index.js +0 -14
  331. package/lib/controls/enum-badge/index.js.map +0 -1
  332. package/lib/controls/enum-tag/index.d.ts +0 -7
  333. package/lib/controls/enum-tag/index.d.ts.map +0 -1
  334. package/lib/controls/enum-tag/index.js +0 -27
  335. package/lib/controls/enum-tag/index.js.map +0 -1
  336. package/lib/controls/field-history/index.d.ts +0 -8
  337. package/lib/controls/field-history/index.d.ts.map +0 -1
  338. package/lib/controls/field-history/index.js +0 -67
  339. package/lib/controls/field-history/index.js.map +0 -1
  340. package/lib/controls/file-export/select-code-export.d.ts +0 -13
  341. package/lib/controls/file-export/select-code-export.d.ts.map +0 -1
  342. package/lib/controls/file-export/select-code-export.js +0 -14
  343. package/lib/controls/file-export/select-code-export.js.map +0 -1
  344. package/lib/controls/file-view/drawer-file-view.d.ts +0 -23
  345. package/lib/controls/file-view/drawer-file-view.d.ts.map +0 -1
  346. package/lib/controls/file-view/drawer-file-view.js +0 -49
  347. package/lib/controls/file-view/drawer-file-view.js.map +0 -1
  348. package/lib/controls/file-view/index.d.ts +0 -30
  349. package/lib/controls/file-view/index.d.ts.map +0 -1
  350. package/lib/controls/file-view/index.js +0 -122
  351. package/lib/controls/file-view/index.js.map +0 -1
  352. package/lib/controls/file-view/newin-file-view.d.ts +0 -18
  353. package/lib/controls/file-view/newin-file-view.d.ts.map +0 -1
  354. package/lib/controls/file-view/newin-file-view.js +0 -28
  355. package/lib/controls/file-view/newin-file-view.js.map +0 -1
  356. package/lib/controls/html-editor/draft.d.ts +0 -22
  357. package/lib/controls/html-editor/draft.d.ts.map +0 -1
  358. package/lib/controls/html-editor/draft.js +0 -122
  359. package/lib/controls/html-editor/draft.js.map +0 -1
  360. package/lib/controls/html-editor/tinymce.d.ts +0 -13
  361. package/lib/controls/html-editor/tinymce.d.ts.map +0 -1
  362. package/lib/controls/html-editor/tinymce.js +0 -47
  363. package/lib/controls/html-editor/tinymce.js.map +0 -1
  364. package/lib/controls/input-number/index.d.ts +0 -7
  365. package/lib/controls/input-number/index.d.ts.map +0 -1
  366. package/lib/controls/input-number/index.js +0 -77
  367. package/lib/controls/input-number/index.js.map +0 -1
  368. package/lib/controls/input-range/index.d.ts +0 -7
  369. package/lib/controls/input-range/index.d.ts.map +0 -1
  370. package/lib/controls/input-range/index.js +0 -29
  371. package/lib/controls/input-range/index.js.map +0 -1
  372. package/lib/controls/password-setter/index.css +0 -3
  373. package/lib/controls/password-setter/index.d.ts +0 -17
  374. package/lib/controls/password-setter/index.d.ts.map +0 -1
  375. package/lib/controls/password-setter/index.js +0 -59
  376. package/lib/controls/password-setter/index.js.map +0 -1
  377. package/lib/controls/progress/index.d.ts +0 -7
  378. package/lib/controls/progress/index.d.ts.map +0 -1
  379. package/lib/controls/progress/index.js +0 -52
  380. package/lib/controls/progress/index.js.map +0 -1
  381. package/lib/controls/relation-existion/index.css +0 -4
  382. package/lib/controls/relation-existion/index.d.ts +0 -31
  383. package/lib/controls/relation-existion/index.d.ts.map +0 -1
  384. package/lib/controls/relation-existion/index.js +0 -87
  385. package/lib/controls/relation-existion/index.js.map +0 -1
  386. package/lib/controls/rfield/index.css +0 -4
  387. package/lib/controls/rfield/index.d.ts +0 -41
  388. package/lib/controls/rfield/index.d.ts.map +0 -1
  389. package/lib/controls/rfield/index.js +0 -149
  390. package/lib/controls/rfield/index.js.map +0 -1
  391. package/lib/controls/select/index.d.ts +0 -30
  392. package/lib/controls/select/index.d.ts.map +0 -1
  393. package/lib/controls/select/index.js +0 -145
  394. package/lib/controls/select/index.js.map +0 -1
  395. package/lib/controls/signature/index.d.ts +0 -42
  396. package/lib/controls/signature/index.d.ts.map +0 -1
  397. package/lib/controls/signature/index.js +0 -155
  398. package/lib/controls/signature/index.js.map +0 -1
  399. package/lib/controls/steps/index.d.ts +0 -8
  400. package/lib/controls/steps/index.d.ts.map +0 -1
  401. package/lib/controls/steps/index.js +0 -47
  402. package/lib/controls/steps/index.js.map +0 -1
  403. package/lib/controls/text/ellipsis-text.d.ts +0 -31
  404. package/lib/controls/text/ellipsis-text.d.ts.map +0 -1
  405. package/lib/controls/text/ellipsis-text.js +0 -48
  406. package/lib/controls/text/ellipsis-text.js.map +0 -1
  407. package/lib/controls/upload/index.d.ts +0 -26
  408. package/lib/controls/upload/index.d.ts.map +0 -1
  409. package/lib/controls/upload/index.js +0 -109
  410. package/lib/controls/upload/index.js.map +0 -1
  411. package/lib/detail/button/bottom-submit-button-bar.d.ts +0 -24
  412. package/lib/detail/button/bottom-submit-button-bar.d.ts.map +0 -1
  413. package/lib/detail/button/bottom-submit-button-bar.js +0 -38
  414. package/lib/detail/button/bottom-submit-button-bar.js.map +0 -1
  415. package/lib/detail/button/cquery-button-bar.d.ts +0 -28
  416. package/lib/detail/button/cquery-button-bar.d.ts.map +0 -1
  417. package/lib/detail/button/cquery-button-bar.js +0 -79
  418. package/lib/detail/button/cquery-button-bar.js.map +0 -1
  419. package/lib/detail/button/edit-button.d.ts +0 -11
  420. package/lib/detail/button/edit-button.d.ts.map +0 -1
  421. package/lib/detail/button/edit-button.js +0 -29
  422. package/lib/detail/button/edit-button.js.map +0 -1
  423. package/lib/detail/button/fix-right-submit-button-bar.d.ts +0 -26
  424. package/lib/detail/button/fix-right-submit-button-bar.d.ts.map +0 -1
  425. package/lib/detail/button/fix-right-submit-button-bar.js +0 -93
  426. package/lib/detail/button/fix-right-submit-button-bar.js.map +0 -1
  427. package/lib/detail/button/index.css +0 -43
  428. package/lib/detail/button/submit-button-bar.d.ts +0 -22
  429. package/lib/detail/button/submit-button-bar.d.ts.map +0 -1
  430. package/lib/detail/button/submit-button-bar.js +0 -22
  431. package/lib/detail/button/submit-button-bar.js.map +0 -1
  432. package/lib/detail/button/view-button.d.ts +0 -11
  433. package/lib/detail/button/view-button.d.ts.map +0 -1
  434. package/lib/detail/button/view-button.js +0 -28
  435. package/lib/detail/button/view-button.js.map +0 -1
  436. package/lib/detail/edit/dtmpl-edit.d.ts +0 -48
  437. package/lib/detail/edit/dtmpl-edit.d.ts.map +0 -1
  438. package/lib/detail/edit/dtmpl-edit.js +0 -236
  439. package/lib/detail/edit/dtmpl-edit.js.map +0 -1
  440. package/lib/detail/edit/fields-edit-card.d.ts +0 -51
  441. package/lib/detail/edit/fields-edit-card.d.ts.map +0 -1
  442. package/lib/detail/edit/fields-edit-card.js +0 -63
  443. package/lib/detail/edit/fields-edit-card.js.map +0 -1
  444. package/lib/detail/edit/modal-row-edit.d.ts +0 -43
  445. package/lib/detail/edit/modal-row-edit.d.ts.map +0 -1
  446. package/lib/detail/edit/modal-row-edit.js +0 -60
  447. package/lib/detail/edit/modal-row-edit.js.map +0 -1
  448. package/lib/detail/edit/post-result/index.d.ts +0 -17
  449. package/lib/detail/edit/post-result/index.d.ts.map +0 -1
  450. package/lib/detail/edit/post-result/index.js +0 -33
  451. package/lib/detail/edit/post-result/index.js.map +0 -1
  452. package/lib/detail/edit/row-edit-card.d.ts +0 -54
  453. package/lib/detail/edit/row-edit-card.d.ts.map +0 -1
  454. package/lib/detail/edit/row-edit-card.js +0 -83
  455. package/lib/detail/edit/row-edit-card.js.map +0 -1
  456. package/lib/detail/edit/row-editor.d.ts +0 -33
  457. package/lib/detail/edit/row-editor.d.ts.map +0 -1
  458. package/lib/detail/edit/row-editor.js +0 -57
  459. package/lib/detail/edit/row-editor.js.map +0 -1
  460. package/lib/detail/rightbar/index.css +0 -35
  461. package/lib/detail/rightbar/index.d.ts +0 -31
  462. package/lib/detail/rightbar/index.d.ts.map +0 -1
  463. package/lib/detail/rightbar/index.js +0 -59
  464. package/lib/detail/rightbar/index.js.map +0 -1
  465. package/lib/detail/tooltipbar/index.d.ts +0 -19
  466. package/lib/detail/tooltipbar/index.d.ts.map +0 -1
  467. package/lib/detail/tooltipbar/index.js +0 -29
  468. package/lib/detail/tooltipbar/index.js.map +0 -1
  469. package/lib/detail/view/act-dtmpl-view.d.ts +0 -64
  470. package/lib/detail/view/act-dtmpl-view.d.ts.map +0 -1
  471. package/lib/detail/view/act-dtmpl-view.js +0 -152
  472. package/lib/detail/view/act-dtmpl-view.js.map +0 -1
  473. package/lib/detail/view/dtmpl-view.d.ts +0 -43
  474. package/lib/detail/view/dtmpl-view.d.ts.map +0 -1
  475. package/lib/detail/view/dtmpl-view.js +0 -164
  476. package/lib/detail/view/dtmpl-view.js.map +0 -1
  477. package/lib/detail/view/field-view-group.d.ts +0 -30
  478. package/lib/detail/view/field-view-group.d.ts.map +0 -1
  479. package/lib/detail/view/field-view-group.js +0 -45
  480. package/lib/detail/view/field-view-group.js.map +0 -1
  481. package/lib/detail/view/modal-dtmpl-view.d.ts +0 -40
  482. package/lib/detail/view/modal-dtmpl-view.d.ts.map +0 -1
  483. package/lib/detail/view/modal-dtmpl-view.js +0 -34
  484. package/lib/detail/view/modal-dtmpl-view.js.map +0 -1
  485. package/lib/detail/view/snapshot-timeline.d.ts +0 -44
  486. package/lib/detail/view/snapshot-timeline.d.ts.map +0 -1
  487. package/lib/detail/view/snapshot-timeline.js +0 -92
  488. package/lib/detail/view/snapshot-timeline.js.map +0 -1
  489. package/lib/index.d.ts +0 -51
  490. package/lib/index.d.ts.map +0 -1
  491. package/lib/index.js +0 -116
  492. package/lib/index.js.map +0 -1
  493. package/lib/layout/footer/index.css +0 -6
  494. package/lib/layout/footer/index.d.ts +0 -7
  495. package/lib/layout/footer/index.d.ts.map +0 -1
  496. package/lib/layout/footer/index.js +0 -12
  497. package/lib/layout/footer/index.js.map +0 -1
  498. package/lib/layout/header/index.css +0 -122
  499. package/lib/layout/header/index.d.ts +0 -10
  500. package/lib/layout/header/index.d.ts.map +0 -1
  501. package/lib/layout/header/index.js +0 -62
  502. package/lib/layout/header/index.js.map +0 -1
  503. package/lib/layout/menu/block.css +0 -7
  504. package/lib/layout/menu/block.d.ts +0 -33
  505. package/lib/layout/menu/block.d.ts.map +0 -1
  506. package/lib/layout/menu/block.js +0 -128
  507. package/lib/layout/menu/block.js.map +0 -1
  508. package/lib/layout/menu/l2menu-message-bar.d.ts +0 -28
  509. package/lib/layout/menu/l2menu-message-bar.d.ts.map +0 -1
  510. package/lib/layout/menu/l2menu-message-bar.js +0 -114
  511. package/lib/layout/menu/l2menu-message-bar.js.map +0 -1
  512. package/lib/layout/menu/l2menu-quick-bar.d.ts +0 -45
  513. package/lib/layout/menu/l2menu-quick-bar.d.ts.map +0 -1
  514. package/lib/layout/menu/l2menu-quick-bar.js +0 -108
  515. package/lib/layout/menu/l2menu-quick-bar.js.map +0 -1
  516. package/lib/layout/menu/menu-2layers.d.ts +0 -26
  517. package/lib/layout/menu/menu-2layers.d.ts.map +0 -1
  518. package/lib/layout/menu/menu-2layers.js +0 -95
  519. package/lib/layout/menu/menu-2layers.js.map +0 -1
  520. package/lib/layout/menu/menu-render.d.ts +0 -14
  521. package/lib/layout/menu/menu-render.d.ts.map +0 -1
  522. package/lib/layout/menu/menu-render.js +0 -159
  523. package/lib/layout/menu/menu-render.js.map +0 -1
  524. package/lib/layout/menu/reset-password.d.ts +0 -37
  525. package/lib/layout/menu/reset-password.d.ts.map +0 -1
  526. package/lib/layout/menu/reset-password.js +0 -129
  527. package/lib/layout/menu/reset-password.js.map +0 -1
  528. package/lib/layout/menu/user-bar.d.ts +0 -50
  529. package/lib/layout/menu/user-bar.d.ts.map +0 -1
  530. package/lib/layout/menu/user-bar.js +0 -161
  531. package/lib/layout/menu/user-bar.js.map +0 -1
  532. package/lib/layout/menu/userinfo-bar.d.ts +0 -34
  533. package/lib/layout/menu/userinfo-bar.d.ts.map +0 -1
  534. package/lib/layout/menu/userinfo-bar.js +0 -49
  535. package/lib/layout/menu/userinfo-bar.js.map +0 -1
  536. package/lib/layout/sidebar/index.css +0 -57
  537. package/lib/layout/sidebar/index.d.ts +0 -12
  538. package/lib/layout/sidebar/index.d.ts.map +0 -1
  539. package/lib/layout/sidebar/index.js +0 -45
  540. package/lib/layout/sidebar/index.js.map +0 -1
  541. package/lib/layout/sidebar/logo.png +0 -0
  542. package/lib/layout2/components/userButton.d.ts +0 -5
  543. package/lib/layout2/components/userButton.d.ts.map +0 -1
  544. package/lib/layout2/components/userButton.js +0 -133
  545. package/lib/layout2/components/userButton.js.map +0 -1
  546. package/lib/layout2/css/header.css +0 -38
  547. package/lib/layout2/imgs/home.png +0 -0
  548. package/lib/layout2/type/layout.type.d.ts +0 -10
  549. package/lib/layout2/type/layout.type.d.ts.map +0 -1
  550. package/lib/layout2/type/layout.type.js +0 -2
  551. package/lib/layout2/type/layout.type.js.map +0 -1
  552. package/lib/layout2/util/menu.util.d.ts +0 -28
  553. package/lib/layout2/util/menu.util.d.ts.map +0 -1
  554. package/lib/layout2/util/menu.util.js +0 -85
  555. package/lib/layout2/util/menu.util.js.map +0 -1
  556. package/lib/login/vertify/index.css +0 -144
  557. package/lib/login/vertify/index.d.ts +0 -78
  558. package/lib/login/vertify/index.d.ts.map +0 -1
  559. package/lib/login/vertify/index.js +0 -210
  560. package/lib/login/vertify/index.js.map +0 -1
  561. package/lib/login/vertify/tool.d.ts +0 -5
  562. package/lib/login/vertify/tool.d.ts.map +0 -1
  563. package/lib/login/vertify/tool.js +0 -11
  564. package/lib/login/vertify/tool.js.map +0 -1
  565. package/lib/login2/img/login-bg.png +0 -0
  566. package/lib/table/column/column-selector.d.ts +0 -25
  567. package/lib/table/column/column-selector.d.ts.map +0 -1
  568. package/lib/table/column/column-selector.js +0 -62
  569. package/lib/table/column/column-selector.js.map +0 -1
  570. package/lib/table/column/index.css +0 -14
  571. package/lib/table/stat/restat.d.ts +0 -38
  572. package/lib/table/stat/restat.d.ts.map +0 -1
  573. package/lib/table/stat/restat.js +0 -62
  574. package/lib/table/stat/restat.js.map +0 -1
  575. package/lib/welcome/img/development.png +0 -0
  576. package/lib/welcome/img/pain-point.png +0 -0
  577. package/lib/welcome/img/target.png +0 -0
  578. package/lib/welcome/img/time-cost.png +0 -0
  579. package/lib/welcome/img/time-prograss.png +0 -0
  580. package/lib/welcome/img/welcome.png +0 -0
@@ -1,1421 +1,1421 @@
1
- import React from "react";
2
- import { Card, Collapse, Descriptions, List } from "antd";
3
- import Table from "./control-table-x-axis-wrapper";
4
- import "./index.css";
5
- import {
6
- ActTableViewModel,
7
- ColumnConfig,
8
- DtmplData,
9
- FieldConfig,
10
- PageInfo,
11
- QueryData,
12
- QueryKey,
13
- SelectedRow,
14
- } from "../tmpl/interface";
15
- import HcserviceV3 from "../tmpl/hcservice-v3";
16
- import Pagination from "./pagination";
17
- import { TableRowSelection } from "antd/lib/table/interface";
18
- import { SortableContainer, SortableElement } from "react-sortable-hoc";
19
- import { arrayMoveImmutable } from "array-move";
20
- import ViewControl from "../controls/view-control";
21
- import { LocaleContext } from "../locale/LocaleProvider";
22
- import { BigNumber } from "bignumber.js";
23
- import { init, merge, statistic } from "../utils/dsu";
24
-
25
- const { Panel } = Collapse;
26
- const SortableItem = SortableElement((props) => (
27
- <tr className="sortable-item-hover" {...props} />
28
- ));
29
- const SortableBody = SortableContainer((props) => <tbody {...props} />);
30
-
31
- interface CacheData {
32
- dataSource: object[];
33
- pageInfo: PageInfo;
34
- }
35
-
36
- interface QueryTableProps {
37
- viewModels?: ActTableViewModel[];
38
- // defaultPageSize?: number;
39
- pageInfo: {
40
- pageNo: number;
41
- pageSize: number;
42
- };
43
- tableProps?: {
44
- size?: "small" | "middle" | "large";
45
- clickDisplayTotal?: boolean;
46
- scrollY?: number;
47
- };
48
- primaryColumn?: ColumnConfig;
49
- columns: any[];
50
- serverKey?: string;
51
- queryKey: QueryKey;
52
- onChangePage: (pageNo: number, pageSize: number) => void;
53
- onChangeRowSelection?: (
54
- selectedRows: SelectedRow[],
55
- selectedDatas: DtmplData[],
56
- allRowKeys: string[]
57
- ) => void;
58
- maxSelectedRows?: number;
59
- selectedRows?: SelectedRow[];
60
- hiddenRowCodes?: string[];
61
- viewModel?: string;
62
- columnConfigs?: FieldConfig[];
63
- summaryConfigs?: {
64
- id: string;
65
- aggFunc: "sum" | "avg" | "groupIsum" | "groupIavg";
66
- }[];
67
- subtotalXColumn?: { id: string }[];
68
- subtotalYColumn?: { id: string }[];
69
- groupIColumns?: { id: string; title: string; sourceId: string }[]; // 组间合计key
70
- doSearch?: (params: object) => void;
71
- sortColumnData?: string[];
72
- }
73
-
74
- interface QueryTableStat {
75
- queryDataCache?: Map<string, CacheData>;
76
- virtualEndPageNo?: number;
77
- dataSource?: object[];
78
- loading?: boolean;
79
- touchEnd?: boolean;
80
- total?: number;
81
- }
82
-
83
- class QueryTable extends React.PureComponent<QueryTableProps, QueryTableStat> {
84
- static defaultProps = {
85
- pageInfo: {
86
- pageNo: 1,
87
- pageSize: 10,
88
- virtualEndPageNo: undefined,
89
- },
90
- tableProps: {
91
- size: "small",
92
- clickDisplayTotal: false,
93
- scrollY: 500,
94
- },
95
- hiddenRowCodes: [],
96
- selectedRows: [],
97
- viewModels: ["table"],
98
- summaryConfigs: [],
99
- };
100
-
101
- state = {
102
- queryDataCache: undefined,
103
- virtualEndPageNo: undefined,
104
- dataSource: undefined,
105
- loading: true,
106
- touchEnd: undefined,
107
- total: undefined,
108
- };
109
-
110
- static contextType = LocaleContext;
111
- context: React.ContextType<typeof LocaleContext>;
112
-
113
- async componentDidMount() {
114
- const { queryKey, pageInfo } = this.props;
115
- // let pageInfo = {
116
- // pageNo: 1,
117
- // pageSize: defaultPageSize ? defaultPageSize : 10,
118
- // virtualEndPageNo: undefined,
119
- // }
120
- if (queryKey) {
121
- await this.loadData(queryKey.key, pageInfo);
122
- }
123
- }
124
-
125
- componentWillUnmount() {
126
- this.setState = () => false;
127
- }
128
-
129
- async componentDidUpdate(prevProps) {
130
- const { queryKey: preQueryKey, pageInfo: prePageInfo } = prevProps;
131
- const { queryKey, pageInfo } = this.props;
132
- const { total } = this.state;
133
- if (queryKey) {
134
- if (preQueryKey?.key != queryKey.key) {
135
- await this.loadData(queryKey.key, pageInfo, true);
136
- } else if (
137
- prePageInfo?.pageNo != pageInfo.pageNo ||
138
- prePageInfo?.pageSize != pageInfo.pageSize
139
- ) {
140
- await this.loadData(queryKey.key, pageInfo, false);
141
- }
142
- }
143
- }
144
-
145
- DraggableContainer = (props) => (
146
- <SortableBody
147
- useDragHandle
148
- disableAutoscroll
149
- helperClass="row-dragging"
150
- onSortEnd={this.onSortEnd}
151
- {...props}
152
- />
153
- );
154
-
155
- DraggableBodyRow = ({ className, style, ...restProps }) => {
156
- const { dataSource } = this.state;
157
- if (dataSource) {
158
- const index = dataSource.findIndex(
159
- (x) => x.key === restProps["data-row-key"]
160
- );
161
- return <SortableItem key={index} index={index} {...restProps} />;
162
- } else {
163
- return <></>;
164
- }
165
- };
166
-
167
- onSortEnd = ({ oldIndex, newIndex }) => {
168
- const { dataSource } = this.state;
169
- if (oldIndex !== newIndex) {
170
- const newData = arrayMoveImmutable(
171
- [].concat(dataSource),
172
- oldIndex,
173
- newIndex
174
- ).filter((el) => !!el);
175
- //console.log('Sorted items: ', newData);
176
- this.setState({ dataSource: newData });
177
- }
178
- };
179
-
180
- loadData = async (
181
- queryKey: string,
182
- pageInfo: PageInfo,
183
- cleanCache?: boolean
184
- ) => {
185
- this.setState({
186
- loading: true,
187
- });
188
- let { queryDataCache } = this.state;
189
-
190
- let { serverKey, tableProps } = this.props;
191
- let queryCache: Map<string, CacheData>;
192
- if (cleanCache || !queryDataCache) {
193
- queryCache = new Map<string, CacheData>();
194
- this.setState({ total: undefined });
195
- } else {
196
- queryCache = queryDataCache;
197
- }
198
- if (queryCache.has(pageInfo?.pageNo + "_" + pageInfo?.pageSize)) {
199
- let cacheData = queryCache.get(
200
- pageInfo?.pageNo + "_" + pageInfo?.pageSize
201
- );
202
- this.setState({
203
- dataSource: cacheData.dataSource,
204
- virtualEndPageNo: cacheData.pageInfo.virtualEndPageNo,
205
- loading: false,
206
- });
207
- } else {
208
- let queryData: QueryData = await HcserviceV3.requestQueryData(
209
- serverKey,
210
- queryKey,
211
- pageInfo
212
- );
213
- if (queryData?.key != this.props.queryKey?.key) {
214
- return;
215
- } else {
216
- let dataSource: object[] = [];
217
- pageInfo = queryData.pageInfo;
218
- if (queryData.entities) {
219
- queryData.entities.forEach((item, index) => {
220
- let row = {
221
- key: item.code,
222
- code: item.code, //增加code,为了删除操作
223
- ...item.fieldMap,
224
- index,
225
- };
226
- dataSource.push(row);
227
- });
228
- }
229
-
230
- let touchEnd = queryData.touchEnd;
231
- //缓存数据
232
- queryCache.set(pageInfo?.pageNo + "_" + pageInfo?.pageSize, {
233
- dataSource,
234
- pageInfo,
235
- });
236
- this.setState({
237
- dataSource,
238
- virtualEndPageNo: pageInfo.virtualEndPageNo,
239
- queryDataCache: queryCache,
240
- touchEnd,
241
- loading: false,
242
- });
243
-
244
- if (!tableProps.clickDisplayTotal) {
245
- await this.queryTotal();
246
- }
247
- }
248
- // }
249
- }
250
- };
251
-
252
- pageTo = async (pageNo: number, pageSize: number) => {
253
- const { onChangePage } = this.props;
254
- const { virtualEndPageNo } = this.state;
255
- let pageInfo = {
256
- pageNo,
257
- pageSize: pageSize ? pageSize : 10,
258
- virtualEndPageNo,
259
- };
260
- const { queryKey } = this.props;
261
- await this.loadData(queryKey.key, pageInfo);
262
- onChangePage(pageNo, pageSize);
263
- };
264
-
265
- queryTotal = async () => {
266
- const { queryKey, serverKey } = this.props;
267
- let total = await HcserviceV3.requestQueryCount(serverKey, queryKey.key);
268
- this.setState({
269
- total,
270
- });
271
- };
272
-
273
- getRowSelection = () => {
274
- const {
275
- columns,
276
- onChangeRowSelection,
277
- selectedRows,
278
- maxSelectedRows,
279
- primaryColumn,
280
- } = this.props;
281
- let { dataSource } = this.state;
282
- let selectedRowKeys = [];
283
-
284
- for (let row of selectedRows) {
285
- selectedRowKeys.push(row.code);
286
- }
287
- const allRowKeys: string[] = [];
288
- if (dataSource) {
289
- for (let d of dataSource) {
290
- allRowKeys.push(d.code);
291
- }
292
- }
293
- if (maxSelectedRows == -1) {
294
- return null;
295
- }
296
- const rowSelection: TableRowSelection<any> = {
297
- fixed: true,
298
- type: maxSelectedRows == 1 ? "radio" : "checkbox",
299
- selectedRowKeys,
300
- onChange: (selectedRowKeys, selectedRows) => {
301
- //console.log('selectedRowKeys:', selectedRowKeys);
302
- // console.log('selectedRows:', selectedRows);
303
- let selectedRows_: SelectedRow[] = [];
304
- let selectedDatas: DtmplData[] = [];
305
- let titleColId = primaryColumn?.id;
306
- if (!titleColId) {
307
- columns.forEach((col) => {
308
- if (col.title != "序号" && titleColId == null) {
309
- titleColId = col.dataIndex;
310
- return;
311
- }
312
- });
313
- }
314
- selectedRows.forEach((item) => {
315
- selectedRows_.push({ code: item["code"], title: item[titleColId] });
316
- selectedDatas.push(item);
317
- });
318
- if (onChangeRowSelection) {
319
- onChangeRowSelection(selectedRows_, selectedDatas, allRowKeys);
320
- }
321
- },
322
- };
323
- return rowSelection;
324
- };
325
-
326
- getUnHidenDataSource = () => {
327
- const { dataSource } = this.state;
328
- const { hiddenRowCodes } = this.props;
329
- let ds: object[] = [];
330
- if (dataSource) {
331
- for (let d of dataSource) {
332
- if (!hiddenRowCodes.includes(d.code)) {
333
- ds.push(d);
334
- }
335
- }
336
- }
337
- return ds;
338
- };
339
-
340
- initViewList = (data) => {
341
- //console.log("data:",data);
342
- const { translate } = this.context;
343
- const { columns, columnConfigs, serverKey } = this.props;
344
- const formItemList = [];
345
- if (columnConfigs.length > 0) {
346
- columnConfigs.forEach((item, index) => {
347
- if (item.id != "10000" && item.id != "20000" && item.title != "操作") {
348
- const title = item.title;
349
- let fieldValue = data ? data[item.id] : undefined;
350
- if (title == "序号") {
351
- fieldValue = data.index;
352
- }
353
- //fieldValue 没有值时不能为null 要为 undefined。antd input所限制
354
- fieldValue = fieldValue
355
- ? fieldValue
356
- : item.defaultValue
357
- ? item.defaultValue
358
- : undefined;
359
- const fieldKey = item.id + Math.random() * 100;
360
-
361
- const formItem = (
362
- <Descriptions.Item
363
- label={translate("${" + item.title + "}")}
364
- key={index}
365
- className="labelcss"
366
- >
367
- <ViewControl
368
- serverKey={serverKey}
369
- holderType={"table"}
370
- value={fieldValue}
371
- fieldConfig={item}
372
- />
373
- </Descriptions.Item>
374
- );
375
- formItemList.push(formItem);
376
- }
377
- });
378
- }
379
- return formItemList;
380
- };
381
-
382
- getTableSummaryNumberValue(value: "" | string[]) {
383
- if (value === undefined || value === null) return 0;
384
- if (typeof value === "string") return Number(value);
385
- return Number(value[0].split("@R@")[1]);
386
- }
387
-
388
- deepClone(source, hash = new WeakSet()) {
389
- try {
390
- if (
391
- typeof source !== "object" ||
392
- source === null ||
393
- React.isValidElement(source)
394
- ) {
395
- return source;
396
- }
397
- if (hash.has(source)) {
398
- return source;
399
- }
400
-
401
- hash.add(source);
402
- const target = Array.isArray(source) ? [] : {};
403
- Reflect.ownKeys(source).forEach((key) => {
404
- const val = source[key];
405
- if (typeof val === "object" && val != null) {
406
- target[key] = this.deepClone(val, hash);
407
- } else {
408
- target[key] = val;
409
- }
410
- });
411
- return target;
412
- } catch (err) {
413
- console.log("deepclone err", err, source);
414
- }
415
- }
416
-
417
- buildKeys(keys: { title: string; dataKey: string }[]) {
418
- return keys.map((i) => i.title).join("-");
419
- }
420
-
421
- buildColTag(cols, keys = []) {
422
- for (const col of cols) {
423
- if (!col.children) {
424
- col.dataIndex = this.buildKeys([
425
- ...keys,
426
- { dataKey: col._type ? col._type : col.title, title: col.title },
427
- ]);
428
- if (col.keys === undefined)
429
- col.keys = [
430
- ...keys,
431
- { dataKey: col._type ? col._type : col.title, title: col.title },
432
- ];
433
- } else {
434
- this.buildColTag(col.children, [
435
- ...keys,
436
- { dataKey: col._type ? col._type : col.title, title: col.title },
437
- ]);
438
- }
439
- }
440
- }
441
-
442
- getCurCalKeys(cols, keys = []) {
443
- for (const col of cols) {
444
- if (Array.isArray(col.children)) {
445
- this.getCurCalKeys(col.children, keys);
446
- } else {
447
- keys.push({
448
- factIndex: col.keys[col.keys.length - 1],
449
- dataIndex: col.dataIndex,
450
- });
451
- }
452
- }
453
-
454
- return keys;
455
- }
456
-
457
- setSumColKeys(sumCol, sumKeys) {
458
- if (sumKeys.length === 0) return;
459
- if (Array.isArray(sumCol.children)) {
460
- this.setSumColKeys(sumCol.children, sumKeys);
461
- } else {
462
- for (const col of sumCol) {
463
- const factKey = col.keys[col.keys.length - 1].dataKey;
464
- col.sumDataIndex = sumKeys.filter(
465
- ({ factIndex: { dataKey } }) => dataKey === factKey
466
- );
467
- col.keys[col.keys.length - 1].sumDataIndex = col.sumDataIndex.map(
468
- ({ dataIndex }) => dataIndex
469
- );
470
- }
471
- }
472
- }
473
-
474
- handleProSummaryTable(data: any[]) {
475
- const isProSumarryTable = Boolean(
476
- this.props.subtotalXColumn || this.props.subtotalYColumn
477
- );
478
- if (!isProSumarryTable)
479
- return { proSummaryTableColumns: [], proSummaryTableData: [] };
480
-
481
- const { translate } = this.context;
482
-
483
- const { subtotalXColumn, subtotalYColumn, columns: _columns } = this.props;
484
- const columns = _columns;
485
-
486
- for (const column of columns) {
487
- delete column["sorter"];
488
- }
489
-
490
- for (const d of data) {
491
- for (const [k, v] of Object.entries(d)) {
492
- if (v == null || v == "null") {
493
- d[k] = "";
494
- } else if (typeof v === "string" && (v as string)?.includes("@R@")) {
495
- d[k] = (v as string).split("@R@")[1];
496
- }
497
- }
498
- }
499
-
500
- console.log("data", data);
501
- console.log("columns", columns);
502
-
503
- const colMp = {
504
- dimension: [],
505
- fact: [],
506
- others: [
507
- {
508
- dataIndex: "orderInGroup",
509
- title: "orderInGroup",
510
- },
511
- ],
512
- };
513
- const colIdToNameMp = {};
514
- const colNameToIdMp = {};
515
- for (const col of columns) {
516
- colIdToNameMp[col["dataIndex"]] = col["title"];
517
- colNameToIdMp[col["title"]] = col["dataIndex"];
518
- if (col.statColType !== undefined) {
519
- colMp[col.statColType].push(this.deepClone(col));
520
- } else {
521
- if (col.title !== "序号") colMp["others"].push(this.deepClone(col));
522
- }
523
- }
524
- console.log("colIdToNameMp", colIdToNameMp);
525
- console.log("colNameToIdMp", colNameToIdMp);
526
- console.log("colMp", colMp);
527
-
528
- // canReadData
529
- const canReadData = [];
530
- let order = 0;
531
- for (const d of data) {
532
- const item = {};
533
- for (const [k, v] of Object.entries(d)) {
534
- let _v = v;
535
- if (
536
- colMp.fact.findIndex(({ dataIndex }) => dataIndex === k) > -1 &&
537
- v === null
538
- )
539
- _v = 0;
540
- item[colIdToNameMp[k]] = _v;
541
- }
542
- canReadData.push({ ...item, orderInGroup: order++ });
543
- }
544
- console.log("canReadData", canReadData);
545
-
546
- let proSummaryTableColumns = [
547
- ...this.deepClone(colMp.dimension),
548
- ...this.deepClone(colMp.others),
549
- ],
550
- proSummaryTableData = [],
551
- excludeGroupSumData = [];
552
- const cal = colMp.fact[0]?.cal;
553
- const calTxt = cal === "sum" ? translate("小计") : translate("均值");
554
- const calMp = {};
555
- colMp.fact.forEach(({ title, cal }) => (calMp[title] = cal));
556
-
557
- // 计算列
558
- if (
559
- subtotalYColumn &&
560
- Array.isArray(subtotalYColumn) &&
561
- subtotalYColumn.length
562
- ) {
563
- // col
564
- let tnodes = [];
565
-
566
- for (let i = 0; i < subtotalYColumn.length; i++) {
567
- const y = subtotalYColumn[i];
568
- const id = y.id;
569
- const mp = {};
570
- let _tnodes = [];
571
- for (const d of data) mp[d[id]] = colIdToNameMp[id];
572
- for (const [k, v] of Object.entries(mp)) {
573
- const tnode = {
574
- title: k,
575
- _type: v,
576
- children: [...this.deepClone(i === 0 ? colMp.fact : tnodes)],
577
- };
578
- _tnodes.push(tnode);
579
- }
580
-
581
- this.buildColTag(_tnodes);
582
- console.log("_tnodes", JSON.parse(JSON.stringify(_tnodes)));
583
-
584
- const sumCol = {
585
- title: calTxt,
586
- children: [...this.deepClone(colMp.fact)],
587
- TYPE: cal,
588
- };
589
- this.buildColTag([sumCol]);
590
- this.setSumColKeys(sumCol, this.getCurCalKeys(_tnodes));
591
- _tnodes.unshift(sumCol);
592
-
593
- tnodes = _tnodes;
594
- proSummaryTableColumns.splice(
595
- proSummaryTableColumns.findIndex((item) => item.dataIndex === id),
596
- 1
597
- );
598
- }
599
- proSummaryTableColumns.push(...tnodes);
600
- } else {
601
- proSummaryTableColumns.push(...colMp.fact);
602
- }
603
-
604
- // buildData
605
- this.buildColTag(proSummaryTableColumns);
606
-
607
- // 处理行
608
- const rowMp = {};
609
- const rowKey = [];
610
- for (const col of proSummaryTableColumns) {
611
- if (Array.isArray(col.keys) && col.keys.length === 1) rowKey.push(col);
612
- }
613
- console.log("rowKey", rowKey);
614
-
615
- for (const d of canReadData) {
616
- let t: any = rowMp;
617
- for (let i = 0; i < rowKey.length; i++) {
618
- const key = rowKey[i].title;
619
- if (t[d[key]] === undefined) {
620
- if (i !== rowKey.length - 1) t[d[key]] = {};
621
- else t[d[key]] = [];
622
- }
623
- t = t[d[key]];
624
- }
625
- if (Array.isArray(t)) t.push(d);
626
- }
627
-
628
- // 行数据处理完毕
629
- console.log("rowMp", rowMp);
630
-
631
- // 处理列
632
- const colKey = [];
633
- const colKeyTitle = this.flatSummaryCol(proSummaryTableColumns);
634
- for (const col of proSummaryTableColumns) {
635
- if (
636
- (col.statColType === "fact" || Array.isArray(col.children)) &&
637
- col.TYPE === undefined
638
- ) {
639
- colKey.push(col);
640
- }
641
- }
642
- const flatSummaryColTitle = this.flatSummaryCol(colKey);
643
- const flatSummaryRowTitle = this.flatSummaryCol(rowKey);
644
- const flatSummaryCalTitle = this.flatSummaryCol(
645
- proSummaryTableColumns.filter(({ TYPE }) => TYPE !== undefined)
646
- );
647
- console.log("colKey", colKey);
648
- console.log("colKeyTitle", colKeyTitle);
649
- console.log("flatSummaryColTitle", flatSummaryColTitle);
650
- console.log("flatSummaryRowTitle", flatSummaryRowTitle);
651
- console.log("flatSummaryCalTitle", flatSummaryCalTitle);
652
-
653
- proSummaryTableData = this.handleColData(
654
- rowMp,
655
- flatSummaryRowTitle,
656
- flatSummaryColTitle,
657
- flatSummaryCalTitle,
658
- cal
659
- );
660
-
661
- excludeGroupSumData = this.deepClone(proSummaryTableData);
662
- console.log("excludeGroupSumData", excludeGroupSumData);
663
-
664
- if (
665
- subtotalXColumn &&
666
- Array.isArray(subtotalXColumn) &&
667
- subtotalXColumn.length
668
- ) {
669
- const sortKeys = subtotalXColumn.map(({ id }) => colIdToNameMp[id]);
670
-
671
- const rowSumMp = this.buildRowMp(proSummaryTableData, sortKeys);
672
- console.log("rowSumMp", rowSumMp);
673
-
674
- const calRowKeys = [
675
- ...flatSummaryCalTitle,
676
- ...flatSummaryColTitle,
677
- ].map((i) => this.buildKeys(i));
678
- console.log("calRowKeys", calRowKeys);
679
-
680
- proSummaryTableData = this.handleRowData(
681
- rowSumMp,
682
- calRowKeys,
683
- calMp,
684
- calTxt,
685
- sortKeys[0]
686
- );
687
- }
688
-
689
- // 序号
690
- if (columns[0].title === "序号") {
691
- const col: any = {
692
- dataIndex: "序号",
693
- title: "序号",
694
- width: 160,
695
- order: -1,
696
- };
697
- if (columns[0].colWidth) {
698
- col.width = columns[0].colWidth;
699
- }
700
- proSummaryTableColumns.unshift(col);
701
- proSummaryTableData.forEach((_, idx) => {
702
- _["序号"] = idx + 1;
703
- });
704
- }
705
-
706
- // 做总计
707
- if (
708
- this.props.summaryConfigs &&
709
- this.props.summaryConfigs?.length !== 0 &&
710
- flatSummaryRowTitle.length &&
711
- proSummaryTableData.length
712
- ) {
713
- const calkeys = [
714
- ...flatSummaryCalTitle,
715
- ...flatSummaryColTitle,
716
- ].map((i) => this.buildKeys(i));
717
-
718
- const sumData = {
719
- [proSummaryTableColumns[0]?.dataIndex]:
720
- cal === "sum" ? translate("${合计}") : translate("${均值}"),
721
- _type: calMp,
722
- _calRange: "all",
723
- };
724
-
725
- for (const key of calkeys) {
726
- if (cal === "sum")
727
- sumData[key] = excludeGroupSumData.reduce(
728
- (last, d) => last.plus(BigNumber(d[key])),
729
- BigNumber(0)
730
- );
731
- if (cal === "avg")
732
- sumData[key] = excludeGroupSumData.reduce(
733
- (last, d) =>
734
- last.plus(BigNumber(d[key]).div(excludeGroupSumData.length)),
735
- BigNumber(0)
736
- );
737
-
738
- const hash = (...args) => args.join("-");
739
- const hashKey = (data, keys) => hash(...keys.map((key) => data[key]));
740
- if (calMp[key] === "groupIsum") {
741
- const allKeys = this.props.groupIColumns?.map(({ title }) => title);
742
- const set = new Set();
743
-
744
- sumData[key] = excludeGroupSumData.reduce((lastNum, item) => {
745
- if (set.has(hashKey(item, allKeys))) return lastNum;
746
- set.add(hashKey(item, allKeys));
747
- return lastNum.plus(
748
- new BigNumber(this.getTableSummaryNumberValue(item[key]))
749
- );
750
- }, new BigNumber(0));
751
- }
752
-
753
- if (calMp[key] === "groupIavg") {
754
- const set = new Set();
755
- let nums = 0;
756
- const allKeys = this.props.groupIColumns?.map(({ title }) => title);
757
-
758
- data.forEach((item) => {
759
- if (set.has(hashKey(item, allKeys))) return;
760
- set.add(hashKey(item, allKeys));
761
-
762
- nums++;
763
- });
764
-
765
- set.clear();
766
-
767
- sumData[key] = excludeGroupSumData.reduce((lastNum, item) => {
768
- if (set.has(hashKey(item, allKeys))) return lastNum;
769
- set.add(hashKey(item, allKeys));
770
- return lastNum.plus(
771
- new BigNumber(this.getTableSummaryNumberValue(item[key])).div(
772
- nums
773
- )
774
- );
775
- }, new BigNumber(0));
776
- }
777
-
778
- sumData[key] = sumData[key]?.toString();
779
- }
780
- proSummaryTableData.push(sumData);
781
- }
782
-
783
- // 给小计和总计染色
784
- this.stain(proSummaryTableColumns);
785
-
786
- // 删除默认数据在组内顺序字段
787
- proSummaryTableColumns.splice(
788
- proSummaryTableColumns.findIndex(
789
- ({ dataIndex }) => dataIndex === "orderInGroup"
790
- ),
791
- 1
792
- );
793
-
794
- proSummaryTableData.forEach((item) => delete item.orderInGroup);
795
-
796
- // 排序
797
- proSummaryTableColumns = proSummaryTableColumns.sort((a, b) => {
798
- if (a.order === undefined && b.order === undefined) return 0;
799
- if (a.order === undefined) return 1;
800
- if (b.order === undefined) return -1;
801
- return a.order < b.order ? -1 : 1;
802
- });
803
-
804
- console.log("proSummaryTableColumns", proSummaryTableColumns);
805
- console.log("proSummaryTableData", proSummaryTableData);
806
-
807
- return { proSummaryTableColumns, proSummaryTableData };
808
- }
809
-
810
- flatSummaryCol(arr, res = []) {
811
- for (const i of arr) {
812
- if (!i.children) res.push(i.keys);
813
- else this.flatSummaryCol(i.children, res);
814
- }
815
-
816
- return res;
817
- }
818
-
819
- handleColData(
820
- rowMp,
821
- flatSummaryRowTitle,
822
- flatSummaryColTitle,
823
- flatSummaryCalTitle,
824
- cal,
825
- idx = 0,
826
- data = {},
827
- list = []
828
- ) {
829
- if (Array.isArray(rowMp)) {
830
- for (const col of flatSummaryColTitle) {
831
- const key = this.buildKeys(col);
832
- const colTarget = [];
833
- const preConditions = col.slice(0, col.length - 1);
834
- const targetKey = col.slice(col.length - 1)[0].title;
835
- for (const d of rowMp) {
836
- if (
837
- preConditions.every(({ dataKey, title }) => d[dataKey] === title)
838
- ) {
839
- colTarget.push(d);
840
- }
841
- }
842
-
843
- if (data[key] === undefined || data[key] == "") {
844
- data[key] = BigNumber(0);
845
- }
846
- if (cal === "sum")
847
- data[key] = colTarget.reduce(
848
- (last, d) => last.plus(BigNumber(d[targetKey])),
849
- BigNumber(0)
850
- );
851
- if (cal === "avg")
852
- data[key] = colTarget.reduce(
853
- (last, d) =>
854
- last.plus(BigNumber(d[targetKey]).div(colTarget.length)),
855
- BigNumber(0)
856
- );
857
- data[key] =
858
- data[key]?.toString() == "NaN" ? "0" : data[key]?.toString();
859
- }
860
-
861
- for (const calCol of flatSummaryCalTitle) {
862
- const key = this.buildKeys(calCol);
863
- const sumDataIndex = calCol[calCol.length - 1].sumDataIndex;
864
-
865
- if (data[key] === undefined || data[key] == "")
866
- data[key] = BigNumber(0);
867
- if (cal === "sum")
868
- data[key] = sumDataIndex.reduce(
869
- (last, dataKey) => last.plus(BigNumber(data[dataKey])),
870
- BigNumber(0)
871
- );
872
- if (cal === "avg")
873
- data[key] = sumDataIndex.reduce(
874
- (last, dataKey) =>
875
- last.plus(BigNumber(data[dataKey]).div(sumDataIndex.length)),
876
- BigNumber(0)
877
- );
878
- data[key] = data[key]?.toString();
879
- }
880
- list.push(data);
881
- } else {
882
- for (const [k, v] of Object.entries(rowMp)) {
883
- const dataKey = flatSummaryRowTitle[idx][0].dataKey;
884
- data[dataKey] = k;
885
- this.handleColData(
886
- v,
887
- flatSummaryRowTitle,
888
- flatSummaryColTitle,
889
- flatSummaryCalTitle,
890
- cal,
891
- idx + 1,
892
- this.deepClone(data),
893
- list
894
- );
895
- }
896
- }
897
-
898
- return list;
899
- }
900
-
901
- buildRowMp(data, sortKeys, idx = 0, mp = {}) {
902
- if (idx >= sortKeys.length) return data;
903
-
904
- const dataKey = sortKeys[idx];
905
-
906
- for (const d of data) {
907
- if (mp[d[dataKey]] === undefined) mp[d[dataKey]] = [];
908
- mp[d[dataKey]].push(d);
909
- }
910
-
911
- for (const [k, v] of Object.entries(mp)) {
912
- mp[k] = this.buildRowMp(v, sortKeys, idx + 1);
913
- }
914
-
915
- return mp;
916
- }
917
-
918
- handleRowData(
919
- data,
920
- calKeys,
921
- calMp: { [key: string]: string },
922
- calTxt,
923
- calTxtKey,
924
- res = []
925
- ) {
926
- for (const [k, v] of Object.entries(data)) {
927
- if (Array.isArray(v)) {
928
- const sumData = {
929
- [calTxtKey]: calTxt,
930
- _type: calMp,
931
- _calRange: "small",
932
- };
933
-
934
- for (const calKey of calKeys) {
935
- if (calMp[calKey] === "sum")
936
- sumData[calKey] = v.reduce(
937
- (last, d) => last.plus(BigNumber(d[calKey])),
938
- BigNumber(0)
939
- );
940
- if (calMp[calKey] === "avg")
941
- sumData[calKey] = v.reduce(
942
- (last, d) => last.plus(BigNumber(d[calKey]).div(v.length)),
943
- BigNumber(0)
944
- );
945
-
946
- const hash = (...args) => args.join("-");
947
- const hashKey = (data, keys) => hash(...keys.map((key) => data[key]));
948
- if (calMp[calKey] === "groupIsum") {
949
- const allKeys = this.props.groupIColumns?.map(({ title }) => title);
950
- const set = new Set();
951
-
952
- sumData[calKey] = v.reduce((lastNum, item) => {
953
- if (set.has(hashKey(item, allKeys))) return lastNum;
954
- set.add(hashKey(item, allKeys));
955
- return lastNum.plus(
956
- new BigNumber(this.getTableSummaryNumberValue(item[calKey]))
957
- );
958
- }, new BigNumber(0));
959
- }
960
-
961
- if (calMp[calKey] === "groupIavg") {
962
- const set = new Set();
963
- let nums = 0;
964
- const allKeys = this.props.groupIColumns?.map(({ title }) => title);
965
-
966
- data.forEach((item) => {
967
- if (set.has(hashKey(item, allKeys))) return;
968
- set.add(hashKey(item, allKeys));
969
-
970
- nums++;
971
- });
972
-
973
- set.clear();
974
-
975
- sumData[calKey] = v.reduce((lastNum, item) => {
976
- if (set.has(hashKey(item, allKeys))) return lastNum;
977
- set.add(hashKey(item, allKeys));
978
- return lastNum.plus(
979
- new BigNumber(
980
- this.getTableSummaryNumberValue(item[calKey])
981
- ).div(nums)
982
- );
983
- }, new BigNumber(0));
984
- }
985
-
986
- sumData[calKey] = sumData[calKey]?.toString();
987
- }
988
-
989
- v.sort((a, b) =>
990
- Number(a.orderInGroup) < Number(b.orderInGroup) ? -1 : 1
991
- );
992
- res.push(...v, sumData);
993
- } else {
994
- this.handleRowData(v, calKeys, calMp, calTxt, calTxtKey, res);
995
- }
996
- }
997
-
998
- return res;
999
- }
1000
-
1001
- stain(cols) {
1002
- for (const col of cols) {
1003
- if (Array.isArray(col.children)) {
1004
- this.stain(col.children);
1005
- } else {
1006
- col.render = function(text, record, index) {
1007
- let className = "";
1008
- if (record._type !== undefined) {
1009
- if (record._calRange === "small") className = "xiaoji";
1010
- else className = "zongji";
1011
- }
1012
- return <div className={className}>{text}</div>;
1013
- };
1014
- }
1015
- }
1016
- }
1017
-
1018
- mergeRowInCol(data, rowIdx, colIdx, mergeMp, calNum) {
1019
- const idx = rowIdx * calNum + colIdx;
1020
- // console.log(rowIdx, colIdx, mergeMp[idx]);
1021
- if (mergeMp[idx] !== undefined)
1022
- return {
1023
- rowSpan: mergeMp[idx].length,
1024
- };
1025
- return { rowSpan: 0 };
1026
- // return {};
1027
- }
1028
-
1029
- onChange(pagination, filters, sorter, extra) {
1030
- console.log("params", pagination, filters, sorter, extra);
1031
- if (extra.action === "sort") {
1032
- const extParams: Record<string, string> = {};
1033
- const sortColumnData = JSON.parse(
1034
- JSON.stringify(this.props.sortColumnData)
1035
- );
1036
-
1037
- const tgt = sortColumnData.findIndex((item) => {
1038
- const key = item.split("_")[0];
1039
-
1040
- if (key === sorter.field) return true;
1041
- return false;
1042
- });
1043
-
1044
- if (tgt !== -1) {
1045
- sortColumnData.splice(tgt, 1);
1046
- }
1047
-
1048
- if (sorter.order === "ascend") {
1049
- Object.assign(extParams, {
1050
- sortColIds: [...sortColumnData, sorter.field + "_" + "desc"],
1051
- });
1052
- } else if (sorter.order === "descend") {
1053
- Object.assign(extParams, {
1054
- sortColIds: [...sortColumnData],
1055
- });
1056
- } else {
1057
- Object.assign(extParams, {
1058
- sortColIds: [...sortColumnData, sorter.field + "_" + "asc"],
1059
- });
1060
- }
1061
- this.props.doSearch(extParams);
1062
- }
1063
- }
1064
-
1065
- render() {
1066
- const {
1067
- pageInfo,
1068
- columns,
1069
- viewModels,
1070
- summaryConfigs,
1071
- subtotalXColumn,
1072
- subtotalYColumn,
1073
- tableProps,
1074
- groupIColumns,
1075
- } = this.props;
1076
- //debugger
1077
- const { touchEnd, total, loading, virtualEndPageNo } = this.state;
1078
- const { translate } = this.context;
1079
-
1080
- const isProSumarryTable = Boolean(subtotalXColumn || subtotalYColumn);
1081
-
1082
- const {
1083
- proSummaryTableColumns,
1084
- proSummaryTableData,
1085
- } = this.handleProSummaryTable(this.getUnHidenDataSource());
1086
-
1087
- let current_cols = isProSumarryTable
1088
- ? proSummaryTableColumns
1089
- : columns
1090
- ? columns
1091
- : [];
1092
- console.log(current_cols);
1093
- let table_x = 20;
1094
- current_cols.forEach((c) => {
1095
- table_x = table_x + (c.width ? c.width : 140);
1096
- });
1097
-
1098
- const originData = isProSumarryTable
1099
- ? proSummaryTableData
1100
- : this.getUnHidenDataSource();
1101
-
1102
- console.log("%crender data: ", "color: red", originData);
1103
- console.log("%crender col: ", "color: red", current_cols);
1104
-
1105
- const washOriginData = originData.map((i, idx) => {
1106
- const data = {};
1107
-
1108
- current_cols.forEach((col) => {
1109
- data[col["dataIndex"]] = i[col["dataIndex"]];
1110
- });
1111
-
1112
- data["1"] = idx;
1113
- return data;
1114
- });
1115
-
1116
- console.log("清洗原始数据: ", washOriginData);
1117
-
1118
- // 一列中多行预处理
1119
- const dateOf2D = Array.from({ length: washOriginData.length })
1120
- .fill(0)
1121
- .map(() => Array.from({ length: current_cols.length }).fill(0));
1122
- washOriginData.forEach((row, rowIdx) => {
1123
- current_cols.forEach((col, colIdx) => {
1124
- dateOf2D[rowIdx][colIdx] = row[col["dataIndex"]];
1125
- });
1126
- });
1127
- console.log("dataOf2D: ", dateOf2D);
1128
- init(washOriginData.length * current_cols.length + 10);
1129
- for (let i = 1; i < dateOf2D.length; i++) {
1130
- let flag = false;
1131
- if (Array.isArray(groupIColumns) && groupIColumns.length > 0) {
1132
- groupIColumns.forEach(({ title, sourceId }) => {
1133
- if (
1134
- washOriginData[i][title] !== undefined &&
1135
- washOriginData[i][title] !== washOriginData[i - 1][title]
1136
- ) {
1137
- return (flag = true);
1138
- }
1139
- if (
1140
- washOriginData[i][sourceId] !== undefined &&
1141
- washOriginData[i][sourceId] !== washOriginData[i - 1][sourceId]
1142
- ) {
1143
- return (flag = true);
1144
- }
1145
- });
1146
- } else {
1147
- flag = true;
1148
- }
1149
-
1150
- for (let j = 0; j < dateOf2D[i].length; j++)
1151
- if (dateOf2D[i][j] === "小计" || dateOf2D[i][j] === "合计") flag = true;
1152
- for (let j = 0; j < dateOf2D[i - 1].length; j++)
1153
- if (dateOf2D[i - 1][j] === "小计" || dateOf2D[i - 1][j] === "合计")
1154
- flag = true;
1155
- if (flag) continue;
1156
- for (let j = 0; j < dateOf2D[i].length; j++) {
1157
- if (dateOf2D[i][j] === dateOf2D[i - 1][j])
1158
- merge(i * dateOf2D[i].length + j, (i - 1) * dateOf2D[i].length + j);
1159
- }
1160
- }
1161
- const mergeMp = statistic();
1162
- console.log("统计结果", mergeMp);
1163
-
1164
- // 给 col 添加 mergeRowInCol
1165
- current_cols.forEach(
1166
- (col, colIdx) =>
1167
- (col.onCell = (_, rowIdx) =>
1168
- this.mergeRowInCol(_, rowIdx, colIdx, mergeMp, current_cols.length))
1169
- );
1170
-
1171
- // current_cols[10].onCell = (_, rowIdx) =>
1172
- // this.mergeRowInCol(_, rowIdx, 10, mergeMp, current_cols.length);
1173
-
1174
- return (
1175
- <>
1176
- {viewModels.includes("table") ? (
1177
- <Table
1178
- size={tableProps.size ? tableProps.size : undefined}
1179
- rowSelection={this.getRowSelection()}
1180
- columns={current_cols}
1181
- dataSource={originData}
1182
- //tableLayout={'fixed'}
1183
- //sticky
1184
- scroll={
1185
- tableProps.scrollY == -1 || tableProps.scrollY == 0
1186
- ? null
1187
- : {
1188
- y: tableProps.scrollY,
1189
- x: table_x,
1190
- }
1191
- }
1192
- bordered
1193
- pagination={false}
1194
- style={{ display: columns ? "block" : "none" }}
1195
- summary={(pageData) => {
1196
- if (
1197
- !summaryConfigs ||
1198
- summaryConfigs?.length === 0 ||
1199
- pageData.length === 0
1200
- )
1201
- return <></>;
1202
-
1203
- const columns = isProSumarryTable
1204
- ? proSummaryTableColumns
1205
- : this.props.columns;
1206
-
1207
- const sumConfigs: {
1208
- sum: { value: string; id: string; columnConfig?: any }[];
1209
- avg: { value: string; id: string; columnConfig?: any }[];
1210
- } = { sum: [], avg: [] };
1211
-
1212
- if (this.getRowSelection()) {
1213
- sumConfigs["avg"].push({
1214
- value: "",
1215
- id: "",
1216
- columnConfig: { align: "center" },
1217
- });
1218
- sumConfigs["sum"].push({
1219
- value: "",
1220
- id: "",
1221
- columnConfig: { align: "center" },
1222
- });
1223
- }
1224
-
1225
- sumConfigs["sum"].push({
1226
- value: translate("${合计}"),
1227
- id: "title",
1228
- columnConfig: { align: "center" },
1229
- });
1230
- sumConfigs["avg"].push({
1231
- value: translate("${均值}"),
1232
- id: "title",
1233
- columnConfig: { align: "center" },
1234
- });
1235
-
1236
- let sumLen = 0,
1237
- avgLen = 0;
1238
-
1239
- for (let i = 0; i < columns.length; i++) {
1240
- const idx = i,
1241
- dataIndex = columns[i].dataIndex;
1242
- if (idx === 0) continue;
1243
- const sum = { value: "", id: "", columnConfig: columns[i] };
1244
- const sumConfigIdx = summaryConfigs.findIndex(
1245
- ({ id }) => id === dataIndex
1246
- );
1247
- if (sumConfigIdx === -1) {
1248
- sumConfigs["sum"].push(sum);
1249
- sumConfigs["avg"].push(sum);
1250
- continue;
1251
- }
1252
- const argFun = summaryConfigs[sumConfigIdx].aggFunc;
1253
- if (argFun === "sum")
1254
- sum.value = pageData
1255
- .reduce(
1256
- (lastNum, item) =>
1257
- lastNum.plus(
1258
- new BigNumber(
1259
- this.getTableSummaryNumberValue(item[dataIndex])
1260
- )
1261
- ),
1262
- new BigNumber(0)
1263
- )
1264
- ?.toString();
1265
- if (argFun === "avg")
1266
- sum.value = pageData
1267
- .reduce(
1268
- (lastNum, item) =>
1269
- lastNum.plus(
1270
- new BigNumber(
1271
- this.getTableSummaryNumberValue(item[dataIndex])
1272
- ).div(pageData.length)
1273
- ),
1274
- new BigNumber(0)
1275
- )
1276
- ?.toString();
1277
-
1278
- const hash = (...args) => args.join("-");
1279
- const hashKey = (data, keys) =>
1280
- hash(...keys.map((key) => data[key]));
1281
-
1282
- if (argFun === "groupIsum") {
1283
- const allKeys = groupIColumns?.map(({ id }) => id);
1284
- const set = new Set();
1285
-
1286
- sum.value = pageData
1287
- .reduce((lastNum, item) => {
1288
- if (set.has(hashKey(item, allKeys))) return lastNum;
1289
- set.add(hashKey(item, allKeys));
1290
- return lastNum.plus(
1291
- new BigNumber(
1292
- this.getTableSummaryNumberValue(item[dataIndex])
1293
- )
1294
- );
1295
- }, new BigNumber(0))
1296
- ?.toString();
1297
- }
1298
-
1299
- if (argFun === "groupIavg") {
1300
- const set = new Set();
1301
- let nums = 0;
1302
- const allKeys = groupIColumns?.map(({ id }) => id);
1303
-
1304
- pageData.forEach((item) => {
1305
- if (set.has(hashKey(item, allKeys))) return;
1306
- set.add(hashKey(item, allKeys));
1307
-
1308
- nums++;
1309
- });
1310
-
1311
- set.clear();
1312
-
1313
- sum.value = pageData
1314
- .reduce((lastNum, item) => {
1315
- if (set.has(hashKey(item, allKeys))) return lastNum;
1316
- set.add(hashKey(item, allKeys));
1317
- return lastNum.plus(
1318
- new BigNumber(
1319
- this.getTableSummaryNumberValue(item[dataIndex])
1320
- ).div(nums)
1321
- );
1322
- }, new BigNumber(0))
1323
- ?.toString();
1324
- }
1325
-
1326
- sum.id = dataIndex;
1327
- if (argFun === "avg" || argFun === "groupIavg") {
1328
- sumConfigs["avg"].push(sum);
1329
- avgLen++;
1330
- } else sumConfigs["avg"].push({ value: "", id: "" });
1331
-
1332
- if (argFun === "sum" || argFun === "groupIsum") {
1333
- sumConfigs["sum"].push(sum);
1334
- sumLen++;
1335
- } else sumConfigs["sum"].push({ value: "", id: "" });
1336
- }
1337
-
1338
- console.log("sumConfigs", sumConfigs, sumLen, avgLen);
1339
-
1340
- return (
1341
- <>
1342
- {sumLen === 0 ? (
1343
- <></>
1344
- ) : (
1345
- <Table.Summary.Row>
1346
- {sumConfigs["sum"].map(
1347
- ({ id, value, columnConfig }, idx) => (
1348
- <Table.Summary.Cell
1349
- align={columnConfig?.align}
1350
- index={idx}
1351
- className="zongji"
1352
- >
1353
- {value}
1354
- </Table.Summary.Cell>
1355
- )
1356
- )}
1357
- </Table.Summary.Row>
1358
- )}
1359
- {avgLen === 0 ? (
1360
- <></>
1361
- ) : (
1362
- <Table.Summary.Row>
1363
- {sumConfigs["avg"].map(
1364
- ({ id, value, columnConfig }, idx) => (
1365
- <Table.Summary.Cell
1366
- align={columnConfig?.align}
1367
- index={idx}
1368
- className="zongji"
1369
- >
1370
- {value}
1371
- </Table.Summary.Cell>
1372
- )
1373
- )}
1374
- </Table.Summary.Row>
1375
- )}
1376
- </>
1377
- );
1378
- }}
1379
- loading={loading}
1380
- components={{
1381
- body: {
1382
- wrapper: this.DraggableContainer,
1383
- row: this.DraggableBodyRow,
1384
- },
1385
- }}
1386
- onChange={this.onChange.bind(this)}
1387
- ></Table>
1388
- ) : (
1389
- ""
1390
- )}
1391
- <Pagination
1392
- touchEnd={touchEnd}
1393
- pageInfo={{ ...pageInfo, virtualEndPageNo }}
1394
- pageTo={this.pageTo}
1395
- queryTotal={this.queryTotal}
1396
- total={total}
1397
- />
1398
- {viewModels.includes("verticalList") ? (
1399
- <Card style={{ marginTop: "10px" }}>
1400
- <List
1401
- dataSource={this.getUnHidenDataSource()}
1402
- renderItem={(item) => (
1403
- <List.Item key={item["id"]}>
1404
- <Card size={"small"} bodyStyle={{ padding: "4px" }}>
1405
- <Descriptions column={4}>
1406
- {this.initViewList(item)}
1407
- </Descriptions>
1408
- </Card>
1409
- </List.Item>
1410
- )}
1411
- />
1412
- </Card>
1413
- ) : (
1414
- ""
1415
- )}
1416
- </>
1417
- );
1418
- }
1419
- }
1420
-
1421
- export default QueryTable;
1
+ import React from "react";
2
+ import { Card, Collapse, Descriptions, List } from "antd";
3
+ import Table from "./control-table-x-axis-wrapper";
4
+ import "./index.css";
5
+ import {
6
+ ActTableViewModel,
7
+ ColumnConfig,
8
+ DtmplData,
9
+ FieldConfig,
10
+ PageInfo,
11
+ QueryData,
12
+ QueryKey,
13
+ SelectedRow,
14
+ } from "../tmpl/interface";
15
+ import HcserviceV3 from "../tmpl/hcservice-v3";
16
+ import Pagination from "./pagination";
17
+ import { TableRowSelection } from "antd/lib/table/interface";
18
+ import { SortableContainer, SortableElement } from "react-sortable-hoc";
19
+ import { arrayMoveImmutable } from "array-move";
20
+ import ViewControl from "../controls/view-control";
21
+ import { LocaleContext } from "../locale/LocaleProvider";
22
+ import { BigNumber } from "bignumber.js";
23
+ import { init, merge, statistic } from "../utils/dsu";
24
+
25
+ const { Panel } = Collapse;
26
+ const SortableItem = SortableElement((props) => (
27
+ <tr className="sortable-item-hover" {...props} />
28
+ ));
29
+ const SortableBody = SortableContainer((props) => <tbody {...props} />);
30
+
31
+ interface CacheData {
32
+ dataSource: object[];
33
+ pageInfo: PageInfo;
34
+ }
35
+
36
+ interface QueryTableProps {
37
+ viewModels?: ActTableViewModel[];
38
+ // defaultPageSize?: number;
39
+ pageInfo: {
40
+ pageNo: number;
41
+ pageSize: number;
42
+ };
43
+ tableProps?: {
44
+ size?: "small" | "middle" | "large";
45
+ clickDisplayTotal?: boolean;
46
+ scrollY?: number;
47
+ };
48
+ primaryColumn?: ColumnConfig;
49
+ columns: any[];
50
+ serverKey?: string;
51
+ queryKey: QueryKey;
52
+ onChangePage: (pageNo: number, pageSize: number) => void;
53
+ onChangeRowSelection?: (
54
+ selectedRows: SelectedRow[],
55
+ selectedDatas: DtmplData[],
56
+ allRowKeys: string[]
57
+ ) => void;
58
+ maxSelectedRows?: number;
59
+ selectedRows?: SelectedRow[];
60
+ hiddenRowCodes?: string[];
61
+ viewModel?: string;
62
+ columnConfigs?: FieldConfig[];
63
+ summaryConfigs?: {
64
+ id: string;
65
+ aggFunc: "sum" | "avg" | "groupIsum" | "groupIavg";
66
+ }[];
67
+ subtotalXColumn?: { id: string }[];
68
+ subtotalYColumn?: { id: string }[];
69
+ groupIColumns?: { id: string; title: string; sourceId: string }[]; // 组间合计key
70
+ doSearch?: (params: object) => void;
71
+ sortColumnData?: string[];
72
+ }
73
+
74
+ interface QueryTableStat {
75
+ queryDataCache?: Map<string, CacheData>;
76
+ virtualEndPageNo?: number;
77
+ dataSource?: object[];
78
+ loading?: boolean;
79
+ touchEnd?: boolean;
80
+ total?: number;
81
+ }
82
+
83
+ class QueryTable extends React.PureComponent<QueryTableProps, QueryTableStat> {
84
+ static defaultProps = {
85
+ pageInfo: {
86
+ pageNo: 1,
87
+ pageSize: 10,
88
+ virtualEndPageNo: undefined,
89
+ },
90
+ tableProps: {
91
+ size: "small",
92
+ clickDisplayTotal: false,
93
+ scrollY: 500,
94
+ },
95
+ hiddenRowCodes: [],
96
+ selectedRows: [],
97
+ viewModels: ["table"],
98
+ summaryConfigs: [],
99
+ };
100
+
101
+ state = {
102
+ queryDataCache: undefined,
103
+ virtualEndPageNo: undefined,
104
+ dataSource: undefined,
105
+ loading: true,
106
+ touchEnd: undefined,
107
+ total: undefined,
108
+ };
109
+
110
+ static contextType = LocaleContext;
111
+ context: React.ContextType<typeof LocaleContext>;
112
+
113
+ async componentDidMount() {
114
+ const { queryKey, pageInfo } = this.props;
115
+ // let pageInfo = {
116
+ // pageNo: 1,
117
+ // pageSize: defaultPageSize ? defaultPageSize : 10,
118
+ // virtualEndPageNo: undefined,
119
+ // }
120
+ if (queryKey) {
121
+ await this.loadData(queryKey.key, pageInfo);
122
+ }
123
+ }
124
+
125
+ componentWillUnmount() {
126
+ this.setState = () => false;
127
+ }
128
+
129
+ async componentDidUpdate(prevProps) {
130
+ const { queryKey: preQueryKey, pageInfo: prePageInfo } = prevProps;
131
+ const { queryKey, pageInfo } = this.props;
132
+ const { total } = this.state;
133
+ if (queryKey) {
134
+ if (preQueryKey?.key != queryKey.key) {
135
+ await this.loadData(queryKey.key, pageInfo, true);
136
+ } else if (
137
+ prePageInfo?.pageNo != pageInfo.pageNo ||
138
+ prePageInfo?.pageSize != pageInfo.pageSize
139
+ ) {
140
+ await this.loadData(queryKey.key, pageInfo, false);
141
+ }
142
+ }
143
+ }
144
+
145
+ DraggableContainer = (props) => (
146
+ <SortableBody
147
+ useDragHandle
148
+ disableAutoscroll
149
+ helperClass="row-dragging"
150
+ onSortEnd={this.onSortEnd}
151
+ {...props}
152
+ />
153
+ );
154
+
155
+ DraggableBodyRow = ({ className, style, ...restProps }) => {
156
+ const { dataSource } = this.state;
157
+ if (dataSource) {
158
+ const index = dataSource.findIndex(
159
+ (x) => x.key === restProps["data-row-key"]
160
+ );
161
+ return <SortableItem key={index} index={index} {...restProps} />;
162
+ } else {
163
+ return <></>;
164
+ }
165
+ };
166
+
167
+ onSortEnd = ({ oldIndex, newIndex }) => {
168
+ const { dataSource } = this.state;
169
+ if (oldIndex !== newIndex) {
170
+ const newData = arrayMoveImmutable(
171
+ [].concat(dataSource),
172
+ oldIndex,
173
+ newIndex
174
+ ).filter((el) => !!el);
175
+ //console.log('Sorted items: ', newData);
176
+ this.setState({ dataSource: newData });
177
+ }
178
+ };
179
+
180
+ loadData = async (
181
+ queryKey: string,
182
+ pageInfo: PageInfo,
183
+ cleanCache?: boolean
184
+ ) => {
185
+ this.setState({
186
+ loading: true,
187
+ });
188
+ let { queryDataCache } = this.state;
189
+
190
+ let { serverKey, tableProps } = this.props;
191
+ let queryCache: Map<string, CacheData>;
192
+ if (cleanCache || !queryDataCache) {
193
+ queryCache = new Map<string, CacheData>();
194
+ this.setState({ total: undefined });
195
+ } else {
196
+ queryCache = queryDataCache;
197
+ }
198
+ if (queryCache.has(pageInfo?.pageNo + "_" + pageInfo?.pageSize)) {
199
+ let cacheData = queryCache.get(
200
+ pageInfo?.pageNo + "_" + pageInfo?.pageSize
201
+ );
202
+ this.setState({
203
+ dataSource: cacheData.dataSource,
204
+ virtualEndPageNo: cacheData.pageInfo.virtualEndPageNo,
205
+ loading: false,
206
+ });
207
+ } else {
208
+ let queryData: QueryData = await HcserviceV3.requestQueryData(
209
+ serverKey,
210
+ queryKey,
211
+ pageInfo
212
+ );
213
+ if (queryData?.key != this.props.queryKey?.key) {
214
+ return;
215
+ } else {
216
+ let dataSource: object[] = [];
217
+ pageInfo = queryData.pageInfo;
218
+ if (queryData.entities) {
219
+ queryData.entities.forEach((item, index) => {
220
+ let row = {
221
+ key: item.code,
222
+ code: item.code, //增加code,为了删除操作
223
+ ...item.fieldMap,
224
+ index,
225
+ };
226
+ dataSource.push(row);
227
+ });
228
+ }
229
+
230
+ let touchEnd = queryData.touchEnd;
231
+ //缓存数据
232
+ queryCache.set(pageInfo?.pageNo + "_" + pageInfo?.pageSize, {
233
+ dataSource,
234
+ pageInfo,
235
+ });
236
+ this.setState({
237
+ dataSource,
238
+ virtualEndPageNo: pageInfo.virtualEndPageNo,
239
+ queryDataCache: queryCache,
240
+ touchEnd,
241
+ loading: false,
242
+ });
243
+
244
+ if (!tableProps.clickDisplayTotal) {
245
+ await this.queryTotal();
246
+ }
247
+ }
248
+ // }
249
+ }
250
+ };
251
+
252
+ pageTo = async (pageNo: number, pageSize: number) => {
253
+ const { onChangePage } = this.props;
254
+ const { virtualEndPageNo } = this.state;
255
+ let pageInfo = {
256
+ pageNo,
257
+ pageSize: pageSize ? pageSize : 10,
258
+ virtualEndPageNo,
259
+ };
260
+ const { queryKey } = this.props;
261
+ await this.loadData(queryKey.key, pageInfo);
262
+ onChangePage(pageNo, pageSize);
263
+ };
264
+
265
+ queryTotal = async () => {
266
+ const { queryKey, serverKey } = this.props;
267
+ let total = await HcserviceV3.requestQueryCount(serverKey, queryKey.key);
268
+ this.setState({
269
+ total,
270
+ });
271
+ };
272
+
273
+ getRowSelection = () => {
274
+ const {
275
+ columns,
276
+ onChangeRowSelection,
277
+ selectedRows,
278
+ maxSelectedRows,
279
+ primaryColumn,
280
+ } = this.props;
281
+ let { dataSource } = this.state;
282
+ let selectedRowKeys = [];
283
+
284
+ for (let row of selectedRows) {
285
+ selectedRowKeys.push(row.code);
286
+ }
287
+ const allRowKeys: string[] = [];
288
+ if (dataSource) {
289
+ for (let d of dataSource) {
290
+ allRowKeys.push(d.code);
291
+ }
292
+ }
293
+ if (maxSelectedRows == -1) {
294
+ return null;
295
+ }
296
+ const rowSelection: TableRowSelection<any> = {
297
+ fixed: true,
298
+ type: maxSelectedRows == 1 ? "radio" : "checkbox",
299
+ selectedRowKeys,
300
+ onChange: (selectedRowKeys, selectedRows) => {
301
+ //console.log('selectedRowKeys:', selectedRowKeys);
302
+ // console.log('selectedRows:', selectedRows);
303
+ let selectedRows_: SelectedRow[] = [];
304
+ let selectedDatas: DtmplData[] = [];
305
+ let titleColId = primaryColumn?.id;
306
+ if (!titleColId) {
307
+ columns.forEach((col) => {
308
+ if (col.title != "序号" && titleColId == null) {
309
+ titleColId = col.dataIndex;
310
+ return;
311
+ }
312
+ });
313
+ }
314
+ selectedRows.forEach((item) => {
315
+ selectedRows_.push({ code: item["code"], title: item[titleColId] });
316
+ selectedDatas.push(item);
317
+ });
318
+ if (onChangeRowSelection) {
319
+ onChangeRowSelection(selectedRows_, selectedDatas, allRowKeys);
320
+ }
321
+ },
322
+ };
323
+ return rowSelection;
324
+ };
325
+
326
+ getUnHidenDataSource = () => {
327
+ const { dataSource } = this.state;
328
+ const { hiddenRowCodes } = this.props;
329
+ let ds: object[] = [];
330
+ if (dataSource) {
331
+ for (let d of dataSource) {
332
+ if (!hiddenRowCodes.includes(d.code)) {
333
+ ds.push(d);
334
+ }
335
+ }
336
+ }
337
+ return ds;
338
+ };
339
+
340
+ initViewList = (data) => {
341
+ //console.log("data:",data);
342
+ const { translate } = this.context;
343
+ const { columns, columnConfigs, serverKey } = this.props;
344
+ const formItemList = [];
345
+ if (columnConfigs.length > 0) {
346
+ columnConfigs.forEach((item, index) => {
347
+ if (item.id != "10000" && item.id != "20000" && item.title != "操作") {
348
+ const title = item.title;
349
+ let fieldValue = data ? data[item.id] : undefined;
350
+ if (title == "序号") {
351
+ fieldValue = data.index;
352
+ }
353
+ //fieldValue 没有值时不能为null 要为 undefined。antd input所限制
354
+ fieldValue = fieldValue
355
+ ? fieldValue
356
+ : item.defaultValue
357
+ ? item.defaultValue
358
+ : undefined;
359
+ const fieldKey = item.id + Math.random() * 100;
360
+
361
+ const formItem = (
362
+ <Descriptions.Item
363
+ label={translate("${" + item.title + "}")}
364
+ key={index}
365
+ className="labelcss"
366
+ >
367
+ <ViewControl
368
+ serverKey={serverKey}
369
+ holderType={"table"}
370
+ value={fieldValue}
371
+ fieldConfig={item}
372
+ />
373
+ </Descriptions.Item>
374
+ );
375
+ formItemList.push(formItem);
376
+ }
377
+ });
378
+ }
379
+ return formItemList;
380
+ };
381
+
382
+ getTableSummaryNumberValue(value: "" | string[]) {
383
+ if (value === undefined || value === null) return 0;
384
+ if (typeof value === "string") return Number(value);
385
+ return Number(value[0].split("@R@")[1]);
386
+ }
387
+
388
+ deepClone(source, hash = new WeakSet()) {
389
+ try {
390
+ if (
391
+ typeof source !== "object" ||
392
+ source === null ||
393
+ React.isValidElement(source)
394
+ ) {
395
+ return source;
396
+ }
397
+ if (hash.has(source)) {
398
+ return source;
399
+ }
400
+
401
+ hash.add(source);
402
+ const target = Array.isArray(source) ? [] : {};
403
+ Reflect.ownKeys(source).forEach((key) => {
404
+ const val = source[key];
405
+ if (typeof val === "object" && val != null) {
406
+ target[key] = this.deepClone(val, hash);
407
+ } else {
408
+ target[key] = val;
409
+ }
410
+ });
411
+ return target;
412
+ } catch (err) {
413
+ console.log("deepclone err", err, source);
414
+ }
415
+ }
416
+
417
+ buildKeys(keys: { title: string; dataKey: string }[]) {
418
+ return keys.map((i) => i.title).join("-");
419
+ }
420
+
421
+ buildColTag(cols, keys = []) {
422
+ for (const col of cols) {
423
+ if (!col.children) {
424
+ col.dataIndex = this.buildKeys([
425
+ ...keys,
426
+ { dataKey: col._type ? col._type : col.title, title: col.title },
427
+ ]);
428
+ if (col.keys === undefined)
429
+ col.keys = [
430
+ ...keys,
431
+ { dataKey: col._type ? col._type : col.title, title: col.title },
432
+ ];
433
+ } else {
434
+ this.buildColTag(col.children, [
435
+ ...keys,
436
+ { dataKey: col._type ? col._type : col.title, title: col.title },
437
+ ]);
438
+ }
439
+ }
440
+ }
441
+
442
+ getCurCalKeys(cols, keys = []) {
443
+ for (const col of cols) {
444
+ if (Array.isArray(col.children)) {
445
+ this.getCurCalKeys(col.children, keys);
446
+ } else {
447
+ keys.push({
448
+ factIndex: col.keys[col.keys.length - 1],
449
+ dataIndex: col.dataIndex,
450
+ });
451
+ }
452
+ }
453
+
454
+ return keys;
455
+ }
456
+
457
+ setSumColKeys(sumCol, sumKeys) {
458
+ if (sumKeys.length === 0) return;
459
+ if (Array.isArray(sumCol.children)) {
460
+ this.setSumColKeys(sumCol.children, sumKeys);
461
+ } else {
462
+ for (const col of sumCol) {
463
+ const factKey = col.keys[col.keys.length - 1].dataKey;
464
+ col.sumDataIndex = sumKeys.filter(
465
+ ({ factIndex: { dataKey } }) => dataKey === factKey
466
+ );
467
+ col.keys[col.keys.length - 1].sumDataIndex = col.sumDataIndex.map(
468
+ ({ dataIndex }) => dataIndex
469
+ );
470
+ }
471
+ }
472
+ }
473
+
474
+ handleProSummaryTable(data: any[]) {
475
+ const isProSumarryTable = Boolean(
476
+ this.props.subtotalXColumn || this.props.subtotalYColumn
477
+ );
478
+ if (!isProSumarryTable)
479
+ return { proSummaryTableColumns: [], proSummaryTableData: [] };
480
+
481
+ const { translate } = this.context;
482
+
483
+ const { subtotalXColumn, subtotalYColumn, columns: _columns } = this.props;
484
+ const columns = _columns;
485
+
486
+ for (const column of columns) {
487
+ delete column["sorter"];
488
+ }
489
+
490
+ for (const d of data) {
491
+ for (const [k, v] of Object.entries(d)) {
492
+ if (v == null || v == "null") {
493
+ d[k] = "";
494
+ } else if (typeof v === "string" && (v as string)?.includes("@R@")) {
495
+ d[k] = (v as string).split("@R@")[1];
496
+ }
497
+ }
498
+ }
499
+
500
+ console.log("data", data);
501
+ console.log("columns", columns);
502
+
503
+ const colMp = {
504
+ dimension: [],
505
+ fact: [],
506
+ others: [
507
+ {
508
+ dataIndex: "orderInGroup",
509
+ title: "orderInGroup",
510
+ },
511
+ ],
512
+ };
513
+ const colIdToNameMp = {};
514
+ const colNameToIdMp = {};
515
+ for (const col of columns) {
516
+ colIdToNameMp[col["dataIndex"]] = col["title"];
517
+ colNameToIdMp[col["title"]] = col["dataIndex"];
518
+ if (col.statColType !== undefined) {
519
+ colMp[col.statColType].push(this.deepClone(col));
520
+ } else {
521
+ if (col.title !== "序号") colMp["others"].push(this.deepClone(col));
522
+ }
523
+ }
524
+ console.log("colIdToNameMp", colIdToNameMp);
525
+ console.log("colNameToIdMp", colNameToIdMp);
526
+ console.log("colMp", colMp);
527
+
528
+ // canReadData
529
+ const canReadData = [];
530
+ let order = 0;
531
+ for (const d of data) {
532
+ const item = {};
533
+ for (const [k, v] of Object.entries(d)) {
534
+ let _v = v;
535
+ if (
536
+ colMp.fact.findIndex(({ dataIndex }) => dataIndex === k) > -1 &&
537
+ v === null
538
+ )
539
+ _v = 0;
540
+ item[colIdToNameMp[k]] = _v;
541
+ }
542
+ canReadData.push({ ...item, orderInGroup: order++ });
543
+ }
544
+ console.log("canReadData", canReadData);
545
+
546
+ let proSummaryTableColumns = [
547
+ ...this.deepClone(colMp.dimension),
548
+ ...this.deepClone(colMp.others),
549
+ ],
550
+ proSummaryTableData = [],
551
+ excludeGroupSumData = [];
552
+ const cal = colMp.fact[0]?.cal;
553
+ const calTxt = cal === "sum" ? translate("小计") : translate("均值");
554
+ const calMp = {};
555
+ colMp.fact.forEach(({ title, cal }) => (calMp[title] = cal));
556
+
557
+ // 计算列
558
+ if (
559
+ subtotalYColumn &&
560
+ Array.isArray(subtotalYColumn) &&
561
+ subtotalYColumn.length
562
+ ) {
563
+ // col
564
+ let tnodes = [];
565
+
566
+ for (let i = 0; i < subtotalYColumn.length; i++) {
567
+ const y = subtotalYColumn[i];
568
+ const id = y.id;
569
+ const mp = {};
570
+ let _tnodes = [];
571
+ for (const d of data) mp[d[id]] = colIdToNameMp[id];
572
+ for (const [k, v] of Object.entries(mp)) {
573
+ const tnode = {
574
+ title: k,
575
+ _type: v,
576
+ children: [...this.deepClone(i === 0 ? colMp.fact : tnodes)],
577
+ };
578
+ _tnodes.push(tnode);
579
+ }
580
+
581
+ this.buildColTag(_tnodes);
582
+ console.log("_tnodes", JSON.parse(JSON.stringify(_tnodes)));
583
+
584
+ const sumCol = {
585
+ title: calTxt,
586
+ children: [...this.deepClone(colMp.fact)],
587
+ TYPE: cal,
588
+ };
589
+ this.buildColTag([sumCol]);
590
+ this.setSumColKeys(sumCol, this.getCurCalKeys(_tnodes));
591
+ _tnodes.unshift(sumCol);
592
+
593
+ tnodes = _tnodes;
594
+ proSummaryTableColumns.splice(
595
+ proSummaryTableColumns.findIndex((item) => item.dataIndex === id),
596
+ 1
597
+ );
598
+ }
599
+ proSummaryTableColumns.push(...tnodes);
600
+ } else {
601
+ proSummaryTableColumns.push(...colMp.fact);
602
+ }
603
+
604
+ // buildData
605
+ this.buildColTag(proSummaryTableColumns);
606
+
607
+ // 处理行
608
+ const rowMp = {};
609
+ const rowKey = [];
610
+ for (const col of proSummaryTableColumns) {
611
+ if (Array.isArray(col.keys) && col.keys.length === 1) rowKey.push(col);
612
+ }
613
+ console.log("rowKey", rowKey);
614
+
615
+ for (const d of canReadData) {
616
+ let t: any = rowMp;
617
+ for (let i = 0; i < rowKey.length; i++) {
618
+ const key = rowKey[i].title;
619
+ if (t[d[key]] === undefined) {
620
+ if (i !== rowKey.length - 1) t[d[key]] = {};
621
+ else t[d[key]] = [];
622
+ }
623
+ t = t[d[key]];
624
+ }
625
+ if (Array.isArray(t)) t.push(d);
626
+ }
627
+
628
+ // 行数据处理完毕
629
+ console.log("rowMp", rowMp);
630
+
631
+ // 处理列
632
+ const colKey = [];
633
+ const colKeyTitle = this.flatSummaryCol(proSummaryTableColumns);
634
+ for (const col of proSummaryTableColumns) {
635
+ if (
636
+ (col.statColType === "fact" || Array.isArray(col.children)) &&
637
+ col.TYPE === undefined
638
+ ) {
639
+ colKey.push(col);
640
+ }
641
+ }
642
+ const flatSummaryColTitle = this.flatSummaryCol(colKey);
643
+ const flatSummaryRowTitle = this.flatSummaryCol(rowKey);
644
+ const flatSummaryCalTitle = this.flatSummaryCol(
645
+ proSummaryTableColumns.filter(({ TYPE }) => TYPE !== undefined)
646
+ );
647
+ console.log("colKey", colKey);
648
+ console.log("colKeyTitle", colKeyTitle);
649
+ console.log("flatSummaryColTitle", flatSummaryColTitle);
650
+ console.log("flatSummaryRowTitle", flatSummaryRowTitle);
651
+ console.log("flatSummaryCalTitle", flatSummaryCalTitle);
652
+
653
+ proSummaryTableData = this.handleColData(
654
+ rowMp,
655
+ flatSummaryRowTitle,
656
+ flatSummaryColTitle,
657
+ flatSummaryCalTitle,
658
+ cal
659
+ );
660
+
661
+ excludeGroupSumData = this.deepClone(proSummaryTableData);
662
+ console.log("excludeGroupSumData", excludeGroupSumData);
663
+
664
+ if (
665
+ subtotalXColumn &&
666
+ Array.isArray(subtotalXColumn) &&
667
+ subtotalXColumn.length
668
+ ) {
669
+ const sortKeys = subtotalXColumn.map(({ id }) => colIdToNameMp[id]);
670
+
671
+ const rowSumMp = this.buildRowMp(proSummaryTableData, sortKeys);
672
+ console.log("rowSumMp", rowSumMp);
673
+
674
+ const calRowKeys = [
675
+ ...flatSummaryCalTitle,
676
+ ...flatSummaryColTitle,
677
+ ].map((i) => this.buildKeys(i));
678
+ console.log("calRowKeys", calRowKeys);
679
+
680
+ proSummaryTableData = this.handleRowData(
681
+ rowSumMp,
682
+ calRowKeys,
683
+ calMp,
684
+ calTxt,
685
+ sortKeys[0]
686
+ );
687
+ }
688
+
689
+ // 序号
690
+ if (columns[0].title === "序号") {
691
+ const col: any = {
692
+ dataIndex: "序号",
693
+ title: "序号",
694
+ width: 160,
695
+ order: -1,
696
+ };
697
+ if (columns[0].colWidth) {
698
+ col.width = columns[0].colWidth;
699
+ }
700
+ proSummaryTableColumns.unshift(col);
701
+ proSummaryTableData.forEach((_, idx) => {
702
+ _["序号"] = idx + 1;
703
+ });
704
+ }
705
+
706
+ // 做总计
707
+ if (
708
+ this.props.summaryConfigs &&
709
+ this.props.summaryConfigs?.length !== 0 &&
710
+ flatSummaryRowTitle.length &&
711
+ proSummaryTableData.length
712
+ ) {
713
+ const calkeys = [
714
+ ...flatSummaryCalTitle,
715
+ ...flatSummaryColTitle,
716
+ ].map((i) => this.buildKeys(i));
717
+
718
+ const sumData = {
719
+ [proSummaryTableColumns[0]?.dataIndex]:
720
+ cal === "sum" ? translate("${合计}") : translate("${均值}"),
721
+ _type: calMp,
722
+ _calRange: "all",
723
+ };
724
+
725
+ for (const key of calkeys) {
726
+ if (cal === "sum")
727
+ sumData[key] = excludeGroupSumData.reduce(
728
+ (last, d) => last.plus(BigNumber(d[key])),
729
+ BigNumber(0)
730
+ );
731
+ if (cal === "avg")
732
+ sumData[key] = excludeGroupSumData.reduce(
733
+ (last, d) =>
734
+ last.plus(BigNumber(d[key]).div(excludeGroupSumData.length)),
735
+ BigNumber(0)
736
+ );
737
+
738
+ const hash = (...args) => args.join("-");
739
+ const hashKey = (data, keys) => hash(...keys.map((key) => data[key]));
740
+ if (calMp[key] === "groupIsum") {
741
+ const allKeys = this.props.groupIColumns?.map(({ title }) => title);
742
+ const set = new Set();
743
+
744
+ sumData[key] = excludeGroupSumData.reduce((lastNum, item) => {
745
+ if (set.has(hashKey(item, allKeys))) return lastNum;
746
+ set.add(hashKey(item, allKeys));
747
+ return lastNum.plus(
748
+ new BigNumber(this.getTableSummaryNumberValue(item[key]))
749
+ );
750
+ }, new BigNumber(0));
751
+ }
752
+
753
+ if (calMp[key] === "groupIavg") {
754
+ const set = new Set();
755
+ let nums = 0;
756
+ const allKeys = this.props.groupIColumns?.map(({ title }) => title);
757
+
758
+ data.forEach((item) => {
759
+ if (set.has(hashKey(item, allKeys))) return;
760
+ set.add(hashKey(item, allKeys));
761
+
762
+ nums++;
763
+ });
764
+
765
+ set.clear();
766
+
767
+ sumData[key] = excludeGroupSumData.reduce((lastNum, item) => {
768
+ if (set.has(hashKey(item, allKeys))) return lastNum;
769
+ set.add(hashKey(item, allKeys));
770
+ return lastNum.plus(
771
+ new BigNumber(this.getTableSummaryNumberValue(item[key])).div(
772
+ nums
773
+ )
774
+ );
775
+ }, new BigNumber(0));
776
+ }
777
+
778
+ sumData[key] = sumData[key]?.toString();
779
+ }
780
+ proSummaryTableData.push(sumData);
781
+ }
782
+
783
+ // 给小计和总计染色
784
+ this.stain(proSummaryTableColumns);
785
+
786
+ // 删除默认数据在组内顺序字段
787
+ proSummaryTableColumns.splice(
788
+ proSummaryTableColumns.findIndex(
789
+ ({ dataIndex }) => dataIndex === "orderInGroup"
790
+ ),
791
+ 1
792
+ );
793
+
794
+ proSummaryTableData.forEach((item) => delete item.orderInGroup);
795
+
796
+ // 排序
797
+ proSummaryTableColumns = proSummaryTableColumns.sort((a, b) => {
798
+ if (a.order === undefined && b.order === undefined) return 0;
799
+ if (a.order === undefined) return 1;
800
+ if (b.order === undefined) return -1;
801
+ return a.order < b.order ? -1 : 1;
802
+ });
803
+
804
+ console.log("proSummaryTableColumns", proSummaryTableColumns);
805
+ console.log("proSummaryTableData", proSummaryTableData);
806
+
807
+ return { proSummaryTableColumns, proSummaryTableData };
808
+ }
809
+
810
+ flatSummaryCol(arr, res = []) {
811
+ for (const i of arr) {
812
+ if (!i.children) res.push(i.keys);
813
+ else this.flatSummaryCol(i.children, res);
814
+ }
815
+
816
+ return res;
817
+ }
818
+
819
+ handleColData(
820
+ rowMp,
821
+ flatSummaryRowTitle,
822
+ flatSummaryColTitle,
823
+ flatSummaryCalTitle,
824
+ cal,
825
+ idx = 0,
826
+ data = {},
827
+ list = []
828
+ ) {
829
+ if (Array.isArray(rowMp)) {
830
+ for (const col of flatSummaryColTitle) {
831
+ const key = this.buildKeys(col);
832
+ const colTarget = [];
833
+ const preConditions = col.slice(0, col.length - 1);
834
+ const targetKey = col.slice(col.length - 1)[0].title;
835
+ for (const d of rowMp) {
836
+ if (
837
+ preConditions.every(({ dataKey, title }) => d[dataKey] === title)
838
+ ) {
839
+ colTarget.push(d);
840
+ }
841
+ }
842
+
843
+ if (data[key] === undefined || data[key] == "") {
844
+ data[key] = BigNumber(0);
845
+ }
846
+ if (cal === "sum")
847
+ data[key] = colTarget.reduce(
848
+ (last, d) => last.plus(BigNumber(d[targetKey])),
849
+ BigNumber(0)
850
+ );
851
+ if (cal === "avg")
852
+ data[key] = colTarget.reduce(
853
+ (last, d) =>
854
+ last.plus(BigNumber(d[targetKey]).div(colTarget.length)),
855
+ BigNumber(0)
856
+ );
857
+ data[key] =
858
+ data[key]?.toString() == "NaN" ? "0" : data[key]?.toString();
859
+ }
860
+
861
+ for (const calCol of flatSummaryCalTitle) {
862
+ const key = this.buildKeys(calCol);
863
+ const sumDataIndex = calCol[calCol.length - 1].sumDataIndex;
864
+
865
+ if (data[key] === undefined || data[key] == "")
866
+ data[key] = BigNumber(0);
867
+ if (cal === "sum")
868
+ data[key] = sumDataIndex.reduce(
869
+ (last, dataKey) => last.plus(BigNumber(data[dataKey])),
870
+ BigNumber(0)
871
+ );
872
+ if (cal === "avg")
873
+ data[key] = sumDataIndex.reduce(
874
+ (last, dataKey) =>
875
+ last.plus(BigNumber(data[dataKey]).div(sumDataIndex.length)),
876
+ BigNumber(0)
877
+ );
878
+ data[key] = data[key]?.toString();
879
+ }
880
+ list.push(data);
881
+ } else {
882
+ for (const [k, v] of Object.entries(rowMp)) {
883
+ const dataKey = flatSummaryRowTitle[idx][0].dataKey;
884
+ data[dataKey] = k;
885
+ this.handleColData(
886
+ v,
887
+ flatSummaryRowTitle,
888
+ flatSummaryColTitle,
889
+ flatSummaryCalTitle,
890
+ cal,
891
+ idx + 1,
892
+ this.deepClone(data),
893
+ list
894
+ );
895
+ }
896
+ }
897
+
898
+ return list;
899
+ }
900
+
901
+ buildRowMp(data, sortKeys, idx = 0, mp = {}) {
902
+ if (idx >= sortKeys.length) return data;
903
+
904
+ const dataKey = sortKeys[idx];
905
+
906
+ for (const d of data) {
907
+ if (mp[d[dataKey]] === undefined) mp[d[dataKey]] = [];
908
+ mp[d[dataKey]].push(d);
909
+ }
910
+
911
+ for (const [k, v] of Object.entries(mp)) {
912
+ mp[k] = this.buildRowMp(v, sortKeys, idx + 1);
913
+ }
914
+
915
+ return mp;
916
+ }
917
+
918
+ handleRowData(
919
+ data,
920
+ calKeys,
921
+ calMp: { [key: string]: string },
922
+ calTxt,
923
+ calTxtKey,
924
+ res = []
925
+ ) {
926
+ for (const [k, v] of Object.entries(data)) {
927
+ if (Array.isArray(v)) {
928
+ const sumData = {
929
+ [calTxtKey]: calTxt,
930
+ _type: calMp,
931
+ _calRange: "small",
932
+ };
933
+
934
+ for (const calKey of calKeys) {
935
+ if (calMp[calKey] === "sum")
936
+ sumData[calKey] = v.reduce(
937
+ (last, d) => last.plus(BigNumber(d[calKey])),
938
+ BigNumber(0)
939
+ );
940
+ if (calMp[calKey] === "avg")
941
+ sumData[calKey] = v.reduce(
942
+ (last, d) => last.plus(BigNumber(d[calKey]).div(v.length)),
943
+ BigNumber(0)
944
+ );
945
+
946
+ const hash = (...args) => args.join("-");
947
+ const hashKey = (data, keys) => hash(...keys.map((key) => data[key]));
948
+ if (calMp[calKey] === "groupIsum") {
949
+ const allKeys = this.props.groupIColumns?.map(({ title }) => title);
950
+ const set = new Set();
951
+
952
+ sumData[calKey] = v.reduce((lastNum, item) => {
953
+ if (set.has(hashKey(item, allKeys))) return lastNum;
954
+ set.add(hashKey(item, allKeys));
955
+ return lastNum.plus(
956
+ new BigNumber(this.getTableSummaryNumberValue(item[calKey]))
957
+ );
958
+ }, new BigNumber(0));
959
+ }
960
+
961
+ if (calMp[calKey] === "groupIavg") {
962
+ const set = new Set();
963
+ let nums = 0;
964
+ const allKeys = this.props.groupIColumns?.map(({ title }) => title);
965
+
966
+ data.forEach((item) => {
967
+ if (set.has(hashKey(item, allKeys))) return;
968
+ set.add(hashKey(item, allKeys));
969
+
970
+ nums++;
971
+ });
972
+
973
+ set.clear();
974
+
975
+ sumData[calKey] = v.reduce((lastNum, item) => {
976
+ if (set.has(hashKey(item, allKeys))) return lastNum;
977
+ set.add(hashKey(item, allKeys));
978
+ return lastNum.plus(
979
+ new BigNumber(
980
+ this.getTableSummaryNumberValue(item[calKey])
981
+ ).div(nums)
982
+ );
983
+ }, new BigNumber(0));
984
+ }
985
+
986
+ sumData[calKey] = sumData[calKey]?.toString();
987
+ }
988
+
989
+ v.sort((a, b) =>
990
+ Number(a.orderInGroup) < Number(b.orderInGroup) ? -1 : 1
991
+ );
992
+ res.push(...v, sumData);
993
+ } else {
994
+ this.handleRowData(v, calKeys, calMp, calTxt, calTxtKey, res);
995
+ }
996
+ }
997
+
998
+ return res;
999
+ }
1000
+
1001
+ stain(cols) {
1002
+ for (const col of cols) {
1003
+ if (Array.isArray(col.children)) {
1004
+ this.stain(col.children);
1005
+ } else {
1006
+ col.render = function(text, record, index) {
1007
+ let className = "";
1008
+ if (record._type !== undefined) {
1009
+ if (record._calRange === "small") className = "xiaoji";
1010
+ else className = "zongji";
1011
+ }
1012
+ return <div className={className}>{text}</div>;
1013
+ };
1014
+ }
1015
+ }
1016
+ }
1017
+
1018
+ mergeRowInCol(data, rowIdx, colIdx, mergeMp, calNum) {
1019
+ const idx = rowIdx * calNum + colIdx;
1020
+ // console.log(rowIdx, colIdx, mergeMp[idx]);
1021
+ if (mergeMp[idx] !== undefined)
1022
+ return {
1023
+ rowSpan: mergeMp[idx].length,
1024
+ };
1025
+ return { rowSpan: 0 };
1026
+ // return {};
1027
+ }
1028
+
1029
+ onChange(pagination, filters, sorter, extra) {
1030
+ console.log("params", pagination, filters, sorter, extra);
1031
+ if (extra.action === "sort") {
1032
+ const extParams: Record<string, string> = {};
1033
+ const sortColumnData = JSON.parse(
1034
+ JSON.stringify(this.props.sortColumnData)
1035
+ );
1036
+
1037
+ const tgt = sortColumnData.findIndex((item) => {
1038
+ const key = item.split("_")[0];
1039
+
1040
+ if (key === sorter.field) return true;
1041
+ return false;
1042
+ });
1043
+
1044
+ if (tgt !== -1) {
1045
+ sortColumnData.splice(tgt, 1);
1046
+ }
1047
+
1048
+ if (sorter.order === "ascend") {
1049
+ Object.assign(extParams, {
1050
+ sortColIds: [...sortColumnData, sorter.field + "_" + "desc"],
1051
+ });
1052
+ } else if (sorter.order === "descend") {
1053
+ Object.assign(extParams, {
1054
+ sortColIds: [...sortColumnData],
1055
+ });
1056
+ } else {
1057
+ Object.assign(extParams, {
1058
+ sortColIds: [...sortColumnData, sorter.field + "_" + "asc"],
1059
+ });
1060
+ }
1061
+ this.props.doSearch(extParams);
1062
+ }
1063
+ }
1064
+
1065
+ render() {
1066
+ const {
1067
+ pageInfo,
1068
+ columns,
1069
+ viewModels,
1070
+ summaryConfigs,
1071
+ subtotalXColumn,
1072
+ subtotalYColumn,
1073
+ tableProps,
1074
+ groupIColumns,
1075
+ } = this.props;
1076
+ //debugger
1077
+ const { touchEnd, total, loading, virtualEndPageNo } = this.state;
1078
+ const { translate } = this.context;
1079
+
1080
+ const isProSumarryTable = Boolean(subtotalXColumn || subtotalYColumn);
1081
+
1082
+ const {
1083
+ proSummaryTableColumns,
1084
+ proSummaryTableData,
1085
+ } = this.handleProSummaryTable(this.getUnHidenDataSource());
1086
+
1087
+ let current_cols = isProSumarryTable
1088
+ ? proSummaryTableColumns
1089
+ : columns
1090
+ ? columns
1091
+ : [];
1092
+ console.log(current_cols);
1093
+ let table_x = 20;
1094
+ current_cols.forEach((c) => {
1095
+ table_x = table_x + (c.width ? c.width : 140);
1096
+ });
1097
+
1098
+ const originData = isProSumarryTable
1099
+ ? proSummaryTableData
1100
+ : this.getUnHidenDataSource();
1101
+
1102
+ console.log("%crender data: ", "color: red", originData);
1103
+ console.log("%crender col: ", "color: red", current_cols);
1104
+
1105
+ const washOriginData = originData.map((i, idx) => {
1106
+ const data = {};
1107
+
1108
+ current_cols.forEach((col) => {
1109
+ data[col["dataIndex"]] = i[col["dataIndex"]];
1110
+ });
1111
+
1112
+ data["1"] = idx;
1113
+ return data;
1114
+ });
1115
+
1116
+ console.log("清洗原始数据: ", washOriginData);
1117
+
1118
+ // 一列中多行预处理
1119
+ const dateOf2D = Array.from({ length: washOriginData.length })
1120
+ .fill(0)
1121
+ .map(() => Array.from({ length: current_cols.length }).fill(0));
1122
+ washOriginData.forEach((row, rowIdx) => {
1123
+ current_cols.forEach((col, colIdx) => {
1124
+ dateOf2D[rowIdx][colIdx] = row[col["dataIndex"]];
1125
+ });
1126
+ });
1127
+ console.log("dataOf2D: ", dateOf2D);
1128
+ init(washOriginData.length * current_cols.length + 10);
1129
+ for (let i = 1; i < dateOf2D.length; i++) {
1130
+ let flag = false;
1131
+ if (Array.isArray(groupIColumns) && groupIColumns.length > 0) {
1132
+ groupIColumns.forEach(({ title, sourceId }) => {
1133
+ if (
1134
+ washOriginData[i][title] !== undefined &&
1135
+ washOriginData[i][title] !== washOriginData[i - 1][title]
1136
+ ) {
1137
+ return (flag = true);
1138
+ }
1139
+ if (
1140
+ washOriginData[i][sourceId] !== undefined &&
1141
+ washOriginData[i][sourceId] !== washOriginData[i - 1][sourceId]
1142
+ ) {
1143
+ return (flag = true);
1144
+ }
1145
+ });
1146
+ } else {
1147
+ flag = true;
1148
+ }
1149
+
1150
+ for (let j = 0; j < dateOf2D[i].length; j++)
1151
+ if (dateOf2D[i][j] === "小计" || dateOf2D[i][j] === "合计") flag = true;
1152
+ for (let j = 0; j < dateOf2D[i - 1].length; j++)
1153
+ if (dateOf2D[i - 1][j] === "小计" || dateOf2D[i - 1][j] === "合计")
1154
+ flag = true;
1155
+ if (flag) continue;
1156
+ for (let j = 0; j < dateOf2D[i].length; j++) {
1157
+ if (dateOf2D[i][j] === dateOf2D[i - 1][j])
1158
+ merge(i * dateOf2D[i].length + j, (i - 1) * dateOf2D[i].length + j);
1159
+ }
1160
+ }
1161
+ const mergeMp = statistic();
1162
+ console.log("统计结果", mergeMp);
1163
+
1164
+ // 给 col 添加 mergeRowInCol
1165
+ current_cols.forEach(
1166
+ (col, colIdx) =>
1167
+ (col.onCell = (_, rowIdx) =>
1168
+ this.mergeRowInCol(_, rowIdx, colIdx, mergeMp, current_cols.length))
1169
+ );
1170
+
1171
+ // current_cols[10].onCell = (_, rowIdx) =>
1172
+ // this.mergeRowInCol(_, rowIdx, 10, mergeMp, current_cols.length);
1173
+
1174
+ return (
1175
+ <>
1176
+ {viewModels.includes("table") ? (
1177
+ <Table
1178
+ size={tableProps.size ? tableProps.size : undefined}
1179
+ rowSelection={this.getRowSelection()}
1180
+ columns={current_cols}
1181
+ dataSource={originData}
1182
+ //tableLayout={'fixed'}
1183
+ //sticky
1184
+ scroll={
1185
+ tableProps.scrollY == -1 || tableProps.scrollY == 0
1186
+ ? null
1187
+ : {
1188
+ y: tableProps.scrollY,
1189
+ x: table_x,
1190
+ }
1191
+ }
1192
+ bordered
1193
+ pagination={false}
1194
+ style={{ display: columns ? "block" : "none" }}
1195
+ summary={(pageData) => {
1196
+ if (
1197
+ !summaryConfigs ||
1198
+ summaryConfigs?.length === 0 ||
1199
+ pageData.length === 0
1200
+ )
1201
+ return <></>;
1202
+
1203
+ const columns = isProSumarryTable
1204
+ ? proSummaryTableColumns
1205
+ : this.props.columns;
1206
+
1207
+ const sumConfigs: {
1208
+ sum: { value: string; id: string; columnConfig?: any }[];
1209
+ avg: { value: string; id: string; columnConfig?: any }[];
1210
+ } = { sum: [], avg: [] };
1211
+
1212
+ if (this.getRowSelection()) {
1213
+ sumConfigs["avg"].push({
1214
+ value: "",
1215
+ id: "",
1216
+ columnConfig: { align: "center" },
1217
+ });
1218
+ sumConfigs["sum"].push({
1219
+ value: "",
1220
+ id: "",
1221
+ columnConfig: { align: "center" },
1222
+ });
1223
+ }
1224
+
1225
+ sumConfigs["sum"].push({
1226
+ value: translate("${合计}"),
1227
+ id: "title",
1228
+ columnConfig: { align: "center" },
1229
+ });
1230
+ sumConfigs["avg"].push({
1231
+ value: translate("${均值}"),
1232
+ id: "title",
1233
+ columnConfig: { align: "center" },
1234
+ });
1235
+
1236
+ let sumLen = 0,
1237
+ avgLen = 0;
1238
+
1239
+ for (let i = 0; i < columns.length; i++) {
1240
+ const idx = i,
1241
+ dataIndex = columns[i].dataIndex;
1242
+ if (idx === 0) continue;
1243
+ const sum = { value: "", id: "", columnConfig: columns[i] };
1244
+ const sumConfigIdx = summaryConfigs.findIndex(
1245
+ ({ id }) => id === dataIndex
1246
+ );
1247
+ if (sumConfigIdx === -1) {
1248
+ sumConfigs["sum"].push(sum);
1249
+ sumConfigs["avg"].push(sum);
1250
+ continue;
1251
+ }
1252
+ const argFun = summaryConfigs[sumConfigIdx].aggFunc;
1253
+ if (argFun === "sum")
1254
+ sum.value = pageData
1255
+ .reduce(
1256
+ (lastNum, item) =>
1257
+ lastNum.plus(
1258
+ new BigNumber(
1259
+ this.getTableSummaryNumberValue(item[dataIndex])
1260
+ )
1261
+ ),
1262
+ new BigNumber(0)
1263
+ )
1264
+ ?.toString();
1265
+ if (argFun === "avg")
1266
+ sum.value = pageData
1267
+ .reduce(
1268
+ (lastNum, item) =>
1269
+ lastNum.plus(
1270
+ new BigNumber(
1271
+ this.getTableSummaryNumberValue(item[dataIndex])
1272
+ ).div(pageData.length)
1273
+ ),
1274
+ new BigNumber(0)
1275
+ )
1276
+ ?.toString();
1277
+
1278
+ const hash = (...args) => args.join("-");
1279
+ const hashKey = (data, keys) =>
1280
+ hash(...keys.map((key) => data[key]));
1281
+
1282
+ if (argFun === "groupIsum") {
1283
+ const allKeys = groupIColumns?.map(({ id }) => id);
1284
+ const set = new Set();
1285
+
1286
+ sum.value = pageData
1287
+ .reduce((lastNum, item) => {
1288
+ if (set.has(hashKey(item, allKeys))) return lastNum;
1289
+ set.add(hashKey(item, allKeys));
1290
+ return lastNum.plus(
1291
+ new BigNumber(
1292
+ this.getTableSummaryNumberValue(item[dataIndex])
1293
+ )
1294
+ );
1295
+ }, new BigNumber(0))
1296
+ ?.toString();
1297
+ }
1298
+
1299
+ if (argFun === "groupIavg") {
1300
+ const set = new Set();
1301
+ let nums = 0;
1302
+ const allKeys = groupIColumns?.map(({ id }) => id);
1303
+
1304
+ pageData.forEach((item) => {
1305
+ if (set.has(hashKey(item, allKeys))) return;
1306
+ set.add(hashKey(item, allKeys));
1307
+
1308
+ nums++;
1309
+ });
1310
+
1311
+ set.clear();
1312
+
1313
+ sum.value = pageData
1314
+ .reduce((lastNum, item) => {
1315
+ if (set.has(hashKey(item, allKeys))) return lastNum;
1316
+ set.add(hashKey(item, allKeys));
1317
+ return lastNum.plus(
1318
+ new BigNumber(
1319
+ this.getTableSummaryNumberValue(item[dataIndex])
1320
+ ).div(nums)
1321
+ );
1322
+ }, new BigNumber(0))
1323
+ ?.toString();
1324
+ }
1325
+
1326
+ sum.id = dataIndex;
1327
+ if (argFun === "avg" || argFun === "groupIavg") {
1328
+ sumConfigs["avg"].push(sum);
1329
+ avgLen++;
1330
+ } else sumConfigs["avg"].push({ value: "", id: "" });
1331
+
1332
+ if (argFun === "sum" || argFun === "groupIsum") {
1333
+ sumConfigs["sum"].push(sum);
1334
+ sumLen++;
1335
+ } else sumConfigs["sum"].push({ value: "", id: "" });
1336
+ }
1337
+
1338
+ console.log("sumConfigs", sumConfigs, sumLen, avgLen);
1339
+
1340
+ return (
1341
+ <>
1342
+ {sumLen === 0 ? (
1343
+ <></>
1344
+ ) : (
1345
+ <Table.Summary.Row>
1346
+ {sumConfigs["sum"].map(
1347
+ ({ id, value, columnConfig }, idx) => (
1348
+ <Table.Summary.Cell
1349
+ align={columnConfig?.align}
1350
+ index={idx}
1351
+ className="zongji"
1352
+ >
1353
+ {value}
1354
+ </Table.Summary.Cell>
1355
+ )
1356
+ )}
1357
+ </Table.Summary.Row>
1358
+ )}
1359
+ {avgLen === 0 ? (
1360
+ <></>
1361
+ ) : (
1362
+ <Table.Summary.Row>
1363
+ {sumConfigs["avg"].map(
1364
+ ({ id, value, columnConfig }, idx) => (
1365
+ <Table.Summary.Cell
1366
+ align={columnConfig?.align}
1367
+ index={idx}
1368
+ className="zongji"
1369
+ >
1370
+ {value}
1371
+ </Table.Summary.Cell>
1372
+ )
1373
+ )}
1374
+ </Table.Summary.Row>
1375
+ )}
1376
+ </>
1377
+ );
1378
+ }}
1379
+ loading={loading}
1380
+ components={{
1381
+ body: {
1382
+ wrapper: this.DraggableContainer,
1383
+ row: this.DraggableBodyRow,
1384
+ },
1385
+ }}
1386
+ onChange={this.onChange.bind(this)}
1387
+ ></Table>
1388
+ ) : (
1389
+ ""
1390
+ )}
1391
+ <Pagination
1392
+ touchEnd={touchEnd}
1393
+ pageInfo={{ ...pageInfo, virtualEndPageNo }}
1394
+ pageTo={this.pageTo}
1395
+ queryTotal={this.queryTotal}
1396
+ total={total}
1397
+ />
1398
+ {viewModels.includes("verticalList") ? (
1399
+ <Card style={{ marginTop: "10px" }}>
1400
+ <List
1401
+ dataSource={this.getUnHidenDataSource()}
1402
+ renderItem={(item) => (
1403
+ <List.Item key={item["id"]}>
1404
+ <Card size={"small"} bodyStyle={{ padding: "4px" }}>
1405
+ <Descriptions column={4}>
1406
+ {this.initViewList(item)}
1407
+ </Descriptions>
1408
+ </Card>
1409
+ </List.Item>
1410
+ )}
1411
+ />
1412
+ </Card>
1413
+ ) : (
1414
+ ""
1415
+ )}
1416
+ </>
1417
+ );
1418
+ }
1419
+ }
1420
+
1421
+ export default QueryTable;