@steedos-widgets/amis-lib 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/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/index.cjs.js +428 -57
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +428 -57
- package/dist/index.esm.js.map +1 -1
- package/dist/index.umd.js +50 -15
- package/dist/index.umd.js.map +1 -1
- package/dist/types/lib/input_table.d.ts +8 -2
- package/package.json +2 -2
package/dist/index.cjs.js
CHANGED
|
@@ -2034,6 +2034,9 @@ async function getTableColumns(fields, options){
|
|
|
2034
2034
|
const allowEdit = options.permissions?.allowEdit && !options.isLookup && options.enable_inline_edit != false;
|
|
2035
2035
|
|
|
2036
2036
|
for (const field of fields) {
|
|
2037
|
+
if(field.hidden || field.extra){
|
|
2038
|
+
continue;
|
|
2039
|
+
}
|
|
2037
2040
|
//增加quickEdit属性,实现快速编辑
|
|
2038
2041
|
const quickEditSchema = allowEdit ? await getQuickEditSchema(field, options) : allowEdit;
|
|
2039
2042
|
let className = "";
|
|
@@ -12393,7 +12396,7 @@ async function getFormBody(permissionFields, formFields, ctx){
|
|
|
12393
12396
|
* @Author: 殷亮辉 yinlianghui@hotoa.com
|
|
12394
12397
|
* @Date: 2023-11-15 09:50:22
|
|
12395
12398
|
* @LastEditors: 殷亮辉 yinlianghui@hotoa.com
|
|
12396
|
-
* @LastEditTime: 2023-12-
|
|
12399
|
+
* @LastEditTime: 2023-12-12 17:13:37
|
|
12397
12400
|
*/
|
|
12398
12401
|
|
|
12399
12402
|
/**
|
|
@@ -12407,52 +12410,71 @@ function getFormFields(props, mode = "edit") {
|
|
|
12407
12410
|
"name": item.name,
|
|
12408
12411
|
"config": item
|
|
12409
12412
|
};
|
|
12410
|
-
if(mode === "readonly"){
|
|
12413
|
+
if (mode === "readonly") {
|
|
12411
12414
|
formItem.static = true;
|
|
12412
12415
|
}
|
|
12413
12416
|
return formItem;
|
|
12414
12417
|
}) || [];
|
|
12415
12418
|
}
|
|
12416
12419
|
|
|
12420
|
+
function getInputTableCell(field, showAsInlineEditMode) {
|
|
12421
|
+
if (showAsInlineEditMode) {
|
|
12422
|
+
return {
|
|
12423
|
+
label: field.label,
|
|
12424
|
+
name: field.name,
|
|
12425
|
+
quickEdit: {
|
|
12426
|
+
"type": "steedos-field",
|
|
12427
|
+
"config": field,
|
|
12428
|
+
hideLabel: true
|
|
12429
|
+
}
|
|
12430
|
+
}
|
|
12431
|
+
}
|
|
12432
|
+
else {
|
|
12433
|
+
return {
|
|
12434
|
+
"type": "steedos-field",
|
|
12435
|
+
"config": field,
|
|
12436
|
+
"static": true,
|
|
12437
|
+
"readonly": true,
|
|
12438
|
+
label: field.label,
|
|
12439
|
+
name: field.name,
|
|
12440
|
+
hideLabel: true
|
|
12441
|
+
}
|
|
12442
|
+
}
|
|
12443
|
+
}
|
|
12444
|
+
|
|
12417
12445
|
/**
|
|
12418
12446
|
* @param {*} props
|
|
12419
12447
|
* @param {*} mode edit/new/readonly
|
|
12420
12448
|
*/
|
|
12421
12449
|
async function getInputTableColumns(props) {
|
|
12422
12450
|
let columns = props.columns || [];
|
|
12451
|
+
let inlineEditMode = props.inlineEditMode;
|
|
12452
|
+
let showAsInlineEditMode = inlineEditMode && props.editable;
|
|
12423
12453
|
// 实测过,直接不生成对应的隐藏column并不会对input-table值造成丢失问题,隐藏的列字段值能正常维护
|
|
12424
12454
|
let fields = props.fields;
|
|
12425
|
-
if(columns && columns.length){
|
|
12426
|
-
return columns.map(function(column){
|
|
12455
|
+
if (columns && columns.length) {
|
|
12456
|
+
return columns.map(function (column) {
|
|
12427
12457
|
let field, extendColumnProps = {};
|
|
12428
|
-
if(typeof column === "string"){
|
|
12458
|
+
if (typeof column === "string") {
|
|
12429
12459
|
// 如果字符串,则取出要显示的列配置
|
|
12430
|
-
field = fields.find(function(fieldItem){
|
|
12460
|
+
field = fields.find(function (fieldItem) {
|
|
12431
12461
|
return fieldItem.name === column;
|
|
12432
12462
|
});
|
|
12433
12463
|
}
|
|
12434
12464
|
else {
|
|
12435
12465
|
// 如果是对象,则合并到steedos-field的config.amis属性中,steedos组件会把config.amis属性混合到最终生成的input-table column
|
|
12436
|
-
field = fields.find(function(fieldItem){
|
|
12466
|
+
field = fields.find(function (fieldItem) {
|
|
12437
12467
|
return fieldItem.name === column.name;
|
|
12438
12468
|
});
|
|
12439
|
-
if(field){
|
|
12469
|
+
if (field) {
|
|
12440
12470
|
// field.amis = Object.assign({}, field.amis, column);
|
|
12441
12471
|
// 如果把column合并到field.amis,column的label/width等属性不会生效,只能放外层合并
|
|
12442
12472
|
extendColumnProps = column;
|
|
12443
12473
|
}
|
|
12444
12474
|
}
|
|
12445
|
-
if(field){
|
|
12446
|
-
|
|
12447
|
-
|
|
12448
|
-
"config": field,
|
|
12449
|
-
"static": true,
|
|
12450
|
-
"readonly": true,
|
|
12451
|
-
label: field.label,
|
|
12452
|
-
name: field.name,
|
|
12453
|
-
hideLabel: true,
|
|
12454
|
-
...extendColumnProps
|
|
12455
|
-
}
|
|
12475
|
+
if (field) {
|
|
12476
|
+
let tableCell = getInputTableCell(field, showAsInlineEditMode);
|
|
12477
|
+
return Object.assign({}, tableCell, extendColumnProps);
|
|
12456
12478
|
}
|
|
12457
12479
|
else {
|
|
12458
12480
|
return column;
|
|
@@ -12460,20 +12482,212 @@ async function getInputTableColumns(props) {
|
|
|
12460
12482
|
});
|
|
12461
12483
|
}
|
|
12462
12484
|
else {
|
|
12463
|
-
return fields.map(function(field){
|
|
12464
|
-
|
|
12465
|
-
|
|
12466
|
-
"config": field,
|
|
12467
|
-
"static": true,
|
|
12468
|
-
"readonly": true,
|
|
12469
|
-
label: field.label,
|
|
12470
|
-
name: field.name,
|
|
12471
|
-
hideLabel: true
|
|
12472
|
-
}
|
|
12485
|
+
return fields.map(function (field) {
|
|
12486
|
+
let tableCell = getInputTableCell(field, showAsInlineEditMode);
|
|
12487
|
+
return tableCell;
|
|
12473
12488
|
}) || [];
|
|
12474
12489
|
}
|
|
12475
12490
|
}
|
|
12476
12491
|
|
|
12492
|
+
function getFormPagination(props) {
|
|
12493
|
+
let onPageChangeScript = `
|
|
12494
|
+
let scope = event.context.scoped;
|
|
12495
|
+
let paginationServiceId = event.data.paginationServiceId;
|
|
12496
|
+
let wrapperServiceId = event.data.wrapperServiceId;
|
|
12497
|
+
let formId = event.data.formId;
|
|
12498
|
+
let fieldValue = event.data.changedItems;//这里不可以_.cloneDeep,因为翻页form中用的是event.data.changedItems,直接变更其值即可改变表单中的值
|
|
12499
|
+
let pageChangeDirection = context.props.pageChangeDirection;
|
|
12500
|
+
let currentPage = event.data.page;
|
|
12501
|
+
let currentIndex = event.data.index;
|
|
12502
|
+
|
|
12503
|
+
// 翻页到下一页之前需要先把当前页改动的内容保存到中间变量changedItems中
|
|
12504
|
+
let currentFormValues = scope.getComponentById(formId).getValues();
|
|
12505
|
+
fieldValue[currentIndex] = currentFormValues;
|
|
12506
|
+
// // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
|
|
12507
|
+
// doAction({
|
|
12508
|
+
// "componentId": wrapperServiceId,
|
|
12509
|
+
// "actionType": "setValue",
|
|
12510
|
+
// "args": {
|
|
12511
|
+
// "value": {
|
|
12512
|
+
// "changedItems": fieldValue
|
|
12513
|
+
// }
|
|
12514
|
+
// }
|
|
12515
|
+
// });
|
|
12516
|
+
// 如果翻页到下一页前需要同时把改动的内容保存到最终正式的表单字段中,需要额外给正式表单字段执行一次setValue
|
|
12517
|
+
// 但是同时保存到正式表单字段中会造成翻页后点击取消无法取消翻页之前的改动内容
|
|
12518
|
+
// doAction({
|
|
12519
|
+
// "componentId": "${props.id}",
|
|
12520
|
+
// "actionType": "setValue",
|
|
12521
|
+
// "args": {
|
|
12522
|
+
// "value": fieldValue
|
|
12523
|
+
// }
|
|
12524
|
+
// });
|
|
12525
|
+
|
|
12526
|
+
// 以下是翻页逻辑,翻到下一页并把下一页内容显示到表单上
|
|
12527
|
+
let targetPage;
|
|
12528
|
+
if(pageChangeDirection === "next"){
|
|
12529
|
+
targetPage = currentPage + 1;
|
|
12530
|
+
}
|
|
12531
|
+
else{
|
|
12532
|
+
targetPage = currentPage - 1;
|
|
12533
|
+
}
|
|
12534
|
+
let targetIndex = targetPage - 1;//input-table组件行索引,从0开始的索引
|
|
12535
|
+
// let targetFormData = changedItems[targetIndex];
|
|
12536
|
+
doAction({
|
|
12537
|
+
"actionType": "setValue",
|
|
12538
|
+
"componentId": paginationServiceId,
|
|
12539
|
+
"args": {
|
|
12540
|
+
"value": {
|
|
12541
|
+
"page": targetPage,
|
|
12542
|
+
"index": targetIndex
|
|
12543
|
+
}
|
|
12544
|
+
}
|
|
12545
|
+
});
|
|
12546
|
+
// 这里不用进一步把表单内容setValue到form中,是因为编辑表单中schemaApi监听了行索引index的变化,其值变化时会重新build整个form
|
|
12547
|
+
// doAction({
|
|
12548
|
+
// "actionType": "setValue",
|
|
12549
|
+
// "componentId": formId,
|
|
12550
|
+
// "args": {
|
|
12551
|
+
// "value": targetFormData
|
|
12552
|
+
// },
|
|
12553
|
+
// "dataMergeMode": "override"// amis 3.2不支持override模式,高版本才支持
|
|
12554
|
+
// });
|
|
12555
|
+
`;
|
|
12556
|
+
return {
|
|
12557
|
+
"type": "wrapper",
|
|
12558
|
+
"className": "py-2",
|
|
12559
|
+
"body": [
|
|
12560
|
+
{
|
|
12561
|
+
"type": "button",
|
|
12562
|
+
"label": "",
|
|
12563
|
+
"icon": `fa fa-angle-left`,
|
|
12564
|
+
"level": "link",
|
|
12565
|
+
"pageChangeDirection": "prev",
|
|
12566
|
+
"disabledOn": "${page <= 1}",
|
|
12567
|
+
"size": "sm",
|
|
12568
|
+
"onEvent": {
|
|
12569
|
+
"click": {
|
|
12570
|
+
"actions": [
|
|
12571
|
+
{
|
|
12572
|
+
"actionType": "custom",
|
|
12573
|
+
"script": onPageChangeScript
|
|
12574
|
+
}
|
|
12575
|
+
]
|
|
12576
|
+
}
|
|
12577
|
+
}
|
|
12578
|
+
},
|
|
12579
|
+
{
|
|
12580
|
+
"type": "tpl",
|
|
12581
|
+
"tpl": "${page}/${total}"
|
|
12582
|
+
},
|
|
12583
|
+
{
|
|
12584
|
+
"type": "button",
|
|
12585
|
+
"label": "",
|
|
12586
|
+
"icon": `fa fa-angle-right`,
|
|
12587
|
+
"level": "link",
|
|
12588
|
+
"pageChangeDirection": "next",
|
|
12589
|
+
"disabledOn": "${page >= total}",
|
|
12590
|
+
"size": "sm",
|
|
12591
|
+
"onEvent": {
|
|
12592
|
+
"click": {
|
|
12593
|
+
"actions": [
|
|
12594
|
+
{
|
|
12595
|
+
"actionType": "custom",
|
|
12596
|
+
"script": onPageChangeScript
|
|
12597
|
+
}
|
|
12598
|
+
]
|
|
12599
|
+
}
|
|
12600
|
+
}
|
|
12601
|
+
}
|
|
12602
|
+
]
|
|
12603
|
+
}
|
|
12604
|
+
}
|
|
12605
|
+
|
|
12606
|
+
/**
|
|
12607
|
+
* 传入formSchema输出带翻页容器的wrapper
|
|
12608
|
+
* @param {*} props input-table组件props
|
|
12609
|
+
* @param {*} form formSchema
|
|
12610
|
+
* @returns 带翻页容器的wrapper
|
|
12611
|
+
*/
|
|
12612
|
+
function getFormPaginationWrapper(props, form) {
|
|
12613
|
+
let serviceId = `service_popup_pagination_wrapper__${props.id}`;
|
|
12614
|
+
let formBody = [
|
|
12615
|
+
{
|
|
12616
|
+
"type": "wrapper",
|
|
12617
|
+
"size": "none",
|
|
12618
|
+
"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",
|
|
12619
|
+
"body": [
|
|
12620
|
+
getFormPagination(props)
|
|
12621
|
+
]
|
|
12622
|
+
},
|
|
12623
|
+
// form
|
|
12624
|
+
Object.assign({}, form, {
|
|
12625
|
+
"canAccessSuperData": false,
|
|
12626
|
+
"data": {
|
|
12627
|
+
// "&": `\${${props.name}[index]}`,
|
|
12628
|
+
"&": "${changedItems[index]}"
|
|
12629
|
+
}
|
|
12630
|
+
})
|
|
12631
|
+
];
|
|
12632
|
+
let onServiceInitedScript = `
|
|
12633
|
+
// 以下脚本在inlineEditMode模式时才有必要执行(不过执行了也没有坏处,纯粹是没必要),是为了解决:
|
|
12634
|
+
// inlineEditMode模式时,用户在表格单元格中直接修改数据,然后弹出的表单form中并没有包含单元格中修改的内容
|
|
12635
|
+
// 思路是每次弹出form之前先把其changedItems同步更新为最新值,这样就能在弹出form中包含单元格中做的修改
|
|
12636
|
+
// 注意:service init事件只会在每次弹出窗口时才执行,在触发翻页时并不会触发service init事件
|
|
12637
|
+
let inlineEditMode = ${props.inlineEditMode};
|
|
12638
|
+
if(!inlineEditMode){
|
|
12639
|
+
return;
|
|
12640
|
+
}
|
|
12641
|
+
let scope = event.context.scoped;
|
|
12642
|
+
let wrapperServiceId = event.data.wrapperServiceId;
|
|
12643
|
+
let wrapperService = scope.getComponentById(wrapperServiceId);
|
|
12644
|
+
let wrapperServiceData = wrapperService.getData();
|
|
12645
|
+
let lastestFieldValue = wrapperServiceData["${props.name}"];//这里不可以用event.data["${props.name}"]因为amis input talbe有一层单独的作用域,其值会延迟一拍
|
|
12646
|
+
//不可以直接像event.data.changedItems = originalFieldValue; 这样整个赋值,否则作用域会断
|
|
12647
|
+
event.data.changedItems.forEach(function(n,i){
|
|
12648
|
+
event.data.changedItems[i] = lastestFieldValue[i];
|
|
12649
|
+
});
|
|
12650
|
+
`;
|
|
12651
|
+
let schema = {
|
|
12652
|
+
"type": "service",
|
|
12653
|
+
"id": serviceId,
|
|
12654
|
+
"schemaApi": {
|
|
12655
|
+
"url": "${context.rootUrl}/graphql?rebuildOn=${index}",
|
|
12656
|
+
// "url": "${context.rootUrl}/graphql",
|
|
12657
|
+
"method": "post",
|
|
12658
|
+
"headers": {
|
|
12659
|
+
"Authorization": "Bearer ${context.tenantId},${context.authToken}"
|
|
12660
|
+
},
|
|
12661
|
+
"requestAdaptor": "api.data={query: '{spaces__findOne(id: \"none\"){_id,name}}'};return api;",
|
|
12662
|
+
"adaptor": `
|
|
12663
|
+
const formBody = ${JSON.stringify(formBody)};
|
|
12664
|
+
return {
|
|
12665
|
+
"body": formBody
|
|
12666
|
+
}
|
|
12667
|
+
`
|
|
12668
|
+
},
|
|
12669
|
+
// "body": formBody,
|
|
12670
|
+
"data": {
|
|
12671
|
+
"page": "${index + 1}",
|
|
12672
|
+
// "total": `\${${props.name}.length}`,
|
|
12673
|
+
"total": "${changedItems.length}",
|
|
12674
|
+
"paginationServiceId": serviceId,
|
|
12675
|
+
"formId": form.id
|
|
12676
|
+
},
|
|
12677
|
+
"onEvent": {
|
|
12678
|
+
"init": {
|
|
12679
|
+
"actions": [
|
|
12680
|
+
{
|
|
12681
|
+
"actionType": "custom",
|
|
12682
|
+
"script": onServiceInitedScript
|
|
12683
|
+
}
|
|
12684
|
+
]
|
|
12685
|
+
}
|
|
12686
|
+
}
|
|
12687
|
+
};
|
|
12688
|
+
return schema;
|
|
12689
|
+
}
|
|
12690
|
+
|
|
12477
12691
|
/**
|
|
12478
12692
|
* @param {*} props
|
|
12479
12693
|
* @param {*} mode edit/new/readonly
|
|
@@ -12481,29 +12695,58 @@ async function getInputTableColumns(props) {
|
|
|
12481
12695
|
async function getForm(props, mode = "edit") {
|
|
12482
12696
|
let formFields = getFormFields(props, mode);
|
|
12483
12697
|
let body = await getFormBody(null, formFields);
|
|
12698
|
+
let forId = `form_popup__${props.id}`;
|
|
12484
12699
|
let schema = {
|
|
12485
12700
|
"type": "form",
|
|
12701
|
+
"id": forId,
|
|
12486
12702
|
"title": "表单",
|
|
12487
12703
|
"debug": false,
|
|
12488
12704
|
"mode": "normal",
|
|
12489
12705
|
"body": body,
|
|
12706
|
+
"wrapWithPanel": false,
|
|
12490
12707
|
"className": "steedos-object-form steedos-amis-form"
|
|
12491
12708
|
};
|
|
12492
12709
|
if (mode === "edit") {
|
|
12710
|
+
let onEditItemSubmitScript = `
|
|
12711
|
+
// let fieldValue = _.cloneDeep(event.data["${props.name}"]);
|
|
12712
|
+
let fieldValue = event.data.changedItems;//这里不可以_.cloneDeep,因为翻页form中用的是event.data.changedItems,直接变更其值即可改变表单中的值
|
|
12713
|
+
fieldValue[event.data.index] = JSON.parse(JSON.stringify(event.data));
|
|
12714
|
+
doAction({
|
|
12715
|
+
"componentId": "${props.id}",
|
|
12716
|
+
"actionType": "setValue",
|
|
12717
|
+
"args": {
|
|
12718
|
+
"value": fieldValue
|
|
12719
|
+
}
|
|
12720
|
+
});
|
|
12721
|
+
// // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
|
|
12722
|
+
// doAction({
|
|
12723
|
+
// "componentId": event.data.wrapperServiceId,
|
|
12724
|
+
// "actionType": "setValue",
|
|
12725
|
+
// "args": {
|
|
12726
|
+
// "value": {
|
|
12727
|
+
// "changedItems": fieldValue
|
|
12728
|
+
// }
|
|
12729
|
+
// }
|
|
12730
|
+
// });
|
|
12731
|
+
`;
|
|
12493
12732
|
Object.assign(schema, {
|
|
12494
12733
|
"onEvent": {
|
|
12495
12734
|
"submit": {
|
|
12496
12735
|
"weight": 0,
|
|
12497
12736
|
"actions": [
|
|
12737
|
+
// {
|
|
12738
|
+
// "actionType": "setValue",
|
|
12739
|
+
// "args": {
|
|
12740
|
+
// "index": "${index}",
|
|
12741
|
+
// "value": {
|
|
12742
|
+
// "&": "$$"
|
|
12743
|
+
// }
|
|
12744
|
+
// },
|
|
12745
|
+
// "componentId": props.id
|
|
12746
|
+
// }
|
|
12498
12747
|
{
|
|
12499
|
-
"actionType": "
|
|
12500
|
-
"
|
|
12501
|
-
"index": "${index}",
|
|
12502
|
-
"value": {
|
|
12503
|
-
"&": "$$"
|
|
12504
|
-
}
|
|
12505
|
-
},
|
|
12506
|
-
"componentId": props.id
|
|
12748
|
+
"actionType": "custom",
|
|
12749
|
+
"script": onEditItemSubmitScript
|
|
12507
12750
|
}
|
|
12508
12751
|
]
|
|
12509
12752
|
}
|
|
@@ -12512,10 +12755,11 @@ async function getForm(props, mode = "edit") {
|
|
|
12512
12755
|
}
|
|
12513
12756
|
else if (mode === "new") {
|
|
12514
12757
|
let onNewItemSubmitScript = `
|
|
12515
|
-
let fieldValue = _.cloneDeep(event.data["${props.name}"]);
|
|
12516
|
-
if(!
|
|
12517
|
-
|
|
12758
|
+
// let fieldValue = _.cloneDeep(event.data["${props.name}"]);
|
|
12759
|
+
if(!event.data.changedItems){
|
|
12760
|
+
event.data.changedItems = [];
|
|
12518
12761
|
}
|
|
12762
|
+
let fieldValue = event.data.changedItems;
|
|
12519
12763
|
fieldValue.push(JSON.parse(JSON.stringify(event.data)));
|
|
12520
12764
|
doAction({
|
|
12521
12765
|
"componentId": "${props.id}",
|
|
@@ -12524,6 +12768,16 @@ async function getForm(props, mode = "edit") {
|
|
|
12524
12768
|
"value": fieldValue
|
|
12525
12769
|
}
|
|
12526
12770
|
});
|
|
12771
|
+
// // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
|
|
12772
|
+
// doAction({
|
|
12773
|
+
// "componentId": event.data.wrapperServiceId,
|
|
12774
|
+
// "actionType": "setValue",
|
|
12775
|
+
// "args": {
|
|
12776
|
+
// "value": {
|
|
12777
|
+
// "changedItems": fieldValue
|
|
12778
|
+
// }
|
|
12779
|
+
// }
|
|
12780
|
+
// });
|
|
12527
12781
|
`;
|
|
12528
12782
|
Object.assign(schema, {
|
|
12529
12783
|
"onEvent": {
|
|
@@ -12549,6 +12803,9 @@ async function getForm(props, mode = "edit") {
|
|
|
12549
12803
|
}
|
|
12550
12804
|
});
|
|
12551
12805
|
}
|
|
12806
|
+
if (mode === "edit" || mode === "readonly") {
|
|
12807
|
+
schema = getFormPaginationWrapper(props, schema);
|
|
12808
|
+
}
|
|
12552
12809
|
return schema;
|
|
12553
12810
|
}
|
|
12554
12811
|
|
|
@@ -12583,11 +12840,32 @@ async function getButtonNew(props) {
|
|
|
12583
12840
|
};
|
|
12584
12841
|
}
|
|
12585
12842
|
|
|
12586
|
-
async function getButtonEdit(props) {
|
|
12843
|
+
async function getButtonEdit(props, showAsInlineEditMode) {
|
|
12844
|
+
let onCancelScript = `
|
|
12845
|
+
let scope = event.context.scoped;
|
|
12846
|
+
let wrapperServiceId = event.data.wrapperServiceId;
|
|
12847
|
+
let wrapperService = scope.getComponentById(wrapperServiceId);
|
|
12848
|
+
let wrapperServiceData = wrapperService.getData();
|
|
12849
|
+
let originalFieldValue = wrapperServiceData["${props.name}"];//这里不可以用event.data["${props.name}"]因为amis input talbe有一层单独的作用域,其值会延迟一拍
|
|
12850
|
+
//不可以直接像event.data.changedItems = originalFieldValue; 这样整个赋值,否则作用域会断,造成无法还原
|
|
12851
|
+
event.data.changedItems.forEach(function(n,i){
|
|
12852
|
+
event.data.changedItems[i] = originalFieldValue[i];
|
|
12853
|
+
});
|
|
12854
|
+
// 因为翻页form中用的是event.data.changedItems中的数据,所以像下面这样doAction setValue无法实现还原
|
|
12855
|
+
// doAction({
|
|
12856
|
+
// "componentId": wrapperServiceId,
|
|
12857
|
+
// "actionType": "setValue",
|
|
12858
|
+
// "args": {
|
|
12859
|
+
// "value": {
|
|
12860
|
+
// "changedItems": originalFieldValue
|
|
12861
|
+
// }
|
|
12862
|
+
// }
|
|
12863
|
+
// });
|
|
12864
|
+
`;
|
|
12587
12865
|
return {
|
|
12588
12866
|
"type": "button",
|
|
12589
12867
|
"label": "",
|
|
12590
|
-
"icon":
|
|
12868
|
+
"icon": `fa fa-${showAsInlineEditMode ? "expand" : "pencil"}`,//inline edit模式时显示为放开按钮,只读时显示为笔按钮
|
|
12591
12869
|
"level": "link",
|
|
12592
12870
|
"onEvent": {
|
|
12593
12871
|
"click": {
|
|
@@ -12605,7 +12883,29 @@ async function getButtonEdit(props) {
|
|
|
12605
12883
|
"showErrorMsg": true,
|
|
12606
12884
|
"showLoading": true,
|
|
12607
12885
|
"className": "app-popover",
|
|
12608
|
-
"closeOnEsc": false
|
|
12886
|
+
"closeOnEsc": false,
|
|
12887
|
+
"data": {
|
|
12888
|
+
// 这里必须加data数据映射,否则翻页功能中取changedItems值时会乱,比如翻页编辑后会把上一页中没改过的字段值带过去
|
|
12889
|
+
// 额外把华炎魔方主表记录ObjectForm中的字段值从record变量中映射到子表form中,因为子表lookup字段filtersFunction中可能依赖了主表记录中的字段值,比如“工作流规则”对象“时间触发器”字段中的“日期字段”字段
|
|
12890
|
+
// 额外把global、uiSchema也映射过去,有可能要用,后续需要用到其他变更可以这里加映射
|
|
12891
|
+
"&": "${record || {}}",
|
|
12892
|
+
"global": "${global}",
|
|
12893
|
+
"uiSchema": "${uiSchema}",
|
|
12894
|
+
"grid": "${grid}",
|
|
12895
|
+
"index": "${index}",
|
|
12896
|
+
"changedItems": "${changedItems}",
|
|
12897
|
+
"wrapperServiceId": "${wrapperServiceId}"
|
|
12898
|
+
},
|
|
12899
|
+
"onEvent": {
|
|
12900
|
+
"cancel": {
|
|
12901
|
+
"actions": [
|
|
12902
|
+
{
|
|
12903
|
+
"actionType": "custom",
|
|
12904
|
+
"script": onCancelScript
|
|
12905
|
+
}
|
|
12906
|
+
]
|
|
12907
|
+
}
|
|
12908
|
+
}
|
|
12609
12909
|
}
|
|
12610
12910
|
}
|
|
12611
12911
|
]
|
|
@@ -12618,7 +12918,7 @@ async function getButtonView(props) {
|
|
|
12618
12918
|
return {
|
|
12619
12919
|
"type": "button",
|
|
12620
12920
|
"label": "",
|
|
12621
|
-
"icon": "fa fa-external-link
|
|
12921
|
+
"icon": "fa fa-expand",//fa-external-link
|
|
12622
12922
|
"level": "link",
|
|
12623
12923
|
"onEvent": {
|
|
12624
12924
|
"click": {
|
|
@@ -12636,7 +12936,18 @@ async function getButtonView(props) {
|
|
|
12636
12936
|
"showErrorMsg": true,
|
|
12637
12937
|
"showLoading": true,
|
|
12638
12938
|
"className": "app-popover",
|
|
12639
|
-
"closeOnEsc": false
|
|
12939
|
+
"closeOnEsc": false,
|
|
12940
|
+
"actions": [],
|
|
12941
|
+
"data": {
|
|
12942
|
+
// 这里必须加data数据映射,否则翻页功能中取changedItems值时会乱,比如翻页编辑后会把上一页中没改过的字段值带过去
|
|
12943
|
+
// 额外把华炎魔方主表记录ObjectForm中的字段值从formData变量中映射到子表form中,因为子表lookup字段filtersFunction中可能依赖了主表记录中的字段值,比如“工作流规则”对象“时间触发器”字段中的“日期字段”字段
|
|
12944
|
+
// global、uiSchema等常用变量本来就在formData变量已经存在了,无需另外映射
|
|
12945
|
+
"&": "${formData || {}}",
|
|
12946
|
+
"grid": "${grid}",
|
|
12947
|
+
"index": "${index}",
|
|
12948
|
+
"changedItems": "${changedItems}",
|
|
12949
|
+
"wrapperServiceId": "${wrapperServiceId}"
|
|
12950
|
+
}
|
|
12640
12951
|
}
|
|
12641
12952
|
}
|
|
12642
12953
|
]
|
|
@@ -12646,6 +12957,32 @@ async function getButtonView(props) {
|
|
|
12646
12957
|
}
|
|
12647
12958
|
|
|
12648
12959
|
function getButtonDelete(props) {
|
|
12960
|
+
let onDeleteItemScript = `
|
|
12961
|
+
// let fieldValue = _.cloneDeep(event.data["${props.name}"]);
|
|
12962
|
+
if(!event.data.changedItems){
|
|
12963
|
+
event.data.changedItems = [];
|
|
12964
|
+
}
|
|
12965
|
+
let fieldValue = event.data.changedItems;
|
|
12966
|
+
// fieldValue.push(JSON.parse(JSON.stringify(event.data)));
|
|
12967
|
+
fieldValue.splice(event.data.index, 1)
|
|
12968
|
+
doAction({
|
|
12969
|
+
"componentId": "${props.id}",
|
|
12970
|
+
"actionType": "setValue",
|
|
12971
|
+
"args": {
|
|
12972
|
+
"value": fieldValue
|
|
12973
|
+
}
|
|
12974
|
+
});
|
|
12975
|
+
// // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
|
|
12976
|
+
// doAction({
|
|
12977
|
+
// "componentId": event.data.wrapperServiceId,
|
|
12978
|
+
// "actionType": "setValue",
|
|
12979
|
+
// "args": {
|
|
12980
|
+
// "value": {
|
|
12981
|
+
// "changedItems": fieldValue
|
|
12982
|
+
// }
|
|
12983
|
+
// }
|
|
12984
|
+
// });
|
|
12985
|
+
`;
|
|
12649
12986
|
return {
|
|
12650
12987
|
"type": "button",
|
|
12651
12988
|
"label": "",
|
|
@@ -12654,12 +12991,16 @@ function getButtonDelete(props) {
|
|
|
12654
12991
|
"onEvent": {
|
|
12655
12992
|
"click": {
|
|
12656
12993
|
"actions": [
|
|
12994
|
+
// {
|
|
12995
|
+
// "actionType": "deleteItem",
|
|
12996
|
+
// "args": {
|
|
12997
|
+
// "index": "${index+','}" //这里不加逗号后续会报错,语法是逗号分隔可以删除多行
|
|
12998
|
+
// },
|
|
12999
|
+
// "componentId": props.id
|
|
13000
|
+
// },
|
|
12657
13001
|
{
|
|
12658
|
-
"actionType": "
|
|
12659
|
-
"
|
|
12660
|
-
"index": "${index+','}" //这里不加逗号后续会报错,语法是逗号分隔可以删除多行
|
|
12661
|
-
},
|
|
12662
|
-
"componentId": props.id
|
|
13002
|
+
"actionType": "custom",
|
|
13003
|
+
"script": onDeleteItemScript
|
|
12663
13004
|
}
|
|
12664
13005
|
]
|
|
12665
13006
|
}
|
|
@@ -12667,18 +13008,34 @@ function getButtonDelete(props) {
|
|
|
12667
13008
|
};
|
|
12668
13009
|
}
|
|
12669
13010
|
|
|
12670
|
-
const getAmisInputTableSchema = async (props
|
|
13011
|
+
const getAmisInputTableSchema = async (props) => {
|
|
12671
13012
|
if (!props.id) {
|
|
12672
13013
|
props.id = "steedos_input_table_" + props.name + "_" + Math.random().toString(36).substr(2, 9);
|
|
12673
13014
|
}
|
|
13015
|
+
let serviceId = `service_wrapper__${props.id}`;
|
|
12674
13016
|
let buttonsForColumnOperations = [];
|
|
13017
|
+
let inlineEditMode = props.inlineEditMode;
|
|
13018
|
+
let showAsInlineEditMode = inlineEditMode && props.editable;
|
|
12675
13019
|
if (props.editable) {
|
|
12676
|
-
let
|
|
12677
|
-
|
|
13020
|
+
let showEditButton = true;
|
|
13021
|
+
if (showAsInlineEditMode) {
|
|
13022
|
+
// inline edit模式下只在有列被隐藏时才需要显示编辑按钮
|
|
13023
|
+
if (props.columns && props.columns.length > 0 && props.columns.length < props.fields.length) {
|
|
13024
|
+
showEditButton = true;
|
|
13025
|
+
}
|
|
13026
|
+
else {
|
|
13027
|
+
showEditButton = false;
|
|
13028
|
+
}
|
|
13029
|
+
}
|
|
13030
|
+
// 编辑时显示编辑按钮
|
|
13031
|
+
if (showEditButton) {
|
|
13032
|
+
let buttonEditSchema = await getButtonEdit(props, showAsInlineEditMode);
|
|
13033
|
+
buttonsForColumnOperations.push(buttonEditSchema);
|
|
13034
|
+
}
|
|
12678
13035
|
}
|
|
12679
13036
|
else {
|
|
12680
13037
|
// 只读时显示查看按钮
|
|
12681
|
-
if(props.columns && props.columns.length > 0 && props.columns.length < props.fields.length){
|
|
13038
|
+
if (props.columns && props.columns.length > 0 && props.columns.length < props.fields.length) {
|
|
12682
13039
|
// 只在有列被隐藏时才需要显示查看按钮
|
|
12683
13040
|
let buttonViewSchema = await getButtonView(props);
|
|
12684
13041
|
buttonsForColumnOperations.push(buttonViewSchema);
|
|
@@ -12715,13 +13072,26 @@ const getAmisInputTableSchema = async (props, readonly) => {
|
|
|
12715
13072
|
"width": buttonsForColumnOperations.length > 1 ? "46px" : "20px"
|
|
12716
13073
|
});
|
|
12717
13074
|
}
|
|
13075
|
+
if (showAsInlineEditMode) {
|
|
13076
|
+
inputTableSchema.needConfirm = false;
|
|
13077
|
+
}
|
|
13078
|
+
let dataProviderInited = `
|
|
13079
|
+
// 单独维护一份中间变量changedItems,因为原变量在input-table组件有单独的作用域,翻页功能中无法维护此作用域中的行记录值
|
|
13080
|
+
setData({ changedItems: _.cloneDeep(data["${props.name}"]) || []});
|
|
13081
|
+
`;
|
|
12718
13082
|
let schema = {
|
|
12719
|
-
"type": "
|
|
12720
|
-
"size": "none",
|
|
13083
|
+
"type": "service",
|
|
12721
13084
|
"body": [
|
|
12722
13085
|
inputTableSchema
|
|
12723
13086
|
],
|
|
12724
|
-
"className": props.className
|
|
13087
|
+
"className": props.className,
|
|
13088
|
+
"id": serviceId,
|
|
13089
|
+
"data": {
|
|
13090
|
+
"wrapperServiceId": serviceId
|
|
13091
|
+
},
|
|
13092
|
+
"dataProvider": {
|
|
13093
|
+
"inited": dataProviderInited
|
|
13094
|
+
}
|
|
12725
13095
|
};
|
|
12726
13096
|
let footerToolbar = _$1.clone(props.footerToolbar || []); //这里不clone的话,会造成死循环,应该是因为props属性变更会让组件重新渲染
|
|
12727
13097
|
if (props.addable) {
|
|
@@ -12739,6 +13109,7 @@ const getAmisInputTableSchema = async (props, readonly) => {
|
|
|
12739
13109
|
delete props.amis.id;
|
|
12740
13110
|
Object.assign(schema.body[0], props.amis);
|
|
12741
13111
|
}
|
|
13112
|
+
// console.log("===schema===", schema);
|
|
12742
13113
|
return schema;
|
|
12743
13114
|
};
|
|
12744
13115
|
|