@steedos-widgets/amis-lib 6.3.0-beta.10 → 6.3.0-beta.12

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
@@ -582,9 +582,9 @@ function getSelectMap(selectOptions){
582
582
  }
583
583
 
584
584
  function getNameTplUrl(field, ctx){
585
- if(ctx.objectName === 'cms_files'){
586
- return "${(versions[0] && versions[0].url) ? versions[0].url+'?download=true' : context.rootUrl+'/api/files/files/'+versions[0]+'?download=true'}"
587
- }
585
+ // if(ctx.objectName === 'cms_files'){
586
+ // return "${(versions[0] && versions[0].url) ? versions[0].url+'?download=true' : context.rootUrl+'/api/files/files/'+versions[0]+'?download=true'}"
587
+ // }
588
588
  const href = Router.getObjectDetailPath({
589
589
  ...ctx, formFactor: ctx.formFactor, appId: "${appId}", objectName: ctx.objectName || "${objectName}", recordId: `\${${ctx.idFieldName}}`
590
590
  });
@@ -774,12 +774,15 @@ async function getFieldTpl (field, options){
774
774
  }
775
775
  }
776
776
 
777
- async function getFieldsTemplate(fields, display){
777
+ async function getFieldsTemplate(object, fields, display){
778
778
  let expandFields = [];
779
779
  if(display != false){
780
780
  display = true;
781
781
  }
782
782
  let fieldsName = ['_id'];
783
+ if(!object.datasource || object.datasource === 'default' || object.datasource === 'meteor'){
784
+ fieldsName.push('space');
785
+ }
783
786
  let displayFields = [];
784
787
  let fieldsArr = [];
785
788
  if(___namespace.isArray(fields)){
@@ -875,7 +878,7 @@ async function getFindOneQuery$1(object, recordId, fields, options){
875
878
  }
876
879
  }
877
880
  return {
878
- query: `{${alias}:${object.name}${queryOptions}{${await getFieldsTemplate(fields)}, ${getRecordPermissionsTemplate()}}}`
881
+ query: `{${alias}:${object.name}${queryOptions}{${await getFieldsTemplate(object, fields)}, ${getRecordPermissionsTemplate()}}}`
879
882
  }
880
883
  }
881
884
 
@@ -1064,7 +1067,7 @@ async function getFindQuery(object, recordId, fields, options){
1064
1067
  // return item.replace(/^{/,"").replace(/}$/,"");
1065
1068
  // }).join(",")) : "";
1066
1069
 
1067
- const fieldsTemplate = `${await getFieldsTemplate(fields, options.expand)}${treeFields}${cfsFields}`;
1070
+ const fieldsTemplate = `${await getFieldsTemplate(object, fields, options.expand)}${treeFields}${cfsFields}`;
1068
1071
 
1069
1072
  return {
1070
1073
  orderBy: "${orderBy}",
@@ -1326,6 +1329,7 @@ var frontend_form_confirm$1 = "Confirm";
1326
1329
  var frontend_form_delete$1 = "Delete";
1327
1330
  var frontend_form_view$1 = "view";
1328
1331
  var frontend_form_details$1 = "details";
1332
+ var frontend_form_validation_failed_url$1 = "The URL format is incorrect";
1329
1333
  var frontend_delete_confirm_text$1 = "Are you sure you want to delete this item?";
1330
1334
  var frontend_delete_many_selected_required$1 = "Please select the item to be deleted";
1331
1335
  var frontend_delete_many_confirm_text$1 = "Are you sure you want to delete?";
@@ -1414,6 +1418,7 @@ var en_us = {
1414
1418
  frontend_form_delete: frontend_form_delete$1,
1415
1419
  frontend_form_view: frontend_form_view$1,
1416
1420
  frontend_form_details: frontend_form_details$1,
1421
+ frontend_form_validation_failed_url: frontend_form_validation_failed_url$1,
1417
1422
  frontend_delete_confirm_text: frontend_delete_confirm_text$1,
1418
1423
  frontend_delete_many_selected_required: frontend_delete_many_selected_required$1,
1419
1424
  frontend_delete_many_confirm_text: frontend_delete_many_confirm_text$1,
@@ -1503,6 +1508,7 @@ var frontend_form_confirm = "确认";
1503
1508
  var frontend_form_delete = "删除";
1504
1509
  var frontend_form_view = "查看";
1505
1510
  var frontend_form_details = "详情";
1511
+ var frontend_form_validation_failed_url = "URL 格式不正确";
1506
1512
  var frontend_delete_confirm_text = "确定要删除此项目?";
1507
1513
  var frontend_delete_many_selected_required = "请选择要删除的项";
1508
1514
  var frontend_delete_many_confirm_text = "确定要删除吗?";
@@ -1592,6 +1598,7 @@ var zh_cn = {
1592
1598
  frontend_form_delete: frontend_form_delete,
1593
1599
  frontend_form_view: frontend_form_view,
1594
1600
  frontend_form_details: frontend_form_details,
1601
+ frontend_form_validation_failed_url: frontend_form_validation_failed_url,
1595
1602
  frontend_delete_confirm_text: frontend_delete_confirm_text,
1596
1603
  frontend_delete_many_selected_required: frontend_delete_many_selected_required,
1597
1604
  frontend_delete_many_confirm_text: frontend_delete_many_confirm_text,
@@ -1696,6 +1703,29 @@ i18next__default["default"]
1696
1703
  }
1697
1704
  });
1698
1705
 
1706
+ /*
1707
+ * @Author: baozhoutao@steedos.com
1708
+ * @Date: 2022-07-13 15:18:03
1709
+ * @LastEditors: baozhoutao@steedos.com
1710
+ * @LastEditTime: 2023-04-11 10:34:26
1711
+ * @Description:
1712
+ */
1713
+
1714
+ async function getPage({type, pageId = '', appId, objectName = '', recordId = '', formFactor = 'LARGE'}){
1715
+ const api = `/api/pageSchema/${type}?app=${appId}&objectApiName=${objectName}&recordId=${recordId}&pageId=${pageId}&formFactor=${formFactor}`;
1716
+ const page = await fetchAPI(api);
1717
+ if (page && page.schema) {
1718
+ page.schema = JSON.parse(page.schema);
1719
+ if(page.schema.data){
1720
+ delete page.schema.data.recordId;
1721
+ delete page.schema.data.objectName;
1722
+ delete page.schema.data.context;
1723
+ delete page.schema.data.global;
1724
+ }
1725
+ return page;
1726
+ }
1727
+ }
1728
+
1699
1729
  async function getQuickEditSchema(object, columnField, options){
1700
1730
  let field = object.fields[columnField.name];
1701
1731
  //判断在amis3.2以上环境下,放开批量编辑与lookup的单元格编辑
@@ -2165,6 +2195,59 @@ function getFieldWidth(width){
2165
2195
  }
2166
2196
  }
2167
2197
 
2198
+ async function getColumnItemOnClick(field, options){
2199
+ const recordPage = await getPage({ type: 'record', appId: options.appId, objectName: options.objectName, formFactor: options.formFactor });
2200
+ const drawerRecordDetailSchema = recordPage ? Object.assign({}, recordPage.schema, {
2201
+ "recordId": `\${${options.idFieldName}}`,
2202
+ "data": {
2203
+ ...recordPage.schema.data,
2204
+ "_inDrawer": true, // 用于判断是否在抽屉中
2205
+ "recordLoaded": false, // 重置数据加载状态
2206
+ }
2207
+ }) : {
2208
+ "type": "steedos-record-detail",
2209
+ "objectApiName": "${objectName}",
2210
+ "recordId": `\${${options.idFieldName}}`,
2211
+ "showBackButton": false,
2212
+ "showButtons": true,
2213
+ "data": {
2214
+ "_inDrawer": true, // 用于判断是否在抽屉中
2215
+ "recordLoaded": false, // 重置数据加载状态
2216
+ }
2217
+ };
2218
+
2219
+ if(!(field.is_name || field.name === options.labelFieldName)){
2220
+ drawerRecordDetailSchema.objectApiName = field.reference_to;
2221
+ drawerRecordDetailSchema.recordId = `\${_display.${field.name}.value}`;
2222
+ }
2223
+ return {
2224
+ "click": {
2225
+ "actions": [
2226
+ {
2227
+ "actionType": "drawer",
2228
+ "drawer": {
2229
+ "type": "drawer",
2230
+ "title": " ",
2231
+ "headerClassName": "hidden",
2232
+ "size": "lg",
2233
+ "bodyClassName": "p-0 m-0 bg-gray-100",
2234
+ "closeOnEsc": true,
2235
+ "closeOnOutside": true,
2236
+ "resizable": true,
2237
+ "actions": [],
2238
+ "body": [
2239
+ drawerRecordDetailSchema
2240
+ ],
2241
+ "className": "steedos-record-detail-drawer app-popover",
2242
+ "id": "u:fc5f055afa8c"
2243
+ },
2244
+ "preventDefault": true
2245
+ }
2246
+ ]
2247
+ }
2248
+ };
2249
+ }
2250
+
2168
2251
  async function getTableColumns(object, fields, options){
2169
2252
  const columns = [];
2170
2253
  if(!options.isLookup && !options.isInputTable){
@@ -2204,7 +2287,10 @@ async function getTableColumns(object, fields, options){
2204
2287
  delete fieldAmis?.className;
2205
2288
 
2206
2289
  let columnItem;
2207
- if((field.is_name || field.name === options.labelFieldName) && options.objectName === 'cms_files'){
2290
+
2291
+ // PC客户端点击名称字段直接预览
2292
+ let isNode = !!(window && window.nw && window.nw.require);
2293
+ if((field.is_name || field.name === options.labelFieldName) && options.objectName === 'cms_files' && isNode){
2208
2294
  const previewFileScript = `
2209
2295
  var data = event.data;
2210
2296
  var file_name = data.versions ? data.name : "${field.label}";
@@ -2219,20 +2305,20 @@ async function getTableColumns(object, fields, options){
2219
2305
  "onEvent": {
2220
2306
  "click": {
2221
2307
  "actions": [
2222
- {
2223
- "args": {
2224
- "api": {
2225
- "url": "${(versions[0] && versions[0].url) ? versions[0].url+'?download=true' : context.rootUrl+'/api/files/files/'+versions[0]+'?download=true'}",
2226
- "method": "get",
2227
- "headers": {
2228
- "Authorization": "Bearer ${context.tenantId},${context.authToken}"
2229
- }
2230
- }
2231
- },
2232
- "actionType": "download",
2233
- // "expression": "!!!window?.nw?.require"//浏览器上直接下载
2234
- "expression": "!!!(window && window.nw && window.nw.require)"//浏览器上直接下载
2235
- },
2308
+ // {
2309
+ // "args": {
2310
+ // "api": {
2311
+ // "url": "${(versions[0] && versions[0].url) ? versions[0].url+'?download=true' : context.rootUrl+'/api/files/files/'+versions[0]+'?download=true'}",
2312
+ // "method": "get",
2313
+ // "headers": {
2314
+ // "Authorization": "Bearer ${context.tenantId},${context.authToken}"
2315
+ // }
2316
+ // }
2317
+ // },
2318
+ // "actionType": "download",
2319
+ // // "expression": "!!!window?.nw?.require"//浏览器上直接下载
2320
+ // "expression": "!!!(window && window.nw && window.nw.require)"//浏览器上直接下载
2321
+ // },
2236
2322
  {
2237
2323
  "args": {},
2238
2324
  "actionType": "custom",
@@ -2330,51 +2416,7 @@ async function getTableColumns(object, fields, options){
2330
2416
  }
2331
2417
 
2332
2418
  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){
2333
-
2334
- const drawerRecordDetailSchema = {
2335
- "type": "steedos-record-detail",
2336
- "objectApiName": "${objectName}",
2337
- "recordId": `\${${options.idFieldName}}`,
2338
- "showBackButton": false,
2339
- "showButtons": true,
2340
- "data": {
2341
- "_inDrawer": true, // 用于判断是否在抽屉中
2342
- "recordLoaded": false, // 重置数据加载状态
2343
- }
2344
- };
2345
-
2346
-
2347
- if(!(field.is_name || field.name === options.labelFieldName)){
2348
- drawerRecordDetailSchema.objectApiName = field.reference_to;
2349
- drawerRecordDetailSchema.recordId = `\${_display.${field.name}.value}`;
2350
- }
2351
-
2352
- columnItem.onEvent = {
2353
- "click": {
2354
- "actions": [
2355
- {
2356
- "actionType": "drawer",
2357
- "drawer": {
2358
- "type": "drawer",
2359
- "title": " ",
2360
- "headerClassName": "hidden",
2361
- "size": "lg",
2362
- "bodyClassName": "p-0 m-0 bg-gray-100",
2363
- "closeOnEsc": true,
2364
- "closeOnOutside": true,
2365
- "resizable": true,
2366
- "actions": [],
2367
- "body": [
2368
- drawerRecordDetailSchema
2369
- ],
2370
- "className": "steedos-record-detail-drawer app-popover",
2371
- "id": "u:fc5f055afa8c"
2372
- },
2373
- "preventDefault": true
2374
- }
2375
- ]
2376
- }
2377
- };
2419
+ columnItem.onEvent = await getColumnItemOnClick(field, options);
2378
2420
  }
2379
2421
 
2380
2422
  }
@@ -2587,17 +2629,23 @@ async function getMobileTableColumns(fields, options){
2587
2629
  onEvent: {
2588
2630
  "click": {
2589
2631
  "actions": [
2632
+ // {
2633
+ // "args": {
2634
+ // "api": {
2635
+ // "url": url,
2636
+ // "method": "get",
2637
+ // "headers": {
2638
+ // "Authorization": "Bearer ${context.tenantId},${context.authToken}"
2639
+ // }
2640
+ // }
2641
+ // },
2642
+ // "actionType": "download"
2643
+ // }
2590
2644
  {
2645
+ "actionType": "link",
2591
2646
  "args": {
2592
- "api": {
2593
- "url": url,
2594
- "method": "get",
2595
- "headers": {
2596
- "Authorization": "Bearer ${context.tenantId},${context.authToken}"
2597
- }
2598
- }
2599
- },
2600
- "actionType": "download"
2647
+ "link": url
2648
+ }
2601
2649
  }
2602
2650
  ],
2603
2651
  "weight": 0
@@ -3306,7 +3354,7 @@ function getReadonlyFormAdaptor(object, fields, options){
3306
3354
  nameLabel = `record._display.${nameField.name}.label`;
3307
3355
  }
3308
3356
  } else if (nameField){
3309
- nameLabel = `record._display.${nameField.name} || record.${nameField.name}`;
3357
+ nameLabel = `(record._display ? record._display.${nameField.name} : record.${nameField.name})`;
3310
3358
  }
3311
3359
  return `
3312
3360
  if(payload.data.data.length === 0){
@@ -4835,34 +4883,11 @@ const getSchema$5 = async (uiSchema, ctx) => {
4835
4883
  }
4836
4884
  };
4837
4885
 
4838
- /*
4839
- * @Author: baozhoutao@steedos.com
4840
- * @Date: 2022-07-13 15:18:03
4841
- * @LastEditors: baozhoutao@steedos.com
4842
- * @LastEditTime: 2023-04-11 10:34:26
4843
- * @Description:
4844
- */
4845
-
4846
- async function getPage({type, pageId = '', appId, objectName = '', recordId = '', formFactor = 'LARGE'}){
4847
- const api = `/api/pageSchema/${type}?app=${appId}&objectApiName=${objectName}&recordId=${recordId}&pageId=${pageId}&formFactor=${formFactor}`;
4848
- const page = await fetchAPI(api);
4849
- if (page && page.schema) {
4850
- page.schema = JSON.parse(page.schema);
4851
- if(page.schema.data){
4852
- delete page.schema.data.recordId;
4853
- delete page.schema.data.objectName;
4854
- delete page.schema.data.context;
4855
- delete page.schema.data.global;
4856
- }
4857
- return page;
4858
- }
4859
- }
4860
-
4861
4886
  /*
4862
4887
  * @Author: baozhoutao@steedos.com
4863
4888
  * @Date: 2022-11-01 15:49:58
4864
- * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
4865
- * @LastEditTime: 2023-06-28 23:22:31
4889
+ * @LastEditors: yinlianghui@hotoa.com yinlianghui@hotoa.com
4890
+ * @LastEditTime: 2024-05-19 10:01:07
4866
4891
  * @Description:
4867
4892
  */
4868
4893
 
@@ -4924,6 +4949,12 @@ const getSchema$4 = async (uiSchema, ctx) => {
4924
4949
  closeOnEsc: false,
4925
4950
  closeOnOutside: false,
4926
4951
  showCloseButton: true,
4952
+ "data": {
4953
+ "&": "$$",
4954
+ "_master": "${_master}",
4955
+ "_master._isRelated": "${_isRelated}",
4956
+ "_master.relatedKey": "${relatedKey}"
4957
+ },
4927
4958
  size: "lg",
4928
4959
  "onEvent": {
4929
4960
  "cancel": {
@@ -6805,6 +6836,7 @@ function getObjectListHeader$1(objectSchema, listViewName, ctx) {
6805
6836
  function getBackButtonSchema(){
6806
6837
  return {
6807
6838
  "type": "service",
6839
+ "className": "steedos-object-record-detail-header-back-button",
6808
6840
  "onEvent": {
6809
6841
  "@history_paths.changed": {
6810
6842
  "actions": [
@@ -7091,7 +7123,7 @@ async function getObjectRecordDetailHeader(objectSchema, recordId, options) {
7091
7123
  id: `page_readonly_${name}_header`,
7092
7124
  name: `page`,
7093
7125
  body: body,
7094
- className: ''
7126
+ className: "steedos-object-record-detail-header"
7095
7127
  }
7096
7128
 
7097
7129
  }
@@ -11467,7 +11499,11 @@ async function lookupToAmisPicker(field, readonly, ctx){
11467
11499
  // 如果当前元素不是数组,则处理该元素
11468
11500
  // 下面正则用于匹配amis公式\${}
11469
11501
  if(/\\\$\\\{([^}]*)\\\}/.test(arr[i])) {
11470
- arr[i] = currentAmis.evaluate(arr[i], api.data.$self);
11502
+ try{
11503
+ arr[i] = currentAmis.evaluate(arr[i], api.context);
11504
+ }catch(ex){
11505
+ console.error("运行lookup过滤公式时出现错误:",ex);
11506
+ }
11471
11507
  }
11472
11508
  }
11473
11509
  }
@@ -11884,7 +11920,11 @@ async function lookupToAmisSelect(field, readonly, ctx){
11884
11920
  // 如果当前元素不是数组,则处理该元素
11885
11921
  // 下面正则用于匹配amis公式\${}
11886
11922
  if(/\\\$\\\{([^}]*)\\\}/.test(arr[i])) {
11887
- arr[i] = currentAmis.evaluate(arr[i], api.data.$self);
11923
+ try{
11924
+ arr[i] = currentAmis.evaluate(arr[i], api.context);
11925
+ }catch(ex){
11926
+ console.error("运行lookup过滤公式时出现错误:",ex);
11927
+ }
11888
11928
  }
11889
11929
  }
11890
11930
  }
@@ -12990,6 +13030,21 @@ async function convertSFieldToAmisField(field, readonly, ctx) {
12990
13030
  type: getAmisStaticFieldType('url', readonly, field),
12991
13031
  static: readonly ? true : false
12992
13032
  };
13033
+ if(!readonly){
13034
+ // amis input-url控件不支持相对路径,这里支持下
13035
+ // 如果要使用amis原生input-url控件的默认的isUrl验证效果或自定义字段validations效果,配置字段的amis.validations属性即可,配置为null或空字符串则使用amis默认的isUrl效果
13036
+ let fieldAmisValidations = field.amis?.validations;
13037
+ if(typeof fieldAmisValidations === "undefined"){
13038
+ Object.assign(convertData, {
13039
+ "validations": {
13040
+ "matchRegexp": "^((http:\\/\\/|https:\\/\\/|ftp:\\/\\/|sftp:\\/\\/)+([^\\s\\/\\.]+(\\.[^\\s\\/\\.]+)+))*(\\/[^\\s\\.\\/]+)*$"
13041
+ },
13042
+ "validationErrors": {
13043
+ "matchRegexp": i18next__default["default"].t('frontend_form_validation_failed_url')//"URL 格式不正确"
13044
+ }
13045
+ });
13046
+ }
13047
+ }
12993
13048
  if(readonly && field.show_as_qr){
12994
13049
  convertData = {
12995
13050
  type: "control",