@bit-sun/business-component 2.1.4 → 2.1.6

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 (137) hide show
  1. package/.editorconfig +16 -16
  2. package/.fatherrc.ts +5 -5
  3. package/.gitlab-ci.yml +174 -174
  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/Functional/SearchSelect/utils.d.ts +1 -0
  9. package/dist/index.esm.js +9257 -9242
  10. package/dist/index.js +9256 -9241
  11. package/docs/index.md +21 -21
  12. package/lib/assets/drag.svg +17 -17
  13. package/lib/assets/exportFail.svg +37 -37
  14. package/lib/assets/exportProcessing.svg +28 -28
  15. package/lib/assets/exportSuccess.svg +34 -34
  16. package/lib/assets/label_icon_bottom.svg +25 -25
  17. package/lib/assets/upExport.svg +22 -22
  18. package/package.json +71 -71
  19. package/src/assets/32.svg +27 -27
  20. package/src/assets/addIcon.svg +17 -17
  21. package/src/assets/allfunc.svg +27 -27
  22. package/src/assets/arrowRight.svg +24 -24
  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 +41 -41
  46. package/src/components/Business/AddSelectBusiness/index.tsx +290 -290
  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 +156 -156
  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 +1469 -1469
  68. package/src/components/Business/BsLayouts/service.ts +10 -10
  69. package/src/components/Business/BsLayouts/utils.tsx +210 -210
  70. package/src/components/Business/BsSulaQueryTable/index.less +219 -219
  71. package/src/components/Business/BsSulaQueryTable/index.tsx +505 -505
  72. package/src/components/Business/BsSulaQueryTable/setting.tsx +799 -799
  73. package/src/components/Business/BsSulaQueryTable/utils.less +65 -65
  74. package/src/components/Business/BsSulaQueryTable/utils.tsx +688 -688
  75. package/src/components/Business/CommodityEntry/index.md +70 -70
  76. package/src/components/Business/CommodityEntry/index.tsx +80 -80
  77. package/src/components/Business/CommonAlert/index.tsx +23 -23
  78. package/src/components/Business/CommonGuideWrapper/index.less +111 -111
  79. package/src/components/Business/CommonGuideWrapper/index.md +39 -39
  80. package/src/components/Business/CommonGuideWrapper/index.tsx +83 -83
  81. package/src/components/Business/DetailPageWrapper/index.less +79 -79
  82. package/src/components/Business/DetailPageWrapper/index.tsx +335 -335
  83. package/src/components/Business/DetailPageWrapper/utils.tsx +100 -100
  84. package/src/components/Business/HomePageWrapper/index.less +33 -33
  85. package/src/components/Business/HomePageWrapper/index.md +45 -45
  86. package/src/components/Business/HomePageWrapper/index.tsx +162 -162
  87. package/src/components/Business/SearchSelect/BusinessUtils.ts +1461 -1458
  88. package/src/components/Business/SearchSelect/common.ts +53 -53
  89. package/src/components/Business/SearchSelect/index.md +1137 -1137
  90. package/src/components/Business/SearchSelect/index.tsx +51 -51
  91. package/src/components/Business/SearchSelect/utils.ts +100 -100
  92. package/src/components/Business/StateFlow/index.less +130 -130
  93. package/src/components/Business/StateFlow/index.md +60 -60
  94. package/src/components/Business/StateFlow/index.tsx +29 -29
  95. package/src/components/Business/TreeSearchSelect/index.md +126 -126
  96. package/src/components/Business/TreeSearchSelect/index.tsx +34 -34
  97. package/src/components/Business/TreeSearchSelect/utils.ts +60 -60
  98. package/src/components/Business/columnSettingTable/columnSetting.tsx +763 -763
  99. package/src/components/Business/columnSettingTable/index.less +247 -247
  100. package/src/components/Business/columnSettingTable/index.md +357 -357
  101. package/src/components/Business/columnSettingTable/index.tsx +232 -232
  102. package/src/components/Business/columnSettingTable/sulaSettingTable.tsx +240 -240
  103. package/src/components/Business/columnSettingTable/utils.tsx +68 -68
  104. package/src/components/Functional/AddSelect/index.less +367 -367
  105. package/src/components/Functional/AddSelect/index.md +122 -122
  106. package/src/components/Functional/AddSelect/index.tsx +992 -992
  107. package/src/components/Functional/BillEntry/index.less +371 -371
  108. package/src/components/Functional/BillEntry/index.md +39 -39
  109. package/src/components/Functional/BillEntry/index.tsx +643 -643
  110. package/src/components/Functional/DataImport/index.less +63 -63
  111. package/src/components/Functional/DataImport/index.md +44 -44
  112. package/src/components/Functional/DataImport/index.tsx +695 -689
  113. package/src/components/Functional/DataValidation/index.less +63 -63
  114. package/src/components/Functional/DataValidation/index.md +39 -38
  115. package/src/components/Functional/DataValidation/index.tsx +687 -681
  116. package/src/components/Functional/ExportFunctions/ExportIcon/index.md +37 -37
  117. package/src/components/Functional/ExportFunctions/ExportIcon/index.tsx +59 -59
  118. package/src/components/Functional/QueryMutipleInput/index.less +37 -37
  119. package/src/components/Functional/QueryMutipleInput/index.md +33 -33
  120. package/src/components/Functional/QueryMutipleInput/index.tsx +128 -128
  121. package/src/components/Functional/SearchSelect/index.less +115 -115
  122. package/src/components/Functional/SearchSelect/index.md +141 -141
  123. package/src/components/Functional/SearchSelect/index.tsx +813 -812
  124. package/src/components/Functional/SearchSelect/utils.ts +6 -0
  125. package/src/components/Functional/TreeSearchSelect/index.md +47 -47
  126. package/src/components/Functional/TreeSearchSelect/index.tsx +149 -149
  127. package/src/index.ts +31 -31
  128. package/src/styles/bsDefault.less +1906 -1906
  129. package/src/utils/CheckOneUser/index.md +39 -39
  130. package/src/utils/CheckOneUser/index.ts +51 -51
  131. package/src/utils/checkUtils.ts +39 -39
  132. package/src/utils/enumConfig.ts +10 -10
  133. package/src/utils/index.ts +2 -2
  134. package/src/utils/requestUtils.ts +33 -33
  135. package/src/utils/utils.ts +57 -57
  136. package/tsconfig.json +29 -29
  137. package/typings.d.ts +4 -4
@@ -1,505 +1,505 @@
1
- // @ts-nocheck
2
- import React, { useState, useEffect, useRef, useMemo } from 'react';
3
- import { useLocation } from 'umi';
4
- import { QueryTable } from 'bssula';
5
- import {
6
- handleTextDouble,
7
- handleTextLineFeed,
8
- handleTextOverflow,
9
- handleTooltip,
10
- handleTooltipHours,
11
- tableColumnsImage,
12
- userColumns,
13
- getItemDefaultWidth,
14
- authFn,
15
- queryParams,
16
- } from './utils';
17
- import { Menu, Tooltip,} from 'antd';
18
- import SortableTable from './setting';
19
- import { Resizable } from 'react-resizable';
20
- import quanping from '../../../assets/icon-quanping.svg';
21
- import scanning from '../../../assets/scanning.svg';
22
- import { debounce } from 'lodash';
23
- import ExportIcon from '@/components/Functional/ExportFunctions/ExportIcon';
24
- import ENUM from '@/utils/enumConfig';
25
-
26
- const MemoQueryTable = React.memo(QueryTable);
27
-
28
- const ResizeableTitle = (props) => {
29
- const { onResize, width, ...restProps } = props;
30
-
31
- if (!width) {
32
- return <th {...restProps} />;
33
- }
34
- return (
35
- <Resizable
36
- width={width}
37
- height={0}
38
- onResize={onResize}
39
- draggableOpts={{ enableUserSelectHack: false }}
40
- >
41
- <th {...restProps} />
42
- </Resizable>
43
- );
44
- };
45
-
46
- export default (props: any) => {
47
- const refs = useRef(null);
48
- const [pagePath, setPagePath] = useState('');
49
- // 获取 table columns中所有的 key 防止有的地方是 dataindex
50
- const [checkedList, setCheckedList] = useState(
51
- props.columns.map((d: any) => Array.isArray(d.key || d.dataIndex) ? JSON.stringify(d.key || d.dataIndex) : (d.key || d.dataIndex)),
52
- );
53
- const { pathname } = useLocation();
54
- const [id]: any = useState(
55
- Number(Math.random().toString().substr(2, 0) + Date.now()).toString(36),
56
- );
57
- const [isFullScreen, setIsFnllScreen]: any = useState(false);
58
- // @ts-nocheck
59
- const [value, setValue]: any = useState(props);
60
- const [showColumn, setShowColumns] = useState([]);
61
-
62
- const { isPage = true, pagination } = props;
63
-
64
- const [height, setHeight]: any = useState('100vh');
65
- const sortTableRef = useRef(null);
66
-
67
- // 获取table高度
68
- const getTableHeight = () => {
69
- const cancelHeight = window.top == window ? 303 : 223;
70
- const isFullScreen: any =
71
- document.fullScreen ||
72
- document.webkitIsFullScreen ||
73
- document.mozFullScreen;
74
- const h =
75
- document.body.clientHeight -
76
- (document.querySelector('.table-bssula-summary')?.clientHeight || 0) -
77
- (document.querySelector('.ant-form ant-form-horizontal')?.clientHeight ||
78
- 0) -
79
- (isFullScreen
80
- ? 0
81
- : document.querySelector('.ant-pro-page-container-warp')
82
- ?.clientHeight || 0) -
83
- cancelHeight +
84
- 'px';
85
- setHeight(h);
86
- setValue({ ...value });
87
- };
88
-
89
- //监测是否按下esc键
90
- function checkFull() {
91
- let globalDocument = window?.parent?.document || document;
92
- var isFull =
93
- globalDocument.fullscreenElement ||
94
- globalDocument.mozFullScreenElement ||
95
- globalDocument.webkitFullscreenElement;
96
- if (isFull == undefined) isFull = false;
97
- return isFull;
98
- }
99
-
100
- const getConfigFromlocalstorage = () => {
101
- let config = localStorage.getItem(ENUM.BROWSER_CACHE.COLUMN_CONDITION) || '[]';
102
- let configArray = JSON.parse(config);
103
- let configSetting = configArray.filter(
104
- (item) => item.code === window.location.hash,
105
- );
106
-
107
- if (configSetting.length && configSetting[0].detail) {
108
- return JSON.parse(configSetting[0].detail);
109
- }
110
- return [];
111
- };
112
-
113
- const setInitialTableInfo = () => {
114
- const resourceCodeArray = {};
115
- if (props.actionsRender && props.actionsRender.length) {
116
- props.actionsRender.forEach((item: any) => {
117
- if (item.code) {
118
- if (resourceCodeArray[item.code]) {
119
- resourceCodeArray[item.code + 1] = item;
120
- } else {
121
- resourceCodeArray[item.code] = item;
122
- }
123
- }
124
- });
125
- }
126
- if (props.columns && props.columns.length) {
127
- props.columns.forEach((d: any) => {
128
- if (d.isPermissionColumn && d.render && d.render.length) {
129
- d.render.forEach((inneritem: any) => {
130
- if (inneritem.code) {
131
- if (resourceCodeArray[inneritem.code]) {
132
- resourceCodeArray[inneritem.code + 1] = inneritem;
133
- } else {
134
- resourceCodeArray[inneritem.code] = inneritem;
135
- }
136
- }
137
- });
138
- }
139
- if (d.timeRenderHour) {
140
- d.render = ({ text }: any) =>
141
- handleTooltipHours(text, d.timeRenderHour);
142
- }
143
- // 处理不显示 时分秒的时间
144
- if (d.timeRender) {
145
- d.render = ({ text }: any) => handleTooltip(text, d.timeRender);
146
- }
147
- // 处理文字太长
148
- if (d.textOverflow) {
149
- d.render = ({ text }: any) => handleTextOverflow(text);
150
- }
151
- if (d.images) {
152
- d.render = ({ text }: any) => tableColumnsImage(text);
153
- }
154
- if (d.double) {
155
- d.render = ({ record }: any) =>
156
- handleTextDouble(record[d.textOne], record[d.textTwo]);
157
- }
158
- if (d.lineFeed) {
159
- d.render = ({ text }: any) => handleTextLineFeed(text);
160
- }
161
-
162
- // 处理序号
163
- if (d.indexNumber) {
164
- d.render = ({ index }: any) => index + 1;
165
- }
166
- // 没有值默认显示 - -
167
- if (!d.render) {
168
- d.render = ({ text }: any) => text || '- -';
169
- }
170
- });
171
- setCommonRenderFn(props.columns);
172
- const authButton = localStorage.getItem(ENUM.BROWSER_CACHE.MAIN_AUTH_CODES)
173
- ? JSON.parse(localStorage.getItem(ENUM.BROWSER_CACHE.MAIN_AUTH_CODES) as string)
174
- : [];
175
- Object.keys(resourceCodeArray).forEach((item: any) => {
176
- let Item = item;
177
- if (Number(item.slice(-1)) >= 1) {
178
- Item = item.substr(0, item.length - 1);
179
- }
180
- if (!authButton.filter((itemInner: any) => Item === itemInner).length) {
181
- resourceCodeArray[item].visible = false;
182
- }
183
- });
184
-
185
- }
186
- setValue({
187
- ...value,
188
- columns: [...props.columns],
189
- });
190
- const { columns } = props;
191
- let columnConfig = getConfigFromlocalstorage();
192
- let showColumns = columnConfig.length ? columnConfig.map((item) => {
193
- let inner = columns.filter(
194
- (inneritem) => {
195
- let innerKey = Array.isArray(inneritem.key || inneritem.dataIndex) ? JSON.stringify(inneritem.key || inneritem.dataIndex) : (inneritem.key || inneritem.dataIndex);
196
- let itemKey = Array.isArray(item.key || item.dataIndex) ? JSON.stringify(item.key || item.dataIndex) : (item.key || item.dataIndex);
197
- return innerKey && innerKey === itemKey;
198
- }
199
- )[0];
200
-
201
- return {
202
- ...inner,
203
- ...item,
204
- };
205
- }) : columns.filter(
206
- (column) => {
207
- let columnKey = Array.isArray(column.key || column.dataIndex) ? JSON.stringify(column.key || column.dataIndex) : (column.key || column.dataIndex);
208
- return column.notRegularCheckList || checkedList.indexOf(columnKey) > -1;
209
- }
210
- )
211
- showColumns.forEach((item, index) => {
212
- item.width = item.width || getItemDefaultWidth(item);
213
- item.onHeaderCell = (column) => ({
214
- ...item,
215
- width:
216
- typeof column.width === 'number'
217
- ? column.width
218
- : parseInt(column.width.replace('px', '')),
219
- onResize: handleResize(index),
220
- });
221
- });
222
- setShowColumns([...showColumns]);
223
- }
224
-
225
- //组件初始挂载
226
- useEffect(() => {
227
- getTableHeight();
228
- setInitialTableInfo();
229
- window.addEventListener('resize', (e) => {
230
- watchWinResize();
231
- });
232
-
233
- setPagePath(pathname); // 做处理,记录当前页面渲染的初始pathname,用于进行判断当前列表页面数据是否需要重新渲染
234
- }, []);
235
-
236
- useEffect(() => {
237
- if (props?.columns && value?.columns) {
238
- let newKeys = props.columns.map((d: any) => Array.isArray(d.key || d.dataIndex) ? JSON.stringify(d.key || d.dataIndex) : (d.key || d.dataIndex));
239
- let oldKeys = value.columns.map((d: any) => Array.isArray(d.key || d.dataIndex) ? JSON.stringify(d.key || d.dataIndex) : (d.key || d.dataIndex));
240
- JSON.stringify(newKeys) !== JSON.stringify(oldKeys) && setInitialTableInfo();
241
- }
242
- }, [props?.columns])
243
-
244
-
245
- const watchWinResize = debounce(() => {
246
- getTableHeight();
247
- if (!checkFull()) {
248
- // addTabsNavStyle(true);
249
- // 全屏下按键esc后要执行的动作
250
- // isFullScreen 为true 此时为全屏状态 false 为非全屏状态
251
- if (!isFullScreen) {
252
- // 按下esc键退出全屏
253
- setIsFnllScreen(false);
254
- } else {
255
- setIsFnllScreen(false);
256
- }
257
- }
258
- }, 10);
259
-
260
- const setCommonRenderFn = (columns: any[]) => {
261
- columns.forEach((column) => {
262
- if (column.showDetailUserInfo) {
263
- column.render = ({ text }: any) => userColumns({ name: text });
264
- }
265
- });
266
- };
267
-
268
- // 处理 table 基本参数
269
- const setTableProps = () => {
270
- let tableProps = value.tableProps || {};
271
- tableProps = {
272
- ...tableProps,
273
- size: value.size || 'middle',
274
- defaultPageSize: 20,
275
- pageSize: 20,
276
- initialPaging: {
277
- pagination: pagination
278
- ? false
279
- : {
280
- defaultPageSize: 20,
281
- pageSize: 20,
282
- showTotal: (total: any) => `共 ${total} 条`,
283
- showQuickJumper: true,
284
- hideOnSinglePage: value.hideOnSinglePage || false,
285
- },
286
- },
287
- initialSelectedRowKeys: value.initialSelectedRowKeys || [],
288
- expandable: value.expandable,
289
- scroll: { x: props.overScrollX || 'max-content', y: height },
290
- bordered: value.bordered || false,
291
- sticky: true,
292
- rowClassName: (record: object | null | undefined, index: number) =>
293
- index % 2 === 0 ? 'table_base' : 'table_odd',
294
- ...value.tableProps,
295
- components: {
296
- header: {
297
- cell: ResizeableTitle,
298
- },
299
- },
300
- };
301
-
302
- // @ts-ignore
303
- if (tableProps?.initialPaging?.pagination) {
304
- // @ts-ignore
305
- tableProps.initialPaging.pagination.showSizeChanger = true;
306
- }
307
- return tableProps;
308
- };
309
-
310
-
311
- const ShowFullScreen = () => {
312
- const { itemPath } = props;
313
- if (window.top != window) {
314
- window.parent.postMessage(
315
- {
316
- type: 'screenChange',
317
- id: itemPath,
318
- },
319
- '*',
320
- );
321
- setIsFnllScreen(!isFullScreen);
322
- } else {
323
- const isFullScreen: any =
324
- document.fullScreen ||
325
- document.webkitIsFullScreen ||
326
- document.mozFullScreen;
327
- let contentEle: any = document.querySelector(`body`);
328
- // addTabsNavStyle(isFullScreen);
329
- if (contentEle && !isFullScreen) {
330
- let fullScreenEle =
331
- contentEle.requestFullscreen ||
332
- contentEle.mozRequestFullScreen ||
333
- contentEle.webkitRequestFullScreen ||
334
- contentEle.msRequestFullscreen;
335
- if (fullScreenEle) {
336
- fullScreenEle.call(contentEle);
337
- setIsFnllScreen(true);
338
- // getTableHeight(true);
339
- return;
340
- }
341
- }
342
- if (document && isFullScreen) {
343
- let exitFullScreen =
344
- document.exitFullscreen ||
345
- document.mozCancelFullScreen ||
346
- document.webkitCancelFullScreen ||
347
- document.msExitFullscreen;
348
- if (exitFullScreen) {
349
- exitFullScreen.call(document);
350
- setIsFnllScreen(false);
351
- // getTableHeight();
352
- return;
353
- }
354
- }
355
- }
356
- };
357
-
358
- const handleTimeValue = () => {
359
- let actionsRender = value.actionsRender || [];
360
- actionsRender = [
361
- ...actionsRender,
362
- {
363
- type: 'text',
364
- props: {
365
- children: (
366
- <>
367
- <Tooltip title="列设置">
368
- <span className="ant-dropdown-link">
369
- <SortableTable
370
- ref={sortTableRef}
371
- setShowColumns={setShowColumns}
372
- showColumn={showColumn}
373
- datasource={value?.columns || []}
374
- />
375
- </span>
376
- </Tooltip>
377
- </>
378
- ),
379
- },
380
- },
381
- {
382
- type: 'text',
383
- props: {
384
- children: (
385
- <a>
386
- {isFullScreen ? (
387
- <Tooltip title="取消全屏">
388
- <img
389
- onClick={() => {
390
- ShowFullScreen();
391
- }}
392
- width={32}
393
- src={scanning}
394
- />
395
- </Tooltip>
396
- ) : (
397
- <Tooltip title="全屏">
398
- <img
399
- onClick={() => {
400
- ShowFullScreen();
401
- }}
402
- width={32}
403
- src={quanping}
404
- />
405
- </Tooltip>
406
- )}
407
- </a>
408
- ),
409
- },
410
- },
411
- {
412
- type: 'text',
413
- props: {
414
- children:
415
- value?.exportConfig && authFn(value?.exportConfig?.code) ? (
416
- <ExportIcon
417
- request={{
418
- url: `/oms-ops/excel/exportAsync/${value?.exportConfig?.type}`,
419
- params: value?.exportConfig?.params || queryParams,
420
- }}
421
- tableRef={props.forwardedRef || refs}
422
- />
423
- ) : (
424
- <span />
425
- ),
426
- },
427
- },
428
- ];
429
- if (value.rowSelection) {
430
- value.rowSelection.columnWidth = 50;
431
- }
432
- return {
433
- ...value,
434
- actionsRender,
435
- };
436
- };
437
-
438
- const handleResize =
439
- (index) =>
440
- (e, { size }) => {
441
- setShowColumns((columns: any) => {
442
- let newColumns = [...columns];
443
- newColumns[index] = {
444
- ...newColumns[index],
445
- width: size.width,
446
- };
447
- return [...newColumns];
448
- });
449
- };
450
-
451
- const setVisibleColumn = (columnTitle: string) => {
452
- sortTableRef?.current?.handleTableHeadHidden?.(columnTitle);
453
- };
454
-
455
- const config = {
456
- visibleFieldsCount: 3,
457
- tableWrapperStyle: {
458
- padding: '10px',
459
- background: '#f3f3f3',
460
- },
461
- setVisibleColumn: setVisibleColumn,
462
- itemLayout: {
463
- span: 8, // 栅格占位格数
464
- labelCol: {
465
- // label标签布局;可设置 span、offset
466
- span: 8,
467
- },
468
- wrapperCol: {
469
- // value布局, 方式同labelCol(horizontal状态下配置)
470
- span: 16,
471
- },
472
- },
473
- rowSelection: false, // 默认无多选
474
- ...handleTimeValue(),
475
- tableProps: setTableProps(),
476
- columns: [...showColumn],
477
- ref: props.forwardedRef || refs,
478
- isFullScreen,
479
- };
480
-
481
- useEffect(() => {
482
- if (!localStorage.getItem('isTabChange')) {
483
- if (pagePath === pathname) {
484
- // @ts-ignore
485
- config.ref?.current?.tableRef?.current?.refreshTable();
486
- }
487
- } else {
488
- setTimeout(() => {
489
- // 处理页面刷新两面
490
- localStorage.removeItem('isTabChange');
491
- }, 0);
492
- }
493
- }, [pathname]);
494
-
495
- const memoConfig = useMemo(
496
- () => ({
497
- ...config,
498
- summary: props.summary,
499
- statusMapping: props.statusMapping,
500
- }),
501
- [value, checkedList, showColumn, props.statusMapping],
502
- );
503
-
504
- return <MemoQueryTable {...memoConfig} />;
505
- };
1
+ // @ts-nocheck
2
+ import React, { useState, useEffect, useRef, useMemo } from 'react';
3
+ import { useLocation } from 'umi';
4
+ import { QueryTable } from 'bssula';
5
+ import {
6
+ handleTextDouble,
7
+ handleTextLineFeed,
8
+ handleTextOverflow,
9
+ handleTooltip,
10
+ handleTooltipHours,
11
+ tableColumnsImage,
12
+ userColumns,
13
+ getItemDefaultWidth,
14
+ authFn,
15
+ queryParams,
16
+ } from './utils';
17
+ import { Menu, Tooltip,} from 'antd';
18
+ import SortableTable from './setting';
19
+ import { Resizable } from 'react-resizable';
20
+ import quanping from '../../../assets/icon-quanping.svg';
21
+ import scanning from '../../../assets/scanning.svg';
22
+ import { debounce } from 'lodash';
23
+ import ExportIcon from '@/components/Functional/ExportFunctions/ExportIcon';
24
+ import ENUM from '@/utils/enumConfig';
25
+
26
+ const MemoQueryTable = React.memo(QueryTable);
27
+
28
+ const ResizeableTitle = (props) => {
29
+ const { onResize, width, ...restProps } = props;
30
+
31
+ if (!width) {
32
+ return <th {...restProps} />;
33
+ }
34
+ return (
35
+ <Resizable
36
+ width={width}
37
+ height={0}
38
+ onResize={onResize}
39
+ draggableOpts={{ enableUserSelectHack: false }}
40
+ >
41
+ <th {...restProps} />
42
+ </Resizable>
43
+ );
44
+ };
45
+
46
+ export default (props: any) => {
47
+ const refs = useRef(null);
48
+ const [pagePath, setPagePath] = useState('');
49
+ // 获取 table columns中所有的 key 防止有的地方是 dataindex
50
+ const [checkedList, setCheckedList] = useState(
51
+ props.columns.map((d: any) => Array.isArray(d.key || d.dataIndex) ? JSON.stringify(d.key || d.dataIndex) : (d.key || d.dataIndex)),
52
+ );
53
+ const { pathname } = useLocation();
54
+ const [id]: any = useState(
55
+ Number(Math.random().toString().substr(2, 0) + Date.now()).toString(36),
56
+ );
57
+ const [isFullScreen, setIsFnllScreen]: any = useState(false);
58
+ // @ts-nocheck
59
+ const [value, setValue]: any = useState(props);
60
+ const [showColumn, setShowColumns] = useState([]);
61
+
62
+ const { isPage = true, pagination } = props;
63
+
64
+ const [height, setHeight]: any = useState('100vh');
65
+ const sortTableRef = useRef(null);
66
+
67
+ // 获取table高度
68
+ const getTableHeight = () => {
69
+ const cancelHeight = window.top == window ? 303 : 223;
70
+ const isFullScreen: any =
71
+ document.fullScreen ||
72
+ document.webkitIsFullScreen ||
73
+ document.mozFullScreen;
74
+ const h =
75
+ document.body.clientHeight -
76
+ (document.querySelector('.table-bssula-summary')?.clientHeight || 0) -
77
+ (document.querySelector('.ant-form ant-form-horizontal')?.clientHeight ||
78
+ 0) -
79
+ (isFullScreen
80
+ ? 0
81
+ : document.querySelector('.ant-pro-page-container-warp')
82
+ ?.clientHeight || 0) -
83
+ cancelHeight +
84
+ 'px';
85
+ setHeight(h);
86
+ setValue({ ...value });
87
+ };
88
+
89
+ //监测是否按下esc键
90
+ function checkFull() {
91
+ let globalDocument = window?.parent?.document || document;
92
+ var isFull =
93
+ globalDocument.fullscreenElement ||
94
+ globalDocument.mozFullScreenElement ||
95
+ globalDocument.webkitFullscreenElement;
96
+ if (isFull == undefined) isFull = false;
97
+ return isFull;
98
+ }
99
+
100
+ const getConfigFromlocalstorage = () => {
101
+ let config = localStorage.getItem(ENUM.BROWSER_CACHE.COLUMN_CONDITION) || '[]';
102
+ let configArray = JSON.parse(config);
103
+ let configSetting = configArray.filter(
104
+ (item) => item.code === window.location.hash,
105
+ );
106
+
107
+ if (configSetting.length && configSetting[0].detail) {
108
+ return JSON.parse(configSetting[0].detail);
109
+ }
110
+ return [];
111
+ };
112
+
113
+ const setInitialTableInfo = () => {
114
+ const resourceCodeArray = {};
115
+ if (props.actionsRender && props.actionsRender.length) {
116
+ props.actionsRender.forEach((item: any) => {
117
+ if (item.code) {
118
+ if (resourceCodeArray[item.code]) {
119
+ resourceCodeArray[item.code + 1] = item;
120
+ } else {
121
+ resourceCodeArray[item.code] = item;
122
+ }
123
+ }
124
+ });
125
+ }
126
+ if (props.columns && props.columns.length) {
127
+ props.columns.forEach((d: any) => {
128
+ if (d.isPermissionColumn && d.render && d.render.length) {
129
+ d.render.forEach((inneritem: any) => {
130
+ if (inneritem.code) {
131
+ if (resourceCodeArray[inneritem.code]) {
132
+ resourceCodeArray[inneritem.code + 1] = inneritem;
133
+ } else {
134
+ resourceCodeArray[inneritem.code] = inneritem;
135
+ }
136
+ }
137
+ });
138
+ }
139
+ if (d.timeRenderHour) {
140
+ d.render = ({ text }: any) =>
141
+ handleTooltipHours(text, d.timeRenderHour);
142
+ }
143
+ // 处理不显示 时分秒的时间
144
+ if (d.timeRender) {
145
+ d.render = ({ text }: any) => handleTooltip(text, d.timeRender);
146
+ }
147
+ // 处理文字太长
148
+ if (d.textOverflow) {
149
+ d.render = ({ text }: any) => handleTextOverflow(text);
150
+ }
151
+ if (d.images) {
152
+ d.render = ({ text }: any) => tableColumnsImage(text);
153
+ }
154
+ if (d.double) {
155
+ d.render = ({ record }: any) =>
156
+ handleTextDouble(record[d.textOne], record[d.textTwo]);
157
+ }
158
+ if (d.lineFeed) {
159
+ d.render = ({ text }: any) => handleTextLineFeed(text);
160
+ }
161
+
162
+ // 处理序号
163
+ if (d.indexNumber) {
164
+ d.render = ({ index }: any) => index + 1;
165
+ }
166
+ // 没有值默认显示 - -
167
+ if (!d.render) {
168
+ d.render = ({ text }: any) => text || '- -';
169
+ }
170
+ });
171
+ setCommonRenderFn(props.columns);
172
+ const authButton = localStorage.getItem(ENUM.BROWSER_CACHE.MAIN_AUTH_CODES)
173
+ ? JSON.parse(localStorage.getItem(ENUM.BROWSER_CACHE.MAIN_AUTH_CODES) as string)
174
+ : [];
175
+ Object.keys(resourceCodeArray).forEach((item: any) => {
176
+ let Item = item;
177
+ if (Number(item.slice(-1)) >= 1) {
178
+ Item = item.substr(0, item.length - 1);
179
+ }
180
+ if (!authButton.filter((itemInner: any) => Item === itemInner).length) {
181
+ resourceCodeArray[item].visible = false;
182
+ }
183
+ });
184
+
185
+ }
186
+ setValue({
187
+ ...value,
188
+ columns: [...props.columns],
189
+ });
190
+ const { columns } = props;
191
+ let columnConfig = getConfigFromlocalstorage();
192
+ let showColumns = columnConfig.length ? columnConfig.map((item) => {
193
+ let inner = columns.filter(
194
+ (inneritem) => {
195
+ let innerKey = Array.isArray(inneritem.key || inneritem.dataIndex) ? JSON.stringify(inneritem.key || inneritem.dataIndex) : (inneritem.key || inneritem.dataIndex);
196
+ let itemKey = Array.isArray(item.key || item.dataIndex) ? JSON.stringify(item.key || item.dataIndex) : (item.key || item.dataIndex);
197
+ return innerKey && innerKey === itemKey;
198
+ }
199
+ )[0];
200
+
201
+ return {
202
+ ...inner,
203
+ ...item,
204
+ };
205
+ }) : columns.filter(
206
+ (column) => {
207
+ let columnKey = Array.isArray(column.key || column.dataIndex) ? JSON.stringify(column.key || column.dataIndex) : (column.key || column.dataIndex);
208
+ return column.notRegularCheckList || checkedList.indexOf(columnKey) > -1;
209
+ }
210
+ )
211
+ showColumns.forEach((item, index) => {
212
+ item.width = item.width || getItemDefaultWidth(item);
213
+ item.onHeaderCell = (column) => ({
214
+ ...item,
215
+ width:
216
+ typeof column.width === 'number'
217
+ ? column.width
218
+ : parseInt(column.width.replace('px', '')),
219
+ onResize: handleResize(index),
220
+ });
221
+ });
222
+ setShowColumns([...showColumns]);
223
+ }
224
+
225
+ //组件初始挂载
226
+ useEffect(() => {
227
+ getTableHeight();
228
+ setInitialTableInfo();
229
+ window.addEventListener('resize', (e) => {
230
+ watchWinResize();
231
+ });
232
+
233
+ setPagePath(pathname); // 做处理,记录当前页面渲染的初始pathname,用于进行判断当前列表页面数据是否需要重新渲染
234
+ }, []);
235
+
236
+ useEffect(() => {
237
+ if (props?.columns && value?.columns) {
238
+ let newKeys = props.columns.map((d: any) => Array.isArray(d.key || d.dataIndex) ? JSON.stringify(d.key || d.dataIndex) : (d.key || d.dataIndex));
239
+ let oldKeys = value.columns.map((d: any) => Array.isArray(d.key || d.dataIndex) ? JSON.stringify(d.key || d.dataIndex) : (d.key || d.dataIndex));
240
+ JSON.stringify(newKeys) !== JSON.stringify(oldKeys) && setInitialTableInfo();
241
+ }
242
+ }, [props?.columns])
243
+
244
+
245
+ const watchWinResize = debounce(() => {
246
+ getTableHeight();
247
+ if (!checkFull()) {
248
+ // addTabsNavStyle(true);
249
+ // 全屏下按键esc后要执行的动作
250
+ // isFullScreen 为true 此时为全屏状态 false 为非全屏状态
251
+ if (!isFullScreen) {
252
+ // 按下esc键退出全屏
253
+ setIsFnllScreen(false);
254
+ } else {
255
+ setIsFnllScreen(false);
256
+ }
257
+ }
258
+ }, 10);
259
+
260
+ const setCommonRenderFn = (columns: any[]) => {
261
+ columns.forEach((column) => {
262
+ if (column.showDetailUserInfo) {
263
+ column.render = ({ text }: any) => userColumns({ name: text });
264
+ }
265
+ });
266
+ };
267
+
268
+ // 处理 table 基本参数
269
+ const setTableProps = () => {
270
+ let tableProps = value.tableProps || {};
271
+ tableProps = {
272
+ ...tableProps,
273
+ size: value.size || 'middle',
274
+ defaultPageSize: 20,
275
+ pageSize: 20,
276
+ initialPaging: {
277
+ pagination: pagination
278
+ ? false
279
+ : {
280
+ defaultPageSize: 20,
281
+ pageSize: 20,
282
+ showTotal: (total: any) => `共 ${total} 条`,
283
+ showQuickJumper: true,
284
+ hideOnSinglePage: value.hideOnSinglePage || false,
285
+ },
286
+ },
287
+ initialSelectedRowKeys: value.initialSelectedRowKeys || [],
288
+ expandable: value.expandable,
289
+ scroll: { x: props.overScrollX || 'max-content', y: height },
290
+ bordered: value.bordered || false,
291
+ sticky: true,
292
+ rowClassName: (record: object | null | undefined, index: number) =>
293
+ index % 2 === 0 ? 'table_base' : 'table_odd',
294
+ ...value.tableProps,
295
+ components: {
296
+ header: {
297
+ cell: ResizeableTitle,
298
+ },
299
+ },
300
+ };
301
+
302
+ // @ts-ignore
303
+ if (tableProps?.initialPaging?.pagination) {
304
+ // @ts-ignore
305
+ tableProps.initialPaging.pagination.showSizeChanger = true;
306
+ }
307
+ return tableProps;
308
+ };
309
+
310
+
311
+ const ShowFullScreen = () => {
312
+ const { itemPath } = props;
313
+ if (window.top != window) {
314
+ window.parent.postMessage(
315
+ {
316
+ type: 'screenChange',
317
+ id: itemPath,
318
+ },
319
+ '*',
320
+ );
321
+ setIsFnllScreen(!isFullScreen);
322
+ } else {
323
+ const isFullScreen: any =
324
+ document.fullScreen ||
325
+ document.webkitIsFullScreen ||
326
+ document.mozFullScreen;
327
+ let contentEle: any = document.querySelector(`body`);
328
+ // addTabsNavStyle(isFullScreen);
329
+ if (contentEle && !isFullScreen) {
330
+ let fullScreenEle =
331
+ contentEle.requestFullscreen ||
332
+ contentEle.mozRequestFullScreen ||
333
+ contentEle.webkitRequestFullScreen ||
334
+ contentEle.msRequestFullscreen;
335
+ if (fullScreenEle) {
336
+ fullScreenEle.call(contentEle);
337
+ setIsFnllScreen(true);
338
+ // getTableHeight(true);
339
+ return;
340
+ }
341
+ }
342
+ if (document && isFullScreen) {
343
+ let exitFullScreen =
344
+ document.exitFullscreen ||
345
+ document.mozCancelFullScreen ||
346
+ document.webkitCancelFullScreen ||
347
+ document.msExitFullscreen;
348
+ if (exitFullScreen) {
349
+ exitFullScreen.call(document);
350
+ setIsFnllScreen(false);
351
+ // getTableHeight();
352
+ return;
353
+ }
354
+ }
355
+ }
356
+ };
357
+
358
+ const handleTimeValue = () => {
359
+ let actionsRender = value.actionsRender || [];
360
+ actionsRender = [
361
+ ...actionsRender,
362
+ {
363
+ type: 'text',
364
+ props: {
365
+ children: (
366
+ <>
367
+ <Tooltip title="列设置">
368
+ <span className="ant-dropdown-link">
369
+ <SortableTable
370
+ ref={sortTableRef}
371
+ setShowColumns={setShowColumns}
372
+ showColumn={showColumn}
373
+ datasource={value?.columns || []}
374
+ />
375
+ </span>
376
+ </Tooltip>
377
+ </>
378
+ ),
379
+ },
380
+ },
381
+ {
382
+ type: 'text',
383
+ props: {
384
+ children: (
385
+ <a>
386
+ {isFullScreen ? (
387
+ <Tooltip title="取消全屏">
388
+ <img
389
+ onClick={() => {
390
+ ShowFullScreen();
391
+ }}
392
+ width={32}
393
+ src={scanning}
394
+ />
395
+ </Tooltip>
396
+ ) : (
397
+ <Tooltip title="全屏">
398
+ <img
399
+ onClick={() => {
400
+ ShowFullScreen();
401
+ }}
402
+ width={32}
403
+ src={quanping}
404
+ />
405
+ </Tooltip>
406
+ )}
407
+ </a>
408
+ ),
409
+ },
410
+ },
411
+ {
412
+ type: 'text',
413
+ props: {
414
+ children:
415
+ value?.exportConfig && authFn(value?.exportConfig?.code) ? (
416
+ <ExportIcon
417
+ request={{
418
+ url: `/oms-ops/excel/exportAsync/${value?.exportConfig?.type}`,
419
+ params: value?.exportConfig?.params || queryParams,
420
+ }}
421
+ tableRef={props.forwardedRef || refs}
422
+ />
423
+ ) : (
424
+ <span />
425
+ ),
426
+ },
427
+ },
428
+ ];
429
+ if (value.rowSelection) {
430
+ value.rowSelection.columnWidth = 50;
431
+ }
432
+ return {
433
+ ...value,
434
+ actionsRender,
435
+ };
436
+ };
437
+
438
+ const handleResize =
439
+ (index) =>
440
+ (e, { size }) => {
441
+ setShowColumns((columns: any) => {
442
+ let newColumns = [...columns];
443
+ newColumns[index] = {
444
+ ...newColumns[index],
445
+ width: size.width,
446
+ };
447
+ return [...newColumns];
448
+ });
449
+ };
450
+
451
+ const setVisibleColumn = (columnTitle: string) => {
452
+ sortTableRef?.current?.handleTableHeadHidden?.(columnTitle);
453
+ };
454
+
455
+ const config = {
456
+ visibleFieldsCount: 3,
457
+ tableWrapperStyle: {
458
+ padding: '10px',
459
+ background: '#f3f3f3',
460
+ },
461
+ setVisibleColumn: setVisibleColumn,
462
+ itemLayout: {
463
+ span: 8, // 栅格占位格数
464
+ labelCol: {
465
+ // label标签布局;可设置 span、offset
466
+ span: 8,
467
+ },
468
+ wrapperCol: {
469
+ // value布局, 方式同labelCol(horizontal状态下配置)
470
+ span: 16,
471
+ },
472
+ },
473
+ rowSelection: false, // 默认无多选
474
+ ...handleTimeValue(),
475
+ tableProps: setTableProps(),
476
+ columns: [...showColumn],
477
+ ref: props.forwardedRef || refs,
478
+ isFullScreen,
479
+ };
480
+
481
+ useEffect(() => {
482
+ if (!localStorage.getItem('isTabChange')) {
483
+ if (pagePath === pathname) {
484
+ // @ts-ignore
485
+ config.ref?.current?.tableRef?.current?.refreshTable();
486
+ }
487
+ } else {
488
+ setTimeout(() => {
489
+ // 处理页面刷新两面
490
+ localStorage.removeItem('isTabChange');
491
+ }, 0);
492
+ }
493
+ }, [pathname]);
494
+
495
+ const memoConfig = useMemo(
496
+ () => ({
497
+ ...config,
498
+ summary: props.summary,
499
+ statusMapping: props.statusMapping,
500
+ }),
501
+ [value, checkedList, showColumn, props.statusMapping],
502
+ );
503
+
504
+ return <MemoQueryTable {...memoConfig} />;
505
+ };