@steedos-widgets/amis-lib 1.2.19 → 1.2.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/dist/index.esm.js CHANGED
@@ -3215,28 +3215,42 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
3215
3215
  // }
3216
3216
  // }
3217
3217
  // listView.handleFilterSubmit(Object.assign({}, removedValues, filterFormValues));
3218
-
3219
- let isMobile = Steedos.isMobile();
3220
- if(isMobile){
3221
- // 手机端点击搜索的时候自动收起搜索栏
3222
- let resizeWindow = function(){
3223
- //触发amis crud 高度重算
3224
- setTimeout(()=>{
3225
- window.dispatchEvent(new Event("resize"))
3226
- }, 500);
3227
- }
3228
- const filterService = filterForm.context.getComponents().find(function(n){
3229
- return n.props.type === "service";
3230
- });
3231
- filterService.setData({showFieldsFilter: false});
3232
- resizeWindow();
3233
- // 使用filterForm.getValues()的话,并不能拿到本地存储中的过滤条件,所以需要从event.data中取。
3234
- let filterFormValues = event.data;
3235
- let isFieldsFilterEmpty = SteedosUI.isFilterFormValuesEmpty(filterFormValues);
3236
- let crud = SteedosUI.getClosestAmisComponentByType(scope, "crud");
3237
- let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service");
3238
- crudService && crudService.setData({isFieldsFilterEmpty, showFieldsFilter: false});
3218
+ // 点击搜索的时候自动收起搜索栏
3219
+ let resizeWindow = function(){
3220
+ //触发amis crud 高度重算
3221
+ setTimeout(()=>{
3222
+ window.dispatchEvent(new Event("resize"))
3223
+ }, 500);
3239
3224
  }
3225
+ const filterService = filterForm.context.getComponents().find(function(n){
3226
+ return n.props.type === "service";
3227
+ });
3228
+ let showFieldsFilter = false;
3229
+ const isMobile = window.innerWidth < 768;
3230
+ if(event.data.__from_fields_filter_settings_confirm){
3231
+ // 如果是从设置搜索项点击确认按钮触发的搜索事件不应该自动关闭搜索栏
3232
+ showFieldsFilter = true;
3233
+ }
3234
+ else if(isMobile){
3235
+ // 如果是手机端,点击搜索后自动关闭搜索栏
3236
+ showFieldsFilter = false;
3237
+ }
3238
+ else if(event.data.displayAs === "split") {
3239
+ // PC上分栏模式下的列表,始终按手机上效果处理,即自动关闭搜索栏
3240
+ showFieldsFilter = false;
3241
+ }
3242
+ else if(window.innerHeight >= 1200){
3243
+ // 高分辨率屏幕(2k+),列表高度比较高,没必要自动关闭搜索栏
3244
+ showFieldsFilter = true;
3245
+ }
3246
+ filterService.setData({showFieldsFilter});
3247
+ resizeWindow();
3248
+ // 使用filterForm.getValues()的话,并不能拿到本地存储中的过滤条件,所以需要从event.data中取。
3249
+ let filterFormValues = event.data;
3250
+ let isFieldsFilterEmpty = SteedosUI.isFilterFormValuesEmpty(filterFormValues);
3251
+ let crud = SteedosUI.getClosestAmisComponentByType(scope, "crud");
3252
+ let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service");
3253
+ crudService && crudService.setData({isFieldsFilterEmpty, showFieldsFilter});
3240
3254
  `;
3241
3255
  const onCancelScript = `
3242
3256
  const scope = event.context.scoped;
@@ -3275,12 +3289,9 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
3275
3289
  setTimeout(()=>{
3276
3290
  window.dispatchEvent(new Event("resize"))
3277
3291
  }, 100);
3278
- let isMobile = Steedos.isMobile();
3279
- if(isMobile){
3280
- // 手机端移除搜索按钮上的红点
3281
- let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
3282
- crudService && crudService.setData({isFieldsFilterEmpty: true, showFieldsFilter: false});
3283
- }
3292
+ // 移除搜索按钮上的红点
3293
+ let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
3294
+ crudService && crudService.setData({isFieldsFilterEmpty: true, showFieldsFilter: false});
3284
3295
  `;
3285
3296
  const dataProviderInited = `
3286
3297
  const objectName = data.objectName;
@@ -3333,17 +3344,11 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
3333
3344
  || (_.isArray(n) && _.isEmpty(n.filter(function(item){return !_.isNil(item)})))
3334
3345
  || (_.isString(n) && n.length === 0);
3335
3346
  });
3336
- // 有过滤条件时自动展开搜索栏
3347
+ // 有过滤条件时只显示搜索按钮上的红点,不自动展开搜索栏
3337
3348
  if(!_.isEmpty(omitedEmptyFormValue)){
3338
- let isMobile = Steedos.isMobile();
3339
- if(isMobile){
3340
- // 手机端不展开,只显示搜索按钮上的红点
3341
- let crudService = SteedosUI.getRef(data.$scopeId).getComponentById("service_listview_" + data.objectName)
3342
- crudService && crudService.setData({isFieldsFilterEmpty: false});
3343
- }
3344
- else{
3345
- setData({ showFieldsFilter: true });
3346
- }
3349
+ let crudService = SteedosUI.getRef(data.$scopeId).getComponentById("service_listview_" + data.objectName)
3350
+ crudService && crudService.setData({isFieldsFilterEmpty: false});
3351
+ // setData({ showFieldsFilter: true });//自动展开搜索栏
3347
3352
  }
3348
3353
  }
3349
3354
  }
@@ -3609,7 +3614,10 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
3609
3614
  },
3610
3615
  {
3611
3616
  "actionType": "click",
3612
- "componentId": btnSearchId
3617
+ "componentId": btnSearchId,
3618
+ "args": {
3619
+ "__from_fields_filter_settings_confirm": true
3620
+ }
3613
3621
  },
3614
3622
  {
3615
3623
  "componentId": "",
@@ -4141,7 +4149,8 @@ const getNewListviewButtonSchema = ()=>{
4141
4149
  "name":"",
4142
4150
  "label":"",
4143
4151
  "filters":"",
4144
- "shared":false
4152
+ "shared":false,
4153
+ "object_name": "${targetObjectName}",
4145
4154
  },
4146
4155
  "fieldsExtend": fieldsExtend$4(),
4147
4156
  "fields": fields$1(),
@@ -4188,13 +4197,11 @@ function fields$1(){
4188
4197
  "object_name",
4189
4198
  "filter_scope",
4190
4199
  "show_count",
4191
- "columns.$.field",
4192
- "columns.$.width",
4193
- "sort.$.field_name",
4194
- "sort.$.order",
4200
+ "columns",
4201
+ "sort",
4195
4202
  "filters",
4196
- "mobile_columns.$.field",
4197
- "searchable_fields.$.field",
4203
+ "mobile_columns",
4204
+ "searchable_fields",
4198
4205
  "is_system",
4199
4206
  "shared"
4200
4207
  ]
@@ -4207,7 +4214,8 @@ function fieldsExtend$4(){
4207
4214
  },
4208
4215
  "name": {
4209
4216
  "amis": {
4210
- "hidden": true
4217
+ "hidden": true,
4218
+ "required": false
4211
4219
  }
4212
4220
  },
4213
4221
  "object_name": {
@@ -4217,37 +4225,56 @@ function fieldsExtend$4(){
4217
4225
  },
4218
4226
  "filter_scope": {
4219
4227
  "amis": {
4220
- "hidden": true
4228
+ "hidden": true,
4229
+ "required": false
4221
4230
  }
4222
4231
  },
4223
4232
  "columns": {
4224
4233
  "amis": {
4225
- "hidden": true
4234
+ "hidden": true,
4235
+ "required": false
4236
+ }
4237
+ },
4238
+ "mobile_columns":{
4239
+ "amis": {
4240
+ "hidden": true,
4241
+ "required": false
4242
+ }
4243
+ },
4244
+ "searchable_fields":{
4245
+ "amis": {
4246
+ "hidden": true,
4247
+ "required": false
4226
4248
  }
4227
4249
  },
4228
4250
  "filter_fields": {
4229
4251
  "amis": {
4230
- "hidden": true
4252
+ "hidden": true,
4253
+ "required": false
4231
4254
  }
4232
4255
  },
4233
4256
  "scrolling_mode": {
4234
4257
  "amis": {
4235
- "hidden": true
4258
+ "hidden": true,
4259
+ "required": false
4236
4260
  }
4237
4261
  },
4238
4262
  "sort": {
4239
4263
  "amis": {
4240
- "hidden": true
4264
+ "hidden": true,
4265
+ "required": false
4241
4266
  }
4242
4267
  },
4243
4268
  "show_count": {
4244
4269
  "amis": {
4245
- "hidden": true
4270
+ "hidden": true,
4271
+ "required": false
4246
4272
  }
4247
4273
  },
4248
4274
  "type": {
4249
4275
  "amis": {
4250
- "hidden": true
4276
+ "hidden": true,
4277
+ "required": false
4251
4278
  }
4252
4279
  },
4253
4280
  "shared": {
@@ -5070,36 +5097,38 @@ const filterForm = scope.getComponents().find(function(n){
5070
5097
  const filterService = filterForm.context.getComponents().find(function(n){
5071
5098
  return n.props.type === "service";
5072
5099
  });
5073
- // filterService.setData({showFieldsFilter: !!!filterService.props.data.showFieldsFilter});
5100
+ let toShowFieldsFilter = !!!filterService.props.data.showFieldsFilter;
5101
+ filterService.setData({showFieldsFilter: toShowFieldsFilter});
5074
5102
  let resizeWindow = function(){
5075
5103
  //触发amis crud 高度重算
5076
5104
  setTimeout(()=>{
5077
5105
  window.dispatchEvent(new Event("resize"))
5078
5106
  }, 500);
5079
5107
  }
5080
- let isMobile = Steedos.isMobile();
5081
- if(filterService.props.data.showFieldsFilter){
5082
- if(isMobile){
5083
- // 手机上只能通过取消按钮来关闭搜索栏
5084
- return;
5085
- }
5086
- let buttonCancel = SteedosUI.getClosestAmisComponentByType(filterForm.context, "button", {
5087
- direction: "down",
5088
- name: "btn_filter_form_cancel"
5089
- });
5090
- buttonCancel.props.dispatchEvent('click', {}).then(function(){
5091
- resizeWindow();
5092
- });
5093
- }
5094
- else{
5095
- filterService.setData({showFieldsFilter: true});
5096
- resizeWindow();
5097
- if(isMobile){
5098
- // 手机端在显示搜索栏时隐藏刷新按钮
5099
- let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
5100
- crudService && crudService.setData({showFieldsFilter: true});
5101
- }
5102
- }
5108
+ resizeWindow();
5109
+ // 手机端在显示搜索栏时隐藏crud上的刷新按钮,因为点击后crud高度显示有问题
5110
+ let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
5111
+ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
5112
+ // if(filterService.props.data.showFieldsFilter){
5113
+ // if(isMobile){
5114
+ // // 手机上只能通过取消按钮来关闭搜索栏
5115
+ // return;
5116
+ // }
5117
+ // let buttonCancel = SteedosUI.getClosestAmisComponentByType(filterForm.context, "button", {
5118
+ // direction: "down",
5119
+ // name: "btn_filter_form_cancel"
5120
+ // });
5121
+ // buttonCancel.props.dispatchEvent('click', {}).then(function(){
5122
+ // resizeWindow();
5123
+ // });
5124
+ // }
5125
+ // else{
5126
+ // if(isMobile){
5127
+ // // 手机端在显示搜索栏时隐藏crud上的刷新按钮,因为点击后crud高度显示有问题
5128
+ // let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
5129
+ // crudService && crudService.setData({showFieldsFilter: true});
5130
+ // }
5131
+ // }
5103
5132
  `;
5104
5133
 
5105
5134
 
@@ -5145,7 +5174,7 @@ function getObjectHeaderToolbar(mainObject, formFactor, {showDisplayAs = false,
5145
5174
  },
5146
5175
  },
5147
5176
  filterVisible ? {
5148
- "label": "",
5177
+ "label": i18next.t('frontend_button_search_tooltip'),
5149
5178
  "icon": "fa fa-search",
5150
5179
  "type": "button",
5151
5180
  "tooltip": i18next.t('frontend_button_search_tooltip'),
@@ -5198,12 +5227,23 @@ function getObjectHeaderToolbar(mainObject, formFactor, {showDisplayAs = false,
5198
5227
  "className": "bg-white p-2 rounded border-gray-300 text-gray-500"
5199
5228
  },
5200
5229
  // getExportExcelToolbarButtonSchema(),
5230
+ getSettingListviewToolbarButtonSchema(),
5231
+ getDisplayAsButton(showDisplayAs),
5201
5232
  filterVisible ? {
5202
- "label": "",
5233
+ "label": i18next.t('frontend_button_search_tooltip'),
5203
5234
  "icon": "fa fa-search",
5204
5235
  "tooltip": i18next.t('frontend_button_search_tooltip'),
5205
5236
  "tooltipPlacement": "bottom",
5206
5237
  "type": "button",
5238
+ "badge": {
5239
+ "offset": [
5240
+ -5,
5241
+ 1
5242
+ ],
5243
+ "size":8,
5244
+ "animation": true,
5245
+ "visibleOn": "${isFieldsFilterEmpty == false}"
5246
+ },
5207
5247
  "align": "right",
5208
5248
  "className": "bg-white p-2 rounded border-gray-300 text-gray-500",
5209
5249
  "onEvent": {
@@ -5216,9 +5256,7 @@ function getObjectHeaderToolbar(mainObject, formFactor, {showDisplayAs = false,
5216
5256
  ]
5217
5257
  }
5218
5258
  }
5219
- } : {},
5220
- getSettingListviewToolbarButtonSchema(),
5221
- getDisplayAsButton(showDisplayAs)
5259
+ } : {}
5222
5260
  // {
5223
5261
  // "type": "search-box",
5224
5262
  // "align": "right",
@@ -5848,6 +5886,58 @@ async function lookupToAmisPicker(field, readonly, ctx){
5848
5886
  "actions": [
5849
5887
  {
5850
5888
  "actionType": "reload"
5889
+ },
5890
+ {
5891
+ "actionType": "custom",
5892
+ "script": `
5893
+ const masterRecord = event.data._master?.record;
5894
+ const fieldConfig = ${JSON.stringify(field)};
5895
+ let reference_to = fieldConfig.reference_to;
5896
+ let saveValue;
5897
+ const newRecord = {
5898
+ _id: event.data.result.data.recordId,
5899
+ ...event.data.__super.__super
5900
+ }
5901
+ const saveField = fieldConfig.reference_to_field || '_id';
5902
+ const saveFieldValue = newRecord[saveField];
5903
+
5904
+ if( fieldConfig._reference_to && (_.isArray(fieldConfig._reference_to) || _.isFunction(fieldConfig._reference_to) || fieldConfig._reference_to.startsWith('function') ) ){
5905
+
5906
+ const fieldValue = masterRecord ? masterRecord[fieldConfig.name] : {o: reference_to, ids: []};
5907
+ const baseSaveValue = {
5908
+ o: reference_to,
5909
+ ids: [saveFieldValue]
5910
+ };
5911
+ if(fieldValue && fieldValue.o){
5912
+ if(fieldValue.o === reference_to){
5913
+ saveValue = fieldConfig.multiple ? { o: reference_to, ids: fieldValue.ids.concat(saveFieldValue)} : baseSaveValue;
5914
+ }else{
5915
+ saveValue = baseSaveValue;
5916
+ }
5917
+ }else{
5918
+ saveValue = baseSaveValue;
5919
+ }
5920
+
5921
+ }else{
5922
+ if(fieldConfig.multiple){
5923
+ // TODO: 连续新建多个记录时,因为获取的主记录不是实时的,所以只会勾选最后一个新建的记录。
5924
+ const fieldValue = (masterRecord && masterRecord[fieldConfig.name]) || [];
5925
+ saveValue = fieldValue.concat(saveFieldValue);
5926
+ }else{
5927
+ saveValue = saveFieldValue;
5928
+ }
5929
+ }
5930
+
5931
+ const ctx = ${JSON.stringify(ctx)};
5932
+ const componentId = ctx.defaults.formSchema.id ? 'service-'+ctx.defaults.formSchema.id : 'new-'+ctx.defaults.formSchema.objectApiName;
5933
+ doAction({
5934
+ actionType: 'setValue',
5935
+ componentId: componentId,
5936
+ args: {
5937
+ value: { [fieldConfig.name]: saveValue }
5938
+ }
5939
+ });
5940
+ `
5851
5941
  }
5852
5942
  ]
5853
5943
  };
@@ -6078,7 +6168,7 @@ async function lookupToAmis(field, readonly, ctx){
6078
6168
  type: 'steedos-field-lookup',
6079
6169
  field,
6080
6170
  readonly,
6081
- ctx: {},
6171
+ ctx,
6082
6172
  }
6083
6173
  // return await lookupToAmisGroup(field, readonly, ctx);
6084
6174
  }
@@ -6232,8 +6322,8 @@ async function getIdsPickerSchema(field, readonly, ctx){
6232
6322
  /*
6233
6323
  * @Author: baozhoutao@steedos.com
6234
6324
  * @Date: 2023-01-13 17:27:54
6235
- * @LastEditors: Please set LastEditors
6236
- * @LastEditTime: 2023-05-31 13:34:22
6325
+ * @LastEditors: liaodaxue
6326
+ * @LastEditTime: 2023-06-16 15:58:21
6237
6327
  * @Description:
6238
6328
  */
6239
6329
 
@@ -6285,6 +6375,7 @@ const getHtmlFieldSchema = (field, readonly, ctx)=>{
6285
6375
  }else {
6286
6376
  return {
6287
6377
  "type": "input-rich-text",
6378
+ "receiver": "${context.rootUrl}/s3/images",
6288
6379
  "name": field.name
6289
6380
  }
6290
6381
  // return {
@@ -9471,6 +9562,8 @@ async function getObjectForm(objectSchema, ctx){
9471
9562
  };
9472
9563
  if(formSchema.id){
9473
9564
  amisSchema.id = `service-${formSchema.id}`;
9565
+ }else {
9566
+ amisSchema.id = `new-${objectSchema.name}`;
9474
9567
  }
9475
9568
  return amisSchema;
9476
9569
  }