@bit-sun/business-component 2.3.22-beta7 → 2.3.22-beta9

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 (235) hide show
  1. package/.editorconfig +16 -16
  2. package/.fatherrc.ts +5 -5
  3. package/.gitlab-ci.yml +179 -179
  4. package/.prettierignore +7 -7
  5. package/.prettierrc +11 -11
  6. package/.umirc.ts +74 -74
  7. package/README.md +27 -27
  8. package/dist/components/Business/AddSelectBusiness/index.d.ts +4 -3
  9. package/dist/components/Business/BsLayouts/Components/AllFunc/drawContent.d.ts +2 -1
  10. package/dist/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/leftTree.d.ts +1 -1
  11. package/dist/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/rightTree.d.ts +2 -2
  12. package/dist/components/Business/BsLayouts/Components/CustomerMenu/globalMenu/DrawContent.d.ts +2 -1
  13. package/dist/components/Business/BsLayouts/Components/CustomerMenu/globalMenu/customMenuHeader.d.ts +2 -1
  14. package/dist/components/Business/BsLayouts/Components/GlobalHeader/index.d.ts +2 -1
  15. package/dist/components/Business/BsLayouts/Components/RightContent/LoginModal.d.ts +2 -1
  16. package/dist/components/Business/BsLayouts/index.d.ts +1 -1
  17. package/dist/components/Business/BsLayouts/service.d.ts +1 -1
  18. package/dist/components/Business/BsSulaQueryTable/SearchItemSetting.d.ts +5 -5
  19. package/dist/components/Business/BsSulaQueryTable/index.d.ts +2 -1
  20. package/dist/components/Business/BsSulaQueryTable/setting.d.ts +5 -5
  21. package/dist/components/Business/BsSulaQueryTable/utils.d.ts +14 -13
  22. package/dist/components/Business/CommodityEntry/index.d.ts +2 -1
  23. package/dist/components/Business/CommonAlert/index.d.ts +2 -1
  24. package/dist/components/Business/CommonGuideWrapper/index.d.ts +3 -3
  25. package/dist/components/Business/DetailPageWrapper/index.d.ts +6 -5
  26. package/dist/components/Business/HomePageWrapper/index.d.ts +2 -1
  27. package/dist/components/Business/JsonQueryTable/components/FieldsModifyModal.d.ts +2 -1
  28. package/dist/components/Business/JsonQueryTable/components/FieldsSettingsTable.d.ts +2 -1
  29. package/dist/components/Business/JsonQueryTable/components/Formula.d.ts +2 -1
  30. package/dist/components/Business/JsonQueryTable/components/MaintainOptions.d.ts +2 -1
  31. package/dist/components/Business/JsonQueryTable/drawer/index.d.ts +2 -1
  32. package/dist/components/Business/StateFlow/index.d.ts +2 -1
  33. package/dist/components/Business/TreeSearchSelect/index.d.ts +1 -1
  34. package/dist/components/Business/columnSettingTable/columnSetting.d.ts +5 -5
  35. package/dist/components/Business/columnSettingTable/index.d.ts +2 -2
  36. package/dist/components/Business/columnSettingTable/sulaSettingTable.d.ts +2 -2
  37. package/dist/components/Business/columnSettingTable/utils.d.ts +2 -1
  38. package/dist/components/Functional/AddSelect/index.d.ts +2 -1
  39. package/dist/components/Functional/DataImport/index.d.ts +3 -3
  40. package/dist/components/Functional/DataValidation/index.d.ts +3 -3
  41. package/dist/components/Functional/ExportFunctions/ExportIcon/index.d.ts +2 -1
  42. package/dist/components/Functional/QueryMutipleInput/index.d.ts +2 -1
  43. package/dist/components/Functional/TreeSearchSelect/index.d.ts +2 -1
  44. package/dist/components/Solution/RuleComponent/Formula.d.ts +2 -1
  45. package/dist/components/Solution/RuleComponent/services.d.ts +1 -1
  46. package/dist/index.esm.js +36 -14
  47. package/dist/index.js +36 -14
  48. package/dist/plugin/TableColumnSetting/index.d.ts +5 -5
  49. package/dist/utils/LocalstorageUtils.d.ts +5 -0
  50. package/docs/index.md +21 -21
  51. package/lib/assets/drag.svg +17 -17
  52. package/lib/assets/exportFail.svg +37 -37
  53. package/lib/assets/exportProcessing.svg +28 -28
  54. package/lib/assets/exportSuccess.svg +34 -34
  55. package/lib/assets/label_icon_bottom.svg +25 -25
  56. package/lib/assets/upExport.svg +22 -22
  57. package/package.json +78 -78
  58. package/src/assets/32.svg +27 -27
  59. package/src/assets/addIcon.svg +17 -17
  60. package/src/assets/allfunc.svg +27 -27
  61. package/src/assets/arrowRight.svg +24 -24
  62. package/src/assets/btn-delete.svg +29 -29
  63. package/src/assets/btn-edit.svg +19 -19
  64. package/src/assets/btn-more.svg +17 -17
  65. package/src/assets/btn-submit.svg +19 -19
  66. package/src/assets/caidan.svg +11 -11
  67. package/src/assets/close.svg +26 -26
  68. package/src/assets/drag.svg +17 -17
  69. package/src/assets/exportFail.svg +37 -37
  70. package/src/assets/exportProcessing.svg +28 -28
  71. package/src/assets/exportSuccess.svg +34 -34
  72. package/src/assets/fixed-left-active.svg +11 -11
  73. package/src/assets/fixed-left.svg +15 -15
  74. package/src/assets/fixed-right-active.svg +11 -11
  75. package/src/assets/fixed-right.svg +15 -15
  76. package/src/assets/guanbi.svg +15 -15
  77. package/src/assets/icon-quanping.svg +15 -15
  78. package/src/assets/icon-shezhi.svg +17 -17
  79. package/src/assets/label_icon_bottom.svg +25 -25
  80. package/src/assets/list-no-img.svg +21 -21
  81. package/src/assets/morentouxiang-32.svg +23 -23
  82. package/src/assets/scanning.svg +24 -24
  83. package/src/assets/upExport.svg +22 -22
  84. package/src/common/ENUM.ts +41 -41
  85. package/src/components/Business/AddSelectBusiness/index.md +162 -162
  86. package/src/components/Business/AddSelectBusiness/index.tsx +1060 -1060
  87. package/src/components/Business/BsLayouts/Components/AllFunc/drawContent.tsx +111 -111
  88. package/src/components/Business/BsLayouts/Components/AllFunc/index.less +153 -153
  89. package/src/components/Business/BsLayouts/Components/AllFunc/index.tsx +70 -70
  90. package/src/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/index.less +90 -90
  91. package/src/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/index.tsx +37 -37
  92. package/src/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/leftTree.tsx +242 -242
  93. package/src/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/rightTree.tsx +384 -384
  94. package/src/components/Business/BsLayouts/Components/CustomerMenu/globalMenu/DrawContent.tsx +285 -285
  95. package/src/components/Business/BsLayouts/Components/CustomerMenu/globalMenu/customMenuHeader.tsx +74 -74
  96. package/src/components/Business/BsLayouts/Components/CustomerMenu/globalMenu/drawContent.less +170 -170
  97. package/src/components/Business/BsLayouts/Components/CustomerMenu/index.less +64 -64
  98. package/src/components/Business/BsLayouts/Components/CustomerMenu/index.tsx +153 -153
  99. package/src/components/Business/BsLayouts/Components/GlobalHeader/index.less +72 -72
  100. package/src/components/Business/BsLayouts/Components/GlobalHeader/index.tsx +157 -157
  101. package/src/components/Business/BsLayouts/Components/RightContent/LoginModal.tsx +85 -85
  102. package/src/components/Business/BsLayouts/Components/RightContent/home.less +218 -218
  103. package/src/components/Business/BsLayouts/Components/RightContent/index.tsx +155 -155
  104. package/src/components/Business/BsLayouts/Components/SearchFunc/index.less +160 -160
  105. package/src/components/Business/BsLayouts/Components/SearchFunc/index.tsx +75 -75
  106. package/src/components/Business/BsLayouts/index.less +79 -79
  107. package/src/components/Business/BsLayouts/index.tsx +1484 -1484
  108. package/src/components/Business/BsLayouts/service.ts +10 -10
  109. package/src/components/Business/BsLayouts/utils.tsx +203 -203
  110. package/src/components/Business/BsSulaQueryTable/SearchItemSetting.tsx +565 -564
  111. package/src/components/Business/BsSulaQueryTable/index.less +221 -221
  112. package/src/components/Business/BsSulaQueryTable/index.tsx +531 -531
  113. package/src/components/Business/BsSulaQueryTable/setting.tsx +853 -852
  114. package/src/components/Business/BsSulaQueryTable/utils.less +65 -65
  115. package/src/components/Business/BsSulaQueryTable/utils.tsx +690 -690
  116. package/src/components/Business/CommodityEntry/index.md +70 -70
  117. package/src/components/Business/CommodityEntry/index.tsx +80 -80
  118. package/src/components/Business/CommonAlert/index.tsx +23 -23
  119. package/src/components/Business/CommonGuideWrapper/index.less +111 -111
  120. package/src/components/Business/CommonGuideWrapper/index.md +39 -39
  121. package/src/components/Business/CommonGuideWrapper/index.tsx +83 -83
  122. package/src/components/Business/DetailPageWrapper/index.less +79 -79
  123. package/src/components/Business/DetailPageWrapper/index.tsx +313 -313
  124. package/src/components/Business/DetailPageWrapper/utils.tsx +100 -100
  125. package/src/components/Business/HomePageWrapper/index.less +33 -33
  126. package/src/components/Business/HomePageWrapper/index.md +45 -45
  127. package/src/components/Business/HomePageWrapper/index.tsx +162 -162
  128. package/src/components/Business/JsonQueryTable/components/FieldsModifyModal.tsx +824 -824
  129. package/src/components/Business/JsonQueryTable/components/FieldsSettingsTable.tsx +205 -205
  130. package/src/components/Business/JsonQueryTable/components/Formula.tsx +205 -205
  131. package/src/components/Business/JsonQueryTable/components/MaintainOptions.tsx +127 -127
  132. package/src/components/Business/JsonQueryTable/configButton/index.js +20 -20
  133. package/src/components/Business/JsonQueryTable/configTree/component/compactArrayView.js +25 -25
  134. package/src/components/Business/JsonQueryTable/configTree/component/compactObjectView.js +30 -30
  135. package/src/components/Business/JsonQueryTable/configTree/index.js +82 -82
  136. package/src/components/Business/JsonQueryTable/configTree/index.less +44 -44
  137. package/src/components/Business/JsonQueryTable/configTree/parser/highlight.js +57 -57
  138. package/src/components/Business/JsonQueryTable/configTree/parser/index.js +124 -124
  139. package/src/components/Business/JsonQueryTable/configTree/render/iconRender.js +29 -29
  140. package/src/components/Business/JsonQueryTable/configTree/render/nameRender.js +22 -22
  141. package/src/components/Business/JsonQueryTable/configTree/treeNode.js +116 -116
  142. package/src/components/Business/JsonQueryTable/drawer/index.tsx +12 -12
  143. package/src/components/Business/JsonQueryTable/function.ts +62 -62
  144. package/src/components/Business/JsonQueryTable/index.less +16 -16
  145. package/src/components/Business/JsonQueryTable/index.md +328 -328
  146. package/src/components/Business/JsonQueryTable/index.tsx +535 -535
  147. package/src/components/Business/JsonQueryTable/jsonEditor/index.js +346 -346
  148. package/src/components/Business/JsonQueryTable/jsonEditor/index.less +22 -22
  149. package/src/components/Business/JsonQueryTable/jsonEditor/lint/basicType.js +147 -147
  150. package/src/components/Business/JsonQueryTable/jsonEditor/lint/index.js +389 -389
  151. package/src/components/Business/JsonQueryTable/jsonEditor/suggestions/actions.js +118 -118
  152. package/src/components/Business/JsonQueryTable/jsonEditor/suggestions/dependency.js +22 -22
  153. package/src/components/Business/JsonQueryTable/jsonEditor/suggestions/index.js +21 -21
  154. package/src/components/Business/JsonQueryTable/jsonEditor/suggestions/request.js +65 -65
  155. package/src/components/Business/JsonQueryTable/static.ts +390 -390
  156. package/src/components/Business/SearchSelect/BusinessUtils.ts +1762 -1762
  157. package/src/components/Business/SearchSelect/common.ts +75 -75
  158. package/src/components/Business/SearchSelect/index.md +1329 -1329
  159. package/src/components/Business/SearchSelect/index.tsx +55 -55
  160. package/src/components/Business/SearchSelect/utils.ts +100 -100
  161. package/src/components/Business/StateFlow/index.less +130 -130
  162. package/src/components/Business/StateFlow/index.md +60 -60
  163. package/src/components/Business/StateFlow/index.tsx +29 -29
  164. package/src/components/Business/TreeSearchSelect/index.md +156 -156
  165. package/src/components/Business/TreeSearchSelect/index.tsx +33 -33
  166. package/src/components/Business/TreeSearchSelect/utils.ts +75 -75
  167. package/src/components/Business/columnSettingTable/columnSetting.tsx +765 -764
  168. package/src/components/Business/columnSettingTable/index.less +247 -247
  169. package/src/components/Business/columnSettingTable/index.md +357 -357
  170. package/src/components/Business/columnSettingTable/index.tsx +232 -232
  171. package/src/components/Business/columnSettingTable/sulaSettingTable.tsx +240 -240
  172. package/src/components/Business/columnSettingTable/utils.tsx +71 -71
  173. package/src/components/Business/moreTreeTable/FixedScrollBar.tsx +87 -87
  174. package/src/components/Business/moreTreeTable/hooks/useSticky.ts +21 -21
  175. package/src/components/Business/moreTreeTable/index.less +99 -99
  176. package/src/components/Business/moreTreeTable/index.md +448 -448
  177. package/src/components/Business/moreTreeTable/index.tsx +387 -387
  178. package/src/components/Business/moreTreeTable/utils.ts +126 -126
  179. package/src/components/Functional/AddSelect/helps.ts +79 -79
  180. package/src/components/Functional/AddSelect/index.less +367 -367
  181. package/src/components/Functional/AddSelect/index.md +155 -155
  182. package/src/components/Functional/AddSelect/index.tsx +1170 -1170
  183. package/src/components/Functional/BillEntry/index.less +371 -371
  184. package/src/components/Functional/BillEntry/index.md +39 -39
  185. package/src/components/Functional/BillEntry/index.tsx +772 -772
  186. package/src/components/Functional/BsAntdSula/BsCascader/index.md +62 -62
  187. package/src/components/Functional/BsAntdSula/BsCascader/index.tsx +178 -178
  188. package/src/components/Functional/BsAntdSula/index.ts +2 -2
  189. package/src/components/Functional/DataImport/index.less +63 -63
  190. package/src/components/Functional/DataImport/index.md +44 -44
  191. package/src/components/Functional/DataImport/index.tsx +695 -695
  192. package/src/components/Functional/DataValidation/index.less +63 -63
  193. package/src/components/Functional/DataValidation/index.md +39 -39
  194. package/src/components/Functional/DataValidation/index.tsx +687 -687
  195. package/src/components/Functional/EllipsisTooltip/index.d.ts +5 -5
  196. package/src/components/Functional/EllipsisTooltip/index.js +36 -36
  197. package/src/components/Functional/EllipsisTooltip/index.md +30 -30
  198. package/src/components/Functional/ExportFunctions/ExportIcon/index.md +37 -37
  199. package/src/components/Functional/ExportFunctions/ExportIcon/index.tsx +59 -59
  200. package/src/components/Functional/QueryMutipleInput/index.less +37 -37
  201. package/src/components/Functional/QueryMutipleInput/index.md +33 -33
  202. package/src/components/Functional/QueryMutipleInput/index.tsx +128 -128
  203. package/src/components/Functional/SearchSelect/index.less +115 -115
  204. package/src/components/Functional/SearchSelect/index.md +141 -141
  205. package/src/components/Functional/SearchSelect/index.tsx +879 -879
  206. package/src/components/Functional/SearchSelect/utils.ts +3 -3
  207. package/src/components/Functional/TreeSearchSelect/index.md +47 -47
  208. package/src/components/Functional/TreeSearchSelect/index.tsx +199 -199
  209. package/src/components/Solution/RuleComponent/Formula.tsx +335 -335
  210. package/src/components/Solution/RuleComponent/index.d.ts +29 -29
  211. package/src/components/Solution/RuleComponent/index.js +2032 -2032
  212. package/src/components/Solution/RuleComponent/index.less +230 -230
  213. package/src/components/Solution/RuleComponent/renderSpecificAction.js +99 -99
  214. package/src/components/Solution/RuleComponent/ruleFiled.js +2107 -2107
  215. package/src/components/Solution/RuleComponent/services.ts +13 -13
  216. package/src/components/Solution/RuleComponent/util.js +139 -139
  217. package/src/index.ts +38 -38
  218. package/src/plugin/TableColumnSetting/index.less +247 -247
  219. package/src/plugin/TableColumnSetting/index.md +50 -50
  220. package/src/plugin/TableColumnSetting/index.tsx +725 -724
  221. package/src/plugin/TableColumnSetting/utils.ts +19 -19
  222. package/src/styles/bsDefault.less +1890 -1890
  223. package/src/utils/CheckOneUser/index.md +39 -39
  224. package/src/utils/CheckOneUser/index.ts +51 -51
  225. package/src/utils/LocalstorageUtils.ts +114 -95
  226. package/src/utils/TableUtils.tsx +18 -18
  227. package/src/utils/checkUtils.ts +39 -39
  228. package/src/utils/enumConfig.ts +11 -11
  229. package/src/utils/getFormMode.js +12 -12
  230. package/src/utils/index.ts +4 -4
  231. package/src/utils/requestUtils.ts +42 -34
  232. package/src/utils/serialize.js +7 -7
  233. package/src/utils/utils.ts +212 -212
  234. package/tsconfig.json +29 -29
  235. package/typings.d.ts +4 -4
@@ -1,724 +1,725 @@
1
- // @ts-nocheck
2
- import React from 'react';
3
- import { Table, message, Checkbox, Modal, Input, Button, Tooltip } from 'antd';
4
- import axios from 'axios';
5
- // import { request } from 'umi';
6
- import {
7
- SortableContainer,
8
- SortableElement,
9
- SortableHandle,
10
- } from 'react-sortable-hoc';
11
- import { MenuOutlined, SearchOutlined } from '@ant-design/icons';
12
- import { arrayMoveImmutable } from 'array-move';
13
- import { setConfigTableColumns, getConfigTableColumns } from '@/utils/LocalstorageUtils';
14
- import shezhi from '../../assets/icon-shezhi.svg';
15
- import close from '../../assets/close.svg';
16
- import drag from '../../assets/drag.svg';
17
- import fixedLeft from '../../assets/fixed-left.svg';
18
- import fixedLeftActive from '../../assets/fixed-left-active.svg';
19
- import fixedRight from '../../assets/fixed-right.svg';
20
- import fixedRightActive from '../../assets/fixed-right-active.svg';
21
- import './index.less';
22
-
23
- interface TableColumnSettingProps {
24
- /** tableCode必填,做用户存储关键key,*/
25
- tableCode: string;
26
- /** datasource必填,为要操作的表头(即原始表头),*/
27
- datasource: any;
28
- /** showColumns必填,为当前用户设置的表头,*/
29
- showColumns: any;
30
- /** setShowColumns必填,设置当前表头的方法,*/
31
- setShowColumns: void;
32
- /** settingImgAttribute非必填,设置当前设置img样式,*/
33
- settingImgAttribute: {
34
- [propName: string]: any;
35
- };
36
- [propName: string]: any;
37
- }
38
- const { Search } = Input;
39
-
40
- const DragHandle = SortableHandle(() => <img src={drag} />);
41
-
42
- const SortableItem = SortableElement((props: any) => <tr {...props} />);
43
- const SortableBody = SortableContainer((props: any) => <tbody {...props} />);
44
-
45
- class TableColumnSetting extends React.Component<TableColumnSettingProps> {
46
- state = {
47
- dataSource: [],
48
- columns: [],
49
- selectedRowKeys: [],
50
- sortDataSource: [],
51
- setVisible: false,
52
- searchDataSource: false,
53
- onSearchSort: false,
54
- };
55
-
56
- patchUserColumnConfig = (config: any) => {
57
- const { tableCode }: any = this.props;
58
- if (!tableCode) return;
59
- let configvalue = config.map((item:any) => ({
60
- key: item.key,
61
- dataIndex: item.dataIndex,
62
- width: item.width,
63
- hidden: item.hidden,
64
- fixed: item.fixed
65
- }))
66
-
67
- axios({
68
- url: '/user/appConfig/saveUserOrder',
69
- method:'POST',
70
- data: {
71
- "code": tableCode,
72
- "detail": JSON.stringify(configvalue)
73
- },
74
- }).then((res:any) => {
75
- if (res?.data?.status === '0') {
76
- setConfigTableColumns(configvalue, tableCode)
77
- } else {
78
- message.error('保存表头列自定义失败,请稍后尝试');
79
- }
80
- })
81
- }
82
-
83
- setInitValue = (datasource: any[]) => {
84
- const { showColumns=[], tableCode } = this.props;
85
- // 获取当前列表定义数据
86
- let columnConfig = getConfigTableColumns(tableCode);
87
- let initialDataSourceData = columnConfig.length ? datasource.map(item => {
88
- let inner = columnConfig.filter((innerItem: any) => (
89
- innerItem.dataIndex && innerItem.dataIndex === item.dataIndex
90
- ) || (innerItem.key && innerItem.key === item.key));
91
- let showColumnItem = showColumns.filter((inneritem:any) => ((inneritem.dataIndex && inneritem.dataIndex === item.dataIndex) || (inneritem.key && inneritem.key === item.key)))
92
- return {
93
- ...item,
94
- fixed: inner.length ? inner[0]?.fixed : item?.fixed,
95
- key: item.key || item.dataIndex,
96
- width: showColumnItem[0]?.width || inner[0]?.width || item.width,
97
- hidden: columnConfig.length && !inner.length,
98
- }
99
- })
100
- : [...datasource]
101
- this.setState({
102
- dataSource: initialDataSourceData.map((item: any) => ({
103
- ...item,
104
- key: item.key || item.dataIndex,
105
- })),
106
- sortDataSource: initialDataSourceData.filter((item: any) => !item.hidden)
107
- .map((item: any) => ({
108
- ...item,
109
- key: item.key || item.dataIndex,
110
- })),
111
- });
112
- };
113
-
114
- componentWillReceiveProps(nextProps: any) {
115
- if (
116
- this.props?.datasource &&
117
- JSON.stringify(this.props?.datasource) !=
118
- JSON.stringify(nextProps?.datasource)
119
- ) {
120
- this.setInitValue(nextProps?.datasource || []);
121
- }
122
- }
123
-
124
- componentDidMount() {
125
- const { datasource = [] }: any = this.props;
126
- this.setInitValue(datasource);
127
- }
128
-
129
- columns = [
130
- {
131
- title: '列名称',
132
- dataIndex: 'title',
133
- className: 'drag-visible',
134
- width: 100,
135
- },
136
- {
137
- title: '列首',
138
- dataIndex: 'fixedLeft',
139
- render: (text, record) => {
140
- return (
141
- <span
142
- onClick={() => {
143
- const { sortDataSource } = this.state;
144
- if (record?.fixed !== 'left') {
145
- let newSortData = sortDataSource.map((item) => {
146
- if (item.title === record.title) {
147
- return {
148
- ...item,
149
- fixed: 'left',
150
- };
151
- }
152
- return item;
153
- });
154
- this.setState({
155
- sortDataSource: [
156
- ...newSortData.filter((item) => item.fixed === 'left'),
157
- ...newSortData.filter((item) => !item.fixed),
158
- ...newSortData.filter((item) => item.fixed === 'right'),
159
- ],
160
- dataSource: [
161
- ...this.state.dataSource.map((item) => {
162
- if (item.title === record.title) {
163
- return {
164
- ...item,
165
- fixed: 'left',
166
- };
167
- }
168
- return item;
169
- }),
170
- ],
171
- });
172
- } else {
173
- let newSortData = sortDataSource.map((item) => {
174
- if (item.title === record.title) {
175
- return {
176
- ...item,
177
- fixed: null,
178
- };
179
- }
180
- return item;
181
- });
182
- this.setState({
183
- sortDataSource: [
184
- ...newSortData.filter((item) => item.fixed === 'left'),
185
- ...newSortData.filter((item) => !item.fixed),
186
- ...newSortData.filter((item) => item.fixed === 'right'),
187
- ],
188
- dataSource: [
189
- ...this.state.dataSource.map((item) => {
190
- if (item.title === record.title) {
191
- return {
192
- ...item,
193
- fixed: null,
194
- };
195
- }
196
- return item;
197
- }),
198
- ],
199
- });
200
- }
201
- }}
202
- >
203
- <Tooltip
204
- placement="top"
205
- title={record?.fixed === 'left' ? '取消固定' : '固定列首'}
206
- >
207
- <img
208
- src={record?.fixed === 'left' ? fixedLeftActive : fixedLeft}
209
- />
210
- </Tooltip>
211
- </span>
212
- );
213
- },
214
- },
215
- {
216
- title: '列尾',
217
- dataIndex: 'fixedRight',
218
- render: (text, record) => {
219
- return (
220
- <span
221
- onClick={() => {
222
- const { sortDataSource } = this.state;
223
- if (record?.fixed !== 'right') {
224
- let newSortData = sortDataSource.map((item) => {
225
- if (item.title === record.title) {
226
- return {
227
- ...item,
228
- fixed: 'right',
229
- };
230
- }
231
- return item;
232
- });
233
- this.setState({
234
- sortDataSource: [
235
- ...newSortData.filter((item) => item.fixed === 'left'),
236
- ...newSortData.filter((item) => !item.fixed),
237
- ...newSortData.filter((item) => item.fixed === 'right'),
238
- ],
239
- dataSource: [
240
- ...this.state.dataSource.map((item) => {
241
- if (item.title === record.title) {
242
- return {
243
- ...item,
244
- fixed: 'right',
245
- };
246
- }
247
- return item;
248
- }),
249
- ],
250
- });
251
- } else {
252
- let newSortData = sortDataSource.map((item) => {
253
- if (item.title === record.title) {
254
- return {
255
- ...item,
256
- fixed: null,
257
- };
258
- }
259
- return item;
260
- });
261
- this.setState({
262
- sortDataSource: [
263
- ...newSortData.filter((item) => item.fixed === 'left'),
264
- ...newSortData.filter((item) => !item.fixed),
265
- ...newSortData.filter((item) => item.fixed === 'right'),
266
- ],
267
- dataSource: [
268
- ...this.state.dataSource.map((item) => {
269
- if (item.title === record.title) {
270
- return {
271
- ...item,
272
- fixed: null,
273
- };
274
- }
275
- return item;
276
- }),
277
- ],
278
- });
279
- }
280
- }}
281
- >
282
- <Tooltip
283
- placement="top"
284
- title={record?.fixed === 'right' ? '取消固定' : '固定列尾'}
285
- >
286
- <img
287
- src={record?.fixed === 'right' ? fixedRightActive : fixedRight}
288
- />
289
- </Tooltip>
290
- </span>
291
- );
292
- },
293
- },
294
- {
295
- title: '删除',
296
- dataIndex: 'title1',
297
- render: (text: any, record: any) => {
298
- return (
299
- <span
300
- onClick={() => {
301
- this.setState({
302
- sortDataSource: this.state.sortDataSource.filter((item:any) => {
303
- return item.title !== record.title;
304
- }),
305
- dataSource: [
306
- ...this.state.dataSource.map((item:any) => {
307
- if (item.title === record.title) {
308
- return {
309
- ...item,
310
- hidden: true,
311
- };
312
- }
313
-
314
- return item;
315
- }),
316
- ],
317
- });
318
- }}
319
- >
320
- <img src={close} />
321
- </span>
322
- );
323
- },
324
- },
325
- {
326
- title: 'Sort',
327
- dataIndex: 'sort',
328
- className: 'drag-visible',
329
- render: () => <DragHandle />,
330
- },
331
- ];
332
-
333
- showModal = () => {
334
- const { datasource = [] }: any = this.props;
335
- this.setState({
336
- visible: true,
337
- });
338
- this.setInitValue(datasource);
339
- };
340
-
341
- handleOk = (e?: React.MouseEvent<HTMLElement>) => {
342
- const { sortDataSource }: any = this.state;
343
- const { setShowColumns }: any = this.props;
344
- if (!sortDataSource.length) {
345
- message.warning('至少选择一列!')
346
- return;
347
- }
348
- this.setState({
349
- visible: false,
350
- });
351
- setShowColumns([...sortDataSource]);
352
- this.patchUserColumnConfig(sortDataSource)
353
- };
354
-
355
- handleCancel = (e: React.MouseEvent<HTMLElement>) => {
356
- this.setState({
357
- visible: false,
358
- });
359
- };
360
-
361
- handleTableHeadHidden = (title: string) => {
362
- const { sortDataSource, dataSource } = this.state;
363
- this.setState(
364
- {
365
- sortDataSource: sortDataSource.filter((item: any) => {
366
- return item.title !== title;
367
- }),
368
- dataSource: [
369
- ...dataSource.map((item:any) => {
370
- if (item.title === title) {
371
- return {
372
- ...item,
373
- hidden: true,
374
- };
375
- }
376
-
377
- return item;
378
- }),
379
- ],
380
- },
381
- () => {
382
- this.handleOk();
383
- },
384
- );
385
- };
386
-
387
- onSortEnd = ({ oldIndex, newIndex }: any) => {
388
- const { sortDataSource } = this.state;
389
- const { value, setValue }: any = this.props;
390
- // if (sortDataSource[oldIndex]['fixed']) {
391
- // message.warning('固定列不可移动');
392
- // return;
393
- // }
394
- if (oldIndex !== newIndex) {
395
- const newData = arrayMoveImmutable(
396
- [].concat(sortDataSource),
397
- oldIndex,
398
- newIndex,
399
- ).filter((el) => !!el);
400
- this.setState({
401
- sortDataSource: [
402
- ...newData.filter((item) => item.fixed === 'left'),
403
- ...newData.filter((item) => !item.fixed),
404
- ...newData.filter((item) => item.fixed === 'right'),
405
- ],
406
- });
407
- }
408
- };
409
-
410
- DraggableContainer = (props: any) => (
411
- <SortableBody
412
- useDragHandle
413
- disableAutoscroll
414
- helperClass="row-dragging"
415
- onSortEnd={this.onSortEnd}
416
- {...props}
417
- />
418
- );
419
-
420
- DraggableBodyRow = ({ className, style, ...restProps }: any) => {
421
- const { sortDataSource } = this.state;
422
- // function findIndex base on Table rowKey props and should always be a right array index
423
- const index = sortDataSource.findIndex(
424
- (x:any) => x.key === restProps['data-row-key'],
425
- );
426
- return <SortableItem index={index} {...restProps} />;
427
- };
428
-
429
- onChange = (e: any, title: any) => {
430
- const { sortDataSource, dataSource } = this.state;
431
- if (!e.target.checked) {
432
- this.setState({
433
- sortDataSource: sortDataSource.filter((item: any) => {
434
- return item.title !== title;
435
- }),
436
- dataSource: [
437
- ...dataSource.map((item: any) => {
438
- if (item.title === title) {
439
- return {
440
- ...item,
441
- hidden: true,
442
- };
443
- }
444
-
445
- return item;
446
- }),
447
- ],
448
- });
449
- } else {
450
- let fixedLeft: any[] = [];
451
- let fixedRight: any[] = [];
452
- let noFixedSortSource: any = [];
453
- sortDataSource.forEach((item: any) => {
454
- if (item?.fixed === 'left') {
455
- fixedLeft.push(item);
456
- } else if (item?.fixed === 'right') {
457
- fixedRight.push(item);
458
- } else {
459
- noFixedSortSource.push(item);
460
- }
461
- });
462
- this.setState({
463
- sortDataSource: [
464
- ...fixedLeft,
465
- ...noFixedSortSource,
466
- ...dataSource
467
- .filter((item: any) => item.title === title)
468
- .map((source: any) => {
469
- return {
470
- ...source,
471
- hidden: false,
472
- };
473
- }),
474
- ...fixedRight,
475
- ],
476
- dataSource: [
477
- ...dataSource.map((item: any) => {
478
- if (item.title === title) {
479
- return {
480
- ...item,
481
- hidden: false,
482
- };
483
- }
484
-
485
- return item;
486
- }),
487
- ],
488
- });
489
- }
490
- };
491
-
492
- handleReset = () => {
493
- const { datasource = [] }: any = this.props;
494
- this.setInitValue(datasource);
495
- };
496
-
497
- onSearch = (e: any) => {
498
- this.setState({
499
- searchDataSource: e.target.value,
500
- });
501
- };
502
-
503
- onSearchSort = (e: any) => {
504
- this.setState({
505
- onSearchSort: e.target.value,
506
- });
507
- };
508
-
509
- render() {
510
- const {
511
- dataSource,
512
- searchDataSource,
513
- sortDataSource,
514
- visible,
515
- onSearchSort,
516
- }: any = this.state;
517
- const { settingImgAttribute={} } = this.props;
518
- const settingImgAttributeProps={width: 32,...settingImgAttribute};
519
-
520
- let seatchDataSource = dataSource.filter(
521
- (item: any) => item?.title?.indexOf(searchDataSource || '') > -1,
522
- );
523
-
524
- return (
525
- <div className={'sort_table_wrapper'}>
526
- <Modal
527
- title="设置表头内容"
528
- wrapClassName={'sort_table_wrapper'}
529
- width={820}
530
- visible={visible}
531
- onOk={this.handleOk}
532
- onCancel={this.handleCancel}
533
- footer={[
534
- <Button key="back" onClick={this.handleReset}>
535
- 恢复默认
536
- </Button>,
537
- <Button key="submit" onClick={this.handleOk}>
538
- 取消
539
- </Button>,
540
- <Button key="submit" type="primary" onClick={this.handleOk}>
541
- 确认
542
- </Button>,
543
- ]}
544
- >
545
- <div className={'sort_table'}>
546
- <div className={'sort_table_column_wrapper'}>
547
- <span className={'sort_table_column_count'}>
548
- 可选字段 <span>(共{dataSource.length}个)</span>
549
- </span>
550
- <div className={'sort_table_column'}>
551
- <Input
552
- prefix={<SearchOutlined className="site-form-item-icon" />}
553
- placeholder="搜索"
554
- allowClear
555
- onChange={this.onSearch}
556
- style={{ width: 540 }}
557
- />
558
- <div>
559
- {!searchDataSource && (
560
- <Checkbox
561
- checked={
562
- !dataSource.some((item: any) => {
563
- if (item.hidden) return true;
564
-
565
- return false;
566
- })
567
- }
568
- onClick={(e:any) => {
569
- this.setState({
570
- dataSource: [
571
- ...dataSource.map((item: any) => {
572
- return {
573
- ...item,
574
- hidden: !e.target.checked,
575
- };
576
- }),
577
- ],
578
- sortDataSource: e.target.checked
579
- ? [
580
- ...dataSource.map((item: any) => {
581
- return {
582
- ...item,
583
- hidden: false,
584
- };
585
- }),
586
- ]
587
- : [],
588
- });
589
- }}
590
- >
591
- 全选
592
- </Checkbox>
593
- )}
594
- </div>
595
- <div className={'sort_table_column_all'}>
596
- {searchDataSource
597
- ? seatchDataSource.map((item: any) => {
598
- return (
599
- <Checkbox
600
- checked={!item.hidden}
601
- onChange={(e) => {
602
- this.onChange(e, item.title);
603
- }}
604
- >
605
- {item.title}
606
- </Checkbox>
607
- );
608
- })
609
- : dataSource
610
- .filter(
611
- (item: any) =>
612
- item?.title?.indexOf('人') === -1 &&
613
- item?.title?.indexOf('日期') === -1,
614
- )
615
- .map((item: any) => {
616
- return (
617
- <Checkbox
618
- checked={!item.hidden}
619
- onChange={(e) => {
620
- this.onChange(e, item.title);
621
- }}
622
- >
623
- {item.title}
624
- </Checkbox>
625
- );
626
- })}
627
- {!!seatchDataSource.length && (
628
- <span style={{ width: '144px' }}></span>
629
- )}
630
-
631
- {!seatchDataSource.length && (
632
- <div className={'sort_table_column_all_empty'}>
633
- 未查询到结果
634
- </div>
635
- )}
636
- </div>
637
- {!searchDataSource && (
638
- <div>
639
- <div className={'sort_table_column_special'}>
640
- <span>人员时间字段</span>
641
- </div>
642
- <div className={'sort_table_column_all'}>
643
- {[...dataSource]
644
- .filter(
645
- (item) =>
646
- item?.title?.indexOf('人') > -1 ||
647
- item?.title?.indexOf('日期') > -1,
648
- )
649
- .map((item) => {
650
- return (
651
- <Checkbox
652
- checked={!item.hidden}
653
- onChange={(e) => {
654
- this.onChange(e, item.title);
655
- }}
656
- >
657
- {item.title}
658
- </Checkbox>
659
- );
660
- })}
661
- <span style={{ width: '144px' }}></span>
662
- </div>
663
- </div>
664
- )}
665
-
666
- {/* <Checkbox.Group
667
- options={dataSource.map(item => {
668
- return {
669
- label: item.title,
670
- value: item.title,
671
- }
672
- })}
673
- defaultValue={selectedRowKeys}
674
- onChange={() => {}}
675
- /> */}
676
- </div>
677
- </div>
678
- <div className={'sort_table_content_wrapper'}>
679
- <span className={'sort_table_content_count'}>
680
- 已选字段 <span>(共{sortDataSource.length}个)</span>
681
- </span>
682
- <div className={'sort_table_content'}>
683
- <span style={{ paddingLeft: '10px' }}>
684
- <Input
685
- prefix={<SearchOutlined className="site-form-item-icon" />}
686
- placeholder="搜索"
687
- allowClear
688
- onChange={this.onSearchSort}
689
- style={{ width: 190 }}
690
- />
691
- </span>
692
- <Table
693
- pagination={false}
694
- showHeader={false}
695
- dataSource={
696
- onSearchSort
697
- ? sortDataSource.filter(
698
- (item:any) => item?.title?.indexOf(onSearchSort) > -1,
699
- )
700
- : sortDataSource
701
- }
702
- columns={this.columns}
703
- rowKey="key"
704
- // rowSelection={rowSelection}
705
- components={{
706
- body: {
707
- wrapper: this.DraggableContainer,
708
- row: this.DraggableBodyRow,
709
- },
710
- }}
711
- />
712
- </div>
713
- </div>
714
- </div>
715
- </Modal>
716
- <Tooltip title="列设置">
717
- <img {...settingImgAttributeProps} onClick={this.showModal} src={shezhi} />
718
- </Tooltip>
719
- </div>
720
- );
721
- }
722
- }
723
-
724
- export default TableColumnSetting;
1
+ // @ts-nocheck
2
+ import React from 'react';
3
+ import { Table, message, Checkbox, Modal, Input, Button, Tooltip } from 'antd';
4
+ import axios from 'axios';
5
+ // import { request } from 'umi';
6
+ import {
7
+ SortableContainer,
8
+ SortableElement,
9
+ SortableHandle,
10
+ } from 'react-sortable-hoc';
11
+ import { MenuOutlined, SearchOutlined } from '@ant-design/icons';
12
+ import { arrayMoveImmutable } from 'array-move';
13
+ import { setConfigTableColumns, getConfigTableColumns } from '@/utils/LocalstorageUtils';
14
+ import shezhi from '../../assets/icon-shezhi.svg';
15
+ import close from '../../assets/close.svg';
16
+ import drag from '../../assets/drag.svg';
17
+ import fixedLeft from '../../assets/fixed-left.svg';
18
+ import fixedLeftActive from '../../assets/fixed-left-active.svg';
19
+ import fixedRight from '../../assets/fixed-right.svg';
20
+ import fixedRightActive from '../../assets/fixed-right-active.svg';
21
+ import './index.less';
22
+
23
+ interface TableColumnSettingProps {
24
+ /** tableCode必填,做用户存储关键key,*/
25
+ tableCode: string;
26
+ /** datasource必填,为要操作的表头(即原始表头),*/
27
+ datasource: any;
28
+ /** showColumns必填,为当前用户设置的表头,*/
29
+ showColumns: any;
30
+ /** setShowColumns必填,设置当前表头的方法,*/
31
+ setShowColumns: void;
32
+ /** settingImgAttribute非必填,设置当前设置img样式,*/
33
+ settingImgAttribute: {
34
+ [propName: string]: any;
35
+ };
36
+ [propName: string]: any;
37
+ }
38
+ const { Search } = Input;
39
+
40
+ const DragHandle = SortableHandle(() => <img src={drag} />);
41
+
42
+ const SortableItem = SortableElement((props: any) => <tr {...props} />);
43
+ const SortableBody = SortableContainer((props: any) => <tbody {...props} />);
44
+
45
+ class TableColumnSetting extends React.Component<TableColumnSettingProps> {
46
+ state = {
47
+ dataSource: [],
48
+ columns: [],
49
+ selectedRowKeys: [],
50
+ sortDataSource: [],
51
+ setVisible: false,
52
+ searchDataSource: false,
53
+ onSearchSort: false,
54
+ };
55
+
56
+ patchUserColumnConfig = (config: any) => {
57
+ const { tableCode }: any = this.props;
58
+ if (!tableCode) return;
59
+ let configvalue = config.map((item:any) => ({
60
+ key: item.key,
61
+ dataIndex: item.dataIndex,
62
+ width: item.width,
63
+ hidden: item.hidden,
64
+ fixed: item.fixed
65
+ }))
66
+
67
+ axios({
68
+ // url: '/user/appConfig/saveUserOrder',
69
+ url: '/api/mallops/appConfig/saveUserOrder', //赢家地址
70
+ method:'POST',
71
+ data: {
72
+ "code": tableCode,
73
+ "detail": JSON.stringify(configvalue)
74
+ },
75
+ }).then((res:any) => {
76
+ if (res?.data?.status === '0') {
77
+ setConfigTableColumns(configvalue, tableCode)
78
+ } else {
79
+ message.error('保存表头列自定义失败,请稍后尝试');
80
+ }
81
+ })
82
+ }
83
+
84
+ setInitValue = (datasource: any[]) => {
85
+ const { showColumns=[], tableCode } = this.props;
86
+ // 获取当前列表定义数据
87
+ let columnConfig = getConfigTableColumns(tableCode);
88
+ let initialDataSourceData = columnConfig.length ? datasource.map(item => {
89
+ let inner = columnConfig.filter((innerItem: any) => (
90
+ innerItem.dataIndex && innerItem.dataIndex === item.dataIndex
91
+ ) || (innerItem.key && innerItem.key === item.key));
92
+ let showColumnItem = showColumns.filter((inneritem:any) => ((inneritem.dataIndex && inneritem.dataIndex === item.dataIndex) || (inneritem.key && inneritem.key === item.key)))
93
+ return {
94
+ ...item,
95
+ fixed: inner.length ? inner[0]?.fixed : item?.fixed,
96
+ key: item.key || item.dataIndex,
97
+ width: showColumnItem[0]?.width || inner[0]?.width || item.width,
98
+ hidden: columnConfig.length && !inner.length,
99
+ }
100
+ })
101
+ : [...datasource]
102
+ this.setState({
103
+ dataSource: initialDataSourceData.map((item: any) => ({
104
+ ...item,
105
+ key: item.key || item.dataIndex,
106
+ })),
107
+ sortDataSource: initialDataSourceData.filter((item: any) => !item.hidden)
108
+ .map((item: any) => ({
109
+ ...item,
110
+ key: item.key || item.dataIndex,
111
+ })),
112
+ });
113
+ };
114
+
115
+ componentWillReceiveProps(nextProps: any) {
116
+ if (
117
+ this.props?.datasource &&
118
+ JSON.stringify(this.props?.datasource) !=
119
+ JSON.stringify(nextProps?.datasource)
120
+ ) {
121
+ this.setInitValue(nextProps?.datasource || []);
122
+ }
123
+ }
124
+
125
+ componentDidMount() {
126
+ const { datasource = [] }: any = this.props;
127
+ this.setInitValue(datasource);
128
+ }
129
+
130
+ columns = [
131
+ {
132
+ title: '列名称',
133
+ dataIndex: 'title',
134
+ className: 'drag-visible',
135
+ width: 100,
136
+ },
137
+ {
138
+ title: '列首',
139
+ dataIndex: 'fixedLeft',
140
+ render: (text, record) => {
141
+ return (
142
+ <span
143
+ onClick={() => {
144
+ const { sortDataSource } = this.state;
145
+ if (record?.fixed !== 'left') {
146
+ let newSortData = sortDataSource.map((item) => {
147
+ if (item.title === record.title) {
148
+ return {
149
+ ...item,
150
+ fixed: 'left',
151
+ };
152
+ }
153
+ return item;
154
+ });
155
+ this.setState({
156
+ sortDataSource: [
157
+ ...newSortData.filter((item) => item.fixed === 'left'),
158
+ ...newSortData.filter((item) => !item.fixed),
159
+ ...newSortData.filter((item) => item.fixed === 'right'),
160
+ ],
161
+ dataSource: [
162
+ ...this.state.dataSource.map((item) => {
163
+ if (item.title === record.title) {
164
+ return {
165
+ ...item,
166
+ fixed: 'left',
167
+ };
168
+ }
169
+ return item;
170
+ }),
171
+ ],
172
+ });
173
+ } else {
174
+ let newSortData = sortDataSource.map((item) => {
175
+ if (item.title === record.title) {
176
+ return {
177
+ ...item,
178
+ fixed: null,
179
+ };
180
+ }
181
+ return item;
182
+ });
183
+ this.setState({
184
+ sortDataSource: [
185
+ ...newSortData.filter((item) => item.fixed === 'left'),
186
+ ...newSortData.filter((item) => !item.fixed),
187
+ ...newSortData.filter((item) => item.fixed === 'right'),
188
+ ],
189
+ dataSource: [
190
+ ...this.state.dataSource.map((item) => {
191
+ if (item.title === record.title) {
192
+ return {
193
+ ...item,
194
+ fixed: null,
195
+ };
196
+ }
197
+ return item;
198
+ }),
199
+ ],
200
+ });
201
+ }
202
+ }}
203
+ >
204
+ <Tooltip
205
+ placement="top"
206
+ title={record?.fixed === 'left' ? '取消固定' : '固定列首'}
207
+ >
208
+ <img
209
+ src={record?.fixed === 'left' ? fixedLeftActive : fixedLeft}
210
+ />
211
+ </Tooltip>
212
+ </span>
213
+ );
214
+ },
215
+ },
216
+ {
217
+ title: '列尾',
218
+ dataIndex: 'fixedRight',
219
+ render: (text, record) => {
220
+ return (
221
+ <span
222
+ onClick={() => {
223
+ const { sortDataSource } = this.state;
224
+ if (record?.fixed !== 'right') {
225
+ let newSortData = sortDataSource.map((item) => {
226
+ if (item.title === record.title) {
227
+ return {
228
+ ...item,
229
+ fixed: 'right',
230
+ };
231
+ }
232
+ return item;
233
+ });
234
+ this.setState({
235
+ sortDataSource: [
236
+ ...newSortData.filter((item) => item.fixed === 'left'),
237
+ ...newSortData.filter((item) => !item.fixed),
238
+ ...newSortData.filter((item) => item.fixed === 'right'),
239
+ ],
240
+ dataSource: [
241
+ ...this.state.dataSource.map((item) => {
242
+ if (item.title === record.title) {
243
+ return {
244
+ ...item,
245
+ fixed: 'right',
246
+ };
247
+ }
248
+ return item;
249
+ }),
250
+ ],
251
+ });
252
+ } else {
253
+ let newSortData = sortDataSource.map((item) => {
254
+ if (item.title === record.title) {
255
+ return {
256
+ ...item,
257
+ fixed: null,
258
+ };
259
+ }
260
+ return item;
261
+ });
262
+ this.setState({
263
+ sortDataSource: [
264
+ ...newSortData.filter((item) => item.fixed === 'left'),
265
+ ...newSortData.filter((item) => !item.fixed),
266
+ ...newSortData.filter((item) => item.fixed === 'right'),
267
+ ],
268
+ dataSource: [
269
+ ...this.state.dataSource.map((item) => {
270
+ if (item.title === record.title) {
271
+ return {
272
+ ...item,
273
+ fixed: null,
274
+ };
275
+ }
276
+ return item;
277
+ }),
278
+ ],
279
+ });
280
+ }
281
+ }}
282
+ >
283
+ <Tooltip
284
+ placement="top"
285
+ title={record?.fixed === 'right' ? '取消固定' : '固定列尾'}
286
+ >
287
+ <img
288
+ src={record?.fixed === 'right' ? fixedRightActive : fixedRight}
289
+ />
290
+ </Tooltip>
291
+ </span>
292
+ );
293
+ },
294
+ },
295
+ {
296
+ title: '删除',
297
+ dataIndex: 'title1',
298
+ render: (text: any, record: any) => {
299
+ return (
300
+ <span
301
+ onClick={() => {
302
+ this.setState({
303
+ sortDataSource: this.state.sortDataSource.filter((item:any) => {
304
+ return item.title !== record.title;
305
+ }),
306
+ dataSource: [
307
+ ...this.state.dataSource.map((item:any) => {
308
+ if (item.title === record.title) {
309
+ return {
310
+ ...item,
311
+ hidden: true,
312
+ };
313
+ }
314
+
315
+ return item;
316
+ }),
317
+ ],
318
+ });
319
+ }}
320
+ >
321
+ <img src={close} />
322
+ </span>
323
+ );
324
+ },
325
+ },
326
+ {
327
+ title: 'Sort',
328
+ dataIndex: 'sort',
329
+ className: 'drag-visible',
330
+ render: () => <DragHandle />,
331
+ },
332
+ ];
333
+
334
+ showModal = () => {
335
+ const { datasource = [] }: any = this.props;
336
+ this.setState({
337
+ visible: true,
338
+ });
339
+ this.setInitValue(datasource);
340
+ };
341
+
342
+ handleOk = (e?: React.MouseEvent<HTMLElement>) => {
343
+ const { sortDataSource }: any = this.state;
344
+ const { setShowColumns }: any = this.props;
345
+ if (!sortDataSource.length) {
346
+ message.warning('至少选择一列!')
347
+ return;
348
+ }
349
+ this.setState({
350
+ visible: false,
351
+ });
352
+ setShowColumns([...sortDataSource]);
353
+ this.patchUserColumnConfig(sortDataSource)
354
+ };
355
+
356
+ handleCancel = (e: React.MouseEvent<HTMLElement>) => {
357
+ this.setState({
358
+ visible: false,
359
+ });
360
+ };
361
+
362
+ handleTableHeadHidden = (title: string) => {
363
+ const { sortDataSource, dataSource } = this.state;
364
+ this.setState(
365
+ {
366
+ sortDataSource: sortDataSource.filter((item: any) => {
367
+ return item.title !== title;
368
+ }),
369
+ dataSource: [
370
+ ...dataSource.map((item:any) => {
371
+ if (item.title === title) {
372
+ return {
373
+ ...item,
374
+ hidden: true,
375
+ };
376
+ }
377
+
378
+ return item;
379
+ }),
380
+ ],
381
+ },
382
+ () => {
383
+ this.handleOk();
384
+ },
385
+ );
386
+ };
387
+
388
+ onSortEnd = ({ oldIndex, newIndex }: any) => {
389
+ const { sortDataSource } = this.state;
390
+ const { value, setValue }: any = this.props;
391
+ // if (sortDataSource[oldIndex]['fixed']) {
392
+ // message.warning('固定列不可移动');
393
+ // return;
394
+ // }
395
+ if (oldIndex !== newIndex) {
396
+ const newData = arrayMoveImmutable(
397
+ [].concat(sortDataSource),
398
+ oldIndex,
399
+ newIndex,
400
+ ).filter((el) => !!el);
401
+ this.setState({
402
+ sortDataSource: [
403
+ ...newData.filter((item) => item.fixed === 'left'),
404
+ ...newData.filter((item) => !item.fixed),
405
+ ...newData.filter((item) => item.fixed === 'right'),
406
+ ],
407
+ });
408
+ }
409
+ };
410
+
411
+ DraggableContainer = (props: any) => (
412
+ <SortableBody
413
+ useDragHandle
414
+ disableAutoscroll
415
+ helperClass="row-dragging"
416
+ onSortEnd={this.onSortEnd}
417
+ {...props}
418
+ />
419
+ );
420
+
421
+ DraggableBodyRow = ({ className, style, ...restProps }: any) => {
422
+ const { sortDataSource } = this.state;
423
+ // function findIndex base on Table rowKey props and should always be a right array index
424
+ const index = sortDataSource.findIndex(
425
+ (x:any) => x.key === restProps['data-row-key'],
426
+ );
427
+ return <SortableItem index={index} {...restProps} />;
428
+ };
429
+
430
+ onChange = (e: any, title: any) => {
431
+ const { sortDataSource, dataSource } = this.state;
432
+ if (!e.target.checked) {
433
+ this.setState({
434
+ sortDataSource: sortDataSource.filter((item: any) => {
435
+ return item.title !== title;
436
+ }),
437
+ dataSource: [
438
+ ...dataSource.map((item: any) => {
439
+ if (item.title === title) {
440
+ return {
441
+ ...item,
442
+ hidden: true,
443
+ };
444
+ }
445
+
446
+ return item;
447
+ }),
448
+ ],
449
+ });
450
+ } else {
451
+ let fixedLeft: any[] = [];
452
+ let fixedRight: any[] = [];
453
+ let noFixedSortSource: any = [];
454
+ sortDataSource.forEach((item: any) => {
455
+ if (item?.fixed === 'left') {
456
+ fixedLeft.push(item);
457
+ } else if (item?.fixed === 'right') {
458
+ fixedRight.push(item);
459
+ } else {
460
+ noFixedSortSource.push(item);
461
+ }
462
+ });
463
+ this.setState({
464
+ sortDataSource: [
465
+ ...fixedLeft,
466
+ ...noFixedSortSource,
467
+ ...dataSource
468
+ .filter((item: any) => item.title === title)
469
+ .map((source: any) => {
470
+ return {
471
+ ...source,
472
+ hidden: false,
473
+ };
474
+ }),
475
+ ...fixedRight,
476
+ ],
477
+ dataSource: [
478
+ ...dataSource.map((item: any) => {
479
+ if (item.title === title) {
480
+ return {
481
+ ...item,
482
+ hidden: false,
483
+ };
484
+ }
485
+
486
+ return item;
487
+ }),
488
+ ],
489
+ });
490
+ }
491
+ };
492
+
493
+ handleReset = () => {
494
+ const { datasource = [] }: any = this.props;
495
+ this.setInitValue(datasource);
496
+ };
497
+
498
+ onSearch = (e: any) => {
499
+ this.setState({
500
+ searchDataSource: e.target.value,
501
+ });
502
+ };
503
+
504
+ onSearchSort = (e: any) => {
505
+ this.setState({
506
+ onSearchSort: e.target.value,
507
+ });
508
+ };
509
+
510
+ render() {
511
+ const {
512
+ dataSource,
513
+ searchDataSource,
514
+ sortDataSource,
515
+ visible,
516
+ onSearchSort,
517
+ }: any = this.state;
518
+ const { settingImgAttribute={} } = this.props;
519
+ const settingImgAttributeProps={width: 32,...settingImgAttribute};
520
+
521
+ let seatchDataSource = dataSource.filter(
522
+ (item: any) => item?.title?.indexOf(searchDataSource || '') > -1,
523
+ );
524
+
525
+ return (
526
+ <div className={'sort_table_wrapper'}>
527
+ <Modal
528
+ title="设置表头内容"
529
+ wrapClassName={'sort_table_wrapper'}
530
+ width={820}
531
+ visible={visible}
532
+ onOk={this.handleOk}
533
+ onCancel={this.handleCancel}
534
+ footer={[
535
+ <Button key="back" onClick={this.handleReset}>
536
+ 恢复默认
537
+ </Button>,
538
+ <Button key="submit" onClick={this.handleOk}>
539
+ 取消
540
+ </Button>,
541
+ <Button key="submit" type="primary" onClick={this.handleOk}>
542
+ 确认
543
+ </Button>,
544
+ ]}
545
+ >
546
+ <div className={'sort_table'}>
547
+ <div className={'sort_table_column_wrapper'}>
548
+ <span className={'sort_table_column_count'}>
549
+ 可选字段 <span>(共{dataSource.length}个)</span>
550
+ </span>
551
+ <div className={'sort_table_column'}>
552
+ <Input
553
+ prefix={<SearchOutlined className="site-form-item-icon" />}
554
+ placeholder="搜索"
555
+ allowClear
556
+ onChange={this.onSearch}
557
+ style={{ width: 540 }}
558
+ />
559
+ <div>
560
+ {!searchDataSource && (
561
+ <Checkbox
562
+ checked={
563
+ !dataSource.some((item: any) => {
564
+ if (item.hidden) return true;
565
+
566
+ return false;
567
+ })
568
+ }
569
+ onClick={(e:any) => {
570
+ this.setState({
571
+ dataSource: [
572
+ ...dataSource.map((item: any) => {
573
+ return {
574
+ ...item,
575
+ hidden: !e.target.checked,
576
+ };
577
+ }),
578
+ ],
579
+ sortDataSource: e.target.checked
580
+ ? [
581
+ ...dataSource.map((item: any) => {
582
+ return {
583
+ ...item,
584
+ hidden: false,
585
+ };
586
+ }),
587
+ ]
588
+ : [],
589
+ });
590
+ }}
591
+ >
592
+ 全选
593
+ </Checkbox>
594
+ )}
595
+ </div>
596
+ <div className={'sort_table_column_all'}>
597
+ {searchDataSource
598
+ ? seatchDataSource.map((item: any) => {
599
+ return (
600
+ <Checkbox
601
+ checked={!item.hidden}
602
+ onChange={(e) => {
603
+ this.onChange(e, item.title);
604
+ }}
605
+ >
606
+ {item.title}
607
+ </Checkbox>
608
+ );
609
+ })
610
+ : dataSource
611
+ .filter(
612
+ (item: any) =>
613
+ item?.title?.indexOf('') === -1 &&
614
+ item?.title?.indexOf('日期') === -1,
615
+ )
616
+ .map((item: any) => {
617
+ return (
618
+ <Checkbox
619
+ checked={!item.hidden}
620
+ onChange={(e) => {
621
+ this.onChange(e, item.title);
622
+ }}
623
+ >
624
+ {item.title}
625
+ </Checkbox>
626
+ );
627
+ })}
628
+ {!!seatchDataSource.length && (
629
+ <span style={{ width: '144px' }}></span>
630
+ )}
631
+
632
+ {!seatchDataSource.length && (
633
+ <div className={'sort_table_column_all_empty'}>
634
+ 未查询到结果
635
+ </div>
636
+ )}
637
+ </div>
638
+ {!searchDataSource && (
639
+ <div>
640
+ <div className={'sort_table_column_special'}>
641
+ <span>人员时间字段</span>
642
+ </div>
643
+ <div className={'sort_table_column_all'}>
644
+ {[...dataSource]
645
+ .filter(
646
+ (item) =>
647
+ item?.title?.indexOf('') > -1 ||
648
+ item?.title?.indexOf('日期') > -1,
649
+ )
650
+ .map((item) => {
651
+ return (
652
+ <Checkbox
653
+ checked={!item.hidden}
654
+ onChange={(e) => {
655
+ this.onChange(e, item.title);
656
+ }}
657
+ >
658
+ {item.title}
659
+ </Checkbox>
660
+ );
661
+ })}
662
+ <span style={{ width: '144px' }}></span>
663
+ </div>
664
+ </div>
665
+ )}
666
+
667
+ {/* <Checkbox.Group
668
+ options={dataSource.map(item => {
669
+ return {
670
+ label: item.title,
671
+ value: item.title,
672
+ }
673
+ })}
674
+ defaultValue={selectedRowKeys}
675
+ onChange={() => {}}
676
+ /> */}
677
+ </div>
678
+ </div>
679
+ <div className={'sort_table_content_wrapper'}>
680
+ <span className={'sort_table_content_count'}>
681
+ 已选字段 <span>(共{sortDataSource.length}个)</span>
682
+ </span>
683
+ <div className={'sort_table_content'}>
684
+ <span style={{ paddingLeft: '10px' }}>
685
+ <Input
686
+ prefix={<SearchOutlined className="site-form-item-icon" />}
687
+ placeholder="搜索"
688
+ allowClear
689
+ onChange={this.onSearchSort}
690
+ style={{ width: 190 }}
691
+ />
692
+ </span>
693
+ <Table
694
+ pagination={false}
695
+ showHeader={false}
696
+ dataSource={
697
+ onSearchSort
698
+ ? sortDataSource.filter(
699
+ (item:any) => item?.title?.indexOf(onSearchSort) > -1,
700
+ )
701
+ : sortDataSource
702
+ }
703
+ columns={this.columns}
704
+ rowKey="key"
705
+ // rowSelection={rowSelection}
706
+ components={{
707
+ body: {
708
+ wrapper: this.DraggableContainer,
709
+ row: this.DraggableBodyRow,
710
+ },
711
+ }}
712
+ />
713
+ </div>
714
+ </div>
715
+ </div>
716
+ </Modal>
717
+ <Tooltip title="列设置">
718
+ <img {...settingImgAttributeProps} onClick={this.showModal} src={shezhi} />
719
+ </Tooltip>
720
+ </div>
721
+ );
722
+ }
723
+ }
724
+
725
+ export default TableColumnSetting;