@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,689 +1,689 @@
1
- /*
2
- * @Description:
3
- * @Author: rodchen
4
- * @Date: 2021-12-01 10:52:08
5
- * @LastEditTime: 2021-12-29 17:11:56
6
- * @LastEditors: rodchen
7
- */
8
- // @ts-nocheck
9
- import React from 'react';
10
- import {
11
- Button,
12
- Card,
13
- Radio,
14
- Checkbox,
15
- Space,
16
- Dropdown,
17
- Menu,
18
- Tooltip,
19
- message,
20
- } from 'antd';
21
- import { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';
22
- import {
23
- ExclamationCircleOutlined,
24
- DownOutlined,
25
- ProfileTwoTone,
26
- UnorderedListOutlined,
27
- } from '@ant-design/icons';
28
- import axios from 'axios';
29
- import './index.less';
30
- import _ from "lodash"
31
-
32
- // const luckysheet = window.luckysheet;
33
-
34
- let itemsTemp = [];
35
- let luckysheet;
36
-
37
- // const mapping = [
38
- // { "key": "skuCode", "name": "SKU编码", "rule": "skuCode" },
39
- // { "key": "quantity", "name": "数量", "rule": "quantity" },
40
- // { "key": "price", "name": "单价", "rule": "price" }
41
- // ]
42
-
43
- const mapping = new Map([
44
- ['skuCode', 'SKU编码'],
45
- ['quantity', '数量'],
46
- ['price', '单价'],
47
- ['regionCode', '库区'],
48
- ['checkQuantity', '实盘数量'],
49
- ['shareRatio', '共享比例'],
50
- ['lotNumberCode', '批号'],
51
- ['warehouseCode', '仓库编码'],
52
- ['regionCode', '库区'],
53
- ['locationCode', '货位'],
54
- ['rowNumber', '货位排数'],
55
- ['layerNumber', '货位层数'],
56
- ['gridNumber', '货位格号'],
57
- ['oldUniqueCode', '原始唯一码'],
58
- ['newUniqueCode', '新唯一码'],
59
- ['relationRecordCode', '单据编码'],
60
- ['remark', '备注'],
61
- ]);
62
-
63
- // for dnd
64
- // fake data generator
65
- const getItems = (count) =>
66
- Array.from({ length: count }, (v, k) => k).map((k) => ({
67
- id: `item-${k}`,
68
- content: `item ${k}`,
69
- }));
70
-
71
- // a little function to help us with reordering the result
72
- const reorder = (list, startIndex, endIndex) => {
73
- const result = Array.from(list);
74
- const [removed] = result.splice(startIndex, 1);
75
- result.splice(endIndex, 0, removed);
76
-
77
- return result;
78
- };
79
-
80
- const grid = 8;
81
-
82
- const getItemStyle = (isDragging, draggableStyle) => ({
83
- // some basic styles to make the items look a bit nicer
84
- userSelect: 'none',
85
- padding: `4px`,
86
- margin: `4px`,
87
- // change background colour if dragging
88
-
89
- // styles we need to apply on draggables
90
- ...draggableStyle,
91
- });
92
-
93
- const getListStyle = (isDraggingOver) => ({
94
- background: isDraggingOver ? '#fff' : '#fff',
95
- display: 'flex',
96
- padding: grid,
97
- overflow: 'auto',
98
- });
99
-
100
- const filterLetters = (i) => {
101
- if (i >= 0 && i <= 25) {
102
- return String.fromCharCode(65 + i);
103
- } else {
104
- return undefined;
105
- }
106
- };
107
-
108
- class DataImport extends React.Component {
109
- constructor(props) {
110
- super(props);
111
- this.props.onRef(this);
112
-
113
- if (props.customerColumnsMapping) {
114
- itemsTemp = props.customerColumnsMapping.map((item, index) => {
115
- return {
116
- id: `item-0${index}`,
117
- content: item.title,
118
- code: item.name,
119
- "ct": { //单元格值格式
120
- "fa": "General", //格式名称为自动格式
121
- "t": "s" //格式类型为数字类型
122
- }
123
- };
124
- })
125
- } else {
126
- itemsTemp = props.columns.map((item, index) => {
127
- if (!mapping.get(item))
128
- throw Error(
129
- `${item} is not in DataImport component, please fix this error`,
130
- );
131
- return {
132
- id: `item-0${index}`,
133
- content: mapping.get(item),
134
- code: item,
135
- "ct": { //单元格值格式
136
- "fa": "General", //格式名称为自动格式
137
- "t": "s" //格式类型为数字类型
138
- }
139
- };
140
- });
141
- }
142
- luckysheet = window.luckysheet;
143
- this.state = {
144
- showErrorData: false,
145
- data: [],
146
- items: [...itemsTemp],
147
- resultData: [],
148
- errorListCheck: false,
149
- };
150
- }
151
-
152
- onDragEnd(result) {
153
- // dropped outside the list
154
- if (!result.destination) {
155
- return;
156
- }
157
-
158
- const items = reorder(
159
- this.state.items,
160
- result.source.index,
161
- result.destination.index,
162
- );
163
-
164
- this.setState({
165
- items,
166
- });
167
-
168
- itemsTemp = items;
169
-
170
- luckysheet.refresh();
171
- }
172
-
173
- getCount = () => {
174
- const { resultData } = this.state;
175
- return {
176
- total: resultData.length,
177
- error: resultData.filter((item) => !item.flag).length,
178
- };
179
- };
180
-
181
- setConfig = (data) => {
182
- const { items } = this.state;
183
- const { notValid } = this.props;
184
- return {
185
- container: 'luckysheet',
186
- showtoolbar: false,
187
- hook: {
188
- columnTitleCellRenderBefore: function (columnAbc, postion, ctx) {
189
- if (columnAbc.name) {
190
- let charCode = columnAbc.name.charCodeAt();
191
- if (charCode - 65 <= items.length) {
192
- columnAbc.name = itemsTemp[charCode - 65]
193
- ? itemsTemp[charCode - 65].content
194
- : (!notValid ? '校验结果' : '');
195
- } else {
196
- columnAbc.name = '';
197
- }
198
- }
199
- },
200
- cellRenderBefore: function (cell, postion, sheetFile, ctx) {
201
- if (cell) {
202
- cell.fs = 10;
203
-
204
-
205
- if (typeof cell.v === 'string') {
206
- cell.m = cell.v = cell.m.trim();
207
- }
208
- if (cell && cell.m && cell.m.indexOf('E+') !== -1) {
209
- cell.v = cell.v.toString()
210
- cell.m = cell.v
211
- }
212
- if (typeof cell.v === 'number') {
213
- cell.v = cell.m
214
- }
215
- }
216
- // console.log(postion);
217
- },
218
- cellAllRenderBefore: function (data, sheetFile, ctx) {
219
- sheetFile.config.borderInfo = [];
220
- // console.info(data,sheetFile,ctx)
221
- },
222
- },
223
- // showtoolbarConfig: {
224
- // undoRedo: true, //撤销重做,注意撤消重做是两个按钮,由这一个配置决定显示还是隐藏
225
- // paintFormat: false, //格式刷
226
- // currencyFormat: false, //货币格式
227
- // percentageFormat: false, //百分比格式
228
- // numberDecrease: false, // '减少小数位数'
229
- // numberIncrease: false, // '增加小数位数
230
- // moreFormats: false, // '更多格式'
231
- // font: true, // '字体'
232
- // fontSize: true, // '字号大小'
233
-
234
- // },
235
- data: [
236
- {
237
- name: 'Cell', //工作表名称
238
- color: '', //工作表颜色
239
- index: 0, //工作表索引
240
- status: 1, //激活状态
241
- order: 0, //工作表的下标
242
- hide: 0, //是否隐藏
243
- row: 36, //行数
244
- column: 18, //列数
245
- defaultRowHeight: 20, //自定义行高
246
- defaultColWidth: 120, //自定义列宽
247
- config: {},
248
- // celldata:
249
- // data && data.length !== 0 ? data : _.flattenDeep(Array.from({ length: 100 }).map((a, b) => Array.from({ length: 100 }).map((c, d) => ({
250
- // "r": b,
251
- // "c": d,
252
- // "v": { "ct": { "fa": "@", "t": "s" }, }
253
- // }))))
254
- // ,
255
- celldata:
256
- data && data.length !== 0 ? data : _.flattenDeep(Array.from({ length: 100 }).map((a, b) => Array.from({ length: 100 }).map((c, d) => ({
257
- "r": b,
258
- "c": d,
259
- "v": { "ct": { "fa": "@", "t": "s" }, }
260
- }))))
261
- ,
262
- scrollLeft: 0, //左右滚动条位置
263
- // "scrollTop": 315, //上下滚动条位置
264
- luckysheet_select_save: [], //选中的区域
265
- calcChain: [], //公式链
266
- isPivotTable: false, //是否数据透视表
267
- pivotTable: {}, //数据透视表设置
268
- filter_select: {}, //筛选范围
269
- filter: null, //筛选配置
270
- luckysheet_alternateformat_save: [], //交替颜色
271
- luckysheet_alternateformat_save_modelCustom: [], //自定义交替颜色
272
- luckysheet_conditionformat_save: {}, //条件格式
273
- frozen: {}, //冻结行列配置
274
- chart: [], //图表配置
275
- zoomRatio: 1, // 缩放比例
276
- image: [], //图片
277
- showGridLines: 1, //是否显示网格线
278
- dataVerification: {}, //数据验证配置
279
- luckysheet_alternateformat_save: [
280
- {
281
- cellrange: {
282
- //单元格范围
283
- row: [0, 1000],
284
- column: [0, 18],
285
- },
286
- format: {
287
- head: {
288
- //页眉颜色
289
- fc: '#6aa84f',
290
- bc: '#ffffff',
291
- },
292
- one: {
293
- //第一种颜色
294
- bc: '#ffffff',
295
- },
296
- two: {
297
- //第二种颜色
298
- bc: '#f2f4f5',
299
- },
300
- foot: {
301
- //页脚颜色
302
- fc: '#000',
303
- bc: '#a5efcc',
304
- },
305
- },
306
- hasRowHeader: false, //含有页眉
307
- hasRowFooter: false, //含有页脚
308
- },
309
- ], //交替颜色
310
- luckysheet_alternateformat_save_modelCustom: [
311
- {
312
- head: {
313
- //页眉颜色
314
- fc: '#6aa84f',
315
- bc: '#ffffff',
316
- },
317
- one: {
318
- //第一种颜色
319
- fc: '#000',
320
- bc: '#ffffff',
321
- },
322
- two: {
323
- //第二种颜色
324
- fc: '#000',
325
- bc: '#e5fbee',
326
- },
327
- foot: {
328
- //页脚颜色
329
- fc: '#000',
330
- bc: '#a5efcc',
331
- },
332
- },
333
- ], //自定义交替颜色
334
- },
335
- ],
336
- cellRightClickConfig: {
337
- copy: false, // 复制
338
- copyAs: false, // 复制为
339
- paste: false, // 粘贴
340
- insertRow: false, // 插入行
341
- insertColumn: false, // 插入列
342
- // deleteRow: false, // 删除选中行
343
- // deleteColumn: false, // 删除选中列
344
- deleteCell: false, // 删除单元格
345
- hideRow: false, // 隐藏选中行和显示选中行
346
- hideColumn: false, // 隐藏选中列和显示选中列
347
- rowHeight: false, // 行高
348
- columnWidth: false, // 列宽
349
- clear: false, // 清除内容
350
- matrix: false, // 矩阵操作选区
351
- sort: false, // 排序选区
352
- filter: false, // 筛选选区
353
- chart: false, // 图表生成
354
- image: false, // 插入图片
355
- link: false, // 插入链接
356
- data: false, // 数据验证
357
- cellFormat: false, // 设置单元格格式
358
- },
359
- showsheetbar: false,
360
- optionstate: false,
361
- showstatisticBarConfig: {
362
- count: false, // 计数栏
363
- view: false, // 打印视图
364
- zoom: false, // 缩放
365
- },
366
- column: 10, //列数
367
- columnHeaderHeight: 30,
368
- lang: 'zh',
369
- defaultFontSize: '10',
370
- frozen: {
371
- type: 'rangeBoth',
372
- range: { row_focus: 1, column_focus: 1 },
373
- },
374
- };
375
- };
376
-
377
- componentDidMount() {
378
- luckysheet.create(this.setConfig([]));
379
- }
380
-
381
- componentWillUnmount() {
382
- // luckysheet.create(this.setConfig([]));
383
- luckysheet.destroy();
384
- }
385
-
386
- getValidateData = () => {
387
- const { resultData } = this.state;
388
-
389
- return {
390
- successData: resultData
391
- .filter((item) => item.flag)
392
- .map(({ flag, checkResults, ...item }) => item),
393
- failData: resultData
394
- .filter((item) => !item.flag)
395
- .map(({ flag, checkResults, ...item }) => item),
396
- };
397
- };
398
-
399
- getData = () => {
400
- console.time();
401
- let sheetData = luckysheet.getSheetData();
402
- let data = JSON.parse(JSON.stringify(sheetData))
403
- .filter((item) => {
404
- return item[0]
405
- })
406
- .map((item) => {
407
- let obj = {};
408
-
409
- item.slice(0, itemsTemp.length).map((innerItem, index) => {
410
- obj[this.state.items[index].code] = innerItem && (innerItem.v === innerItem.m ? innerItem.m : innerItem.v);
411
- });
412
-
413
- return obj;
414
- });
415
-
416
- return data.filter(item => item[this.props.customerColumnsMapping[0].name]);
417
- };
418
-
419
- resetData = () => {
420
- const { validDataUrl, updateData, columns } = this.props;
421
- const resultData = this.getData().filter(d => {
422
- return _.compact(Object.values(d)).length
423
- })
424
-
425
- axios
426
- .post(validDataUrl, {
427
- columns: columns,
428
- data: resultData,
429
- })
430
- .then((result) => {
431
- result = result.data;
432
- if (result.status !== '0') {
433
- message.error(result.msg);
434
- return;
435
- }
436
- const { items } = this.state;
437
- let validIndex = items.length;
438
- let res = result.data;
439
-
440
- let sheetData = luckysheet.getSheetData();
441
-
442
- sheetData.map((item, index) => {
443
- if (!res[index]) return item;
444
-
445
- const changeVMIndex = this.props.columns.findIndex(i => i === 'skuCode');
446
- if(this.props.columns.find(i => i === 'skuCode') && item[changeVMIndex].v !== res[index].skuCode) {
447
- item[changeVMIndex].v = res[index].skuCode;
448
- item[changeVMIndex].m = res[index].skuCode;
449
- }
450
-
451
- if (res[index].flag) {
452
- item[validIndex] = {
453
- ...item[validIndex],
454
- v: '通过',
455
- m: '通过',
456
- fc: 'green', //字体颜色为 "#990000"
457
- };
458
- } else {
459
- item[validIndex] = {
460
- ...item[validIndex],
461
- v: res[index].checkResults,
462
- m: res[index].checkResults,
463
- fc: 'red', //字体颜色为 "#990000"
464
- };
465
- }
466
-
467
- item[validIndex].ct = { fa: 'General', t: 'g' };
468
- });
469
- // sheetData.map((item, index) => {
470
- // luckysheet.setCellValue(index + 1, 4, 345)
471
- // })
472
-
473
- luckysheet.create(
474
- this.setConfig(luckysheet.transToCellData(sheetData)),
475
- );
476
- this.setState({
477
- data: luckysheet.transToCellData(sheetData),
478
- errorListCheck: false,
479
- resultData: res,
480
- });
481
-
482
- console.log(setExportData);
483
- setExportData([123123]);
484
- })
485
- .catch((err) => { });
486
- };
487
-
488
- filterData = (type: string) => {
489
- const { showErrorData, data, resultData } = this.state;
490
- let sheetData = luckysheet.transToData(data).filter((item, index) => {
491
- if (type === 'all') {
492
- return false;
493
- }
494
- if (type === 'error') {
495
- return item[itemsTemp.length] && item[itemsTemp.length].v === '通过';
496
- }
497
- });
498
-
499
- luckysheet.create(this.setConfig(luckysheet.transToCellData(sheetData)));
500
- this.setState({
501
- data: luckysheet.transToCellData(sheetData),
502
- errorListCheck: false,
503
- resultData: type === 'all' ? [] : resultData.filter((item) => item.flag),
504
- });
505
- };
506
-
507
- toggleData = () => {
508
- const { showErrorData, data } = this.state;
509
-
510
- if (showErrorData) {
511
- luckysheet.create(this.setConfig(data));
512
- } else {
513
- let sheetData = luckysheet.getSheetData();
514
- sheetData = sheetData.filter((item, index) => {
515
- return !item[itemsTemp.length] || item[itemsTemp.length].v !== '通过';
516
- });
517
-
518
- luckysheet.create(this.setConfig(luckysheet.transToCellData(sheetData)));
519
- }
520
-
521
- this.setState({
522
- showErrorData: !showErrorData,
523
- });
524
- };
525
-
526
- onChange = (e) => {
527
- this.setState({
528
- radioValue: e.target.value,
529
- });
530
- this.toggleData();
531
- };
532
-
533
- errorChange = (e: any) => {
534
- this.toggleData();
535
- this.setState({
536
- errorListCheck: e.target.checked,
537
- });
538
- };
539
-
540
- menuList = (
541
- <Menu>
542
- <Menu.Item key="1" className="sheet_table-menu_item_text">
543
- <a onClick={() => this.filterData('all')}>清空全部数据</a>
544
- </Menu.Item>
545
- <Menu.Divider />
546
- {!this.props.notValid && <Menu.Item key="2" className="sheet_table-menu_item_text">
547
- <a onClick={() => this.filterData('error')}>仅清空错误数据</a>
548
- </Menu.Item>}
549
- </Menu>
550
- );
551
-
552
- leftMenu = (
553
- <Menu>
554
- <Menu.Item key="3" className="sheet_table-menu_item_text">
555
- <span className="sheet_table_text">请拖动字段来对应列</span>
556
- </Menu.Item>
557
- <Menu.Divider />
558
- <div>
559
- <DragDropContext onDragEnd={(e) => this.onDragEnd(e)}>
560
- <Droppable droppableId="droppable" direction="vertical">
561
- {(provided, snapshot) => (
562
- <div
563
- ref={provided.innerRef}
564
- style={{
565
- ...getListStyle(snapshot.isDraggingOver),
566
- flexDirection: 'column',
567
- }}
568
- {...provided.droppableProps}
569
- >
570
- {this.state.items.map((item, index) => (
571
- <Draggable key={item.id} draggableId={item.id} index={index}>
572
- {(provided, snapshot) => (
573
- <div
574
- ref={provided.innerRef}
575
- {...provided.draggableProps}
576
- {...provided.dragHandleProps}
577
- style={getItemStyle(
578
- snapshot.isDragging,
579
- provided.draggableProps.style,
580
- )}
581
- >
582
- <Space>
583
- <span>{filterLetters(index)} 列 </span>
584
- <Space className="sheet_table_dnd_text">
585
- <UnorderedListOutlined />
586
- {item.content}
587
- </Space>
588
- </Space>
589
- </div>
590
- )}
591
- </Draggable>
592
- ))}
593
- {provided.placeholder}
594
- </div>
595
- )}
596
- </Droppable>
597
- </DragDropContext>
598
- </div>
599
- </Menu>
600
- );
601
-
602
- render() {
603
- const { errorListCheck } = this.state;
604
- const { title, notValid, customerColumnsMapping } = this.props;
605
-
606
- let totalSummary = this.getCount();
607
-
608
- const luckyCss = {
609
- margin: '0px',
610
- padding: '0px',
611
- position: 'absolute',
612
- width: '100%',
613
- height: '100%',
614
- left: '0px',
615
- top: '0px',
616
- };
617
- return (
618
- <>
619
- <div className="sheet_table_top">
620
- <Space>
621
- <span>排序列</span>
622
- <Dropdown
623
- trigger={['click']}
624
- overlay={this.leftMenu}
625
- placement="bottomLeft"
626
- >
627
- <a>
628
- <ProfileTwoTone />
629
- </a>
630
- </Dropdown>
631
- <Tooltip
632
- title={
633
- <>
634
- <span>使用指南:</span>
635
- <br></br>
636
- <span>
637
- 1、拖动数据项,以适配源数据的顺序,如您Excel中数据排序依次为编码、价格和数量,则您也可以将数据项的顺序调整为一致
638
- </span>
639
- <br></br>
640
- <span>2、复制文件数据(多列一起),在文本框内进行粘贴</span>
641
- <br></br>
642
- <span>
643
- 3、点击识别按钮进行数据校验,如全部正确,则点击录入按钮可录入数据,如存在错误数据,则需修改后再进行录入
644
- </span>
645
- </>
646
- }
647
- >
648
- <ExclamationCircleOutlined />
649
- </Tooltip>
650
- </Space>
651
- <Space>
652
- <Dropdown
653
- trigger={['click']}
654
- overlay={this.menuList}
655
- placement="bottomRight"
656
- >
657
- <Button>
658
- 清空
659
- <DownOutlined />
660
- </Button>
661
- </Dropdown>
662
-
663
- {!notValid && <Button type="primary" onClick={this.resetData}>
664
- 识别
665
- </Button>}
666
- </Space>
667
- </div>
668
-
669
- <div style={{ position: 'relative', height: '400px' }}>
670
- <div id="luckysheet" style={luckyCss}></div>
671
- </div>
672
- {!this.props.notValid && <div className="sheet_table_footer">
673
- <span className="sheet_table_footer_l">
674
- 共 {totalSummary.total} 条数据{!notValid && `, 其中错误 ${totalSummary.error} 项`}
675
- </span>
676
- {!notValid && <Space className="sheet_table_footer_r">
677
- <Checkbox
678
- checked={errorListCheck}
679
- onClick={this.errorChange}
680
- ></Checkbox>
681
- 仅展示错误数据
682
- </Space>}
683
- </div>}
684
- </>
685
- );
686
- }
687
- }
688
-
689
- export default DataImport;
1
+ /*
2
+ * @Description:
3
+ * @Author: rodchen
4
+ * @Date: 2021-12-01 10:52:08
5
+ * @LastEditTime: 2021-12-29 17:11:56
6
+ * @LastEditors: rodchen
7
+ */
8
+ // @ts-nocheck
9
+ import React from 'react';
10
+ import {
11
+ Button,
12
+ Card,
13
+ Radio,
14
+ Checkbox,
15
+ Space,
16
+ Dropdown,
17
+ Menu,
18
+ Tooltip,
19
+ message,
20
+ } from 'antd';
21
+ import { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';
22
+ import {
23
+ ExclamationCircleOutlined,
24
+ DownOutlined,
25
+ ProfileTwoTone,
26
+ UnorderedListOutlined,
27
+ } from '@ant-design/icons';
28
+ import axios from 'axios';
29
+ import './index.less';
30
+ import _ from "lodash"
31
+
32
+ // const luckysheet = window.luckysheet;
33
+
34
+ let itemsTemp = [];
35
+ let luckysheet;
36
+
37
+ // const mapping = [
38
+ // { "key": "skuCode", "name": "SKU编码", "rule": "skuCode" },
39
+ // { "key": "quantity", "name": "数量", "rule": "quantity" },
40
+ // { "key": "price", "name": "单价", "rule": "price" }
41
+ // ]
42
+
43
+ const mapping = new Map([
44
+ ['skuCode', 'SKU编码'],
45
+ ['quantity', '数量'],
46
+ ['price', '单价'],
47
+ ['regionCode', '库区'],
48
+ ['checkQuantity', '实盘数量'],
49
+ ['shareRatio', '共享比例'],
50
+ ['lotNumberCode', '批号'],
51
+ ['warehouseCode', '仓库编码'],
52
+ ['regionCode', '库区'],
53
+ ['locationCode', '货位'],
54
+ ['rowNumber', '货位排数'],
55
+ ['layerNumber', '货位层数'],
56
+ ['gridNumber', '货位格号'],
57
+ ['oldUniqueCode', '原始唯一码'],
58
+ ['newUniqueCode', '新唯一码'],
59
+ ['relationRecordCode', '单据编码'],
60
+ ['remark', '备注'],
61
+ ]);
62
+
63
+ // for dnd
64
+ // fake data generator
65
+ const getItems = (count) =>
66
+ Array.from({ length: count }, (v, k) => k).map((k) => ({
67
+ id: `item-${k}`,
68
+ content: `item ${k}`,
69
+ }));
70
+
71
+ // a little function to help us with reordering the result
72
+ const reorder = (list, startIndex, endIndex) => {
73
+ const result = Array.from(list);
74
+ const [removed] = result.splice(startIndex, 1);
75
+ result.splice(endIndex, 0, removed);
76
+
77
+ return result;
78
+ };
79
+
80
+ const grid = 8;
81
+
82
+ const getItemStyle = (isDragging, draggableStyle) => ({
83
+ // some basic styles to make the items look a bit nicer
84
+ userSelect: 'none',
85
+ padding: `4px`,
86
+ margin: `4px`,
87
+ // change background colour if dragging
88
+
89
+ // styles we need to apply on draggables
90
+ ...draggableStyle,
91
+ });
92
+
93
+ const getListStyle = (isDraggingOver) => ({
94
+ background: isDraggingOver ? '#fff' : '#fff',
95
+ display: 'flex',
96
+ padding: grid,
97
+ overflow: 'auto',
98
+ });
99
+
100
+ const filterLetters = (i) => {
101
+ if (i >= 0 && i <= 25) {
102
+ return String.fromCharCode(65 + i);
103
+ } else {
104
+ return undefined;
105
+ }
106
+ };
107
+
108
+ class DataImport extends React.Component {
109
+ constructor(props) {
110
+ super(props);
111
+ this.props.onRef(this);
112
+
113
+ if (props.customerColumnsMapping) {
114
+ itemsTemp = props.customerColumnsMapping.map((item, index) => {
115
+ return {
116
+ id: `item-0${index}`,
117
+ content: item.title,
118
+ code: item.name,
119
+ "ct": { //单元格值格式
120
+ "fa": "General", //格式名称为自动格式
121
+ "t": "s" //格式类型为数字类型
122
+ }
123
+ };
124
+ })
125
+ } else {
126
+ itemsTemp = props.columns.map((item, index) => {
127
+ if (!mapping.get(item))
128
+ throw Error(
129
+ `${item} is not in DataImport component, please fix this error`,
130
+ );
131
+ return {
132
+ id: `item-0${index}`,
133
+ content: mapping.get(item),
134
+ code: item,
135
+ "ct": { //单元格值格式
136
+ "fa": "General", //格式名称为自动格式
137
+ "t": "s" //格式类型为数字类型
138
+ }
139
+ };
140
+ });
141
+ }
142
+ luckysheet = window.luckysheet;
143
+ this.state = {
144
+ showErrorData: false,
145
+ data: [],
146
+ items: [...itemsTemp],
147
+ resultData: [],
148
+ errorListCheck: false,
149
+ };
150
+ }
151
+
152
+ onDragEnd(result) {
153
+ // dropped outside the list
154
+ if (!result.destination) {
155
+ return;
156
+ }
157
+
158
+ const items = reorder(
159
+ this.state.items,
160
+ result.source.index,
161
+ result.destination.index,
162
+ );
163
+
164
+ this.setState({
165
+ items,
166
+ });
167
+
168
+ itemsTemp = items;
169
+
170
+ luckysheet.refresh();
171
+ }
172
+
173
+ getCount = () => {
174
+ const { resultData } = this.state;
175
+ return {
176
+ total: resultData.length,
177
+ error: resultData.filter((item) => !item.flag).length,
178
+ };
179
+ };
180
+
181
+ setConfig = (data) => {
182
+ const { items } = this.state;
183
+ const { notValid } = this.props;
184
+ return {
185
+ container: 'luckysheet',
186
+ showtoolbar: false,
187
+ hook: {
188
+ columnTitleCellRenderBefore: function (columnAbc, postion, ctx) {
189
+ if (columnAbc.name) {
190
+ let charCode = columnAbc.name.charCodeAt();
191
+ if (charCode - 65 <= items.length) {
192
+ columnAbc.name = itemsTemp[charCode - 65]
193
+ ? itemsTemp[charCode - 65].content
194
+ : (!notValid ? '校验结果' : '');
195
+ } else {
196
+ columnAbc.name = '';
197
+ }
198
+ }
199
+ },
200
+ cellRenderBefore: function (cell, postion, sheetFile, ctx) {
201
+ if (cell) {
202
+ cell.fs = 10;
203
+
204
+
205
+ if (typeof cell.v === 'string') {
206
+ cell.m = cell.v = cell.m.trim();
207
+ }
208
+ if (cell && cell.m && cell.m.indexOf('E+') !== -1) {
209
+ cell.v = cell.v.toString()
210
+ cell.m = cell.v
211
+ }
212
+ if (typeof cell.v === 'number') {
213
+ cell.v = cell.m
214
+ }
215
+ }
216
+ // console.log(postion);
217
+ },
218
+ cellAllRenderBefore: function (data, sheetFile, ctx) {
219
+ sheetFile.config.borderInfo = [];
220
+ // console.info(data,sheetFile,ctx)
221
+ },
222
+ },
223
+ // showtoolbarConfig: {
224
+ // undoRedo: true, //撤销重做,注意撤消重做是两个按钮,由这一个配置决定显示还是隐藏
225
+ // paintFormat: false, //格式刷
226
+ // currencyFormat: false, //货币格式
227
+ // percentageFormat: false, //百分比格式
228
+ // numberDecrease: false, // '减少小数位数'
229
+ // numberIncrease: false, // '增加小数位数
230
+ // moreFormats: false, // '更多格式'
231
+ // font: true, // '字体'
232
+ // fontSize: true, // '字号大小'
233
+
234
+ // },
235
+ data: [
236
+ {
237
+ name: 'Cell', //工作表名称
238
+ color: '', //工作表颜色
239
+ index: 0, //工作表索引
240
+ status: 1, //激活状态
241
+ order: 0, //工作表的下标
242
+ hide: 0, //是否隐藏
243
+ row: 36, //行数
244
+ column: 18, //列数
245
+ defaultRowHeight: 20, //自定义行高
246
+ defaultColWidth: 120, //自定义列宽
247
+ config: {},
248
+ // celldata:
249
+ // data && data.length !== 0 ? data : _.flattenDeep(Array.from({ length: 100 }).map((a, b) => Array.from({ length: 100 }).map((c, d) => ({
250
+ // "r": b,
251
+ // "c": d,
252
+ // "v": { "ct": { "fa": "@", "t": "s" }, }
253
+ // }))))
254
+ // ,
255
+ celldata:
256
+ data && data.length !== 0 ? data : _.flattenDeep(Array.from({ length: 100 }).map((a, b) => Array.from({ length: 100 }).map((c, d) => ({
257
+ "r": b,
258
+ "c": d,
259
+ "v": { "ct": { "fa": "@", "t": "s" }, }
260
+ }))))
261
+ ,
262
+ scrollLeft: 0, //左右滚动条位置
263
+ // "scrollTop": 315, //上下滚动条位置
264
+ luckysheet_select_save: [], //选中的区域
265
+ calcChain: [], //公式链
266
+ isPivotTable: false, //是否数据透视表
267
+ pivotTable: {}, //数据透视表设置
268
+ filter_select: {}, //筛选范围
269
+ filter: null, //筛选配置
270
+ luckysheet_alternateformat_save: [], //交替颜色
271
+ luckysheet_alternateformat_save_modelCustom: [], //自定义交替颜色
272
+ luckysheet_conditionformat_save: {}, //条件格式
273
+ frozen: {}, //冻结行列配置
274
+ chart: [], //图表配置
275
+ zoomRatio: 1, // 缩放比例
276
+ image: [], //图片
277
+ showGridLines: 1, //是否显示网格线
278
+ dataVerification: {}, //数据验证配置
279
+ luckysheet_alternateformat_save: [
280
+ {
281
+ cellrange: {
282
+ //单元格范围
283
+ row: [0, 1000],
284
+ column: [0, 18],
285
+ },
286
+ format: {
287
+ head: {
288
+ //页眉颜色
289
+ fc: '#6aa84f',
290
+ bc: '#ffffff',
291
+ },
292
+ one: {
293
+ //第一种颜色
294
+ bc: '#ffffff',
295
+ },
296
+ two: {
297
+ //第二种颜色
298
+ bc: '#f2f4f5',
299
+ },
300
+ foot: {
301
+ //页脚颜色
302
+ fc: '#000',
303
+ bc: '#a5efcc',
304
+ },
305
+ },
306
+ hasRowHeader: false, //含有页眉
307
+ hasRowFooter: false, //含有页脚
308
+ },
309
+ ], //交替颜色
310
+ luckysheet_alternateformat_save_modelCustom: [
311
+ {
312
+ head: {
313
+ //页眉颜色
314
+ fc: '#6aa84f',
315
+ bc: '#ffffff',
316
+ },
317
+ one: {
318
+ //第一种颜色
319
+ fc: '#000',
320
+ bc: '#ffffff',
321
+ },
322
+ two: {
323
+ //第二种颜色
324
+ fc: '#000',
325
+ bc: '#e5fbee',
326
+ },
327
+ foot: {
328
+ //页脚颜色
329
+ fc: '#000',
330
+ bc: '#a5efcc',
331
+ },
332
+ },
333
+ ], //自定义交替颜色
334
+ },
335
+ ],
336
+ cellRightClickConfig: {
337
+ copy: false, // 复制
338
+ copyAs: false, // 复制为
339
+ paste: false, // 粘贴
340
+ insertRow: false, // 插入行
341
+ insertColumn: false, // 插入列
342
+ // deleteRow: false, // 删除选中行
343
+ // deleteColumn: false, // 删除选中列
344
+ deleteCell: false, // 删除单元格
345
+ hideRow: false, // 隐藏选中行和显示选中行
346
+ hideColumn: false, // 隐藏选中列和显示选中列
347
+ rowHeight: false, // 行高
348
+ columnWidth: false, // 列宽
349
+ clear: false, // 清除内容
350
+ matrix: false, // 矩阵操作选区
351
+ sort: false, // 排序选区
352
+ filter: false, // 筛选选区
353
+ chart: false, // 图表生成
354
+ image: false, // 插入图片
355
+ link: false, // 插入链接
356
+ data: false, // 数据验证
357
+ cellFormat: false, // 设置单元格格式
358
+ },
359
+ showsheetbar: false,
360
+ optionstate: false,
361
+ showstatisticBarConfig: {
362
+ count: false, // 计数栏
363
+ view: false, // 打印视图
364
+ zoom: false, // 缩放
365
+ },
366
+ column: 10, //列数
367
+ columnHeaderHeight: 30,
368
+ lang: 'zh',
369
+ defaultFontSize: '10',
370
+ frozen: {
371
+ type: 'rangeBoth',
372
+ range: { row_focus: 1, column_focus: 1 },
373
+ },
374
+ };
375
+ };
376
+
377
+ componentDidMount() {
378
+ luckysheet.create(this.setConfig([]));
379
+ }
380
+
381
+ componentWillUnmount() {
382
+ // luckysheet.create(this.setConfig([]));
383
+ luckysheet.destroy();
384
+ }
385
+
386
+ getValidateData = () => {
387
+ const { resultData } = this.state;
388
+
389
+ return {
390
+ successData: resultData
391
+ .filter((item) => item.flag)
392
+ .map(({ flag, checkResults, ...item }) => item),
393
+ failData: resultData
394
+ .filter((item) => !item.flag)
395
+ .map(({ flag, checkResults, ...item }) => item),
396
+ };
397
+ };
398
+
399
+ getData = () => {
400
+ console.time();
401
+ let sheetData = luckysheet.getSheetData();
402
+ let data = JSON.parse(JSON.stringify(sheetData))
403
+ .filter((item) => {
404
+ return item[0]
405
+ })
406
+ .map((item) => {
407
+ let obj = {};
408
+
409
+ item.slice(0, itemsTemp.length).map((innerItem, index) => {
410
+ obj[this.state.items[index].code] = innerItem && (innerItem.v === innerItem.m ? innerItem.m : innerItem.v);
411
+ });
412
+
413
+ return obj;
414
+ });
415
+
416
+ return data.filter(item => item[this.props.customerColumnsMapping[0].name]);
417
+ };
418
+
419
+ resetData = () => {
420
+ const { validDataUrl, updateData, columns } = this.props;
421
+ const resultData = this.getData().filter(d => {
422
+ return _.compact(Object.values(d)).length
423
+ })
424
+
425
+ axios
426
+ .post(validDataUrl, {
427
+ columns: columns,
428
+ data: resultData,
429
+ })
430
+ .then((result) => {
431
+ result = result.data;
432
+ if (result.status !== '0') {
433
+ message.error(result.msg);
434
+ return;
435
+ }
436
+ const { items } = this.state;
437
+ let validIndex = items.length;
438
+ let res = result.data;
439
+
440
+ let sheetData = luckysheet.getSheetData();
441
+
442
+ sheetData.map((item, index) => {
443
+ if (!res[index]) return item;
444
+
445
+ const changeVMIndex = this.props.columns.findIndex(i => i === 'skuCode');
446
+ if(this.props.columns.find(i => i === 'skuCode') && item[changeVMIndex].v !== res[index].skuCode) {
447
+ item[changeVMIndex].v = res[index].skuCode;
448
+ item[changeVMIndex].m = res[index].skuCode;
449
+ }
450
+
451
+ if (res[index].flag) {
452
+ item[validIndex] = {
453
+ ...item[validIndex],
454
+ v: '通过',
455
+ m: '通过',
456
+ fc: 'green', //字体颜色为 "#990000"
457
+ };
458
+ } else {
459
+ item[validIndex] = {
460
+ ...item[validIndex],
461
+ v: res[index].checkResults,
462
+ m: res[index].checkResults,
463
+ fc: 'red', //字体颜色为 "#990000"
464
+ };
465
+ }
466
+
467
+ item[validIndex].ct = { fa: 'General', t: 'g' };
468
+ });
469
+ // sheetData.map((item, index) => {
470
+ // luckysheet.setCellValue(index + 1, 4, 345)
471
+ // })
472
+
473
+ luckysheet.create(
474
+ this.setConfig(luckysheet.transToCellData(sheetData)),
475
+ );
476
+ this.setState({
477
+ data: luckysheet.transToCellData(sheetData),
478
+ errorListCheck: false,
479
+ resultData: res,
480
+ });
481
+
482
+ console.log(setExportData);
483
+ setExportData([123123]);
484
+ })
485
+ .catch((err) => { });
486
+ };
487
+
488
+ filterData = (type: string) => {
489
+ const { showErrorData, data, resultData } = this.state;
490
+ let sheetData = luckysheet.transToData(data).filter((item, index) => {
491
+ if (type === 'all') {
492
+ return false;
493
+ }
494
+ if (type === 'error') {
495
+ return item[itemsTemp.length] && item[itemsTemp.length].v === '通过';
496
+ }
497
+ });
498
+
499
+ luckysheet.create(this.setConfig(luckysheet.transToCellData(sheetData)));
500
+ this.setState({
501
+ data: luckysheet.transToCellData(sheetData),
502
+ errorListCheck: false,
503
+ resultData: type === 'all' ? [] : resultData.filter((item) => item.flag),
504
+ });
505
+ };
506
+
507
+ toggleData = () => {
508
+ const { showErrorData, data } = this.state;
509
+
510
+ if (showErrorData) {
511
+ luckysheet.create(this.setConfig(data));
512
+ } else {
513
+ let sheetData = luckysheet.getSheetData();
514
+ sheetData = sheetData.filter((item, index) => {
515
+ return !item[itemsTemp.length] || item[itemsTemp.length].v !== '通过';
516
+ });
517
+
518
+ luckysheet.create(this.setConfig(luckysheet.transToCellData(sheetData)));
519
+ }
520
+
521
+ this.setState({
522
+ showErrorData: !showErrorData,
523
+ });
524
+ };
525
+
526
+ onChange = (e) => {
527
+ this.setState({
528
+ radioValue: e.target.value,
529
+ });
530
+ this.toggleData();
531
+ };
532
+
533
+ errorChange = (e: any) => {
534
+ this.toggleData();
535
+ this.setState({
536
+ errorListCheck: e.target.checked,
537
+ });
538
+ };
539
+
540
+ menuList = (
541
+ <Menu>
542
+ <Menu.Item key="1" className="sheet_table-menu_item_text">
543
+ <a onClick={() => this.filterData('all')}>清空全部数据</a>
544
+ </Menu.Item>
545
+ <Menu.Divider />
546
+ {!this.props.notValid && <Menu.Item key="2" className="sheet_table-menu_item_text">
547
+ <a onClick={() => this.filterData('error')}>仅清空错误数据</a>
548
+ </Menu.Item>}
549
+ </Menu>
550
+ );
551
+
552
+ leftMenu = (
553
+ <Menu>
554
+ <Menu.Item key="3" className="sheet_table-menu_item_text">
555
+ <span className="sheet_table_text">请拖动字段来对应列</span>
556
+ </Menu.Item>
557
+ <Menu.Divider />
558
+ <div>
559
+ <DragDropContext onDragEnd={(e) => this.onDragEnd(e)}>
560
+ <Droppable droppableId="droppable" direction="vertical">
561
+ {(provided, snapshot) => (
562
+ <div
563
+ ref={provided.innerRef}
564
+ style={{
565
+ ...getListStyle(snapshot.isDraggingOver),
566
+ flexDirection: 'column',
567
+ }}
568
+ {...provided.droppableProps}
569
+ >
570
+ {this.state.items.map((item, index) => (
571
+ <Draggable key={item.id} draggableId={item.id} index={index}>
572
+ {(provided, snapshot) => (
573
+ <div
574
+ ref={provided.innerRef}
575
+ {...provided.draggableProps}
576
+ {...provided.dragHandleProps}
577
+ style={getItemStyle(
578
+ snapshot.isDragging,
579
+ provided.draggableProps.style,
580
+ )}
581
+ >
582
+ <Space>
583
+ <span>{filterLetters(index)} 列 </span>
584
+ <Space className="sheet_table_dnd_text">
585
+ <UnorderedListOutlined />
586
+ {item.content}
587
+ </Space>
588
+ </Space>
589
+ </div>
590
+ )}
591
+ </Draggable>
592
+ ))}
593
+ {provided.placeholder}
594
+ </div>
595
+ )}
596
+ </Droppable>
597
+ </DragDropContext>
598
+ </div>
599
+ </Menu>
600
+ );
601
+
602
+ render() {
603
+ const { errorListCheck } = this.state;
604
+ const { title, notValid, customerColumnsMapping } = this.props;
605
+
606
+ let totalSummary = this.getCount();
607
+
608
+ const luckyCss = {
609
+ margin: '0px',
610
+ padding: '0px',
611
+ position: 'absolute',
612
+ width: '100%',
613
+ height: '100%',
614
+ left: '0px',
615
+ top: '0px',
616
+ };
617
+ return (
618
+ <>
619
+ <div className="sheet_table_top">
620
+ <Space>
621
+ <span>排序列</span>
622
+ <Dropdown
623
+ trigger={['click']}
624
+ overlay={this.leftMenu}
625
+ placement="bottomLeft"
626
+ >
627
+ <a>
628
+ <ProfileTwoTone />
629
+ </a>
630
+ </Dropdown>
631
+ <Tooltip
632
+ title={
633
+ <>
634
+ <span>使用指南:</span>
635
+ <br></br>
636
+ <span>
637
+ 1、拖动数据项,以适配源数据的顺序,如您Excel中数据排序依次为编码、价格和数量,则您也可以将数据项的顺序调整为一致
638
+ </span>
639
+ <br></br>
640
+ <span>2、复制文件数据(多列一起),在文本框内进行粘贴</span>
641
+ <br></br>
642
+ <span>
643
+ 3、点击识别按钮进行数据校验,如全部正确,则点击录入按钮可录入数据,如存在错误数据,则需修改后再进行录入
644
+ </span>
645
+ </>
646
+ }
647
+ >
648
+ <ExclamationCircleOutlined />
649
+ </Tooltip>
650
+ </Space>
651
+ <Space>
652
+ <Dropdown
653
+ trigger={['click']}
654
+ overlay={this.menuList}
655
+ placement="bottomRight"
656
+ >
657
+ <Button>
658
+ 清空
659
+ <DownOutlined />
660
+ </Button>
661
+ </Dropdown>
662
+
663
+ {!notValid && <Button type="primary" onClick={this.resetData}>
664
+ 识别
665
+ </Button>}
666
+ </Space>
667
+ </div>
668
+
669
+ <div style={{ position: 'relative', height: '400px' }}>
670
+ <div id="luckysheet" style={luckyCss}></div>
671
+ </div>
672
+ {!this.props.notValid && <div className="sheet_table_footer">
673
+ <span className="sheet_table_footer_l">
674
+ 共 {totalSummary.total} 条数据{!notValid && `, 其中错误 ${totalSummary.error} 项`}
675
+ </span>
676
+ {!notValid && <Space className="sheet_table_footer_r">
677
+ <Checkbox
678
+ checked={errorListCheck}
679
+ onClick={this.errorChange}
680
+ ></Checkbox>
681
+ 仅展示错误数据
682
+ </Space>}
683
+ </div>}
684
+ </>
685
+ );
686
+ }
687
+ }
688
+
689
+ export default DataImport;