@steedos-widgets/amis-object 1.3.19 → 1.3.20
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/amis/AmisInputTable.d.ts +7 -1
- package/dist/amis-object.cjs.css +34 -16
- package/dist/amis-object.cjs.js +441 -67
- package/dist/amis-object.cjs.js.map +1 -1
- package/dist/amis-object.esm.css +34 -16
- package/dist/amis-object.esm.js +441 -67
- package/dist/amis-object.esm.js.map +1 -1
- package/dist/amis-object.umd.css +34 -16
- package/dist/amis-object.umd.js +55 -18
- package/dist/amis-object.umd.js.map +1 -1
- package/dist/assets.json +21 -21
- package/dist/meta.js +13 -1
- package/package.json +3 -3
package/dist/amis-object.esm.js
CHANGED
|
@@ -5148,6 +5148,9 @@ async function getTableColumns$1(fields, options){
|
|
|
5148
5148
|
const allowEdit = options.permissions?.allowEdit && !options.isLookup && options.enable_inline_edit != false;
|
|
5149
5149
|
|
|
5150
5150
|
for (const field of fields) {
|
|
5151
|
+
if(field.hidden || field.extra){
|
|
5152
|
+
continue;
|
|
5153
|
+
}
|
|
5151
5154
|
//增加quickEdit属性,实现快速编辑
|
|
5152
5155
|
const quickEditSchema = allowEdit ? await getQuickEditSchema(field, options) : allowEdit;
|
|
5153
5156
|
let className = "";
|
|
@@ -15507,7 +15510,7 @@ async function getFormBody(permissionFields, formFields, ctx){
|
|
|
15507
15510
|
* @Author: 殷亮辉 yinlianghui@hotoa.com
|
|
15508
15511
|
* @Date: 2023-11-15 09:50:22
|
|
15509
15512
|
* @LastEditors: 殷亮辉 yinlianghui@hotoa.com
|
|
15510
|
-
* @LastEditTime: 2023-12-
|
|
15513
|
+
* @LastEditTime: 2023-12-12 17:13:37
|
|
15511
15514
|
*/
|
|
15512
15515
|
|
|
15513
15516
|
/**
|
|
@@ -15521,52 +15524,71 @@ function getFormFields(props, mode = "edit") {
|
|
|
15521
15524
|
"name": item.name,
|
|
15522
15525
|
"config": item
|
|
15523
15526
|
};
|
|
15524
|
-
if(mode === "readonly"){
|
|
15527
|
+
if (mode === "readonly") {
|
|
15525
15528
|
formItem.static = true;
|
|
15526
15529
|
}
|
|
15527
15530
|
return formItem;
|
|
15528
15531
|
}) || [];
|
|
15529
15532
|
}
|
|
15530
15533
|
|
|
15534
|
+
function getInputTableCell(field, showAsInlineEditMode) {
|
|
15535
|
+
if (showAsInlineEditMode) {
|
|
15536
|
+
return {
|
|
15537
|
+
label: field.label,
|
|
15538
|
+
name: field.name,
|
|
15539
|
+
quickEdit: {
|
|
15540
|
+
"type": "steedos-field",
|
|
15541
|
+
"config": field,
|
|
15542
|
+
hideLabel: true
|
|
15543
|
+
}
|
|
15544
|
+
}
|
|
15545
|
+
}
|
|
15546
|
+
else {
|
|
15547
|
+
return {
|
|
15548
|
+
"type": "steedos-field",
|
|
15549
|
+
"config": field,
|
|
15550
|
+
"static": true,
|
|
15551
|
+
"readonly": true,
|
|
15552
|
+
label: field.label,
|
|
15553
|
+
name: field.name,
|
|
15554
|
+
hideLabel: true
|
|
15555
|
+
}
|
|
15556
|
+
}
|
|
15557
|
+
}
|
|
15558
|
+
|
|
15531
15559
|
/**
|
|
15532
15560
|
* @param {*} props
|
|
15533
15561
|
* @param {*} mode edit/new/readonly
|
|
15534
15562
|
*/
|
|
15535
15563
|
async function getInputTableColumns(props) {
|
|
15536
15564
|
let columns = props.columns || [];
|
|
15565
|
+
let inlineEditMode = props.inlineEditMode;
|
|
15566
|
+
let showAsInlineEditMode = inlineEditMode && props.editable;
|
|
15537
15567
|
// 实测过,直接不生成对应的隐藏column并不会对input-table值造成丢失问题,隐藏的列字段值能正常维护
|
|
15538
15568
|
let fields = props.fields;
|
|
15539
|
-
if(columns && columns.length){
|
|
15540
|
-
return columns.map(function(column){
|
|
15569
|
+
if (columns && columns.length) {
|
|
15570
|
+
return columns.map(function (column) {
|
|
15541
15571
|
let field, extendColumnProps = {};
|
|
15542
|
-
if(typeof column === "string"){
|
|
15572
|
+
if (typeof column === "string") {
|
|
15543
15573
|
// 如果字符串,则取出要显示的列配置
|
|
15544
|
-
field = fields.find(function(fieldItem){
|
|
15574
|
+
field = fields.find(function (fieldItem) {
|
|
15545
15575
|
return fieldItem.name === column;
|
|
15546
15576
|
});
|
|
15547
15577
|
}
|
|
15548
15578
|
else {
|
|
15549
15579
|
// 如果是对象,则合并到steedos-field的config.amis属性中,steedos组件会把config.amis属性混合到最终生成的input-table column
|
|
15550
|
-
field = fields.find(function(fieldItem){
|
|
15580
|
+
field = fields.find(function (fieldItem) {
|
|
15551
15581
|
return fieldItem.name === column.name;
|
|
15552
15582
|
});
|
|
15553
|
-
if(field){
|
|
15583
|
+
if (field) {
|
|
15554
15584
|
// field.amis = Object.assign({}, field.amis, column);
|
|
15555
15585
|
// 如果把column合并到field.amis,column的label/width等属性不会生效,只能放外层合并
|
|
15556
15586
|
extendColumnProps = column;
|
|
15557
15587
|
}
|
|
15558
15588
|
}
|
|
15559
|
-
if(field){
|
|
15560
|
-
|
|
15561
|
-
|
|
15562
|
-
"config": field,
|
|
15563
|
-
"static": true,
|
|
15564
|
-
"readonly": true,
|
|
15565
|
-
label: field.label,
|
|
15566
|
-
name: field.name,
|
|
15567
|
-
hideLabel: true,
|
|
15568
|
-
...extendColumnProps
|
|
15569
|
-
}
|
|
15589
|
+
if (field) {
|
|
15590
|
+
let tableCell = getInputTableCell(field, showAsInlineEditMode);
|
|
15591
|
+
return Object.assign({}, tableCell, extendColumnProps);
|
|
15570
15592
|
}
|
|
15571
15593
|
else {
|
|
15572
15594
|
return column;
|
|
@@ -15574,20 +15596,212 @@ async function getInputTableColumns(props) {
|
|
|
15574
15596
|
});
|
|
15575
15597
|
}
|
|
15576
15598
|
else {
|
|
15577
|
-
return fields.map(function(field){
|
|
15578
|
-
|
|
15579
|
-
|
|
15580
|
-
"config": field,
|
|
15581
|
-
"static": true,
|
|
15582
|
-
"readonly": true,
|
|
15583
|
-
label: field.label,
|
|
15584
|
-
name: field.name,
|
|
15585
|
-
hideLabel: true
|
|
15586
|
-
}
|
|
15599
|
+
return fields.map(function (field) {
|
|
15600
|
+
let tableCell = getInputTableCell(field, showAsInlineEditMode);
|
|
15601
|
+
return tableCell;
|
|
15587
15602
|
}) || [];
|
|
15588
15603
|
}
|
|
15589
15604
|
}
|
|
15590
15605
|
|
|
15606
|
+
function getFormPagination(props) {
|
|
15607
|
+
let onPageChangeScript = `
|
|
15608
|
+
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,直接变更其值即可改变表单中的值
|
|
15613
|
+
let pageChangeDirection = context.props.pageChangeDirection;
|
|
15614
|
+
let currentPage = event.data.page;
|
|
15615
|
+
let currentIndex = event.data.index;
|
|
15616
|
+
|
|
15617
|
+
// 翻页到下一页之前需要先把当前页改动的内容保存到中间变量changedItems中
|
|
15618
|
+
let currentFormValues = scope.getComponentById(formId).getValues();
|
|
15619
|
+
fieldValue[currentIndex] = currentFormValues;
|
|
15620
|
+
// // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
|
|
15621
|
+
// doAction({
|
|
15622
|
+
// "componentId": wrapperServiceId,
|
|
15623
|
+
// "actionType": "setValue",
|
|
15624
|
+
// "args": {
|
|
15625
|
+
// "value": {
|
|
15626
|
+
// "changedItems": fieldValue
|
|
15627
|
+
// }
|
|
15628
|
+
// }
|
|
15629
|
+
// });
|
|
15630
|
+
// 如果翻页到下一页前需要同时把改动的内容保存到最终正式的表单字段中,需要额外给正式表单字段执行一次setValue
|
|
15631
|
+
// 但是同时保存到正式表单字段中会造成翻页后点击取消无法取消翻页之前的改动内容
|
|
15632
|
+
// doAction({
|
|
15633
|
+
// "componentId": "${props.id}",
|
|
15634
|
+
// "actionType": "setValue",
|
|
15635
|
+
// "args": {
|
|
15636
|
+
// "value": fieldValue
|
|
15637
|
+
// }
|
|
15638
|
+
// });
|
|
15639
|
+
|
|
15640
|
+
// 以下是翻页逻辑,翻到下一页并把下一页内容显示到表单上
|
|
15641
|
+
let targetPage;
|
|
15642
|
+
if(pageChangeDirection === "next"){
|
|
15643
|
+
targetPage = currentPage + 1;
|
|
15644
|
+
}
|
|
15645
|
+
else{
|
|
15646
|
+
targetPage = currentPage - 1;
|
|
15647
|
+
}
|
|
15648
|
+
let targetIndex = targetPage - 1;//input-table组件行索引,从0开始的索引
|
|
15649
|
+
// let targetFormData = changedItems[targetIndex];
|
|
15650
|
+
doAction({
|
|
15651
|
+
"actionType": "setValue",
|
|
15652
|
+
"componentId": paginationServiceId,
|
|
15653
|
+
"args": {
|
|
15654
|
+
"value": {
|
|
15655
|
+
"page": targetPage,
|
|
15656
|
+
"index": targetIndex
|
|
15657
|
+
}
|
|
15658
|
+
}
|
|
15659
|
+
});
|
|
15660
|
+
// 这里不用进一步把表单内容setValue到form中,是因为编辑表单中schemaApi监听了行索引index的变化,其值变化时会重新build整个form
|
|
15661
|
+
// doAction({
|
|
15662
|
+
// "actionType": "setValue",
|
|
15663
|
+
// "componentId": formId,
|
|
15664
|
+
// "args": {
|
|
15665
|
+
// "value": targetFormData
|
|
15666
|
+
// },
|
|
15667
|
+
// "dataMergeMode": "override"// amis 3.2不支持override模式,高版本才支持
|
|
15668
|
+
// });
|
|
15669
|
+
`;
|
|
15670
|
+
return {
|
|
15671
|
+
"type": "wrapper",
|
|
15672
|
+
"className": "py-2",
|
|
15673
|
+
"body": [
|
|
15674
|
+
{
|
|
15675
|
+
"type": "button",
|
|
15676
|
+
"label": "",
|
|
15677
|
+
"icon": `fa fa-angle-left`,
|
|
15678
|
+
"level": "link",
|
|
15679
|
+
"pageChangeDirection": "prev",
|
|
15680
|
+
"disabledOn": "${page <= 1}",
|
|
15681
|
+
"size": "sm",
|
|
15682
|
+
"onEvent": {
|
|
15683
|
+
"click": {
|
|
15684
|
+
"actions": [
|
|
15685
|
+
{
|
|
15686
|
+
"actionType": "custom",
|
|
15687
|
+
"script": onPageChangeScript
|
|
15688
|
+
}
|
|
15689
|
+
]
|
|
15690
|
+
}
|
|
15691
|
+
}
|
|
15692
|
+
},
|
|
15693
|
+
{
|
|
15694
|
+
"type": "tpl",
|
|
15695
|
+
"tpl": "${page}/${total}"
|
|
15696
|
+
},
|
|
15697
|
+
{
|
|
15698
|
+
"type": "button",
|
|
15699
|
+
"label": "",
|
|
15700
|
+
"icon": `fa fa-angle-right`,
|
|
15701
|
+
"level": "link",
|
|
15702
|
+
"pageChangeDirection": "next",
|
|
15703
|
+
"disabledOn": "${page >= total}",
|
|
15704
|
+
"size": "sm",
|
|
15705
|
+
"onEvent": {
|
|
15706
|
+
"click": {
|
|
15707
|
+
"actions": [
|
|
15708
|
+
{
|
|
15709
|
+
"actionType": "custom",
|
|
15710
|
+
"script": onPageChangeScript
|
|
15711
|
+
}
|
|
15712
|
+
]
|
|
15713
|
+
}
|
|
15714
|
+
}
|
|
15715
|
+
}
|
|
15716
|
+
]
|
|
15717
|
+
}
|
|
15718
|
+
}
|
|
15719
|
+
|
|
15720
|
+
/**
|
|
15721
|
+
* 传入formSchema输出带翻页容器的wrapper
|
|
15722
|
+
* @param {*} props input-table组件props
|
|
15723
|
+
* @param {*} form formSchema
|
|
15724
|
+
* @returns 带翻页容器的wrapper
|
|
15725
|
+
*/
|
|
15726
|
+
function getFormPaginationWrapper(props, form) {
|
|
15727
|
+
let serviceId = `service_popup_pagination_wrapper__${props.id}`;
|
|
15728
|
+
let formBody = [
|
|
15729
|
+
{
|
|
15730
|
+
"type": "wrapper",
|
|
15731
|
+
"size": "none",
|
|
15732
|
+
"className": "flex justify-end border-y border-gray-200 -mx-6 shadow-inner sticky top-0 right-0 left-0 z-20 bg-white mb-4",
|
|
15733
|
+
"body": [
|
|
15734
|
+
getFormPagination(props)
|
|
15735
|
+
]
|
|
15736
|
+
},
|
|
15737
|
+
// form
|
|
15738
|
+
Object.assign({}, form, {
|
|
15739
|
+
"canAccessSuperData": false,
|
|
15740
|
+
"data": {
|
|
15741
|
+
// "&": `\${${props.name}[index]}`,
|
|
15742
|
+
"&": "${changedItems[index]}"
|
|
15743
|
+
}
|
|
15744
|
+
})
|
|
15745
|
+
];
|
|
15746
|
+
let onServiceInitedScript = `
|
|
15747
|
+
// 以下脚本在inlineEditMode模式时才有必要执行(不过执行了也没有坏处,纯粹是没必要),是为了解决:
|
|
15748
|
+
// inlineEditMode模式时,用户在表格单元格中直接修改数据,然后弹出的表单form中并没有包含单元格中修改的内容
|
|
15749
|
+
// 思路是每次弹出form之前先把其changedItems同步更新为最新值,这样就能在弹出form中包含单元格中做的修改
|
|
15750
|
+
// 注意:service init事件只会在每次弹出窗口时才执行,在触发翻页时并不会触发service init事件
|
|
15751
|
+
let inlineEditMode = ${props.inlineEditMode};
|
|
15752
|
+
if(!inlineEditMode){
|
|
15753
|
+
return;
|
|
15754
|
+
}
|
|
15755
|
+
let scope = event.context.scoped;
|
|
15756
|
+
let wrapperServiceId = event.data.wrapperServiceId;
|
|
15757
|
+
let wrapperService = scope.getComponentById(wrapperServiceId);
|
|
15758
|
+
let wrapperServiceData = wrapperService.getData();
|
|
15759
|
+
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];
|
|
15763
|
+
});
|
|
15764
|
+
`;
|
|
15765
|
+
let schema = {
|
|
15766
|
+
"type": "service",
|
|
15767
|
+
"id": serviceId,
|
|
15768
|
+
"schemaApi": {
|
|
15769
|
+
"url": "${context.rootUrl}/graphql?rebuildOn=${index}",
|
|
15770
|
+
// "url": "${context.rootUrl}/graphql",
|
|
15771
|
+
"method": "post",
|
|
15772
|
+
"headers": {
|
|
15773
|
+
"Authorization": "Bearer ${context.tenantId},${context.authToken}"
|
|
15774
|
+
},
|
|
15775
|
+
"requestAdaptor": "api.data={query: '{spaces__findOne(id: \"none\"){_id,name}}'};return api;",
|
|
15776
|
+
"adaptor": `
|
|
15777
|
+
const formBody = ${JSON.stringify(formBody)};
|
|
15778
|
+
return {
|
|
15779
|
+
"body": formBody
|
|
15780
|
+
}
|
|
15781
|
+
`
|
|
15782
|
+
},
|
|
15783
|
+
// "body": formBody,
|
|
15784
|
+
"data": {
|
|
15785
|
+
"page": "${index + 1}",
|
|
15786
|
+
// "total": `\${${props.name}.length}`,
|
|
15787
|
+
"total": "${changedItems.length}",
|
|
15788
|
+
"paginationServiceId": serviceId,
|
|
15789
|
+
"formId": form.id
|
|
15790
|
+
},
|
|
15791
|
+
"onEvent": {
|
|
15792
|
+
"init": {
|
|
15793
|
+
"actions": [
|
|
15794
|
+
{
|
|
15795
|
+
"actionType": "custom",
|
|
15796
|
+
"script": onServiceInitedScript
|
|
15797
|
+
}
|
|
15798
|
+
]
|
|
15799
|
+
}
|
|
15800
|
+
}
|
|
15801
|
+
};
|
|
15802
|
+
return schema;
|
|
15803
|
+
}
|
|
15804
|
+
|
|
15591
15805
|
/**
|
|
15592
15806
|
* @param {*} props
|
|
15593
15807
|
* @param {*} mode edit/new/readonly
|
|
@@ -15595,29 +15809,58 @@ async function getInputTableColumns(props) {
|
|
|
15595
15809
|
async function getForm(props, mode = "edit") {
|
|
15596
15810
|
let formFields = getFormFields(props, mode);
|
|
15597
15811
|
let body = await getFormBody(null, formFields);
|
|
15812
|
+
let forId = `form_popup__${props.id}`;
|
|
15598
15813
|
let schema = {
|
|
15599
15814
|
"type": "form",
|
|
15815
|
+
"id": forId,
|
|
15600
15816
|
"title": "表单",
|
|
15601
15817
|
"debug": false,
|
|
15602
15818
|
"mode": "normal",
|
|
15603
15819
|
"body": body,
|
|
15820
|
+
"wrapWithPanel": false,
|
|
15604
15821
|
"className": "steedos-object-form steedos-amis-form"
|
|
15605
15822
|
};
|
|
15606
15823
|
if (mode === "edit") {
|
|
15824
|
+
let onEditItemSubmitScript = `
|
|
15825
|
+
// 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));
|
|
15828
|
+
doAction({
|
|
15829
|
+
"componentId": "${props.id}",
|
|
15830
|
+
"actionType": "setValue",
|
|
15831
|
+
"args": {
|
|
15832
|
+
"value": fieldValue
|
|
15833
|
+
}
|
|
15834
|
+
});
|
|
15835
|
+
// // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
|
|
15836
|
+
// doAction({
|
|
15837
|
+
// "componentId": event.data.wrapperServiceId,
|
|
15838
|
+
// "actionType": "setValue",
|
|
15839
|
+
// "args": {
|
|
15840
|
+
// "value": {
|
|
15841
|
+
// "changedItems": fieldValue
|
|
15842
|
+
// }
|
|
15843
|
+
// }
|
|
15844
|
+
// });
|
|
15845
|
+
`;
|
|
15607
15846
|
Object.assign(schema, {
|
|
15608
15847
|
"onEvent": {
|
|
15609
15848
|
"submit": {
|
|
15610
15849
|
"weight": 0,
|
|
15611
15850
|
"actions": [
|
|
15851
|
+
// {
|
|
15852
|
+
// "actionType": "setValue",
|
|
15853
|
+
// "args": {
|
|
15854
|
+
// "index": "${index}",
|
|
15855
|
+
// "value": {
|
|
15856
|
+
// "&": "$$"
|
|
15857
|
+
// }
|
|
15858
|
+
// },
|
|
15859
|
+
// "componentId": props.id
|
|
15860
|
+
// }
|
|
15612
15861
|
{
|
|
15613
|
-
"actionType": "
|
|
15614
|
-
"
|
|
15615
|
-
"index": "${index}",
|
|
15616
|
-
"value": {
|
|
15617
|
-
"&": "$$"
|
|
15618
|
-
}
|
|
15619
|
-
},
|
|
15620
|
-
"componentId": props.id
|
|
15862
|
+
"actionType": "custom",
|
|
15863
|
+
"script": onEditItemSubmitScript
|
|
15621
15864
|
}
|
|
15622
15865
|
]
|
|
15623
15866
|
}
|
|
@@ -15626,10 +15869,11 @@ async function getForm(props, mode = "edit") {
|
|
|
15626
15869
|
}
|
|
15627
15870
|
else if (mode === "new") {
|
|
15628
15871
|
let onNewItemSubmitScript = `
|
|
15629
|
-
let fieldValue = _.cloneDeep(event.data["${props.name}"]);
|
|
15630
|
-
if(!
|
|
15631
|
-
|
|
15872
|
+
// let fieldValue = _.cloneDeep(event.data["${props.name}"]);
|
|
15873
|
+
if(!event.data.changedItems){
|
|
15874
|
+
event.data.changedItems = [];
|
|
15632
15875
|
}
|
|
15876
|
+
let fieldValue = event.data.changedItems;
|
|
15633
15877
|
fieldValue.push(JSON.parse(JSON.stringify(event.data)));
|
|
15634
15878
|
doAction({
|
|
15635
15879
|
"componentId": "${props.id}",
|
|
@@ -15638,6 +15882,16 @@ async function getForm(props, mode = "edit") {
|
|
|
15638
15882
|
"value": fieldValue
|
|
15639
15883
|
}
|
|
15640
15884
|
});
|
|
15885
|
+
// // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
|
|
15886
|
+
// doAction({
|
|
15887
|
+
// "componentId": event.data.wrapperServiceId,
|
|
15888
|
+
// "actionType": "setValue",
|
|
15889
|
+
// "args": {
|
|
15890
|
+
// "value": {
|
|
15891
|
+
// "changedItems": fieldValue
|
|
15892
|
+
// }
|
|
15893
|
+
// }
|
|
15894
|
+
// });
|
|
15641
15895
|
`;
|
|
15642
15896
|
Object.assign(schema, {
|
|
15643
15897
|
"onEvent": {
|
|
@@ -15663,6 +15917,9 @@ async function getForm(props, mode = "edit") {
|
|
|
15663
15917
|
}
|
|
15664
15918
|
});
|
|
15665
15919
|
}
|
|
15920
|
+
if (mode === "edit" || mode === "readonly") {
|
|
15921
|
+
schema = getFormPaginationWrapper(props, schema);
|
|
15922
|
+
}
|
|
15666
15923
|
return schema;
|
|
15667
15924
|
}
|
|
15668
15925
|
|
|
@@ -15697,11 +15954,32 @@ async function getButtonNew(props) {
|
|
|
15697
15954
|
};
|
|
15698
15955
|
}
|
|
15699
15956
|
|
|
15700
|
-
async function getButtonEdit(props) {
|
|
15957
|
+
async function getButtonEdit(props, showAsInlineEditMode) {
|
|
15958
|
+
let onCancelScript = `
|
|
15959
|
+
let scope = event.context.scoped;
|
|
15960
|
+
let wrapperServiceId = event.data.wrapperServiceId;
|
|
15961
|
+
let wrapperService = scope.getComponentById(wrapperServiceId);
|
|
15962
|
+
let wrapperServiceData = wrapperService.getData();
|
|
15963
|
+
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];
|
|
15967
|
+
});
|
|
15968
|
+
// 因为翻页form中用的是event.data.changedItems中的数据,所以像下面这样doAction setValue无法实现还原
|
|
15969
|
+
// doAction({
|
|
15970
|
+
// "componentId": wrapperServiceId,
|
|
15971
|
+
// "actionType": "setValue",
|
|
15972
|
+
// "args": {
|
|
15973
|
+
// "value": {
|
|
15974
|
+
// "changedItems": originalFieldValue
|
|
15975
|
+
// }
|
|
15976
|
+
// }
|
|
15977
|
+
// });
|
|
15978
|
+
`;
|
|
15701
15979
|
return {
|
|
15702
15980
|
"type": "button",
|
|
15703
15981
|
"label": "",
|
|
15704
|
-
"icon":
|
|
15982
|
+
"icon": `fa fa-${showAsInlineEditMode ? "expand" : "pencil"}`,//inline edit模式时显示为放开按钮,只读时显示为笔按钮
|
|
15705
15983
|
"level": "link",
|
|
15706
15984
|
"onEvent": {
|
|
15707
15985
|
"click": {
|
|
@@ -15719,7 +15997,29 @@ async function getButtonEdit(props) {
|
|
|
15719
15997
|
"showErrorMsg": true,
|
|
15720
15998
|
"showLoading": true,
|
|
15721
15999
|
"className": "app-popover",
|
|
15722
|
-
"closeOnEsc": false
|
|
16000
|
+
"closeOnEsc": false,
|
|
16001
|
+
"data": {
|
|
16002
|
+
// 这里必须加data数据映射,否则翻页功能中取changedItems值时会乱,比如翻页编辑后会把上一页中没改过的字段值带过去
|
|
16003
|
+
// 额外把华炎魔方主表记录ObjectForm中的字段值从record变量中映射到子表form中,因为子表lookup字段filtersFunction中可能依赖了主表记录中的字段值,比如“工作流规则”对象“时间触发器”字段中的“日期字段”字段
|
|
16004
|
+
// 额外把global、uiSchema也映射过去,有可能要用,后续需要用到其他变更可以这里加映射
|
|
16005
|
+
"&": "${record || {}}",
|
|
16006
|
+
"global": "${global}",
|
|
16007
|
+
"uiSchema": "${uiSchema}",
|
|
16008
|
+
"grid": "${grid}",
|
|
16009
|
+
"index": "${index}",
|
|
16010
|
+
"changedItems": "${changedItems}",
|
|
16011
|
+
"wrapperServiceId": "${wrapperServiceId}"
|
|
16012
|
+
},
|
|
16013
|
+
"onEvent": {
|
|
16014
|
+
"cancel": {
|
|
16015
|
+
"actions": [
|
|
16016
|
+
{
|
|
16017
|
+
"actionType": "custom",
|
|
16018
|
+
"script": onCancelScript
|
|
16019
|
+
}
|
|
16020
|
+
]
|
|
16021
|
+
}
|
|
16022
|
+
}
|
|
15723
16023
|
}
|
|
15724
16024
|
}
|
|
15725
16025
|
]
|
|
@@ -15732,7 +16032,7 @@ async function getButtonView(props) {
|
|
|
15732
16032
|
return {
|
|
15733
16033
|
"type": "button",
|
|
15734
16034
|
"label": "",
|
|
15735
|
-
"icon": "fa fa-external-link
|
|
16035
|
+
"icon": "fa fa-expand",//fa-external-link
|
|
15736
16036
|
"level": "link",
|
|
15737
16037
|
"onEvent": {
|
|
15738
16038
|
"click": {
|
|
@@ -15750,7 +16050,18 @@ async function getButtonView(props) {
|
|
|
15750
16050
|
"showErrorMsg": true,
|
|
15751
16051
|
"showLoading": true,
|
|
15752
16052
|
"className": "app-popover",
|
|
15753
|
-
"closeOnEsc": false
|
|
16053
|
+
"closeOnEsc": false,
|
|
16054
|
+
"actions": [],
|
|
16055
|
+
"data": {
|
|
16056
|
+
// 这里必须加data数据映射,否则翻页功能中取changedItems值时会乱,比如翻页编辑后会把上一页中没改过的字段值带过去
|
|
16057
|
+
// 额外把华炎魔方主表记录ObjectForm中的字段值从formData变量中映射到子表form中,因为子表lookup字段filtersFunction中可能依赖了主表记录中的字段值,比如“工作流规则”对象“时间触发器”字段中的“日期字段”字段
|
|
16058
|
+
// global、uiSchema等常用变量本来就在formData变量已经存在了,无需另外映射
|
|
16059
|
+
"&": "${formData || {}}",
|
|
16060
|
+
"grid": "${grid}",
|
|
16061
|
+
"index": "${index}",
|
|
16062
|
+
"changedItems": "${changedItems}",
|
|
16063
|
+
"wrapperServiceId": "${wrapperServiceId}"
|
|
16064
|
+
}
|
|
15754
16065
|
}
|
|
15755
16066
|
}
|
|
15756
16067
|
]
|
|
@@ -15760,6 +16071,32 @@ async function getButtonView(props) {
|
|
|
15760
16071
|
}
|
|
15761
16072
|
|
|
15762
16073
|
function getButtonDelete(props) {
|
|
16074
|
+
let onDeleteItemScript = `
|
|
16075
|
+
// let fieldValue = _.cloneDeep(event.data["${props.name}"]);
|
|
16076
|
+
if(!event.data.changedItems){
|
|
16077
|
+
event.data.changedItems = [];
|
|
16078
|
+
}
|
|
16079
|
+
let fieldValue = event.data.changedItems;
|
|
16080
|
+
// fieldValue.push(JSON.parse(JSON.stringify(event.data)));
|
|
16081
|
+
fieldValue.splice(event.data.index, 1)
|
|
16082
|
+
doAction({
|
|
16083
|
+
"componentId": "${props.id}",
|
|
16084
|
+
"actionType": "setValue",
|
|
16085
|
+
"args": {
|
|
16086
|
+
"value": fieldValue
|
|
16087
|
+
}
|
|
16088
|
+
});
|
|
16089
|
+
// // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
|
|
16090
|
+
// doAction({
|
|
16091
|
+
// "componentId": event.data.wrapperServiceId,
|
|
16092
|
+
// "actionType": "setValue",
|
|
16093
|
+
// "args": {
|
|
16094
|
+
// "value": {
|
|
16095
|
+
// "changedItems": fieldValue
|
|
16096
|
+
// }
|
|
16097
|
+
// }
|
|
16098
|
+
// });
|
|
16099
|
+
`;
|
|
15763
16100
|
return {
|
|
15764
16101
|
"type": "button",
|
|
15765
16102
|
"label": "",
|
|
@@ -15768,12 +16105,16 @@ function getButtonDelete(props) {
|
|
|
15768
16105
|
"onEvent": {
|
|
15769
16106
|
"click": {
|
|
15770
16107
|
"actions": [
|
|
16108
|
+
// {
|
|
16109
|
+
// "actionType": "deleteItem",
|
|
16110
|
+
// "args": {
|
|
16111
|
+
// "index": "${index+','}" //这里不加逗号后续会报错,语法是逗号分隔可以删除多行
|
|
16112
|
+
// },
|
|
16113
|
+
// "componentId": props.id
|
|
16114
|
+
// },
|
|
15771
16115
|
{
|
|
15772
|
-
"actionType": "
|
|
15773
|
-
"
|
|
15774
|
-
"index": "${index+','}" //这里不加逗号后续会报错,语法是逗号分隔可以删除多行
|
|
15775
|
-
},
|
|
15776
|
-
"componentId": props.id
|
|
16116
|
+
"actionType": "custom",
|
|
16117
|
+
"script": onDeleteItemScript
|
|
15777
16118
|
}
|
|
15778
16119
|
]
|
|
15779
16120
|
}
|
|
@@ -15781,18 +16122,34 @@ function getButtonDelete(props) {
|
|
|
15781
16122
|
};
|
|
15782
16123
|
}
|
|
15783
16124
|
|
|
15784
|
-
const getAmisInputTableSchema = async (props
|
|
16125
|
+
const getAmisInputTableSchema = async (props) => {
|
|
15785
16126
|
if (!props.id) {
|
|
15786
16127
|
props.id = "steedos_input_table_" + props.name + "_" + Math.random().toString(36).substr(2, 9);
|
|
15787
16128
|
}
|
|
16129
|
+
let serviceId = `service_wrapper__${props.id}`;
|
|
15788
16130
|
let buttonsForColumnOperations = [];
|
|
16131
|
+
let inlineEditMode = props.inlineEditMode;
|
|
16132
|
+
let showAsInlineEditMode = inlineEditMode && props.editable;
|
|
15789
16133
|
if (props.editable) {
|
|
15790
|
-
let
|
|
15791
|
-
|
|
16134
|
+
let showEditButton = true;
|
|
16135
|
+
if (showAsInlineEditMode) {
|
|
16136
|
+
// inline edit模式下只在有列被隐藏时才需要显示编辑按钮
|
|
16137
|
+
if (props.columns && props.columns.length > 0 && props.columns.length < props.fields.length) {
|
|
16138
|
+
showEditButton = true;
|
|
16139
|
+
}
|
|
16140
|
+
else {
|
|
16141
|
+
showEditButton = false;
|
|
16142
|
+
}
|
|
16143
|
+
}
|
|
16144
|
+
// 编辑时显示编辑按钮
|
|
16145
|
+
if (showEditButton) {
|
|
16146
|
+
let buttonEditSchema = await getButtonEdit(props, showAsInlineEditMode);
|
|
16147
|
+
buttonsForColumnOperations.push(buttonEditSchema);
|
|
16148
|
+
}
|
|
15792
16149
|
}
|
|
15793
16150
|
else {
|
|
15794
16151
|
// 只读时显示查看按钮
|
|
15795
|
-
if(props.columns && props.columns.length > 0 && props.columns.length < props.fields.length){
|
|
16152
|
+
if (props.columns && props.columns.length > 0 && props.columns.length < props.fields.length) {
|
|
15796
16153
|
// 只在有列被隐藏时才需要显示查看按钮
|
|
15797
16154
|
let buttonViewSchema = await getButtonView(props);
|
|
15798
16155
|
buttonsForColumnOperations.push(buttonViewSchema);
|
|
@@ -15829,13 +16186,26 @@ const getAmisInputTableSchema = async (props, readonly) => {
|
|
|
15829
16186
|
"width": buttonsForColumnOperations.length > 1 ? "46px" : "20px"
|
|
15830
16187
|
});
|
|
15831
16188
|
}
|
|
16189
|
+
if (showAsInlineEditMode) {
|
|
16190
|
+
inputTableSchema.needConfirm = false;
|
|
16191
|
+
}
|
|
16192
|
+
let dataProviderInited = `
|
|
16193
|
+
// 单独维护一份中间变量changedItems,因为原变量在input-table组件有单独的作用域,翻页功能中无法维护此作用域中的行记录值
|
|
16194
|
+
setData({ changedItems: _.cloneDeep(data["${props.name}"]) || []});
|
|
16195
|
+
`;
|
|
15832
16196
|
let schema = {
|
|
15833
|
-
"type": "
|
|
15834
|
-
"size": "none",
|
|
16197
|
+
"type": "service",
|
|
15835
16198
|
"body": [
|
|
15836
16199
|
inputTableSchema
|
|
15837
16200
|
],
|
|
15838
|
-
"className": props.className
|
|
16201
|
+
"className": props.className,
|
|
16202
|
+
"id": serviceId,
|
|
16203
|
+
"data": {
|
|
16204
|
+
"wrapperServiceId": serviceId
|
|
16205
|
+
},
|
|
16206
|
+
"dataProvider": {
|
|
16207
|
+
"inited": dataProviderInited
|
|
16208
|
+
}
|
|
15839
16209
|
};
|
|
15840
16210
|
let footerToolbar = clone(props.footerToolbar || []); //这里不clone的话,会造成死循环,应该是因为props属性变更会让组件重新渲染
|
|
15841
16211
|
if (props.addable) {
|
|
@@ -15853,6 +16223,7 @@ const getAmisInputTableSchema = async (props, readonly) => {
|
|
|
15853
16223
|
delete props.amis.id;
|
|
15854
16224
|
Object.assign(schema.body[0], props.amis);
|
|
15855
16225
|
}
|
|
16226
|
+
// console.log("===schema===", schema);
|
|
15856
16227
|
return schema;
|
|
15857
16228
|
};
|
|
15858
16229
|
|
|
@@ -20849,17 +21220,17 @@ var AmisSteedosField = function (props) { return __awaiter(void 0, void 0, void
|
|
|
20849
21220
|
if (isString(ctx)) {
|
|
20850
21221
|
ctx = JSON.parse(ctx);
|
|
20851
21222
|
}
|
|
20852
|
-
|
|
20853
|
-
|
|
20854
|
-
|
|
20855
|
-
steedosField = JSON.parse(config);
|
|
20856
|
-
}
|
|
21223
|
+
steedosField = config ? config : field;
|
|
21224
|
+
if (isString(steedosField)) {
|
|
21225
|
+
steedosField = JSON.parse(steedosField);
|
|
20857
21226
|
}
|
|
20858
21227
|
else {
|
|
20859
|
-
steedosField =
|
|
20860
|
-
|
|
20861
|
-
|
|
20862
|
-
|
|
21228
|
+
// 这里要clone是因为后面图片字段类型执行steedosField.amis = ...的时候会造成input-table中的图片字段在弹出编辑表单点击确认后整个input-table组件重新渲染了,从而导致其翻页功能异常
|
|
21229
|
+
steedosField = clone(steedosField);
|
|
21230
|
+
}
|
|
21231
|
+
if (!fStatic && steedosField.readonly && !props.data.hasOwnProperty("_display")) {
|
|
21232
|
+
// 字段配置为只读,强制走fStatic模式,加上_display判断是为了不影响历史代码,比如直接在ObjectForm中调用steedos-field组件
|
|
21233
|
+
fStatic = true;
|
|
20863
21234
|
}
|
|
20864
21235
|
_d.label = 1;
|
|
20865
21236
|
case 1:
|
|
@@ -21029,6 +21400,9 @@ var AmisSteedosField = function (props) { return __awaiter(void 0, void 0, void
|
|
|
21029
21400
|
return [4 /*yield*/, index.convertSFieldToAmisField(steedosField, readonly, ctx)];
|
|
21030
21401
|
case 13:
|
|
21031
21402
|
schema = _d.sent();
|
|
21403
|
+
if (hideLabel) {
|
|
21404
|
+
delete schema.label;
|
|
21405
|
+
}
|
|
21032
21406
|
// console.log(`AmisSteedosField return schema`, schema)
|
|
21033
21407
|
return [2 /*return*/, schema];
|
|
21034
21408
|
case 14: return [3 /*break*/, 16];
|
|
@@ -21279,7 +21653,7 @@ var AmisInputTable = function (props) { return __awaiter(void 0, void 0, void 0,
|
|
|
21279
21653
|
return __generator(this, function (_a) {
|
|
21280
21654
|
switch (_a.label) {
|
|
21281
21655
|
case 0:
|
|
21282
|
-
props.$schema, props.fields, props.name, props.id, props.data, props.columns, props.amis, props.className, props.tableClassName, props.footerToolbar;
|
|
21656
|
+
props.$schema, props.fields, props.name, props.id, props.data, props.columns, props.amis, props.className, props.tableClassName, props.footerToolbar, props.inlineEditMode;
|
|
21283
21657
|
return [4 /*yield*/, getAmisInputTableSchema(props)];
|
|
21284
21658
|
case 1:
|
|
21285
21659
|
amisSchema = _a.sent();
|