@steedos-widgets/amis-object 1.3.19 → 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.
- package/dist/amis/AmisInputTable.d.ts +16 -2
- package/dist/amis-object.cjs.css +34 -16
- package/dist/amis-object.cjs.js +595 -112
- package/dist/amis-object.cjs.js.map +1 -1
- package/dist/amis-object.esm.css +34 -16
- package/dist/amis-object.esm.js +595 -112
- package/dist/amis-object.esm.js.map +1 -1
- package/dist/amis-object.umd.css +34 -16
- package/dist/amis-object.umd.js +99 -46
- package/dist/amis-object.umd.js.map +1 -1
- package/dist/assets.json +21 -21
- package/dist/meta.js +37 -1
- package/package.json +3 -3
package/dist/amis-object.esm.js
CHANGED
|
@@ -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-
|
|
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,
|
|
@@ -5148,6 +5153,9 @@ async function getTableColumns$1(fields, options){
|
|
|
5148
5153
|
const allowEdit = options.permissions?.allowEdit && !options.isLookup && options.enable_inline_edit != false;
|
|
5149
5154
|
|
|
5150
5155
|
for (const field of fields) {
|
|
5156
|
+
if(field.hidden || field.extra){
|
|
5157
|
+
continue;
|
|
5158
|
+
}
|
|
5151
5159
|
//增加quickEdit属性,实现快速编辑
|
|
5152
5160
|
const quickEditSchema = allowEdit ? await getQuickEditSchema(field, options) : allowEdit;
|
|
5153
5161
|
let className = "";
|
|
@@ -5273,6 +5281,11 @@ async function getTableColumns$1(fields, options){
|
|
|
5273
5281
|
options: field.type === 'html' ? {html: true} : null
|
|
5274
5282
|
// toggled: true
|
|
5275
5283
|
}, field.amis, {name: field.name});
|
|
5284
|
+
|
|
5285
|
+
if(field.type === 'color'){
|
|
5286
|
+
columnItem.type = 'color';
|
|
5287
|
+
columnItem.defaultColor = null;
|
|
5288
|
+
}
|
|
5276
5289
|
}
|
|
5277
5290
|
}
|
|
5278
5291
|
if(columnItem){
|
|
@@ -7960,8 +7973,8 @@ const getSchema$2 = (uiSchema) => {
|
|
|
7960
7973
|
/*
|
|
7961
7974
|
* @Author: baozhoutao@steedos.com
|
|
7962
7975
|
* @Date: 2022-11-07 17:00:38
|
|
7963
|
-
* @LastEditors:
|
|
7964
|
-
* @LastEditTime: 2023-
|
|
7976
|
+
* @LastEditors: liaodaxue
|
|
7977
|
+
* @LastEditTime: 2023-12-13 10:09:05
|
|
7965
7978
|
* @Description:
|
|
7966
7979
|
*/
|
|
7967
7980
|
|
|
@@ -7972,7 +7985,7 @@ const getSchema$1 = (uiSchema)=>{
|
|
|
7972
7985
|
"body": [
|
|
7973
7986
|
{
|
|
7974
7987
|
"type": "button",
|
|
7975
|
-
"label": instance.t('
|
|
7988
|
+
"label": instance.t('frontend_form_details'),
|
|
7976
7989
|
"className": "border-none",
|
|
7977
7990
|
"onEvent": {
|
|
7978
7991
|
"click": {
|
|
@@ -14653,6 +14666,16 @@ async function convertSFieldToAmisField(field, readonly, ctx) {
|
|
|
14653
14666
|
}
|
|
14654
14667
|
}
|
|
14655
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
|
+
}
|
|
14656
14679
|
break;
|
|
14657
14680
|
case 'boolean':
|
|
14658
14681
|
convertData = {
|
|
@@ -15507,7 +15530,7 @@ async function getFormBody(permissionFields, formFields, ctx){
|
|
|
15507
15530
|
* @Author: 殷亮辉 yinlianghui@hotoa.com
|
|
15508
15531
|
* @Date: 2023-11-15 09:50:22
|
|
15509
15532
|
* @LastEditors: 殷亮辉 yinlianghui@hotoa.com
|
|
15510
|
-
* @LastEditTime: 2023-12-
|
|
15533
|
+
* @LastEditTime: 2023-12-16 16:39:49
|
|
15511
15534
|
*/
|
|
15512
15535
|
|
|
15513
15536
|
/**
|
|
@@ -15521,52 +15544,71 @@ function getFormFields(props, mode = "edit") {
|
|
|
15521
15544
|
"name": item.name,
|
|
15522
15545
|
"config": item
|
|
15523
15546
|
};
|
|
15524
|
-
if(mode === "readonly"){
|
|
15547
|
+
if (mode === "readonly") {
|
|
15525
15548
|
formItem.static = true;
|
|
15526
15549
|
}
|
|
15527
15550
|
return formItem;
|
|
15528
15551
|
}) || [];
|
|
15529
15552
|
}
|
|
15530
15553
|
|
|
15554
|
+
function getInputTableCell(field, showAsInlineEditMode) {
|
|
15555
|
+
if (showAsInlineEditMode) {
|
|
15556
|
+
return {
|
|
15557
|
+
label: field.label,
|
|
15558
|
+
name: field.name,
|
|
15559
|
+
quickEdit: {
|
|
15560
|
+
"type": "steedos-field",
|
|
15561
|
+
"config": field,
|
|
15562
|
+
hideLabel: true
|
|
15563
|
+
}
|
|
15564
|
+
}
|
|
15565
|
+
}
|
|
15566
|
+
else {
|
|
15567
|
+
return {
|
|
15568
|
+
"type": "steedos-field",
|
|
15569
|
+
"config": field,
|
|
15570
|
+
"static": true,
|
|
15571
|
+
"readonly": true,
|
|
15572
|
+
label: field.label,
|
|
15573
|
+
name: field.name,
|
|
15574
|
+
hideLabel: true
|
|
15575
|
+
}
|
|
15576
|
+
}
|
|
15577
|
+
}
|
|
15578
|
+
|
|
15531
15579
|
/**
|
|
15532
15580
|
* @param {*} props
|
|
15533
15581
|
* @param {*} mode edit/new/readonly
|
|
15534
15582
|
*/
|
|
15535
15583
|
async function getInputTableColumns(props) {
|
|
15536
15584
|
let columns = props.columns || [];
|
|
15585
|
+
let inlineEditMode = props.inlineEditMode;
|
|
15586
|
+
let showAsInlineEditMode = inlineEditMode && props.editable;
|
|
15537
15587
|
// 实测过,直接不生成对应的隐藏column并不会对input-table值造成丢失问题,隐藏的列字段值能正常维护
|
|
15538
15588
|
let fields = props.fields;
|
|
15539
|
-
if(columns && columns.length){
|
|
15540
|
-
return columns.map(function(column){
|
|
15589
|
+
if (columns && columns.length) {
|
|
15590
|
+
return columns.map(function (column) {
|
|
15541
15591
|
let field, extendColumnProps = {};
|
|
15542
|
-
if(typeof column === "string"){
|
|
15592
|
+
if (typeof column === "string") {
|
|
15543
15593
|
// 如果字符串,则取出要显示的列配置
|
|
15544
|
-
field = fields.find(function(fieldItem){
|
|
15594
|
+
field = fields.find(function (fieldItem) {
|
|
15545
15595
|
return fieldItem.name === column;
|
|
15546
15596
|
});
|
|
15547
15597
|
}
|
|
15548
15598
|
else {
|
|
15549
15599
|
// 如果是对象,则合并到steedos-field的config.amis属性中,steedos组件会把config.amis属性混合到最终生成的input-table column
|
|
15550
|
-
field = fields.find(function(fieldItem){
|
|
15600
|
+
field = fields.find(function (fieldItem) {
|
|
15551
15601
|
return fieldItem.name === column.name;
|
|
15552
15602
|
});
|
|
15553
|
-
if(field){
|
|
15603
|
+
if (field) {
|
|
15554
15604
|
// field.amis = Object.assign({}, field.amis, column);
|
|
15555
15605
|
// 如果把column合并到field.amis,column的label/width等属性不会生效,只能放外层合并
|
|
15556
15606
|
extendColumnProps = column;
|
|
15557
15607
|
}
|
|
15558
15608
|
}
|
|
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
|
-
}
|
|
15609
|
+
if (field) {
|
|
15610
|
+
let tableCell = getInputTableCell(field, showAsInlineEditMode);
|
|
15611
|
+
return Object.assign({}, tableCell, extendColumnProps);
|
|
15570
15612
|
}
|
|
15571
15613
|
else {
|
|
15572
15614
|
return column;
|
|
@@ -15574,20 +15616,226 @@ async function getInputTableColumns(props) {
|
|
|
15574
15616
|
});
|
|
15575
15617
|
}
|
|
15576
15618
|
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
|
-
}
|
|
15619
|
+
return fields.map(function (field) {
|
|
15620
|
+
let tableCell = getInputTableCell(field, showAsInlineEditMode);
|
|
15621
|
+
return tableCell;
|
|
15587
15622
|
}) || [];
|
|
15588
15623
|
}
|
|
15589
15624
|
}
|
|
15590
15625
|
|
|
15626
|
+
function getFormPagination(props) {
|
|
15627
|
+
let onPageChangeScript = `
|
|
15628
|
+
let scope = event.context.scoped;
|
|
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,直接变更其值即可改变表单中的值
|
|
15633
|
+
let pageChangeDirection = context.props.pageChangeDirection;
|
|
15634
|
+
let currentPage = event.data.__page;
|
|
15635
|
+
let currentIndex = event.data.index;
|
|
15636
|
+
|
|
15637
|
+
// 翻页到下一页之前需要先把当前页改动的内容保存到中间变量changedItems中
|
|
15638
|
+
let currentFormValues = scope.getComponentById(__formId).getValues();
|
|
15639
|
+
fieldValue[currentIndex] = currentFormValues;
|
|
15640
|
+
// // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
|
|
15641
|
+
// doAction({
|
|
15642
|
+
// "componentId": __wrapperServiceId,
|
|
15643
|
+
// "actionType": "setValue",
|
|
15644
|
+
// "args": {
|
|
15645
|
+
// "value": {
|
|
15646
|
+
// "__changedItems": fieldValue
|
|
15647
|
+
// }
|
|
15648
|
+
// }
|
|
15649
|
+
// });
|
|
15650
|
+
// 如果翻页到下一页前需要同时把改动的内容保存到最终正式的表单字段中,需要额外给正式表单字段执行一次setValue
|
|
15651
|
+
// 但是同时保存到正式表单字段中会造成翻页后点击取消无法取消翻页之前的改动内容
|
|
15652
|
+
// doAction({
|
|
15653
|
+
// "componentId": "${props.id}",
|
|
15654
|
+
// "actionType": "setValue",
|
|
15655
|
+
// "args": {
|
|
15656
|
+
// "value": fieldValue
|
|
15657
|
+
// }
|
|
15658
|
+
// });
|
|
15659
|
+
|
|
15660
|
+
// 以下是翻页逻辑,翻到下一页并把下一页内容显示到表单上
|
|
15661
|
+
let targetPage;
|
|
15662
|
+
if(pageChangeDirection === "next"){
|
|
15663
|
+
targetPage = currentPage + 1;
|
|
15664
|
+
}
|
|
15665
|
+
else{
|
|
15666
|
+
targetPage = currentPage - 1;
|
|
15667
|
+
}
|
|
15668
|
+
let targetIndex = targetPage - 1;//input-table组件行索引,从0开始的索引
|
|
15669
|
+
// let targetFormData = __changedItems[targetIndex];
|
|
15670
|
+
doAction({
|
|
15671
|
+
"actionType": "setValue",
|
|
15672
|
+
"componentId": __paginationServiceId,
|
|
15673
|
+
"args": {
|
|
15674
|
+
"value": {
|
|
15675
|
+
"__page": targetPage,
|
|
15676
|
+
"index": targetIndex
|
|
15677
|
+
}
|
|
15678
|
+
}
|
|
15679
|
+
});
|
|
15680
|
+
// 这里不用进一步把表单内容setValue到form中,是因为编辑表单中schemaApi监听了行索引index的变化,其值变化时会重新build整个form
|
|
15681
|
+
// doAction({
|
|
15682
|
+
// "actionType": "setValue",
|
|
15683
|
+
// "componentId": __formId,
|
|
15684
|
+
// "args": {
|
|
15685
|
+
// "value": targetFormData
|
|
15686
|
+
// },
|
|
15687
|
+
// "dataMergeMode": "override"// amis 3.2不支持override模式,高版本才支持
|
|
15688
|
+
// });
|
|
15689
|
+
`;
|
|
15690
|
+
return {
|
|
15691
|
+
"type": "wrapper",
|
|
15692
|
+
"className": "py-2",
|
|
15693
|
+
"body": [
|
|
15694
|
+
{
|
|
15695
|
+
"type": "button",
|
|
15696
|
+
"label": "",
|
|
15697
|
+
"icon": `fa fa-angle-left`,
|
|
15698
|
+
"level": "link",
|
|
15699
|
+
"pageChangeDirection": "prev",
|
|
15700
|
+
"disabledOn": "${__page <= 1}",
|
|
15701
|
+
"size": "sm",
|
|
15702
|
+
"onEvent": {
|
|
15703
|
+
"click": {
|
|
15704
|
+
"actions": [
|
|
15705
|
+
{
|
|
15706
|
+
"actionType": "custom",
|
|
15707
|
+
"script": onPageChangeScript
|
|
15708
|
+
}
|
|
15709
|
+
]
|
|
15710
|
+
}
|
|
15711
|
+
}
|
|
15712
|
+
},
|
|
15713
|
+
{
|
|
15714
|
+
"type": "tpl",
|
|
15715
|
+
"tpl": "${__page}/${__total}"
|
|
15716
|
+
},
|
|
15717
|
+
{
|
|
15718
|
+
"type": "button",
|
|
15719
|
+
"label": "",
|
|
15720
|
+
"icon": `fa fa-angle-right`,
|
|
15721
|
+
"level": "link",
|
|
15722
|
+
"pageChangeDirection": "next",
|
|
15723
|
+
"disabledOn": "${__page >= __total}",
|
|
15724
|
+
"size": "sm",
|
|
15725
|
+
"onEvent": {
|
|
15726
|
+
"click": {
|
|
15727
|
+
"actions": [
|
|
15728
|
+
{
|
|
15729
|
+
"actionType": "custom",
|
|
15730
|
+
"script": onPageChangeScript
|
|
15731
|
+
}
|
|
15732
|
+
]
|
|
15733
|
+
}
|
|
15734
|
+
}
|
|
15735
|
+
}
|
|
15736
|
+
]
|
|
15737
|
+
}
|
|
15738
|
+
}
|
|
15739
|
+
|
|
15740
|
+
/**
|
|
15741
|
+
* 传入formSchema输出带翻页容器的wrapper
|
|
15742
|
+
* @param {*} props input-table组件props
|
|
15743
|
+
* @param {*} form formSchema
|
|
15744
|
+
* @param {*} mode edit/readonly
|
|
15745
|
+
* @returns 带翻页容器的wrapper
|
|
15746
|
+
*/
|
|
15747
|
+
function getFormPaginationWrapper(props, form, mode) {
|
|
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
|
+
});
|
|
15761
|
+
let formBody = [
|
|
15762
|
+
{
|
|
15763
|
+
"type": "wrapper",
|
|
15764
|
+
"size": "none",
|
|
15765
|
+
"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",
|
|
15766
|
+
"body": [
|
|
15767
|
+
getFormPagination(props)
|
|
15768
|
+
]
|
|
15769
|
+
},
|
|
15770
|
+
{
|
|
15771
|
+
"type": "service",
|
|
15772
|
+
"body": [
|
|
15773
|
+
innerForm
|
|
15774
|
+
],
|
|
15775
|
+
"data": {
|
|
15776
|
+
"&": "${__parentForm}"
|
|
15777
|
+
}
|
|
15778
|
+
}
|
|
15779
|
+
];
|
|
15780
|
+
let onServiceInitedScript = `
|
|
15781
|
+
// 以下脚本在inlineEditMode模式时才有必要执行(不过执行了也没有坏处,纯粹是没必要),是为了解决:
|
|
15782
|
+
// inlineEditMode模式时,用户在表格单元格中直接修改数据,然后弹出的表单form中并没有包含单元格中修改的内容
|
|
15783
|
+
// 思路是每次弹出form之前先把其changedItems同步更新为最新值,这样就能在弹出form中包含单元格中做的修改
|
|
15784
|
+
// 注意:service init事件只会在每次弹出窗口时才执行,在触发翻页时并不会触发service init事件
|
|
15785
|
+
let inlineEditMode = ${props.inlineEditMode};
|
|
15786
|
+
if(!inlineEditMode){
|
|
15787
|
+
return;
|
|
15788
|
+
}
|
|
15789
|
+
let scope = event.context.scoped;
|
|
15790
|
+
let __wrapperServiceId = event.data.__wrapperServiceId;
|
|
15791
|
+
let wrapperService = scope.getComponentById(__wrapperServiceId);
|
|
15792
|
+
let wrapperServiceData = wrapperService.getData();
|
|
15793
|
+
let lastestFieldValue = wrapperServiceData["${props.name}"];//这里不可以用event.data["${props.name}"]因为amis input talbe有一层单独的作用域,其值会延迟一拍
|
|
15794
|
+
//不可以直接像event.data.__changedItems = originalFieldValue; 这样整个赋值,否则作用域会断
|
|
15795
|
+
event.data.__changedItems.forEach(function(n,i){
|
|
15796
|
+
event.data.__changedItems[i] = lastestFieldValue[i];
|
|
15797
|
+
});
|
|
15798
|
+
`;
|
|
15799
|
+
let schema = {
|
|
15800
|
+
"type": "service",
|
|
15801
|
+
"id": serviceId,
|
|
15802
|
+
"schemaApi": {
|
|
15803
|
+
"url": "${context.rootUrl}/graphql?rebuildOn=${index}",
|
|
15804
|
+
// "url": "${context.rootUrl}/graphql",
|
|
15805
|
+
"method": "post",
|
|
15806
|
+
"headers": {
|
|
15807
|
+
"Authorization": "Bearer ${context.tenantId},${context.authToken}"
|
|
15808
|
+
},
|
|
15809
|
+
"requestAdaptor": "api.data={query: '{spaces__findOne(id: \"none\"){_id,name}}'};return api;",
|
|
15810
|
+
"adaptor": `
|
|
15811
|
+
const formBody = ${JSON.stringify(formBody)};
|
|
15812
|
+
return {
|
|
15813
|
+
"body": formBody
|
|
15814
|
+
}
|
|
15815
|
+
`
|
|
15816
|
+
},
|
|
15817
|
+
// "body": formBody,
|
|
15818
|
+
"data": {
|
|
15819
|
+
"__page": "${index + 1}",
|
|
15820
|
+
// "__total": `\${${props.name}.length}`,
|
|
15821
|
+
"__total": totalValue,
|
|
15822
|
+
"__paginationServiceId": serviceId,
|
|
15823
|
+
"__formId": form.id
|
|
15824
|
+
},
|
|
15825
|
+
"onEvent": {
|
|
15826
|
+
"init": {
|
|
15827
|
+
"actions": [
|
|
15828
|
+
{
|
|
15829
|
+
"actionType": "custom",
|
|
15830
|
+
"script": onServiceInitedScript
|
|
15831
|
+
}
|
|
15832
|
+
]
|
|
15833
|
+
}
|
|
15834
|
+
}
|
|
15835
|
+
};
|
|
15836
|
+
return schema;
|
|
15837
|
+
}
|
|
15838
|
+
|
|
15591
15839
|
/**
|
|
15592
15840
|
* @param {*} props
|
|
15593
15841
|
* @param {*} mode edit/new/readonly
|
|
@@ -15595,29 +15843,62 @@ async function getInputTableColumns(props) {
|
|
|
15595
15843
|
async function getForm(props, mode = "edit") {
|
|
15596
15844
|
let formFields = getFormFields(props, mode);
|
|
15597
15845
|
let body = await getFormBody(null, formFields);
|
|
15846
|
+
let forId = `form_popup__${props.id}`;
|
|
15598
15847
|
let schema = {
|
|
15599
15848
|
"type": "form",
|
|
15849
|
+
"id": forId,
|
|
15600
15850
|
"title": "表单",
|
|
15601
15851
|
"debug": false,
|
|
15602
15852
|
"mode": "normal",
|
|
15603
15853
|
"body": body,
|
|
15854
|
+
"wrapWithPanel": false,
|
|
15855
|
+
"canAccessSuperData": false,
|
|
15604
15856
|
"className": "steedos-object-form steedos-amis-form"
|
|
15605
15857
|
};
|
|
15606
15858
|
if (mode === "edit") {
|
|
15859
|
+
let onEditItemSubmitScript = `
|
|
15860
|
+
// let fieldValue = _.cloneDeep(event.data["${props.name}"]);
|
|
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));
|
|
15866
|
+
doAction({
|
|
15867
|
+
"componentId": "${props.id}",
|
|
15868
|
+
"actionType": "setValue",
|
|
15869
|
+
"args": {
|
|
15870
|
+
"value": fieldValue
|
|
15871
|
+
}
|
|
15872
|
+
});
|
|
15873
|
+
// // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
|
|
15874
|
+
// doAction({
|
|
15875
|
+
// "componentId": event.data.__wrapperServiceId,
|
|
15876
|
+
// "actionType": "setValue",
|
|
15877
|
+
// "args": {
|
|
15878
|
+
// "value": {
|
|
15879
|
+
// "__changedItems": fieldValue
|
|
15880
|
+
// }
|
|
15881
|
+
// }
|
|
15882
|
+
// });
|
|
15883
|
+
`;
|
|
15607
15884
|
Object.assign(schema, {
|
|
15608
15885
|
"onEvent": {
|
|
15609
15886
|
"submit": {
|
|
15610
15887
|
"weight": 0,
|
|
15611
15888
|
"actions": [
|
|
15889
|
+
// {
|
|
15890
|
+
// "actionType": "setValue",
|
|
15891
|
+
// "args": {
|
|
15892
|
+
// "index": "${index}",
|
|
15893
|
+
// "value": {
|
|
15894
|
+
// "&": "$$"
|
|
15895
|
+
// }
|
|
15896
|
+
// },
|
|
15897
|
+
// "componentId": props.id
|
|
15898
|
+
// }
|
|
15612
15899
|
{
|
|
15613
|
-
"actionType": "
|
|
15614
|
-
"
|
|
15615
|
-
"index": "${index}",
|
|
15616
|
-
"value": {
|
|
15617
|
-
"&": "$$"
|
|
15618
|
-
}
|
|
15619
|
-
},
|
|
15620
|
-
"componentId": props.id
|
|
15900
|
+
"actionType": "custom",
|
|
15901
|
+
"script": onEditItemSubmitScript
|
|
15621
15902
|
}
|
|
15622
15903
|
]
|
|
15623
15904
|
}
|
|
@@ -15626,10 +15907,11 @@ async function getForm(props, mode = "edit") {
|
|
|
15626
15907
|
}
|
|
15627
15908
|
else if (mode === "new") {
|
|
15628
15909
|
let onNewItemSubmitScript = `
|
|
15629
|
-
let fieldValue = _.cloneDeep(event.data["${props.name}"]);
|
|
15630
|
-
if(!
|
|
15631
|
-
|
|
15910
|
+
// let fieldValue = _.cloneDeep(event.data["${props.name}"]);
|
|
15911
|
+
if(!event.data.__changedItems){
|
|
15912
|
+
event.data.__changedItems = [];
|
|
15632
15913
|
}
|
|
15914
|
+
let fieldValue = event.data.__changedItems;
|
|
15633
15915
|
fieldValue.push(JSON.parse(JSON.stringify(event.data)));
|
|
15634
15916
|
doAction({
|
|
15635
15917
|
"componentId": "${props.id}",
|
|
@@ -15638,6 +15920,16 @@ async function getForm(props, mode = "edit") {
|
|
|
15638
15920
|
"value": fieldValue
|
|
15639
15921
|
}
|
|
15640
15922
|
});
|
|
15923
|
+
// // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
|
|
15924
|
+
// doAction({
|
|
15925
|
+
// "componentId": event.data.__wrapperServiceId,
|
|
15926
|
+
// "actionType": "setValue",
|
|
15927
|
+
// "args": {
|
|
15928
|
+
// "value": {
|
|
15929
|
+
// "__changedItems": fieldValue
|
|
15930
|
+
// }
|
|
15931
|
+
// }
|
|
15932
|
+
// });
|
|
15641
15933
|
`;
|
|
15642
15934
|
Object.assign(schema, {
|
|
15643
15935
|
"onEvent": {
|
|
@@ -15663,6 +15955,9 @@ async function getForm(props, mode = "edit") {
|
|
|
15663
15955
|
}
|
|
15664
15956
|
});
|
|
15665
15957
|
}
|
|
15958
|
+
if (mode === "edit" || mode === "readonly") {
|
|
15959
|
+
schema = getFormPaginationWrapper(props, schema, mode);
|
|
15960
|
+
}
|
|
15666
15961
|
return schema;
|
|
15667
15962
|
}
|
|
15668
15963
|
|
|
@@ -15697,11 +15992,32 @@ async function getButtonNew(props) {
|
|
|
15697
15992
|
};
|
|
15698
15993
|
}
|
|
15699
15994
|
|
|
15700
|
-
async function getButtonEdit(props) {
|
|
15995
|
+
async function getButtonEdit(props, showAsInlineEditMode) {
|
|
15996
|
+
let onCancelScript = `
|
|
15997
|
+
let scope = event.context.scoped;
|
|
15998
|
+
let __wrapperServiceId = event.data.__wrapperServiceId;
|
|
15999
|
+
let wrapperService = scope.getComponentById(__wrapperServiceId);
|
|
16000
|
+
let wrapperServiceData = wrapperService.getData();
|
|
16001
|
+
let originalFieldValue = wrapperServiceData["${props.name}"];//这里不可以用event.data["${props.name}"]因为amis input talbe有一层单独的作用域,其值会延迟一拍
|
|
16002
|
+
//不可以直接像event.data.__changedItems = originalFieldValue; 这样整个赋值,否则作用域会断,造成无法还原
|
|
16003
|
+
event.data.__changedItems.forEach(function(n,i){
|
|
16004
|
+
event.data.__changedItems[i] = originalFieldValue[i];
|
|
16005
|
+
});
|
|
16006
|
+
// 因为翻页form中用的是event.data.changedItems中的数据,所以像下面这样doAction setValue无法实现还原
|
|
16007
|
+
// doAction({
|
|
16008
|
+
// "componentId": __wrapperServiceId,
|
|
16009
|
+
// "actionType": "setValue",
|
|
16010
|
+
// "args": {
|
|
16011
|
+
// "value": {
|
|
16012
|
+
// "__changedItems": originalFieldValue
|
|
16013
|
+
// }
|
|
16014
|
+
// }
|
|
16015
|
+
// });
|
|
16016
|
+
`;
|
|
15701
16017
|
return {
|
|
15702
16018
|
"type": "button",
|
|
15703
16019
|
"label": "",
|
|
15704
|
-
"icon":
|
|
16020
|
+
"icon": `fa fa-${showAsInlineEditMode ? "expand" : "pencil"}`,//inline edit模式时显示为放开按钮,只读时显示为笔按钮
|
|
15705
16021
|
"level": "link",
|
|
15706
16022
|
"onEvent": {
|
|
15707
16023
|
"click": {
|
|
@@ -15719,7 +16035,31 @@ async function getButtonEdit(props) {
|
|
|
15719
16035
|
"showErrorMsg": true,
|
|
15720
16036
|
"showLoading": true,
|
|
15721
16037
|
"className": "app-popover",
|
|
15722
|
-
"closeOnEsc": false
|
|
16038
|
+
"closeOnEsc": false,
|
|
16039
|
+
"data": {
|
|
16040
|
+
// 这里必须加data数据映射,否则翻页功能中取changedItems值时会乱,比如翻页编辑后会把上一页中没改过的字段值带过去
|
|
16041
|
+
// 额外把华炎魔方主表记录ObjectForm中的字段值从record变量中映射到子表form中,因为子表lookup字段filtersFunction中可能依赖了主表记录中的字段值,比如“工作流规则”对象“时间触发器”字段中的“日期字段”字段
|
|
16042
|
+
// 额外把global、uiSchema也映射过去,有可能要用,后续需要用到其他变更可以这里加映射
|
|
16043
|
+
// "&": "${record || {}}",
|
|
16044
|
+
// 换成从__super来映射上级表单数据是因为对象列表视图界面中每行下拉菜单中的编辑按钮弹出的表单中的子表所在作用域中没有record变量
|
|
16045
|
+
// 映射到中间变量__parentForm而不是直接用&展开映射是为了避免表单中字段名与作用域中变量重名
|
|
16046
|
+
"__parentForm": "${__super.__super || {}}",
|
|
16047
|
+
"global": "${global}",
|
|
16048
|
+
"uiSchema": "${uiSchema}",
|
|
16049
|
+
"index": "${index}",
|
|
16050
|
+
"__changedItems": "${__changedItems}",
|
|
16051
|
+
"__wrapperServiceId": "${__wrapperServiceId}"
|
|
16052
|
+
},
|
|
16053
|
+
"onEvent": {
|
|
16054
|
+
"cancel": {
|
|
16055
|
+
"actions": [
|
|
16056
|
+
{
|
|
16057
|
+
"actionType": "custom",
|
|
16058
|
+
"script": onCancelScript
|
|
16059
|
+
}
|
|
16060
|
+
]
|
|
16061
|
+
}
|
|
16062
|
+
}
|
|
15723
16063
|
}
|
|
15724
16064
|
}
|
|
15725
16065
|
]
|
|
@@ -15732,7 +16072,7 @@ async function getButtonView(props) {
|
|
|
15732
16072
|
return {
|
|
15733
16073
|
"type": "button",
|
|
15734
16074
|
"label": "",
|
|
15735
|
-
"icon": "fa fa-external-link
|
|
16075
|
+
"icon": "fa fa-expand",//fa-external-link
|
|
15736
16076
|
"level": "link",
|
|
15737
16077
|
"onEvent": {
|
|
15738
16078
|
"click": {
|
|
@@ -15750,7 +16090,21 @@ async function getButtonView(props) {
|
|
|
15750
16090
|
"showErrorMsg": true,
|
|
15751
16091
|
"showLoading": true,
|
|
15752
16092
|
"className": "app-popover",
|
|
15753
|
-
"closeOnEsc": false
|
|
16093
|
+
"closeOnEsc": false,
|
|
16094
|
+
"actions": [],
|
|
16095
|
+
"data": {
|
|
16096
|
+
// 这里必须加data数据映射,否则翻页功能中取changedItems值时会乱,比如翻页编辑后会把上一页中没改过的字段值带过去
|
|
16097
|
+
// 额外把华炎魔方主表记录ObjectForm中的字段值从formData变量中映射到子表form中,因为子表lookup字段filtersFunction中可能依赖了主表记录中的字段值,比如“工作流规则”对象“时间触发器”字段中的“日期字段”字段
|
|
16098
|
+
// global、uiSchema等常用变量本来就在formData变量已经存在了,无需另外映射
|
|
16099
|
+
// "&": "${formData || {}}",
|
|
16100
|
+
// 换成从__super来映射上级表单数据是因为对象列表视图界面中每行下拉菜单中的编辑按钮弹出的表单中的子表所在作用域中没有formData变量
|
|
16101
|
+
// 映射到中间变量__parentForm而不是直接用&展开映射是为了避免表单中字段名与作用域中变量重名
|
|
16102
|
+
"__parentForm": "${__super.__super || {}}",
|
|
16103
|
+
"index": "${index}",
|
|
16104
|
+
"__changedItems": "${__changedItems}",
|
|
16105
|
+
"__wrapperServiceId": "${__wrapperServiceId}",
|
|
16106
|
+
"__readonlyItemsLength": `\${${props.name}.length}`
|
|
16107
|
+
}
|
|
15754
16108
|
}
|
|
15755
16109
|
}
|
|
15756
16110
|
]
|
|
@@ -15760,6 +16114,32 @@ async function getButtonView(props) {
|
|
|
15760
16114
|
}
|
|
15761
16115
|
|
|
15762
16116
|
function getButtonDelete(props) {
|
|
16117
|
+
let onDeleteItemScript = `
|
|
16118
|
+
// let fieldValue = _.cloneDeep(event.data["${props.name}"]);
|
|
16119
|
+
if(!event.data.__changedItems){
|
|
16120
|
+
event.data.__changedItems = [];
|
|
16121
|
+
}
|
|
16122
|
+
let fieldValue = event.data.__changedItems;
|
|
16123
|
+
// fieldValue.push(JSON.parse(JSON.stringify(event.data)));
|
|
16124
|
+
fieldValue.splice(event.data.index, 1)
|
|
16125
|
+
doAction({
|
|
16126
|
+
"componentId": "${props.id}",
|
|
16127
|
+
"actionType": "setValue",
|
|
16128
|
+
"args": {
|
|
16129
|
+
"value": fieldValue
|
|
16130
|
+
}
|
|
16131
|
+
});
|
|
16132
|
+
// // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
|
|
16133
|
+
// doAction({
|
|
16134
|
+
// "componentId": event.data.__wrapperServiceId,
|
|
16135
|
+
// "actionType": "setValue",
|
|
16136
|
+
// "args": {
|
|
16137
|
+
// "value": {
|
|
16138
|
+
// "__changedItems": fieldValue
|
|
16139
|
+
// }
|
|
16140
|
+
// }
|
|
16141
|
+
// });
|
|
16142
|
+
`;
|
|
15763
16143
|
return {
|
|
15764
16144
|
"type": "button",
|
|
15765
16145
|
"label": "",
|
|
@@ -15768,12 +16148,16 @@ function getButtonDelete(props) {
|
|
|
15768
16148
|
"onEvent": {
|
|
15769
16149
|
"click": {
|
|
15770
16150
|
"actions": [
|
|
16151
|
+
// {
|
|
16152
|
+
// "actionType": "deleteItem",
|
|
16153
|
+
// "args": {
|
|
16154
|
+
// "index": "${index+','}" //这里不加逗号后续会报错,语法是逗号分隔可以删除多行
|
|
16155
|
+
// },
|
|
16156
|
+
// "componentId": props.id
|
|
16157
|
+
// },
|
|
15771
16158
|
{
|
|
15772
|
-
"actionType": "
|
|
15773
|
-
"
|
|
15774
|
-
"index": "${index+','}" //这里不加逗号后续会报错,语法是逗号分隔可以删除多行
|
|
15775
|
-
},
|
|
15776
|
-
"componentId": props.id
|
|
16159
|
+
"actionType": "custom",
|
|
16160
|
+
"script": onDeleteItemScript
|
|
15777
16161
|
}
|
|
15778
16162
|
]
|
|
15779
16163
|
}
|
|
@@ -15781,18 +16165,34 @@ function getButtonDelete(props) {
|
|
|
15781
16165
|
};
|
|
15782
16166
|
}
|
|
15783
16167
|
|
|
15784
|
-
const getAmisInputTableSchema = async (props
|
|
16168
|
+
const getAmisInputTableSchema = async (props) => {
|
|
15785
16169
|
if (!props.id) {
|
|
15786
16170
|
props.id = "steedos_input_table_" + props.name + "_" + Math.random().toString(36).substr(2, 9);
|
|
15787
16171
|
}
|
|
16172
|
+
let serviceId = `service_wrapper__${props.id}`;
|
|
15788
16173
|
let buttonsForColumnOperations = [];
|
|
16174
|
+
let inlineEditMode = props.inlineEditMode;
|
|
16175
|
+
let showAsInlineEditMode = inlineEditMode && props.editable;
|
|
15789
16176
|
if (props.editable) {
|
|
15790
|
-
let
|
|
15791
|
-
|
|
16177
|
+
let showEditButton = true;
|
|
16178
|
+
if (showAsInlineEditMode) {
|
|
16179
|
+
// inline edit模式下只在有列被隐藏时才需要显示编辑按钮
|
|
16180
|
+
if (props.columns && props.columns.length > 0 && props.columns.length < props.fields.length) {
|
|
16181
|
+
showEditButton = true;
|
|
16182
|
+
}
|
|
16183
|
+
else {
|
|
16184
|
+
showEditButton = false;
|
|
16185
|
+
}
|
|
16186
|
+
}
|
|
16187
|
+
// 编辑时显示编辑按钮
|
|
16188
|
+
if (showEditButton) {
|
|
16189
|
+
let buttonEditSchema = await getButtonEdit(props, showAsInlineEditMode);
|
|
16190
|
+
buttonsForColumnOperations.push(buttonEditSchema);
|
|
16191
|
+
}
|
|
15792
16192
|
}
|
|
15793
16193
|
else {
|
|
15794
16194
|
// 只读时显示查看按钮
|
|
15795
|
-
if(props.columns && props.columns.length > 0 && props.columns.length < props.fields.length){
|
|
16195
|
+
if (props.columns && props.columns.length > 0 && props.columns.length < props.fields.length) {
|
|
15796
16196
|
// 只在有列被隐藏时才需要显示查看按钮
|
|
15797
16197
|
let buttonViewSchema = await getButtonView(props);
|
|
15798
16198
|
buttonsForColumnOperations.push(buttonViewSchema);
|
|
@@ -15816,7 +16216,7 @@ const getAmisInputTableSchema = async (props, readonly) => {
|
|
|
15816
16216
|
"id": props.id,
|
|
15817
16217
|
"columns": await getInputTableColumns(props),
|
|
15818
16218
|
// "needConfirm": false, //不可以配置为false,否则,单元格都是可编辑状态,且很多static类型无法正常显示,比如static-mapping
|
|
15819
|
-
"strictMode":
|
|
16219
|
+
"strictMode": props.strictMode,
|
|
15820
16220
|
"showTableAddBtn": false,
|
|
15821
16221
|
"showFooterAddBtn": false,
|
|
15822
16222
|
"className": props.tableClassName
|
|
@@ -15829,13 +16229,60 @@ const getAmisInputTableSchema = async (props, readonly) => {
|
|
|
15829
16229
|
"width": buttonsForColumnOperations.length > 1 ? "46px" : "20px"
|
|
15830
16230
|
});
|
|
15831
16231
|
}
|
|
16232
|
+
if (showAsInlineEditMode) {
|
|
16233
|
+
inputTableSchema.needConfirm = false;
|
|
16234
|
+
}
|
|
16235
|
+
let dataProviderInited = `
|
|
16236
|
+
// 单独维护一份中间变量changedItems,因为原变量在input-table组件有单独的作用域,翻页功能中无法维护此作用域中的行记录值
|
|
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
|
+
// });
|
|
16262
|
+
`;
|
|
15832
16263
|
let schema = {
|
|
15833
|
-
"type": "
|
|
15834
|
-
"size": "none",
|
|
16264
|
+
"type": "service",
|
|
15835
16265
|
"body": [
|
|
15836
16266
|
inputTableSchema
|
|
15837
16267
|
],
|
|
15838
|
-
"className": props.className
|
|
16268
|
+
"className": props.className,
|
|
16269
|
+
"id": serviceId,
|
|
16270
|
+
"data": {
|
|
16271
|
+
"__wrapperServiceId": serviceId
|
|
16272
|
+
},
|
|
16273
|
+
"dataProvider": {
|
|
16274
|
+
"inited": dataProviderInited
|
|
16275
|
+
},
|
|
16276
|
+
"onEvent": {
|
|
16277
|
+
"init": {
|
|
16278
|
+
"actions": [
|
|
16279
|
+
{
|
|
16280
|
+
"actionType": "custom",
|
|
16281
|
+
"script": onInitScript
|
|
16282
|
+
}
|
|
16283
|
+
]
|
|
16284
|
+
}
|
|
16285
|
+
}
|
|
15839
16286
|
};
|
|
15840
16287
|
let footerToolbar = clone(props.footerToolbar || []); //这里不clone的话,会造成死循环,应该是因为props属性变更会让组件重新渲染
|
|
15841
16288
|
if (props.addable) {
|
|
@@ -15849,10 +16296,22 @@ const getAmisInputTableSchema = async (props, readonly) => {
|
|
|
15849
16296
|
"body": footerToolbar
|
|
15850
16297
|
});
|
|
15851
16298
|
}
|
|
15852
|
-
|
|
15853
|
-
|
|
15854
|
-
|
|
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
|
+
});
|
|
15855
16313
|
}
|
|
16314
|
+
// console.log("===schema===", schema);
|
|
15856
16315
|
return schema;
|
|
15857
16316
|
};
|
|
15858
16317
|
|
|
@@ -20834,14 +21293,14 @@ function getAmisStaticFieldType(type, data_type, options) {
|
|
|
20834
21293
|
return type;
|
|
20835
21294
|
}
|
|
20836
21295
|
var AmisSteedosField = function (props) { return __awaiter(void 0, void 0, void 0, function () {
|
|
20837
|
-
var steedosField, field, _a, readonly, _b, ctx, config, fStatic, hideLabel, schema, schema, fieldAmis, schema, error_1;
|
|
20838
|
-
var _c;
|
|
20839
|
-
return __generator(this, function (
|
|
20840
|
-
switch (
|
|
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) {
|
|
20841
21300
|
case 0:
|
|
20842
21301
|
steedosField = null;
|
|
20843
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;
|
|
20844
|
-
console.log(
|
|
21303
|
+
// console.log(`AmisSteedosField`, props)
|
|
20845
21304
|
// if($schema.config && isString($schema.config)){
|
|
20846
21305
|
// $schema.config = JSON.parse($schema.config)
|
|
20847
21306
|
// props.config = $schema.config
|
|
@@ -20849,36 +21308,51 @@ var AmisSteedosField = function (props) { return __awaiter(void 0, void 0, void
|
|
|
20849
21308
|
if (isString(ctx)) {
|
|
20850
21309
|
ctx = JSON.parse(ctx);
|
|
20851
21310
|
}
|
|
20852
|
-
|
|
20853
|
-
|
|
20854
|
-
|
|
20855
|
-
steedosField = JSON.parse(config);
|
|
20856
|
-
}
|
|
21311
|
+
steedosField = config ? config : field;
|
|
21312
|
+
if (isString(steedosField)) {
|
|
21313
|
+
steedosField = JSON.parse(steedosField);
|
|
20857
21314
|
}
|
|
20858
21315
|
else {
|
|
20859
|
-
steedosField =
|
|
20860
|
-
|
|
20861
|
-
steedosField = JSON.parse(field);
|
|
20862
|
-
}
|
|
21316
|
+
// 这里要clone是因为后面图片字段类型执行steedosField.amis = ...的时候会造成input-table中的图片字段在弹出编辑表单点击确认后整个input-table组件重新渲染了,从而导致其翻页功能异常
|
|
21317
|
+
steedosField = clone(steedosField);
|
|
20863
21318
|
}
|
|
20864
|
-
|
|
21319
|
+
if (!fStatic && steedosField.readonly && !props.data.hasOwnProperty("_display")) {
|
|
21320
|
+
// 字段配置为只读,强制走fStatic模式,加上_display判断是为了不影响历史代码,比如直接在ObjectForm中调用steedos-field组件
|
|
21321
|
+
fStatic = true;
|
|
21322
|
+
}
|
|
21323
|
+
_f.label = 1;
|
|
20865
21324
|
case 1:
|
|
20866
|
-
|
|
21325
|
+
_f.trys.push([1, 16, , 17]);
|
|
20867
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;
|
|
20868
21348
|
schema = Object.assign({}, {
|
|
20869
21349
|
type: 'select',
|
|
20870
21350
|
multiple: steedosField.multiple,
|
|
20871
21351
|
name: steedosField.name,
|
|
20872
21352
|
label: steedosField.label,
|
|
20873
21353
|
static: true,
|
|
20874
|
-
className: (
|
|
20875
|
-
source:
|
|
20876
|
-
"method": "post",
|
|
20877
|
-
"url": "${context.rootUrl}/graphql",
|
|
20878
|
-
"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 "),
|
|
20879
|
-
"trackExpression": "${" + steedosField.name + "}",
|
|
20880
|
-
"cache": 3000
|
|
20881
|
-
},
|
|
21354
|
+
className: (_e = steedosField.amis) === null || _e === void 0 ? void 0 : _e.className,
|
|
21355
|
+
source: source,
|
|
20882
21356
|
}, pick(steedosField.amis || {}, ['className', 'inline', 'label', 'labelAlign', 'name', 'labelRemark', 'description', 'placeholder', 'staticClassName', 'staticLabelClassName', 'staticInputClassName', 'staticSchema']));
|
|
20883
21357
|
schema.placeholder = "";
|
|
20884
21358
|
if (hideLabel) {
|
|
@@ -20886,12 +21360,12 @@ var AmisSteedosField = function (props) { return __awaiter(void 0, void 0, void
|
|
|
20886
21360
|
}
|
|
20887
21361
|
return [2 /*return*/, schema];
|
|
20888
21362
|
case 2:
|
|
20889
|
-
if (!fStatic) return [3 /*break*/,
|
|
21363
|
+
if (!fStatic) return [3 /*break*/, 13];
|
|
20890
21364
|
if (!props.data.hasOwnProperty("_display")) return [3 /*break*/, 4];
|
|
20891
21365
|
return [4 /*yield*/, index.convertSFieldToAmisField(steedosField, readonly, ctx)];
|
|
20892
21366
|
case 3:
|
|
20893
21367
|
// 有_display时保持原来的逻辑不变,不走以下新的逻辑,审批王中会特意传入_display以跳过后面新加的代码
|
|
20894
|
-
return [2 /*return*/,
|
|
21368
|
+
return [2 /*return*/, _f.sent()];
|
|
20895
21369
|
case 4:
|
|
20896
21370
|
schema = Object.assign({}, steedosField, {
|
|
20897
21371
|
type: getAmisStaticFieldType(steedosField.type, steedosField.data_type, steedosField),
|
|
@@ -20904,27 +21378,33 @@ var AmisSteedosField = function (props) { return __awaiter(void 0, void 0, void
|
|
|
20904
21378
|
timeFormat: 'HH:mm',
|
|
20905
21379
|
format: '1970-01-01THH:mm:00.000[Z]',
|
|
20906
21380
|
});
|
|
20907
|
-
return [3 /*break*/,
|
|
21381
|
+
return [3 /*break*/, 12];
|
|
20908
21382
|
case 5:
|
|
20909
21383
|
if (!(steedosField.type === "percent")) return [3 /*break*/, 6];
|
|
20910
21384
|
Object.assign(schema, {
|
|
20911
21385
|
"percent": steedosField.scale ? steedosField.scale : true
|
|
20912
21386
|
});
|
|
20913
|
-
return [3 /*break*/,
|
|
21387
|
+
return [3 /*break*/, 12];
|
|
20914
21388
|
case 6:
|
|
20915
21389
|
if (!(steedosField.type === "password")) return [3 /*break*/, 7];
|
|
20916
21390
|
Object.assign(schema, {
|
|
20917
21391
|
"revealPassword": false //没生效,需要用样式隐藏
|
|
20918
21392
|
});
|
|
20919
|
-
return [3 /*break*/,
|
|
21393
|
+
return [3 /*break*/, 12];
|
|
20920
21394
|
case 7:
|
|
20921
21395
|
if (!(steedosField.type === "select")) return [3 /*break*/, 8];
|
|
20922
21396
|
Object.assign(schema, {
|
|
20923
21397
|
"placeholder": ""
|
|
20924
21398
|
});
|
|
20925
|
-
return [3 /*break*/,
|
|
21399
|
+
return [3 /*break*/, 12];
|
|
20926
21400
|
case 8:
|
|
20927
|
-
if (!(steedosField.type === "
|
|
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];
|
|
20928
21408
|
Object.assign(schema, {
|
|
20929
21409
|
enlargeAble: true,
|
|
20930
21410
|
showToolbar: true,
|
|
@@ -20955,21 +21435,21 @@ var AmisSteedosField = function (props) { return __awaiter(void 0, void 0, void
|
|
|
20955
21435
|
return value;
|
|
20956
21436
|
}
|
|
20957
21437
|
});
|
|
20958
|
-
return [3 /*break*/,
|
|
20959
|
-
case
|
|
20960
|
-
if (!(steedosField.type === "file")) return [3 /*break*/,
|
|
21438
|
+
return [3 /*break*/, 12];
|
|
21439
|
+
case 10:
|
|
21440
|
+
if (!(steedosField.type === "file")) return [3 /*break*/, 12];
|
|
20961
21441
|
return [4 /*yield*/, index.convertSFieldToAmisField(steedosField, readonly, ctx)];
|
|
20962
|
-
case
|
|
21442
|
+
case 11:
|
|
20963
21443
|
// 附件static模式先保持原来的逻辑,依赖_display,审批王中相关功能在creator中
|
|
20964
21444
|
// convertSFieldToAmisField中会合并steedosField.amis,所以也不需要再次合并steedosField.amis,直接return就好
|
|
20965
|
-
return [2 /*return*/,
|
|
20966
|
-
case
|
|
21445
|
+
return [2 /*return*/, _f.sent()];
|
|
21446
|
+
case 12:
|
|
20967
21447
|
Object.assign(schema, steedosField.amis || {});
|
|
20968
21448
|
if (hideLabel) {
|
|
20969
21449
|
delete schema.label;
|
|
20970
21450
|
}
|
|
20971
21451
|
return [2 /*return*/, schema];
|
|
20972
|
-
case
|
|
21452
|
+
case 13:
|
|
20973
21453
|
fieldAmis = steedosField.amis || {};
|
|
20974
21454
|
if (!props.data.hasOwnProperty("_display")) {
|
|
20975
21455
|
// 有_display时保持原来的逻辑不变,不走以下新的逻辑,审批王中会特意传入_display以跳过后面新加的代码
|
|
@@ -21027,16 +21507,19 @@ var AmisSteedosField = function (props) { return __awaiter(void 0, void 0, void
|
|
|
21027
21507
|
}
|
|
21028
21508
|
}
|
|
21029
21509
|
return [4 /*yield*/, index.convertSFieldToAmisField(steedosField, readonly, ctx)];
|
|
21030
|
-
case
|
|
21031
|
-
schema =
|
|
21510
|
+
case 14:
|
|
21511
|
+
schema = _f.sent();
|
|
21512
|
+
if (hideLabel) {
|
|
21513
|
+
delete schema.label;
|
|
21514
|
+
}
|
|
21032
21515
|
// console.log(`AmisSteedosField return schema`, schema)
|
|
21033
21516
|
return [2 /*return*/, schema];
|
|
21034
|
-
case
|
|
21035
|
-
case
|
|
21036
|
-
error_1 =
|
|
21517
|
+
case 15: return [3 /*break*/, 17];
|
|
21518
|
+
case 16:
|
|
21519
|
+
error_1 = _f.sent();
|
|
21037
21520
|
console.log("error", error_1);
|
|
21038
|
-
return [3 /*break*/,
|
|
21039
|
-
case
|
|
21521
|
+
return [3 /*break*/, 17];
|
|
21522
|
+
case 17: return [2 /*return*/, null];
|
|
21040
21523
|
}
|
|
21041
21524
|
});
|
|
21042
21525
|
}); };
|
|
@@ -21279,7 +21762,7 @@ var AmisInputTable = function (props) { return __awaiter(void 0, void 0, void 0,
|
|
|
21279
21762
|
return __generator(this, function (_a) {
|
|
21280
21763
|
switch (_a.label) {
|
|
21281
21764
|
case 0:
|
|
21282
|
-
props.$schema, props.fields, props.name, props.id, props.data, props.columns, props.amis, props.className, props.tableClassName, props.footerToolbar;
|
|
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;
|
|
21283
21766
|
return [4 /*yield*/, getAmisInputTableSchema(props)];
|
|
21284
21767
|
case 1:
|
|
21285
21768
|
amisSchema = _a.sent();
|