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

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"
@@ -7422,7 +7515,6 @@ function getObjectListHeaderFirstLine(objectSchema, listViewName, ctx) {
7422
7515
  "id": "u:ce9e3fcc411a"
7423
7516
  }
7424
7517
  ],
7425
- "className": "steedos-overflow-visible-dialog",
7426
7518
  "showCloseButton": true,
7427
7519
  "showErrorMsg": true,
7428
7520
  "showLoading": true,
@@ -7664,7 +7756,7 @@ function getObjectListHeader(objectSchema, listViewName, ctx) {
7664
7756
  let headerSchema = [{
7665
7757
  "type": "wrapper",
7666
7758
  "body": body,
7667
- "className": `p-3 m-4 shadow rounded bg-white`
7759
+ "className": `px-3 pt-3 pb-0 m-1 bg-white`
7668
7760
  }];
7669
7761
  // console.log(`getObjectListHeader`, objectSchema, listViewName, ctx)
7670
7762
  return headerSchema;
@@ -8412,7 +8504,6 @@ const getSetListviewFiltersButtonSchema = ()=>{
8412
8504
  }
8413
8505
  }
8414
8506
  ],
8415
- "className": "steedos-overflow-visible-dialog",
8416
8507
  "showCloseButton": true,
8417
8508
  "showErrorMsg": true,
8418
8509
  "showLoading": true,
@@ -9046,7 +9137,7 @@ function getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLooku
9046
9137
  return {
9047
9138
  "type": "tooltip-wrapper",
9048
9139
  "id": "steedos_crud_toolbar_quick_search",
9049
- "align": "left",
9140
+ "align": "right",
9050
9141
  "title": "",
9051
9142
  "content": "可搜索字段:" + searchableFieldsLabel.join(","),
9052
9143
  "placement": "bottom",
@@ -9060,6 +9151,7 @@ function getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLooku
9060
9151
  "name": keywordsSearchBoxName,
9061
9152
  "placeholder": "快捷搜索",
9062
9153
  "value": crudKeywords,
9154
+ "mini": true,
9063
9155
  "clearable": true,//因为清除并不会触发失去焦点事件,只有禁用,但是它会触发change事件,所以等升级到amis 3.4+后可以重新放开
9064
9156
  "clearAndSubmit": true,
9065
9157
  "searchImediately": false,
@@ -9108,7 +9200,7 @@ function getObjectHeaderToolbar(mainObject, fields, formFactor, {
9108
9200
  if(!hiddenCount){
9109
9201
  toolbarCount = {
9110
9202
  "type": "tpl",
9111
- "align": "right",
9203
+ "align": "left",
9112
9204
  "className": "text-gray-500 mr-2",
9113
9205
  "tpl": "${count} " + i18next__default["default"].t('frontend_record_sum')
9114
9206
  };
@@ -9192,7 +9284,7 @@ function getObjectHeaderToolbar(mainObject, fields, formFactor, {
9192
9284
  "animation": true,
9193
9285
  "visibleOn": "${isFieldsFilterEmpty == false && isLookup != true}"
9194
9286
  },
9195
- "align": "left",
9287
+ "align": "right",
9196
9288
  "className": "bg-white p-2 rounded text-gray-500",
9197
9289
  "onEvent": {
9198
9290
  "click": {
@@ -9214,27 +9306,27 @@ function getObjectHeaderToolbar(mainObject, fields, formFactor, {
9214
9306
  // 当出现空的.antd-Crud-toolbar-item dom时会影响toolbar元素的maring-right css样式计算,如果有动态需要应该加到动态数组变量toolbars中
9215
9307
  let toolbars = [];
9216
9308
  if(formFactor === 'SMALL'){
9217
- if(toolbarCount){
9218
- toolbars.push(toolbarCount);
9219
- }
9220
- toolbars.push(toolbarReloadButton);
9221
- toolbars.push(toolbarDisplayAsButton);
9309
+ // if(toolbarCount){
9310
+ // toolbars.push(toolbarCount);
9311
+ // }
9312
+ // toolbars.push(toolbarReloadButton);
9313
+ toolbars.push(toolbarDQuickSearchBox);
9222
9314
  if(toolbarFilter){
9223
9315
  toolbars.push(toolbarFilter);
9224
9316
  }
9225
- toolbars.push(toolbarDQuickSearchBox);
9317
+ toolbars.push(toolbarDisplayAsButton);
9226
9318
  return [
9227
9319
  // "bulkActions",
9228
9320
  ...(headerToolbarItems || []),
9229
9321
  ...toolbars,
9230
9322
  ]
9231
9323
  }else {
9324
+ toolbars.push(toolbarDQuickSearchBox);
9232
9325
  toolbars.push(toolbarReloadButton);
9233
9326
  toolbars.push(toolbarDisplayAsButton);
9234
9327
  if(mainObject?.permissions?.allowCreateListViews){
9235
9328
  toolbars.push(getSettingListviewToolbarButtonSchema());
9236
9329
  }
9237
- toolbars.push(toolbarDQuickSearchBox);
9238
9330
  if(toolbarFilter){
9239
9331
  toolbars.push(toolbarFilter);
9240
9332
  }
@@ -9914,6 +10006,17 @@ async function getObjectForm(objectSchema, ctx){
9914
10006
  },
9915
10007
  "expression": `\${_master.objectName != '${objectSchema.name}' && _master.objectName}`
9916
10008
  },
10009
+ // 列表视图、对象表格组件上的lookup字段,点开右侧弹出drawer窗口,修改记录后刷新列表
10010
+ {
10011
+ "actionType": "broadcast",
10012
+ "args": {
10013
+ "eventName": "@data.changed.${_tableObjectName}"
10014
+ },
10015
+ "data": {
10016
+ "objectName": "${_tableObjectName}"
10017
+ },
10018
+ "expression": `\${_tableObjectName != '${objectSchema.name}' && _tableObjectName}`
10019
+ },
9917
10020
  ...submitSuccActions,
9918
10021
  // {
9919
10022
  // "actionType": "custom",
@@ -10516,7 +10619,7 @@ async function getObjectRelatedListsMiniSchema(objectApiName){
10516
10619
  * @Author: baozhoutao@steedos.com
10517
10620
  * @Date: 2022-07-05 15:55:39
10518
10621
  * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
10519
- * @LastEditTime: 2025-05-20 19:29:36
10622
+ * @LastEditTime: 2025-06-17 20:18:18
10520
10623
  * @Description:
10521
10624
  */
10522
10625
 
@@ -10872,12 +10975,13 @@ async function getListSchema(
10872
10975
  "filtersFunction": listview_filters,
10873
10976
  "sort": sort,
10874
10977
  "ctx": ctx,
10875
- "requestAdaptor": listView.requestAdaptor || ctx.requestAdaptor,
10876
- "adaptor": listView.adaptor || ctx.adaptor,
10978
+ "requestAdaptor": ctx.requestAdaptor || listView.requestAdaptor,
10979
+ "adaptor": ctx.adaptor || listView.adaptor,
10877
10980
  "headerToolbarItems": ctx.headerToolbarItems,
10878
10981
  "filterVisible": ctx.filterVisible,
10879
10982
  "rowClassNameExpr": ctx.rowClassNameExpr,
10880
- "crudDataFilter": ctx.crudDataFilter,
10983
+ "crud": ctx.crud || listView.crud,
10984
+ "crudDataFilter": ctx.crudDataFilter || listView.crudDataFilter ,
10881
10985
  "onCrudDataFilter": ctx.onCrudDataFilter
10882
10986
  };
10883
10987
  // console.log(`getListSchema===>`,amisSchema)
@@ -11042,7 +11146,8 @@ async function getRecordDetailHeaderSchema(objectName,recordId, options){
11042
11146
  }
11043
11147
 
11044
11148
  async function getRecordDetailSchema(objectName, appId, props = {}){
11045
- const uiSchema = await getUISchema(objectName);
11149
+ const uiSchema = await getUISchema(objectName);
11150
+
11046
11151
  const relatedLists = await getObjectRelatedList(objectName);
11047
11152
  const detailed = {
11048
11153
  "title": i18next__default["default"].t('frontend_record_detail_tab_detailed'),
@@ -11083,6 +11188,21 @@ async function getRecordDetailSchema(objectName, appId, props = {}){
11083
11188
  if(relatedLists.length){
11084
11189
  content.tabs.push(related);
11085
11190
  }
11191
+ const contents = [content];
11192
+ if (uiSchema.enable_chatter && window.BuilderLiveblocks) {
11193
+ const chatter = {
11194
+ "type": "rooms-provider",
11195
+ "baseUrl": "${context.rootUrl}",
11196
+ "body": [
11197
+ {
11198
+ "type": "rooms-comments",
11199
+ "className": "flex flex-col gap-3 m-4",
11200
+ "roomId": "objects:${objectName}:${recordId}",
11201
+ }
11202
+ ]
11203
+ };
11204
+ contents.push(chatter);
11205
+ }
11086
11206
  // content.tabs = reverse(content.tabs)
11087
11207
  if(content.tabs.length == 1){
11088
11208
  content.className += " steedos-record-tabs--single";
@@ -11102,7 +11222,7 @@ async function getRecordDetailSchema(objectName, appId, props = {}){
11102
11222
  "showBackButton": props.showBackButton,
11103
11223
  _reloadKey: props._reloadKey
11104
11224
  },
11105
- content
11225
+ ...contents,
11106
11226
  ],
11107
11227
  "objectApiName": "${objectName}",
11108
11228
  "recordId": "${recordId}",
@@ -11886,14 +12006,42 @@ function getLookupSapceUserTreeSchema(isMobile){
11886
12006
  {
11887
12007
  "actionType": "custom",
11888
12008
  "script": `
12009
+ console.log("lookup-tree-event.data:",event.data);
12010
+ console.log("lookup-tree-event.data.value.label:",event.data.value.label);
12011
+ console.log("lookup-tree-event.data.value.value:",event.data.value.value);
11889
12012
  const scope = event.context.scoped;
11890
- var filterFormValues={
12013
+ var treeFilterFormValues={
11891
12014
  "__searchable__organizations_parents":event.data.value.value
11892
12015
  }
11893
- var listView = scope.parent.getComponents().find(function(n){
11894
- return n.props.type === "crud";
12016
+ // var listView = scope.parent.getComponents().find(function(n){
12017
+ // return n.props.type === "crud";
12018
+ // });
12019
+ // listView.handleFilterSubmit(Object.assign({}, filterFormValues));
12020
+ let __lookupField = event.data.__lookupField;
12021
+ let crud = SteedosUI.getClosestAmisComponentByType(scope, "crud");
12022
+ var filterForm = scope.getComponents().find(function(n){
12023
+ return n.props.type === "form";
11895
12024
  });
11896
- listView.handleFilterSubmit(Object.assign({}, filterFormValues));
12025
+ let filterFormValues = filterForm.getData();
12026
+ filterFormValues = JSON.parse(JSON.stringify(filterFormValues)); //只取当层数据域中数据,去除__super层数据
12027
+ const changedFilterFormValues = _.pickBy(filterFormValues, function(n,k){return /^__searchable__/.test(k);});
12028
+ Object.assign(changedFilterFormValues, treeFilterFormValues);
12029
+ // 同步__changedFilterFormValues中的值
12030
+ let __changedFilterFormValuesKey = "__changedFilterFormValues";
12031
+ if(__lookupField){
12032
+ let lookupTag = "__lookup__" + __lookupField.name + "__" + __lookupField.reference_to;
12033
+ if(__lookupField.reference_to_field){
12034
+ lookupTag += "__" + __lookupField.reference_to_field;
12035
+ }
12036
+ __changedFilterFormValuesKey += lookupTag;
12037
+ }
12038
+ if(crud){
12039
+ let crudData = crud.getData();
12040
+ crudData[__changedFilterFormValuesKey] = changedFilterFormValues;
12041
+ crud.setData(crudData);
12042
+ }
12043
+ filterForm.setData(treeFilterFormValues);
12044
+ filterForm.handleFormSubmit(event);
11897
12045
  `
11898
12046
  },
11899
12047
  {
@@ -12111,6 +12259,7 @@ async function lookupToAmisPicker(field, readonly, ctx){
12111
12259
  // field.name可能是带点的名称,比如审批王中子表字段'instances.instances_submitter',如果不替换掉点,会造成审批王表单中新建子表行时报错
12112
12260
  let keywordsSearchBoxName = `__keywords_lookup__${field.name.replace(/\./g, "_")}__to__${refObjectConfig.name}`;
12113
12261
 
12262
+ const filterFormValues = field.filter_form_data;
12114
12263
  source.requestAdaptor = `
12115
12264
  let __changedFilterFormValuesKey = "__changedFilterFormValues";
12116
12265
  let __lookupField = api.data.$self.__lookupField;
@@ -12153,7 +12302,20 @@ async function lookupToAmisPicker(field, readonly, ctx){
12153
12302
  }
12154
12303
  }
12155
12304
 
12156
- var searchableFilter = SteedosUI.getSearchFilter(selfData) || [];
12305
+ let filterFormValues = {};
12306
+ if (selfData.op !== 'loadOptions'){
12307
+ filterFormValues = ${___namespace.isObject(filterFormValues) ? JSON.stringify(filterFormValues) : ('"' + filterFormValues + '"')} || {};
12308
+ const isAmisFormula = typeof filterFormValues === "string" && filterFormValues.indexOf("\${") > -1;
12309
+ if (isAmisFormula){
12310
+ filterFormValues = AmisCore.evaluate(filterFormValues, context) || {};
12311
+ }
12312
+ if (_.isObject(filterFormValues) || !_.isEmpty(filterFormValues)){
12313
+ let fields = api.data.$self.uiSchema && api.data.$self.uiSchema.fields;
12314
+ filterFormValues = SteedosUI.getSearchFilterFormValues(filterFormValues, fields);
12315
+ }
12316
+ }
12317
+
12318
+ var searchableFilter = SteedosUI.getSearchFilter(Object.assign({}, { ...filterFormValues }, selfData)) || [];
12157
12319
 
12158
12320
  if(searchableFilter.length > 0){
12159
12321
  if(filters.length > 0 ){
@@ -12343,7 +12505,7 @@ async function lookupToAmisPicker(field, readonly, ctx){
12343
12505
  return payload;
12344
12506
  `;
12345
12507
  }
12346
- let top = 20;
12508
+ let top = 500;
12347
12509
 
12348
12510
  if(refObjectConfig.paging && refObjectConfig.paging.enabled === false){
12349
12511
  top = 1000;
@@ -12393,7 +12555,8 @@ async function lookupToAmisPicker(field, readonly, ctx){
12393
12555
  keywordsSearchBoxName,
12394
12556
  searchable_fields: field.searchable_fields,
12395
12557
  auto_open_filter: field.auto_open_filter,
12396
- show_left_filter: field.show_left_filter
12558
+ show_left_filter: field.show_left_filter,
12559
+ filter_form_data: field.filter_form_data
12397
12560
  });
12398
12561
  }
12399
12562
  pickerSchema.data = Object.assign({}, pickerSchema.data, {
@@ -12427,7 +12590,9 @@ async function lookupToAmisPicker(field, readonly, ctx){
12427
12590
  {
12428
12591
  "actionType": "custom",
12429
12592
  "script": `
12430
- const masterRecord = event.data._master && event.data._master.record;
12593
+ // lookup字段弹出列表,点击新建按钮,新建记录成功后,触发@data.changed.xxx,
12594
+ // 此时context.props.data值是lookup字段所在表单数据,经测试多层lookup弹出列表新建记录成功后context.props.data始终取的是最近一层的lookup字段所在表单数据,符合预期
12595
+ const masterRecord = context.props.data;//event.data._master && event.data._master.record;
12431
12596
  const fieldConfig = ${JSON.stringify(field)};
12432
12597
  let reference_to = fieldConfig.reference_to;
12433
12598
  let saveValue;
@@ -12437,7 +12602,6 @@ async function lookupToAmisPicker(field, readonly, ctx){
12437
12602
  }
12438
12603
  const saveField = fieldConfig.reference_to_field || '_id';
12439
12604
  const saveFieldValue = newRecord[saveField];
12440
-
12441
12605
  if( fieldConfig._reference_to && (_.isArray(fieldConfig._reference_to) || _.isFunction(fieldConfig._reference_to) || fieldConfig._reference_to.startsWith('function') ) ){
12442
12606
 
12443
12607
  const fieldValue = masterRecord ? masterRecord[fieldConfig.name] : {o: reference_to, ids: []};
@@ -12457,8 +12621,10 @@ async function lookupToAmisPicker(field, readonly, ctx){
12457
12621
 
12458
12622
  }else{
12459
12623
  if(fieldConfig.multiple){
12460
- // TODO: 连续新建多个记录时,因为获取的主记录不是实时的,所以只会勾选最后一个新建的记录。
12461
- const fieldValue = (masterRecord && masterRecord[fieldConfig.name]) || [];
12624
+ // const fieldValue = (masterRecord && masterRecord[fieldConfig.name]) || [];
12625
+ // 连续新建多个记录时,因为masterRecord获取的主记录不是实时的,所以只会勾选最后一个新建的记录
12626
+ // 而下面context.context.component指向的是lookup picker组件,可以直接取到用户实时勾选的记录。
12627
+ const fieldValue = context.context.component.props.store.toJSON().selectedItems
12462
12628
  saveValue = fieldValue.concat(saveFieldValue);
12463
12629
  }else{
12464
12630
  saveValue = saveFieldValue;
@@ -12466,7 +12632,7 @@ async function lookupToAmisPicker(field, readonly, ctx){
12466
12632
  }
12467
12633
 
12468
12634
  const ctx = ${JSON.stringify(ctx)};
12469
- const componentId = ctx.defaults.formSchema.id;
12635
+ const componentId = ctx.defaults && ctx.defaults.formSchema && ctx.defaults.formSchema.id;
12470
12636
  doAction({
12471
12637
  actionType: 'setValue',
12472
12638
  componentId: componentId,
@@ -12893,6 +13059,10 @@ async function lookupToAmis(field, readonly, ctx){
12893
13059
  }
12894
13060
  let amisSchema;
12895
13061
  // 默认使用下拉框模式显示lookup选项,只能配置了enable_enhanced_lookup才使用弹出增强模式
13062
+ if(enableEnhancedLookup == true && field.amis && field.amis.type && field.amis.type !== 'picker'){
13063
+ // 如果配置了amis.type且其值不是picker,则不使用弹出增强模式
13064
+ enableEnhancedLookup = false;
13065
+ }
12896
13066
  if(enableEnhancedLookup == true){
12897
13067
  amisSchema = await lookupToAmisPicker(field, readonly, ctx);
12898
13068
  }else if(refObject.enable_tree) {
@@ -14024,7 +14194,16 @@ async function convertSFieldToAmisField(field, readonly, ctx) {
14024
14194
  return convertData
14025
14195
  }
14026
14196
  // if(ctx.mode === 'edit'){
14027
- let convertDataResult = Object.assign({}, baseData, convertData, { labelClassName: 'text-left', clearValueOnHidden: true, fieldName: field.name}, field.amis, {name: baseData.name});
14197
+ let convertDataResult;
14198
+ if(convertData.type == "steedos-field"){
14199
+ // 如果是steedos-field,不能把amis属性合并到steedos-field根属性中,要合并也是合并到steedos-field的config.amis中
14200
+ // 而steedos-field字段的amis属性本身就在config.amis中了,所以这里不需要再合并field.amis
14201
+ // 目前测试到受影响的是,把字段的amis属性配置为{"type": "checkboxes"}时,ObjectForm只读模式下,lookup字段返回的是type为steedos-field的组件,此时field.amis中的type不应该合并到steedos-field根属性中
14202
+ convertDataResult = Object.assign({}, baseData, convertData, { labelClassName: 'text-left', clearValueOnHidden: true, fieldName: field.name}, {name: baseData.name});
14203
+ }
14204
+ else {
14205
+ convertDataResult = Object.assign({}, baseData, convertData, { labelClassName: 'text-left', clearValueOnHidden: true, fieldName: field.name}, field.amis, {name: baseData.name});
14206
+ }
14028
14207
  // 只读时file字段的外层control层若存在name,内部each组件存在问题
14029
14208
  if(readonly && field.type == "file") {
14030
14209
  convertDataResult.name = "";