@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.
@@ -1,2 +1,3 @@
1
1
  import './AmisObjectForm.less';
2
+ import './AmisObjectFormMobile.less';
2
3
  export declare const AmisObjectForm: (props: any) => Promise<any>;
@@ -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;
@@ -6396,28 +6396,42 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
6396
6396
  // }
6397
6397
  // }
6398
6398
  // listView.handleFilterSubmit(Object.assign({}, removedValues, filterFormValues));
6399
-
6400
- let isMobile = Steedos.isMobile();
6401
- if(isMobile){
6402
- // 手机端点击搜索的时候自动收起搜索栏
6403
- let resizeWindow = function(){
6404
- //触发amis crud 高度重算
6405
- setTimeout(()=>{
6406
- window.dispatchEvent(new Event("resize"))
6407
- }, 500);
6408
- }
6409
- const filterService = filterForm.context.getComponents().find(function(n){
6410
- return n.props.type === "service";
6411
- });
6412
- filterService.setData({showFieldsFilter: false});
6413
- resizeWindow();
6414
- // 使用filterForm.getValues()的话,并不能拿到本地存储中的过滤条件,所以需要从event.data中取。
6415
- let filterFormValues = event.data;
6416
- let isFieldsFilterEmpty = SteedosUI.isFilterFormValuesEmpty(filterFormValues);
6417
- let crud = SteedosUI.getClosestAmisComponentByType(scope, "crud");
6418
- let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service");
6419
- crudService && crudService.setData({isFieldsFilterEmpty, showFieldsFilter: false});
6399
+ // 点击搜索的时候自动收起搜索栏
6400
+ let resizeWindow = function(){
6401
+ //触发amis crud 高度重算
6402
+ setTimeout(()=>{
6403
+ window.dispatchEvent(new Event("resize"))
6404
+ }, 500);
6420
6405
  }
6406
+ const filterService = filterForm.context.getComponents().find(function(n){
6407
+ return n.props.type === "service";
6408
+ });
6409
+ let showFieldsFilter = false;
6410
+ const isMobile = window.innerWidth < 768;
6411
+ if(event.data.__from_fields_filter_settings_confirm){
6412
+ // 如果是从设置搜索项点击确认按钮触发的搜索事件不应该自动关闭搜索栏
6413
+ showFieldsFilter = true;
6414
+ }
6415
+ else if(isMobile){
6416
+ // 如果是手机端,点击搜索后自动关闭搜索栏
6417
+ showFieldsFilter = false;
6418
+ }
6419
+ else if(event.data.displayAs === "split") {
6420
+ // PC上分栏模式下的列表,始终按手机上效果处理,即自动关闭搜索栏
6421
+ showFieldsFilter = false;
6422
+ }
6423
+ else if(window.innerHeight >= 1200){
6424
+ // 高分辨率屏幕(2k+),列表高度比较高,没必要自动关闭搜索栏
6425
+ showFieldsFilter = true;
6426
+ }
6427
+ filterService.setData({showFieldsFilter});
6428
+ resizeWindow();
6429
+ // 使用filterForm.getValues()的话,并不能拿到本地存储中的过滤条件,所以需要从event.data中取。
6430
+ let filterFormValues = event.data;
6431
+ let isFieldsFilterEmpty = SteedosUI.isFilterFormValuesEmpty(filterFormValues);
6432
+ let crud = SteedosUI.getClosestAmisComponentByType(scope, "crud");
6433
+ let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service");
6434
+ crudService && crudService.setData({isFieldsFilterEmpty, showFieldsFilter});
6421
6435
  `;
6422
6436
  const onCancelScript = `
6423
6437
  const scope = event.context.scoped;
@@ -6456,12 +6470,9 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
6456
6470
  setTimeout(()=>{
6457
6471
  window.dispatchEvent(new Event("resize"))
6458
6472
  }, 100);
6459
- let isMobile = Steedos.isMobile();
6460
- if(isMobile){
6461
- // 手机端移除搜索按钮上的红点
6462
- let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
6463
- crudService && crudService.setData({isFieldsFilterEmpty: true, showFieldsFilter: false});
6464
- }
6473
+ // 移除搜索按钮上的红点
6474
+ let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
6475
+ crudService && crudService.setData({isFieldsFilterEmpty: true, showFieldsFilter: false});
6465
6476
  `;
6466
6477
  const dataProviderInited = `
6467
6478
  const objectName = data.objectName;
@@ -6514,17 +6525,11 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
6514
6525
  || (_.isArray(n) && _.isEmpty(n.filter(function(item){return !_.isNil(item)})))
6515
6526
  || (_.isString(n) && n.length === 0);
6516
6527
  });
6517
- // 有过滤条件时自动展开搜索栏
6528
+ // 有过滤条件时只显示搜索按钮上的红点,不自动展开搜索栏
6518
6529
  if(!_.isEmpty(omitedEmptyFormValue)){
6519
- let isMobile = Steedos.isMobile();
6520
- if(isMobile){
6521
- // 手机端不展开,只显示搜索按钮上的红点
6522
- let crudService = SteedosUI.getRef(data.$scopeId).getComponentById("service_listview_" + data.objectName)
6523
- crudService && crudService.setData({isFieldsFilterEmpty: false});
6524
- }
6525
- else{
6526
- setData({ showFieldsFilter: true });
6527
- }
6530
+ let crudService = SteedosUI.getRef(data.$scopeId).getComponentById("service_listview_" + data.objectName)
6531
+ crudService && crudService.setData({isFieldsFilterEmpty: false});
6532
+ // setData({ showFieldsFilter: true });//自动展开搜索栏
6528
6533
  }
6529
6534
  }
6530
6535
  }
@@ -6790,7 +6795,10 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
6790
6795
  },
6791
6796
  {
6792
6797
  "actionType": "click",
6793
- "componentId": btnSearchId
6798
+ "componentId": btnSearchId,
6799
+ "args": {
6800
+ "__from_fields_filter_settings_confirm": true
6801
+ }
6794
6802
  },
6795
6803
  {
6796
6804
  "componentId": "",
@@ -7322,7 +7330,8 @@ const getNewListviewButtonSchema = ()=>{
7322
7330
  "name":"",
7323
7331
  "label":"",
7324
7332
  "filters":"",
7325
- "shared":false
7333
+ "shared":false,
7334
+ "object_name": "${targetObjectName}",
7326
7335
  },
7327
7336
  "fieldsExtend": fieldsExtend$4(),
7328
7337
  "fields": fields$1(),
@@ -7369,13 +7378,11 @@ function fields$1(){
7369
7378
  "object_name",
7370
7379
  "filter_scope",
7371
7380
  "show_count",
7372
- "columns.$.field",
7373
- "columns.$.width",
7374
- "sort.$.field_name",
7375
- "sort.$.order",
7381
+ "columns",
7382
+ "sort",
7376
7383
  "filters",
7377
- "mobile_columns.$.field",
7378
- "searchable_fields.$.field",
7384
+ "mobile_columns",
7385
+ "searchable_fields",
7379
7386
  "is_system",
7380
7387
  "shared"
7381
7388
  ]
@@ -7388,7 +7395,8 @@ function fieldsExtend$4(){
7388
7395
  },
7389
7396
  "name": {
7390
7397
  "amis": {
7391
- "hidden": true
7398
+ "hidden": true,
7399
+ "required": false
7392
7400
  }
7393
7401
  },
7394
7402
  "object_name": {
@@ -7398,37 +7406,56 @@ function fieldsExtend$4(){
7398
7406
  },
7399
7407
  "filter_scope": {
7400
7408
  "amis": {
7401
- "hidden": true
7409
+ "hidden": true,
7410
+ "required": false
7402
7411
  }
7403
7412
  },
7404
7413
  "columns": {
7405
7414
  "amis": {
7406
- "hidden": true
7415
+ "hidden": true,
7416
+ "required": false
7417
+ }
7418
+ },
7419
+ "mobile_columns":{
7420
+ "amis": {
7421
+ "hidden": true,
7422
+ "required": false
7423
+ }
7424
+ },
7425
+ "searchable_fields":{
7426
+ "amis": {
7427
+ "hidden": true,
7428
+ "required": false
7407
7429
  }
7408
7430
  },
7409
7431
  "filter_fields": {
7410
7432
  "amis": {
7411
- "hidden": true
7433
+ "hidden": true,
7434
+ "required": false
7412
7435
  }
7413
7436
  },
7414
7437
  "scrolling_mode": {
7415
7438
  "amis": {
7416
- "hidden": true
7439
+ "hidden": true,
7440
+ "required": false
7417
7441
  }
7418
7442
  },
7419
7443
  "sort": {
7420
7444
  "amis": {
7421
- "hidden": true
7445
+ "hidden": true,
7446
+ "required": false
7422
7447
  }
7423
7448
  },
7424
7449
  "show_count": {
7425
7450
  "amis": {
7426
- "hidden": true
7451
+ "hidden": true,
7452
+ "required": false
7427
7453
  }
7428
7454
  },
7429
7455
  "type": {
7430
7456
  "amis": {
7431
- "hidden": true
7457
+ "hidden": true,
7458
+ "required": false
7432
7459
  }
7433
7460
  },
7434
7461
  "shared": {
@@ -8251,36 +8278,38 @@ const filterForm = scope.getComponents().find(function(n){
8251
8278
  const filterService = filterForm.context.getComponents().find(function(n){
8252
8279
  return n.props.type === "service";
8253
8280
  });
8254
- // filterService.setData({showFieldsFilter: !!!filterService.props.data.showFieldsFilter});
8281
+ let toShowFieldsFilter = !!!filterService.props.data.showFieldsFilter;
8282
+ filterService.setData({showFieldsFilter: toShowFieldsFilter});
8255
8283
  let resizeWindow = function(){
8256
8284
  //触发amis crud 高度重算
8257
8285
  setTimeout(()=>{
8258
8286
  window.dispatchEvent(new Event("resize"))
8259
8287
  }, 500);
8260
8288
  }
8261
- let isMobile = Steedos.isMobile();
8262
- if(filterService.props.data.showFieldsFilter){
8263
- if(isMobile){
8264
- // 手机上只能通过取消按钮来关闭搜索栏
8265
- return;
8266
- }
8267
- let buttonCancel = SteedosUI.getClosestAmisComponentByType(filterForm.context, "button", {
8268
- direction: "down",
8269
- name: "btn_filter_form_cancel"
8270
- });
8271
- buttonCancel.props.dispatchEvent('click', {}).then(function(){
8272
- resizeWindow();
8273
- });
8274
- }
8275
- else{
8276
- filterService.setData({showFieldsFilter: true});
8277
- resizeWindow();
8278
- if(isMobile){
8279
- // 手机端在显示搜索栏时隐藏刷新按钮
8280
- let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
8281
- crudService && crudService.setData({showFieldsFilter: true});
8282
- }
8283
- }
8289
+ resizeWindow();
8290
+ // 手机端在显示搜索栏时隐藏crud上的刷新按钮,因为点击后crud高度显示有问题
8291
+ let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
8292
+ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
8293
+ // if(filterService.props.data.showFieldsFilter){
8294
+ // if(isMobile){
8295
+ // // 手机上只能通过取消按钮来关闭搜索栏
8296
+ // return;
8297
+ // }
8298
+ // let buttonCancel = SteedosUI.getClosestAmisComponentByType(filterForm.context, "button", {
8299
+ // direction: "down",
8300
+ // name: "btn_filter_form_cancel"
8301
+ // });
8302
+ // buttonCancel.props.dispatchEvent('click', {}).then(function(){
8303
+ // resizeWindow();
8304
+ // });
8305
+ // }
8306
+ // else{
8307
+ // if(isMobile){
8308
+ // // 手机端在显示搜索栏时隐藏crud上的刷新按钮,因为点击后crud高度显示有问题
8309
+ // let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
8310
+ // crudService && crudService.setData({showFieldsFilter: true});
8311
+ // }
8312
+ // }
8284
8313
  `;
8285
8314
 
8286
8315
 
@@ -8326,7 +8355,7 @@ function getObjectHeaderToolbar(mainObject, formFactor, {showDisplayAs = false,
8326
8355
  },
8327
8356
  },
8328
8357
  filterVisible ? {
8329
- "label": "",
8358
+ "label": instance.t('frontend_button_search_tooltip'),
8330
8359
  "icon": "fa fa-search",
8331
8360
  "type": "button",
8332
8361
  "tooltip": instance.t('frontend_button_search_tooltip'),
@@ -8379,12 +8408,23 @@ function getObjectHeaderToolbar(mainObject, formFactor, {showDisplayAs = false,
8379
8408
  "className": "bg-white p-2 rounded border-gray-300 text-gray-500"
8380
8409
  },
8381
8410
  // getExportExcelToolbarButtonSchema(),
8411
+ getSettingListviewToolbarButtonSchema(),
8412
+ getDisplayAsButton(showDisplayAs),
8382
8413
  filterVisible ? {
8383
- "label": "",
8414
+ "label": instance.t('frontend_button_search_tooltip'),
8384
8415
  "icon": "fa fa-search",
8385
8416
  "tooltip": instance.t('frontend_button_search_tooltip'),
8386
8417
  "tooltipPlacement": "bottom",
8387
8418
  "type": "button",
8419
+ "badge": {
8420
+ "offset": [
8421
+ -5,
8422
+ 1
8423
+ ],
8424
+ "size":8,
8425
+ "animation": true,
8426
+ "visibleOn": "${isFieldsFilterEmpty == false}"
8427
+ },
8388
8428
  "align": "right",
8389
8429
  "className": "bg-white p-2 rounded border-gray-300 text-gray-500",
8390
8430
  "onEvent": {
@@ -8397,9 +8437,7 @@ function getObjectHeaderToolbar(mainObject, formFactor, {showDisplayAs = false,
8397
8437
  ]
8398
8438
  }
8399
8439
  }
8400
- } : {},
8401
- getSettingListviewToolbarButtonSchema(),
8402
- getDisplayAsButton(showDisplayAs)
8440
+ } : {}
8403
8441
  // {
8404
8442
  // "type": "search-box",
8405
8443
  // "align": "right",
@@ -9029,6 +9067,58 @@ async function lookupToAmisPicker(field, readonly, ctx){
9029
9067
  "actions": [
9030
9068
  {
9031
9069
  "actionType": "reload"
9070
+ },
9071
+ {
9072
+ "actionType": "custom",
9073
+ "script": `
9074
+ const masterRecord = event.data._master?.record;
9075
+ const fieldConfig = ${JSON.stringify(field)};
9076
+ let reference_to = fieldConfig.reference_to;
9077
+ let saveValue;
9078
+ const newRecord = {
9079
+ _id: event.data.result.data.recordId,
9080
+ ...event.data.__super.__super
9081
+ }
9082
+ const saveField = fieldConfig.reference_to_field || '_id';
9083
+ const saveFieldValue = newRecord[saveField];
9084
+
9085
+ if( fieldConfig._reference_to && (_.isArray(fieldConfig._reference_to) || _.isFunction(fieldConfig._reference_to) || fieldConfig._reference_to.startsWith('function') ) ){
9086
+
9087
+ const fieldValue = masterRecord ? masterRecord[fieldConfig.name] : {o: reference_to, ids: []};
9088
+ const baseSaveValue = {
9089
+ o: reference_to,
9090
+ ids: [saveFieldValue]
9091
+ };
9092
+ if(fieldValue && fieldValue.o){
9093
+ if(fieldValue.o === reference_to){
9094
+ saveValue = fieldConfig.multiple ? { o: reference_to, ids: fieldValue.ids.concat(saveFieldValue)} : baseSaveValue;
9095
+ }else{
9096
+ saveValue = baseSaveValue;
9097
+ }
9098
+ }else{
9099
+ saveValue = baseSaveValue;
9100
+ }
9101
+
9102
+ }else{
9103
+ if(fieldConfig.multiple){
9104
+ // TODO: 连续新建多个记录时,因为获取的主记录不是实时的,所以只会勾选最后一个新建的记录。
9105
+ const fieldValue = (masterRecord && masterRecord[fieldConfig.name]) || [];
9106
+ saveValue = fieldValue.concat(saveFieldValue);
9107
+ }else{
9108
+ saveValue = saveFieldValue;
9109
+ }
9110
+ }
9111
+
9112
+ const ctx = ${JSON.stringify(ctx)};
9113
+ const componentId = ctx.defaults.formSchema.id ? 'service-'+ctx.defaults.formSchema.id : 'new-'+ctx.defaults.formSchema.objectApiName;
9114
+ doAction({
9115
+ actionType: 'setValue',
9116
+ componentId: componentId,
9117
+ args: {
9118
+ value: { [fieldConfig.name]: saveValue }
9119
+ }
9120
+ });
9121
+ `
9032
9122
  }
9033
9123
  ]
9034
9124
  };
@@ -9259,7 +9349,7 @@ async function lookupToAmis(field, readonly, ctx){
9259
9349
  type: 'steedos-field-lookup',
9260
9350
  field,
9261
9351
  readonly,
9262
- ctx: {},
9352
+ ctx,
9263
9353
  }
9264
9354
  // return await lookupToAmisGroup(field, readonly, ctx);
9265
9355
  }
@@ -9413,8 +9503,8 @@ async function getIdsPickerSchema(field, readonly, ctx){
9413
9503
  /*
9414
9504
  * @Author: baozhoutao@steedos.com
9415
9505
  * @Date: 2023-01-13 17:27:54
9416
- * @LastEditors: Please set LastEditors
9417
- * @LastEditTime: 2023-05-31 13:34:22
9506
+ * @LastEditors: liaodaxue
9507
+ * @LastEditTime: 2023-06-16 15:58:21
9418
9508
  * @Description:
9419
9509
  */
9420
9510
 
@@ -9466,6 +9556,7 @@ const getHtmlFieldSchema = (field, readonly, ctx)=>{
9466
9556
  }else {
9467
9557
  return {
9468
9558
  "type": "input-rich-text",
9559
+ "receiver": "${context.rootUrl}/s3/images",
9469
9560
  "name": field.name
9470
9561
  }
9471
9562
  // return {
@@ -12652,6 +12743,8 @@ async function getObjectForm(objectSchema, ctx){
12652
12743
  };
12653
12744
  if(formSchema.id){
12654
12745
  amisSchema.id = `service-${formSchema.id}`;
12746
+ }else {
12747
+ amisSchema.id = `new-${objectSchema.name}`;
12655
12748
  }
12656
12749
  return amisSchema;
12657
12750
  }
@@ -18999,7 +19092,7 @@ var PageObject = function (props) { return __awaiter(void 0, void 0, void 0, fun
18999
19092
  "type": "wrapper",
19000
19093
  "size": "none",
19001
19094
  "className": {
19002
- "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'}",
19095
+ "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'}",
19003
19096
  'h-full': "${display != 'split'}",
19004
19097
  },
19005
19098
  "body": {