@ticatec/batch-data-uploader 0.0.9 → 0.0.12
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.
- package/dist/BaseEncodingTemplate.d.ts +8 -7
- package/dist/BaseEncodingTemplate.js +20 -3
- package/dist/BaseTemplate.d.ts +4 -0
- package/dist/BaseTemplate.js +22 -9
- package/dist/BaseUploadTemplate.js +1 -1
- package/dist/DataColumn.d.ts +4 -0
- package/dist/EncodingWizard.svelte +2 -1
- package/dist/i18n_resources/batch_en_resource.d.ts +1 -0
- package/dist/i18n_resources/batch_en_resource.js +2 -1
- package/dist/i18n_resources/i18nKeys.d.ts +4 -0
- package/dist/i18n_resources/i18nKeys.js +4 -0
- package/package.json +5 -5
|
@@ -2,24 +2,25 @@ import BaseTemplate from "./BaseTemplate";
|
|
|
2
2
|
import type DataColumn from "./DataColumn";
|
|
3
3
|
import type { DataColumn as TableColumn } from "@ticatec/uniface-element/DataTable";
|
|
4
4
|
export default abstract class BaseEncodingTemplate extends BaseTemplate {
|
|
5
|
+
private hintColumn;
|
|
5
6
|
private validColumn;
|
|
6
7
|
protected constructor(columns: Array<DataColumn>, rowOffset?: number);
|
|
7
|
-
/**
|
|
8
|
-
* 检查一行的数据是否合法
|
|
9
|
-
* @param row
|
|
10
|
-
* @protected
|
|
11
|
-
*/
|
|
12
|
-
protected abstract isDataValid(row: any): boolean;
|
|
13
8
|
/**
|
|
14
9
|
*
|
|
15
10
|
* @param rows
|
|
16
11
|
* @protected
|
|
17
12
|
*/
|
|
18
13
|
protected abstract encodeData(rows: Array<any>): Promise<Array<any>>;
|
|
14
|
+
/**
|
|
15
|
+
* 检查数据
|
|
16
|
+
* @param row
|
|
17
|
+
* @protected
|
|
18
|
+
*/
|
|
19
|
+
protected abstract validateData(row: any): Promise<any>;
|
|
19
20
|
/**
|
|
20
21
|
* 数据集是否有效
|
|
21
22
|
*/
|
|
22
|
-
|
|
23
|
+
get valid(): boolean;
|
|
23
24
|
/**
|
|
24
25
|
* 从服务器抓取数据,然后根据主键进行数据合并
|
|
25
26
|
* @param rows
|
|
@@ -4,16 +4,29 @@ import i18nKeys from "./i18n_resources/i18nKeys";
|
|
|
4
4
|
const ValidData = `<span style="color: #76FF03">${getI18nText(i18nKeys.textValid)}</span>`;
|
|
5
5
|
const InvalidData = `<span style="color: #ff3e00">${getI18nText(i18nKeys.textInvalid)}</span>`;
|
|
6
6
|
export default class BaseEncodingTemplate extends BaseTemplate {
|
|
7
|
+
hintColumn = {
|
|
8
|
+
text: getI18nText(i18nKeys.labelHint),
|
|
9
|
+
field: "hint",
|
|
10
|
+
width: 150,
|
|
11
|
+
resizable: true
|
|
12
|
+
};
|
|
7
13
|
validColumn = {
|
|
8
14
|
text: getI18nText(i18nKeys.labelValid),
|
|
15
|
+
field: "valid",
|
|
9
16
|
width: 90,
|
|
10
17
|
align: 'center',
|
|
11
18
|
escapeHTML: true,
|
|
12
|
-
formatter:
|
|
19
|
+
formatter: valid => valid ? ValidData : InvalidData
|
|
13
20
|
};
|
|
14
21
|
constructor(columns, rowOffset = 1) {
|
|
15
22
|
super(columns, rowOffset);
|
|
16
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* 数据集是否有效
|
|
26
|
+
*/
|
|
27
|
+
get valid() {
|
|
28
|
+
return this._list.filter(row => !row.valid).length == 0;
|
|
29
|
+
}
|
|
17
30
|
/**
|
|
18
31
|
* 从服务器抓取数据,然后根据主键进行数据合并
|
|
19
32
|
* @param rows
|
|
@@ -23,12 +36,16 @@ export default class BaseEncodingTemplate extends BaseTemplate {
|
|
|
23
36
|
let list = await this.encodeData(this.extractData(rows));
|
|
24
37
|
rows.forEach((item, idx) => {
|
|
25
38
|
if (list[idx]) {
|
|
26
|
-
|
|
39
|
+
let data = list[idx];
|
|
40
|
+
item.data = { ...item.data, ...data };
|
|
41
|
+
let result = this.validateData(data);
|
|
42
|
+
item.valid = result.valid;
|
|
43
|
+
item.hint = result.hint;
|
|
27
44
|
}
|
|
28
45
|
});
|
|
29
46
|
return rows;
|
|
30
47
|
}
|
|
31
48
|
get columns() {
|
|
32
|
-
return [...this.
|
|
49
|
+
return [...super.columns, this.hintColumn, this.validColumn];
|
|
33
50
|
}
|
|
34
51
|
}
|
package/dist/BaseTemplate.d.ts
CHANGED
package/dist/BaseTemplate.js
CHANGED
|
@@ -34,14 +34,20 @@ export default class BaseTemplate {
|
|
|
34
34
|
const rows = [];
|
|
35
35
|
for (let rowIndex = range.s.r + this.rowOffset; rowIndex <= range.e.r; rowIndex++) {
|
|
36
36
|
const rowObject = {};
|
|
37
|
+
let dummyCount = 0;
|
|
37
38
|
for (let i = 0; i < this._columns.length; i++) {
|
|
38
39
|
const colDef = this._columns[i];
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
if (colDef.dummy) {
|
|
41
|
+
dummyCount++;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
const cellAddress = { r: rowIndex, c: i - dummyCount };
|
|
45
|
+
const cellRef = XLSX.utils.encode_cell(cellAddress);
|
|
46
|
+
const cell = sheet[cellRef];
|
|
47
|
+
const rawValue = cell?.v;
|
|
48
|
+
const formattedValue = colDef.parser ? colDef.parser(rawValue) : rawValue;
|
|
49
|
+
utils.setNestedValue(rowObject, colDef.field, formattedValue);
|
|
50
|
+
}
|
|
45
51
|
}
|
|
46
52
|
rows.push(this.wrapData(rowObject));
|
|
47
53
|
}
|
|
@@ -56,7 +62,8 @@ export default class BaseTemplate {
|
|
|
56
62
|
let result = {};
|
|
57
63
|
for (let col of this._columns) {
|
|
58
64
|
if (col.visible != false && col.ignore != false) {
|
|
59
|
-
|
|
65
|
+
let data = item.data;
|
|
66
|
+
utils.setNestedValue(result, col.field, utils.getNestedValue(data, col.field));
|
|
60
67
|
}
|
|
61
68
|
}
|
|
62
69
|
return result;
|
|
@@ -69,13 +76,13 @@ export default class BaseTemplate {
|
|
|
69
76
|
* @protected
|
|
70
77
|
*/
|
|
71
78
|
wrapData(data) {
|
|
72
|
-
return data;
|
|
79
|
+
return { data };
|
|
73
80
|
}
|
|
74
81
|
/**
|
|
75
82
|
* 获取表格的列定义
|
|
76
83
|
*/
|
|
77
84
|
get columns() {
|
|
78
|
-
return this._columns.map(col => ({ ...col }));
|
|
85
|
+
return this._columns.map(col => ({ ...col, field: `data.${col.field}` }));
|
|
79
86
|
}
|
|
80
87
|
/**
|
|
81
88
|
* 获取数据
|
|
@@ -83,4 +90,10 @@ export default class BaseTemplate {
|
|
|
83
90
|
get list() {
|
|
84
91
|
return [...this._list];
|
|
85
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* 获取实际的数据列表
|
|
95
|
+
*/
|
|
96
|
+
get dataList() {
|
|
97
|
+
return this._list.map(row => row.data);
|
|
98
|
+
}
|
|
86
99
|
}
|
|
@@ -71,7 +71,7 @@ export default class BaseUploadTemplate extends BaseTemplate {
|
|
|
71
71
|
* 获取表格的列定义
|
|
72
72
|
*/
|
|
73
73
|
get columns() {
|
|
74
|
-
return [...
|
|
74
|
+
return [...super.columns, statusColumn];
|
|
75
75
|
}
|
|
76
76
|
/**
|
|
77
77
|
* 导出处理异常的数据
|
package/dist/DataColumn.d.ts
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
label: getI18nText(i18nKeys.button.confirm),
|
|
31
31
|
type: 'primary',
|
|
32
32
|
handler: ()=> {
|
|
33
|
-
confirmCallback?.(template.
|
|
33
|
+
confirmCallback?.(template.dataList);
|
|
34
34
|
closeHandler?.();
|
|
35
35
|
}
|
|
36
36
|
}
|
|
@@ -51,6 +51,7 @@
|
|
|
51
51
|
actions = [btnConfirm, ...actions]
|
|
52
52
|
}
|
|
53
53
|
} catch (ex) {
|
|
54
|
+
console.error(ex);
|
|
54
55
|
window.Toast.show(getI18nText(i18nKeys.parseFailure, {name: excelFile.name}));
|
|
55
56
|
} finally {
|
|
56
57
|
window.Indicator.hide();
|
|
@@ -22,6 +22,10 @@ const i18nKeys = {
|
|
|
22
22
|
key: 'batchUploading.labelValid',
|
|
23
23
|
text: langRes.batchUploading.labelValid
|
|
24
24
|
},
|
|
25
|
+
labelHint: {
|
|
26
|
+
key: 'batchUploading.labelValid',
|
|
27
|
+
text: langRes.batchUploading.labelHint
|
|
28
|
+
},
|
|
25
29
|
labelStatus: {
|
|
26
30
|
key: 'batchUploading.labelStatus',
|
|
27
31
|
text: langRes.batchUploading.labelStatus
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ticatec/batch-data-uploader",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.12",
|
|
4
4
|
"description": "A reusable Svelte component for batch uploading Excel data with support for error handling, multi-language, and preprocessing.",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"dev": "vite dev",
|
|
@@ -48,18 +48,18 @@
|
|
|
48
48
|
"import": "./dist/BaseUploadTemplate.js"
|
|
49
49
|
},
|
|
50
50
|
"./BaseEncodingTemplate": {
|
|
51
|
-
"types": "./dist/BaseEncodingTemplate.
|
|
52
|
-
"import": "./dist/BaseEncodingTemplate.
|
|
51
|
+
"types": "./dist/BaseEncodingTemplate.d.ts",
|
|
52
|
+
"import": "./dist/BaseEncodingTemplate.js"
|
|
53
53
|
},
|
|
54
54
|
"./DataColumn": {
|
|
55
55
|
"types": "./dist/DataColumn.d.ts",
|
|
56
56
|
"import": "./dist/DataColumn.js"
|
|
57
57
|
},
|
|
58
|
-
"./FileUploadWizard
|
|
58
|
+
"./FileUploadWizard": {
|
|
59
59
|
"types": "./dist/FileUploadWizard.svelte.d.ts",
|
|
60
60
|
"import": "./dist/FileUploadWizard.svelte"
|
|
61
61
|
},
|
|
62
|
-
"./EncodingWizard
|
|
62
|
+
"./EncodingWizard": {
|
|
63
63
|
"types": "./dist/EncodingWizard.svelte.d.ts",
|
|
64
64
|
"import": "./dist/EncodingWizard.svelte"
|
|
65
65
|
}
|