@bit-sun/business-component 2.4.19 → 2.4.21

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