@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.esm.js CHANGED
@@ -555,9 +555,9 @@ function getSelectMap(selectOptions){
555
555
  }
556
556
 
557
557
  function getNameTplUrl(field, ctx){
558
- if(ctx.objectName === 'cms_files'){
559
- return "${(versions[0] && versions[0].url) ? versions[0].url+'?download=true' : context.rootUrl+'/api/files/files/'+versions[0]+'?download=true'}"
560
- }
558
+ // if(ctx.objectName === 'cms_files'){
559
+ // return "${(versions[0] && versions[0].url) ? versions[0].url+'?download=true' : context.rootUrl+'/api/files/files/'+versions[0]+'?download=true'}"
560
+ // }
561
561
  const href = Router.getObjectDetailPath({
562
562
  ...ctx, formFactor: ctx.formFactor, appId: "${appId}", objectName: ctx.objectName || "${objectName}", recordId: `\${${ctx.idFieldName}}`
563
563
  });
@@ -747,12 +747,15 @@ async function getFieldTpl (field, options){
747
747
  }
748
748
  }
749
749
 
750
- async function getFieldsTemplate(fields, display){
750
+ async function getFieldsTemplate(object, fields, display){
751
751
  let expandFields = [];
752
752
  if(display != false){
753
753
  display = true;
754
754
  }
755
755
  let fieldsName = ['_id'];
756
+ if(!object.datasource || object.datasource === 'default' || object.datasource === 'meteor'){
757
+ fieldsName.push('space');
758
+ }
756
759
  let displayFields = [];
757
760
  let fieldsArr = [];
758
761
  if(_$1.isArray(fields)){
@@ -848,7 +851,7 @@ async function getFindOneQuery$1(object, recordId, fields, options){
848
851
  }
849
852
  }
850
853
  return {
851
- query: `{${alias}:${object.name}${queryOptions}{${await getFieldsTemplate(fields)}, ${getRecordPermissionsTemplate()}}}`
854
+ query: `{${alias}:${object.name}${queryOptions}{${await getFieldsTemplate(object, fields)}, ${getRecordPermissionsTemplate()}}}`
852
855
  }
853
856
  }
854
857
 
@@ -1037,7 +1040,7 @@ async function getFindQuery(object, recordId, fields, options){
1037
1040
  // return item.replace(/^{/,"").replace(/}$/,"");
1038
1041
  // }).join(",")) : "";
1039
1042
 
1040
- const fieldsTemplate = `${await getFieldsTemplate(fields, options.expand)}${treeFields}${cfsFields}`;
1043
+ const fieldsTemplate = `${await getFieldsTemplate(object, fields, options.expand)}${treeFields}${cfsFields}`;
1041
1044
 
1042
1045
  return {
1043
1046
  orderBy: "${orderBy}",
@@ -1299,6 +1302,7 @@ var frontend_form_confirm$1 = "Confirm";
1299
1302
  var frontend_form_delete$1 = "Delete";
1300
1303
  var frontend_form_view$1 = "view";
1301
1304
  var frontend_form_details$1 = "details";
1305
+ var frontend_form_validation_failed_url$1 = "The URL format is incorrect";
1302
1306
  var frontend_delete_confirm_text$1 = "Are you sure you want to delete this item?";
1303
1307
  var frontend_delete_many_selected_required$1 = "Please select the item to be deleted";
1304
1308
  var frontend_delete_many_confirm_text$1 = "Are you sure you want to delete?";
@@ -1387,6 +1391,7 @@ var en_us = {
1387
1391
  frontend_form_delete: frontend_form_delete$1,
1388
1392
  frontend_form_view: frontend_form_view$1,
1389
1393
  frontend_form_details: frontend_form_details$1,
1394
+ frontend_form_validation_failed_url: frontend_form_validation_failed_url$1,
1390
1395
  frontend_delete_confirm_text: frontend_delete_confirm_text$1,
1391
1396
  frontend_delete_many_selected_required: frontend_delete_many_selected_required$1,
1392
1397
  frontend_delete_many_confirm_text: frontend_delete_many_confirm_text$1,
@@ -1476,6 +1481,7 @@ var frontend_form_confirm = "确认";
1476
1481
  var frontend_form_delete = "删除";
1477
1482
  var frontend_form_view = "查看";
1478
1483
  var frontend_form_details = "详情";
1484
+ var frontend_form_validation_failed_url = "URL 格式不正确";
1479
1485
  var frontend_delete_confirm_text = "确定要删除此项目?";
1480
1486
  var frontend_delete_many_selected_required = "请选择要删除的项";
1481
1487
  var frontend_delete_many_confirm_text = "确定要删除吗?";
@@ -1565,6 +1571,7 @@ var zh_cn = {
1565
1571
  frontend_form_delete: frontend_form_delete,
1566
1572
  frontend_form_view: frontend_form_view,
1567
1573
  frontend_form_details: frontend_form_details,
1574
+ frontend_form_validation_failed_url: frontend_form_validation_failed_url,
1568
1575
  frontend_delete_confirm_text: frontend_delete_confirm_text,
1569
1576
  frontend_delete_many_selected_required: frontend_delete_many_selected_required,
1570
1577
  frontend_delete_many_confirm_text: frontend_delete_many_confirm_text,
@@ -1669,6 +1676,29 @@ i18next
1669
1676
  }
1670
1677
  });
1671
1678
 
1679
+ /*
1680
+ * @Author: baozhoutao@steedos.com
1681
+ * @Date: 2022-07-13 15:18:03
1682
+ * @LastEditors: baozhoutao@steedos.com
1683
+ * @LastEditTime: 2023-04-11 10:34:26
1684
+ * @Description:
1685
+ */
1686
+
1687
+ async function getPage({type, pageId = '', appId, objectName = '', recordId = '', formFactor = 'LARGE'}){
1688
+ const api = `/api/pageSchema/${type}?app=${appId}&objectApiName=${objectName}&recordId=${recordId}&pageId=${pageId}&formFactor=${formFactor}`;
1689
+ const page = await fetchAPI(api);
1690
+ if (page && page.schema) {
1691
+ page.schema = JSON.parse(page.schema);
1692
+ if(page.schema.data){
1693
+ delete page.schema.data.recordId;
1694
+ delete page.schema.data.objectName;
1695
+ delete page.schema.data.context;
1696
+ delete page.schema.data.global;
1697
+ }
1698
+ return page;
1699
+ }
1700
+ }
1701
+
1672
1702
  async function getQuickEditSchema(object, columnField, options){
1673
1703
  let field = object.fields[columnField.name];
1674
1704
  //判断在amis3.2以上环境下,放开批量编辑与lookup的单元格编辑
@@ -2138,6 +2168,59 @@ function getFieldWidth(width){
2138
2168
  }
2139
2169
  }
2140
2170
 
2171
+ async function getColumnItemOnClick(field, options){
2172
+ const recordPage = await getPage({ type: 'record', appId: options.appId, objectName: options.objectName, formFactor: options.formFactor });
2173
+ const drawerRecordDetailSchema = recordPage ? Object.assign({}, recordPage.schema, {
2174
+ "recordId": `\${${options.idFieldName}}`,
2175
+ "data": {
2176
+ ...recordPage.schema.data,
2177
+ "_inDrawer": true, // 用于判断是否在抽屉中
2178
+ "recordLoaded": false, // 重置数据加载状态
2179
+ }
2180
+ }) : {
2181
+ "type": "steedos-record-detail",
2182
+ "objectApiName": "${objectName}",
2183
+ "recordId": `\${${options.idFieldName}}`,
2184
+ "showBackButton": false,
2185
+ "showButtons": true,
2186
+ "data": {
2187
+ "_inDrawer": true, // 用于判断是否在抽屉中
2188
+ "recordLoaded": false, // 重置数据加载状态
2189
+ }
2190
+ };
2191
+
2192
+ if(!(field.is_name || field.name === options.labelFieldName)){
2193
+ drawerRecordDetailSchema.objectApiName = field.reference_to;
2194
+ drawerRecordDetailSchema.recordId = `\${_display.${field.name}.value}`;
2195
+ }
2196
+ return {
2197
+ "click": {
2198
+ "actions": [
2199
+ {
2200
+ "actionType": "drawer",
2201
+ "drawer": {
2202
+ "type": "drawer",
2203
+ "title": " ",
2204
+ "headerClassName": "hidden",
2205
+ "size": "lg",
2206
+ "bodyClassName": "p-0 m-0 bg-gray-100",
2207
+ "closeOnEsc": true,
2208
+ "closeOnOutside": true,
2209
+ "resizable": true,
2210
+ "actions": [],
2211
+ "body": [
2212
+ drawerRecordDetailSchema
2213
+ ],
2214
+ "className": "steedos-record-detail-drawer app-popover",
2215
+ "id": "u:fc5f055afa8c"
2216
+ },
2217
+ "preventDefault": true
2218
+ }
2219
+ ]
2220
+ }
2221
+ };
2222
+ }
2223
+
2141
2224
  async function getTableColumns(object, fields, options){
2142
2225
  const columns = [];
2143
2226
  if(!options.isLookup && !options.isInputTable){
@@ -2177,7 +2260,10 @@ async function getTableColumns(object, fields, options){
2177
2260
  delete fieldAmis?.className;
2178
2261
 
2179
2262
  let columnItem;
2180
- if((field.is_name || field.name === options.labelFieldName) && options.objectName === 'cms_files'){
2263
+
2264
+ // PC客户端点击名称字段直接预览
2265
+ let isNode = !!(window && window.nw && window.nw.require);
2266
+ if((field.is_name || field.name === options.labelFieldName) && options.objectName === 'cms_files' && isNode){
2181
2267
  const previewFileScript = `
2182
2268
  var data = event.data;
2183
2269
  var file_name = data.versions ? data.name : "${field.label}";
@@ -2192,20 +2278,20 @@ async function getTableColumns(object, fields, options){
2192
2278
  "onEvent": {
2193
2279
  "click": {
2194
2280
  "actions": [
2195
- {
2196
- "args": {
2197
- "api": {
2198
- "url": "${(versions[0] && versions[0].url) ? versions[0].url+'?download=true' : context.rootUrl+'/api/files/files/'+versions[0]+'?download=true'}",
2199
- "method": "get",
2200
- "headers": {
2201
- "Authorization": "Bearer ${context.tenantId},${context.authToken}"
2202
- }
2203
- }
2204
- },
2205
- "actionType": "download",
2206
- // "expression": "!!!window?.nw?.require"//浏览器上直接下载
2207
- "expression": "!!!(window && window.nw && window.nw.require)"//浏览器上直接下载
2208
- },
2281
+ // {
2282
+ // "args": {
2283
+ // "api": {
2284
+ // "url": "${(versions[0] && versions[0].url) ? versions[0].url+'?download=true' : context.rootUrl+'/api/files/files/'+versions[0]+'?download=true'}",
2285
+ // "method": "get",
2286
+ // "headers": {
2287
+ // "Authorization": "Bearer ${context.tenantId},${context.authToken}"
2288
+ // }
2289
+ // }
2290
+ // },
2291
+ // "actionType": "download",
2292
+ // // "expression": "!!!window?.nw?.require"//浏览器上直接下载
2293
+ // "expression": "!!!(window && window.nw && window.nw.require)"//浏览器上直接下载
2294
+ // },
2209
2295
  {
2210
2296
  "args": {},
2211
2297
  "actionType": "custom",
@@ -2303,51 +2389,7 @@ async function getTableColumns(object, fields, options){
2303
2389
  }
2304
2390
 
2305
2391
  if(window.innerWidth >= 768 && ((field.is_name || field.name === options.labelFieldName) || ((field.type == 'lookup' || field.type == 'master_detail') && _$1.isString(field.reference_to) && field.multiple != true)) && options.isRelated){
2306
-
2307
- const drawerRecordDetailSchema = {
2308
- "type": "steedos-record-detail",
2309
- "objectApiName": "${objectName}",
2310
- "recordId": `\${${options.idFieldName}}`,
2311
- "showBackButton": false,
2312
- "showButtons": true,
2313
- "data": {
2314
- "_inDrawer": true, // 用于判断是否在抽屉中
2315
- "recordLoaded": false, // 重置数据加载状态
2316
- }
2317
- };
2318
-
2319
-
2320
- if(!(field.is_name || field.name === options.labelFieldName)){
2321
- drawerRecordDetailSchema.objectApiName = field.reference_to;
2322
- drawerRecordDetailSchema.recordId = `\${_display.${field.name}.value}`;
2323
- }
2324
-
2325
- columnItem.onEvent = {
2326
- "click": {
2327
- "actions": [
2328
- {
2329
- "actionType": "drawer",
2330
- "drawer": {
2331
- "type": "drawer",
2332
- "title": " ",
2333
- "headerClassName": "hidden",
2334
- "size": "lg",
2335
- "bodyClassName": "p-0 m-0 bg-gray-100",
2336
- "closeOnEsc": true,
2337
- "closeOnOutside": true,
2338
- "resizable": true,
2339
- "actions": [],
2340
- "body": [
2341
- drawerRecordDetailSchema
2342
- ],
2343
- "className": "steedos-record-detail-drawer app-popover",
2344
- "id": "u:fc5f055afa8c"
2345
- },
2346
- "preventDefault": true
2347
- }
2348
- ]
2349
- }
2350
- };
2392
+ columnItem.onEvent = await getColumnItemOnClick(field, options);
2351
2393
  }
2352
2394
 
2353
2395
  }
@@ -2560,17 +2602,23 @@ async function getMobileTableColumns(fields, options){
2560
2602
  onEvent: {
2561
2603
  "click": {
2562
2604
  "actions": [
2605
+ // {
2606
+ // "args": {
2607
+ // "api": {
2608
+ // "url": url,
2609
+ // "method": "get",
2610
+ // "headers": {
2611
+ // "Authorization": "Bearer ${context.tenantId},${context.authToken}"
2612
+ // }
2613
+ // }
2614
+ // },
2615
+ // "actionType": "download"
2616
+ // }
2563
2617
  {
2618
+ "actionType": "link",
2564
2619
  "args": {
2565
- "api": {
2566
- "url": url,
2567
- "method": "get",
2568
- "headers": {
2569
- "Authorization": "Bearer ${context.tenantId},${context.authToken}"
2570
- }
2571
- }
2572
- },
2573
- "actionType": "download"
2620
+ "link": url
2621
+ }
2574
2622
  }
2575
2623
  ],
2576
2624
  "weight": 0
@@ -3279,7 +3327,7 @@ function getReadonlyFormAdaptor(object, fields, options){
3279
3327
  nameLabel = `record._display.${nameField.name}.label`;
3280
3328
  }
3281
3329
  } else if (nameField){
3282
- nameLabel = `record._display.${nameField.name} || record.${nameField.name}`;
3330
+ nameLabel = `(record._display ? record._display.${nameField.name} : record.${nameField.name})`;
3283
3331
  }
3284
3332
  return `
3285
3333
  if(payload.data.data.length === 0){
@@ -4808,34 +4856,11 @@ const getSchema$5 = async (uiSchema, ctx) => {
4808
4856
  }
4809
4857
  };
4810
4858
 
4811
- /*
4812
- * @Author: baozhoutao@steedos.com
4813
- * @Date: 2022-07-13 15:18:03
4814
- * @LastEditors: baozhoutao@steedos.com
4815
- * @LastEditTime: 2023-04-11 10:34:26
4816
- * @Description:
4817
- */
4818
-
4819
- async function getPage({type, pageId = '', appId, objectName = '', recordId = '', formFactor = 'LARGE'}){
4820
- const api = `/api/pageSchema/${type}?app=${appId}&objectApiName=${objectName}&recordId=${recordId}&pageId=${pageId}&formFactor=${formFactor}`;
4821
- const page = await fetchAPI(api);
4822
- if (page && page.schema) {
4823
- page.schema = JSON.parse(page.schema);
4824
- if(page.schema.data){
4825
- delete page.schema.data.recordId;
4826
- delete page.schema.data.objectName;
4827
- delete page.schema.data.context;
4828
- delete page.schema.data.global;
4829
- }
4830
- return page;
4831
- }
4832
- }
4833
-
4834
4859
  /*
4835
4860
  * @Author: baozhoutao@steedos.com
4836
4861
  * @Date: 2022-11-01 15:49:58
4837
- * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
4838
- * @LastEditTime: 2023-06-28 23:22:31
4862
+ * @LastEditors: yinlianghui@hotoa.com yinlianghui@hotoa.com
4863
+ * @LastEditTime: 2024-05-19 10:01:07
4839
4864
  * @Description:
4840
4865
  */
4841
4866
 
@@ -4897,6 +4922,12 @@ const getSchema$4 = async (uiSchema, ctx) => {
4897
4922
  closeOnEsc: false,
4898
4923
  closeOnOutside: false,
4899
4924
  showCloseButton: true,
4925
+ "data": {
4926
+ "&": "$$",
4927
+ "_master": "${_master}",
4928
+ "_master._isRelated": "${_isRelated}",
4929
+ "_master.relatedKey": "${relatedKey}"
4930
+ },
4900
4931
  size: "lg",
4901
4932
  "onEvent": {
4902
4933
  "cancel": {
@@ -6778,6 +6809,7 @@ function getObjectListHeader$1(objectSchema, listViewName, ctx) {
6778
6809
  function getBackButtonSchema(){
6779
6810
  return {
6780
6811
  "type": "service",
6812
+ "className": "steedos-object-record-detail-header-back-button",
6781
6813
  "onEvent": {
6782
6814
  "@history_paths.changed": {
6783
6815
  "actions": [
@@ -7064,7 +7096,7 @@ async function getObjectRecordDetailHeader(objectSchema, recordId, options) {
7064
7096
  id: `page_readonly_${name}_header`,
7065
7097
  name: `page`,
7066
7098
  body: body,
7067
- className: ''
7099
+ className: "steedos-object-record-detail-header"
7068
7100
  }
7069
7101
 
7070
7102
  }
@@ -11440,7 +11472,11 @@ async function lookupToAmisPicker(field, readonly, ctx){
11440
11472
  // 如果当前元素不是数组,则处理该元素
11441
11473
  // 下面正则用于匹配amis公式\${}
11442
11474
  if(/\\\$\\\{([^}]*)\\\}/.test(arr[i])) {
11443
- arr[i] = currentAmis.evaluate(arr[i], api.data.$self);
11475
+ try{
11476
+ arr[i] = currentAmis.evaluate(arr[i], api.context);
11477
+ }catch(ex){
11478
+ console.error("运行lookup过滤公式时出现错误:",ex);
11479
+ }
11444
11480
  }
11445
11481
  }
11446
11482
  }
@@ -11857,7 +11893,11 @@ async function lookupToAmisSelect(field, readonly, ctx){
11857
11893
  // 如果当前元素不是数组,则处理该元素
11858
11894
  // 下面正则用于匹配amis公式\${}
11859
11895
  if(/\\\$\\\{([^}]*)\\\}/.test(arr[i])) {
11860
- arr[i] = currentAmis.evaluate(arr[i], api.data.$self);
11896
+ try{
11897
+ arr[i] = currentAmis.evaluate(arr[i], api.context);
11898
+ }catch(ex){
11899
+ console.error("运行lookup过滤公式时出现错误:",ex);
11900
+ }
11861
11901
  }
11862
11902
  }
11863
11903
  }
@@ -12963,6 +13003,21 @@ async function convertSFieldToAmisField(field, readonly, ctx) {
12963
13003
  type: getAmisStaticFieldType('url', readonly, field),
12964
13004
  static: readonly ? true : false
12965
13005
  };
13006
+ if(!readonly){
13007
+ // amis input-url控件不支持相对路径,这里支持下
13008
+ // 如果要使用amis原生input-url控件的默认的isUrl验证效果或自定义字段validations效果,配置字段的amis.validations属性即可,配置为null或空字符串则使用amis默认的isUrl效果
13009
+ let fieldAmisValidations = field.amis?.validations;
13010
+ if(typeof fieldAmisValidations === "undefined"){
13011
+ Object.assign(convertData, {
13012
+ "validations": {
13013
+ "matchRegexp": "^((http:\\/\\/|https:\\/\\/|ftp:\\/\\/|sftp:\\/\\/)+([^\\s\\/\\.]+(\\.[^\\s\\/\\.]+)+))*(\\/[^\\s\\.\\/]+)*$"
13014
+ },
13015
+ "validationErrors": {
13016
+ "matchRegexp": i18next.t('frontend_form_validation_failed_url')//"URL 格式不正确"
13017
+ }
13018
+ });
13019
+ }
13020
+ }
12966
13021
  if(readonly && field.show_as_qr){
12967
13022
  convertData = {
12968
13023
  type: "control",