@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.cjs.js CHANGED
@@ -1791,6 +1791,13 @@ async function getSelectUserSchema(field, readonly, ctx) {
1791
1791
  return amisSchema;
1792
1792
  }
1793
1793
 
1794
+ /*
1795
+ * @Author: 殷亮辉 yinlianghui@hotoa.com
1796
+ * @Date: 2023-03-22 09:31:21
1797
+ * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
1798
+ * @LastEditTime: 2023-11-03 17:27:37
1799
+ */
1800
+
1794
1801
  const globalTag = '__G_L_O_B_A_L__';
1795
1802
 
1796
1803
  const getParentPath = function (path) {
@@ -1830,7 +1837,39 @@ const isExpression = function (func) {
1830
1837
  return false;
1831
1838
  };
1832
1839
 
1840
+ const getMoment$1 = () => {
1841
+ if (window.amisRequire) {
1842
+ return window.amisRequire("moment");
1843
+ } else if (window.moment) {
1844
+ return window.moment;
1845
+ }
1846
+ };
1847
+
1833
1848
  const parseSingleExpression = function (func, formData, dataPath, global, userSession = {}) {
1849
+ if (global) {
1850
+ let now = new Date();
1851
+ let moment = getMoment$1();
1852
+ let today = moment().utc();
1853
+ today.set("hours", 0);
1854
+ today.set("minutes", 0);
1855
+ today.set("seconds", 0);
1856
+ today.set("milliseconds", 0);
1857
+ today = today.toDate();
1858
+ let timeNow = moment();
1859
+ timeNow.set("year", 1970);
1860
+ timeNow.set("month", 0);
1861
+ timeNow.set("date", 1);
1862
+ timeNow.set("hours", timeNow.hours() + timeNow.utcOffset() / 60);
1863
+ timeNow.set("seconds", 0);
1864
+ timeNow.set("milliseconds", 0);
1865
+ timeNow = timeNow.toDate();
1866
+ Object.assign(global, {
1867
+ now,
1868
+ today,
1869
+ timeNow
1870
+ });
1871
+ }
1872
+
1834
1873
  var error, funcBody, parent, parentPath, str;
1835
1874
 
1836
1875
  if (formData === void 0) {
@@ -4390,7 +4429,8 @@ const getCopyListviewButtonSchema = ()=>{
4390
4429
  "&": "${list_view}",
4391
4430
  "name":"",
4392
4431
  "label": i18next__default["default"].t('frontend_listview_control_clone_defaultData_label_start') + " ${list_view.label} " + i18next__default["default"].t('frontend_listview_control_clone_defaultData_label_end'),
4393
- "shared":false
4432
+ "shared":false,
4433
+ "object_name": "${targetObjectName}",
4394
4434
  },
4395
4435
  "fieldsExtend": fieldsExtend$3(),
4396
4436
  "fields": fields(),
@@ -6098,7 +6138,9 @@ async function lookupToAmisPicker(field, readonly, ctx){
6098
6138
  pickerSchema.headerToolbar = getObjectHeaderToolbar(refObjectConfig, fieldsArr, ctx.formFactor, { headerToolbarItems, isLookup: true, keywordsSearchBoxName });
6099
6139
  const isAllowCreate = refObjectConfig.permissions.allowCreate;
6100
6140
  const isCreate = ___namespace.isBoolean(field.create) ? field.create : true;
6101
- if (isAllowCreate && isCreate) {
6141
+ // lookup字段配置过滤条件就强制不显示新建按钮
6142
+ let isHasFilters = (field.filters || field._filtersFunction) ? true : false;
6143
+ if (isAllowCreate && isCreate && !isHasFilters) {
6102
6144
  const new_button = await getSchema$5(refObjectConfig, { appId: ctx.appId, objectName: refObjectConfig.name, formFactor: ctx.formFactor });
6103
6145
  new_button.align = "right";
6104
6146
  // 保持快速搜索放在最左侧,新建按钮往里插,而不是push到最后
@@ -6472,10 +6514,10 @@ async function lookupToAmis(field, readonly, ctx){
6472
6514
 
6473
6515
  const refObject = await getUISchema(referenceTo.objectName);
6474
6516
 
6475
- // 此处不参考 steedos 的 enable_enhanced_lookup 规则. 如果默认是开启弹出选择,用户选择过程操作太繁琐, 所以默认是关闭弹出选择.
6476
- // 由于amis picker 目前不支持联动, 配置了depend_on时, 使用使用select ,以支持联动
6477
- // TODO: 确认 amis picker 支持联动时, 清理field.depend_on判断
6478
- if(refObject.enable_enhanced_lookup == true && ___namespace.isEmpty(field.depend_on)){
6517
+ // 优先取字段中配置的enable_enhanced_lookup,字段上没配置时,才从对象上取enable_enhanced_lookup属性
6518
+ let enableEnhancedLookup = ___namespace.isBoolean(field.enable_enhanced_lookup) ? field.enable_enhanced_lookup : refObject.enable_enhanced_lookup;
6519
+ // 默认使用下拉框模式显示lookup选项,只能配置了enable_enhanced_lookup才使用弹出增强模式
6520
+ if(enableEnhancedLookup == true){
6479
6521
  return await lookupToAmisPicker(field, readonly, ctx);
6480
6522
  }else if(refObject.enable_tree) {
6481
6523
  return await lookupToAmisTreeSelect(field, readonly, Object.assign({}, ctx, {
@@ -6792,8 +6834,8 @@ function getAmisStaticFieldType(type, readonly, options){
6792
6834
  /*
6793
6835
  * @Author: baozhoutao@steedos.com
6794
6836
  * @Date: 2022-10-28 14:15:09
6795
- * @LastEditors: baozhoutao@steedos.com
6796
- * @LastEditTime: 2022-11-02 18:06:16
6837
+ * @LastEditors: liaodaxue
6838
+ * @LastEditTime: 2023-10-30 17:51:54
6797
6839
  * @Description:
6798
6840
  */
6799
6841
 
@@ -6844,11 +6886,26 @@ const getAmisFileEditSchema = (steedosField)=>{
6844
6886
  useChunk: false, // 关闭分块上传
6845
6887
  receiver: {
6846
6888
  method: "post",
6889
+ dataType: "form-data",
6847
6890
  url: `\${context.rootUrl}/s3/${tableName}`,
6848
- data: {
6849
- $: "$$",
6850
- context: `\${context}`,
6851
- },
6891
+ requestAdaptor: `
6892
+ const { _master, global,context } = api.body;
6893
+ // const { recordId, objectName } = _master;
6894
+ const { spaceId, userId, user } = global;
6895
+ /*
6896
+ record_id: recordId,
6897
+ parent: recordId,
6898
+ object_name: objectName,
6899
+ owner_name: user.name,
6900
+ space: spaceId,
6901
+ owner: userId
6902
+ */
6903
+ // 参考platform 2.2版本,附件字段保存时cfs.files.filerecord、cfs.images.filerecord表中的metadata下只保存space、owner两个属性值。
6904
+ api.data.append('space', spaceId);
6905
+ api.data.append('owner', userId);
6906
+
6907
+ return api;
6908
+ `,
6852
6909
  adaptor: `
6853
6910
  const { context } = api.body;
6854
6911
  var rootUrl = context.rootUrl + "/api/files/${tableName}/";
@@ -7712,8 +7769,44 @@ var config = {
7712
7769
  };
7713
7770
 
7714
7771
  async function getQuickEditSchema(field, options){
7772
+ //判断在amis3.2以上环境下,放开批量编辑
7773
+ const isAmisVersionforBatchEdit = amisRequire('amis').version[0] >= 3 && amisRequire('amis').version[2] >= 2;
7715
7774
  const quickEditId = options.objectName + "_" + field.name + "QuickEdit";//定义快速编辑的表单id,用于setvalue传值
7716
7775
  var quickEditSchema = { body: [], id: quickEditId };
7776
+ //select,avatar,image,file等组件无法行记录字段赋值,暂不支持批量编辑;
7777
+ if(field.type != 'avatar' && field.type != 'image' && field.type != 'file' && isAmisVersionforBatchEdit){
7778
+ const submitEvent = {
7779
+ submit: {
7780
+ actions: [
7781
+ {
7782
+ actionType: "custom",
7783
+ script: `
7784
+ const items = event.data.items;
7785
+ const selectedItems = event.data.selectedItems;
7786
+ if(event.data.isBatchEdit){
7787
+ selectedItems.forEach(function(selectedItem){
7788
+ items[selectedItem._index-1]._display.${field.name} = event.data._display.${field.name};
7789
+ })
7790
+ doAction({actionType: 'setValue', "args": {"value": {items}},componentId: "${options.crudId}","dataMergeMode": "override"});
7791
+ selectedItems.forEach(function(selectedItem){
7792
+ doAction({actionType: 'setValue', "args": {"value": event.data.${field.name}},componentId: "${options.objectName + "_" + field.name + "_"}" + selectedItem._index});
7793
+ })
7794
+ }else{
7795
+ items[event.data._index-1]._display.${field.name} = event.data._display.${field.name};
7796
+ doAction({actionType: 'setValue', "args": {"value": {items}},componentId: "${options.crudId}","dataMergeMode": "override"});
7797
+ doAction({actionType: 'setValue', "args": {"value": event.data.${field.name}},componentId: "${options.objectName + "_" + field.name + "_"}" + event.data._index});
7798
+ }
7799
+ `
7800
+ },
7801
+ {
7802
+ "actionType": "closeDialog"
7803
+ }
7804
+ ]
7805
+ }
7806
+ };
7807
+ quickEditSchema.onEvent = submitEvent;
7808
+ }
7809
+
7717
7810
  if (field.disabled) {
7718
7811
  quickEditSchema = false;
7719
7812
  } else {
@@ -7947,6 +8040,14 @@ async function getQuickEditSchema(field, options){
7947
8040
  }
7948
8041
 
7949
8042
  });
8043
+ if(field.type != 'avatar' && field.type != 'image' && field.type != 'file' && isAmisVersionforBatchEdit){
8044
+ quickEditSchema.body.push({
8045
+ "name": "isBatchEdit",
8046
+ "type": "checkbox",
8047
+ "option": "更新${COUNT(selectedItems)}个选定记录",
8048
+ "visibleOn": "${ARRAYSOME(selectedItems, item => item._id === _id) && COUNT(selectedItems)>1}"
8049
+ });
8050
+ }
7950
8051
  } else {
7951
8052
  quickEditSchema = false;
7952
8053
  }
@@ -8012,7 +8113,7 @@ async function getTableColumns(fields, options){
8012
8113
  {
8013
8114
  "args": {
8014
8115
  "api": {
8015
- "url": "${context.rootUrl}/api/files/files/${versions[0]}?download=true",
8116
+ "url": "${(versions[0] && versions[0].url) ? versions[0].url+'?download=true' : context.rootUrl+'/api/files/files/'+versions[0]+'?download=true'}",
8016
8117
  "method": "get",
8017
8118
  "headers": {
8018
8119
  "Authorization": "Bearer ${context.tenantId},${context.authToken}"
@@ -8059,7 +8160,7 @@ async function getTableColumns(fields, options){
8059
8160
  else if(field.type === 'select'){
8060
8161
  const map = getSelectMap(field.options);
8061
8162
  columnItem = Object.assign({}, {
8062
- type: "mapping",
8163
+ type: "static-mapping",
8063
8164
  name: field.name,
8064
8165
  label: field.label,
8065
8166
  map: map,
@@ -8074,7 +8175,7 @@ async function getTableColumns(fields, options){
8074
8175
  const tpl = await getFieldTpl(field, options);
8075
8176
  let type = 'text';
8076
8177
  if(tpl){
8077
- type = 'tpl';
8178
+ type = 'static';
8078
8179
  }else if(field.type === 'html'){
8079
8180
  type = 'markdown';
8080
8181
  }else if(field.type === 'url'){
@@ -8115,6 +8216,7 @@ async function getTableColumns(fields, options){
8115
8216
  columnItem.quickEdit = quickEditSchema;
8116
8217
  columnItem.quickEditEnabledOn = "${is_system !== true}";
8117
8218
  }
8219
+ columnItem.id = `${options.objectName}_${field.name}_\${_index}`;
8118
8220
  columns.push(columnItem);
8119
8221
  }
8120
8222
  }
@@ -8492,6 +8594,7 @@ async function getTableSchema$1(fields, options){
8492
8594
  }
8493
8595
  return {
8494
8596
  mode: "cards",
8597
+ perPageAvailable: [5, 10, 20, 50, 100, 500],
8495
8598
  name: "thelist",
8496
8599
  headerToolbarClassName: "py-2 px-2 border-gray-300 border-solid border-b",
8497
8600
  className: "",
@@ -8514,6 +8617,7 @@ async function getTableSchema$1(fields, options){
8514
8617
 
8515
8618
  return {
8516
8619
  mode: "table",
8620
+ perPageAvailable: [5, 10, 20, 50, 100, 500],
8517
8621
  name: "thelist",
8518
8622
  headerToolbarClassName: "py-2 px-2 border-gray-300 border-solid border-b",
8519
8623
  className: "",
@@ -9148,7 +9252,7 @@ async function getEditFormInitApi(object, recordId, fields, options){
9148
9252
  ${getScriptForRewriteValueForFileFields(fields)}
9149
9253
 
9150
9254
  _.each(dataKeys, function(key){
9151
- if(fieldKeys.indexOf(key)<0){
9255
+ if(fieldKeys.indexOf(key)<0 && key !== "_display"){
9152
9256
  delete data[key];
9153
9257
  }
9154
9258
  })
@@ -10324,7 +10428,8 @@ async function getObjectCRUD(objectSchema, fields, options){
10324
10428
  }
10325
10429
  let tableOptions = Object.assign({
10326
10430
  idFieldName: objectSchema.idFieldName, labelFieldName: labelFieldName,
10327
- permissions:objectSchema.permissions,enable_inline_edit:objectSchema.enable_inline_edit
10431
+ permissions:objectSchema.permissions,enable_inline_edit:objectSchema.enable_inline_edit,
10432
+ crudId: listSchema.id || id
10328
10433
  }, options);
10329
10434
  tableOptions.amisData = createObject(options.amisData || {}, {});
10330
10435
  const table = await getTableSchema$1(fields, tableOptions);
@@ -10488,8 +10593,29 @@ const getFormFields = (objectSchema, formProps)=>{
10488
10593
  return lodash.sortBy(___default["default"].values(fields), "sort_no");
10489
10594
  };
10490
10595
 
10596
+ async function getFormSchemaWithDataFilter(form, options = {}){
10597
+ const { formDataFilter, amisData, env } = options;
10598
+ let onFormDataFilter = options.onFormDataFilter;
10599
+ if (!onFormDataFilter && typeof formDataFilter === 'string') {
10600
+ onFormDataFilter = new Function(
10601
+ 'form',
10602
+ 'env',
10603
+ 'data',
10604
+ formDataFilter
10605
+ );
10606
+ }
10607
+
10608
+ try {
10609
+ onFormDataFilter && (form = await onFormDataFilter(form, env, amisData) || form);
10610
+ } catch (e) {
10611
+ console.warn(e);
10612
+ }
10613
+ return form;
10614
+ }
10615
+
10491
10616
  async function getObjectForm(objectSchema, ctx){
10492
- const { recordId, formFactor, layout = formFactor === 'SMALL' ? 'normal' : "normal", labelAlign, tabId, appId, defaults, submitSuccActions = [] } = ctx;
10617
+ const { recordId, formFactor, layout = formFactor === 'SMALL' ? 'normal' : "normal", labelAlign, tabId, appId, defaults, submitSuccActions = [],
10618
+ formDataFilter, onFormDataFilter, amisData, env } = ctx;
10493
10619
  const fields = ___default["default"].values(objectSchema.fields);
10494
10620
  const formFields = getFormFields(objectSchema, ctx);
10495
10621
  const formSchema = defaults && defaults.formSchema || {};
@@ -10506,7 +10632,8 @@ async function getObjectForm(objectSchema, ctx){
10506
10632
  name: `page_edit_${recordId}`,
10507
10633
  api: await getEditFormInitApi(objectSchema, recordId, fields, ctx),
10508
10634
  data:{
10509
- editFormInited: false
10635
+ editFormInited: false,
10636
+ ...amisData
10510
10637
  },
10511
10638
  // data: {global: getGlobalData('edit'), recordId: recordId, objectName: objectSchema.name, context: {rootUrl: getRootUrl(), tenantId: getTenantId(), authToken: getAuthToken()}},
10512
10639
  initApi: null,
@@ -10573,15 +10700,17 @@ async function getObjectForm(objectSchema, ctx){
10573
10700
  }
10574
10701
  })]
10575
10702
  };
10703
+ amisSchema.body[0] = await getFormSchemaWithDataFilter(amisSchema.body[0], { formDataFilter, onFormDataFilter, amisData, env });
10576
10704
  return amisSchema;
10577
10705
  }
10578
10706
 
10579
10707
  async function getObjectDetail(objectSchema, recordId, ctx){
10580
- const { formFactor, layout = formFactor === 'SMALL' ? 'normal' : "normal", labelAlign } = ctx;
10708
+ const { formFactor, layout = formFactor === 'SMALL' ? 'normal' : "normal", labelAlign,
10709
+ formDataFilter, onFormDataFilter, amisData, env } = ctx;
10581
10710
  const fields = ___default["default"].values(objectSchema.fields);
10582
10711
  const formFields = getFormFields(objectSchema, ctx);
10583
10712
  const serviceId = `service_detail_page`;
10584
- return {
10713
+ const amisSchema = {
10585
10714
  type: 'service',
10586
10715
  name: `page_readonly_${recordId}`,
10587
10716
  id: serviceId,
@@ -10663,7 +10792,10 @@ async function getObjectDetail(objectSchema, recordId, ctx){
10663
10792
  ]
10664
10793
  }
10665
10794
  }
10666
- }
10795
+ };
10796
+
10797
+ amisSchema.body[0].body = await getFormSchemaWithDataFilter(amisSchema.body[0].body, { formDataFilter, onFormDataFilter, amisData, env });
10798
+ return amisSchema;
10667
10799
  }
10668
10800
 
10669
10801
  /*