@steedos-widgets/amis-object 1.3.20 → 1.3.21

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.
@@ -4207,7 +4207,7 @@ var config = {
4207
4207
  * @Author: baozhoutao@steedos.com
4208
4208
  * @Date: 2022-10-28 14:52:55
4209
4209
  * @LastEditors: liaodaxue
4210
- * @LastEditTime: 2023-07-28 16:16:29
4210
+ * @LastEditTime: 2023-12-14 12:01:22
4211
4211
  * @Description:
4212
4212
  */
4213
4213
 
@@ -4224,6 +4224,7 @@ const AmisFormInputs$1 = [
4224
4224
  'percent',
4225
4225
  'password',
4226
4226
  'url',
4227
+ "color",
4227
4228
  'email'
4228
4229
  ];
4229
4230
 
@@ -4236,7 +4237,7 @@ function getAmisStaticFieldType$1(type, readonly, options){
4236
4237
  }
4237
4238
  return type;
4238
4239
  }
4239
- if(_$1__namespace.includes(['text','image'], type)){
4240
+ if(_$1__namespace.includes(['text','image','color'], type)){
4240
4241
  if('text' === type && options && options.amis && options.amis.tpl){
4241
4242
  return 'static';
4242
4243
  }
@@ -4370,6 +4371,7 @@ var frontend_form_please_select$1 = "Please select";
4370
4371
  var frontend_form_confirm$1 = "Confirm";
4371
4372
  var frontend_form_delete$1 = "Delete";
4372
4373
  var frontend_form_view$1 = "view";
4374
+ var frontend_form_details$1 = "details";
4373
4375
  var frontend_delete_confirm_text$1 = "Are you sure you want to delete this item?";
4374
4376
  var frontend_delete_many_selected_required$1 = "Please select the item to be deleted";
4375
4377
  var frontend_delete_many_confirm_text$1 = "Are you sure you want to delete?";
@@ -4456,6 +4458,7 @@ var en_us = {
4456
4458
  frontend_form_confirm: frontend_form_confirm$1,
4457
4459
  frontend_form_delete: frontend_form_delete$1,
4458
4460
  frontend_form_view: frontend_form_view$1,
4461
+ frontend_form_details: frontend_form_details$1,
4459
4462
  frontend_delete_confirm_text: frontend_delete_confirm_text$1,
4460
4463
  frontend_delete_many_selected_required: frontend_delete_many_selected_required$1,
4461
4464
  frontend_delete_many_confirm_text: frontend_delete_many_confirm_text$1,
@@ -4543,6 +4546,7 @@ var frontend_form_please_select = "请选择";
4543
4546
  var frontend_form_confirm = "确认";
4544
4547
  var frontend_form_delete = "删除";
4545
4548
  var frontend_form_view = "查看";
4549
+ var frontend_form_details = "详情";
4546
4550
  var frontend_delete_confirm_text = "确定要删除此项目?";
4547
4551
  var frontend_delete_many_selected_required = "请选择要删除的项";
4548
4552
  var frontend_delete_many_confirm_text = "确定要删除吗?";
@@ -4630,6 +4634,7 @@ var zh_cn = {
4630
4634
  frontend_form_confirm: frontend_form_confirm,
4631
4635
  frontend_form_delete: frontend_form_delete,
4632
4636
  frontend_form_view: frontend_form_view,
4637
+ frontend_form_details: frontend_form_details,
4633
4638
  frontend_delete_confirm_text: frontend_delete_confirm_text,
4634
4639
  frontend_delete_many_selected_required: frontend_delete_many_selected_required,
4635
4640
  frontend_delete_many_confirm_text: frontend_delete_many_confirm_text,
@@ -5304,6 +5309,11 @@ async function getTableColumns$1(fields, options){
5304
5309
  options: field.type === 'html' ? {html: true} : null
5305
5310
  // toggled: true
5306
5311
  }, field.amis, {name: field.name});
5312
+
5313
+ if(field.type === 'color'){
5314
+ columnItem.type = 'color';
5315
+ columnItem.defaultColor = null;
5316
+ }
5307
5317
  }
5308
5318
  }
5309
5319
  if(columnItem){
@@ -7991,8 +8001,8 @@ const getSchema$2 = (uiSchema) => {
7991
8001
  /*
7992
8002
  * @Author: baozhoutao@steedos.com
7993
8003
  * @Date: 2022-11-07 17:00:38
7994
- * @LastEditors: baozhoutao@steedos.com
7995
- * @LastEditTime: 2023-08-24 16:44:42
8004
+ * @LastEditors: liaodaxue
8005
+ * @LastEditTime: 2023-12-13 10:09:05
7996
8006
  * @Description:
7997
8007
  */
7998
8008
 
@@ -8003,7 +8013,7 @@ const getSchema$1 = (uiSchema)=>{
8003
8013
  "body": [
8004
8014
  {
8005
8015
  "type": "button",
8006
- "label": instance.t('frontend_form_view'),
8016
+ "label": instance.t('frontend_form_details'),
8007
8017
  "className": "border-none",
8008
8018
  "onEvent": {
8009
8019
  "click": {
@@ -14684,6 +14694,16 @@ async function convertSFieldToAmisField(field, readonly, ctx) {
14684
14694
  }
14685
14695
  }
14686
14696
 
14697
+ break;
14698
+ case 'color':
14699
+ convertData = {
14700
+ type: getAmisStaticFieldType$1('color', readonly),
14701
+ name: field.name,
14702
+ label: field.label
14703
+ };
14704
+ if(readonly){
14705
+ convertData.defaultColor = null;
14706
+ }
14687
14707
  break;
14688
14708
  case 'boolean':
14689
14709
  convertData = {
@@ -15538,7 +15558,7 @@ async function getFormBody(permissionFields, formFields, ctx){
15538
15558
  * @Author: 殷亮辉 yinlianghui@hotoa.com
15539
15559
  * @Date: 2023-11-15 09:50:22
15540
15560
  * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
15541
- * @LastEditTime: 2023-12-12 17:13:37
15561
+ * @LastEditTime: 2023-12-16 16:39:49
15542
15562
  */
15543
15563
 
15544
15564
  /**
@@ -15634,24 +15654,24 @@ async function getInputTableColumns(props) {
15634
15654
  function getFormPagination(props) {
15635
15655
  let onPageChangeScript = `
15636
15656
  let scope = event.context.scoped;
15637
- let paginationServiceId = event.data.paginationServiceId;
15638
- let wrapperServiceId = event.data.wrapperServiceId;
15639
- let formId = event.data.formId;
15640
- let fieldValue = event.data.changedItems;//这里不可以_.cloneDeep,因为翻页form中用的是event.data.changedItems,直接变更其值即可改变表单中的值
15657
+ let __paginationServiceId = event.data.__paginationServiceId;
15658
+ let __wrapperServiceId = event.data.__wrapperServiceId;
15659
+ let __formId = event.data.__formId;
15660
+ let fieldValue = event.data.__changedItems;//这里不可以_.cloneDeep,因为翻页form中用的是event.data.changedItems,直接变更其值即可改变表单中的值
15641
15661
  let pageChangeDirection = context.props.pageChangeDirection;
15642
- let currentPage = event.data.page;
15662
+ let currentPage = event.data.__page;
15643
15663
  let currentIndex = event.data.index;
15644
15664
 
15645
15665
  // 翻页到下一页之前需要先把当前页改动的内容保存到中间变量changedItems中
15646
- let currentFormValues = scope.getComponentById(formId).getValues();
15666
+ let currentFormValues = scope.getComponentById(__formId).getValues();
15647
15667
  fieldValue[currentIndex] = currentFormValues;
15648
15668
  // // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
15649
15669
  // doAction({
15650
- // "componentId": wrapperServiceId,
15670
+ // "componentId": __wrapperServiceId,
15651
15671
  // "actionType": "setValue",
15652
15672
  // "args": {
15653
15673
  // "value": {
15654
- // "changedItems": fieldValue
15674
+ // "__changedItems": fieldValue
15655
15675
  // }
15656
15676
  // }
15657
15677
  // });
@@ -15674,13 +15694,13 @@ function getFormPagination(props) {
15674
15694
  targetPage = currentPage - 1;
15675
15695
  }
15676
15696
  let targetIndex = targetPage - 1;//input-table组件行索引,从0开始的索引
15677
- // let targetFormData = changedItems[targetIndex];
15697
+ // let targetFormData = __changedItems[targetIndex];
15678
15698
  doAction({
15679
15699
  "actionType": "setValue",
15680
- "componentId": paginationServiceId,
15700
+ "componentId": __paginationServiceId,
15681
15701
  "args": {
15682
15702
  "value": {
15683
- "page": targetPage,
15703
+ "__page": targetPage,
15684
15704
  "index": targetIndex
15685
15705
  }
15686
15706
  }
@@ -15688,7 +15708,7 @@ function getFormPagination(props) {
15688
15708
  // 这里不用进一步把表单内容setValue到form中,是因为编辑表单中schemaApi监听了行索引index的变化,其值变化时会重新build整个form
15689
15709
  // doAction({
15690
15710
  // "actionType": "setValue",
15691
- // "componentId": formId,
15711
+ // "componentId": __formId,
15692
15712
  // "args": {
15693
15713
  // "value": targetFormData
15694
15714
  // },
@@ -15705,7 +15725,7 @@ function getFormPagination(props) {
15705
15725
  "icon": `fa fa-angle-left`,
15706
15726
  "level": "link",
15707
15727
  "pageChangeDirection": "prev",
15708
- "disabledOn": "${page <= 1}",
15728
+ "disabledOn": "${__page <= 1}",
15709
15729
  "size": "sm",
15710
15730
  "onEvent": {
15711
15731
  "click": {
@@ -15720,7 +15740,7 @@ function getFormPagination(props) {
15720
15740
  },
15721
15741
  {
15722
15742
  "type": "tpl",
15723
- "tpl": "${page}/${total}"
15743
+ "tpl": "${__page}/${__total}"
15724
15744
  },
15725
15745
  {
15726
15746
  "type": "button",
@@ -15728,7 +15748,7 @@ function getFormPagination(props) {
15728
15748
  "icon": `fa fa-angle-right`,
15729
15749
  "level": "link",
15730
15750
  "pageChangeDirection": "next",
15731
- "disabledOn": "${page >= total}",
15751
+ "disabledOn": "${__page >= __total}",
15732
15752
  "size": "sm",
15733
15753
  "onEvent": {
15734
15754
  "click": {
@@ -15749,10 +15769,23 @@ function getFormPagination(props) {
15749
15769
  * 传入formSchema输出带翻页容器的wrapper
15750
15770
  * @param {*} props input-table组件props
15751
15771
  * @param {*} form formSchema
15772
+ * @param {*} mode edit/readonly
15752
15773
  * @returns 带翻页容器的wrapper
15753
15774
  */
15754
- function getFormPaginationWrapper(props, form) {
15775
+ function getFormPaginationWrapper(props, form, mode) {
15755
15776
  let serviceId = `service_popup_pagination_wrapper__${props.id}`;
15777
+ // 这里加__super前缀是因为__parentForm变量(即主表单)中可能会正好有名为index的字段
15778
+ // 比如“对象字段”对象options字段是一个子表字段,但是主表(即“对象字段”对象)中正好有一个名为index的字段
15779
+ // 只读的时候不可以走中间变量__changedItems,比如工作流规则详细页面修改了子表字段”时间触发器“值后,在只读界面点击查看按钮弹出的表单中__changedItems值是修改前的值
15780
+ let formValues = mode === "readonly" ? `\${${props.name}[__super.index]}` : "${__changedItems[__super.index]}";
15781
+ // 这时用__readonlyItemsLength是因为`\${${props.name}.length}`拿不到值
15782
+ let totalValue = mode === "readonly" ? "${__readonlyItemsLength}" : "${__changedItems.length}";
15783
+ let innerForm = Object.assign({}, form, {
15784
+ "data": {
15785
+ // "&": "${__changedItems[__super.index]}"
15786
+ "&": formValues,
15787
+ }
15788
+ });
15756
15789
  let formBody = [
15757
15790
  {
15758
15791
  "type": "wrapper",
@@ -15762,14 +15795,15 @@ function getFormPaginationWrapper(props, form) {
15762
15795
  getFormPagination(props)
15763
15796
  ]
15764
15797
  },
15765
- // form
15766
- Object.assign({}, form, {
15767
- "canAccessSuperData": false,
15798
+ {
15799
+ "type": "service",
15800
+ "body": [
15801
+ innerForm
15802
+ ],
15768
15803
  "data": {
15769
- // "&": `\${${props.name}[index]}`,
15770
- "&": "${changedItems[index]}"
15804
+ "&": "${__parentForm}"
15771
15805
  }
15772
- })
15806
+ }
15773
15807
  ];
15774
15808
  let onServiceInitedScript = `
15775
15809
  // 以下脚本在inlineEditMode模式时才有必要执行(不过执行了也没有坏处,纯粹是没必要),是为了解决:
@@ -15781,13 +15815,13 @@ function getFormPaginationWrapper(props, form) {
15781
15815
  return;
15782
15816
  }
15783
15817
  let scope = event.context.scoped;
15784
- let wrapperServiceId = event.data.wrapperServiceId;
15785
- let wrapperService = scope.getComponentById(wrapperServiceId);
15818
+ let __wrapperServiceId = event.data.__wrapperServiceId;
15819
+ let wrapperService = scope.getComponentById(__wrapperServiceId);
15786
15820
  let wrapperServiceData = wrapperService.getData();
15787
15821
  let lastestFieldValue = wrapperServiceData["${props.name}"];//这里不可以用event.data["${props.name}"]因为amis input talbe有一层单独的作用域,其值会延迟一拍
15788
- //不可以直接像event.data.changedItems = originalFieldValue; 这样整个赋值,否则作用域会断
15789
- event.data.changedItems.forEach(function(n,i){
15790
- event.data.changedItems[i] = lastestFieldValue[i];
15822
+ //不可以直接像event.data.__changedItems = originalFieldValue; 这样整个赋值,否则作用域会断
15823
+ event.data.__changedItems.forEach(function(n,i){
15824
+ event.data.__changedItems[i] = lastestFieldValue[i];
15791
15825
  });
15792
15826
  `;
15793
15827
  let schema = {
@@ -15810,11 +15844,11 @@ function getFormPaginationWrapper(props, form) {
15810
15844
  },
15811
15845
  // "body": formBody,
15812
15846
  "data": {
15813
- "page": "${index + 1}",
15814
- // "total": `\${${props.name}.length}`,
15815
- "total": "${changedItems.length}",
15816
- "paginationServiceId": serviceId,
15817
- "formId": form.id
15847
+ "__page": "${index + 1}",
15848
+ // "__total": `\${${props.name}.length}`,
15849
+ "__total": totalValue,
15850
+ "__paginationServiceId": serviceId,
15851
+ "__formId": form.id
15818
15852
  },
15819
15853
  "onEvent": {
15820
15854
  "init": {
@@ -15846,13 +15880,17 @@ async function getForm(props, mode = "edit") {
15846
15880
  "mode": "normal",
15847
15881
  "body": body,
15848
15882
  "wrapWithPanel": false,
15883
+ "canAccessSuperData": false,
15849
15884
  "className": "steedos-object-form steedos-amis-form"
15850
15885
  };
15851
15886
  if (mode === "edit") {
15852
15887
  let onEditItemSubmitScript = `
15853
15888
  // let fieldValue = _.cloneDeep(event.data["${props.name}"]);
15854
- let fieldValue = event.data.changedItems;//这里不可以_.cloneDeep,因为翻页form中用的是event.data.changedItems,直接变更其值即可改变表单中的值
15855
- fieldValue[event.data.index] = JSON.parse(JSON.stringify(event.data));
15889
+ let fieldValue = event.data.__changedItems;//这里不可以_.cloneDeep,因为翻页form中用的是event.data.changedItems,直接变更其值即可改变表单中的值
15890
+
15891
+ //这里加__super.__super前缀是因为__parentForm变量(即主表单)中可能会正好有名为index的字段
15892
+ // 比如“对象字段”对象options字段是一个子表字段,但是主表(即“对象字段”对象)中正好有一个名为index的字段
15893
+ fieldValue[event.data.__super.__super.index] = JSON.parse(JSON.stringify(event.data));
15856
15894
  doAction({
15857
15895
  "componentId": "${props.id}",
15858
15896
  "actionType": "setValue",
@@ -15862,11 +15900,11 @@ async function getForm(props, mode = "edit") {
15862
15900
  });
15863
15901
  // // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
15864
15902
  // doAction({
15865
- // "componentId": event.data.wrapperServiceId,
15903
+ // "componentId": event.data.__wrapperServiceId,
15866
15904
  // "actionType": "setValue",
15867
15905
  // "args": {
15868
15906
  // "value": {
15869
- // "changedItems": fieldValue
15907
+ // "__changedItems": fieldValue
15870
15908
  // }
15871
15909
  // }
15872
15910
  // });
@@ -15898,10 +15936,10 @@ async function getForm(props, mode = "edit") {
15898
15936
  else if (mode === "new") {
15899
15937
  let onNewItemSubmitScript = `
15900
15938
  // let fieldValue = _.cloneDeep(event.data["${props.name}"]);
15901
- if(!event.data.changedItems){
15902
- event.data.changedItems = [];
15939
+ if(!event.data.__changedItems){
15940
+ event.data.__changedItems = [];
15903
15941
  }
15904
- let fieldValue = event.data.changedItems;
15942
+ let fieldValue = event.data.__changedItems;
15905
15943
  fieldValue.push(JSON.parse(JSON.stringify(event.data)));
15906
15944
  doAction({
15907
15945
  "componentId": "${props.id}",
@@ -15912,11 +15950,11 @@ async function getForm(props, mode = "edit") {
15912
15950
  });
15913
15951
  // // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
15914
15952
  // doAction({
15915
- // "componentId": event.data.wrapperServiceId,
15953
+ // "componentId": event.data.__wrapperServiceId,
15916
15954
  // "actionType": "setValue",
15917
15955
  // "args": {
15918
15956
  // "value": {
15919
- // "changedItems": fieldValue
15957
+ // "__changedItems": fieldValue
15920
15958
  // }
15921
15959
  // }
15922
15960
  // });
@@ -15946,7 +15984,7 @@ async function getForm(props, mode = "edit") {
15946
15984
  });
15947
15985
  }
15948
15986
  if (mode === "edit" || mode === "readonly") {
15949
- schema = getFormPaginationWrapper(props, schema);
15987
+ schema = getFormPaginationWrapper(props, schema, mode);
15950
15988
  }
15951
15989
  return schema;
15952
15990
  }
@@ -15985,21 +16023,21 @@ async function getButtonNew(props) {
15985
16023
  async function getButtonEdit(props, showAsInlineEditMode) {
15986
16024
  let onCancelScript = `
15987
16025
  let scope = event.context.scoped;
15988
- let wrapperServiceId = event.data.wrapperServiceId;
15989
- let wrapperService = scope.getComponentById(wrapperServiceId);
16026
+ let __wrapperServiceId = event.data.__wrapperServiceId;
16027
+ let wrapperService = scope.getComponentById(__wrapperServiceId);
15990
16028
  let wrapperServiceData = wrapperService.getData();
15991
16029
  let originalFieldValue = wrapperServiceData["${props.name}"];//这里不可以用event.data["${props.name}"]因为amis input talbe有一层单独的作用域,其值会延迟一拍
15992
- //不可以直接像event.data.changedItems = originalFieldValue; 这样整个赋值,否则作用域会断,造成无法还原
15993
- event.data.changedItems.forEach(function(n,i){
15994
- event.data.changedItems[i] = originalFieldValue[i];
16030
+ //不可以直接像event.data.__changedItems = originalFieldValue; 这样整个赋值,否则作用域会断,造成无法还原
16031
+ event.data.__changedItems.forEach(function(n,i){
16032
+ event.data.__changedItems[i] = originalFieldValue[i];
15995
16033
  });
15996
16034
  // 因为翻页form中用的是event.data.changedItems中的数据,所以像下面这样doAction setValue无法实现还原
15997
16035
  // doAction({
15998
- // "componentId": wrapperServiceId,
16036
+ // "componentId": __wrapperServiceId,
15999
16037
  // "actionType": "setValue",
16000
16038
  // "args": {
16001
16039
  // "value": {
16002
- // "changedItems": originalFieldValue
16040
+ // "__changedItems": originalFieldValue
16003
16041
  // }
16004
16042
  // }
16005
16043
  // });
@@ -16030,13 +16068,15 @@ async function getButtonEdit(props, showAsInlineEditMode) {
16030
16068
  // 这里必须加data数据映射,否则翻页功能中取changedItems值时会乱,比如翻页编辑后会把上一页中没改过的字段值带过去
16031
16069
  // 额外把华炎魔方主表记录ObjectForm中的字段值从record变量中映射到子表form中,因为子表lookup字段filtersFunction中可能依赖了主表记录中的字段值,比如“工作流规则”对象“时间触发器”字段中的“日期字段”字段
16032
16070
  // 额外把global、uiSchema也映射过去,有可能要用,后续需要用到其他变更可以这里加映射
16033
- "&": "${record || {}}",
16071
+ // "&": "${record || {}}",
16072
+ // 换成从__super来映射上级表单数据是因为对象列表视图界面中每行下拉菜单中的编辑按钮弹出的表单中的子表所在作用域中没有record变量
16073
+ // 映射到中间变量__parentForm而不是直接用&展开映射是为了避免表单中字段名与作用域中变量重名
16074
+ "__parentForm": "${__super.__super || {}}",
16034
16075
  "global": "${global}",
16035
16076
  "uiSchema": "${uiSchema}",
16036
- "grid": "${grid}",
16037
16077
  "index": "${index}",
16038
- "changedItems": "${changedItems}",
16039
- "wrapperServiceId": "${wrapperServiceId}"
16078
+ "__changedItems": "${__changedItems}",
16079
+ "__wrapperServiceId": "${__wrapperServiceId}"
16040
16080
  },
16041
16081
  "onEvent": {
16042
16082
  "cancel": {
@@ -16084,11 +16124,14 @@ async function getButtonView(props) {
16084
16124
  // 这里必须加data数据映射,否则翻页功能中取changedItems值时会乱,比如翻页编辑后会把上一页中没改过的字段值带过去
16085
16125
  // 额外把华炎魔方主表记录ObjectForm中的字段值从formData变量中映射到子表form中,因为子表lookup字段filtersFunction中可能依赖了主表记录中的字段值,比如“工作流规则”对象“时间触发器”字段中的“日期字段”字段
16086
16126
  // global、uiSchema等常用变量本来就在formData变量已经存在了,无需另外映射
16087
- "&": "${formData || {}}",
16088
- "grid": "${grid}",
16127
+ // "&": "${formData || {}}",
16128
+ // 换成从__super来映射上级表单数据是因为对象列表视图界面中每行下拉菜单中的编辑按钮弹出的表单中的子表所在作用域中没有formData变量
16129
+ // 映射到中间变量__parentForm而不是直接用&展开映射是为了避免表单中字段名与作用域中变量重名
16130
+ "__parentForm": "${__super.__super || {}}",
16089
16131
  "index": "${index}",
16090
- "changedItems": "${changedItems}",
16091
- "wrapperServiceId": "${wrapperServiceId}"
16132
+ "__changedItems": "${__changedItems}",
16133
+ "__wrapperServiceId": "${__wrapperServiceId}",
16134
+ "__readonlyItemsLength": `\${${props.name}.length}`
16092
16135
  }
16093
16136
  }
16094
16137
  }
@@ -16101,10 +16144,10 @@ async function getButtonView(props) {
16101
16144
  function getButtonDelete(props) {
16102
16145
  let onDeleteItemScript = `
16103
16146
  // let fieldValue = _.cloneDeep(event.data["${props.name}"]);
16104
- if(!event.data.changedItems){
16105
- event.data.changedItems = [];
16147
+ if(!event.data.__changedItems){
16148
+ event.data.__changedItems = [];
16106
16149
  }
16107
- let fieldValue = event.data.changedItems;
16150
+ let fieldValue = event.data.__changedItems;
16108
16151
  // fieldValue.push(JSON.parse(JSON.stringify(event.data)));
16109
16152
  fieldValue.splice(event.data.index, 1)
16110
16153
  doAction({
@@ -16116,11 +16159,11 @@ function getButtonDelete(props) {
16116
16159
  });
16117
16160
  // // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
16118
16161
  // doAction({
16119
- // "componentId": event.data.wrapperServiceId,
16162
+ // "componentId": event.data.__wrapperServiceId,
16120
16163
  // "actionType": "setValue",
16121
16164
  // "args": {
16122
16165
  // "value": {
16123
- // "changedItems": fieldValue
16166
+ // "__changedItems": fieldValue
16124
16167
  // }
16125
16168
  // }
16126
16169
  // });
@@ -16201,7 +16244,7 @@ const getAmisInputTableSchema = async (props) => {
16201
16244
  "id": props.id,
16202
16245
  "columns": await getInputTableColumns(props),
16203
16246
  // "needConfirm": false, //不可以配置为false,否则,单元格都是可编辑状态,且很多static类型无法正常显示,比如static-mapping
16204
- "strictMode": true,
16247
+ "strictMode": props.strictMode,
16205
16248
  "showTableAddBtn": false,
16206
16249
  "showFooterAddBtn": false,
16207
16250
  "className": props.tableClassName
@@ -16219,7 +16262,31 @@ const getAmisInputTableSchema = async (props) => {
16219
16262
  }
16220
16263
  let dataProviderInited = `
16221
16264
  // 单独维护一份中间变量changedItems,因为原变量在input-table组件有单独的作用域,翻页功能中无法维护此作用域中的行记录值
16222
- setData({ changedItems: _.cloneDeep(data["${props.name}"]) || []});
16265
+ setData({ __changedItems: _.cloneDeep(data["${props.name}"]) || []});
16266
+ `;
16267
+ let onInitScript = `
16268
+ // 上面dataProviderInited中setData有时不生效,没有成功给service组件设置__changedItems变量值
16269
+ // 比如设计字段布局界面中的设置分组功能就因为__changedItems变量值不存在而报错,应该是因为把steedos-input-table组件单独放到弹出窗口中会有这个问题
16270
+ // 所以额外在service init事件中手动设置一次__changedItems值
16271
+ let __wrapperServiceId = event.data.__wrapperServiceId;
16272
+ let fieldValue = _.cloneDeep(event.data["${props.name}"]) || [];
16273
+ doAction({
16274
+ "componentId": __wrapperServiceId,
16275
+ "actionType": "setValue",
16276
+ "args": {
16277
+ "value": {
16278
+ "__changedItems": fieldValue
16279
+ }
16280
+ }
16281
+ });
16282
+ // 下面的doAction好像不是必须的
16283
+ // doAction({
16284
+ // "componentId": "${props.id}",
16285
+ // "actionType": "setValue",
16286
+ // "args": {
16287
+ // "value": fieldValue
16288
+ // }
16289
+ // });
16223
16290
  `;
16224
16291
  let schema = {
16225
16292
  "type": "service",
@@ -16229,10 +16296,20 @@ const getAmisInputTableSchema = async (props) => {
16229
16296
  "className": props.className,
16230
16297
  "id": serviceId,
16231
16298
  "data": {
16232
- "wrapperServiceId": serviceId
16299
+ "__wrapperServiceId": serviceId
16233
16300
  },
16234
16301
  "dataProvider": {
16235
16302
  "inited": dataProviderInited
16303
+ },
16304
+ "onEvent": {
16305
+ "init": {
16306
+ "actions": [
16307
+ {
16308
+ "actionType": "custom",
16309
+ "script": onInitScript
16310
+ }
16311
+ ]
16312
+ }
16236
16313
  }
16237
16314
  };
16238
16315
  let footerToolbar = _$1.clone(props.footerToolbar || []); //这里不clone的话,会造成死循环,应该是因为props属性变更会让组件重新渲染
@@ -16247,9 +16324,20 @@ const getAmisInputTableSchema = async (props) => {
16247
16324
  "body": footerToolbar
16248
16325
  });
16249
16326
  }
16250
- if (props.amis) {
16251
- delete props.amis.id;
16252
- Object.assign(schema.body[0], props.amis);
16327
+ let amis = props["input-table"] || props.amis;//额外支持"input-table"代替amis属性,是因为在字段yml文件中用amis作为key不好理解
16328
+ if (amis) {
16329
+ // 支持配置amis属性重写或添加最终生成的input-table中任何属性。
16330
+ delete amis.id;//如果steedos-input-table组件配置了amis.id属性,会造成新建编辑行功能不生效
16331
+ Object.assign(schema.body[0], amis);
16332
+ }
16333
+ const isAnyFieldHasDependOn = (props.fields || []).find(function (item) {
16334
+ return item.depend_on;
16335
+ });
16336
+ if(isAnyFieldHasDependOn){
16337
+ // 有任意一个子字段有depend_on属性时,强制设置禁用静态模式
16338
+ Object.assign(schema.body[0], {
16339
+ strictMode: false
16340
+ });
16253
16341
  }
16254
16342
  // console.log("===schema===", schema);
16255
16343
  return schema;
@@ -21233,14 +21321,14 @@ function getAmisStaticFieldType(type, data_type, options) {
21233
21321
  return type;
21234
21322
  }
21235
21323
  var AmisSteedosField = function (props) { return __awaiter(void 0, void 0, void 0, function () {
21236
- var steedosField, field, _a, readonly, _b, ctx, config, fStatic, hideLabel, schema, schema, fieldAmis, schema, error_1;
21237
- var _c;
21238
- return __generator(this, function (_d) {
21239
- switch (_d.label) {
21324
+ var steedosField, field, _a, readonly, _b, ctx, config, fStatic, hideLabel, defaultSource, source, schema, schema, fieldAmis, schema, error_1;
21325
+ var _c, _d, _e;
21326
+ return __generator(this, function (_f) {
21327
+ switch (_f.label) {
21240
21328
  case 0:
21241
21329
  steedosField = null;
21242
21330
  field = props.field, _a = props.readonly, readonly = _a === void 0 ? false : _a, _b = props.ctx, ctx = _b === void 0 ? {} : _b, config = props.config, props.$schema, fStatic = props.static, hideLabel = props.hideLabel;
21243
- console.log("AmisSteedosField", props);
21331
+ // console.log(`AmisSteedosField`, props)
21244
21332
  // if($schema.config && isString($schema.config)){
21245
21333
  // $schema.config = JSON.parse($schema.config)
21246
21334
  // props.config = $schema.config
@@ -21260,24 +21348,39 @@ var AmisSteedosField = function (props) { return __awaiter(void 0, void 0, void
21260
21348
  // 字段配置为只读,强制走fStatic模式,加上_display判断是为了不影响历史代码,比如直接在ObjectForm中调用steedos-field组件
21261
21349
  fStatic = true;
21262
21350
  }
21263
- _d.label = 1;
21351
+ _f.label = 1;
21264
21352
  case 1:
21265
- _d.trys.push([1, 15, , 16]);
21353
+ _f.trys.push([1, 16, , 17]);
21266
21354
  if (!(fStatic && (steedosField.type === 'lookup' || steedosField.type === 'master_detail'))) return [3 /*break*/, 2];
21355
+ defaultSource = {
21356
+ "method": "post",
21357
+ "url": "${context.rootUrl}/graphql",
21358
+ "requestAdaptor": "\n var steedosField = ".concat(JSON.stringify(steedosField), ";\n var objectName, filters, valueFieldKey, labelFieldKey;\n if(_.isString(steedosField.reference_to)){\n // reference_to\u4E3A\u5355\u9009\n const referenceTo = getReferenceToSync(steedosField);\n const referenceToField = steedosField.reference_to_field || '_id';\n\n objectName = referenceTo.objectName\n valueFieldKey = referenceTo && referenceTo.valueField?.name || '_id' ;\n labelFieldKey = referenceTo && referenceTo.labelField?.name || 'name';\n let value = api.data[steedosField.name];\n if(_.isString(value)){\n value = [value]\n }\n filters = [referenceToField, \"in\", value || []];\n if(objectName == \"object_fields\"){\n //\u5BF9\u8C61\u4E3Aobject_fields\u65F6\uFF0C\u5FC5\u987B\u52A0\u4E0Aobject\u7684\u8FC7\u6EE4\u6761\u4EF6\n const filtersFunction = ").concat(steedosField.filtersFunction || steedosField._filtersFunction, ";\n if(filtersFunction){\n const _filters = filtersFunction(filters, api.data);\n if(_filters && _filters.length > 0){\n filters = [filters,_filters]\n }\n }\n }\n }else{\n // reference_to\u4E3A\u591A\u9009\n const _steedosField = {\n ...steedosField,\n reference_to: api.data[steedosField.name].o\n }\n const referenceTo = getReferenceToSync(_steedosField);\n const referenceToField = _steedosField.reference_to_field || '_id';\n\n objectName = referenceTo.objectName\n valueFieldKey = referenceTo && referenceTo.valueField?.name || '_id' ;\n labelFieldKey = referenceTo && referenceTo.labelField?.name || 'name';\n let value = api.data[_steedosField.name] && api.data[_steedosField.name].ids;\n filters = [referenceToField, \"in\", value || []];\n }\n api.data = {\n query: '{options:' + objectName + '(filters: ' + JSON.stringify(filters) + '){label: ' + labelFieldKey + ',value: ' + valueFieldKey + '}}'\n }\n return api;\n "),
21359
+ "trackExpression": "${" + steedosField.name + "}",
21360
+ "cache": 3000
21361
+ };
21362
+ if (!steedosField.reference_to) {
21363
+ // 兼容lookup字段未配置reference_to属性的情况,当普通下拉框字段用
21364
+ defaultSource = {
21365
+ "url": "${context.rootUrl}/api/v1/spaces/none",
21366
+ data: { $: "$$" },
21367
+ };
21368
+ if (steedosField.optionsFunction || steedosField._optionsFunction) {
21369
+ defaultSource.adaptor = "\n var options = eval(".concat(steedosField.optionsFunction || steedosField._optionsFunction, ")(api.body.$);\n if(api.body.$term){\n options = _.filter(options, function(o) {\n var label = o.label;\n return label.toLowerCase().indexOf(api.body.$term.toLowerCase()) > -1;\n });\n }\n if(!payload.data){\n payload.data = {};\n }\n payload.data.options = options;\n return payload;\n ");
21370
+ }
21371
+ else if (steedosField.options) {
21372
+ defaultSource.adaptor = "\n var options = ".concat(JSON.stringify(steedosField.options), "\n if(api.body.$term){\n options = _.filter(options, function(o) {\n var label = o.label;\n return label.toLowerCase().indexOf(api.body.$term.toLowerCase()) > -1;\n });\n }\n if(!payload.data){\n payload.data = {};\n }\n payload.data.options = options;\n return payload;\n ");
21373
+ }
21374
+ }
21375
+ source = ((_c = steedosField.amis) === null || _c === void 0 ? void 0 : _c.source) || ((_d = steedosField.amis) === null || _d === void 0 ? void 0 : _d.autoComplete) || defaultSource;
21267
21376
  schema = Object.assign({}, {
21268
21377
  type: 'select',
21269
21378
  multiple: steedosField.multiple,
21270
21379
  name: steedosField.name,
21271
21380
  label: steedosField.label,
21272
21381
  static: true,
21273
- className: (_c = steedosField.amis) === null || _c === void 0 ? void 0 : _c.className,
21274
- source: {
21275
- "method": "post",
21276
- "url": "${context.rootUrl}/graphql",
21277
- "requestAdaptor": "\n var steedosField = ".concat(JSON.stringify(steedosField), ";\n var objectName, filters, valueFieldKey, labelFieldKey;\n if(_.isString(steedosField.reference_to)){\n const referenceTo = getReferenceToSync(steedosField);\n const referenceToField = steedosField.reference_to_field || '_id';\n\n objectName = referenceTo.objectName\n valueFieldKey = referenceTo && referenceTo.valueField?.name || '_id' ;\n labelFieldKey = referenceTo && referenceTo.labelField?.name || 'name';\n let value = api.data[steedosField.name];\n if(_.isString(value)){\n value = [value]\n }\n filters = [referenceToField, \"in\", value || []];\n if(objectName == \"object_fields\"){\n //\u5BF9\u8C61\u4E3Aobject_fields\u65F6\uFF0C\u5FC5\u987B\u52A0\u4E0Aobject\u7684\u8FC7\u6EE4\u6761\u4EF6\n const filtersFunction = ").concat(steedosField.filtersFunction || steedosField._filtersFunction, ";\n if(filtersFunction){\n const _filters = filtersFunction(filters, api.data);\n if(_filters && _filters.length > 0){\n filters = [filters,_filters]\n }\n }\n }\n }else{\n const _steedosField = {\n ...steedosField,\n reference_to: api.data[steedosField.name].o\n }\n const referenceTo = getReferenceToSync(_steedosField);\n const referenceToField = _steedosField.reference_to_field || '_id';\n\n objectName = referenceTo.objectName\n valueFieldKey = referenceTo && referenceTo.valueField?.name || '_id' ;\n labelFieldKey = referenceTo && referenceTo.labelField?.name || 'name';\n let value = api.data[_steedosField.name] && api.data[_steedosField.name].ids;\n filters = [referenceToField, \"in\", value || []];\n }\n api.data = {\n query: '{options:' + objectName + '(filters: ' + JSON.stringify(filters) + '){label: ' + labelFieldKey + ',value: ' + valueFieldKey + '}}'\n }\n return api;\n "),
21278
- "trackExpression": "${" + steedosField.name + "}",
21279
- "cache": 3000
21280
- },
21382
+ className: (_e = steedosField.amis) === null || _e === void 0 ? void 0 : _e.className,
21383
+ source: source,
21281
21384
  }, _$1.pick(steedosField.amis || {}, ['className', 'inline', 'label', 'labelAlign', 'name', 'labelRemark', 'description', 'placeholder', 'staticClassName', 'staticLabelClassName', 'staticInputClassName', 'staticSchema']));
21282
21385
  schema.placeholder = "";
21283
21386
  if (hideLabel) {
@@ -21285,12 +21388,12 @@ var AmisSteedosField = function (props) { return __awaiter(void 0, void 0, void
21285
21388
  }
21286
21389
  return [2 /*return*/, schema];
21287
21390
  case 2:
21288
- if (!fStatic) return [3 /*break*/, 12];
21391
+ if (!fStatic) return [3 /*break*/, 13];
21289
21392
  if (!props.data.hasOwnProperty("_display")) return [3 /*break*/, 4];
21290
21393
  return [4 /*yield*/, index.convertSFieldToAmisField(steedosField, readonly, ctx)];
21291
21394
  case 3:
21292
21395
  // 有_display时保持原来的逻辑不变,不走以下新的逻辑,审批王中会特意传入_display以跳过后面新加的代码
21293
- return [2 /*return*/, _d.sent()];
21396
+ return [2 /*return*/, _f.sent()];
21294
21397
  case 4:
21295
21398
  schema = Object.assign({}, steedosField, {
21296
21399
  type: getAmisStaticFieldType(steedosField.type, steedosField.data_type, steedosField),
@@ -21303,27 +21406,33 @@ var AmisSteedosField = function (props) { return __awaiter(void 0, void 0, void
21303
21406
  timeFormat: 'HH:mm',
21304
21407
  format: '1970-01-01THH:mm:00.000[Z]',
21305
21408
  });
21306
- return [3 /*break*/, 11];
21409
+ return [3 /*break*/, 12];
21307
21410
  case 5:
21308
21411
  if (!(steedosField.type === "percent")) return [3 /*break*/, 6];
21309
21412
  Object.assign(schema, {
21310
21413
  "percent": steedosField.scale ? steedosField.scale : true
21311
21414
  });
21312
- return [3 /*break*/, 11];
21415
+ return [3 /*break*/, 12];
21313
21416
  case 6:
21314
21417
  if (!(steedosField.type === "password")) return [3 /*break*/, 7];
21315
21418
  Object.assign(schema, {
21316
21419
  "revealPassword": false //没生效,需要用样式隐藏
21317
21420
  });
21318
- return [3 /*break*/, 11];
21421
+ return [3 /*break*/, 12];
21319
21422
  case 7:
21320
21423
  if (!(steedosField.type === "select")) return [3 /*break*/, 8];
21321
21424
  Object.assign(schema, {
21322
21425
  "placeholder": ""
21323
21426
  });
21324
- return [3 /*break*/, 11];
21427
+ return [3 /*break*/, 12];
21325
21428
  case 8:
21326
- if (!(steedosField.type === "image")) return [3 /*break*/, 9];
21429
+ if (!(steedosField.type === "color")) return [3 /*break*/, 9];
21430
+ Object.assign(schema, {
21431
+ "defaultColor": null
21432
+ });
21433
+ return [3 /*break*/, 12];
21434
+ case 9:
21435
+ if (!(steedosField.type === "image")) return [3 /*break*/, 10];
21327
21436
  Object.assign(schema, {
21328
21437
  enlargeAble: true,
21329
21438
  showToolbar: true,
@@ -21354,21 +21463,21 @@ var AmisSteedosField = function (props) { return __awaiter(void 0, void 0, void
21354
21463
  return value;
21355
21464
  }
21356
21465
  });
21357
- return [3 /*break*/, 11];
21358
- case 9:
21359
- if (!(steedosField.type === "file")) return [3 /*break*/, 11];
21466
+ return [3 /*break*/, 12];
21467
+ case 10:
21468
+ if (!(steedosField.type === "file")) return [3 /*break*/, 12];
21360
21469
  return [4 /*yield*/, index.convertSFieldToAmisField(steedosField, readonly, ctx)];
21361
- case 10:
21470
+ case 11:
21362
21471
  // 附件static模式先保持原来的逻辑,依赖_display,审批王中相关功能在creator中
21363
21472
  // convertSFieldToAmisField中会合并steedosField.amis,所以也不需要再次合并steedosField.amis,直接return就好
21364
- return [2 /*return*/, _d.sent()];
21365
- case 11:
21473
+ return [2 /*return*/, _f.sent()];
21474
+ case 12:
21366
21475
  Object.assign(schema, steedosField.amis || {});
21367
21476
  if (hideLabel) {
21368
21477
  delete schema.label;
21369
21478
  }
21370
21479
  return [2 /*return*/, schema];
21371
- case 12:
21480
+ case 13:
21372
21481
  fieldAmis = steedosField.amis || {};
21373
21482
  if (!props.data.hasOwnProperty("_display")) {
21374
21483
  // 有_display时保持原来的逻辑不变,不走以下新的逻辑,审批王中会特意传入_display以跳过后面新加的代码
@@ -21426,19 +21535,19 @@ var AmisSteedosField = function (props) { return __awaiter(void 0, void 0, void
21426
21535
  }
21427
21536
  }
21428
21537
  return [4 /*yield*/, index.convertSFieldToAmisField(steedosField, readonly, ctx)];
21429
- case 13:
21430
- schema = _d.sent();
21538
+ case 14:
21539
+ schema = _f.sent();
21431
21540
  if (hideLabel) {
21432
21541
  delete schema.label;
21433
21542
  }
21434
21543
  // console.log(`AmisSteedosField return schema`, schema)
21435
21544
  return [2 /*return*/, schema];
21436
- case 14: return [3 /*break*/, 16];
21437
- case 15:
21438
- error_1 = _d.sent();
21545
+ case 15: return [3 /*break*/, 17];
21546
+ case 16:
21547
+ error_1 = _f.sent();
21439
21548
  console.log("error", error_1);
21440
- return [3 /*break*/, 16];
21441
- case 16: return [2 /*return*/, null];
21549
+ return [3 /*break*/, 17];
21550
+ case 17: return [2 /*return*/, null];
21442
21551
  }
21443
21552
  });
21444
21553
  }); };
@@ -21681,7 +21790,7 @@ var AmisInputTable = function (props) { return __awaiter(void 0, void 0, void 0,
21681
21790
  return __generator(this, function (_a) {
21682
21791
  switch (_a.label) {
21683
21792
  case 0:
21684
- props.$schema, props.fields, props.name, props.id, props.data, props.columns, props.amis, props.className, props.tableClassName, props.footerToolbar, props.inlineEditMode;
21793
+ props.$schema, props.fields, props.name, props.id, props.data, props.columns, props.amis, props.className, props.tableClassName, props.footerToolbar, props.inlineEditMode, props.strictMode;
21685
21794
  return [4 /*yield*/, getAmisInputTableSchema(props)];
21686
21795
  case 1:
21687
21796
  amisSchema = _a.sent();