@steedos/service-plugin-amis 2.2.52-beta.18 → 2.2.52-beta.21

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,7 @@ const Lookup = require('./lookup');
5
5
  const AmisFormInputs = [
6
6
  'text',
7
7
  'date',
8
+ 'image',
8
9
  'datetime',
9
10
  'time',
10
11
  'number',
@@ -205,6 +206,7 @@ function convertSFieldToAmisField(field, readonly) {
205
206
  joinValues: false,
206
207
  options: getSelectFieldOptions(field),
207
208
  extractValue: true,
209
+ clearable: true,
208
210
  labelField: 'label',
209
211
  valueField: 'value',
210
212
  tpl: readonly ? Tpl.getSelectTpl(field) : null
@@ -313,7 +315,35 @@ function convertSFieldToAmisField(field, readonly) {
313
315
  }
314
316
  break;
315
317
  case 'image':
316
- //TODO
318
+ rootUrl = Meteor.absoluteUrl('/api/files/images/');
319
+ convertData = {
320
+ type: getAmisStaticFieldType('image', readonly),
321
+ receiver: {
322
+ method: "post",
323
+ url: "${context.rootUrl}/s3/images",
324
+ adaptor: `
325
+ var rootUrl = ${JSON.stringify(rootUrl)};
326
+ payload = {
327
+ status: response.status == 200 ? 0 : response.status,
328
+ msg: response.statusText,
329
+ data: {
330
+ value: payload._id,
331
+ filename: payload.original.name,
332
+ url: rootUrl + payload._id,
333
+ }
334
+ }
335
+ return payload;
336
+ `,
337
+ headers: {
338
+ Authorization: "Bearer ${context.tenantId},${context.authToken}"
339
+ }
340
+ }
341
+ }
342
+ if(field.multiple){
343
+ convertData.multiple = true;
344
+ convertData.joinValues = false;
345
+ convertData.extractValue = true;
346
+ }
317
347
  break;
318
348
  case 'formula':
319
349
  //TODO
@@ -67,16 +67,63 @@ function getSaveQuery(object, recordId, fields, options){
67
67
  }
68
68
  }
69
69
 
70
- function getSaveDataTpl(){
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
+ function getSaveDataTpl(fields){
71
112
  return `
72
113
  const formData = api.data.$;
114
+ for (key in formData){
115
+ // image、select等字段清空值后保存的空字符串转换为null。
116
+ if(formData[key] === ''){
117
+ formData[key] = null;
118
+ }
119
+ }
73
120
  const objectName = api.data.objectName;
74
121
  const fieldsName = Object.keys(formData);
75
122
  delete formData.created;
76
123
  delete formData.created_by;
77
124
  delete formData.modified;
78
125
  delete formData.modified_by;
79
-
126
+ ${getScriptForRemoveUrlPrefixForImgFields(fields)}
80
127
  let query = \`mutation{record: \${objectName}__insert(doc: {__saveData}){_id}}\`;
81
128
  if(formData.recordId){
82
129
  query = \`mutation{record: \${objectName}__update(id: "\${formData.recordId}", doc: {__saveData}){_id}}\`;
@@ -86,9 +133,9 @@ function getSaveDataTpl(){
86
133
  `
87
134
  }
88
135
 
89
- function getSaveRequestAdaptor(){
136
+ function getSaveRequestAdaptor(fields){
90
137
  return `
91
- ${getSaveDataTpl()}
138
+ ${getSaveDataTpl(fields)}
92
139
  api.data = {query: query.replace('{__saveData}', __saveData)};
93
140
  return api;
94
141
  `
@@ -79,6 +79,45 @@ 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
+
82
121
  function getEditFormInitApi(object, recordId, fields){
83
122
  return {
84
123
  method: "post",
@@ -89,6 +128,13 @@ function getEditFormInitApi(object, recordId, fields){
89
128
  var data = payload.data.data[0];
90
129
  if(data){
91
130
  ${getConvertDataScriptStr(fields)}
131
+ ${getScriptForAddUrlPrefixForImgFields(fields)}
132
+ //初始化接口返回的字段移除字段值为null的字段
133
+ for (key in data){
134
+ if(data[key] === null){
135
+ delete data[key];
136
+ }
137
+ }
92
138
  };
93
139
  payload.data = data;
94
140
  delete payload.extensions;
@@ -103,7 +149,7 @@ function getSaveApi(object, recordId, fields, options){
103
149
  method: 'post',
104
150
  url: graphql.getApi(),
105
151
  data: graphql.getSaveQuery(object, recordId, fields, options),
106
- requestAdaptor: graphql.getSaveRequestAdaptor(),
152
+ requestAdaptor: graphql.getSaveRequestAdaptor(fields),
107
153
  responseData: {
108
154
  "recordId": "${record._id}"
109
155
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steedos/service-plugin-amis",
3
- "version": "2.2.52-beta.18",
3
+ "version": "2.2.52-beta.21",
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": "ffc8b459f919c2fb746604338a380de4e46d9c15"
11
+ "gitHead": "b31ea478616a5ab135da0e9582ed370be20fb167"
12
12
  }