@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.
@@ -4179,7 +4179,7 @@ var config = {
4179
4179
  * @Author: baozhoutao@steedos.com
4180
4180
  * @Date: 2022-10-28 14:52:55
4181
4181
  * @LastEditors: liaodaxue
4182
- * @LastEditTime: 2023-07-28 16:16:29
4182
+ * @LastEditTime: 2023-12-14 12:01:22
4183
4183
  * @Description:
4184
4184
  */
4185
4185
 
@@ -4196,6 +4196,7 @@ const AmisFormInputs$1 = [
4196
4196
  'percent',
4197
4197
  'password',
4198
4198
  'url',
4199
+ "color",
4199
4200
  'email'
4200
4201
  ];
4201
4202
 
@@ -4208,7 +4209,7 @@ function getAmisStaticFieldType$1(type, readonly, options){
4208
4209
  }
4209
4210
  return type;
4210
4211
  }
4211
- if(_$1.includes(['text','image'], type)){
4212
+ if(_$1.includes(['text','image','color'], type)){
4212
4213
  if('text' === type && options && options.amis && options.amis.tpl){
4213
4214
  return 'static';
4214
4215
  }
@@ -4342,6 +4343,7 @@ var frontend_form_please_select$1 = "Please select";
4342
4343
  var frontend_form_confirm$1 = "Confirm";
4343
4344
  var frontend_form_delete$1 = "Delete";
4344
4345
  var frontend_form_view$1 = "view";
4346
+ var frontend_form_details$1 = "details";
4345
4347
  var frontend_delete_confirm_text$1 = "Are you sure you want to delete this item?";
4346
4348
  var frontend_delete_many_selected_required$1 = "Please select the item to be deleted";
4347
4349
  var frontend_delete_many_confirm_text$1 = "Are you sure you want to delete?";
@@ -4428,6 +4430,7 @@ var en_us = {
4428
4430
  frontend_form_confirm: frontend_form_confirm$1,
4429
4431
  frontend_form_delete: frontend_form_delete$1,
4430
4432
  frontend_form_view: frontend_form_view$1,
4433
+ frontend_form_details: frontend_form_details$1,
4431
4434
  frontend_delete_confirm_text: frontend_delete_confirm_text$1,
4432
4435
  frontend_delete_many_selected_required: frontend_delete_many_selected_required$1,
4433
4436
  frontend_delete_many_confirm_text: frontend_delete_many_confirm_text$1,
@@ -4515,6 +4518,7 @@ var frontend_form_please_select = "请选择";
4515
4518
  var frontend_form_confirm = "确认";
4516
4519
  var frontend_form_delete = "删除";
4517
4520
  var frontend_form_view = "查看";
4521
+ var frontend_form_details = "详情";
4518
4522
  var frontend_delete_confirm_text = "确定要删除此项目?";
4519
4523
  var frontend_delete_many_selected_required = "请选择要删除的项";
4520
4524
  var frontend_delete_many_confirm_text = "确定要删除吗?";
@@ -4602,6 +4606,7 @@ var zh_cn = {
4602
4606
  frontend_form_confirm: frontend_form_confirm,
4603
4607
  frontend_form_delete: frontend_form_delete,
4604
4608
  frontend_form_view: frontend_form_view,
4609
+ frontend_form_details: frontend_form_details,
4605
4610
  frontend_delete_confirm_text: frontend_delete_confirm_text,
4606
4611
  frontend_delete_many_selected_required: frontend_delete_many_selected_required,
4607
4612
  frontend_delete_many_confirm_text: frontend_delete_many_confirm_text,
@@ -5276,6 +5281,11 @@ async function getTableColumns$1(fields, options){
5276
5281
  options: field.type === 'html' ? {html: true} : null
5277
5282
  // toggled: true
5278
5283
  }, field.amis, {name: field.name});
5284
+
5285
+ if(field.type === 'color'){
5286
+ columnItem.type = 'color';
5287
+ columnItem.defaultColor = null;
5288
+ }
5279
5289
  }
5280
5290
  }
5281
5291
  if(columnItem){
@@ -7963,8 +7973,8 @@ const getSchema$2 = (uiSchema) => {
7963
7973
  /*
7964
7974
  * @Author: baozhoutao@steedos.com
7965
7975
  * @Date: 2022-11-07 17:00:38
7966
- * @LastEditors: baozhoutao@steedos.com
7967
- * @LastEditTime: 2023-08-24 16:44:42
7976
+ * @LastEditors: liaodaxue
7977
+ * @LastEditTime: 2023-12-13 10:09:05
7968
7978
  * @Description:
7969
7979
  */
7970
7980
 
@@ -7975,7 +7985,7 @@ const getSchema$1 = (uiSchema)=>{
7975
7985
  "body": [
7976
7986
  {
7977
7987
  "type": "button",
7978
- "label": instance.t('frontend_form_view'),
7988
+ "label": instance.t('frontend_form_details'),
7979
7989
  "className": "border-none",
7980
7990
  "onEvent": {
7981
7991
  "click": {
@@ -14656,6 +14666,16 @@ async function convertSFieldToAmisField(field, readonly, ctx) {
14656
14666
  }
14657
14667
  }
14658
14668
 
14669
+ break;
14670
+ case 'color':
14671
+ convertData = {
14672
+ type: getAmisStaticFieldType$1('color', readonly),
14673
+ name: field.name,
14674
+ label: field.label
14675
+ };
14676
+ if(readonly){
14677
+ convertData.defaultColor = null;
14678
+ }
14659
14679
  break;
14660
14680
  case 'boolean':
14661
14681
  convertData = {
@@ -15510,7 +15530,7 @@ async function getFormBody(permissionFields, formFields, ctx){
15510
15530
  * @Author: 殷亮辉 yinlianghui@hotoa.com
15511
15531
  * @Date: 2023-11-15 09:50:22
15512
15532
  * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
15513
- * @LastEditTime: 2023-12-12 17:13:37
15533
+ * @LastEditTime: 2023-12-16 16:39:49
15514
15534
  */
15515
15535
 
15516
15536
  /**
@@ -15606,24 +15626,24 @@ async function getInputTableColumns(props) {
15606
15626
  function getFormPagination(props) {
15607
15627
  let onPageChangeScript = `
15608
15628
  let scope = event.context.scoped;
15609
- let paginationServiceId = event.data.paginationServiceId;
15610
- let wrapperServiceId = event.data.wrapperServiceId;
15611
- let formId = event.data.formId;
15612
- let fieldValue = event.data.changedItems;//这里不可以_.cloneDeep,因为翻页form中用的是event.data.changedItems,直接变更其值即可改变表单中的值
15629
+ let __paginationServiceId = event.data.__paginationServiceId;
15630
+ let __wrapperServiceId = event.data.__wrapperServiceId;
15631
+ let __formId = event.data.__formId;
15632
+ let fieldValue = event.data.__changedItems;//这里不可以_.cloneDeep,因为翻页form中用的是event.data.changedItems,直接变更其值即可改变表单中的值
15613
15633
  let pageChangeDirection = context.props.pageChangeDirection;
15614
- let currentPage = event.data.page;
15634
+ let currentPage = event.data.__page;
15615
15635
  let currentIndex = event.data.index;
15616
15636
 
15617
15637
  // 翻页到下一页之前需要先把当前页改动的内容保存到中间变量changedItems中
15618
- let currentFormValues = scope.getComponentById(formId).getValues();
15638
+ let currentFormValues = scope.getComponentById(__formId).getValues();
15619
15639
  fieldValue[currentIndex] = currentFormValues;
15620
15640
  // // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
15621
15641
  // doAction({
15622
- // "componentId": wrapperServiceId,
15642
+ // "componentId": __wrapperServiceId,
15623
15643
  // "actionType": "setValue",
15624
15644
  // "args": {
15625
15645
  // "value": {
15626
- // "changedItems": fieldValue
15646
+ // "__changedItems": fieldValue
15627
15647
  // }
15628
15648
  // }
15629
15649
  // });
@@ -15646,13 +15666,13 @@ function getFormPagination(props) {
15646
15666
  targetPage = currentPage - 1;
15647
15667
  }
15648
15668
  let targetIndex = targetPage - 1;//input-table组件行索引,从0开始的索引
15649
- // let targetFormData = changedItems[targetIndex];
15669
+ // let targetFormData = __changedItems[targetIndex];
15650
15670
  doAction({
15651
15671
  "actionType": "setValue",
15652
- "componentId": paginationServiceId,
15672
+ "componentId": __paginationServiceId,
15653
15673
  "args": {
15654
15674
  "value": {
15655
- "page": targetPage,
15675
+ "__page": targetPage,
15656
15676
  "index": targetIndex
15657
15677
  }
15658
15678
  }
@@ -15660,7 +15680,7 @@ function getFormPagination(props) {
15660
15680
  // 这里不用进一步把表单内容setValue到form中,是因为编辑表单中schemaApi监听了行索引index的变化,其值变化时会重新build整个form
15661
15681
  // doAction({
15662
15682
  // "actionType": "setValue",
15663
- // "componentId": formId,
15683
+ // "componentId": __formId,
15664
15684
  // "args": {
15665
15685
  // "value": targetFormData
15666
15686
  // },
@@ -15677,7 +15697,7 @@ function getFormPagination(props) {
15677
15697
  "icon": `fa fa-angle-left`,
15678
15698
  "level": "link",
15679
15699
  "pageChangeDirection": "prev",
15680
- "disabledOn": "${page <= 1}",
15700
+ "disabledOn": "${__page <= 1}",
15681
15701
  "size": "sm",
15682
15702
  "onEvent": {
15683
15703
  "click": {
@@ -15692,7 +15712,7 @@ function getFormPagination(props) {
15692
15712
  },
15693
15713
  {
15694
15714
  "type": "tpl",
15695
- "tpl": "${page}/${total}"
15715
+ "tpl": "${__page}/${__total}"
15696
15716
  },
15697
15717
  {
15698
15718
  "type": "button",
@@ -15700,7 +15720,7 @@ function getFormPagination(props) {
15700
15720
  "icon": `fa fa-angle-right`,
15701
15721
  "level": "link",
15702
15722
  "pageChangeDirection": "next",
15703
- "disabledOn": "${page >= total}",
15723
+ "disabledOn": "${__page >= __total}",
15704
15724
  "size": "sm",
15705
15725
  "onEvent": {
15706
15726
  "click": {
@@ -15721,10 +15741,23 @@ function getFormPagination(props) {
15721
15741
  * 传入formSchema输出带翻页容器的wrapper
15722
15742
  * @param {*} props input-table组件props
15723
15743
  * @param {*} form formSchema
15744
+ * @param {*} mode edit/readonly
15724
15745
  * @returns 带翻页容器的wrapper
15725
15746
  */
15726
- function getFormPaginationWrapper(props, form) {
15747
+ function getFormPaginationWrapper(props, form, mode) {
15727
15748
  let serviceId = `service_popup_pagination_wrapper__${props.id}`;
15749
+ // 这里加__super前缀是因为__parentForm变量(即主表单)中可能会正好有名为index的字段
15750
+ // 比如“对象字段”对象options字段是一个子表字段,但是主表(即“对象字段”对象)中正好有一个名为index的字段
15751
+ // 只读的时候不可以走中间变量__changedItems,比如工作流规则详细页面修改了子表字段”时间触发器“值后,在只读界面点击查看按钮弹出的表单中__changedItems值是修改前的值
15752
+ let formValues = mode === "readonly" ? `\${${props.name}[__super.index]}` : "${__changedItems[__super.index]}";
15753
+ // 这时用__readonlyItemsLength是因为`\${${props.name}.length}`拿不到值
15754
+ let totalValue = mode === "readonly" ? "${__readonlyItemsLength}" : "${__changedItems.length}";
15755
+ let innerForm = Object.assign({}, form, {
15756
+ "data": {
15757
+ // "&": "${__changedItems[__super.index]}"
15758
+ "&": formValues,
15759
+ }
15760
+ });
15728
15761
  let formBody = [
15729
15762
  {
15730
15763
  "type": "wrapper",
@@ -15734,14 +15767,15 @@ function getFormPaginationWrapper(props, form) {
15734
15767
  getFormPagination(props)
15735
15768
  ]
15736
15769
  },
15737
- // form
15738
- Object.assign({}, form, {
15739
- "canAccessSuperData": false,
15770
+ {
15771
+ "type": "service",
15772
+ "body": [
15773
+ innerForm
15774
+ ],
15740
15775
  "data": {
15741
- // "&": `\${${props.name}[index]}`,
15742
- "&": "${changedItems[index]}"
15776
+ "&": "${__parentForm}"
15743
15777
  }
15744
- })
15778
+ }
15745
15779
  ];
15746
15780
  let onServiceInitedScript = `
15747
15781
  // 以下脚本在inlineEditMode模式时才有必要执行(不过执行了也没有坏处,纯粹是没必要),是为了解决:
@@ -15753,13 +15787,13 @@ function getFormPaginationWrapper(props, form) {
15753
15787
  return;
15754
15788
  }
15755
15789
  let scope = event.context.scoped;
15756
- let wrapperServiceId = event.data.wrapperServiceId;
15757
- let wrapperService = scope.getComponentById(wrapperServiceId);
15790
+ let __wrapperServiceId = event.data.__wrapperServiceId;
15791
+ let wrapperService = scope.getComponentById(__wrapperServiceId);
15758
15792
  let wrapperServiceData = wrapperService.getData();
15759
15793
  let lastestFieldValue = wrapperServiceData["${props.name}"];//这里不可以用event.data["${props.name}"]因为amis input talbe有一层单独的作用域,其值会延迟一拍
15760
- //不可以直接像event.data.changedItems = originalFieldValue; 这样整个赋值,否则作用域会断
15761
- event.data.changedItems.forEach(function(n,i){
15762
- event.data.changedItems[i] = lastestFieldValue[i];
15794
+ //不可以直接像event.data.__changedItems = originalFieldValue; 这样整个赋值,否则作用域会断
15795
+ event.data.__changedItems.forEach(function(n,i){
15796
+ event.data.__changedItems[i] = lastestFieldValue[i];
15763
15797
  });
15764
15798
  `;
15765
15799
  let schema = {
@@ -15782,11 +15816,11 @@ function getFormPaginationWrapper(props, form) {
15782
15816
  },
15783
15817
  // "body": formBody,
15784
15818
  "data": {
15785
- "page": "${index + 1}",
15786
- // "total": `\${${props.name}.length}`,
15787
- "total": "${changedItems.length}",
15788
- "paginationServiceId": serviceId,
15789
- "formId": form.id
15819
+ "__page": "${index + 1}",
15820
+ // "__total": `\${${props.name}.length}`,
15821
+ "__total": totalValue,
15822
+ "__paginationServiceId": serviceId,
15823
+ "__formId": form.id
15790
15824
  },
15791
15825
  "onEvent": {
15792
15826
  "init": {
@@ -15818,13 +15852,17 @@ async function getForm(props, mode = "edit") {
15818
15852
  "mode": "normal",
15819
15853
  "body": body,
15820
15854
  "wrapWithPanel": false,
15855
+ "canAccessSuperData": false,
15821
15856
  "className": "steedos-object-form steedos-amis-form"
15822
15857
  };
15823
15858
  if (mode === "edit") {
15824
15859
  let onEditItemSubmitScript = `
15825
15860
  // let fieldValue = _.cloneDeep(event.data["${props.name}"]);
15826
- let fieldValue = event.data.changedItems;//这里不可以_.cloneDeep,因为翻页form中用的是event.data.changedItems,直接变更其值即可改变表单中的值
15827
- fieldValue[event.data.index] = JSON.parse(JSON.stringify(event.data));
15861
+ let fieldValue = event.data.__changedItems;//这里不可以_.cloneDeep,因为翻页form中用的是event.data.changedItems,直接变更其值即可改变表单中的值
15862
+
15863
+ //这里加__super.__super前缀是因为__parentForm变量(即主表单)中可能会正好有名为index的字段
15864
+ // 比如“对象字段”对象options字段是一个子表字段,但是主表(即“对象字段”对象)中正好有一个名为index的字段
15865
+ fieldValue[event.data.__super.__super.index] = JSON.parse(JSON.stringify(event.data));
15828
15866
  doAction({
15829
15867
  "componentId": "${props.id}",
15830
15868
  "actionType": "setValue",
@@ -15834,11 +15872,11 @@ async function getForm(props, mode = "edit") {
15834
15872
  });
15835
15873
  // // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
15836
15874
  // doAction({
15837
- // "componentId": event.data.wrapperServiceId,
15875
+ // "componentId": event.data.__wrapperServiceId,
15838
15876
  // "actionType": "setValue",
15839
15877
  // "args": {
15840
15878
  // "value": {
15841
- // "changedItems": fieldValue
15879
+ // "__changedItems": fieldValue
15842
15880
  // }
15843
15881
  // }
15844
15882
  // });
@@ -15870,10 +15908,10 @@ async function getForm(props, mode = "edit") {
15870
15908
  else if (mode === "new") {
15871
15909
  let onNewItemSubmitScript = `
15872
15910
  // let fieldValue = _.cloneDeep(event.data["${props.name}"]);
15873
- if(!event.data.changedItems){
15874
- event.data.changedItems = [];
15911
+ if(!event.data.__changedItems){
15912
+ event.data.__changedItems = [];
15875
15913
  }
15876
- let fieldValue = event.data.changedItems;
15914
+ let fieldValue = event.data.__changedItems;
15877
15915
  fieldValue.push(JSON.parse(JSON.stringify(event.data)));
15878
15916
  doAction({
15879
15917
  "componentId": "${props.id}",
@@ -15884,11 +15922,11 @@ async function getForm(props, mode = "edit") {
15884
15922
  });
15885
15923
  // // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
15886
15924
  // doAction({
15887
- // "componentId": event.data.wrapperServiceId,
15925
+ // "componentId": event.data.__wrapperServiceId,
15888
15926
  // "actionType": "setValue",
15889
15927
  // "args": {
15890
15928
  // "value": {
15891
- // "changedItems": fieldValue
15929
+ // "__changedItems": fieldValue
15892
15930
  // }
15893
15931
  // }
15894
15932
  // });
@@ -15918,7 +15956,7 @@ async function getForm(props, mode = "edit") {
15918
15956
  });
15919
15957
  }
15920
15958
  if (mode === "edit" || mode === "readonly") {
15921
- schema = getFormPaginationWrapper(props, schema);
15959
+ schema = getFormPaginationWrapper(props, schema, mode);
15922
15960
  }
15923
15961
  return schema;
15924
15962
  }
@@ -15957,21 +15995,21 @@ async function getButtonNew(props) {
15957
15995
  async function getButtonEdit(props, showAsInlineEditMode) {
15958
15996
  let onCancelScript = `
15959
15997
  let scope = event.context.scoped;
15960
- let wrapperServiceId = event.data.wrapperServiceId;
15961
- let wrapperService = scope.getComponentById(wrapperServiceId);
15998
+ let __wrapperServiceId = event.data.__wrapperServiceId;
15999
+ let wrapperService = scope.getComponentById(__wrapperServiceId);
15962
16000
  let wrapperServiceData = wrapperService.getData();
15963
16001
  let originalFieldValue = wrapperServiceData["${props.name}"];//这里不可以用event.data["${props.name}"]因为amis input talbe有一层单独的作用域,其值会延迟一拍
15964
- //不可以直接像event.data.changedItems = originalFieldValue; 这样整个赋值,否则作用域会断,造成无法还原
15965
- event.data.changedItems.forEach(function(n,i){
15966
- event.data.changedItems[i] = originalFieldValue[i];
16002
+ //不可以直接像event.data.__changedItems = originalFieldValue; 这样整个赋值,否则作用域会断,造成无法还原
16003
+ event.data.__changedItems.forEach(function(n,i){
16004
+ event.data.__changedItems[i] = originalFieldValue[i];
15967
16005
  });
15968
16006
  // 因为翻页form中用的是event.data.changedItems中的数据,所以像下面这样doAction setValue无法实现还原
15969
16007
  // doAction({
15970
- // "componentId": wrapperServiceId,
16008
+ // "componentId": __wrapperServiceId,
15971
16009
  // "actionType": "setValue",
15972
16010
  // "args": {
15973
16011
  // "value": {
15974
- // "changedItems": originalFieldValue
16012
+ // "__changedItems": originalFieldValue
15975
16013
  // }
15976
16014
  // }
15977
16015
  // });
@@ -16002,13 +16040,15 @@ async function getButtonEdit(props, showAsInlineEditMode) {
16002
16040
  // 这里必须加data数据映射,否则翻页功能中取changedItems值时会乱,比如翻页编辑后会把上一页中没改过的字段值带过去
16003
16041
  // 额外把华炎魔方主表记录ObjectForm中的字段值从record变量中映射到子表form中,因为子表lookup字段filtersFunction中可能依赖了主表记录中的字段值,比如“工作流规则”对象“时间触发器”字段中的“日期字段”字段
16004
16042
  // 额外把global、uiSchema也映射过去,有可能要用,后续需要用到其他变更可以这里加映射
16005
- "&": "${record || {}}",
16043
+ // "&": "${record || {}}",
16044
+ // 换成从__super来映射上级表单数据是因为对象列表视图界面中每行下拉菜单中的编辑按钮弹出的表单中的子表所在作用域中没有record变量
16045
+ // 映射到中间变量__parentForm而不是直接用&展开映射是为了避免表单中字段名与作用域中变量重名
16046
+ "__parentForm": "${__super.__super || {}}",
16006
16047
  "global": "${global}",
16007
16048
  "uiSchema": "${uiSchema}",
16008
- "grid": "${grid}",
16009
16049
  "index": "${index}",
16010
- "changedItems": "${changedItems}",
16011
- "wrapperServiceId": "${wrapperServiceId}"
16050
+ "__changedItems": "${__changedItems}",
16051
+ "__wrapperServiceId": "${__wrapperServiceId}"
16012
16052
  },
16013
16053
  "onEvent": {
16014
16054
  "cancel": {
@@ -16056,11 +16096,14 @@ async function getButtonView(props) {
16056
16096
  // 这里必须加data数据映射,否则翻页功能中取changedItems值时会乱,比如翻页编辑后会把上一页中没改过的字段值带过去
16057
16097
  // 额外把华炎魔方主表记录ObjectForm中的字段值从formData变量中映射到子表form中,因为子表lookup字段filtersFunction中可能依赖了主表记录中的字段值,比如“工作流规则”对象“时间触发器”字段中的“日期字段”字段
16058
16098
  // global、uiSchema等常用变量本来就在formData变量已经存在了,无需另外映射
16059
- "&": "${formData || {}}",
16060
- "grid": "${grid}",
16099
+ // "&": "${formData || {}}",
16100
+ // 换成从__super来映射上级表单数据是因为对象列表视图界面中每行下拉菜单中的编辑按钮弹出的表单中的子表所在作用域中没有formData变量
16101
+ // 映射到中间变量__parentForm而不是直接用&展开映射是为了避免表单中字段名与作用域中变量重名
16102
+ "__parentForm": "${__super.__super || {}}",
16061
16103
  "index": "${index}",
16062
- "changedItems": "${changedItems}",
16063
- "wrapperServiceId": "${wrapperServiceId}"
16104
+ "__changedItems": "${__changedItems}",
16105
+ "__wrapperServiceId": "${__wrapperServiceId}",
16106
+ "__readonlyItemsLength": `\${${props.name}.length}`
16064
16107
  }
16065
16108
  }
16066
16109
  }
@@ -16073,10 +16116,10 @@ async function getButtonView(props) {
16073
16116
  function getButtonDelete(props) {
16074
16117
  let onDeleteItemScript = `
16075
16118
  // let fieldValue = _.cloneDeep(event.data["${props.name}"]);
16076
- if(!event.data.changedItems){
16077
- event.data.changedItems = [];
16119
+ if(!event.data.__changedItems){
16120
+ event.data.__changedItems = [];
16078
16121
  }
16079
- let fieldValue = event.data.changedItems;
16122
+ let fieldValue = event.data.__changedItems;
16080
16123
  // fieldValue.push(JSON.parse(JSON.stringify(event.data)));
16081
16124
  fieldValue.splice(event.data.index, 1)
16082
16125
  doAction({
@@ -16088,11 +16131,11 @@ function getButtonDelete(props) {
16088
16131
  });
16089
16132
  // // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
16090
16133
  // doAction({
16091
- // "componentId": event.data.wrapperServiceId,
16134
+ // "componentId": event.data.__wrapperServiceId,
16092
16135
  // "actionType": "setValue",
16093
16136
  // "args": {
16094
16137
  // "value": {
16095
- // "changedItems": fieldValue
16138
+ // "__changedItems": fieldValue
16096
16139
  // }
16097
16140
  // }
16098
16141
  // });
@@ -16173,7 +16216,7 @@ const getAmisInputTableSchema = async (props) => {
16173
16216
  "id": props.id,
16174
16217
  "columns": await getInputTableColumns(props),
16175
16218
  // "needConfirm": false, //不可以配置为false,否则,单元格都是可编辑状态,且很多static类型无法正常显示,比如static-mapping
16176
- "strictMode": true,
16219
+ "strictMode": props.strictMode,
16177
16220
  "showTableAddBtn": false,
16178
16221
  "showFooterAddBtn": false,
16179
16222
  "className": props.tableClassName
@@ -16191,7 +16234,31 @@ const getAmisInputTableSchema = async (props) => {
16191
16234
  }
16192
16235
  let dataProviderInited = `
16193
16236
  // 单独维护一份中间变量changedItems,因为原变量在input-table组件有单独的作用域,翻页功能中无法维护此作用域中的行记录值
16194
- setData({ changedItems: _.cloneDeep(data["${props.name}"]) || []});
16237
+ setData({ __changedItems: _.cloneDeep(data["${props.name}"]) || []});
16238
+ `;
16239
+ let onInitScript = `
16240
+ // 上面dataProviderInited中setData有时不生效,没有成功给service组件设置__changedItems变量值
16241
+ // 比如设计字段布局界面中的设置分组功能就因为__changedItems变量值不存在而报错,应该是因为把steedos-input-table组件单独放到弹出窗口中会有这个问题
16242
+ // 所以额外在service init事件中手动设置一次__changedItems值
16243
+ let __wrapperServiceId = event.data.__wrapperServiceId;
16244
+ let fieldValue = _.cloneDeep(event.data["${props.name}"]) || [];
16245
+ doAction({
16246
+ "componentId": __wrapperServiceId,
16247
+ "actionType": "setValue",
16248
+ "args": {
16249
+ "value": {
16250
+ "__changedItems": fieldValue
16251
+ }
16252
+ }
16253
+ });
16254
+ // 下面的doAction好像不是必须的
16255
+ // doAction({
16256
+ // "componentId": "${props.id}",
16257
+ // "actionType": "setValue",
16258
+ // "args": {
16259
+ // "value": fieldValue
16260
+ // }
16261
+ // });
16195
16262
  `;
16196
16263
  let schema = {
16197
16264
  "type": "service",
@@ -16201,10 +16268,20 @@ const getAmisInputTableSchema = async (props) => {
16201
16268
  "className": props.className,
16202
16269
  "id": serviceId,
16203
16270
  "data": {
16204
- "wrapperServiceId": serviceId
16271
+ "__wrapperServiceId": serviceId
16205
16272
  },
16206
16273
  "dataProvider": {
16207
16274
  "inited": dataProviderInited
16275
+ },
16276
+ "onEvent": {
16277
+ "init": {
16278
+ "actions": [
16279
+ {
16280
+ "actionType": "custom",
16281
+ "script": onInitScript
16282
+ }
16283
+ ]
16284
+ }
16208
16285
  }
16209
16286
  };
16210
16287
  let footerToolbar = clone(props.footerToolbar || []); //这里不clone的话,会造成死循环,应该是因为props属性变更会让组件重新渲染
@@ -16219,9 +16296,20 @@ const getAmisInputTableSchema = async (props) => {
16219
16296
  "body": footerToolbar
16220
16297
  });
16221
16298
  }
16222
- if (props.amis) {
16223
- delete props.amis.id;
16224
- Object.assign(schema.body[0], props.amis);
16299
+ let amis = props["input-table"] || props.amis;//额外支持"input-table"代替amis属性,是因为在字段yml文件中用amis作为key不好理解
16300
+ if (amis) {
16301
+ // 支持配置amis属性重写或添加最终生成的input-table中任何属性。
16302
+ delete amis.id;//如果steedos-input-table组件配置了amis.id属性,会造成新建编辑行功能不生效
16303
+ Object.assign(schema.body[0], amis);
16304
+ }
16305
+ const isAnyFieldHasDependOn = (props.fields || []).find(function (item) {
16306
+ return item.depend_on;
16307
+ });
16308
+ if(isAnyFieldHasDependOn){
16309
+ // 有任意一个子字段有depend_on属性时,强制设置禁用静态模式
16310
+ Object.assign(schema.body[0], {
16311
+ strictMode: false
16312
+ });
16225
16313
  }
16226
16314
  // console.log("===schema===", schema);
16227
16315
  return schema;
@@ -21205,14 +21293,14 @@ function getAmisStaticFieldType(type, data_type, options) {
21205
21293
  return type;
21206
21294
  }
21207
21295
  var AmisSteedosField = function (props) { return __awaiter(void 0, void 0, void 0, function () {
21208
- var steedosField, field, _a, readonly, _b, ctx, config, fStatic, hideLabel, schema, schema, fieldAmis, schema, error_1;
21209
- var _c;
21210
- return __generator(this, function (_d) {
21211
- switch (_d.label) {
21296
+ var steedosField, field, _a, readonly, _b, ctx, config, fStatic, hideLabel, defaultSource, source, schema, schema, fieldAmis, schema, error_1;
21297
+ var _c, _d, _e;
21298
+ return __generator(this, function (_f) {
21299
+ switch (_f.label) {
21212
21300
  case 0:
21213
21301
  steedosField = null;
21214
21302
  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;
21215
- console.log("AmisSteedosField", props);
21303
+ // console.log(`AmisSteedosField`, props)
21216
21304
  // if($schema.config && isString($schema.config)){
21217
21305
  // $schema.config = JSON.parse($schema.config)
21218
21306
  // props.config = $schema.config
@@ -21232,24 +21320,39 @@ var AmisSteedosField = function (props) { return __awaiter(void 0, void 0, void
21232
21320
  // 字段配置为只读,强制走fStatic模式,加上_display判断是为了不影响历史代码,比如直接在ObjectForm中调用steedos-field组件
21233
21321
  fStatic = true;
21234
21322
  }
21235
- _d.label = 1;
21323
+ _f.label = 1;
21236
21324
  case 1:
21237
- _d.trys.push([1, 15, , 16]);
21325
+ _f.trys.push([1, 16, , 17]);
21238
21326
  if (!(fStatic && (steedosField.type === 'lookup' || steedosField.type === 'master_detail'))) return [3 /*break*/, 2];
21327
+ defaultSource = {
21328
+ "method": "post",
21329
+ "url": "${context.rootUrl}/graphql",
21330
+ "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 "),
21331
+ "trackExpression": "${" + steedosField.name + "}",
21332
+ "cache": 3000
21333
+ };
21334
+ if (!steedosField.reference_to) {
21335
+ // 兼容lookup字段未配置reference_to属性的情况,当普通下拉框字段用
21336
+ defaultSource = {
21337
+ "url": "${context.rootUrl}/api/v1/spaces/none",
21338
+ data: { $: "$$" },
21339
+ };
21340
+ if (steedosField.optionsFunction || steedosField._optionsFunction) {
21341
+ 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 ");
21342
+ }
21343
+ else if (steedosField.options) {
21344
+ 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 ");
21345
+ }
21346
+ }
21347
+ source = ((_c = steedosField.amis) === null || _c === void 0 ? void 0 : _c.source) || ((_d = steedosField.amis) === null || _d === void 0 ? void 0 : _d.autoComplete) || defaultSource;
21239
21348
  schema = Object.assign({}, {
21240
21349
  type: 'select',
21241
21350
  multiple: steedosField.multiple,
21242
21351
  name: steedosField.name,
21243
21352
  label: steedosField.label,
21244
21353
  static: true,
21245
- className: (_c = steedosField.amis) === null || _c === void 0 ? void 0 : _c.className,
21246
- source: {
21247
- "method": "post",
21248
- "url": "${context.rootUrl}/graphql",
21249
- "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 "),
21250
- "trackExpression": "${" + steedosField.name + "}",
21251
- "cache": 3000
21252
- },
21354
+ className: (_e = steedosField.amis) === null || _e === void 0 ? void 0 : _e.className,
21355
+ source: source,
21253
21356
  }, pick(steedosField.amis || {}, ['className', 'inline', 'label', 'labelAlign', 'name', 'labelRemark', 'description', 'placeholder', 'staticClassName', 'staticLabelClassName', 'staticInputClassName', 'staticSchema']));
21254
21357
  schema.placeholder = "";
21255
21358
  if (hideLabel) {
@@ -21257,12 +21360,12 @@ var AmisSteedosField = function (props) { return __awaiter(void 0, void 0, void
21257
21360
  }
21258
21361
  return [2 /*return*/, schema];
21259
21362
  case 2:
21260
- if (!fStatic) return [3 /*break*/, 12];
21363
+ if (!fStatic) return [3 /*break*/, 13];
21261
21364
  if (!props.data.hasOwnProperty("_display")) return [3 /*break*/, 4];
21262
21365
  return [4 /*yield*/, index.convertSFieldToAmisField(steedosField, readonly, ctx)];
21263
21366
  case 3:
21264
21367
  // 有_display时保持原来的逻辑不变,不走以下新的逻辑,审批王中会特意传入_display以跳过后面新加的代码
21265
- return [2 /*return*/, _d.sent()];
21368
+ return [2 /*return*/, _f.sent()];
21266
21369
  case 4:
21267
21370
  schema = Object.assign({}, steedosField, {
21268
21371
  type: getAmisStaticFieldType(steedosField.type, steedosField.data_type, steedosField),
@@ -21275,27 +21378,33 @@ var AmisSteedosField = function (props) { return __awaiter(void 0, void 0, void
21275
21378
  timeFormat: 'HH:mm',
21276
21379
  format: '1970-01-01THH:mm:00.000[Z]',
21277
21380
  });
21278
- return [3 /*break*/, 11];
21381
+ return [3 /*break*/, 12];
21279
21382
  case 5:
21280
21383
  if (!(steedosField.type === "percent")) return [3 /*break*/, 6];
21281
21384
  Object.assign(schema, {
21282
21385
  "percent": steedosField.scale ? steedosField.scale : true
21283
21386
  });
21284
- return [3 /*break*/, 11];
21387
+ return [3 /*break*/, 12];
21285
21388
  case 6:
21286
21389
  if (!(steedosField.type === "password")) return [3 /*break*/, 7];
21287
21390
  Object.assign(schema, {
21288
21391
  "revealPassword": false //没生效,需要用样式隐藏
21289
21392
  });
21290
- return [3 /*break*/, 11];
21393
+ return [3 /*break*/, 12];
21291
21394
  case 7:
21292
21395
  if (!(steedosField.type === "select")) return [3 /*break*/, 8];
21293
21396
  Object.assign(schema, {
21294
21397
  "placeholder": ""
21295
21398
  });
21296
- return [3 /*break*/, 11];
21399
+ return [3 /*break*/, 12];
21297
21400
  case 8:
21298
- if (!(steedosField.type === "image")) return [3 /*break*/, 9];
21401
+ if (!(steedosField.type === "color")) return [3 /*break*/, 9];
21402
+ Object.assign(schema, {
21403
+ "defaultColor": null
21404
+ });
21405
+ return [3 /*break*/, 12];
21406
+ case 9:
21407
+ if (!(steedosField.type === "image")) return [3 /*break*/, 10];
21299
21408
  Object.assign(schema, {
21300
21409
  enlargeAble: true,
21301
21410
  showToolbar: true,
@@ -21326,21 +21435,21 @@ var AmisSteedosField = function (props) { return __awaiter(void 0, void 0, void
21326
21435
  return value;
21327
21436
  }
21328
21437
  });
21329
- return [3 /*break*/, 11];
21330
- case 9:
21331
- if (!(steedosField.type === "file")) return [3 /*break*/, 11];
21438
+ return [3 /*break*/, 12];
21439
+ case 10:
21440
+ if (!(steedosField.type === "file")) return [3 /*break*/, 12];
21332
21441
  return [4 /*yield*/, index.convertSFieldToAmisField(steedosField, readonly, ctx)];
21333
- case 10:
21442
+ case 11:
21334
21443
  // 附件static模式先保持原来的逻辑,依赖_display,审批王中相关功能在creator中
21335
21444
  // convertSFieldToAmisField中会合并steedosField.amis,所以也不需要再次合并steedosField.amis,直接return就好
21336
- return [2 /*return*/, _d.sent()];
21337
- case 11:
21445
+ return [2 /*return*/, _f.sent()];
21446
+ case 12:
21338
21447
  Object.assign(schema, steedosField.amis || {});
21339
21448
  if (hideLabel) {
21340
21449
  delete schema.label;
21341
21450
  }
21342
21451
  return [2 /*return*/, schema];
21343
- case 12:
21452
+ case 13:
21344
21453
  fieldAmis = steedosField.amis || {};
21345
21454
  if (!props.data.hasOwnProperty("_display")) {
21346
21455
  // 有_display时保持原来的逻辑不变,不走以下新的逻辑,审批王中会特意传入_display以跳过后面新加的代码
@@ -21398,19 +21507,19 @@ var AmisSteedosField = function (props) { return __awaiter(void 0, void 0, void
21398
21507
  }
21399
21508
  }
21400
21509
  return [4 /*yield*/, index.convertSFieldToAmisField(steedosField, readonly, ctx)];
21401
- case 13:
21402
- schema = _d.sent();
21510
+ case 14:
21511
+ schema = _f.sent();
21403
21512
  if (hideLabel) {
21404
21513
  delete schema.label;
21405
21514
  }
21406
21515
  // console.log(`AmisSteedosField return schema`, schema)
21407
21516
  return [2 /*return*/, schema];
21408
- case 14: return [3 /*break*/, 16];
21409
- case 15:
21410
- error_1 = _d.sent();
21517
+ case 15: return [3 /*break*/, 17];
21518
+ case 16:
21519
+ error_1 = _f.sent();
21411
21520
  console.log("error", error_1);
21412
- return [3 /*break*/, 16];
21413
- case 16: return [2 /*return*/, null];
21521
+ return [3 /*break*/, 17];
21522
+ case 17: return [2 /*return*/, null];
21414
21523
  }
21415
21524
  });
21416
21525
  }); };
@@ -21653,7 +21762,7 @@ var AmisInputTable = function (props) { return __awaiter(void 0, void 0, void 0,
21653
21762
  return __generator(this, function (_a) {
21654
21763
  switch (_a.label) {
21655
21764
  case 0:
21656
- props.$schema, props.fields, props.name, props.id, props.data, props.columns, props.amis, props.className, props.tableClassName, props.footerToolbar, props.inlineEditMode;
21765
+ props.$schema, props.fields, props.name, props.id, props.data, props.columns, props.amis, props.className, props.tableClassName, props.footerToolbar, props.inlineEditMode, props.strictMode;
21657
21766
  return [4 /*yield*/, getAmisInputTableSchema(props)];
21658
21767
  case 1:
21659
21768
  amisSchema = _a.sent();