@steedos-widgets/amis-lib 1.3.4-beta.17 → 1.3.4-beta.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -1764,6 +1764,13 @@ async function getSelectUserSchema(field, readonly, ctx) {
1764
1764
  return amisSchema;
1765
1765
  }
1766
1766
 
1767
+ /*
1768
+ * @Author: 殷亮辉 yinlianghui@hotoa.com
1769
+ * @Date: 2023-03-22 09:31:21
1770
+ * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
1771
+ * @LastEditTime: 2023-11-03 17:27:37
1772
+ */
1773
+
1767
1774
  const globalTag = '__G_L_O_B_A_L__';
1768
1775
 
1769
1776
  const getParentPath = function (path) {
@@ -1803,7 +1810,39 @@ const isExpression = function (func) {
1803
1810
  return false;
1804
1811
  };
1805
1812
 
1813
+ const getMoment$1 = () => {
1814
+ if (window.amisRequire) {
1815
+ return window.amisRequire("moment");
1816
+ } else if (window.moment) {
1817
+ return window.moment;
1818
+ }
1819
+ };
1820
+
1806
1821
  const parseSingleExpression = function (func, formData, dataPath, global, userSession = {}) {
1822
+ if (global) {
1823
+ let now = new Date();
1824
+ let moment = getMoment$1();
1825
+ let today = moment().utc();
1826
+ today.set("hours", 0);
1827
+ today.set("minutes", 0);
1828
+ today.set("seconds", 0);
1829
+ today.set("milliseconds", 0);
1830
+ today = today.toDate();
1831
+ let timeNow = moment();
1832
+ timeNow.set("year", 1970);
1833
+ timeNow.set("month", 0);
1834
+ timeNow.set("date", 1);
1835
+ timeNow.set("hours", timeNow.hours() + timeNow.utcOffset() / 60);
1836
+ timeNow.set("seconds", 0);
1837
+ timeNow.set("milliseconds", 0);
1838
+ timeNow = timeNow.toDate();
1839
+ Object.assign(global, {
1840
+ now,
1841
+ today,
1842
+ timeNow
1843
+ });
1844
+ }
1845
+
1807
1846
  var error, funcBody, parent, parentPath, str;
1808
1847
 
1809
1848
  if (formData === void 0) {
@@ -4363,7 +4402,8 @@ const getCopyListviewButtonSchema = ()=>{
4363
4402
  "&": "${list_view}",
4364
4403
  "name":"",
4365
4404
  "label": i18next.t('frontend_listview_control_clone_defaultData_label_start') + " ${list_view.label} " + i18next.t('frontend_listview_control_clone_defaultData_label_end'),
4366
- "shared":false
4405
+ "shared":false,
4406
+ "object_name": "${targetObjectName}",
4367
4407
  },
4368
4408
  "fieldsExtend": fieldsExtend$3(),
4369
4409
  "fields": fields(),
@@ -6071,7 +6111,9 @@ async function lookupToAmisPicker(field, readonly, ctx){
6071
6111
  pickerSchema.headerToolbar = getObjectHeaderToolbar(refObjectConfig, fieldsArr, ctx.formFactor, { headerToolbarItems, isLookup: true, keywordsSearchBoxName });
6072
6112
  const isAllowCreate = refObjectConfig.permissions.allowCreate;
6073
6113
  const isCreate = _$1.isBoolean(field.create) ? field.create : true;
6074
- if (isAllowCreate && isCreate) {
6114
+ // lookup字段配置过滤条件就强制不显示新建按钮
6115
+ let isHasFilters = (field.filters || field._filtersFunction) ? true : false;
6116
+ if (isAllowCreate && isCreate && !isHasFilters) {
6075
6117
  const new_button = await getSchema$5(refObjectConfig, { appId: ctx.appId, objectName: refObjectConfig.name, formFactor: ctx.formFactor });
6076
6118
  new_button.align = "right";
6077
6119
  // 保持快速搜索放在最左侧,新建按钮往里插,而不是push到最后
@@ -6445,10 +6487,10 @@ async function lookupToAmis(field, readonly, ctx){
6445
6487
 
6446
6488
  const refObject = await getUISchema(referenceTo.objectName);
6447
6489
 
6448
- // 此处不参考 steedos 的 enable_enhanced_lookup 规则. 如果默认是开启弹出选择,用户选择过程操作太繁琐, 所以默认是关闭弹出选择.
6449
- // 由于amis picker 目前不支持联动, 配置了depend_on时, 使用使用select ,以支持联动
6450
- // TODO: 确认 amis picker 支持联动时, 清理field.depend_on判断
6451
- if(refObject.enable_enhanced_lookup == true && _$1.isEmpty(field.depend_on)){
6490
+ // 优先取字段中配置的enable_enhanced_lookup,字段上没配置时,才从对象上取enable_enhanced_lookup属性
6491
+ let enableEnhancedLookup = _$1.isBoolean(field.enable_enhanced_lookup) ? field.enable_enhanced_lookup : refObject.enable_enhanced_lookup;
6492
+ // 默认使用下拉框模式显示lookup选项,只能配置了enable_enhanced_lookup才使用弹出增强模式
6493
+ if(enableEnhancedLookup == true){
6452
6494
  return await lookupToAmisPicker(field, readonly, ctx);
6453
6495
  }else if(refObject.enable_tree) {
6454
6496
  return await lookupToAmisTreeSelect(field, readonly, Object.assign({}, ctx, {
@@ -6765,8 +6807,8 @@ function getAmisStaticFieldType(type, readonly, options){
6765
6807
  /*
6766
6808
  * @Author: baozhoutao@steedos.com
6767
6809
  * @Date: 2022-10-28 14:15:09
6768
- * @LastEditors: baozhoutao@steedos.com
6769
- * @LastEditTime: 2022-11-02 18:06:16
6810
+ * @LastEditors: liaodaxue
6811
+ * @LastEditTime: 2023-10-30 17:51:54
6770
6812
  * @Description:
6771
6813
  */
6772
6814
 
@@ -6817,11 +6859,26 @@ const getAmisFileEditSchema = (steedosField)=>{
6817
6859
  useChunk: false, // 关闭分块上传
6818
6860
  receiver: {
6819
6861
  method: "post",
6862
+ dataType: "form-data",
6820
6863
  url: `\${context.rootUrl}/s3/${tableName}`,
6821
- data: {
6822
- $: "$$",
6823
- context: `\${context}`,
6824
- },
6864
+ requestAdaptor: `
6865
+ const { _master, global,context } = api.body;
6866
+ // const { recordId, objectName } = _master;
6867
+ const { spaceId, userId, user } = global;
6868
+ /*
6869
+ record_id: recordId,
6870
+ parent: recordId,
6871
+ object_name: objectName,
6872
+ owner_name: user.name,
6873
+ space: spaceId,
6874
+ owner: userId
6875
+ */
6876
+ // 参考platform 2.2版本,附件字段保存时cfs.files.filerecord、cfs.images.filerecord表中的metadata下只保存space、owner两个属性值。
6877
+ api.data.append('space', spaceId);
6878
+ api.data.append('owner', userId);
6879
+
6880
+ return api;
6881
+ `,
6825
6882
  adaptor: `
6826
6883
  const { context } = api.body;
6827
6884
  var rootUrl = context.rootUrl + "/api/files/${tableName}/";
@@ -7685,8 +7742,44 @@ var config = {
7685
7742
  };
7686
7743
 
7687
7744
  async function getQuickEditSchema(field, options){
7745
+ //判断在amis3.2以上环境下,放开批量编辑
7746
+ const isAmisVersionforBatchEdit = amisRequire('amis').version[0] >= 3 && amisRequire('amis').version[2] >= 2;
7688
7747
  const quickEditId = options.objectName + "_" + field.name + "QuickEdit";//定义快速编辑的表单id,用于setvalue传值
7689
7748
  var quickEditSchema = { body: [], id: quickEditId };
7749
+ //select,avatar,image,file等组件无法行记录字段赋值,暂不支持批量编辑;
7750
+ if(field.type != 'avatar' && field.type != 'image' && field.type != 'file' && isAmisVersionforBatchEdit){
7751
+ const submitEvent = {
7752
+ submit: {
7753
+ actions: [
7754
+ {
7755
+ actionType: "custom",
7756
+ script: `
7757
+ const items = event.data.items;
7758
+ const selectedItems = event.data.selectedItems;
7759
+ if(event.data.isBatchEdit){
7760
+ selectedItems.forEach(function(selectedItem){
7761
+ items[selectedItem._index-1]._display.${field.name} = event.data._display.${field.name};
7762
+ })
7763
+ doAction({actionType: 'setValue', "args": {"value": {items}},componentId: "${options.crudId}","dataMergeMode": "override"});
7764
+ selectedItems.forEach(function(selectedItem){
7765
+ doAction({actionType: 'setValue', "args": {"value": event.data.${field.name}},componentId: "${options.objectName + "_" + field.name + "_"}" + selectedItem._index});
7766
+ })
7767
+ }else{
7768
+ items[event.data._index-1]._display.${field.name} = event.data._display.${field.name};
7769
+ doAction({actionType: 'setValue', "args": {"value": {items}},componentId: "${options.crudId}","dataMergeMode": "override"});
7770
+ doAction({actionType: 'setValue', "args": {"value": event.data.${field.name}},componentId: "${options.objectName + "_" + field.name + "_"}" + event.data._index});
7771
+ }
7772
+ `
7773
+ },
7774
+ {
7775
+ "actionType": "closeDialog"
7776
+ }
7777
+ ]
7778
+ }
7779
+ };
7780
+ quickEditSchema.onEvent = submitEvent;
7781
+ }
7782
+
7690
7783
  if (field.disabled) {
7691
7784
  quickEditSchema = false;
7692
7785
  } else {
@@ -7920,6 +8013,14 @@ async function getQuickEditSchema(field, options){
7920
8013
  }
7921
8014
 
7922
8015
  });
8016
+ if(field.type != 'avatar' && field.type != 'image' && field.type != 'file' && isAmisVersionforBatchEdit){
8017
+ quickEditSchema.body.push({
8018
+ "name": "isBatchEdit",
8019
+ "type": "checkbox",
8020
+ "option": "更新${COUNT(selectedItems)}个选定记录",
8021
+ "visibleOn": "${ARRAYSOME(selectedItems, item => item._id === _id) && COUNT(selectedItems)>1}"
8022
+ });
8023
+ }
7923
8024
  } else {
7924
8025
  quickEditSchema = false;
7925
8026
  }
@@ -7985,7 +8086,7 @@ async function getTableColumns(fields, options){
7985
8086
  {
7986
8087
  "args": {
7987
8088
  "api": {
7988
- "url": "${context.rootUrl}/api/files/files/${versions[0]}?download=true",
8089
+ "url": "${(versions[0] && versions[0].url) ? versions[0].url+'?download=true' : context.rootUrl+'/api/files/files/'+versions[0]+'?download=true'}",
7989
8090
  "method": "get",
7990
8091
  "headers": {
7991
8092
  "Authorization": "Bearer ${context.tenantId},${context.authToken}"
@@ -8032,7 +8133,7 @@ async function getTableColumns(fields, options){
8032
8133
  else if(field.type === 'select'){
8033
8134
  const map = getSelectMap(field.options);
8034
8135
  columnItem = Object.assign({}, {
8035
- type: "mapping",
8136
+ type: "static-mapping",
8036
8137
  name: field.name,
8037
8138
  label: field.label,
8038
8139
  map: map,
@@ -8047,7 +8148,7 @@ async function getTableColumns(fields, options){
8047
8148
  const tpl = await getFieldTpl(field, options);
8048
8149
  let type = 'text';
8049
8150
  if(tpl){
8050
- type = 'tpl';
8151
+ type = 'static';
8051
8152
  }else if(field.type === 'html'){
8052
8153
  type = 'markdown';
8053
8154
  }else if(field.type === 'url'){
@@ -8088,6 +8189,7 @@ async function getTableColumns(fields, options){
8088
8189
  columnItem.quickEdit = quickEditSchema;
8089
8190
  columnItem.quickEditEnabledOn = "${is_system !== true}";
8090
8191
  }
8192
+ columnItem.id = `${options.objectName}_${field.name}_\${_index}`;
8091
8193
  columns.push(columnItem);
8092
8194
  }
8093
8195
  }
@@ -8465,6 +8567,7 @@ async function getTableSchema$1(fields, options){
8465
8567
  }
8466
8568
  return {
8467
8569
  mode: "cards",
8570
+ perPageAvailable: [5, 10, 20, 50, 100, 500],
8468
8571
  name: "thelist",
8469
8572
  headerToolbarClassName: "py-2 px-2 border-gray-300 border-solid border-b",
8470
8573
  className: "",
@@ -8487,6 +8590,7 @@ async function getTableSchema$1(fields, options){
8487
8590
 
8488
8591
  return {
8489
8592
  mode: "table",
8593
+ perPageAvailable: [5, 10, 20, 50, 100, 500],
8490
8594
  name: "thelist",
8491
8595
  headerToolbarClassName: "py-2 px-2 border-gray-300 border-solid border-b",
8492
8596
  className: "",
@@ -9121,7 +9225,7 @@ async function getEditFormInitApi(object, recordId, fields, options){
9121
9225
  ${getScriptForRewriteValueForFileFields(fields)}
9122
9226
 
9123
9227
  _.each(dataKeys, function(key){
9124
- if(fieldKeys.indexOf(key)<0){
9228
+ if(fieldKeys.indexOf(key)<0 && key !== "_display"){
9125
9229
  delete data[key];
9126
9230
  }
9127
9231
  })
@@ -10297,7 +10401,8 @@ async function getObjectCRUD(objectSchema, fields, options){
10297
10401
  }
10298
10402
  let tableOptions = Object.assign({
10299
10403
  idFieldName: objectSchema.idFieldName, labelFieldName: labelFieldName,
10300
- permissions:objectSchema.permissions,enable_inline_edit:objectSchema.enable_inline_edit
10404
+ permissions:objectSchema.permissions,enable_inline_edit:objectSchema.enable_inline_edit,
10405
+ crudId: listSchema.id || id
10301
10406
  }, options);
10302
10407
  tableOptions.amisData = createObject(options.amisData || {}, {});
10303
10408
  const table = await getTableSchema$1(fields, tableOptions);
@@ -10461,8 +10566,29 @@ const getFormFields = (objectSchema, formProps)=>{
10461
10566
  return lodash.sortBy(___default.values(fields), "sort_no");
10462
10567
  };
10463
10568
 
10569
+ async function getFormSchemaWithDataFilter(form, options = {}){
10570
+ const { formDataFilter, amisData, env } = options;
10571
+ let onFormDataFilter = options.onFormDataFilter;
10572
+ if (!onFormDataFilter && typeof formDataFilter === 'string') {
10573
+ onFormDataFilter = new Function(
10574
+ 'form',
10575
+ 'env',
10576
+ 'data',
10577
+ formDataFilter
10578
+ );
10579
+ }
10580
+
10581
+ try {
10582
+ onFormDataFilter && (form = await onFormDataFilter(form, env, amisData) || form);
10583
+ } catch (e) {
10584
+ console.warn(e);
10585
+ }
10586
+ return form;
10587
+ }
10588
+
10464
10589
  async function getObjectForm(objectSchema, ctx){
10465
- const { recordId, formFactor, layout = formFactor === 'SMALL' ? 'normal' : "normal", labelAlign, tabId, appId, defaults, submitSuccActions = [] } = ctx;
10590
+ const { recordId, formFactor, layout = formFactor === 'SMALL' ? 'normal' : "normal", labelAlign, tabId, appId, defaults, submitSuccActions = [],
10591
+ formDataFilter, onFormDataFilter, amisData, env } = ctx;
10466
10592
  const fields = ___default.values(objectSchema.fields);
10467
10593
  const formFields = getFormFields(objectSchema, ctx);
10468
10594
  const formSchema = defaults && defaults.formSchema || {};
@@ -10479,7 +10605,8 @@ async function getObjectForm(objectSchema, ctx){
10479
10605
  name: `page_edit_${recordId}`,
10480
10606
  api: await getEditFormInitApi(objectSchema, recordId, fields, ctx),
10481
10607
  data:{
10482
- editFormInited: false
10608
+ editFormInited: false,
10609
+ ...amisData
10483
10610
  },
10484
10611
  // data: {global: getGlobalData('edit'), recordId: recordId, objectName: objectSchema.name, context: {rootUrl: getRootUrl(), tenantId: getTenantId(), authToken: getAuthToken()}},
10485
10612
  initApi: null,
@@ -10546,15 +10673,17 @@ async function getObjectForm(objectSchema, ctx){
10546
10673
  }
10547
10674
  })]
10548
10675
  };
10676
+ amisSchema.body[0] = await getFormSchemaWithDataFilter(amisSchema.body[0], { formDataFilter, onFormDataFilter, amisData, env });
10549
10677
  return amisSchema;
10550
10678
  }
10551
10679
 
10552
10680
  async function getObjectDetail(objectSchema, recordId, ctx){
10553
- const { formFactor, layout = formFactor === 'SMALL' ? 'normal' : "normal", labelAlign } = ctx;
10681
+ const { formFactor, layout = formFactor === 'SMALL' ? 'normal' : "normal", labelAlign,
10682
+ formDataFilter, onFormDataFilter, amisData, env } = ctx;
10554
10683
  const fields = ___default.values(objectSchema.fields);
10555
10684
  const formFields = getFormFields(objectSchema, ctx);
10556
10685
  const serviceId = `service_detail_page`;
10557
- return {
10686
+ const amisSchema = {
10558
10687
  type: 'service',
10559
10688
  name: `page_readonly_${recordId}`,
10560
10689
  id: serviceId,
@@ -10636,7 +10765,10 @@ async function getObjectDetail(objectSchema, recordId, ctx){
10636
10765
  ]
10637
10766
  }
10638
10767
  }
10639
- }
10768
+ };
10769
+
10770
+ amisSchema.body[0].body = await getFormSchemaWithDataFilter(amisSchema.body[0].body, { formDataFilter, onFormDataFilter, amisData, env });
10771
+ return amisSchema;
10640
10772
  }
10641
10773
 
10642
10774
  /*