@bit-sun/business-component 2.2.21 → 2.2.23

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 (178) 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 +34 -31
  9. package/dist/index.js +34 -31
  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 +77 -77
  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/arrow_top.svg +17 -17
  23. package/src/assets/btn-delete.svg +29 -29
  24. package/src/assets/btn-edit.svg +19 -19
  25. package/src/assets/btn-more.svg +17 -17
  26. package/src/assets/btn-submit.svg +19 -19
  27. package/src/assets/caidan.svg +11 -11
  28. package/src/assets/close.svg +26 -26
  29. package/src/assets/drag.svg +17 -17
  30. package/src/assets/exportFail.svg +37 -37
  31. package/src/assets/exportProcessing.svg +28 -28
  32. package/src/assets/exportSuccess.svg +34 -34
  33. package/src/assets/fixed-left-active.svg +11 -11
  34. package/src/assets/fixed-left.svg +15 -15
  35. package/src/assets/fixed-right-active.svg +11 -11
  36. package/src/assets/fixed-right.svg +15 -15
  37. package/src/assets/guanbi.svg +15 -15
  38. package/src/assets/icon-quanping.svg +15 -15
  39. package/src/assets/icon-shezhi.svg +17 -17
  40. package/src/assets/label_icon_bottom.svg +25 -25
  41. package/src/assets/list-no-img.svg +21 -21
  42. package/src/assets/morentouxiang-32.svg +23 -23
  43. package/src/assets/scanning.svg +24 -24
  44. package/src/assets/upExport.svg +22 -22
  45. package/src/components/Business/AddSelectBusiness/index.md +129 -129
  46. package/src/components/Business/AddSelectBusiness/index.tsx +835 -835
  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 +1480 -1479
  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 +538 -538
  71. package/src/components/Business/BsSulaQueryTable/index.less +219 -219
  72. package/src/components/Business/BsSulaQueryTable/index.tsx +527 -527
  73. package/src/components/Business/BsSulaQueryTable/setting.tsx +802 -802
  74. package/src/components/Business/BsSulaQueryTable/utils.less +65 -65
  75. package/src/components/Business/BsSulaQueryTable/utils.tsx +688 -688
  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 +113 -113
  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 +313 -313
  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 +201 -201
  90. package/src/components/Business/JsonQueryTable/components/Formula.tsx +205 -205
  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 +320 -320
  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 +390 -390
  116. package/src/components/Business/SearchSelect/BusinessUtils.ts +1730 -1730
  117. package/src/components/Business/SearchSelect/common.ts +53 -53
  118. package/src/components/Business/SearchSelect/index.md +1310 -1310
  119. package/src/components/Business/SearchSelect/index.tsx +51 -51
  120. package/src/components/Business/SearchSelect/utils.ts +100 -100
  121. package/src/components/Business/StateFlow/index.less +151 -151
  122. package/src/components/Business/StateFlow/index.md +60 -60
  123. package/src/components/Business/StateFlow/index.tsx +32 -32
  124. package/src/components/Business/TreeSearchSelect/index.md +154 -154
  125. package/src/components/Business/TreeSearchSelect/index.tsx +34 -34
  126. package/src/components/Business/TreeSearchSelect/utils.ts +69 -69
  127. package/src/components/Business/columnSettingTable/columnSetting.tsx +764 -764
  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 +232 -232
  131. package/src/components/Business/columnSettingTable/sulaSettingTable.tsx +240 -240
  132. package/src/components/Business/columnSettingTable/utils.tsx +68 -68
  133. package/src/components/Business/moreTreeTable/index.less +99 -99
  134. package/src/components/Business/moreTreeTable/index.md +448 -448
  135. package/src/components/Business/moreTreeTable/index.tsx +361 -361
  136. package/src/components/Business/moreTreeTable/utils.ts +126 -126
  137. package/src/components/Functional/AddSelect/index.less +367 -367
  138. package/src/components/Functional/AddSelect/index.md +155 -155
  139. package/src/components/Functional/AddSelect/index.tsx +1203 -1203
  140. package/src/components/Functional/BillEntry/index.less +371 -371
  141. package/src/components/Functional/BillEntry/index.md +39 -39
  142. package/src/components/Functional/BillEntry/index.tsx +766 -766
  143. package/src/components/Functional/DataImport/index.less +63 -63
  144. package/src/components/Functional/DataImport/index.md +44 -44
  145. package/src/components/Functional/DataImport/index.tsx +695 -695
  146. package/src/components/Functional/DataValidation/index.less +63 -63
  147. package/src/components/Functional/DataValidation/index.md +39 -39
  148. package/src/components/Functional/DataValidation/index.tsx +687 -687
  149. package/src/components/Functional/ExportFunctions/ExportIcon/index.md +37 -37
  150. package/src/components/Functional/ExportFunctions/ExportIcon/index.tsx +59 -59
  151. package/src/components/Functional/QueryMutipleInput/index.less +37 -37
  152. package/src/components/Functional/QueryMutipleInput/index.md +33 -33
  153. package/src/components/Functional/QueryMutipleInput/index.tsx +128 -128
  154. package/src/components/Functional/SearchSelect/index.less +115 -115
  155. package/src/components/Functional/SearchSelect/index.md +141 -141
  156. package/src/components/Functional/SearchSelect/index.tsx +846 -846
  157. package/src/components/Functional/SearchSelect/utils.ts +3 -3
  158. package/src/components/Functional/TreeSearchSelect/index.md +47 -47
  159. package/src/components/Functional/TreeSearchSelect/index.tsx +162 -160
  160. package/src/index.ts +34 -34
  161. package/src/plugin/TableColumnSetting/index.less +247 -247
  162. package/src/plugin/TableColumnSetting/index.md +50 -50
  163. package/src/plugin/TableColumnSetting/index.tsx +724 -724
  164. package/src/plugin/TableColumnSetting/utils.ts +19 -19
  165. package/src/styles/bsDefault.less +1912 -1912
  166. package/src/utils/CheckOneUser/index.md +39 -39
  167. package/src/utils/CheckOneUser/index.ts +51 -51
  168. package/src/utils/LocalstorageUtils.ts +90 -90
  169. package/src/utils/TableUtils.tsx +18 -18
  170. package/src/utils/checkUtils.ts +39 -39
  171. package/src/utils/enumConfig.ts +11 -11
  172. package/src/utils/getFormMode.js +12 -12
  173. package/src/utils/index.ts +3 -3
  174. package/src/utils/requestUtils.ts +34 -34
  175. package/src/utils/serialize.js +7 -7
  176. package/src/utils/utils.ts +183 -183
  177. package/tsconfig.json +29 -29
  178. package/typings.d.ts +4 -4
@@ -1,361 +1,361 @@
1
- // @ts-nocheck
2
- import React, { useState, useEffect, useImperativeHandle, forwardRef, useMemo, useRef } from 'react';
3
- import { getAllColumns, convertToRows, headersToRows } from './utils';
4
- import './index.less';
5
-
6
-
7
- export default forwardRef((props, ref) => {
8
- const [show, setShow] = useState(false);
9
- const [config, setConfig] = useState({
10
- tableType: 'col-header-table',
11
- colHeader: [],
12
- colLastData: [],
13
- rowHeader: [],
14
- rowLastData: [],
15
- colHeaderWidth: 400,
16
- colHeaderToTop: 0,
17
- });
18
- const [colTableData, setColTableData] = useState([]); //纵向表头数据
19
- const [multiTableData, setMmultiTableData] = useState({}); //多表头数据
20
- const [viewCount, setViewCount] = useState(10); //虚拟表格每次渲染数量
21
- const itemWidth = 100; // 表格每一项宽度
22
-
23
- const viewPort = useRef(null);
24
-
25
- //起始渲染item
26
- const [startIndex, setStartIndex] = useState(0);
27
-
28
- //结束渲染item
29
- const endIndex = useMemo(() => {
30
- return startIndex + viewCount;
31
- }, [startIndex, viewCount])
32
-
33
- //表格偏移量
34
- const [offsetWidth, setOffset] = useState(0);
35
-
36
- useEffect(() => { //根据容器宽度计算每次渲染个数
37
- let viewPortWidth = viewPort.current.clientWidth;
38
- let defaultTableWidth = viewPortWidth - (props.colHeaderWidth || 400);
39
- let viewCount = Math.floor(defaultTableWidth/itemWidth) + 2 <= 10 ? 10 : Math.floor(defaultTableWidth/itemWidth) + 2;
40
- setViewCount(viewCount)
41
- }, [])
42
-
43
- const onScroll = () => {
44
- const scrollWidth = viewPort.current.scrollLeft;
45
- const startIndex = Math.floor(scrollWidth/itemWidth);
46
- const offsetWidth = startIndex * itemWidth;
47
- setStartIndex(startIndex);
48
- setOffset(offsetWidth);
49
- }
50
-
51
- // 占位符,表格列总宽度
52
- const placeholderWidth = useMemo(() => {
53
- return colTableData.length*100
54
- }, [colTableData])
55
-
56
-
57
- useImperativeHandle(ref, () => ({
58
- // 暴露子组件刷新表格方法出去,父组件可以调用该方法刷新表格数据
59
- getDataSource: getDataSource,
60
- }));
61
-
62
- // 设置表头相关信息
63
- useEffect(() => {
64
- const { colData, rowData, colHeaderWidth=400 } = props;
65
- let tableType;
66
- if (colData && colData.length && rowData && rowData.length) {
67
- tableType = 'multi-header-table';
68
- const colHeaderData = convertToRows(colData);
69
- const rowHeaderData = headersToRows(rowData);
70
- const { rowHeader } = rowHeaderData;
71
- setConfig({
72
- colHeader: [],
73
- colLastData: [],
74
- rowHeader: [],
75
- rowLastData: [],
76
- ...colHeaderData,
77
- ...rowHeaderData,
78
- colHeaderWidth: colHeaderWidth,
79
- colHeaderToTop: (rowHeader?.length || 0)*40,
80
- tableType: tableType
81
- })
82
- } else if (colData && colData.length) {
83
- tableType = 'col-header-table';
84
- const colHeaderData = convertToRows(colData);
85
- setConfig({
86
- colHeader: [],
87
- colLastData: [],
88
- rowHeader: [],
89
- rowLastData: [],
90
- ...colHeaderData,
91
- colHeaderWidth: colHeaderWidth || 400,
92
- colHeaderToTop: 0,
93
- tableType: tableType
94
- })
95
- }
96
- }, [props.colData, props.rowData]);
97
-
98
- // 设置多表头表格数据
99
- useEffect(() => {
100
- if (!config.colLastData.length || !config.rowLastData.length || !props.multiTableData) return;
101
- let tableData = {};
102
- let [row, col] = [config.rowLastData, config.colLastData];
103
- col.forEach(x => {
104
- row.forEach(y => {
105
- let key = x.id + "__" + y.id;
106
- tableData[key] = "";
107
- });
108
- });
109
- Object.assign(tableData, props.multiTableData);
110
- setMmultiTableData({
111
- ...tableData
112
- });
113
- }, [config.colLastData, config.rowLastData, props.multiTableData])
114
-
115
- // 设置纵向表格数据
116
- useEffect(() => {
117
- if (props?.colTableData && props?.colTableData.length) {
118
- setColTableData([
119
- ...props.colTableData
120
- ])
121
- }
122
- }, [props.colTableData])
123
-
124
- const getDataSource = () => {
125
- return colTableData;
126
- }
127
-
128
- const tableInsFn = {
129
- getDataSource: getDataSource,
130
- }
131
-
132
-
133
-
134
- // if (!show) {
135
- // return <div>loading</div>;
136
- // }
137
-
138
- const {width, height } = props;
139
- let tableWidth = width ? `${width}px` : '100%';
140
- let tableHeight = `${height || 400}px`;
141
- const rightAreaWidth = 'calc(100% - ' + `${config.colHeaderWidth}px` + ')';
142
- return (
143
- <div
144
- style={{width: tableWidth, height: tableHeight}}
145
- key='moreTreeTable'
146
- className={'editTableWrapper'}
147
- onScroll={onScroll}
148
- ref={viewPort}
149
- >
150
- <div style={{
151
- width: `${config.colHeaderWidth + 1 + placeholderWidth}px`,
152
- position: 'absolute',
153
- top: 0,
154
- left: 0,
155
- height: '100%',
156
- }}
157
- ></div>
158
- {/* -------------------------------------左上角区域--------------------------------------- */}
159
- <table
160
- style={{
161
- width: `${config.colHeaderWidth+1}px`,
162
- height: `${config.colHeaderToTop}px`,
163
- display: config.tableType === 'col-header-table' ? 'none' : '',
164
- }}
165
- className={`${'north__west'}`}
166
- >
167
- </table>
168
-
169
- {/* --------------------------------------纵向表头---------------------------------------- */}
170
- <table
171
- style={{
172
- width: `${config.colHeaderWidth+1}px`,
173
- top: `${config.colHeaderToTop}px`,
174
- left: '0px',
175
- position: 'sticky',
176
- }}
177
- className={`${'south__west'} ${'editTable__block'} ${'table_border_style'}`}
178
- >
179
- <tbody>
180
- {config.colHeader.map((item, index) => {
181
- return (
182
- <tr>
183
- {item.map((innerItem) => {
184
- if (!innerItem) return null;
185
- let fixedTop = innerItem.fixed ? `${index*40 + config.colHeaderToTop}px` : 0;
186
- return (
187
- <td
188
- style={{
189
- // width: '200px',
190
- height: '40px',
191
- background: '#f7f8fb',
192
- lineHeight: '28px',
193
- color: '#000000',
194
- fontWeight: 500,
195
- position: innerItem.fixed ? 'sticky' : '',
196
- top: fixedTop,
197
- }}
198
- rowSpan={innerItem && innerItem.colSpan}
199
- colSpan={innerItem && innerItem.rowSpan}
200
- >
201
- {innerItem && innerItem.title}
202
- </td>
203
- );
204
- })}
205
- {/* <td></td> */}
206
- </tr>
207
- );
208
- })}
209
- </tbody>
210
- </table>
211
- <table
212
- className={` ${'editTable__block'} ${'table_border_style'}`}
213
- style={{
214
- width: '100%',
215
- top: 0,
216
- left: `${config.colHeaderWidth}px`,
217
- position: 'absolute',
218
- display: config.tableType === 'col-header-table' ? 'none' : ''
219
- }}
220
- >
221
- <colgroup>
222
- {
223
- config.rowLastData.map(row => {
224
- return (<col width={row.width ? `${row.width}px` : '100px'} />)
225
- })
226
- }
227
- </colgroup>
228
- <tbody>
229
- {
230
- config.rowHeader.map((item) => {
231
- return (
232
- <tr>
233
- {
234
- item.map((innerItem) => {
235
- if (!innerItem) return null;
236
- return (
237
- <td
238
- style={{
239
- height: '40px',
240
- background: '#f7f8fb',
241
- color: '#000000',
242
- fontWeight: 500,
243
- width: innerItem.width ? `${innerItem.width}px` : '100px',
244
- }}
245
- rowSpan={innerItem && innerItem.rowSpan}
246
- colSpan={innerItem && innerItem.colSpan}
247
- >
248
- {innerItem && innerItem.title}
249
- </td>
250
- )
251
- })
252
- }
253
- </tr>
254
- )
255
- })
256
- }
257
- </tbody>
258
- </table>
259
- <div
260
- style={{
261
- position: 'absolute',
262
- left: `${config.colHeaderWidth}px`,
263
- top: `${config.colHeaderToTop}px`,
264
- minWidth: rightAreaWidth,
265
- zIndex: 0,
266
- }}
267
- >
268
- {/* --------------------------------------横向表头---------------------------------------- */}
269
- {/* <div style={{position: 'relative'}}>
270
-
271
- </div> */}
272
- <div
273
- style={{
274
- width: '100%',
275
- position: 'relative'
276
- }}
277
- className={`${'value_table'} ${'table_border_style'}`}
278
- >
279
- {/* ------------------------------------纵向表头数据-------------------------------------- */}
280
- <table
281
- style={{
282
- width: '800px',
283
- display: config.tableType === 'col-header-table' ? '' : 'none',
284
- transform: `translateX(${offsetWidth}px)`
285
- }}
286
- className={`${'editTable__block'} ${'table_border_style'}`}
287
- >
288
- <tbody>
289
- {config.colLastData.map((item, index) => {
290
- let fixedTop = item.fixed ? `${index*40 + config.colHeaderToTop}px` : 0;
291
- return (
292
- <tr>
293
- {colTableData.slice(startIndex, endIndex+1).map((record, index) => {
294
- return (
295
- <td
296
- style={{
297
- background: (index % 2 === 1) || item.fixed ? '#f7f8fb' : '#fff',
298
- width: `${itemWidth}px`,
299
- height: '40px',
300
- position: item.fixed ? 'sticky' : '',
301
- top: fixedTop,
302
- color: item.fixed ? '#000000' : 'inherit',
303
- zIndex: item.fixed ? 10 : '',
304
- }}
305
- >
306
- {
307
- item.render ? item.render({text:record[item.key || item.dataIndex], record, index, table: tableInsFn}) : record[item.key || item.dataIndex]
308
- }
309
- {/* {record[item.key || item.dataIndex]?.value} */}
310
- </td>
311
- );
312
- })}
313
- {/* <td></td> */}
314
- </tr>
315
- );
316
- })}
317
- </tbody>
318
- </table>
319
- {/* -------------------------------------多表头数据-------------------------------------- */}
320
- <table
321
- style={{
322
- width: '100%',
323
- display: config.tableType === 'col-header-table' ? 'none' : '',
324
- }}
325
- className={`${'editTable__block'} ${'table_border_style'}`}
326
- >
327
- <colgroup>
328
- {
329
- config.rowLastData.map(row => {
330
- return (<col width={row.width ? `${row.width}px` : '100px'} />)
331
- })
332
- }
333
- </colgroup>
334
- <tbody>
335
- {config.colLastData.map((col) => {
336
- return (
337
- <tr>
338
- {config.rowLastData.map((row, index) => {
339
- return (
340
- <td
341
- style={{
342
- background: (index % 2 === 0) ? '#fff' : '#f7f8fb',
343
- width: row.width ? `${row.width}px` : '100px',
344
- height: '40px',
345
- }}
346
- >
347
- {multiTableData[(row.key || row.dataIndex)+'__'+(col.key || col.dataIndex)]}
348
- </td>
349
- );
350
- })}
351
- {/* <td></td> */}
352
- </tr>
353
- );
354
- })}
355
- </tbody>
356
- </table>
357
- </div>
358
- </div>
359
- </div>
360
- );
361
- });
1
+ // @ts-nocheck
2
+ import React, { useState, useEffect, useImperativeHandle, forwardRef, useMemo, useRef } from 'react';
3
+ import { getAllColumns, convertToRows, headersToRows } from './utils';
4
+ import './index.less';
5
+
6
+
7
+ export default forwardRef((props, ref) => {
8
+ const [show, setShow] = useState(false);
9
+ const [config, setConfig] = useState({
10
+ tableType: 'col-header-table',
11
+ colHeader: [],
12
+ colLastData: [],
13
+ rowHeader: [],
14
+ rowLastData: [],
15
+ colHeaderWidth: 400,
16
+ colHeaderToTop: 0,
17
+ });
18
+ const [colTableData, setColTableData] = useState([]); //纵向表头数据
19
+ const [multiTableData, setMmultiTableData] = useState({}); //多表头数据
20
+ const [viewCount, setViewCount] = useState(10); //虚拟表格每次渲染数量
21
+ const itemWidth = 100; // 表格每一项宽度
22
+
23
+ const viewPort = useRef(null);
24
+
25
+ //起始渲染item
26
+ const [startIndex, setStartIndex] = useState(0);
27
+
28
+ //结束渲染item
29
+ const endIndex = useMemo(() => {
30
+ return startIndex + viewCount;
31
+ }, [startIndex, viewCount])
32
+
33
+ //表格偏移量
34
+ const [offsetWidth, setOffset] = useState(0);
35
+
36
+ useEffect(() => { //根据容器宽度计算每次渲染个数
37
+ let viewPortWidth = viewPort.current.clientWidth;
38
+ let defaultTableWidth = viewPortWidth - (props.colHeaderWidth || 400);
39
+ let viewCount = Math.floor(defaultTableWidth/itemWidth) + 2 <= 10 ? 10 : Math.floor(defaultTableWidth/itemWidth) + 2;
40
+ setViewCount(viewCount)
41
+ }, [])
42
+
43
+ const onScroll = () => {
44
+ const scrollWidth = viewPort.current.scrollLeft;
45
+ const startIndex = Math.floor(scrollWidth/itemWidth);
46
+ const offsetWidth = startIndex * itemWidth;
47
+ setStartIndex(startIndex);
48
+ setOffset(offsetWidth);
49
+ }
50
+
51
+ // 占位符,表格列总宽度
52
+ const placeholderWidth = useMemo(() => {
53
+ return colTableData.length*100
54
+ }, [colTableData])
55
+
56
+
57
+ useImperativeHandle(ref, () => ({
58
+ // 暴露子组件刷新表格方法出去,父组件可以调用该方法刷新表格数据
59
+ getDataSource: getDataSource,
60
+ }));
61
+
62
+ // 设置表头相关信息
63
+ useEffect(() => {
64
+ const { colData, rowData, colHeaderWidth=400 } = props;
65
+ let tableType;
66
+ if (colData && colData.length && rowData && rowData.length) {
67
+ tableType = 'multi-header-table';
68
+ const colHeaderData = convertToRows(colData);
69
+ const rowHeaderData = headersToRows(rowData);
70
+ const { rowHeader } = rowHeaderData;
71
+ setConfig({
72
+ colHeader: [],
73
+ colLastData: [],
74
+ rowHeader: [],
75
+ rowLastData: [],
76
+ ...colHeaderData,
77
+ ...rowHeaderData,
78
+ colHeaderWidth: colHeaderWidth,
79
+ colHeaderToTop: (rowHeader?.length || 0)*40,
80
+ tableType: tableType
81
+ })
82
+ } else if (colData && colData.length) {
83
+ tableType = 'col-header-table';
84
+ const colHeaderData = convertToRows(colData);
85
+ setConfig({
86
+ colHeader: [],
87
+ colLastData: [],
88
+ rowHeader: [],
89
+ rowLastData: [],
90
+ ...colHeaderData,
91
+ colHeaderWidth: colHeaderWidth || 400,
92
+ colHeaderToTop: 0,
93
+ tableType: tableType
94
+ })
95
+ }
96
+ }, [props.colData, props.rowData]);
97
+
98
+ // 设置多表头表格数据
99
+ useEffect(() => {
100
+ if (!config.colLastData.length || !config.rowLastData.length || !props.multiTableData) return;
101
+ let tableData = {};
102
+ let [row, col] = [config.rowLastData, config.colLastData];
103
+ col.forEach(x => {
104
+ row.forEach(y => {
105
+ let key = x.id + "__" + y.id;
106
+ tableData[key] = "";
107
+ });
108
+ });
109
+ Object.assign(tableData, props.multiTableData);
110
+ setMmultiTableData({
111
+ ...tableData
112
+ });
113
+ }, [config.colLastData, config.rowLastData, props.multiTableData])
114
+
115
+ // 设置纵向表格数据
116
+ useEffect(() => {
117
+ if (props?.colTableData && props?.colTableData.length) {
118
+ setColTableData([
119
+ ...props.colTableData
120
+ ])
121
+ }
122
+ }, [props.colTableData])
123
+
124
+ const getDataSource = () => {
125
+ return colTableData;
126
+ }
127
+
128
+ const tableInsFn = {
129
+ getDataSource: getDataSource,
130
+ }
131
+
132
+
133
+
134
+ // if (!show) {
135
+ // return <div>loading</div>;
136
+ // }
137
+
138
+ const {width, height } = props;
139
+ let tableWidth = width ? `${width}px` : '100%';
140
+ let tableHeight = `${height || 400}px`;
141
+ const rightAreaWidth = 'calc(100% - ' + `${config.colHeaderWidth}px` + ')';
142
+ return (
143
+ <div
144
+ style={{width: tableWidth, height: tableHeight}}
145
+ key='moreTreeTable'
146
+ className={'editTableWrapper'}
147
+ onScroll={onScroll}
148
+ ref={viewPort}
149
+ >
150
+ <div style={{
151
+ width: `${config.colHeaderWidth + 1 + placeholderWidth}px`,
152
+ position: 'absolute',
153
+ top: 0,
154
+ left: 0,
155
+ height: '100%',
156
+ }}
157
+ ></div>
158
+ {/* -------------------------------------左上角区域--------------------------------------- */}
159
+ <table
160
+ style={{
161
+ width: `${config.colHeaderWidth+1}px`,
162
+ height: `${config.colHeaderToTop}px`,
163
+ display: config.tableType === 'col-header-table' ? 'none' : '',
164
+ }}
165
+ className={`${'north__west'}`}
166
+ >
167
+ </table>
168
+
169
+ {/* --------------------------------------纵向表头---------------------------------------- */}
170
+ <table
171
+ style={{
172
+ width: `${config.colHeaderWidth+1}px`,
173
+ top: `${config.colHeaderToTop}px`,
174
+ left: '0px',
175
+ position: 'sticky',
176
+ }}
177
+ className={`${'south__west'} ${'editTable__block'} ${'table_border_style'}`}
178
+ >
179
+ <tbody>
180
+ {config.colHeader.map((item, index) => {
181
+ return (
182
+ <tr>
183
+ {item.map((innerItem) => {
184
+ if (!innerItem) return null;
185
+ let fixedTop = innerItem.fixed ? `${index*40 + config.colHeaderToTop}px` : 0;
186
+ return (
187
+ <td
188
+ style={{
189
+ // width: '200px',
190
+ height: '40px',
191
+ background: '#f7f8fb',
192
+ lineHeight: '28px',
193
+ color: '#000000',
194
+ fontWeight: 500,
195
+ position: innerItem.fixed ? 'sticky' : '',
196
+ top: fixedTop,
197
+ }}
198
+ rowSpan={innerItem && innerItem.colSpan}
199
+ colSpan={innerItem && innerItem.rowSpan}
200
+ >
201
+ {innerItem && innerItem.title}
202
+ </td>
203
+ );
204
+ })}
205
+ {/* <td></td> */}
206
+ </tr>
207
+ );
208
+ })}
209
+ </tbody>
210
+ </table>
211
+ <table
212
+ className={` ${'editTable__block'} ${'table_border_style'}`}
213
+ style={{
214
+ width: '100%',
215
+ top: 0,
216
+ left: `${config.colHeaderWidth}px`,
217
+ position: 'absolute',
218
+ display: config.tableType === 'col-header-table' ? 'none' : ''
219
+ }}
220
+ >
221
+ <colgroup>
222
+ {
223
+ config.rowLastData.map(row => {
224
+ return (<col width={row.width ? `${row.width}px` : '100px'} />)
225
+ })
226
+ }
227
+ </colgroup>
228
+ <tbody>
229
+ {
230
+ config.rowHeader.map((item) => {
231
+ return (
232
+ <tr>
233
+ {
234
+ item.map((innerItem) => {
235
+ if (!innerItem) return null;
236
+ return (
237
+ <td
238
+ style={{
239
+ height: '40px',
240
+ background: '#f7f8fb',
241
+ color: '#000000',
242
+ fontWeight: 500,
243
+ width: innerItem.width ? `${innerItem.width}px` : '100px',
244
+ }}
245
+ rowSpan={innerItem && innerItem.rowSpan}
246
+ colSpan={innerItem && innerItem.colSpan}
247
+ >
248
+ {innerItem && innerItem.title}
249
+ </td>
250
+ )
251
+ })
252
+ }
253
+ </tr>
254
+ )
255
+ })
256
+ }
257
+ </tbody>
258
+ </table>
259
+ <div
260
+ style={{
261
+ position: 'absolute',
262
+ left: `${config.colHeaderWidth}px`,
263
+ top: `${config.colHeaderToTop}px`,
264
+ minWidth: rightAreaWidth,
265
+ zIndex: 0,
266
+ }}
267
+ >
268
+ {/* --------------------------------------横向表头---------------------------------------- */}
269
+ {/* <div style={{position: 'relative'}}>
270
+
271
+ </div> */}
272
+ <div
273
+ style={{
274
+ width: '100%',
275
+ position: 'relative'
276
+ }}
277
+ className={`${'value_table'} ${'table_border_style'}`}
278
+ >
279
+ {/* ------------------------------------纵向表头数据-------------------------------------- */}
280
+ <table
281
+ style={{
282
+ width: '800px',
283
+ display: config.tableType === 'col-header-table' ? '' : 'none',
284
+ transform: `translateX(${offsetWidth}px)`
285
+ }}
286
+ className={`${'editTable__block'} ${'table_border_style'}`}
287
+ >
288
+ <tbody>
289
+ {config.colLastData.map((item, index) => {
290
+ let fixedTop = item.fixed ? `${index*40 + config.colHeaderToTop}px` : 0;
291
+ return (
292
+ <tr>
293
+ {colTableData.slice(startIndex, endIndex+1).map((record, index) => {
294
+ return (
295
+ <td
296
+ style={{
297
+ background: (index % 2 === 1) || item.fixed ? '#f7f8fb' : '#fff',
298
+ width: `${itemWidth}px`,
299
+ height: '40px',
300
+ position: item.fixed ? 'sticky' : '',
301
+ top: fixedTop,
302
+ color: item.fixed ? '#000000' : 'inherit',
303
+ zIndex: item.fixed ? 10 : '',
304
+ }}
305
+ >
306
+ {
307
+ item.render ? item.render({text:record[item.key || item.dataIndex], record, index, table: tableInsFn}) : record[item.key || item.dataIndex]
308
+ }
309
+ {/* {record[item.key || item.dataIndex]?.value} */}
310
+ </td>
311
+ );
312
+ })}
313
+ {/* <td></td> */}
314
+ </tr>
315
+ );
316
+ })}
317
+ </tbody>
318
+ </table>
319
+ {/* -------------------------------------多表头数据-------------------------------------- */}
320
+ <table
321
+ style={{
322
+ width: '100%',
323
+ display: config.tableType === 'col-header-table' ? 'none' : '',
324
+ }}
325
+ className={`${'editTable__block'} ${'table_border_style'}`}
326
+ >
327
+ <colgroup>
328
+ {
329
+ config.rowLastData.map(row => {
330
+ return (<col width={row.width ? `${row.width}px` : '100px'} />)
331
+ })
332
+ }
333
+ </colgroup>
334
+ <tbody>
335
+ {config.colLastData.map((col) => {
336
+ return (
337
+ <tr>
338
+ {config.rowLastData.map((row, index) => {
339
+ return (
340
+ <td
341
+ style={{
342
+ background: (index % 2 === 0) ? '#fff' : '#f7f8fb',
343
+ width: row.width ? `${row.width}px` : '100px',
344
+ height: '40px',
345
+ }}
346
+ >
347
+ {multiTableData[(row.key || row.dataIndex)+'__'+(col.key || col.dataIndex)]}
348
+ </td>
349
+ );
350
+ })}
351
+ {/* <td></td> */}
352
+ </tr>
353
+ );
354
+ })}
355
+ </tbody>
356
+ </table>
357
+ </div>
358
+ </div>
359
+ </div>
360
+ );
361
+ });