@nocobase/plugin-action-import 1.0.0-alpha.1
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/LICENSE +661 -0
- package/README.md +222 -0
- package/README.zh-CN.md +222 -0
- package/client.d.ts +2 -0
- package/client.js +1 -0
- package/dist/client/ImportActionInitializer.d.ts +9 -0
- package/dist/client/ImportDesigner.d.ts +2 -0
- package/dist/client/ImportModal.d.ts +6 -0
- package/dist/client/ImportPluginProvider.d.ts +3 -0
- package/dist/client/constants.d.ts +1 -0
- package/dist/client/context.d.ts +29 -0
- package/dist/client/index.d.ts +9 -0
- package/dist/client/index.js +24 -0
- package/dist/client/locale/index.d.ts +2 -0
- package/dist/client/schemaSettings.d.ts +2 -0
- package/dist/client/useFields.d.ts +1 -0
- package/dist/client/useImportAction.d.ts +6 -0
- package/dist/client/useShared.d.ts +76 -0
- package/dist/externalVersion.js +18 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +43 -0
- package/dist/locale/en-US.json +28 -0
- package/dist/locale/es-ES.json +27 -0
- package/dist/locale/ko_KR.json +28 -0
- package/dist/locale/pt-BR.json +27 -0
- package/dist/locale/zh-CN.json +29 -0
- package/dist/node_modules/node-xlsx/lib/helpers.js +142 -0
- package/dist/node_modules/node-xlsx/lib/index.js +6 -0
- package/dist/node_modules/node-xlsx/lib/workbook.js +16 -0
- package/dist/node_modules/node-xlsx/package.json +1 -0
- package/dist/node_modules/xlsx/LICENSE +201 -0
- package/dist/node_modules/xlsx/bin/xlsx.njs +302 -0
- package/dist/node_modules/xlsx/bower.json +22 -0
- package/dist/node_modules/xlsx/dist/cpexcel.js +1506 -0
- package/dist/node_modules/xlsx/dist/jszip.js +9000 -0
- package/dist/node_modules/xlsx/dist/shim.min.js +2 -0
- package/dist/node_modules/xlsx/dist/xlsx.core.min.js +18 -0
- package/dist/node_modules/xlsx/dist/xlsx.extendscript.js +31850 -0
- package/dist/node_modules/xlsx/dist/xlsx.full.min.js +24 -0
- package/dist/node_modules/xlsx/dist/xlsx.js +22693 -0
- package/dist/node_modules/xlsx/dist/xlsx.min.js +15 -0
- package/dist/node_modules/xlsx/dist/xlsx.mini.min.js +9 -0
- package/dist/node_modules/xlsx/jszip.js +9000 -0
- package/dist/node_modules/xlsx/package.json +1 -0
- package/dist/node_modules/xlsx/types/index.d.ts +853 -0
- package/dist/node_modules/xlsx/xlsx.js +6 -0
- package/dist/node_modules/xlsx/xlsx.mini.js +10709 -0
- package/dist/node_modules/xlsx/xlsxworker.js +15 -0
- package/dist/server/actions/downloadXlsxTemplate.d.ts +2 -0
- package/dist/server/actions/downloadXlsxTemplate.js +62 -0
- package/dist/server/actions/importXlsx.d.ts +2 -0
- package/dist/server/actions/importXlsx.js +185 -0
- package/dist/server/actions/index.d.ts +2 -0
- package/dist/server/actions/index.js +23 -0
- package/dist/server/index.d.ts +7 -0
- package/dist/server/index.js +59 -0
- package/dist/server/locale/en-US.d.ts +11 -0
- package/dist/server/locale/en-US.js +32 -0
- package/dist/server/locale/fr-FR.d.ts +11 -0
- package/dist/server/locale/fr-FR.js +32 -0
- package/dist/server/locale/index.d.ts +2 -0
- package/dist/server/locale/index.js +40 -0
- package/dist/server/locale/zh-CN.d.ts +12 -0
- package/dist/server/locale/zh-CN.js +33 -0
- package/dist/server/middleware/index.d.ts +2 -0
- package/dist/server/middleware/index.js +34 -0
- package/dist/server/migrations/20240425223956-change-locale-module.d.ts +6 -0
- package/dist/server/migrations/20240425223956-change-locale-module.js +42 -0
- package/dist/server/utils/index.d.ts +6 -0
- package/dist/server/utils/index.js +54 -0
- package/dist/server/utils/transform.d.ts +84 -0
- package/dist/server/utils/transform.js +226 -0
- package/dist/swagger/index.json +33 -0
- package/package.json +41 -0
- package/server.d.ts +2 -0
- package/server.js +1 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */
|
|
2
|
+
importScripts('dist/shim.min.js');
|
|
3
|
+
/* uncomment the next line for encoding support */
|
|
4
|
+
importScripts('dist/cpexcel.js');
|
|
5
|
+
importScripts('jszip.js');
|
|
6
|
+
importScripts('xlsx.js');
|
|
7
|
+
postMessage({t:"ready"});
|
|
8
|
+
|
|
9
|
+
onmessage = function (evt) {
|
|
10
|
+
var v;
|
|
11
|
+
try {
|
|
12
|
+
v = XLSX.read(evt.data.d, {type: evt.data.b});
|
|
13
|
+
postMessage({t:"xlsx", d:JSON.stringify(v)});
|
|
14
|
+
} catch(e) { postMessage({t:"e",d:e.stack||e}); }
|
|
15
|
+
};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
var downloadXlsxTemplate_exports = {};
|
|
29
|
+
__export(downloadXlsxTemplate_exports, {
|
|
30
|
+
downloadXlsxTemplate: () => downloadXlsxTemplate
|
|
31
|
+
});
|
|
32
|
+
module.exports = __toCommonJS(downloadXlsxTemplate_exports);
|
|
33
|
+
var import_node_xlsx = __toESM(require("node-xlsx"));
|
|
34
|
+
async function downloadXlsxTemplate(ctx, next) {
|
|
35
|
+
let { columns } = ctx.request.body;
|
|
36
|
+
const { explain, title } = ctx.request.body;
|
|
37
|
+
if (typeof columns === "string") {
|
|
38
|
+
columns = JSON.parse(columns);
|
|
39
|
+
}
|
|
40
|
+
const header = columns == null ? void 0 : columns.map((column) => column.defaultTitle);
|
|
41
|
+
const data = [header];
|
|
42
|
+
if ((explain == null ? void 0 : explain.trim()) !== "") {
|
|
43
|
+
data.unshift([explain]);
|
|
44
|
+
}
|
|
45
|
+
ctx.body = import_node_xlsx.default.build([
|
|
46
|
+
{
|
|
47
|
+
name: "Sheet 1",
|
|
48
|
+
data,
|
|
49
|
+
options: {}
|
|
50
|
+
}
|
|
51
|
+
]);
|
|
52
|
+
ctx.set({
|
|
53
|
+
"Content-Type": "application/octet-stream",
|
|
54
|
+
// to avoid "invalid character" error in header (RFC)
|
|
55
|
+
"Content-Disposition": `attachment; filename=${encodeURIComponent(title)}.xlsx`
|
|
56
|
+
});
|
|
57
|
+
await next();
|
|
58
|
+
}
|
|
59
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
60
|
+
0 && (module.exports = {
|
|
61
|
+
downloadXlsxTemplate
|
|
62
|
+
});
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
var importXlsx_exports = {};
|
|
29
|
+
__export(importXlsx_exports, {
|
|
30
|
+
importXlsx: () => importXlsx
|
|
31
|
+
});
|
|
32
|
+
module.exports = __toCommonJS(importXlsx_exports);
|
|
33
|
+
var import_utils = require("@nocobase/utils");
|
|
34
|
+
var import_node_xlsx = __toESM(require("node-xlsx"));
|
|
35
|
+
var import_xlsx = __toESM(require("xlsx"));
|
|
36
|
+
var import__ = require("../../");
|
|
37
|
+
const IMPORT_LIMIT_COUNT = 200;
|
|
38
|
+
class Importer {
|
|
39
|
+
repository;
|
|
40
|
+
collection;
|
|
41
|
+
columns;
|
|
42
|
+
items = [];
|
|
43
|
+
headerRow;
|
|
44
|
+
context;
|
|
45
|
+
constructor(ctx) {
|
|
46
|
+
const { resourceName, resourceOf } = ctx.action;
|
|
47
|
+
this.context = ctx;
|
|
48
|
+
this.repository = ctx.db.getRepository(resourceName, resourceOf);
|
|
49
|
+
this.collection = this.repository.collection;
|
|
50
|
+
this.parseXlsx();
|
|
51
|
+
}
|
|
52
|
+
getRows() {
|
|
53
|
+
const workbook = import_xlsx.default.read(this.context.file.buffer, {
|
|
54
|
+
type: "buffer",
|
|
55
|
+
sheetRows: IMPORT_LIMIT_COUNT
|
|
56
|
+
// cellDates: true,
|
|
57
|
+
// raw: false,
|
|
58
|
+
});
|
|
59
|
+
const r = workbook.Sheets[workbook.SheetNames[0]];
|
|
60
|
+
const rows = import_xlsx.default.utils.sheet_to_json(r, { header: 1, defval: null, raw: false });
|
|
61
|
+
return rows;
|
|
62
|
+
}
|
|
63
|
+
parseXlsx() {
|
|
64
|
+
const rows = this.getRows();
|
|
65
|
+
let columns = this.context.request.body.columns;
|
|
66
|
+
if (typeof columns === "string") {
|
|
67
|
+
columns = JSON.parse(columns);
|
|
68
|
+
}
|
|
69
|
+
this.columns = columns.map((column) => {
|
|
70
|
+
return {
|
|
71
|
+
...column,
|
|
72
|
+
field: this.collection.fields.get(column.dataIndex[0])
|
|
73
|
+
};
|
|
74
|
+
}).filter((col) => col.field);
|
|
75
|
+
const str = this.columns.map((column) => column.defaultTitle).join("||");
|
|
76
|
+
for (const row of rows) {
|
|
77
|
+
if (this.hasHeaderRow()) {
|
|
78
|
+
if (row && row.join("").trim()) {
|
|
79
|
+
this.items.push(row);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (str === row.filter((r) => r).join("||")) {
|
|
83
|
+
this.headerRow = row;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
getFieldByIndex(index) {
|
|
88
|
+
return this.columns[index].field;
|
|
89
|
+
}
|
|
90
|
+
async getItems() {
|
|
91
|
+
const items = [];
|
|
92
|
+
for (const row of this.items) {
|
|
93
|
+
const values = {};
|
|
94
|
+
const errors = [];
|
|
95
|
+
for (let index = 0; index < row.length; index++) {
|
|
96
|
+
if (!this.columns[index]) {
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
const column = this.columns[index];
|
|
100
|
+
const { field, defaultTitle } = column;
|
|
101
|
+
let value = row[index];
|
|
102
|
+
if (value === void 0 || value === null) {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
const parser = this.context.db.buildFieldValueParser(field, { ...this.context, column });
|
|
106
|
+
await parser.setValue(typeof value === "string" ? value.trim() : value);
|
|
107
|
+
value = parser.getValue();
|
|
108
|
+
if (parser.errors.length > 0) {
|
|
109
|
+
errors.push(`${defaultTitle}: ${parser.errors.join(";")}`);
|
|
110
|
+
}
|
|
111
|
+
if (value === void 0) {
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
values[field.name] = value;
|
|
115
|
+
}
|
|
116
|
+
items.push({
|
|
117
|
+
row,
|
|
118
|
+
values,
|
|
119
|
+
errors
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
return items;
|
|
123
|
+
}
|
|
124
|
+
hasSortField() {
|
|
125
|
+
return !!this.collection.options.sortable;
|
|
126
|
+
}
|
|
127
|
+
async run() {
|
|
128
|
+
return await this.context.db.sequelize.transaction(async (transaction) => {
|
|
129
|
+
let sort = 0;
|
|
130
|
+
if (this.hasSortField()) {
|
|
131
|
+
sort = await this.repository.model.max("sort", { transaction });
|
|
132
|
+
}
|
|
133
|
+
const result = [[], []];
|
|
134
|
+
for (const { row, values, errors } of await this.getItems()) {
|
|
135
|
+
if (errors.length > 0) {
|
|
136
|
+
row.push(errors.join(";"));
|
|
137
|
+
result[1].push(row);
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
if (this.hasSortField()) {
|
|
141
|
+
values["sort"] = ++sort;
|
|
142
|
+
}
|
|
143
|
+
try {
|
|
144
|
+
const instance = await this.repository.create({
|
|
145
|
+
values,
|
|
146
|
+
transaction,
|
|
147
|
+
logging: false,
|
|
148
|
+
context: this.context
|
|
149
|
+
});
|
|
150
|
+
result[0].push(instance);
|
|
151
|
+
} catch (error) {
|
|
152
|
+
this.context.log.error(error, row);
|
|
153
|
+
row.push(error.message);
|
|
154
|
+
result[1].push(row);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return result;
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
hasHeaderRow() {
|
|
161
|
+
return !!this.headerRow;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
async function importXlsx(ctx, next) {
|
|
165
|
+
const importer = new Importer(ctx);
|
|
166
|
+
if (!importer.hasHeaderRow()) {
|
|
167
|
+
ctx.throw(400, ctx.t("Imported template does not match, please download again.", { ns: import__.namespace }));
|
|
168
|
+
}
|
|
169
|
+
const [success, failure] = await importer.run();
|
|
170
|
+
ctx.body = {
|
|
171
|
+
rows: import_node_xlsx.default.build([
|
|
172
|
+
{
|
|
173
|
+
name: `${(0, import_utils.uid)()}.xlsx`,
|
|
174
|
+
data: [importer.headerRow].concat(failure)
|
|
175
|
+
}
|
|
176
|
+
]),
|
|
177
|
+
successCount: success.length,
|
|
178
|
+
failureCount: failure.length
|
|
179
|
+
};
|
|
180
|
+
await next();
|
|
181
|
+
}
|
|
182
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
183
|
+
0 && (module.exports = {
|
|
184
|
+
importXlsx
|
|
185
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __copyProps = (to, from, except, desc) => {
|
|
6
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
7
|
+
for (let key of __getOwnPropNames(from))
|
|
8
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
9
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
10
|
+
}
|
|
11
|
+
return to;
|
|
12
|
+
};
|
|
13
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
14
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
|
+
var actions_exports = {};
|
|
16
|
+
module.exports = __toCommonJS(actions_exports);
|
|
17
|
+
__reExport(actions_exports, require("./downloadXlsxTemplate"), module.exports);
|
|
18
|
+
__reExport(actions_exports, require("./importXlsx"), module.exports);
|
|
19
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
20
|
+
0 && (module.exports = {
|
|
21
|
+
...require("./downloadXlsxTemplate"),
|
|
22
|
+
...require("./importXlsx")
|
|
23
|
+
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { InstallOptions, Plugin } from '@nocobase/server';
|
|
2
|
+
export declare class PluginActionImportServer extends Plugin {
|
|
3
|
+
beforeLoad(): void;
|
|
4
|
+
load(): Promise<void>;
|
|
5
|
+
install(options: InstallOptions): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
export default PluginActionImportServer;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var server_exports = {};
|
|
19
|
+
__export(server_exports, {
|
|
20
|
+
PluginActionImportServer: () => PluginActionImportServer,
|
|
21
|
+
default: () => server_default
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(server_exports);
|
|
24
|
+
var import_server = require("@nocobase/server");
|
|
25
|
+
var import__ = require("..");
|
|
26
|
+
var import_actions = require("./actions");
|
|
27
|
+
var import_locale = require("./locale");
|
|
28
|
+
var import_middleware = require("./middleware");
|
|
29
|
+
class PluginActionImportServer extends import_server.Plugin {
|
|
30
|
+
beforeLoad() {
|
|
31
|
+
this.app.i18n.addResources("zh-CN", import__.namespace, import_locale.zhCN);
|
|
32
|
+
this.app.i18n.addResources("en-US", import__.namespace, import_locale.enUS);
|
|
33
|
+
}
|
|
34
|
+
async load() {
|
|
35
|
+
this.app.dataSourceManager.afterAddDataSource((dataSource) => {
|
|
36
|
+
var _a;
|
|
37
|
+
if (!((_a = dataSource.collectionManager) == null ? void 0 : _a.db)) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
dataSource.resourceManager.use(import_middleware.importMiddleware);
|
|
41
|
+
dataSource.resourceManager.registerActionHandler("downloadXlsxTemplate", import_actions.downloadXlsxTemplate);
|
|
42
|
+
dataSource.resourceManager.registerActionHandler("importXlsx", import_actions.importXlsx);
|
|
43
|
+
dataSource.acl.setAvailableAction("importXlsx", {
|
|
44
|
+
displayName: '{{t("Import")}}',
|
|
45
|
+
allowConfigureFields: true,
|
|
46
|
+
type: "new-data",
|
|
47
|
+
onNewRecord: true
|
|
48
|
+
});
|
|
49
|
+
dataSource.acl.allow("*", "downloadXlsxTemplate", "loggedIn");
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
async install(options) {
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
var server_default = PluginActionImportServer;
|
|
56
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
57
|
+
0 && (module.exports = {
|
|
58
|
+
PluginActionImportServer
|
|
59
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
Yes: string;
|
|
3
|
+
No: string;
|
|
4
|
+
'can not find value': string;
|
|
5
|
+
'password is empty': string;
|
|
6
|
+
'Incorrect time format': string;
|
|
7
|
+
'Incorrect date format': string;
|
|
8
|
+
'Incorrect email format': string;
|
|
9
|
+
'Illegal percentage format': string;
|
|
10
|
+
};
|
|
11
|
+
export default _default;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var en_US_exports = {};
|
|
19
|
+
__export(en_US_exports, {
|
|
20
|
+
default: () => en_US_default
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(en_US_exports);
|
|
23
|
+
var en_US_default = {
|
|
24
|
+
Yes: "Yes",
|
|
25
|
+
No: "No",
|
|
26
|
+
"can not find value": "can not find value",
|
|
27
|
+
"password is empty": "password is empty",
|
|
28
|
+
"Incorrect time format": "Incorrect time format",
|
|
29
|
+
"Incorrect date format": "Incorrect date format",
|
|
30
|
+
"Incorrect email format": "Incorrect email format",
|
|
31
|
+
"Illegal percentage format": "Illegal percentage format"
|
|
32
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
Yes: string;
|
|
3
|
+
No: string;
|
|
4
|
+
'can not find value': string;
|
|
5
|
+
'password is empty': string;
|
|
6
|
+
'Incorrect time format': string;
|
|
7
|
+
'Incorrect date format': string;
|
|
8
|
+
'Incorrect email format': string;
|
|
9
|
+
'Illegal percentage format': string;
|
|
10
|
+
};
|
|
11
|
+
export default _default;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var fr_FR_exports = {};
|
|
19
|
+
__export(fr_FR_exports, {
|
|
20
|
+
default: () => fr_FR_default
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(fr_FR_exports);
|
|
23
|
+
var fr_FR_default = {
|
|
24
|
+
Yes: "Oui",
|
|
25
|
+
No: "Non",
|
|
26
|
+
"can not find value": "valeur introuvable",
|
|
27
|
+
"password is empty": "le mot de passe est vide",
|
|
28
|
+
"Incorrect time format": "Format de l'heure incorrect",
|
|
29
|
+
"Incorrect date format": "Format de la date incorrect",
|
|
30
|
+
"Incorrect email format": "Format d'email incorrect",
|
|
31
|
+
"Illegal percentage format": "Format de pourcentage ill\xE9gal"
|
|
32
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
var locale_exports = {};
|
|
29
|
+
__export(locale_exports, {
|
|
30
|
+
enUS: () => import_en_US.default,
|
|
31
|
+
zhCN: () => import_zh_CN.default
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(locale_exports);
|
|
34
|
+
var import_en_US = __toESM(require("./en-US"));
|
|
35
|
+
var import_zh_CN = __toESM(require("./zh-CN"));
|
|
36
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
37
|
+
0 && (module.exports = {
|
|
38
|
+
enUS,
|
|
39
|
+
zhCN
|
|
40
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
Yes: string;
|
|
3
|
+
No: string;
|
|
4
|
+
'can not find value': string;
|
|
5
|
+
'password is empty': string;
|
|
6
|
+
'Incorrect time format': string;
|
|
7
|
+
'Incorrect date format': string;
|
|
8
|
+
'Incorrect email format': string;
|
|
9
|
+
'Illegal percentage format': string;
|
|
10
|
+
'Imported template does not match, please download again.': string;
|
|
11
|
+
};
|
|
12
|
+
export default _default;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var zh_CN_exports = {};
|
|
19
|
+
__export(zh_CN_exports, {
|
|
20
|
+
default: () => zh_CN_default
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(zh_CN_exports);
|
|
23
|
+
var zh_CN_default = {
|
|
24
|
+
Yes: "\u662F",
|
|
25
|
+
No: "\u5426",
|
|
26
|
+
"can not find value": "\u627E\u4E0D\u5230\u5BF9\u5E94\u503C",
|
|
27
|
+
"password is empty": "\u5BC6\u7801\u4E3A\u7A7A",
|
|
28
|
+
"Incorrect time format": "\u65F6\u95F4\u683C\u5F0F\u4E0D\u6B63\u786E",
|
|
29
|
+
"Incorrect date format": "\u65E5\u671F\u683C\u5F0F\u4E0D\u6B63\u786E",
|
|
30
|
+
"Incorrect email format": "\u90AE\u7BB1\u683C\u5F0F\u4E0D\u6B63\u786E",
|
|
31
|
+
"Illegal percentage format": "\u767E\u5206\u6BD4\u683C\u5F0F\u6709\u8BEF",
|
|
32
|
+
"Imported template does not match, please download again.": "\u5BFC\u5165\u6A21\u677F\u4E0D\u5339\u914D\uFF0C\u8BF7\u68C0\u67E5\u5BFC\u5165\u6587\u4EF6\u6807\u9898\u884C\u6216\u91CD\u65B0\u4E0B\u8F7D\u5BFC\u5165\u6A21\u677F"
|
|
33
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var middleware_exports = {};
|
|
19
|
+
__export(middleware_exports, {
|
|
20
|
+
importMiddleware: () => importMiddleware
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(middleware_exports);
|
|
23
|
+
var import_utils = require("@nocobase/utils");
|
|
24
|
+
async function importMiddleware(ctx, next) {
|
|
25
|
+
if (ctx.action.actionName !== "importXlsx") {
|
|
26
|
+
return next();
|
|
27
|
+
}
|
|
28
|
+
const upload = (0, import_utils.koaMulter)().single("file");
|
|
29
|
+
return upload(ctx, next);
|
|
30
|
+
}
|
|
31
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
32
|
+
0 && (module.exports = {
|
|
33
|
+
importMiddleware
|
|
34
|
+
});
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var change_locale_module_exports = {};
|
|
19
|
+
__export(change_locale_module_exports, {
|
|
20
|
+
default: () => change_locale_module_default
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(change_locale_module_exports);
|
|
23
|
+
var import_server = require("@nocobase/server");
|
|
24
|
+
class change_locale_module_default extends import_server.Migration {
|
|
25
|
+
on = "afterLoad";
|
|
26
|
+
// 'beforeLoad' or 'afterLoad'
|
|
27
|
+
appVersion = "<1.0.0-alpha.1";
|
|
28
|
+
async up() {
|
|
29
|
+
const repo = this.db.getRepository("localizationTexts");
|
|
30
|
+
if (!repo) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
await repo.update({
|
|
34
|
+
filter: {
|
|
35
|
+
module: "resources.import"
|
|
36
|
+
},
|
|
37
|
+
values: {
|
|
38
|
+
module: "resources.action-import"
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|