@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.cjs.js
CHANGED
|
@@ -5176,6 +5176,9 @@ async function getTableColumns$1(fields, options){
|
|
|
5176
5176
|
const allowEdit = options.permissions?.allowEdit && !options.isLookup && options.enable_inline_edit != false;
|
|
5177
5177
|
|
|
5178
5178
|
for (const field of fields) {
|
|
5179
|
+
if(field.hidden || field.extra){
|
|
5180
|
+
continue;
|
|
5181
|
+
}
|
|
5179
5182
|
//增加quickEdit属性,实现快速编辑
|
|
5180
5183
|
const quickEditSchema = allowEdit ? await getQuickEditSchema(field, options) : allowEdit;
|
|
5181
5184
|
let className = "";
|
|
@@ -15535,7 +15538,7 @@ async function getFormBody(permissionFields, formFields, ctx){
|
|
|
15535
15538
|
* @Author: 殷亮辉 yinlianghui@hotoa.com
|
|
15536
15539
|
* @Date: 2023-11-15 09:50:22
|
|
15537
15540
|
* @LastEditors: 殷亮辉 yinlianghui@hotoa.com
|
|
15538
|
-
* @LastEditTime: 2023-12-
|
|
15541
|
+
* @LastEditTime: 2023-12-12 17:13:37
|
|
15539
15542
|
*/
|
|
15540
15543
|
|
|
15541
15544
|
/**
|
|
@@ -15549,52 +15552,71 @@ function getFormFields(props, mode = "edit") {
|
|
|
15549
15552
|
"name": item.name,
|
|
15550
15553
|
"config": item
|
|
15551
15554
|
};
|
|
15552
|
-
if(mode === "readonly"){
|
|
15555
|
+
if (mode === "readonly") {
|
|
15553
15556
|
formItem.static = true;
|
|
15554
15557
|
}
|
|
15555
15558
|
return formItem;
|
|
15556
15559
|
}) || [];
|
|
15557
15560
|
}
|
|
15558
15561
|
|
|
15562
|
+
function getInputTableCell(field, showAsInlineEditMode) {
|
|
15563
|
+
if (showAsInlineEditMode) {
|
|
15564
|
+
return {
|
|
15565
|
+
label: field.label,
|
|
15566
|
+
name: field.name,
|
|
15567
|
+
quickEdit: {
|
|
15568
|
+
"type": "steedos-field",
|
|
15569
|
+
"config": field,
|
|
15570
|
+
hideLabel: true
|
|
15571
|
+
}
|
|
15572
|
+
}
|
|
15573
|
+
}
|
|
15574
|
+
else {
|
|
15575
|
+
return {
|
|
15576
|
+
"type": "steedos-field",
|
|
15577
|
+
"config": field,
|
|
15578
|
+
"static": true,
|
|
15579
|
+
"readonly": true,
|
|
15580
|
+
label: field.label,
|
|
15581
|
+
name: field.name,
|
|
15582
|
+
hideLabel: true
|
|
15583
|
+
}
|
|
15584
|
+
}
|
|
15585
|
+
}
|
|
15586
|
+
|
|
15559
15587
|
/**
|
|
15560
15588
|
* @param {*} props
|
|
15561
15589
|
* @param {*} mode edit/new/readonly
|
|
15562
15590
|
*/
|
|
15563
15591
|
async function getInputTableColumns(props) {
|
|
15564
15592
|
let columns = props.columns || [];
|
|
15593
|
+
let inlineEditMode = props.inlineEditMode;
|
|
15594
|
+
let showAsInlineEditMode = inlineEditMode && props.editable;
|
|
15565
15595
|
// 实测过,直接不生成对应的隐藏column并不会对input-table值造成丢失问题,隐藏的列字段值能正常维护
|
|
15566
15596
|
let fields = props.fields;
|
|
15567
|
-
if(columns && columns.length){
|
|
15568
|
-
return columns.map(function(column){
|
|
15597
|
+
if (columns && columns.length) {
|
|
15598
|
+
return columns.map(function (column) {
|
|
15569
15599
|
let field, extendColumnProps = {};
|
|
15570
|
-
if(typeof column === "string"){
|
|
15600
|
+
if (typeof column === "string") {
|
|
15571
15601
|
// 如果字符串,则取出要显示的列配置
|
|
15572
|
-
field = fields.find(function(fieldItem){
|
|
15602
|
+
field = fields.find(function (fieldItem) {
|
|
15573
15603
|
return fieldItem.name === column;
|
|
15574
15604
|
});
|
|
15575
15605
|
}
|
|
15576
15606
|
else {
|
|
15577
15607
|
// 如果是对象,则合并到steedos-field的config.amis属性中,steedos组件会把config.amis属性混合到最终生成的input-table column
|
|
15578
|
-
field = fields.find(function(fieldItem){
|
|
15608
|
+
field = fields.find(function (fieldItem) {
|
|
15579
15609
|
return fieldItem.name === column.name;
|
|
15580
15610
|
});
|
|
15581
|
-
if(field){
|
|
15611
|
+
if (field) {
|
|
15582
15612
|
// field.amis = Object.assign({}, field.amis, column);
|
|
15583
15613
|
// 如果把column合并到field.amis,column的label/width等属性不会生效,只能放外层合并
|
|
15584
15614
|
extendColumnProps = column;
|
|
15585
15615
|
}
|
|
15586
15616
|
}
|
|
15587
|
-
if(field){
|
|
15588
|
-
|
|
15589
|
-
|
|
15590
|
-
"config": field,
|
|
15591
|
-
"static": true,
|
|
15592
|
-
"readonly": true,
|
|
15593
|
-
label: field.label,
|
|
15594
|
-
name: field.name,
|
|
15595
|
-
hideLabel: true,
|
|
15596
|
-
...extendColumnProps
|
|
15597
|
-
}
|
|
15617
|
+
if (field) {
|
|
15618
|
+
let tableCell = getInputTableCell(field, showAsInlineEditMode);
|
|
15619
|
+
return Object.assign({}, tableCell, extendColumnProps);
|
|
15598
15620
|
}
|
|
15599
15621
|
else {
|
|
15600
15622
|
return column;
|
|
@@ -15602,20 +15624,212 @@ async function getInputTableColumns(props) {
|
|
|
15602
15624
|
});
|
|
15603
15625
|
}
|
|
15604
15626
|
else {
|
|
15605
|
-
return fields.map(function(field){
|
|
15606
|
-
|
|
15607
|
-
|
|
15608
|
-
"config": field,
|
|
15609
|
-
"static": true,
|
|
15610
|
-
"readonly": true,
|
|
15611
|
-
label: field.label,
|
|
15612
|
-
name: field.name,
|
|
15613
|
-
hideLabel: true
|
|
15614
|
-
}
|
|
15627
|
+
return fields.map(function (field) {
|
|
15628
|
+
let tableCell = getInputTableCell(field, showAsInlineEditMode);
|
|
15629
|
+
return tableCell;
|
|
15615
15630
|
}) || [];
|
|
15616
15631
|
}
|
|
15617
15632
|
}
|
|
15618
15633
|
|
|
15634
|
+
function getFormPagination(props) {
|
|
15635
|
+
let onPageChangeScript = `
|
|
15636
|
+
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,直接变更其值即可改变表单中的值
|
|
15641
|
+
let pageChangeDirection = context.props.pageChangeDirection;
|
|
15642
|
+
let currentPage = event.data.page;
|
|
15643
|
+
let currentIndex = event.data.index;
|
|
15644
|
+
|
|
15645
|
+
// 翻页到下一页之前需要先把当前页改动的内容保存到中间变量changedItems中
|
|
15646
|
+
let currentFormValues = scope.getComponentById(formId).getValues();
|
|
15647
|
+
fieldValue[currentIndex] = currentFormValues;
|
|
15648
|
+
// // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
|
|
15649
|
+
// doAction({
|
|
15650
|
+
// "componentId": wrapperServiceId,
|
|
15651
|
+
// "actionType": "setValue",
|
|
15652
|
+
// "args": {
|
|
15653
|
+
// "value": {
|
|
15654
|
+
// "changedItems": fieldValue
|
|
15655
|
+
// }
|
|
15656
|
+
// }
|
|
15657
|
+
// });
|
|
15658
|
+
// 如果翻页到下一页前需要同时把改动的内容保存到最终正式的表单字段中,需要额外给正式表单字段执行一次setValue
|
|
15659
|
+
// 但是同时保存到正式表单字段中会造成翻页后点击取消无法取消翻页之前的改动内容
|
|
15660
|
+
// doAction({
|
|
15661
|
+
// "componentId": "${props.id}",
|
|
15662
|
+
// "actionType": "setValue",
|
|
15663
|
+
// "args": {
|
|
15664
|
+
// "value": fieldValue
|
|
15665
|
+
// }
|
|
15666
|
+
// });
|
|
15667
|
+
|
|
15668
|
+
// 以下是翻页逻辑,翻到下一页并把下一页内容显示到表单上
|
|
15669
|
+
let targetPage;
|
|
15670
|
+
if(pageChangeDirection === "next"){
|
|
15671
|
+
targetPage = currentPage + 1;
|
|
15672
|
+
}
|
|
15673
|
+
else{
|
|
15674
|
+
targetPage = currentPage - 1;
|
|
15675
|
+
}
|
|
15676
|
+
let targetIndex = targetPage - 1;//input-table组件行索引,从0开始的索引
|
|
15677
|
+
// let targetFormData = changedItems[targetIndex];
|
|
15678
|
+
doAction({
|
|
15679
|
+
"actionType": "setValue",
|
|
15680
|
+
"componentId": paginationServiceId,
|
|
15681
|
+
"args": {
|
|
15682
|
+
"value": {
|
|
15683
|
+
"page": targetPage,
|
|
15684
|
+
"index": targetIndex
|
|
15685
|
+
}
|
|
15686
|
+
}
|
|
15687
|
+
});
|
|
15688
|
+
// 这里不用进一步把表单内容setValue到form中,是因为编辑表单中schemaApi监听了行索引index的变化,其值变化时会重新build整个form
|
|
15689
|
+
// doAction({
|
|
15690
|
+
// "actionType": "setValue",
|
|
15691
|
+
// "componentId": formId,
|
|
15692
|
+
// "args": {
|
|
15693
|
+
// "value": targetFormData
|
|
15694
|
+
// },
|
|
15695
|
+
// "dataMergeMode": "override"// amis 3.2不支持override模式,高版本才支持
|
|
15696
|
+
// });
|
|
15697
|
+
`;
|
|
15698
|
+
return {
|
|
15699
|
+
"type": "wrapper",
|
|
15700
|
+
"className": "py-2",
|
|
15701
|
+
"body": [
|
|
15702
|
+
{
|
|
15703
|
+
"type": "button",
|
|
15704
|
+
"label": "",
|
|
15705
|
+
"icon": `fa fa-angle-left`,
|
|
15706
|
+
"level": "link",
|
|
15707
|
+
"pageChangeDirection": "prev",
|
|
15708
|
+
"disabledOn": "${page <= 1}",
|
|
15709
|
+
"size": "sm",
|
|
15710
|
+
"onEvent": {
|
|
15711
|
+
"click": {
|
|
15712
|
+
"actions": [
|
|
15713
|
+
{
|
|
15714
|
+
"actionType": "custom",
|
|
15715
|
+
"script": onPageChangeScript
|
|
15716
|
+
}
|
|
15717
|
+
]
|
|
15718
|
+
}
|
|
15719
|
+
}
|
|
15720
|
+
},
|
|
15721
|
+
{
|
|
15722
|
+
"type": "tpl",
|
|
15723
|
+
"tpl": "${page}/${total}"
|
|
15724
|
+
},
|
|
15725
|
+
{
|
|
15726
|
+
"type": "button",
|
|
15727
|
+
"label": "",
|
|
15728
|
+
"icon": `fa fa-angle-right`,
|
|
15729
|
+
"level": "link",
|
|
15730
|
+
"pageChangeDirection": "next",
|
|
15731
|
+
"disabledOn": "${page >= total}",
|
|
15732
|
+
"size": "sm",
|
|
15733
|
+
"onEvent": {
|
|
15734
|
+
"click": {
|
|
15735
|
+
"actions": [
|
|
15736
|
+
{
|
|
15737
|
+
"actionType": "custom",
|
|
15738
|
+
"script": onPageChangeScript
|
|
15739
|
+
}
|
|
15740
|
+
]
|
|
15741
|
+
}
|
|
15742
|
+
}
|
|
15743
|
+
}
|
|
15744
|
+
]
|
|
15745
|
+
}
|
|
15746
|
+
}
|
|
15747
|
+
|
|
15748
|
+
/**
|
|
15749
|
+
* 传入formSchema输出带翻页容器的wrapper
|
|
15750
|
+
* @param {*} props input-table组件props
|
|
15751
|
+
* @param {*} form formSchema
|
|
15752
|
+
* @returns 带翻页容器的wrapper
|
|
15753
|
+
*/
|
|
15754
|
+
function getFormPaginationWrapper(props, form) {
|
|
15755
|
+
let serviceId = `service_popup_pagination_wrapper__${props.id}`;
|
|
15756
|
+
let formBody = [
|
|
15757
|
+
{
|
|
15758
|
+
"type": "wrapper",
|
|
15759
|
+
"size": "none",
|
|
15760
|
+
"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",
|
|
15761
|
+
"body": [
|
|
15762
|
+
getFormPagination(props)
|
|
15763
|
+
]
|
|
15764
|
+
},
|
|
15765
|
+
// form
|
|
15766
|
+
Object.assign({}, form, {
|
|
15767
|
+
"canAccessSuperData": false,
|
|
15768
|
+
"data": {
|
|
15769
|
+
// "&": `\${${props.name}[index]}`,
|
|
15770
|
+
"&": "${changedItems[index]}"
|
|
15771
|
+
}
|
|
15772
|
+
})
|
|
15773
|
+
];
|
|
15774
|
+
let onServiceInitedScript = `
|
|
15775
|
+
// 以下脚本在inlineEditMode模式时才有必要执行(不过执行了也没有坏处,纯粹是没必要),是为了解决:
|
|
15776
|
+
// inlineEditMode模式时,用户在表格单元格中直接修改数据,然后弹出的表单form中并没有包含单元格中修改的内容
|
|
15777
|
+
// 思路是每次弹出form之前先把其changedItems同步更新为最新值,这样就能在弹出form中包含单元格中做的修改
|
|
15778
|
+
// 注意:service init事件只会在每次弹出窗口时才执行,在触发翻页时并不会触发service init事件
|
|
15779
|
+
let inlineEditMode = ${props.inlineEditMode};
|
|
15780
|
+
if(!inlineEditMode){
|
|
15781
|
+
return;
|
|
15782
|
+
}
|
|
15783
|
+
let scope = event.context.scoped;
|
|
15784
|
+
let wrapperServiceId = event.data.wrapperServiceId;
|
|
15785
|
+
let wrapperService = scope.getComponentById(wrapperServiceId);
|
|
15786
|
+
let wrapperServiceData = wrapperService.getData();
|
|
15787
|
+
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];
|
|
15791
|
+
});
|
|
15792
|
+
`;
|
|
15793
|
+
let schema = {
|
|
15794
|
+
"type": "service",
|
|
15795
|
+
"id": serviceId,
|
|
15796
|
+
"schemaApi": {
|
|
15797
|
+
"url": "${context.rootUrl}/graphql?rebuildOn=${index}",
|
|
15798
|
+
// "url": "${context.rootUrl}/graphql",
|
|
15799
|
+
"method": "post",
|
|
15800
|
+
"headers": {
|
|
15801
|
+
"Authorization": "Bearer ${context.tenantId},${context.authToken}"
|
|
15802
|
+
},
|
|
15803
|
+
"requestAdaptor": "api.data={query: '{spaces__findOne(id: \"none\"){_id,name}}'};return api;",
|
|
15804
|
+
"adaptor": `
|
|
15805
|
+
const formBody = ${JSON.stringify(formBody)};
|
|
15806
|
+
return {
|
|
15807
|
+
"body": formBody
|
|
15808
|
+
}
|
|
15809
|
+
`
|
|
15810
|
+
},
|
|
15811
|
+
// "body": formBody,
|
|
15812
|
+
"data": {
|
|
15813
|
+
"page": "${index + 1}",
|
|
15814
|
+
// "total": `\${${props.name}.length}`,
|
|
15815
|
+
"total": "${changedItems.length}",
|
|
15816
|
+
"paginationServiceId": serviceId,
|
|
15817
|
+
"formId": form.id
|
|
15818
|
+
},
|
|
15819
|
+
"onEvent": {
|
|
15820
|
+
"init": {
|
|
15821
|
+
"actions": [
|
|
15822
|
+
{
|
|
15823
|
+
"actionType": "custom",
|
|
15824
|
+
"script": onServiceInitedScript
|
|
15825
|
+
}
|
|
15826
|
+
]
|
|
15827
|
+
}
|
|
15828
|
+
}
|
|
15829
|
+
};
|
|
15830
|
+
return schema;
|
|
15831
|
+
}
|
|
15832
|
+
|
|
15619
15833
|
/**
|
|
15620
15834
|
* @param {*} props
|
|
15621
15835
|
* @param {*} mode edit/new/readonly
|
|
@@ -15623,29 +15837,58 @@ async function getInputTableColumns(props) {
|
|
|
15623
15837
|
async function getForm(props, mode = "edit") {
|
|
15624
15838
|
let formFields = getFormFields(props, mode);
|
|
15625
15839
|
let body = await getFormBody(null, formFields);
|
|
15840
|
+
let forId = `form_popup__${props.id}`;
|
|
15626
15841
|
let schema = {
|
|
15627
15842
|
"type": "form",
|
|
15843
|
+
"id": forId,
|
|
15628
15844
|
"title": "表单",
|
|
15629
15845
|
"debug": false,
|
|
15630
15846
|
"mode": "normal",
|
|
15631
15847
|
"body": body,
|
|
15848
|
+
"wrapWithPanel": false,
|
|
15632
15849
|
"className": "steedos-object-form steedos-amis-form"
|
|
15633
15850
|
};
|
|
15634
15851
|
if (mode === "edit") {
|
|
15852
|
+
let onEditItemSubmitScript = `
|
|
15853
|
+
// 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));
|
|
15856
|
+
doAction({
|
|
15857
|
+
"componentId": "${props.id}",
|
|
15858
|
+
"actionType": "setValue",
|
|
15859
|
+
"args": {
|
|
15860
|
+
"value": fieldValue
|
|
15861
|
+
}
|
|
15862
|
+
});
|
|
15863
|
+
// // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
|
|
15864
|
+
// doAction({
|
|
15865
|
+
// "componentId": event.data.wrapperServiceId,
|
|
15866
|
+
// "actionType": "setValue",
|
|
15867
|
+
// "args": {
|
|
15868
|
+
// "value": {
|
|
15869
|
+
// "changedItems": fieldValue
|
|
15870
|
+
// }
|
|
15871
|
+
// }
|
|
15872
|
+
// });
|
|
15873
|
+
`;
|
|
15635
15874
|
Object.assign(schema, {
|
|
15636
15875
|
"onEvent": {
|
|
15637
15876
|
"submit": {
|
|
15638
15877
|
"weight": 0,
|
|
15639
15878
|
"actions": [
|
|
15879
|
+
// {
|
|
15880
|
+
// "actionType": "setValue",
|
|
15881
|
+
// "args": {
|
|
15882
|
+
// "index": "${index}",
|
|
15883
|
+
// "value": {
|
|
15884
|
+
// "&": "$$"
|
|
15885
|
+
// }
|
|
15886
|
+
// },
|
|
15887
|
+
// "componentId": props.id
|
|
15888
|
+
// }
|
|
15640
15889
|
{
|
|
15641
|
-
"actionType": "
|
|
15642
|
-
"
|
|
15643
|
-
"index": "${index}",
|
|
15644
|
-
"value": {
|
|
15645
|
-
"&": "$$"
|
|
15646
|
-
}
|
|
15647
|
-
},
|
|
15648
|
-
"componentId": props.id
|
|
15890
|
+
"actionType": "custom",
|
|
15891
|
+
"script": onEditItemSubmitScript
|
|
15649
15892
|
}
|
|
15650
15893
|
]
|
|
15651
15894
|
}
|
|
@@ -15654,10 +15897,11 @@ async function getForm(props, mode = "edit") {
|
|
|
15654
15897
|
}
|
|
15655
15898
|
else if (mode === "new") {
|
|
15656
15899
|
let onNewItemSubmitScript = `
|
|
15657
|
-
let fieldValue = _.cloneDeep(event.data["${props.name}"]);
|
|
15658
|
-
if(!
|
|
15659
|
-
|
|
15900
|
+
// let fieldValue = _.cloneDeep(event.data["${props.name}"]);
|
|
15901
|
+
if(!event.data.changedItems){
|
|
15902
|
+
event.data.changedItems = [];
|
|
15660
15903
|
}
|
|
15904
|
+
let fieldValue = event.data.changedItems;
|
|
15661
15905
|
fieldValue.push(JSON.parse(JSON.stringify(event.data)));
|
|
15662
15906
|
doAction({
|
|
15663
15907
|
"componentId": "${props.id}",
|
|
@@ -15666,6 +15910,16 @@ async function getForm(props, mode = "edit") {
|
|
|
15666
15910
|
"value": fieldValue
|
|
15667
15911
|
}
|
|
15668
15912
|
});
|
|
15913
|
+
// // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
|
|
15914
|
+
// doAction({
|
|
15915
|
+
// "componentId": event.data.wrapperServiceId,
|
|
15916
|
+
// "actionType": "setValue",
|
|
15917
|
+
// "args": {
|
|
15918
|
+
// "value": {
|
|
15919
|
+
// "changedItems": fieldValue
|
|
15920
|
+
// }
|
|
15921
|
+
// }
|
|
15922
|
+
// });
|
|
15669
15923
|
`;
|
|
15670
15924
|
Object.assign(schema, {
|
|
15671
15925
|
"onEvent": {
|
|
@@ -15691,6 +15945,9 @@ async function getForm(props, mode = "edit") {
|
|
|
15691
15945
|
}
|
|
15692
15946
|
});
|
|
15693
15947
|
}
|
|
15948
|
+
if (mode === "edit" || mode === "readonly") {
|
|
15949
|
+
schema = getFormPaginationWrapper(props, schema);
|
|
15950
|
+
}
|
|
15694
15951
|
return schema;
|
|
15695
15952
|
}
|
|
15696
15953
|
|
|
@@ -15725,11 +15982,32 @@ async function getButtonNew(props) {
|
|
|
15725
15982
|
};
|
|
15726
15983
|
}
|
|
15727
15984
|
|
|
15728
|
-
async function getButtonEdit(props) {
|
|
15985
|
+
async function getButtonEdit(props, showAsInlineEditMode) {
|
|
15986
|
+
let onCancelScript = `
|
|
15987
|
+
let scope = event.context.scoped;
|
|
15988
|
+
let wrapperServiceId = event.data.wrapperServiceId;
|
|
15989
|
+
let wrapperService = scope.getComponentById(wrapperServiceId);
|
|
15990
|
+
let wrapperServiceData = wrapperService.getData();
|
|
15991
|
+
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];
|
|
15995
|
+
});
|
|
15996
|
+
// 因为翻页form中用的是event.data.changedItems中的数据,所以像下面这样doAction setValue无法实现还原
|
|
15997
|
+
// doAction({
|
|
15998
|
+
// "componentId": wrapperServiceId,
|
|
15999
|
+
// "actionType": "setValue",
|
|
16000
|
+
// "args": {
|
|
16001
|
+
// "value": {
|
|
16002
|
+
// "changedItems": originalFieldValue
|
|
16003
|
+
// }
|
|
16004
|
+
// }
|
|
16005
|
+
// });
|
|
16006
|
+
`;
|
|
15729
16007
|
return {
|
|
15730
16008
|
"type": "button",
|
|
15731
16009
|
"label": "",
|
|
15732
|
-
"icon":
|
|
16010
|
+
"icon": `fa fa-${showAsInlineEditMode ? "expand" : "pencil"}`,//inline edit模式时显示为放开按钮,只读时显示为笔按钮
|
|
15733
16011
|
"level": "link",
|
|
15734
16012
|
"onEvent": {
|
|
15735
16013
|
"click": {
|
|
@@ -15747,7 +16025,29 @@ async function getButtonEdit(props) {
|
|
|
15747
16025
|
"showErrorMsg": true,
|
|
15748
16026
|
"showLoading": true,
|
|
15749
16027
|
"className": "app-popover",
|
|
15750
|
-
"closeOnEsc": false
|
|
16028
|
+
"closeOnEsc": false,
|
|
16029
|
+
"data": {
|
|
16030
|
+
// 这里必须加data数据映射,否则翻页功能中取changedItems值时会乱,比如翻页编辑后会把上一页中没改过的字段值带过去
|
|
16031
|
+
// 额外把华炎魔方主表记录ObjectForm中的字段值从record变量中映射到子表form中,因为子表lookup字段filtersFunction中可能依赖了主表记录中的字段值,比如“工作流规则”对象“时间触发器”字段中的“日期字段”字段
|
|
16032
|
+
// 额外把global、uiSchema也映射过去,有可能要用,后续需要用到其他变更可以这里加映射
|
|
16033
|
+
"&": "${record || {}}",
|
|
16034
|
+
"global": "${global}",
|
|
16035
|
+
"uiSchema": "${uiSchema}",
|
|
16036
|
+
"grid": "${grid}",
|
|
16037
|
+
"index": "${index}",
|
|
16038
|
+
"changedItems": "${changedItems}",
|
|
16039
|
+
"wrapperServiceId": "${wrapperServiceId}"
|
|
16040
|
+
},
|
|
16041
|
+
"onEvent": {
|
|
16042
|
+
"cancel": {
|
|
16043
|
+
"actions": [
|
|
16044
|
+
{
|
|
16045
|
+
"actionType": "custom",
|
|
16046
|
+
"script": onCancelScript
|
|
16047
|
+
}
|
|
16048
|
+
]
|
|
16049
|
+
}
|
|
16050
|
+
}
|
|
15751
16051
|
}
|
|
15752
16052
|
}
|
|
15753
16053
|
]
|
|
@@ -15760,7 +16060,7 @@ async function getButtonView(props) {
|
|
|
15760
16060
|
return {
|
|
15761
16061
|
"type": "button",
|
|
15762
16062
|
"label": "",
|
|
15763
|
-
"icon": "fa fa-external-link
|
|
16063
|
+
"icon": "fa fa-expand",//fa-external-link
|
|
15764
16064
|
"level": "link",
|
|
15765
16065
|
"onEvent": {
|
|
15766
16066
|
"click": {
|
|
@@ -15778,7 +16078,18 @@ async function getButtonView(props) {
|
|
|
15778
16078
|
"showErrorMsg": true,
|
|
15779
16079
|
"showLoading": true,
|
|
15780
16080
|
"className": "app-popover",
|
|
15781
|
-
"closeOnEsc": false
|
|
16081
|
+
"closeOnEsc": false,
|
|
16082
|
+
"actions": [],
|
|
16083
|
+
"data": {
|
|
16084
|
+
// 这里必须加data数据映射,否则翻页功能中取changedItems值时会乱,比如翻页编辑后会把上一页中没改过的字段值带过去
|
|
16085
|
+
// 额外把华炎魔方主表记录ObjectForm中的字段值从formData变量中映射到子表form中,因为子表lookup字段filtersFunction中可能依赖了主表记录中的字段值,比如“工作流规则”对象“时间触发器”字段中的“日期字段”字段
|
|
16086
|
+
// global、uiSchema等常用变量本来就在formData变量已经存在了,无需另外映射
|
|
16087
|
+
"&": "${formData || {}}",
|
|
16088
|
+
"grid": "${grid}",
|
|
16089
|
+
"index": "${index}",
|
|
16090
|
+
"changedItems": "${changedItems}",
|
|
16091
|
+
"wrapperServiceId": "${wrapperServiceId}"
|
|
16092
|
+
}
|
|
15782
16093
|
}
|
|
15783
16094
|
}
|
|
15784
16095
|
]
|
|
@@ -15788,6 +16099,32 @@ async function getButtonView(props) {
|
|
|
15788
16099
|
}
|
|
15789
16100
|
|
|
15790
16101
|
function getButtonDelete(props) {
|
|
16102
|
+
let onDeleteItemScript = `
|
|
16103
|
+
// let fieldValue = _.cloneDeep(event.data["${props.name}"]);
|
|
16104
|
+
if(!event.data.changedItems){
|
|
16105
|
+
event.data.changedItems = [];
|
|
16106
|
+
}
|
|
16107
|
+
let fieldValue = event.data.changedItems;
|
|
16108
|
+
// fieldValue.push(JSON.parse(JSON.stringify(event.data)));
|
|
16109
|
+
fieldValue.splice(event.data.index, 1)
|
|
16110
|
+
doAction({
|
|
16111
|
+
"componentId": "${props.id}",
|
|
16112
|
+
"actionType": "setValue",
|
|
16113
|
+
"args": {
|
|
16114
|
+
"value": fieldValue
|
|
16115
|
+
}
|
|
16116
|
+
});
|
|
16117
|
+
// // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
|
|
16118
|
+
// doAction({
|
|
16119
|
+
// "componentId": event.data.wrapperServiceId,
|
|
16120
|
+
// "actionType": "setValue",
|
|
16121
|
+
// "args": {
|
|
16122
|
+
// "value": {
|
|
16123
|
+
// "changedItems": fieldValue
|
|
16124
|
+
// }
|
|
16125
|
+
// }
|
|
16126
|
+
// });
|
|
16127
|
+
`;
|
|
15791
16128
|
return {
|
|
15792
16129
|
"type": "button",
|
|
15793
16130
|
"label": "",
|
|
@@ -15796,12 +16133,16 @@ function getButtonDelete(props) {
|
|
|
15796
16133
|
"onEvent": {
|
|
15797
16134
|
"click": {
|
|
15798
16135
|
"actions": [
|
|
16136
|
+
// {
|
|
16137
|
+
// "actionType": "deleteItem",
|
|
16138
|
+
// "args": {
|
|
16139
|
+
// "index": "${index+','}" //这里不加逗号后续会报错,语法是逗号分隔可以删除多行
|
|
16140
|
+
// },
|
|
16141
|
+
// "componentId": props.id
|
|
16142
|
+
// },
|
|
15799
16143
|
{
|
|
15800
|
-
"actionType": "
|
|
15801
|
-
"
|
|
15802
|
-
"index": "${index+','}" //这里不加逗号后续会报错,语法是逗号分隔可以删除多行
|
|
15803
|
-
},
|
|
15804
|
-
"componentId": props.id
|
|
16144
|
+
"actionType": "custom",
|
|
16145
|
+
"script": onDeleteItemScript
|
|
15805
16146
|
}
|
|
15806
16147
|
]
|
|
15807
16148
|
}
|
|
@@ -15809,18 +16150,34 @@ function getButtonDelete(props) {
|
|
|
15809
16150
|
};
|
|
15810
16151
|
}
|
|
15811
16152
|
|
|
15812
|
-
const getAmisInputTableSchema = async (props
|
|
16153
|
+
const getAmisInputTableSchema = async (props) => {
|
|
15813
16154
|
if (!props.id) {
|
|
15814
16155
|
props.id = "steedos_input_table_" + props.name + "_" + Math.random().toString(36).substr(2, 9);
|
|
15815
16156
|
}
|
|
16157
|
+
let serviceId = `service_wrapper__${props.id}`;
|
|
15816
16158
|
let buttonsForColumnOperations = [];
|
|
16159
|
+
let inlineEditMode = props.inlineEditMode;
|
|
16160
|
+
let showAsInlineEditMode = inlineEditMode && props.editable;
|
|
15817
16161
|
if (props.editable) {
|
|
15818
|
-
let
|
|
15819
|
-
|
|
16162
|
+
let showEditButton = true;
|
|
16163
|
+
if (showAsInlineEditMode) {
|
|
16164
|
+
// inline edit模式下只在有列被隐藏时才需要显示编辑按钮
|
|
16165
|
+
if (props.columns && props.columns.length > 0 && props.columns.length < props.fields.length) {
|
|
16166
|
+
showEditButton = true;
|
|
16167
|
+
}
|
|
16168
|
+
else {
|
|
16169
|
+
showEditButton = false;
|
|
16170
|
+
}
|
|
16171
|
+
}
|
|
16172
|
+
// 编辑时显示编辑按钮
|
|
16173
|
+
if (showEditButton) {
|
|
16174
|
+
let buttonEditSchema = await getButtonEdit(props, showAsInlineEditMode);
|
|
16175
|
+
buttonsForColumnOperations.push(buttonEditSchema);
|
|
16176
|
+
}
|
|
15820
16177
|
}
|
|
15821
16178
|
else {
|
|
15822
16179
|
// 只读时显示查看按钮
|
|
15823
|
-
if(props.columns && props.columns.length > 0 && props.columns.length < props.fields.length){
|
|
16180
|
+
if (props.columns && props.columns.length > 0 && props.columns.length < props.fields.length) {
|
|
15824
16181
|
// 只在有列被隐藏时才需要显示查看按钮
|
|
15825
16182
|
let buttonViewSchema = await getButtonView(props);
|
|
15826
16183
|
buttonsForColumnOperations.push(buttonViewSchema);
|
|
@@ -15857,13 +16214,26 @@ const getAmisInputTableSchema = async (props, readonly) => {
|
|
|
15857
16214
|
"width": buttonsForColumnOperations.length > 1 ? "46px" : "20px"
|
|
15858
16215
|
});
|
|
15859
16216
|
}
|
|
16217
|
+
if (showAsInlineEditMode) {
|
|
16218
|
+
inputTableSchema.needConfirm = false;
|
|
16219
|
+
}
|
|
16220
|
+
let dataProviderInited = `
|
|
16221
|
+
// 单独维护一份中间变量changedItems,因为原变量在input-table组件有单独的作用域,翻页功能中无法维护此作用域中的行记录值
|
|
16222
|
+
setData({ changedItems: _.cloneDeep(data["${props.name}"]) || []});
|
|
16223
|
+
`;
|
|
15860
16224
|
let schema = {
|
|
15861
|
-
"type": "
|
|
15862
|
-
"size": "none",
|
|
16225
|
+
"type": "service",
|
|
15863
16226
|
"body": [
|
|
15864
16227
|
inputTableSchema
|
|
15865
16228
|
],
|
|
15866
|
-
"className": props.className
|
|
16229
|
+
"className": props.className,
|
|
16230
|
+
"id": serviceId,
|
|
16231
|
+
"data": {
|
|
16232
|
+
"wrapperServiceId": serviceId
|
|
16233
|
+
},
|
|
16234
|
+
"dataProvider": {
|
|
16235
|
+
"inited": dataProviderInited
|
|
16236
|
+
}
|
|
15867
16237
|
};
|
|
15868
16238
|
let footerToolbar = _$1.clone(props.footerToolbar || []); //这里不clone的话,会造成死循环,应该是因为props属性变更会让组件重新渲染
|
|
15869
16239
|
if (props.addable) {
|
|
@@ -15881,6 +16251,7 @@ const getAmisInputTableSchema = async (props, readonly) => {
|
|
|
15881
16251
|
delete props.amis.id;
|
|
15882
16252
|
Object.assign(schema.body[0], props.amis);
|
|
15883
16253
|
}
|
|
16254
|
+
// console.log("===schema===", schema);
|
|
15884
16255
|
return schema;
|
|
15885
16256
|
};
|
|
15886
16257
|
|
|
@@ -20877,17 +21248,17 @@ var AmisSteedosField = function (props) { return __awaiter(void 0, void 0, void
|
|
|
20877
21248
|
if (_$1.isString(ctx)) {
|
|
20878
21249
|
ctx = JSON.parse(ctx);
|
|
20879
21250
|
}
|
|
20880
|
-
|
|
20881
|
-
|
|
20882
|
-
|
|
20883
|
-
steedosField = JSON.parse(config);
|
|
20884
|
-
}
|
|
21251
|
+
steedosField = config ? config : field;
|
|
21252
|
+
if (_$1.isString(steedosField)) {
|
|
21253
|
+
steedosField = JSON.parse(steedosField);
|
|
20885
21254
|
}
|
|
20886
21255
|
else {
|
|
20887
|
-
steedosField =
|
|
20888
|
-
|
|
20889
|
-
|
|
20890
|
-
|
|
21256
|
+
// 这里要clone是因为后面图片字段类型执行steedosField.amis = ...的时候会造成input-table中的图片字段在弹出编辑表单点击确认后整个input-table组件重新渲染了,从而导致其翻页功能异常
|
|
21257
|
+
steedosField = _$1.clone(steedosField);
|
|
21258
|
+
}
|
|
21259
|
+
if (!fStatic && steedosField.readonly && !props.data.hasOwnProperty("_display")) {
|
|
21260
|
+
// 字段配置为只读,强制走fStatic模式,加上_display判断是为了不影响历史代码,比如直接在ObjectForm中调用steedos-field组件
|
|
21261
|
+
fStatic = true;
|
|
20891
21262
|
}
|
|
20892
21263
|
_d.label = 1;
|
|
20893
21264
|
case 1:
|
|
@@ -21057,6 +21428,9 @@ var AmisSteedosField = function (props) { return __awaiter(void 0, void 0, void
|
|
|
21057
21428
|
return [4 /*yield*/, index.convertSFieldToAmisField(steedosField, readonly, ctx)];
|
|
21058
21429
|
case 13:
|
|
21059
21430
|
schema = _d.sent();
|
|
21431
|
+
if (hideLabel) {
|
|
21432
|
+
delete schema.label;
|
|
21433
|
+
}
|
|
21060
21434
|
// console.log(`AmisSteedosField return schema`, schema)
|
|
21061
21435
|
return [2 /*return*/, schema];
|
|
21062
21436
|
case 14: return [3 /*break*/, 16];
|
|
@@ -21307,7 +21681,7 @@ var AmisInputTable = function (props) { return __awaiter(void 0, void 0, void 0,
|
|
|
21307
21681
|
return __generator(this, function (_a) {
|
|
21308
21682
|
switch (_a.label) {
|
|
21309
21683
|
case 0:
|
|
21310
|
-
props.$schema, props.fields, props.name, props.id, props.data, props.columns, props.amis, props.className, props.tableClassName, props.footerToolbar;
|
|
21684
|
+
props.$schema, props.fields, props.name, props.id, props.data, props.columns, props.amis, props.className, props.tableClassName, props.footerToolbar, props.inlineEditMode;
|
|
21311
21685
|
return [4 /*yield*/, getAmisInputTableSchema(props)];
|
|
21312
21686
|
case 1:
|
|
21313
21687
|
amisSchema = _a.sent();
|