@steedos-widgets/amis-object 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.
@@ -543,8 +543,9 @@ body {
543
543
  .w-8 {
544
544
  width: 2rem
545
545
  }
546
- .w-\[388px\] {
547
- width: 388px
546
+ .w-fit {
547
+ width: -moz-fit-content;
548
+ width: fit-content
548
549
  }
549
550
  .\!min-w-\[160px\] {
550
551
  min-width: 160px !important
@@ -558,6 +559,9 @@ body {
558
559
  .min-w-\[200px\] {
559
560
  min-width: 200px
560
561
  }
562
+ .min-w-\[388px\] {
563
+ min-width: 388px
564
+ }
561
565
  .max-w-\[360px\] {
562
566
  max-width: 360px
563
567
  }
@@ -1251,6 +1255,41 @@ body {
1251
1255
  }
1252
1256
  }
1253
1257
 
1258
+ @media (max-width: 767px) {
1259
+ .steedos-amis-form.antd-Form {
1260
+ /* start ======== 移动端给部分input加边框,并使输入框上下居中*/
1261
+ /* =========end */
1262
+ }
1263
+ .steedos-amis-form.antd-Form .antd-Form-item .antd-Form-control > .antd-TextControl-input,
1264
+ .steedos-amis-form.antd-Form .antd-Form-item div.antd-TextareaControl {
1265
+ border: var(--Form-input-borderWidth) solid var(--Form-input-borderColor);
1266
+ border-radius: var(--Form-input-borderRadius);
1267
+ }
1268
+ .steedos-amis-form.antd-Form .antd-Form-item .antd-Form-control > .antd-TextControl-input:hover,
1269
+ .steedos-amis-form.antd-Form .antd-Form-item div.antd-TextareaControl:hover {
1270
+ border: var(--Form-input-borderWidth) solid var(--Form-input-borderColor);
1271
+ border-radius: var(--Form-input-borderRadius);
1272
+ }
1273
+ .steedos-amis-form.antd-Form .antd-Form-item .antd-TextControl.is-focused > .antd-TextControl-input,
1274
+ .steedos-amis-form.antd-Form .antd-Form-item div.is-focused.antd-TextareaControl {
1275
+ border-color: var(--input-default-active-top-border-color) var(--input-default-active-right-border-color) var(--input-default-active-bottom-border-color) var(--input-default-active-left-border-color);
1276
+ border-style: var(--input-default-active-top-border-style) var(--input-default-active-right-border-style) var(--input-default-active-bottom-border-style) var(--input-default-active-left-border-style);
1277
+ border-width: var(--input-default-active-top-border-width) var(--input-default-active-right-border-width) var(--input-default-active-bottom-border-width) var(--input-default-active-left-border-width);
1278
+ }
1279
+ .steedos-amis-form.antd-Form .antd-Form-item .antd-TextControl.is-focused > .antd-TextControl-input:hover,
1280
+ .steedos-amis-form.antd-Form .antd-Form-item div.is-focused.antd-TextareaControl:hover {
1281
+ border: var(--Form-input-borderWidth) solid var(--Form-input-borderColor);
1282
+ border-radius: var(--Form-input-borderRadius);
1283
+ }
1284
+ .steedos-amis-form.antd-Form .antd-Form-item input {
1285
+ height: 100%;
1286
+ }
1287
+ .steedos-amis-form.antd-Form .antd-Form-item {
1288
+ margin-top: 0;
1289
+ align-items: center;
1290
+ }
1291
+ }
1292
+
1254
1293
  @media (min-width: 767px) {
1255
1294
  .steedos-object-table .antd-Field-quickEditBtn {
1256
1295
  display: none;
@@ -6394,28 +6394,42 @@
6394
6394
  // }
6395
6395
  // }
6396
6396
  // listView.handleFilterSubmit(Object.assign({}, removedValues, filterFormValues));
6397
-
6398
- let isMobile = Steedos.isMobile();
6399
- if(isMobile){
6400
- // 手机端点击搜索的时候自动收起搜索栏
6401
- let resizeWindow = function(){
6402
- //触发amis crud 高度重算
6403
- setTimeout(()=>{
6404
- window.dispatchEvent(new Event("resize"))
6405
- }, 500);
6406
- }
6407
- const filterService = filterForm.context.getComponents().find(function(n){
6408
- return n.props.type === "service";
6409
- });
6410
- filterService.setData({showFieldsFilter: false});
6411
- resizeWindow();
6412
- // 使用filterForm.getValues()的话,并不能拿到本地存储中的过滤条件,所以需要从event.data中取。
6413
- let filterFormValues = event.data;
6414
- let isFieldsFilterEmpty = SteedosUI.isFilterFormValuesEmpty(filterFormValues);
6415
- let crud = SteedosUI.getClosestAmisComponentByType(scope, "crud");
6416
- let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service");
6417
- crudService && crudService.setData({isFieldsFilterEmpty, showFieldsFilter: false});
6397
+ // 点击搜索的时候自动收起搜索栏
6398
+ let resizeWindow = function(){
6399
+ //触发amis crud 高度重算
6400
+ setTimeout(()=>{
6401
+ window.dispatchEvent(new Event("resize"))
6402
+ }, 500);
6403
+ }
6404
+ const filterService = filterForm.context.getComponents().find(function(n){
6405
+ return n.props.type === "service";
6406
+ });
6407
+ let showFieldsFilter = false;
6408
+ const isMobile = window.innerWidth < 768;
6409
+ if(event.data.__from_fields_filter_settings_confirm){
6410
+ // 如果是从设置搜索项点击确认按钮触发的搜索事件不应该自动关闭搜索栏
6411
+ showFieldsFilter = true;
6412
+ }
6413
+ else if(isMobile){
6414
+ // 如果是手机端,点击搜索后自动关闭搜索栏
6415
+ showFieldsFilter = false;
6416
+ }
6417
+ else if(event.data.displayAs === "split") {
6418
+ // PC上分栏模式下的列表,始终按手机上效果处理,即自动关闭搜索栏
6419
+ showFieldsFilter = false;
6420
+ }
6421
+ else if(window.innerHeight >= 1200){
6422
+ // 高分辨率屏幕(2k+),列表高度比较高,没必要自动关闭搜索栏
6423
+ showFieldsFilter = true;
6418
6424
  }
6425
+ filterService.setData({showFieldsFilter});
6426
+ resizeWindow();
6427
+ // 使用filterForm.getValues()的话,并不能拿到本地存储中的过滤条件,所以需要从event.data中取。
6428
+ let filterFormValues = event.data;
6429
+ let isFieldsFilterEmpty = SteedosUI.isFilterFormValuesEmpty(filterFormValues);
6430
+ let crud = SteedosUI.getClosestAmisComponentByType(scope, "crud");
6431
+ let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service");
6432
+ crudService && crudService.setData({isFieldsFilterEmpty, showFieldsFilter});
6419
6433
  `;
6420
6434
  const onCancelScript = `
6421
6435
  const scope = event.context.scoped;
@@ -6454,12 +6468,9 @@
6454
6468
  setTimeout(()=>{
6455
6469
  window.dispatchEvent(new Event("resize"))
6456
6470
  }, 100);
6457
- let isMobile = Steedos.isMobile();
6458
- if(isMobile){
6459
- // 手机端移除搜索按钮上的红点
6460
- let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
6461
- crudService && crudService.setData({isFieldsFilterEmpty: true, showFieldsFilter: false});
6462
- }
6471
+ // 移除搜索按钮上的红点
6472
+ let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
6473
+ crudService && crudService.setData({isFieldsFilterEmpty: true, showFieldsFilter: false});
6463
6474
  `;
6464
6475
  const dataProviderInited = `
6465
6476
  const objectName = data.objectName;
@@ -6512,17 +6523,11 @@
6512
6523
  || (_.isArray(n) && _.isEmpty(n.filter(function(item){return !_.isNil(item)})))
6513
6524
  || (_.isString(n) && n.length === 0);
6514
6525
  });
6515
- // 有过滤条件时自动展开搜索栏
6526
+ // 有过滤条件时只显示搜索按钮上的红点,不自动展开搜索栏
6516
6527
  if(!_.isEmpty(omitedEmptyFormValue)){
6517
- let isMobile = Steedos.isMobile();
6518
- if(isMobile){
6519
- // 手机端不展开,只显示搜索按钮上的红点
6520
- let crudService = SteedosUI.getRef(data.$scopeId).getComponentById("service_listview_" + data.objectName)
6521
- crudService && crudService.setData({isFieldsFilterEmpty: false});
6522
- }
6523
- else{
6524
- setData({ showFieldsFilter: true });
6525
- }
6528
+ let crudService = SteedosUI.getRef(data.$scopeId).getComponentById("service_listview_" + data.objectName)
6529
+ crudService && crudService.setData({isFieldsFilterEmpty: false});
6530
+ // setData({ showFieldsFilter: true });//自动展开搜索栏
6526
6531
  }
6527
6532
  }
6528
6533
  }
@@ -6788,7 +6793,10 @@
6788
6793
  },
6789
6794
  {
6790
6795
  "actionType": "click",
6791
- "componentId": btnSearchId
6796
+ "componentId": btnSearchId,
6797
+ "args": {
6798
+ "__from_fields_filter_settings_confirm": true
6799
+ }
6792
6800
  },
6793
6801
  {
6794
6802
  "componentId": "",
@@ -7320,7 +7328,8 @@
7320
7328
  "name":"",
7321
7329
  "label":"",
7322
7330
  "filters":"",
7323
- "shared":false
7331
+ "shared":false,
7332
+ "object_name": "${targetObjectName}",
7324
7333
  },
7325
7334
  "fieldsExtend": fieldsExtend$4(),
7326
7335
  "fields": fields$1(),
@@ -7367,13 +7376,11 @@
7367
7376
  "object_name",
7368
7377
  "filter_scope",
7369
7378
  "show_count",
7370
- "columns.$.field",
7371
- "columns.$.width",
7372
- "sort.$.field_name",
7373
- "sort.$.order",
7379
+ "columns",
7380
+ "sort",
7374
7381
  "filters",
7375
- "mobile_columns.$.field",
7376
- "searchable_fields.$.field",
7382
+ "mobile_columns",
7383
+ "searchable_fields",
7377
7384
  "is_system",
7378
7385
  "shared"
7379
7386
  ]
@@ -7386,7 +7393,8 @@
7386
7393
  },
7387
7394
  "name": {
7388
7395
  "amis": {
7389
- "hidden": true
7396
+ "hidden": true,
7397
+ "required": false
7390
7398
  }
7391
7399
  },
7392
7400
  "object_name": {
@@ -7396,37 +7404,56 @@
7396
7404
  },
7397
7405
  "filter_scope": {
7398
7406
  "amis": {
7399
- "hidden": true
7407
+ "hidden": true,
7408
+ "required": false
7400
7409
  }
7401
7410
  },
7402
7411
  "columns": {
7403
7412
  "amis": {
7404
- "hidden": true
7413
+ "hidden": true,
7414
+ "required": false
7415
+ }
7416
+ },
7417
+ "mobile_columns":{
7418
+ "amis": {
7419
+ "hidden": true,
7420
+ "required": false
7421
+ }
7422
+ },
7423
+ "searchable_fields":{
7424
+ "amis": {
7425
+ "hidden": true,
7426
+ "required": false
7405
7427
  }
7406
7428
  },
7407
7429
  "filter_fields": {
7408
7430
  "amis": {
7409
- "hidden": true
7431
+ "hidden": true,
7432
+ "required": false
7410
7433
  }
7411
7434
  },
7412
7435
  "scrolling_mode": {
7413
7436
  "amis": {
7414
- "hidden": true
7437
+ "hidden": true,
7438
+ "required": false
7415
7439
  }
7416
7440
  },
7417
7441
  "sort": {
7418
7442
  "amis": {
7419
- "hidden": true
7443
+ "hidden": true,
7444
+ "required": false
7420
7445
  }
7421
7446
  },
7422
7447
  "show_count": {
7423
7448
  "amis": {
7424
- "hidden": true
7449
+ "hidden": true,
7450
+ "required": false
7425
7451
  }
7426
7452
  },
7427
7453
  "type": {
7428
7454
  "amis": {
7429
- "hidden": true
7455
+ "hidden": true,
7456
+ "required": false
7430
7457
  }
7431
7458
  },
7432
7459
  "shared": {
@@ -8249,36 +8276,38 @@ const filterForm = scope.getComponents().find(function(n){
8249
8276
  const filterService = filterForm.context.getComponents().find(function(n){
8250
8277
  return n.props.type === "service";
8251
8278
  });
8252
- // filterService.setData({showFieldsFilter: !!!filterService.props.data.showFieldsFilter});
8279
+ let toShowFieldsFilter = !!!filterService.props.data.showFieldsFilter;
8280
+ filterService.setData({showFieldsFilter: toShowFieldsFilter});
8253
8281
  let resizeWindow = function(){
8254
8282
  //触发amis crud 高度重算
8255
8283
  setTimeout(()=>{
8256
8284
  window.dispatchEvent(new Event("resize"))
8257
8285
  }, 500);
8258
8286
  }
8259
- let isMobile = Steedos.isMobile();
8260
- if(filterService.props.data.showFieldsFilter){
8261
- if(isMobile){
8262
- // 手机上只能通过取消按钮来关闭搜索栏
8263
- return;
8264
- }
8265
- let buttonCancel = SteedosUI.getClosestAmisComponentByType(filterForm.context, "button", {
8266
- direction: "down",
8267
- name: "btn_filter_form_cancel"
8268
- });
8269
- buttonCancel.props.dispatchEvent('click', {}).then(function(){
8270
- resizeWindow();
8271
- });
8272
- }
8273
- else{
8274
- filterService.setData({showFieldsFilter: true});
8275
- resizeWindow();
8276
- if(isMobile){
8277
- // 手机端在显示搜索栏时隐藏刷新按钮
8278
- let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
8279
- crudService && crudService.setData({showFieldsFilter: true});
8280
- }
8281
- }
8287
+ resizeWindow();
8288
+ // 手机端在显示搜索栏时隐藏crud上的刷新按钮,因为点击后crud高度显示有问题
8289
+ let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
8290
+ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
8291
+ // if(filterService.props.data.showFieldsFilter){
8292
+ // if(isMobile){
8293
+ // // 手机上只能通过取消按钮来关闭搜索栏
8294
+ // return;
8295
+ // }
8296
+ // let buttonCancel = SteedosUI.getClosestAmisComponentByType(filterForm.context, "button", {
8297
+ // direction: "down",
8298
+ // name: "btn_filter_form_cancel"
8299
+ // });
8300
+ // buttonCancel.props.dispatchEvent('click', {}).then(function(){
8301
+ // resizeWindow();
8302
+ // });
8303
+ // }
8304
+ // else{
8305
+ // if(isMobile){
8306
+ // // 手机端在显示搜索栏时隐藏crud上的刷新按钮,因为点击后crud高度显示有问题
8307
+ // let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
8308
+ // crudService && crudService.setData({showFieldsFilter: true});
8309
+ // }
8310
+ // }
8282
8311
  `;
8283
8312
 
8284
8313
 
@@ -8324,7 +8353,7 @@ else{
8324
8353
  },
8325
8354
  },
8326
8355
  filterVisible ? {
8327
- "label": "",
8356
+ "label": instance.t('frontend_button_search_tooltip'),
8328
8357
  "icon": "fa fa-search",
8329
8358
  "type": "button",
8330
8359
  "tooltip": instance.t('frontend_button_search_tooltip'),
@@ -8377,12 +8406,23 @@ else{
8377
8406
  "className": "bg-white p-2 rounded border-gray-300 text-gray-500"
8378
8407
  },
8379
8408
  // getExportExcelToolbarButtonSchema(),
8409
+ getSettingListviewToolbarButtonSchema(),
8410
+ getDisplayAsButton(showDisplayAs),
8380
8411
  filterVisible ? {
8381
- "label": "",
8412
+ "label": instance.t('frontend_button_search_tooltip'),
8382
8413
  "icon": "fa fa-search",
8383
8414
  "tooltip": instance.t('frontend_button_search_tooltip'),
8384
8415
  "tooltipPlacement": "bottom",
8385
8416
  "type": "button",
8417
+ "badge": {
8418
+ "offset": [
8419
+ -5,
8420
+ 1
8421
+ ],
8422
+ "size":8,
8423
+ "animation": true,
8424
+ "visibleOn": "${isFieldsFilterEmpty == false}"
8425
+ },
8386
8426
  "align": "right",
8387
8427
  "className": "bg-white p-2 rounded border-gray-300 text-gray-500",
8388
8428
  "onEvent": {
@@ -8395,9 +8435,7 @@ else{
8395
8435
  ]
8396
8436
  }
8397
8437
  }
8398
- } : {},
8399
- getSettingListviewToolbarButtonSchema(),
8400
- getDisplayAsButton(showDisplayAs)
8438
+ } : {}
8401
8439
  // {
8402
8440
  // "type": "search-box",
8403
8441
  // "align": "right",
@@ -9027,6 +9065,58 @@ else{
9027
9065
  "actions": [
9028
9066
  {
9029
9067
  "actionType": "reload"
9068
+ },
9069
+ {
9070
+ "actionType": "custom",
9071
+ "script": `
9072
+ const masterRecord = event.data._master?.record;
9073
+ const fieldConfig = ${JSON.stringify(field)};
9074
+ let reference_to = fieldConfig.reference_to;
9075
+ let saveValue;
9076
+ const newRecord = {
9077
+ _id: event.data.result.data.recordId,
9078
+ ...event.data.__super.__super
9079
+ }
9080
+ const saveField = fieldConfig.reference_to_field || '_id';
9081
+ const saveFieldValue = newRecord[saveField];
9082
+
9083
+ if( fieldConfig._reference_to && (_.isArray(fieldConfig._reference_to) || _.isFunction(fieldConfig._reference_to) || fieldConfig._reference_to.startsWith('function') ) ){
9084
+
9085
+ const fieldValue = masterRecord ? masterRecord[fieldConfig.name] : {o: reference_to, ids: []};
9086
+ const baseSaveValue = {
9087
+ o: reference_to,
9088
+ ids: [saveFieldValue]
9089
+ };
9090
+ if(fieldValue && fieldValue.o){
9091
+ if(fieldValue.o === reference_to){
9092
+ saveValue = fieldConfig.multiple ? { o: reference_to, ids: fieldValue.ids.concat(saveFieldValue)} : baseSaveValue;
9093
+ }else{
9094
+ saveValue = baseSaveValue;
9095
+ }
9096
+ }else{
9097
+ saveValue = baseSaveValue;
9098
+ }
9099
+
9100
+ }else{
9101
+ if(fieldConfig.multiple){
9102
+ // TODO: 连续新建多个记录时,因为获取的主记录不是实时的,所以只会勾选最后一个新建的记录。
9103
+ const fieldValue = (masterRecord && masterRecord[fieldConfig.name]) || [];
9104
+ saveValue = fieldValue.concat(saveFieldValue);
9105
+ }else{
9106
+ saveValue = saveFieldValue;
9107
+ }
9108
+ }
9109
+
9110
+ const ctx = ${JSON.stringify(ctx)};
9111
+ const componentId = ctx.defaults.formSchema.id ? 'service-'+ctx.defaults.formSchema.id : 'new-'+ctx.defaults.formSchema.objectApiName;
9112
+ doAction({
9113
+ actionType: 'setValue',
9114
+ componentId: componentId,
9115
+ args: {
9116
+ value: { [fieldConfig.name]: saveValue }
9117
+ }
9118
+ });
9119
+ `
9030
9120
  }
9031
9121
  ]
9032
9122
  };
@@ -9257,7 +9347,7 @@ else{
9257
9347
  type: 'steedos-field-lookup',
9258
9348
  field,
9259
9349
  readonly,
9260
- ctx: {},
9350
+ ctx,
9261
9351
  }
9262
9352
  // return await lookupToAmisGroup(field, readonly, ctx);
9263
9353
  }
@@ -9411,8 +9501,8 @@ else{
9411
9501
  /*
9412
9502
  * @Author: baozhoutao@steedos.com
9413
9503
  * @Date: 2023-01-13 17:27:54
9414
- * @LastEditors: Please set LastEditors
9415
- * @LastEditTime: 2023-05-31 13:34:22
9504
+ * @LastEditors: liaodaxue
9505
+ * @LastEditTime: 2023-06-16 15:58:21
9416
9506
  * @Description:
9417
9507
  */
9418
9508
 
@@ -9464,6 +9554,7 @@ else{
9464
9554
  }else {
9465
9555
  return {
9466
9556
  "type": "input-rich-text",
9557
+ "receiver": "${context.rootUrl}/s3/images",
9467
9558
  "name": field.name
9468
9559
  }
9469
9560
  // return {
@@ -12650,6 +12741,8 @@ else{
12650
12741
  };
12651
12742
  if(formSchema.id){
12652
12743
  amisSchema.id = `service-${formSchema.id}`;
12744
+ }else {
12745
+ amisSchema.id = `new-${objectSchema.name}`;
12653
12746
  }
12654
12747
  return amisSchema;
12655
12748
  }
@@ -18997,7 +19090,7 @@ else{
18997
19090
  "type": "wrapper",
18998
19091
  "size": "none",
18999
19092
  "className": {
19000
- "p-0 flex-shrink-0 w-[388px] border-r border-gray-300 bg-gray-100 shadow lg:order-first lg:flex lg:flex-col": "${display == 'split'}",
19093
+ "p-0 flex-shrink-0 min-w-[388px] w-fit border-r border-gray-300 bg-gray-100 shadow lg:order-first lg:flex lg:flex-col": "${display == 'split'}",
19001
19094
  'h-full': "${display != 'split'}",
19002
19095
  },
19003
19096
  "body": {