@steedos/service-plugin-amis 2.2.52-beta.21 → 2.2.52-beta.25
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.txt +2 -3
- package/main/default/client/tailwind.client.js +16 -1
- package/main/default/services/metadata/listviews.service.js +9 -0
- package/main/default/services/utils/fields/index.js +32 -0
- package/main/default/services/utils/graphql.js +46 -1
- package/main/default/services/utils/object-record.js +53 -0
- package/package.json +2 -2
- package/public/tailwind/tailwind.css +1 -0
- package/public/tailwind/tailwind.js +70 -0
|
@@ -252,15 +252,21 @@ module.exports = {
|
|
|
252
252
|
operators: getFieldOperators(field.type)
|
|
253
253
|
});
|
|
254
254
|
break;
|
|
255
|
+
// 以下date 、datetime、time 不能作为amis 表单项的格式 . filters 对此格式做个特殊兼容,
|
|
255
256
|
case 'date':
|
|
257
|
+
// amins的format不支持Z后缀,只能用+offset格式 .
|
|
258
|
+
// 华炎魔方中日期字段存的是utc的0点
|
|
256
259
|
fields.push({
|
|
257
260
|
label: field.label,
|
|
258
261
|
type: field.type,
|
|
259
262
|
name: field.name,
|
|
263
|
+
format: "YYYY-MM-DDT00:00:00+00:00",
|
|
260
264
|
operators: getFieldOperators(field.type)
|
|
261
265
|
});
|
|
262
266
|
break;
|
|
263
267
|
case 'datetime':
|
|
268
|
+
// 这里不需要配置format,因为日期时间是记时区的,amins中日期时间控件输出本地时间值的
|
|
269
|
+
// 即amins中日期时间控件的format默认值为"YYYY-MM-DDTHH:mm+08:00"正好满足需求
|
|
264
270
|
fields.push({
|
|
265
271
|
label: field.label,
|
|
266
272
|
type: field.type,
|
|
@@ -269,10 +275,13 @@ module.exports = {
|
|
|
269
275
|
});
|
|
270
276
|
break;
|
|
271
277
|
case 'time':
|
|
278
|
+
//amins的format不支持Z后缀,只能用+offset格式
|
|
279
|
+
// 华炎魔方中时间字段存的是1970-01-01的utc时间
|
|
272
280
|
fields.push({
|
|
273
281
|
label: field.label,
|
|
274
282
|
type: field.type,
|
|
275
283
|
name: field.name,
|
|
284
|
+
format: "1970-01-01THH:mm+00:00",
|
|
276
285
|
operators: getFieldOperators(field.type)
|
|
277
286
|
});
|
|
278
287
|
break;
|
|
@@ -5,6 +5,7 @@ const Lookup = require('./lookup');
|
|
|
5
5
|
const AmisFormInputs = [
|
|
6
6
|
'text',
|
|
7
7
|
'date',
|
|
8
|
+
'file',
|
|
8
9
|
'image',
|
|
9
10
|
'datetime',
|
|
10
11
|
'time',
|
|
@@ -332,6 +333,37 @@ payload = {
|
|
|
332
333
|
url: rootUrl + payload._id,
|
|
333
334
|
}
|
|
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
|
+
}
|
|
335
367
|
return payload;
|
|
336
368
|
`,
|
|
337
369
|
headers: {
|
|
@@ -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
|
}
|
|
@@ -108,6 +108,49 @@ function getScriptForRemoveUrlPrefixForImgFields(fields){
|
|
|
108
108
|
`
|
|
109
109
|
}
|
|
110
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
|
+
|
|
111
154
|
function getSaveDataTpl(fields){
|
|
112
155
|
return `
|
|
113
156
|
const formData = api.data.$;
|
|
@@ -123,7 +166,9 @@ function getSaveDataTpl(fields){
|
|
|
123
166
|
delete formData.created_by;
|
|
124
167
|
delete formData.modified;
|
|
125
168
|
delete formData.modified_by;
|
|
169
|
+
delete formData._display;
|
|
126
170
|
${getScriptForRemoveUrlPrefixForImgFields(fields)}
|
|
171
|
+
${getScriptForSimplifiedValueForFileFields(fields)}
|
|
127
172
|
let query = \`mutation{record: \${objectName}__insert(doc: {__saveData}){_id}}\`;
|
|
128
173
|
if(formData.recordId){
|
|
129
174
|
query = \`mutation{record: \${objectName}__update(id: "\${formData.recordId}", doc: {__saveData}){_id}}\`;
|
|
@@ -118,6 +118,58 @@ function getScriptForAddUrlPrefixForImgFields(fields){
|
|
|
118
118
|
`
|
|
119
119
|
}
|
|
120
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
|
+
|
|
121
173
|
function getEditFormInitApi(object, recordId, fields){
|
|
122
174
|
return {
|
|
123
175
|
method: "post",
|
|
@@ -129,6 +181,7 @@ function getEditFormInitApi(object, recordId, fields){
|
|
|
129
181
|
if(data){
|
|
130
182
|
${getConvertDataScriptStr(fields)}
|
|
131
183
|
${getScriptForAddUrlPrefixForImgFields(fields)}
|
|
184
|
+
${getScriptForRewriteValueForFileFields(fields)}
|
|
132
185
|
//初始化接口返回的字段移除字段值为null的字段
|
|
133
186
|
for (key in data){
|
|
134
187
|
if(data[key] === null){
|
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.25",
|
|
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": "8889080266abf6385004c39529e6fee97735333e"
|
|
12
12
|
}
|