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