@steedos-widgets/amis-lib 6.10.1-beta.31 → 6.10.1-beta.32

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.cjs.js CHANGED
@@ -532,8 +532,8 @@ function getComparableAmisVersion() {
532
532
  /*
533
533
  * @Author: baozhoutao@steedos.com
534
534
  * @Date: 2022-05-23 09:53:08
535
- * @LastEditors: baozhoutao@steedos.com
536
- * @LastEditTime: 2024-11-17 13:10:08
535
+ * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
536
+ * @LastEditTime: 2025-04-08 10:55:41
537
537
  * @Description:
538
538
  */
539
539
 
@@ -687,9 +687,10 @@ function getRelatedFieldTpl(field, ctx){
687
687
  const href = Router.getObjectDetailPath({
688
688
  formFactor: ctx.formFactor, appId: "${appId}", objectName: `${objectNameTpl}`, recordId: `${recordIdTpl}`
689
689
  });
690
- if(ctx.isRelated && window.innerWidth >= 768){
690
+ if (window.innerWidth >= 768) { //(ctx.isRelated || isObjectListview) && window.innerWidth >= 768
691
+ // 相关表字段,包括列表视图、对象表格组件中的lookup/master_detail字段,在PC端显示时,点击字段值,不跳转到详情页而是右侧弹出drawer
691
692
  labelTpl = `<a href="${href}" ${linkTarget} onclick="return false;">${labelTpl}</a>`;
692
- }else {
693
+ } else {
693
694
  labelTpl = `<a href="${href}" ${linkTarget}>${labelTpl}</a>`;
694
695
  }
695
696
 
@@ -1487,6 +1488,7 @@ var frontend_download$1 = "Download";
1487
1488
  var frontend_form_save$1 = "Save";
1488
1489
  var frontend_form_save_and_new$1 = "Save and New";
1489
1490
  var frontend_form_cancel$1 = "Cancel";
1491
+ var frontend_form_reset$1 = "Reset";
1490
1492
  var frontend_form_new$1 = "New";
1491
1493
  var frontend_form_edit$1 = "Edit";
1492
1494
  var frontend_form_preview$1 = "Preview";
@@ -1505,7 +1507,7 @@ var frontend_display_type_is_split$1 = "Split View";
1505
1507
  var frontend_display_as$1 = "Displayed as";
1506
1508
  var frontend_record_sum$1 = "items";
1507
1509
  var frontend_button_reload_tooltip$1 = "Refresh";
1508
- var frontend_button_search_tooltip$1 = "Advanced Search";
1510
+ var frontend_button_search_tooltip$1 = "Filter";
1509
1511
  var frontend_fields_filter_button_search$1 = "Search";
1510
1512
  var frontend_fields_filter_button_settings$1 = "Set search options";
1511
1513
  var frontend_button_listview_control_tooltip$1 = "List View Controls";
@@ -1577,6 +1579,7 @@ var en_us = {
1577
1579
  frontend_form_save: frontend_form_save$1,
1578
1580
  frontend_form_save_and_new: frontend_form_save_and_new$1,
1579
1581
  frontend_form_cancel: frontend_form_cancel$1,
1582
+ frontend_form_reset: frontend_form_reset$1,
1580
1583
  frontend_form_new: frontend_form_new$1,
1581
1584
  frontend_form_edit: frontend_form_edit$1,
1582
1585
  frontend_form_preview: frontend_form_preview$1,
@@ -1668,6 +1671,7 @@ var frontend_download = "下载";
1668
1671
  var frontend_form_save = "保存";
1669
1672
  var frontend_form_save_and_new = "保存并新建";
1670
1673
  var frontend_form_cancel = "取消";
1674
+ var frontend_form_reset = "重置";
1671
1675
  var frontend_form_new = "新建";
1672
1676
  var frontend_form_edit = "编辑";
1673
1677
  var frontend_form_preview = "预览";
@@ -1686,7 +1690,7 @@ var frontend_display_type_is_split = "分栏视图";
1686
1690
  var frontend_display_as = "显示为";
1687
1691
  var frontend_record_sum = "个项目";
1688
1692
  var frontend_button_reload_tooltip = "刷新";
1689
- var frontend_button_search_tooltip = "高级搜索";
1693
+ var frontend_button_search_tooltip = "筛选";
1690
1694
  var frontend_fields_filter_button_search = "搜索";
1691
1695
  var frontend_fields_filter_button_settings = "选择搜索项";
1692
1696
  var frontend_button_listview_control_tooltip = "列表视图控制";
@@ -1759,6 +1763,7 @@ var zh_cn = {
1759
1763
  frontend_form_save: frontend_form_save,
1760
1764
  frontend_form_save_and_new: frontend_form_save_and_new,
1761
1765
  frontend_form_cancel: frontend_form_cancel,
1766
+ frontend_form_reset: frontend_form_reset,
1762
1767
  frontend_form_new: frontend_form_new,
1763
1768
  frontend_form_edit: frontend_form_edit,
1764
1769
  frontend_form_preview: frontend_form_preview,
@@ -1926,7 +1931,12 @@ async function getQuickEditSchema(object, columnField, options){
1926
1931
  if (field.disabled) {
1927
1932
  quickEditSchema = false;
1928
1933
  } else {
1929
- var fieldSchema = await convertSFieldToAmisField(field, false, ___namespace.omit(options, 'buttons'));
1934
+ var fieldCtx = Object.assign({}, ___namespace.omit(options, 'buttons'), {
1935
+ defaults: Object.assign({}, options.defaults, {
1936
+ formSchema: quickEditSchema
1937
+ })
1938
+ });
1939
+ var fieldSchema = await convertSFieldToAmisField(field, false, fieldCtx);
1930
1940
  //存在属性上可编辑,实际不可编辑的字段,convertSFieldToAmisField函数可能会返回undefined,如summary
1931
1941
  if (!!fieldSchema) {
1932
1942
  quickEditSchema.body.push(fieldSchema);
@@ -2359,14 +2369,19 @@ function getFieldWidth(width){
2359
2369
  }
2360
2370
 
2361
2371
  async function getColumnItemOnClick(field, options){
2362
- const recordPage = await getPage({ type: 'record', appId: options.appId, objectName: options.objectName, formFactor: options.formFactor });
2372
+ let objectApiName = options.objectName;
2373
+ if(!(field.is_name || field.name === options.labelFieldName)){
2374
+ objectApiName = field.reference_to;
2375
+ }
2376
+ const recordPage = await getPage({ type: 'record', appId: options.appId, objectName: objectApiName, formFactor: options.formFactor });
2363
2377
  const drawerRecordDetailSchema = recordPage ? Object.assign({}, recordPage.schema, {
2364
2378
  "recordId": `\${${options.idFieldName}}`,
2365
2379
  "data": {
2366
2380
  ...recordPage.schema.data,
2367
2381
  "_inDrawer": true, // 用于判断是否在抽屉中
2368
2382
  "recordLoaded": false, // 重置数据加载状态
2369
- "recordId": `\${${options.idFieldName}}`//审批微页面依赖了作用域中的recordId
2383
+ "recordId": `\${${options.idFieldName}}`,//审批微页面依赖了作用域中的recordId
2384
+ "_tableObjectName": options.objectName
2370
2385
  }
2371
2386
  }) : {
2372
2387
  "type": "steedos-record-detail",
@@ -2377,12 +2392,16 @@ async function getColumnItemOnClick(field, options){
2377
2392
  "data": {
2378
2393
  "_inDrawer": true, // 用于判断是否在抽屉中
2379
2394
  "recordLoaded": false, // 重置数据加载状态
2395
+ "_tableObjectName": options.objectName
2380
2396
  }
2381
2397
  };
2382
2398
 
2383
2399
  if(!(field.is_name || field.name === options.labelFieldName)){
2384
2400
  drawerRecordDetailSchema.objectApiName = field.reference_to;
2385
2401
  drawerRecordDetailSchema.recordId = `\${_display.${field.name}.value}`;
2402
+ // if (recordPage){
2403
+ // drawerRecordDetailSchema.data.recordId = `\${_display.${field.name}.value}`
2404
+ // }
2386
2405
  }
2387
2406
  return {
2388
2407
  "click": {
@@ -2532,6 +2551,33 @@ async function getTableColumns(object, fields, options){
2532
2551
  static: true,
2533
2552
  }, fieldAmis, {name: field.name});
2534
2553
  }
2554
+ else if(field.type === 'lookup' || field.type === 'master_detail'){
2555
+ columnItem = Object.assign({}, {
2556
+ type: "static-wrapper",
2557
+ name: field.name,
2558
+ label: field.label,
2559
+ sortable: field.sortable,
2560
+ width: getFieldWidth(field.width),
2561
+ toggled: field.toggled,
2562
+ className,
2563
+ size: "none",
2564
+ inputClassName: "inline",
2565
+ body: {
2566
+ type: "steedos-field",
2567
+ static: true,
2568
+ tableObjectName: options.objectName,
2569
+ config: {
2570
+ type: "lookup",
2571
+ reference_to: field.reference_to,
2572
+ name: field.name,
2573
+ is_name: field.is_name,
2574
+ label: null,
2575
+ multiple: field.multiple,
2576
+ amis: Object.assign({}, fieldAmis, { label: null })
2577
+ }
2578
+ }
2579
+ }, fieldAmis, {name: field.name});
2580
+ }
2535
2581
  else {
2536
2582
  const tpl = await getFieldTpl(field, options);
2537
2583
  let type = 'static-text';
@@ -2580,10 +2626,20 @@ async function getTableColumns(object, fields, options){
2580
2626
  columnItem.defaultColor = null;
2581
2627
  }
2582
2628
 
2583
- if(window.innerWidth >= 768 && ((field.is_name || field.name === options.labelFieldName) || ((field.type == 'lookup' || field.type == 'master_detail') && ___namespace.isString(field.reference_to) && field.multiple != true)) && options.isRelated){
2629
+ let needClickEvent = false;
2630
+ // if (options.isRelated){
2631
+ // // 子表列表上,Lookup字段和名称字段都需要点击事件
2632
+ // needClickEvent = ((field.is_name || field.name === options.labelFieldName) || ((field.type == 'lookup' || field.type == 'master_detail') && _.isString(field.reference_to) && field.multiple != true));
2633
+ // }
2634
+ // else {// if (isObjectListview)
2635
+ // // 列表视图、对象表格中,Lookup字段需要点击事件
2636
+ // needClickEvent = (field.type == 'lookup' || field.type == 'master_detail') && _.isString(field.reference_to) && field.multiple != true;
2637
+ // }
2638
+ // lookup字段走steedos-field组件了,所以这里只需要判断子表名称字段才额外加点击事件弹出右侧详情
2639
+ needClickEvent = options.isRelated && (field.is_name || field.name === options.labelFieldName);
2640
+ if(window.innerWidth >= 768 && needClickEvent){
2584
2641
  columnItem.onEvent = await getColumnItemOnClick(field, options);
2585
2642
  }
2586
-
2587
2643
  }
2588
2644
  }
2589
2645
  if(columnItem){
@@ -4935,9 +4991,9 @@ const getSchema$5 = async (uiSchema, ctx) => {
4935
4991
  "body": [
4936
4992
  {
4937
4993
  "type": "button",
4994
+ "level": "primary",
4938
4995
  "label": i18next__default["default"].t('frontend_form_new'),
4939
4996
  "id": "u:standard_new",
4940
- "level": "default",
4941
4997
  "onEvent": {
4942
4998
  "click": {
4943
4999
  "weight": 0,
@@ -5138,8 +5194,8 @@ const getSchema$4 = async (uiSchema, ctx) => {
5138
5194
  /*
5139
5195
  * @Author: 殷亮辉 yinlianghui@hotoa.com
5140
5196
  * @Date: 2023-03-22 09:31:21
5141
- * @LastEditors: baozhoutao@steedos.com
5142
- * @LastEditTime: 2024-02-18 16:06:21
5197
+ * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
5198
+ * @LastEditTime: 2025-04-07 16:02:53
5143
5199
  */
5144
5200
  const getSchema$3 = (uiSchema)=>{
5145
5201
  return {
@@ -5199,6 +5255,17 @@ const getSchema$3 = (uiSchema)=>{
5199
5255
  "_isRelated": "${_isRelated}"
5200
5256
  },
5201
5257
  "expression": `\${_master.objectName != '${uiSchema.name}' && _master.objectName}`
5258
+ },
5259
+ // 列表视图、对象表格组件上的lookup字段,点开右侧弹出drawer窗口,删除记录后刷新列表
5260
+ {
5261
+ "actionType": "broadcast",
5262
+ "args": {
5263
+ "eventName": "@data.changed.${_tableObjectName}"
5264
+ },
5265
+ "data": {
5266
+ "objectName": "${_tableObjectName}"
5267
+ },
5268
+ "expression": `\${_tableObjectName != '${uiSchema.name}' && _tableObjectName}`
5202
5269
  }
5203
5270
  ]
5204
5271
  }
@@ -6113,7 +6180,7 @@ async function getObjectFieldsFilterFormSchema(ctx) {
6113
6180
  const formSchema = {
6114
6181
  "type": "service",
6115
6182
  "visibleOn": "this.filterFormSearchableFields && this.filterFormSearchableFields.length",
6116
- "className": ctx.formFactor === 'SMALL' ? "slds-filters__body p-0 mb-2 overflow-y-auto overflow-x-hidden" : "slds-filters__body p-0 sm:grid sm:gap-4 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 2xl:grid-cols-6 p-1",
6183
+ "className": ctx.formFactor === 'SMALL' ? "slds-filters__body p-0 mb-2 overflow-y-auto overflow-x-hidden" : "slds-filters__body p-0 sm:grid sm:gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 p-1",
6117
6184
  "style":{
6118
6185
  "max-height":ctx.formFactor === 'SMALL'?"30vh":"unset"
6119
6186
  },
@@ -6348,6 +6415,21 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
6348
6415
  let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service", {name: "service_object_table_crud"});
6349
6416
  crudService && crudService.setData({isFieldsFilterEmpty: true, showFieldsFilter: false});
6350
6417
  `;
6418
+ /**
6419
+ 给lookup字段配置filter_form_data时可以配置为amis变量,也可以配置为事态key-value键值对象值:
6420
+ ```
6421
+ "filter_form_data": "${selectedPublicGroupFilterFormData|toJson}"
6422
+ ```
6423
+ or
6424
+ ```
6425
+ "filter_form_data": {
6426
+ "public_group_ids": [
6427
+ "67addbef39f9a4503789b38d"
6428
+ ]
6429
+ }
6430
+ ```
6431
+ */
6432
+ const filterFormValues = ctx.filter_form_data;
6351
6433
  const dataProviderInited = `
6352
6434
  const searchableFields = ${JSON.stringify(searchableFields)};
6353
6435
  const autoOpenFilter = ${autoOpenFilter};
@@ -6385,6 +6467,16 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
6385
6467
  }
6386
6468
  setData({ filterFormSearchableFields: defaultSearchableFields });
6387
6469
  if(isLookup){
6470
+ let filterFormValues = ${_.isObject(filterFormValues) ? JSON.stringify(filterFormValues) : ('"' + filterFormValues + '"')} || {};
6471
+ const isAmisFormula = typeof filterFormValues === "string" && filterFormValues.indexOf("\${") > -1;
6472
+ if (isAmisFormula){
6473
+ filterFormValues = AmisCore.evaluate(filterFormValues, data) || {};
6474
+ }
6475
+ if (_.isObject(filterFormValues) || !_.isEmpty(filterFormValues)){
6476
+ let fields = data.uiSchema && data.uiSchema.fields;
6477
+ filterFormValues = SteedosUI.getSearchFilterFormValues(filterFormValues, fields);
6478
+ setData({ ...filterFormValues });
6479
+ }
6388
6480
  // looup字段过滤器不在本地缓存记住过滤条件,所以初始始终隐藏过滤器
6389
6481
  setData({ showFieldsFilter: autoOpenFilter });
6390
6482
  }
@@ -6541,6 +6633,7 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
6541
6633
  "body": [
6542
6634
  {
6543
6635
  "type": "button",
6636
+ "level": "primary",
6544
6637
  "id": btnSearchId,
6545
6638
  "label": i18next__default["default"].t('frontend_fields_filter_button_search'),
6546
6639
  "icon": "fa fa-search",
@@ -6558,7 +6651,7 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
6558
6651
  },
6559
6652
  {
6560
6653
  "type": "button",
6561
- "label": i18next__default["default"].t('frontend_form_cancel'),
6654
+ "label": i18next__default["default"].t('frontend_form_reset'),
6562
6655
  "name": "btn_filter_form_cancel",
6563
6656
  // "visibleOn": "this.filterFormSearchableFields && this.filterFormSearchableFields.length",
6564
6657
  "onEvent": {
@@ -6648,7 +6741,6 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
6648
6741
  "className": "steedos-amis-form"
6649
6742
  }
6650
6743
  ],
6651
- "id": "u:ca99fa9fe1b1",
6652
6744
  "actions": [
6653
6745
  {
6654
6746
  "type": "button",
@@ -6676,13 +6768,15 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
6676
6768
  "actionType": "custom",
6677
6769
  "script": onSearchableFieldsChangeScript
6678
6770
  },
6679
- {
6680
- "actionType": "click",
6681
- "componentId": btnSearchId,
6682
- "args": {
6683
- "__from_fields_filter_settings_confirm": true
6684
- }
6685
- },
6771
+ // 自动触发搜索事件会造成bug,应该是升级amis到6.4造成的,见:https://github.com/steedos/steedos-platform/issues/7121
6772
+ // 变更搜索项后,用户一般会点击搜索按钮,所以这里不自动触发搜索事件
6773
+ // {
6774
+ // "actionType": "click",
6775
+ // "componentId": btnSearchId,
6776
+ // "args": {
6777
+ // "__from_fields_filter_settings_confirm": true
6778
+ // }
6779
+ // },
6686
6780
  {
6687
6781
  "componentId": "",
6688
6782
  "args": {},
@@ -6713,12 +6807,11 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
6713
6807
  ]
6714
6808
  }
6715
6809
  },
6716
- "id": "u:b96d84868a5a",
6717
6810
  "level": "link"
6718
6811
  }
6719
6812
  ],
6720
6813
  "size": "xs",
6721
- "className": "space-x-4"
6814
+ "className": "space-x-2"
6722
6815
  },
6723
6816
  "size": "xs",
6724
6817
  "className": "slds-filters__footer slds-grid slds-shrink-none flex justify-between p-0"
@@ -7664,7 +7757,7 @@ function getObjectListHeader(objectSchema, listViewName, ctx) {
7664
7757
  let headerSchema = [{
7665
7758
  "type": "wrapper",
7666
7759
  "body": body,
7667
- "className": `p-3 m-4 shadow rounded bg-white`
7760
+ "className": `px-3 pt-3 pb-0 m-1 bg-white`
7668
7761
  }];
7669
7762
  // console.log(`getObjectListHeader`, objectSchema, listViewName, ctx)
7670
7763
  return headerSchema;
@@ -9046,7 +9139,7 @@ function getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLooku
9046
9139
  return {
9047
9140
  "type": "tooltip-wrapper",
9048
9141
  "id": "steedos_crud_toolbar_quick_search",
9049
- "align": "left",
9142
+ "align": "right",
9050
9143
  "title": "",
9051
9144
  "content": "可搜索字段:" + searchableFieldsLabel.join(","),
9052
9145
  "placement": "bottom",
@@ -9060,6 +9153,7 @@ function getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLooku
9060
9153
  "name": keywordsSearchBoxName,
9061
9154
  "placeholder": "快捷搜索",
9062
9155
  "value": crudKeywords,
9156
+ "mini": true,
9063
9157
  "clearable": true,//因为清除并不会触发失去焦点事件,只有禁用,但是它会触发change事件,所以等升级到amis 3.4+后可以重新放开
9064
9158
  "clearAndSubmit": true,
9065
9159
  "searchImediately": false,
@@ -9108,7 +9202,7 @@ function getObjectHeaderToolbar(mainObject, fields, formFactor, {
9108
9202
  if(!hiddenCount){
9109
9203
  toolbarCount = {
9110
9204
  "type": "tpl",
9111
- "align": "right",
9205
+ "align": "left",
9112
9206
  "className": "text-gray-500 mr-2",
9113
9207
  "tpl": "${count} " + i18next__default["default"].t('frontend_record_sum')
9114
9208
  };
@@ -9192,7 +9286,7 @@ function getObjectHeaderToolbar(mainObject, fields, formFactor, {
9192
9286
  "animation": true,
9193
9287
  "visibleOn": "${isFieldsFilterEmpty == false && isLookup != true}"
9194
9288
  },
9195
- "align": "left",
9289
+ "align": "right",
9196
9290
  "className": "bg-white p-2 rounded text-gray-500",
9197
9291
  "onEvent": {
9198
9292
  "click": {
@@ -9214,27 +9308,27 @@ function getObjectHeaderToolbar(mainObject, fields, formFactor, {
9214
9308
  // 当出现空的.antd-Crud-toolbar-item dom时会影响toolbar元素的maring-right css样式计算,如果有动态需要应该加到动态数组变量toolbars中
9215
9309
  let toolbars = [];
9216
9310
  if(formFactor === 'SMALL'){
9217
- if(toolbarCount){
9218
- toolbars.push(toolbarCount);
9219
- }
9220
- toolbars.push(toolbarReloadButton);
9221
- toolbars.push(toolbarDisplayAsButton);
9311
+ // if(toolbarCount){
9312
+ // toolbars.push(toolbarCount);
9313
+ // }
9314
+ // toolbars.push(toolbarReloadButton);
9315
+ toolbars.push(toolbarDQuickSearchBox);
9222
9316
  if(toolbarFilter){
9223
9317
  toolbars.push(toolbarFilter);
9224
9318
  }
9225
- toolbars.push(toolbarDQuickSearchBox);
9319
+ toolbars.push(toolbarDisplayAsButton);
9226
9320
  return [
9227
9321
  // "bulkActions",
9228
9322
  ...(headerToolbarItems || []),
9229
9323
  ...toolbars,
9230
9324
  ]
9231
9325
  }else {
9326
+ toolbars.push(toolbarDQuickSearchBox);
9232
9327
  toolbars.push(toolbarReloadButton);
9233
9328
  toolbars.push(toolbarDisplayAsButton);
9234
9329
  if(mainObject?.permissions?.allowCreateListViews){
9235
9330
  toolbars.push(getSettingListviewToolbarButtonSchema());
9236
9331
  }
9237
- toolbars.push(toolbarDQuickSearchBox);
9238
9332
  if(toolbarFilter){
9239
9333
  toolbars.push(toolbarFilter);
9240
9334
  }
@@ -9914,6 +10008,17 @@ async function getObjectForm(objectSchema, ctx){
9914
10008
  },
9915
10009
  "expression": `\${_master.objectName != '${objectSchema.name}' && _master.objectName}`
9916
10010
  },
10011
+ // 列表视图、对象表格组件上的lookup字段,点开右侧弹出drawer窗口,修改记录后刷新列表
10012
+ {
10013
+ "actionType": "broadcast",
10014
+ "args": {
10015
+ "eventName": "@data.changed.${_tableObjectName}"
10016
+ },
10017
+ "data": {
10018
+ "objectName": "${_tableObjectName}"
10019
+ },
10020
+ "expression": `\${_tableObjectName != '${objectSchema.name}' && _tableObjectName}`
10021
+ },
9917
10022
  ...submitSuccActions,
9918
10023
  // {
9919
10024
  // "actionType": "custom",
@@ -11042,7 +11147,8 @@ async function getRecordDetailHeaderSchema(objectName,recordId, options){
11042
11147
  }
11043
11148
 
11044
11149
  async function getRecordDetailSchema(objectName, appId, props = {}){
11045
- const uiSchema = await getUISchema(objectName);
11150
+ const uiSchema = await getUISchema(objectName);
11151
+
11046
11152
  const relatedLists = await getObjectRelatedList(objectName);
11047
11153
  const detailed = {
11048
11154
  "title": i18next__default["default"].t('frontend_record_detail_tab_detailed'),
@@ -11083,6 +11189,21 @@ async function getRecordDetailSchema(objectName, appId, props = {}){
11083
11189
  if(relatedLists.length){
11084
11190
  content.tabs.push(related);
11085
11191
  }
11192
+ const contents = [content];
11193
+ if (uiSchema.enable_chatter && window.BuilderLiveblocks) {
11194
+ const chatter = {
11195
+ "type": "rooms-provider",
11196
+ "baseUrl": "${context.rootUrl}",
11197
+ "body": [
11198
+ {
11199
+ "type": "rooms-comments",
11200
+ "className": "flex flex-col gap-3 m-4",
11201
+ "roomId": "objects:${objectName}:${recordId}",
11202
+ }
11203
+ ]
11204
+ };
11205
+ contents.push(chatter);
11206
+ }
11086
11207
  // content.tabs = reverse(content.tabs)
11087
11208
  if(content.tabs.length == 1){
11088
11209
  content.className += " steedos-record-tabs--single";
@@ -11102,7 +11223,7 @@ async function getRecordDetailSchema(objectName, appId, props = {}){
11102
11223
  "showBackButton": props.showBackButton,
11103
11224
  _reloadKey: props._reloadKey
11104
11225
  },
11105
- content
11226
+ ...contents,
11106
11227
  ],
11107
11228
  "objectApiName": "${objectName}",
11108
11229
  "recordId": "${recordId}",
@@ -11886,14 +12007,42 @@ function getLookupSapceUserTreeSchema(isMobile){
11886
12007
  {
11887
12008
  "actionType": "custom",
11888
12009
  "script": `
12010
+ console.log("lookup-tree-event.data:",event.data);
12011
+ console.log("lookup-tree-event.data.value.label:",event.data.value.label);
12012
+ console.log("lookup-tree-event.data.value.value:",event.data.value.value);
11889
12013
  const scope = event.context.scoped;
11890
- var filterFormValues={
12014
+ var treeFilterFormValues={
11891
12015
  "__searchable__organizations_parents":event.data.value.value
11892
12016
  }
11893
- var listView = scope.parent.getComponents().find(function(n){
11894
- return n.props.type === "crud";
12017
+ // var listView = scope.parent.getComponents().find(function(n){
12018
+ // return n.props.type === "crud";
12019
+ // });
12020
+ // listView.handleFilterSubmit(Object.assign({}, filterFormValues));
12021
+ let __lookupField = event.data.__lookupField;
12022
+ let crud = SteedosUI.getClosestAmisComponentByType(scope, "crud");
12023
+ var filterForm = scope.getComponents().find(function(n){
12024
+ return n.props.type === "form";
11895
12025
  });
11896
- listView.handleFilterSubmit(Object.assign({}, filterFormValues));
12026
+ let filterFormValues = filterForm.getData();
12027
+ filterFormValues = JSON.parse(JSON.stringify(filterFormValues)); //只取当层数据域中数据,去除__super层数据
12028
+ const changedFilterFormValues = _.pickBy(filterFormValues, function(n,k){return /^__searchable__/.test(k);});
12029
+ Object.assign(changedFilterFormValues, treeFilterFormValues);
12030
+ // 同步__changedFilterFormValues中的值
12031
+ let __changedFilterFormValuesKey = "__changedFilterFormValues";
12032
+ if(__lookupField){
12033
+ let lookupTag = "__lookup__" + __lookupField.name + "__" + __lookupField.reference_to;
12034
+ if(__lookupField.reference_to_field){
12035
+ lookupTag += "__" + __lookupField.reference_to_field;
12036
+ }
12037
+ __changedFilterFormValuesKey += lookupTag;
12038
+ }
12039
+ if(crud){
12040
+ let crudData = crud.getData();
12041
+ crudData[__changedFilterFormValuesKey] = changedFilterFormValues;
12042
+ crud.setData(crudData);
12043
+ }
12044
+ filterForm.setData(treeFilterFormValues);
12045
+ filterForm.handleFormSubmit(event);
11897
12046
  `
11898
12047
  },
11899
12048
  {
@@ -12111,6 +12260,7 @@ async function lookupToAmisPicker(field, readonly, ctx){
12111
12260
  // field.name可能是带点的名称,比如审批王中子表字段'instances.instances_submitter',如果不替换掉点,会造成审批王表单中新建子表行时报错
12112
12261
  let keywordsSearchBoxName = `__keywords_lookup__${field.name.replace(/\./g, "_")}__to__${refObjectConfig.name}`;
12113
12262
 
12263
+ const filterFormValues = field.filter_form_data;
12114
12264
  source.requestAdaptor = `
12115
12265
  let __changedFilterFormValuesKey = "__changedFilterFormValues";
12116
12266
  let __lookupField = api.data.$self.__lookupField;
@@ -12153,7 +12303,20 @@ async function lookupToAmisPicker(field, readonly, ctx){
12153
12303
  }
12154
12304
  }
12155
12305
 
12156
- var searchableFilter = SteedosUI.getSearchFilter(selfData) || [];
12306
+ let filterFormValues = {};
12307
+ if (selfData.op !== 'loadOptions'){
12308
+ filterFormValues = ${___namespace.isObject(filterFormValues) ? JSON.stringify(filterFormValues) : ('"' + filterFormValues + '"')} || {};
12309
+ const isAmisFormula = typeof filterFormValues === "string" && filterFormValues.indexOf("\${") > -1;
12310
+ if (isAmisFormula){
12311
+ filterFormValues = AmisCore.evaluate(filterFormValues, context) || {};
12312
+ }
12313
+ if (_.isObject(filterFormValues) || !_.isEmpty(filterFormValues)){
12314
+ let fields = api.data.$self.uiSchema && api.data.$self.uiSchema.fields;
12315
+ filterFormValues = SteedosUI.getSearchFilterFormValues(filterFormValues, fields);
12316
+ }
12317
+ }
12318
+
12319
+ var searchableFilter = SteedosUI.getSearchFilter(Object.assign({}, { ...filterFormValues }, selfData)) || [];
12157
12320
 
12158
12321
  if(searchableFilter.length > 0){
12159
12322
  if(filters.length > 0 ){
@@ -12343,7 +12506,7 @@ async function lookupToAmisPicker(field, readonly, ctx){
12343
12506
  return payload;
12344
12507
  `;
12345
12508
  }
12346
- let top = 20;
12509
+ let top = 500;
12347
12510
 
12348
12511
  if(refObjectConfig.paging && refObjectConfig.paging.enabled === false){
12349
12512
  top = 1000;
@@ -12393,7 +12556,8 @@ async function lookupToAmisPicker(field, readonly, ctx){
12393
12556
  keywordsSearchBoxName,
12394
12557
  searchable_fields: field.searchable_fields,
12395
12558
  auto_open_filter: field.auto_open_filter,
12396
- show_left_filter: field.show_left_filter
12559
+ show_left_filter: field.show_left_filter,
12560
+ filter_form_data: field.filter_form_data
12397
12561
  });
12398
12562
  }
12399
12563
  pickerSchema.data = Object.assign({}, pickerSchema.data, {
@@ -12466,7 +12630,7 @@ async function lookupToAmisPicker(field, readonly, ctx){
12466
12630
  }
12467
12631
 
12468
12632
  const ctx = ${JSON.stringify(ctx)};
12469
- const componentId = ctx.defaults.formSchema.id;
12633
+ const componentId = ctx.defaults && ctx.defaults.formSchema && ctx.defaults.formSchema.id;
12470
12634
  doAction({
12471
12635
  actionType: 'setValue',
12472
12636
  componentId: componentId,
@@ -12893,6 +13057,10 @@ async function lookupToAmis(field, readonly, ctx){
12893
13057
  }
12894
13058
  let amisSchema;
12895
13059
  // 默认使用下拉框模式显示lookup选项,只能配置了enable_enhanced_lookup才使用弹出增强模式
13060
+ if(enableEnhancedLookup == true && field.amis && field.amis.type && field.amis.type !== 'picker'){
13061
+ // 如果配置了amis.type且其值不是picker,则不使用弹出增强模式
13062
+ enableEnhancedLookup = false;
13063
+ }
12896
13064
  if(enableEnhancedLookup == true){
12897
13065
  amisSchema = await lookupToAmisPicker(field, readonly, ctx);
12898
13066
  }else if(refObject.enable_tree) {
@@ -14024,7 +14192,16 @@ async function convertSFieldToAmisField(field, readonly, ctx) {
14024
14192
  return convertData
14025
14193
  }
14026
14194
  // if(ctx.mode === 'edit'){
14027
- let convertDataResult = Object.assign({}, baseData, convertData, { labelClassName: 'text-left', clearValueOnHidden: true, fieldName: field.name}, field.amis, {name: baseData.name});
14195
+ let convertDataResult;
14196
+ if(convertData.type == "steedos-field"){
14197
+ // 如果是steedos-field,不能把amis属性合并到steedos-field根属性中,要合并也是合并到steedos-field的config.amis中
14198
+ // 而steedos-field字段的amis属性本身就在config.amis中了,所以这里不需要再合并field.amis
14199
+ // 目前测试到受影响的是,把字段的amis属性配置为{"type": "checkboxes"}时,ObjectForm只读模式下,lookup字段返回的是type为steedos-field的组件,此时field.amis中的type不应该合并到steedos-field根属性中
14200
+ convertDataResult = Object.assign({}, baseData, convertData, { labelClassName: 'text-left', clearValueOnHidden: true, fieldName: field.name}, {name: baseData.name});
14201
+ }
14202
+ else {
14203
+ convertDataResult = Object.assign({}, baseData, convertData, { labelClassName: 'text-left', clearValueOnHidden: true, fieldName: field.name}, field.amis, {name: baseData.name});
14204
+ }
14028
14205
  // 只读时file字段的外层control层若存在name,内部each组件存在问题
14029
14206
  if(readonly && field.type == "file") {
14030
14207
  convertDataResult.name = "";