@bit-sun/business-component 2.1.18 → 2.1.19

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 +1369 -2777
  15. package/dist/index.js +1369 -2777
  16. package/dist/utils/TableUtils.d.ts +2 -2
  17. package/dist/utils/utils.d.ts +1 -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 -319
  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 +507 -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 +1530 -1478
  95. package/src/components/Business/SearchSelect/common.ts +53 -53
  96. package/src/components/Business/SearchSelect/index.md +1197 -1137
  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 -122
  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 +57 -57
  148. package/tsconfig.json +29 -29
  149. package/typings.d.ts +4 -4
@@ -1,507 +1,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
- 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
+ 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
+ };