@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.
@@ -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.21",
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": "b31ea478616a5ab135da0e9582ed370be20fb167"
11
+ "gitHead": "8889080266abf6385004c39529e6fee97735333e"
12
12
  }