@steedos/service-plugin-amis 2.2.52-beta.19 → 2.2.52-beta.22
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.
|
@@ -5,6 +5,8 @@ const Lookup = require('./lookup');
|
|
|
5
5
|
const AmisFormInputs = [
|
|
6
6
|
'text',
|
|
7
7
|
'date',
|
|
8
|
+
'file',
|
|
9
|
+
'image',
|
|
8
10
|
'datetime',
|
|
9
11
|
'time',
|
|
10
12
|
'number',
|
|
@@ -205,6 +207,7 @@ function convertSFieldToAmisField(field, readonly) {
|
|
|
205
207
|
joinValues: false,
|
|
206
208
|
options: getSelectFieldOptions(field),
|
|
207
209
|
extractValue: true,
|
|
210
|
+
clearable: true,
|
|
208
211
|
labelField: 'label',
|
|
209
212
|
valueField: 'value',
|
|
210
213
|
tpl: readonly ? Tpl.getSelectTpl(field) : null
|
|
@@ -313,7 +316,66 @@ function convertSFieldToAmisField(field, readonly) {
|
|
|
313
316
|
}
|
|
314
317
|
break;
|
|
315
318
|
case 'image':
|
|
316
|
-
|
|
319
|
+
rootUrl = Meteor.absoluteUrl('/api/files/images/');
|
|
320
|
+
convertData = {
|
|
321
|
+
type: getAmisStaticFieldType('image', readonly),
|
|
322
|
+
receiver: {
|
|
323
|
+
method: "post",
|
|
324
|
+
url: "${context.rootUrl}/s3/images",
|
|
325
|
+
adaptor: `
|
|
326
|
+
var rootUrl = ${JSON.stringify(rootUrl)};
|
|
327
|
+
payload = {
|
|
328
|
+
status: response.status == 200 ? 0 : response.status,
|
|
329
|
+
msg: response.statusText,
|
|
330
|
+
data: {
|
|
331
|
+
value: payload._id,
|
|
332
|
+
filename: payload.original.name,
|
|
333
|
+
url: rootUrl + payload._id,
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
return payload;
|
|
337
|
+
`,
|
|
338
|
+
headers: {
|
|
339
|
+
Authorization: "Bearer ${context.tenantId},${context.authToken}"
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
if(field.multiple){
|
|
344
|
+
convertData.multiple = true;
|
|
345
|
+
convertData.joinValues = false;
|
|
346
|
+
convertData.extractValue = true;
|
|
347
|
+
}
|
|
348
|
+
break;
|
|
349
|
+
case 'file':
|
|
350
|
+
rootUrl = Meteor.absoluteUrl('/api/files/files/');
|
|
351
|
+
convertData = {
|
|
352
|
+
type: getAmisStaticFieldType('file', readonly),
|
|
353
|
+
receiver: {
|
|
354
|
+
method: "post",
|
|
355
|
+
url: "${context.rootUrl}/s3/files",
|
|
356
|
+
adaptor: `
|
|
357
|
+
var rootUrl = ${JSON.stringify(rootUrl)};
|
|
358
|
+
payload = {
|
|
359
|
+
status: response.status == 200 ? 0 : response.status,
|
|
360
|
+
msg: response.statusText,
|
|
361
|
+
data: {
|
|
362
|
+
value: payload._id,
|
|
363
|
+
name: payload.original.name,
|
|
364
|
+
url: rootUrl + payload._id,
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
return payload;
|
|
368
|
+
`,
|
|
369
|
+
headers: {
|
|
370
|
+
Authorization: "Bearer ${context.tenantId},${context.authToken}"
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
if(field.multiple){
|
|
375
|
+
convertData.multiple = true;
|
|
376
|
+
convertData.joinValues = false;
|
|
377
|
+
convertData.extractValue = true;
|
|
378
|
+
}
|
|
317
379
|
break;
|
|
318
380
|
case 'formula':
|
|
319
381
|
//TODO
|
|
@@ -20,7 +20,7 @@ function getFieldsTemplate(fields, expand){
|
|
|
20
20
|
fieldsName.push(`${field.name}`)
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
if(field.type === 'date' || field.type == 'datetime' || field.type == 'boolean' || field.type == 'select'){
|
|
23
|
+
if(field.type === 'date' || field.type == 'datetime' || field.type == 'boolean' || field.type == 'select' || field.type == 'file'){
|
|
24
24
|
displayFields.push(`${field.name}`)
|
|
25
25
|
}
|
|
26
26
|
}
|
|
@@ -67,16 +67,108 @@ function getSaveQuery(object, recordId, fields, options){
|
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
/*
|
|
71
|
+
img字段值移除URL前缀使其保存时正常保存id,而不是url。
|
|
72
|
+
*/
|
|
73
|
+
function getScriptForRemoveUrlPrefixForImgFields(fields){
|
|
74
|
+
let imgFieldsKeys = [];
|
|
75
|
+
let imgFields = {};
|
|
76
|
+
fields.forEach((item)=>{
|
|
77
|
+
if(item.type === 'image'){
|
|
78
|
+
imgFieldsKeys.push(item.name);
|
|
79
|
+
imgFields[item.name] = {
|
|
80
|
+
name: item.name,
|
|
81
|
+
multiple: item.multiple
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
})
|
|
85
|
+
if(!imgFieldsKeys.length){
|
|
86
|
+
return '';
|
|
87
|
+
}
|
|
88
|
+
return `
|
|
89
|
+
let imgFieldsKeys = ${JSON.stringify(imgFieldsKeys)};
|
|
90
|
+
let imgFields = ${JSON.stringify(imgFields)};
|
|
91
|
+
imgFieldsKeys.forEach((item)=>{
|
|
92
|
+
let imgFieldValue = formData[item];
|
|
93
|
+
if(imgFieldValue && imgFieldValue.length){
|
|
94
|
+
// 因为表单初始化接口的接收适配器中为image字段值添加了url前缀(为了字段编辑时正常显示图片),所以保存时移除(为了字段值保存时正常保存id,而不是url)。
|
|
95
|
+
if(imgFields[item].multiple){
|
|
96
|
+
if(imgFieldValue instanceof Array){
|
|
97
|
+
formData[item] = imgFieldValue.map((value)=>{
|
|
98
|
+
let itemValue = value?.split('/');
|
|
99
|
+
return itemValue[itemValue.length - 1];
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}else{
|
|
103
|
+
let imgValue = imgFieldValue.split('/');
|
|
104
|
+
formData[item] = imgValue[imgValue.length - 1];
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
})
|
|
108
|
+
`
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/*
|
|
112
|
+
file字段值重写使其保存时正常保存id。
|
|
113
|
+
*/
|
|
114
|
+
function getScriptForSimplifiedValueForFileFields(fields){
|
|
115
|
+
let fileFieldsKeys = [];
|
|
116
|
+
let fileFields = {};
|
|
117
|
+
fields.forEach((item)=>{
|
|
118
|
+
if(item.type === 'file'){
|
|
119
|
+
fileFieldsKeys.push(item.name);
|
|
120
|
+
fileFields[item.name] = {
|
|
121
|
+
name: item.name,
|
|
122
|
+
multiple: item.multiple
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
})
|
|
126
|
+
if(!fileFieldsKeys.length){
|
|
127
|
+
return '';
|
|
128
|
+
}
|
|
129
|
+
return `
|
|
130
|
+
let fileFieldsKeys = ${JSON.stringify(fileFieldsKeys)};
|
|
131
|
+
let fileFields = ${JSON.stringify(fileFields)};
|
|
132
|
+
fileFieldsKeys.forEach((item)=>{
|
|
133
|
+
let fileFieldValue = formData[item];
|
|
134
|
+
if(fileFieldValue){
|
|
135
|
+
// 因为表单初始化接口的接收适配器中为file字段值重写了值及格式(为了字段编辑时正常显示附件名、点击附件名正常下载),所以保存时还原(为了字段值保存时正常保存id)。
|
|
136
|
+
if(fileFields[item].multiple){
|
|
137
|
+
if(fileFieldValue instanceof Array && fileFieldValue.length){
|
|
138
|
+
formData[item] = fileFieldValue.map((value)=>{
|
|
139
|
+
if(typeof value === 'object'){
|
|
140
|
+
return value.value;
|
|
141
|
+
}else{
|
|
142
|
+
return value;
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
}else{
|
|
147
|
+
formData[item] = typeof fileFieldValue === 'object' ? fileFieldValue.value : fileFieldValue;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
})
|
|
151
|
+
`
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
function getSaveDataTpl(fields){
|
|
71
155
|
return `
|
|
72
156
|
const formData = api.data.$;
|
|
157
|
+
for (key in formData){
|
|
158
|
+
// image、select等字段清空值后保存的空字符串转换为null。
|
|
159
|
+
if(formData[key] === ''){
|
|
160
|
+
formData[key] = null;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
73
163
|
const objectName = api.data.objectName;
|
|
74
164
|
const fieldsName = Object.keys(formData);
|
|
75
165
|
delete formData.created;
|
|
76
166
|
delete formData.created_by;
|
|
77
167
|
delete formData.modified;
|
|
78
168
|
delete formData.modified_by;
|
|
79
|
-
|
|
169
|
+
delete formData._display;
|
|
170
|
+
${getScriptForRemoveUrlPrefixForImgFields(fields)}
|
|
171
|
+
${getScriptForSimplifiedValueForFileFields(fields)}
|
|
80
172
|
let query = \`mutation{record: \${objectName}__insert(doc: {__saveData}){_id}}\`;
|
|
81
173
|
if(formData.recordId){
|
|
82
174
|
query = \`mutation{record: \${objectName}__update(id: "\${formData.recordId}", doc: {__saveData}){_id}}\`;
|
|
@@ -86,9 +178,9 @@ function getSaveDataTpl(){
|
|
|
86
178
|
`
|
|
87
179
|
}
|
|
88
180
|
|
|
89
|
-
function getSaveRequestAdaptor(){
|
|
181
|
+
function getSaveRequestAdaptor(fields){
|
|
90
182
|
return `
|
|
91
|
-
${getSaveDataTpl()}
|
|
183
|
+
${getSaveDataTpl(fields)}
|
|
92
184
|
api.data = {query: query.replace('{__saveData}', __saveData)};
|
|
93
185
|
return api;
|
|
94
186
|
`
|
|
@@ -79,6 +79,97 @@ function getConvertDataScriptStr(fields){
|
|
|
79
79
|
return scriptStr;
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
+
/*
|
|
83
|
+
img字段值添加URL前缀使其在amis中正常显示图片。
|
|
84
|
+
*/
|
|
85
|
+
function getScriptForAddUrlPrefixForImgFields(fields){
|
|
86
|
+
let imgFieldsKeys = [];
|
|
87
|
+
let imgFields = {};
|
|
88
|
+
let rootUrl = Meteor.absoluteUrl('/api/files/images/');
|
|
89
|
+
fields.forEach((item)=>{
|
|
90
|
+
if(item.type === 'image'){
|
|
91
|
+
imgFieldsKeys.push(item.name);
|
|
92
|
+
imgFields[item.name] = {
|
|
93
|
+
name: item.name,
|
|
94
|
+
multiple: item.multiple
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
})
|
|
98
|
+
if(!imgFieldsKeys.length){
|
|
99
|
+
return '';
|
|
100
|
+
}
|
|
101
|
+
return `
|
|
102
|
+
// image字段值添加URL前缀
|
|
103
|
+
let imgFieldsKeys = ${JSON.stringify(imgFieldsKeys)};
|
|
104
|
+
let imgFields = ${JSON.stringify(imgFields)};
|
|
105
|
+
let rootUrl = ${JSON.stringify(rootUrl)};
|
|
106
|
+
imgFieldsKeys.forEach((item)=>{
|
|
107
|
+
let imgFieldValue = data[item];
|
|
108
|
+
if(imgFieldValue && imgFieldValue.length){
|
|
109
|
+
if(imgFields[item].multiple){
|
|
110
|
+
if(imgFieldValue instanceof Array){
|
|
111
|
+
data[item] = imgFieldValue.map((value)=>{ return rootUrl + value});
|
|
112
|
+
}
|
|
113
|
+
}else{
|
|
114
|
+
data[item] = rootUrl + imgFieldValue;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
})
|
|
118
|
+
`
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/*
|
|
122
|
+
file字段值重写使其在amis中正常显示附件名、点击附件名下载文件。
|
|
123
|
+
*/
|
|
124
|
+
function getScriptForRewriteValueForFileFields(fields){
|
|
125
|
+
let fileFieldsKeys = [];
|
|
126
|
+
let fileFields = {};
|
|
127
|
+
let fileRootUrl = Meteor.absoluteUrl('/api/files/files/');
|
|
128
|
+
fields.forEach((item)=>{
|
|
129
|
+
if(item.type === 'file'){
|
|
130
|
+
fileFieldsKeys.push(item.name);
|
|
131
|
+
fileFields[item.name] = {
|
|
132
|
+
name: item.name,
|
|
133
|
+
multiple: item.multiple
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
})
|
|
137
|
+
if(!fileFieldsKeys.length){
|
|
138
|
+
return '';
|
|
139
|
+
}
|
|
140
|
+
return `
|
|
141
|
+
// file字段值重写以便编辑时正常显示附件名、点击附件名正常下载附件
|
|
142
|
+
let fileFieldsKeys = ${JSON.stringify(fileFieldsKeys)};
|
|
143
|
+
let fileFields = ${JSON.stringify(fileFields)};
|
|
144
|
+
let fileRootUrl = ${JSON.stringify(fileRootUrl)};
|
|
145
|
+
fileFieldsKeys.forEach((item)=>{
|
|
146
|
+
let fileFieldValue = data[item];
|
|
147
|
+
if(fileFieldValue && fileFieldValue.length){
|
|
148
|
+
const fileFieldNames = data._display[item].split(',');
|
|
149
|
+
if(fileFields[item].multiple){
|
|
150
|
+
if(fileFieldValue instanceof Array){
|
|
151
|
+
data[item] = fileFieldValue.map((value, index)=>{
|
|
152
|
+
return {
|
|
153
|
+
value: value,
|
|
154
|
+
name: fileFieldNames[index],
|
|
155
|
+
url: fileRootUrl + value + "?download=true",
|
|
156
|
+
state: "uploaded"
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}else{
|
|
161
|
+
data[item] = {
|
|
162
|
+
value: fileFieldValue,
|
|
163
|
+
name: fileFieldNames[0],
|
|
164
|
+
url: fileRootUrl + fileFieldValue + "?download=true",
|
|
165
|
+
state: "uploaded"
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
})
|
|
170
|
+
`
|
|
171
|
+
}
|
|
172
|
+
|
|
82
173
|
function getEditFormInitApi(object, recordId, fields){
|
|
83
174
|
return {
|
|
84
175
|
method: "post",
|
|
@@ -89,6 +180,14 @@ function getEditFormInitApi(object, recordId, fields){
|
|
|
89
180
|
var data = payload.data.data[0];
|
|
90
181
|
if(data){
|
|
91
182
|
${getConvertDataScriptStr(fields)}
|
|
183
|
+
${getScriptForAddUrlPrefixForImgFields(fields)}
|
|
184
|
+
${getScriptForRewriteValueForFileFields(fields)}
|
|
185
|
+
//初始化接口返回的字段移除字段值为null的字段
|
|
186
|
+
for (key in data){
|
|
187
|
+
if(data[key] === null){
|
|
188
|
+
delete data[key];
|
|
189
|
+
}
|
|
190
|
+
}
|
|
92
191
|
};
|
|
93
192
|
payload.data = data;
|
|
94
193
|
delete payload.extensions;
|
|
@@ -103,7 +202,7 @@ function getSaveApi(object, recordId, fields, options){
|
|
|
103
202
|
method: 'post',
|
|
104
203
|
url: graphql.getApi(),
|
|
105
204
|
data: graphql.getSaveQuery(object, recordId, fields, options),
|
|
106
|
-
requestAdaptor: graphql.getSaveRequestAdaptor(),
|
|
205
|
+
requestAdaptor: graphql.getSaveRequestAdaptor(fields),
|
|
107
206
|
responseData: {
|
|
108
207
|
"recordId": "${record._id}"
|
|
109
208
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@steedos/service-plugin-amis",
|
|
3
|
-
"version": "2.2.52-beta.
|
|
3
|
+
"version": "2.2.52-beta.22",
|
|
4
4
|
"main": "package.service.js",
|
|
5
5
|
"scripts": {},
|
|
6
6
|
"license": "MIT",
|
|
@@ -8,5 +8,5 @@
|
|
|
8
8
|
"publishConfig": {
|
|
9
9
|
"access": "public"
|
|
10
10
|
},
|
|
11
|
-
"gitHead": "
|
|
11
|
+
"gitHead": "52619e601e001d519b3690c0d9dc36737bc20ae0"
|
|
12
12
|
}
|