@bit-sun/business-component 2.0.37 → 2.0.39-alpha.0

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