@steedos-widgets/amis-object 3.6.2-beta.2 → 3.6.2-beta.3

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.
@@ -6552,6 +6552,18 @@ function getBatchDelete(objectName){
6552
6552
  return {
6553
6553
  method: 'post',
6554
6554
  url: getApi$2(),
6555
+ adaptor: `
6556
+ if(payload.errors){
6557
+ payload.data.deleteErrorMessage = [];
6558
+ payload.errors.forEach(function(error){
6559
+ let errorRecord = error.path.map(function (item) {
6560
+ return item.split('delete__')[1].to_float() + 1;
6561
+ }).toString();
6562
+ payload.data.deleteErrorMessage.push("第" + errorRecord + "条记录删除出现异常,报错信息为(" + (window.t ? window.t(error.message) : error.message) + ")");
6563
+ })
6564
+ }
6565
+ return payload;
6566
+ `,
6555
6567
  requestAdaptor: `
6556
6568
  var ids = api.data.ids.split(",");
6557
6569
  var deleteArray = [];
@@ -11270,7 +11282,6 @@ function getObjectFooterToolbar(mainObject, formFactor, options) {
11270
11282
  else {
11271
11283
  if(options && options.isRelated){
11272
11284
  return [
11273
- "statistics",
11274
11285
  {
11275
11286
  "type": "pagination",
11276
11287
  "maxButtons": 10,
@@ -11283,7 +11294,6 @@ function getObjectFooterToolbar(mainObject, formFactor, options) {
11283
11294
  const no_pagination = mainObject.paging && (mainObject.paging.enabled === false);
11284
11295
  const is_lookup = options.isLookup;
11285
11296
  const commonConfig = [
11286
- "statistics",
11287
11297
  {
11288
11298
  "type": "pagination",
11289
11299
  "maxButtons": 10,
@@ -11402,6 +11412,29 @@ function getBulkActions(objectSchema){
11402
11412
  "className": "hidden",
11403
11413
  "id": "batchDelete",
11404
11414
  "api": getBatchDelete(objectSchema.name),
11415
+ "feedback": {
11416
+ "title": "删除警告",
11417
+ "visibleOn": "${deleteErrorMessage}",
11418
+ "body": [
11419
+ {
11420
+ "type": "each",
11421
+ "name": "deleteErrorMessage",
11422
+ "items": {
11423
+ "type": "alert",
11424
+ "body": "${item}",
11425
+ "level": "danger",
11426
+ "className": "mb-3"
11427
+ }
11428
+ }
11429
+ ],
11430
+ "actions": [
11431
+ {
11432
+ "type": "button",
11433
+ "actionType": "close",
11434
+ "label": "关闭"
11435
+ }
11436
+ ]
11437
+ }
11405
11438
  }
11406
11439
  // {
11407
11440
  // "label": "批量修改",
@@ -15854,8 +15887,8 @@ async function getFormBody(permissionFields, formFields, ctx){
15854
15887
  /*
15855
15888
  * @Author: 殷亮辉 yinlianghui@hotoa.com
15856
15889
  * @Date: 2023-11-15 09:50:22
15857
- * @LastEditors: liaodaxue
15858
- * @LastEditTime: 2024-01-09 18:12:28
15890
+ * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
15891
+ * @LastEditTime: 2024-01-12 14:51:00
15859
15892
  */
15860
15893
 
15861
15894
  /**
@@ -16004,7 +16037,12 @@ function getFormPagination(props, mode) {
16004
16037
  let currentIndex = event.data.index;
16005
16038
  // 翻页到下一页之前需要先把当前页改动的内容保存到中间变量__tableItems中
16006
16039
  let currentFormValues = scope.getComponentById(__formId).getValues();
16007
- fieldValue[currentIndex] = currentFormValues;
16040
+ if(event.data.parent){
16041
+ fieldValue[event.data.__parentIndex].children[currentIndex] = currentFormValues;
16042
+ }
16043
+ else{
16044
+ fieldValue[currentIndex] = currentFormValues;
16045
+ }
16008
16046
  // 翻页到下一页前需要同时把改动的内容保存到最终正式的表单字段中,所以额外给正式表单字段执行一次setValue
16009
16047
  doAction({
16010
16048
  "componentId": "${props.id}",
@@ -16071,7 +16109,8 @@ function getFormPagination(props, mode) {
16071
16109
  },
16072
16110
  {
16073
16111
  "type": "tpl",
16074
- "tpl": "${__page}/${__tableItems.length}"
16112
+ // 这里用__super.parent,加__super是为了防止当前记录有字段名为parent的重名变量
16113
+ "tpl": "${__page}/${__super.parent ? __tableItems[__parentIndex]['children'].length : __tableItems.length}"
16075
16114
  },
16076
16115
  {
16077
16116
  "type": "button",
@@ -16079,7 +16118,9 @@ function getFormPagination(props, mode) {
16079
16118
  "icon": `fa fa-angle-right`,
16080
16119
  "level": "link",
16081
16120
  "pageChangeDirection": "next",
16082
- "disabledOn": showPagination ? "${__page >= __tableItems.length}" : "true",
16121
+ // "disabledOn": showPagination ? "${__page >= __tableItems.length}" : "true",
16122
+ // 这里用__super.parent,加__super是为了防止当前记录有字段名为parent的重名变量
16123
+ "disabledOn": showPagination ? "${__page >= (__super.parent ? __tableItems[__parentIndex]['children'].length : __tableItems.length)}" : "true",
16083
16124
  "size": "sm",
16084
16125
  "id": buttonNextId,
16085
16126
  "onEvent": {
@@ -16112,7 +16153,7 @@ function getFormPaginationWrapper(props, form, mode) {
16112
16153
  "data": {
16113
16154
  // 这里加__super前缀是因为__parentForm变量(即主表单)中可能会正好有名为index的字段
16114
16155
  // 比如“对象字段”对象options字段是一个子表字段,但是主表(即“对象字段”对象)中正好有一个名为index的字段
16115
- "&": "${__tableItems[__super.index]}"
16156
+ "&": "${__super.parent ? __tableItems[__parentIndex]['children'][__super.index] : __tableItems[__super.index]}"
16116
16157
  }
16117
16158
  });
16118
16159
  let formBody = [
@@ -16135,6 +16176,10 @@ function getFormPaginationWrapper(props, form, mode) {
16135
16176
  }
16136
16177
  ];
16137
16178
  let onServiceInitedScript = `
16179
+ if(event.data.parent){
16180
+ // 如果是子行,即在节点嵌套情况下,当前节点如果是children属性下的子节点时,则算出其所属父行的索引值
16181
+ event.data.__parentIndex = _.findIndex(event.data.__tableItems, {_id: event.data.parent._id});
16182
+ }
16138
16183
  // 以下脚本是为了解决有时弹出编辑表单时,表单中的值比最后一次编辑保存的值会延迟一拍。
16139
16184
  // 比如:inlineEditMode模式时,用户在表格单元格中直接修改数据,然后弹出的表单form中并没有包含单元格中修改的内容
16140
16185
  // 另外有的地方在非inlineEditMode模式时也会有这种延迟一拍问题,比如对象字段中下拉框类型字段的”选择项“属性
@@ -16190,6 +16235,7 @@ function getFormPaginationWrapper(props, form, mode) {
16190
16235
  // "body": formBody,
16191
16236
  "data": {
16192
16237
  "__page": "${index + 1}",
16238
+ "__parentIndex": null,//兼容节点嵌套情况,即节点中有children属性时,这里记录当前节点所属上层节点index,只支持向上找一层,不支持多层
16193
16239
  // "__total": `\${${props.name}.length}`,
16194
16240
  // "__total": "${__tableItems.length}",
16195
16241
  // "__paginationServiceId": serviceId,
@@ -16237,7 +16283,17 @@ async function getForm(props, mode = "edit", formId) {
16237
16283
  let fieldValue = event.data.__tableItems;//这里不可以_.cloneDeep,因为翻页form中用的是event.data.__tableItems,直接变更其值即可改变表单中的值
16238
16284
  //这里加__super.__super前缀是因为__parentForm变量(即主表单)中可能会正好有名为index的字段
16239
16285
  // 比如“对象字段”对象options字段是一个子表字段,但是主表(即“对象字段”对象)中正好有一个名为index的字段
16240
- fieldValue[event.data.__super.__super.index] = JSON.parse(JSON.stringify(event.data));
16286
+ // fieldValue[event.data.__super.__super.index] = JSON.parse(JSON.stringify(event.data));
16287
+ var currentIndex = event.data.__super.__super.index;
16288
+ var currentFormValues = JSON.parse(JSON.stringify(event.data));
16289
+ var parent = event.data.__super.__super.parent;
16290
+ var __parentIndex = event.data.__super.__super.__parentIndex;
16291
+ if(parent){
16292
+ fieldValue[__parentIndex].children[currentIndex] = currentFormValues;
16293
+ }
16294
+ else{
16295
+ fieldValue[currentIndex] = currentFormValues;
16296
+ }
16241
16297
  doAction({
16242
16298
  "componentId": "${props.id}",
16243
16299
  "actionType": "setValue",
@@ -16377,7 +16433,14 @@ async function getButtonActions(props, mode) {
16377
16433
  let scope = event.context.scoped;
16378
16434
  let fieldValue = event.data.__tableItems;//这里不可以_.cloneDeep,因为翻页form中用的是event.data.__tableItems,直接变更其值即可改变表单中的值
16379
16435
  // 新建一条空白行并保存到子表组件
16380
- fieldValue.push({});
16436
+ var parent = event.data.__super.parent;
16437
+ var __parentIndex = parent && _.findIndex(fieldValue, {_id: parent._id});
16438
+ if(parent){
16439
+ fieldValue[__parentIndex].children.push({});
16440
+ }
16441
+ else{
16442
+ fieldValue.push({});
16443
+ }
16381
16444
  doAction({
16382
16445
  "componentId": "${props.id}",
16383
16446
  "actionType": "setValue",
@@ -16389,7 +16452,13 @@ async function getButtonActions(props, mode) {
16389
16452
  let __paginationServiceId = "${formPaginationId}";
16390
16453
  let __paginationData = scope.getComponentById(__paginationServiceId).getData();
16391
16454
  event.data.index = __paginationData.index;
16392
- event.data.__page = fieldValue.length - 1;//这里不可以用Object.assign否则,event.data中上层作用域数据会丢失
16455
+ if(parent){
16456
+ event.data.__page = fieldValue[__parentIndex].children.length - 1;//这里不可以用Object.assign否则,event.data中上层作用域数据会丢失
16457
+ event.data.__parentIndex = __parentIndex; //执行下面的翻页按钮事件中依赖了__parentIndex值
16458
+ }
16459
+ else{
16460
+ event.data.__page = fieldValue.length - 1;//这里不可以用Object.assign否则,event.data中上层作用域数据会丢失
16461
+ }
16393
16462
  // 触发翻页按钮事件,实现保存当前页数据并跳转到最后一行
16394
16463
  scope.getComponentById(buttonNextId).props.dispatchEvent("click", event.data);
16395
16464
  `;
@@ -16400,7 +16469,15 @@ async function getButtonActions(props, mode) {
16400
16469
  let newItem = scope.getComponentById(__formId).getValues();//这里不可以用event.data,因为其拿到的是弹出表单时的初始值,不是用户实时填写的数据
16401
16470
  let fieldValue = event.data.__tableItems;//这里不可以_.cloneDeep,因为翻页form中用的是event.data.__tableItems,直接变更其值即可改变表单中的值
16402
16471
  // 复制当前页数据到新建行并保存到子表组件
16403
- fieldValue.push(newItem);
16472
+ // fieldValue.push(newItem);
16473
+ var parent = event.data.__super.parent;
16474
+ var __parentIndex = parent && _.findIndex(fieldValue, {_id: parent._id});
16475
+ if(parent){
16476
+ fieldValue[__parentIndex].children.push(newItem);
16477
+ }
16478
+ else{
16479
+ fieldValue.push(newItem);
16480
+ }
16404
16481
  doAction({
16405
16482
  "componentId": "${props.id}",
16406
16483
  "actionType": "setValue",
@@ -16412,7 +16489,14 @@ async function getButtonActions(props, mode) {
16412
16489
  let __paginationServiceId = "${formPaginationId}";
16413
16490
  let __paginationData = scope.getComponentById(__paginationServiceId).getData();
16414
16491
  event.data.index = __paginationData.index;
16415
- event.data.__page = fieldValue.length - 1;//这里不可以用Object.assign否则,event.data中上层作用域数据会丢失
16492
+ // event.data.__page = fieldValue.length - 1;//这里不可以用Object.assign否则,event.data中上层作用域数据会丢失
16493
+ if(parent){
16494
+ event.data.__page = fieldValue[__parentIndex].children.length - 1;//这里不可以用Object.assign否则,event.data中上层作用域数据会丢失
16495
+ event.data.__parentIndex = __parentIndex; //执行下面的翻页按钮事件中依赖了__parentIndex值
16496
+ }
16497
+ else{
16498
+ event.data.__page = fieldValue.length - 1;//这里不可以用Object.assign否则,event.data中上层作用域数据会丢失
16499
+ }
16416
16500
  // 触发翻页按钮事件,实现保存当前页数据并跳转到最后一行
16417
16501
  scope.getComponentById(buttonNextId).props.dispatchEvent("click", event.data);
16418
16502
  `;
@@ -16488,7 +16572,8 @@ async function getButtonActions(props, mode) {
16488
16572
  "_master": "${_master}",
16489
16573
  "global": "${global}",
16490
16574
  "uiSchema": "${uiSchema}",
16491
- "index": "${index}",
16575
+ "index": "${index}",//amis组件自带行索引,在节点嵌套情况下,当前节点如果是children属性下的子节点时,这里的index是当前节点在children中的索引,而不是外层父节点的index
16576
+ "parent": "${parent}",//amis组件自带父节点数据域数据,即节点嵌套情况下,当前节点为某个节点(比如A节点)的children属性下的子节点时,当前节点的父节点(即A节点)的数据域数据
16492
16577
  // "__tableItems": `\${${props.name}}`
16493
16578
  // 为了解决"弹出的dialog窗口中子表组件会影响页面布局界面中父作用域字段值",比如设计字段布局微页面中的设置分组功能,弹出的就是子表dialog
16494
16579
  // 所以这里使用json|toJson转一次,断掉event.data.__tableItems与上层任用域中props.name的联系
@@ -16516,35 +16601,39 @@ async function getButtonActions(props, mode) {
16516
16601
  Object.assign(actionShowEditDialog.dialog, props.dialog);
16517
16602
  }
16518
16603
  if (mode == "new") {
16519
- `
16520
- let newItem = {};
16521
- if(event.data["${props.name}"]){
16522
- // let fieldValue = event.data.__tableItems;
16523
- // 这里不用__tableItems是因为新建的时候没有翻页,里面没有也不需要走__tableItems变量
16524
- // let fieldValue = _.clone(event.data["${props.name}"]);
16525
- let fieldValue = event.data["${props.name}"];
16526
- fieldValue.push(newItem);
16527
- doAction({
16528
- "componentId": "${props.id}",
16529
- "actionType": "setValue",
16530
- "args": {
16531
- "value": fieldValue
16532
- }
16533
- });
16534
- event.data.index = fieldValue.length - 1;
16535
- }
16536
- else{
16537
- // 这里不可以执行event.data["${props.name}"]=[newItem],数据域会断掉
16538
- doAction({
16539
- "componentId": "${props.id}",
16540
- "actionType": "setValue",
16541
- "args": {
16542
- "value": [newItem]
16543
- }
16544
- });
16545
- event.data.index = 1;
16546
- }
16547
- `;
16604
+ // let onNewLineScript = `
16605
+ // let newItem = {};
16606
+ // if(event.data["${props.name}"]){
16607
+ // // let fieldValue = event.data.__tableItems;
16608
+ // // 这里不用__tableItems是因为新建的时候没有翻页,里面没有也不需要走__tableItems变量
16609
+ // // let fieldValue = _.clone(event.data["${props.name}"]);
16610
+ // let fieldValue = event.data["${props.name}"];
16611
+ // fieldValue.push(newItem);
16612
+ // doAction({
16613
+ // "componentId": "${props.id}",
16614
+ // "actionType": "setValue",
16615
+ // "args": {
16616
+ // "value": fieldValue
16617
+ // }
16618
+ // });
16619
+ // event.data.index = fieldValue.length - 1;
16620
+ // }
16621
+ // else{
16622
+ // // 这里不可以执行event.data["${props.name}"]=[newItem],数据域会断掉
16623
+ // doAction({
16624
+ // "componentId": "${props.id}",
16625
+ // "actionType": "setValue",
16626
+ // "args": {
16627
+ // "value": [newItem]
16628
+ // }
16629
+ // });
16630
+ // event.data.index = 1;
16631
+ // }
16632
+ // `;
16633
+ // let actionNewLine = {
16634
+ // "actionType": "custom",
16635
+ // "script": onNewLineScript
16636
+ // };
16548
16637
  // 新增行时不需要在弹出编辑表单前先加一行,因为会在编辑表单所在service初始化时判断到是新增就自动增加一行,因为这里拿不到event.data.__tableItems,也无法变更其值
16549
16638
  // actions = [actionNewLine, actionShowEditDialog];
16550
16639
  actions = [actionShowEditDialog];
@@ -16603,7 +16692,15 @@ async function getButtonActions(props, mode) {
16603
16692
  // 这里不可以用event.data["${props.name}"]因为amis input talbe有一层单独的作用域,其值会延迟一拍
16604
16693
  // 这里_.clone是因为字段设计布局设置分组这种弹出窗口中的子表组件,直接删除后,点取消无法还原
16605
16694
  let lastestFieldValue = _.clone(wrapperServiceData["${props.name}"]);
16606
- lastestFieldValue.splice(event.data.index, 1);
16695
+ var currentIndex = event.data.index;
16696
+ var parent = event.data.__super.parent;
16697
+ var __parentIndex = parent && _.findIndex(lastestFieldValue, {_id: parent._id});
16698
+ if(parent){
16699
+ lastestFieldValue[__parentIndex].children.splice(currentIndex, 1);
16700
+ }
16701
+ else{
16702
+ lastestFieldValue.splice(currentIndex, 1);
16703
+ }
16607
16704
  doAction({
16608
16705
  "componentId": "${props.id}",
16609
16706
  "actionType": "setValue",