mirror of
https://gitee.com/baidu/amis.git
synced 2024-12-01 19:47:56 +08:00
feat:统一动作特性参数为args&更新文档 (#4095)
* feat:统一动作特性参数为args * feat:增加入参错误判断 * feat:统一动作特性参数为args
This commit is contained in:
parent
2138b4a2d8
commit
c46106b140
@ -1209,10 +1209,10 @@ Form 支持轮询初始化接口,步骤如下:
|
||||
| --------------------- | ----------------------------- | -------------- |
|
||||
| inited | 表单数据 | 初始化完成 |
|
||||
| change | 表单数据 | 值变化 |
|
||||
| formItemValidateSucc | - | 表单项校验成功 |
|
||||
| formItemValidateError | - | 表单项校验失败 |
|
||||
| validateSucc | - | 表单校验成功 |
|
||||
| validateError | - | 表单校验成功 |
|
||||
| formItemValidateSucc | 表单数据 | 表单项校验成功 |
|
||||
| formItemValidateError | 表单数据 | 表单项校验失败 |
|
||||
| validateSucc | 表单数据 | 表单校验成功 |
|
||||
| validateError | 表单数据 | 表单校验成功 |
|
||||
| submitSucc | `result: object` 接口返回内容 | 提交成功 |
|
||||
| submitFail | `error: object` 接口返回内容 | 提交失败 |
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,236 +0,0 @@
|
||||
export default {
|
||||
type: 'page',
|
||||
title: '广播(自定义事件)',
|
||||
regions: ['body', 'toolbar', 'header'],
|
||||
body: [
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_001',
|
||||
label: '发送广播事件1-表单1/2/3都在监听',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'broadcast',
|
||||
eventName: 'broadcast_1',
|
||||
args: {
|
||||
name: 'lvxj',
|
||||
age: 18,
|
||||
ld: [
|
||||
{
|
||||
name: 'ld-lv',
|
||||
age: 'ld-19'
|
||||
},
|
||||
{
|
||||
name: 'ld-xj',
|
||||
age: 'ld-21'
|
||||
}
|
||||
]
|
||||
},
|
||||
description: '一个按钮的点击事件'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_002',
|
||||
label: '发送广播事件2-表单3在监听',
|
||||
className: 'ml-2',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'broadcast',
|
||||
eventName: 'broadcast_2',
|
||||
args: {
|
||||
job: '拯救世界'
|
||||
},
|
||||
description: '一个按钮的点击事件'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'form',
|
||||
id: 'form_001',
|
||||
title: '表单1(我的权重最低)-刷新',
|
||||
name: 'form1',
|
||||
debug: true,
|
||||
data: {
|
||||
selfname: 'selfname' // 测下数据链
|
||||
},
|
||||
body: [
|
||||
{
|
||||
type: 'form',
|
||||
id: 'form_001_form_01',
|
||||
title: '表单1(我的权重最低)-刷新',
|
||||
name: 'sub-form1',
|
||||
debug: true,
|
||||
body: [
|
||||
{
|
||||
type: 'input-text',
|
||||
id: 'form_001_form_01_text_01',
|
||||
label: '名称',
|
||||
name: 'name',
|
||||
disabled: false,
|
||||
mode: 'horizontal'
|
||||
},
|
||||
{
|
||||
type: 'input-text',
|
||||
id: 'form_001_form_01_text_02',
|
||||
label: '等级',
|
||||
name: 'level',
|
||||
disabled: false,
|
||||
mode: 'horizontal'
|
||||
},
|
||||
{
|
||||
type: 'input-text',
|
||||
id: 'form_001_form_01_text_03',
|
||||
label: '昵称',
|
||||
name: 'myname',
|
||||
disabled: false,
|
||||
mode: 'horizontal'
|
||||
}
|
||||
],
|
||||
onEvent: {
|
||||
broadcast_1: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'reload',
|
||||
args: {
|
||||
level: 1,
|
||||
myname: '${event.data.name}', // 从事件数据中取
|
||||
name: '${selfname}' // 从当前渲染器上下文数据中取
|
||||
},
|
||||
preventDefault: true,
|
||||
stopPropagation: false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
type: 'form',
|
||||
name: 'form2',
|
||||
id: 'form_002',
|
||||
title: '表单2(权重2)-刷新+发Ajax',
|
||||
debug: true,
|
||||
body: [
|
||||
{
|
||||
type: 'input-text',
|
||||
id: 'form_001_text_01',
|
||||
label: '年龄',
|
||||
name: 'age',
|
||||
disabled: false,
|
||||
mode: 'horizontal'
|
||||
}
|
||||
],
|
||||
data: {
|
||||
expression: 'kkk',
|
||||
param: '1'
|
||||
},
|
||||
onEvent: {
|
||||
broadcast_1: {
|
||||
weight: 2,
|
||||
actions: [
|
||||
{
|
||||
actionType: 'reload',
|
||||
args: {
|
||||
age: '${event.data.age}'
|
||||
},
|
||||
preventDefault: false,
|
||||
stopPropagation: false,
|
||||
expression: 'expression === "kkk"' // or this.xxx
|
||||
},
|
||||
{
|
||||
actionType: 'ajax',
|
||||
args: {
|
||||
param: '2'
|
||||
},
|
||||
api: 'https://api/form/form2-ajax?param=${param}', // param=2,如果想要拿到当前域的数据需要通过args数据映射
|
||||
// api: 'https://api/form/form2-ajax?param=${name}', // param=lvxj 事件数据最终会丢给执行动作,所以这里可以拿到事件数据
|
||||
expression: 'expression === "kkk"',
|
||||
preventDefault: false,
|
||||
stopPropagation: false
|
||||
},
|
||||
{
|
||||
actionType: 'broadcast',
|
||||
eventName: 'broadcast_2',
|
||||
args: {
|
||||
job: '打怪兽'
|
||||
},
|
||||
description: '一个按钮的点击事件'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'form',
|
||||
name: 'form3',
|
||||
id: 'form_003',
|
||||
title: '表单3(权重3)-逻辑编排',
|
||||
debug: true,
|
||||
body: [
|
||||
{
|
||||
type: 'input-text',
|
||||
id: 'form_003_text_01',
|
||||
label: '职业',
|
||||
name: 'job',
|
||||
disabled: false,
|
||||
mode: 'horizontal'
|
||||
}
|
||||
],
|
||||
data: {
|
||||
loopData: [
|
||||
{
|
||||
name: 'lv',
|
||||
age: '19'
|
||||
},
|
||||
{
|
||||
name: 'xj',
|
||||
age: '21'
|
||||
}
|
||||
],
|
||||
branchCont: 18
|
||||
},
|
||||
api: 'https://api/form/form3',
|
||||
onEvent: {
|
||||
broadcast_1: {
|
||||
weight: 3,
|
||||
actions: [
|
||||
{
|
||||
actionType: 'custom',
|
||||
script:
|
||||
"doAction({actionType: 'ajax',api: 'https://api/form/form3-custom-ajax-1'});\n //event.stopPropagation();"
|
||||
}
|
||||
]
|
||||
},
|
||||
broadcast_2: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'reset-and-submit',
|
||||
api: 'https://api/form/form3-reset-and-submit',
|
||||
script: null, // 自己编排
|
||||
preventDefault: false,
|
||||
stopPropagation: false
|
||||
},
|
||||
{
|
||||
actionType: 'reload',
|
||||
args: {
|
||||
job: '${event.data.job}'
|
||||
},
|
||||
preventDefault: false,
|
||||
stopPropagation: false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
@ -17,27 +17,33 @@ export default {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发点击事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
mouseenter: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发鼠标移入事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
mouseleave: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发鼠标移出事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -68,9 +74,11 @@ export default {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发点击事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -83,9 +91,11 @@ export default {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发点击事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -109,9 +119,11 @@ export default {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发点击事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -124,9 +136,11 @@ export default {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发点击事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -144,9 +158,11 @@ export default {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发点击事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -159,9 +175,11 @@ export default {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发点击事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -186,9 +204,11 @@ export default {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发点击事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -201,9 +221,11 @@ export default {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发点击事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -230,12 +252,14 @@ export default {
|
||||
}
|
||||
],
|
||||
onEvent: {
|
||||
click: {
|
||||
change: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发点击事件'
|
||||
msg: '派发点选事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -260,27 +284,33 @@ export default {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发点击事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
mouseenter: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发鼠标移入事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
mouseleave: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发鼠标移出事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -83,7 +83,9 @@ export default {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
msg: '${activeIndex}'
|
||||
args: {
|
||||
msg: '滚动至${event.data.activeIndex}'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -1,502 +0,0 @@
|
||||
export default {
|
||||
type: 'page',
|
||||
title: '触发通用动作',
|
||||
regions: ['body', 'toolbar', 'header'],
|
||||
body: [
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_001',
|
||||
label: '发送Ajax请求',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'ajax',
|
||||
api: 'https://3xsw4ap8wah59.cfc-execute.bj.baidubce.com/api/amis-mock/mock2/form/saveForm',
|
||||
messages: {
|
||||
success: '成功了!欧耶',
|
||||
failed: '失败了呢。。'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_002',
|
||||
className: 'ml-2',
|
||||
label: '打开一个弹窗(模态)',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'dialog',
|
||||
dialog: {
|
||||
type: 'dialog',
|
||||
id: 'dialog_1',
|
||||
title: '一个模态弹窗',
|
||||
body: [
|
||||
{
|
||||
type: 'tpl',
|
||||
tpl: '<p>对,你打开了一个模态弹窗</p>',
|
||||
inline: false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_003',
|
||||
label: '关闭一个弹窗(模态)',
|
||||
className: 'ml-2',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'dialog',
|
||||
dialog: {
|
||||
type: 'dialog',
|
||||
id: 'dialog_1',
|
||||
title: '一个模态弹窗',
|
||||
body: [
|
||||
{
|
||||
type: 'button',
|
||||
label: '打开一个子弹窗,然后关闭它的父亲',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'dialog',
|
||||
dialog: {
|
||||
type: 'dialog',
|
||||
title: '一个模态子弹窗',
|
||||
body: [
|
||||
{
|
||||
type: 'button',
|
||||
label: '关闭指定弹窗(关闭父弹窗)',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'closeDialog',
|
||||
componentId: 'dialog_1'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
label: '关闭当前弹窗',
|
||||
className: 'ml-2',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'closeDialog'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_004',
|
||||
className: 'ml-2',
|
||||
label: '打开一个抽屉(模态)',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'drawer',
|
||||
drawer: {
|
||||
type: 'drawer',
|
||||
id: 'drawer_1',
|
||||
title: '一个模态抽屉',
|
||||
body: [
|
||||
{
|
||||
type: 'tpl',
|
||||
tpl: '<p>对,你打开了一个模态抽屉</p>',
|
||||
inline: false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_005',
|
||||
label: '关闭一个抽屉(模态)',
|
||||
className: 'ml-2',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'drawer',
|
||||
drawer: {
|
||||
type: 'drawer',
|
||||
id: 'drawer_1',
|
||||
title: '一个模态抽屉',
|
||||
body: [
|
||||
{
|
||||
type: 'button',
|
||||
label: '打开一个子抽屉,然后关闭它的父亲',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'drawer',
|
||||
drawer: {
|
||||
type: 'drawer',
|
||||
title: '一个模态子抽屉',
|
||||
body: [
|
||||
{
|
||||
type: 'button',
|
||||
label: '关闭指定抽屉(关闭父抽屉)',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'closeDrawer',
|
||||
componentId: 'drawer_1'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
label: '关闭当前抽屉',
|
||||
className: 'ml-2',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'closeDrawer'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_006',
|
||||
label: '打开页面',
|
||||
className: 'ml-2',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'url',
|
||||
url: 'http://www.baidu.com',
|
||||
blank: true
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_007',
|
||||
label: '打开页面(单页模式)',
|
||||
className: 'ml-2',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'link',
|
||||
link: './broadcat'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_008',
|
||||
label: '弹个提示对话框(模态)',
|
||||
className: 'ml-2',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'alert',
|
||||
msg: '该吃饭了~'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_009',
|
||||
label: '弹个确认对话框(模态)',
|
||||
className: 'ml-2',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'confirmDialog',
|
||||
title: '操作确认',
|
||||
msg: '要删除它吗?'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_010',
|
||||
label: '全局消息提示',
|
||||
className: 'ml-2',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
msgType: 'warning',
|
||||
msg: '我是一个全局警告消息,可以配置不同类型和弹出位置~',
|
||||
options: {
|
||||
position: 'top-right'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_011',
|
||||
label: '复制一段文本',
|
||||
className: 'ml-2',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'copy',
|
||||
content: 'http://www.baidu.com'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_012',
|
||||
label: '复制一段富文本',
|
||||
className: 'ml-2',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'copy',
|
||||
copyFormat: 'text/html',
|
||||
content: "<a href='http://www.baidu.com'>link</a> <b>bold</b>"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_013',
|
||||
label: '发送邮件',
|
||||
className: 'ml-2',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'email',
|
||||
to: 'amis@baidu.com',
|
||||
cc: 'baidu@baidu.com',
|
||||
subject: '这是邮件主题',
|
||||
body: '这是邮件正文'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_018',
|
||||
label: '刷新(一个表单)',
|
||||
className: 'ml-2',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'reload',
|
||||
componentId: 'form-reload'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_019',
|
||||
label: '刷新(一个下拉框)',
|
||||
className: 'ml-2',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'reload',
|
||||
componentId: 'select-reload'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_014',
|
||||
label: '显示',
|
||||
className: 'ml-2',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'show',
|
||||
componentId: 'input-text_001'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_015',
|
||||
label: '隐藏',
|
||||
className: 'ml-2',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'hidden',
|
||||
componentId: 'input-text_001' // b_001
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_016',
|
||||
label: '禁用',
|
||||
className: 'ml-2',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'disabled',
|
||||
componentId: 'form_disable'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_017',
|
||||
label: '启用',
|
||||
className: 'ml-2',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'enabled',
|
||||
componentId: 'form_disable'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
label: '刷新下拉框',
|
||||
type: 'select',
|
||||
id: 'select-reload',
|
||||
mode: 'horizontal',
|
||||
className: 'm-t',
|
||||
name: 'select',
|
||||
source:
|
||||
'https://3xsw4ap8wah59.cfc-execute.bj.baidubce.com/api/amis-mock/mock2/form/getOptions?waitSeconds=1'
|
||||
},
|
||||
{
|
||||
type: 'form',
|
||||
id: 'form-reload',
|
||||
name: 'form-reload',
|
||||
initApi:
|
||||
'https://3xsw4ap8wah59.cfc-execute.bj.baidubce.com/api/amis-mock/mock2/page/initData',
|
||||
title: '刷新表单',
|
||||
body: [
|
||||
{
|
||||
type: 'input-text',
|
||||
id: 'date-input-01',
|
||||
name: 'date',
|
||||
label: '时间戳'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
type: 'input-text',
|
||||
label: '控制显隐',
|
||||
id: 'input-text_001',
|
||||
mode: 'horizontal'
|
||||
},
|
||||
{
|
||||
type: 'form',
|
||||
id: 'form_disable',
|
||||
title: '控制状态',
|
||||
body: [
|
||||
{
|
||||
type: 'group',
|
||||
body: [
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_002',
|
||||
className: 'ml-2',
|
||||
label: '打开一个弹窗(模态)'
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
};
|
@ -1,23 +0,0 @@
|
||||
export default {
|
||||
type: 'page',
|
||||
title: '自定义JS',
|
||||
regions: ['body', 'toolbar', 'header'],
|
||||
body: [
|
||||
{
|
||||
type: 'button',
|
||||
label: '发送个请求',
|
||||
className: 'ml-2',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'custom',
|
||||
script:
|
||||
"doAction({actionType: 'ajax',api: 'https://3xsw4ap8wah59.cfc-execute.bj.baidubce.com/api/amis-mock/mock2/form/saveForm'});\n //event.stopPropagation();"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
@ -1,111 +0,0 @@
|
||||
export default {
|
||||
type: 'page',
|
||||
title: '数据传递',
|
||||
regions: ['body', 'toolbar', 'header'],
|
||||
body: [
|
||||
{
|
||||
type: 'tpl',
|
||||
tpl: '<p>从事件触发开始,整个数据流包含事件本身产生的事件数据和动作产生的动作数据,事件源头产生的数据在AMIS事件动作机制底层已经自动加入渲染器数据域,可以通过"event.data.xxx"直接获取,而部分动作产生的数据如何流动需要交互设计者进行介入,对于数据流动可以通过数据映射,将上一个动作产生的数据作为动作参数写入下一个动作。通过outputVar指定输出的变量名,通过args指定输入的参数数据</p>'
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_001',
|
||||
label: '发一个广播,携带args参数',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'broadcast',
|
||||
eventName: 'broadcast_1',
|
||||
args: {
|
||||
name: 'lvxj',
|
||||
age: 18
|
||||
},
|
||||
description: '一个按钮的点击事件'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_001',
|
||||
label: '发送Ajax请求,并把返回数据传给弹窗',
|
||||
className: 'ml-2',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'ajax',
|
||||
api: 'https://3xsw4ap8wah59.cfc-execute.bj.baidubce.com/api/amis-mock/mock2/form/saveForm',
|
||||
messages: {
|
||||
success: '成功了!欧耶',
|
||||
failed: '失败了呢。。'
|
||||
},
|
||||
outputVar: 'ajax1'
|
||||
},
|
||||
{
|
||||
actionType: 'dialog',
|
||||
args: {
|
||||
id: '${event.data.ajax1.id}'
|
||||
},
|
||||
dialog: {
|
||||
type: 'dialog',
|
||||
id: 'dialog_1',
|
||||
title: '弹框标题1',
|
||||
data: {
|
||||
id: '${id}'
|
||||
},
|
||||
body: [
|
||||
{
|
||||
type: 'form',
|
||||
debug: true,
|
||||
body: [
|
||||
{
|
||||
type: 'tpl',
|
||||
tpl: '<p>Ajax请求返回的id=${id}</p>',
|
||||
inline: false
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'form',
|
||||
name: 'form1',
|
||||
id: 'form_001',
|
||||
title: '表单1-监听广播并获取携带的参数',
|
||||
debug: true,
|
||||
body: [
|
||||
{
|
||||
type: 'input-text',
|
||||
id: 'form_001_text_01',
|
||||
label: '年龄',
|
||||
name: 'age',
|
||||
disabled: false,
|
||||
mode: 'horizontal'
|
||||
}
|
||||
],
|
||||
data: {
|
||||
name: 'amis'
|
||||
},
|
||||
onEvent: {
|
||||
broadcast_1: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'reload',
|
||||
args: {
|
||||
age: '${event.data.age}'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
@ -119,21 +119,9 @@ export default {
|
||||
change: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'dialog',
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
val: '${event.data}'
|
||||
},
|
||||
dialog: {
|
||||
title: '触发表单change事件',
|
||||
data: {
|
||||
val: '${val}'
|
||||
},
|
||||
body: [
|
||||
{
|
||||
type: 'tpl',
|
||||
tpl: '值更新:${val|json}'
|
||||
}
|
||||
]
|
||||
msg: '${event.data|json}'
|
||||
}
|
||||
}
|
||||
]
|
||||
@ -141,21 +129,9 @@ export default {
|
||||
inited: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'dialog',
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
val: '${event.data}'
|
||||
},
|
||||
dialog: {
|
||||
title: '触发表单init事件',
|
||||
data: {
|
||||
val: '${val}'
|
||||
},
|
||||
body: [
|
||||
{
|
||||
type: 'tpl',
|
||||
tpl: '表单初始化数据:${val|json}'
|
||||
}
|
||||
]
|
||||
msg: '${event.data|json}'
|
||||
}
|
||||
}
|
||||
]
|
||||
@ -163,21 +139,9 @@ export default {
|
||||
formItemValidateSucc: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'dialog',
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
val: '${event.data}'
|
||||
},
|
||||
dialog: {
|
||||
title: '触发表单项校验成功事件',
|
||||
data: {
|
||||
val: '${val}'
|
||||
},
|
||||
body: [
|
||||
{
|
||||
type: 'tpl',
|
||||
tpl: '当前表单数据:${val|json}'
|
||||
}
|
||||
]
|
||||
msg: '${event.data|json}'
|
||||
}
|
||||
}
|
||||
]
|
||||
@ -185,21 +149,9 @@ export default {
|
||||
formItemValidateError: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'dialog',
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
val: '${event.data}'
|
||||
},
|
||||
dialog: {
|
||||
title: '触发表单项校验失败事件',
|
||||
data: {
|
||||
val: '${val}'
|
||||
},
|
||||
body: [
|
||||
{
|
||||
type: 'tpl',
|
||||
tpl: '当前表单数据:${val|json}'
|
||||
}
|
||||
]
|
||||
msg: '${event.data|json}'
|
||||
}
|
||||
}
|
||||
]
|
||||
@ -207,21 +159,9 @@ export default {
|
||||
validateSucc: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'dialog',
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
val: '${event.data}'
|
||||
},
|
||||
dialog: {
|
||||
title: '触发表单校验成功事件',
|
||||
data: {
|
||||
val: '${val}'
|
||||
},
|
||||
body: [
|
||||
{
|
||||
type: 'tpl',
|
||||
tpl: '当前表单数据:${val|json}'
|
||||
}
|
||||
]
|
||||
msg: '${event.data|json}'
|
||||
}
|
||||
}
|
||||
]
|
||||
@ -229,21 +169,9 @@ export default {
|
||||
validateFail: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'dialog',
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
val: '${event.data}'
|
||||
},
|
||||
dialog: {
|
||||
title: '触发表单校验失败事件',
|
||||
data: {
|
||||
val: '${val}'
|
||||
},
|
||||
body: [
|
||||
{
|
||||
type: 'tpl',
|
||||
tpl: '当前表单数据:${val|json}'
|
||||
}
|
||||
]
|
||||
msg: '${event.data|json}'
|
||||
}
|
||||
}
|
||||
]
|
||||
@ -251,21 +179,9 @@ export default {
|
||||
submitSucc: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'dialog',
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
val: '${event.data}'
|
||||
},
|
||||
dialog: {
|
||||
title: '触发表单提交成功事件',
|
||||
data: {
|
||||
val: '${val}'
|
||||
},
|
||||
body: [
|
||||
{
|
||||
type: 'tpl',
|
||||
tpl: '保存接口返回内容:${val|json}'
|
||||
}
|
||||
]
|
||||
msg: '${event.data|json}'
|
||||
}
|
||||
}
|
||||
]
|
||||
@ -273,21 +189,9 @@ export default {
|
||||
submitFail: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'dialog',
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
val: '${event.data}'
|
||||
},
|
||||
dialog: {
|
||||
title: '触发表单提交失败事件',
|
||||
data: {
|
||||
val: '${val}'
|
||||
},
|
||||
body: [
|
||||
{
|
||||
type: 'tpl',
|
||||
tpl: '保存接口返回内容:${val|json}'
|
||||
}
|
||||
]
|
||||
msg: '${event.data|json}'
|
||||
}
|
||||
}
|
||||
]
|
||||
@ -328,21 +232,9 @@ export default {
|
||||
formItemValidateSucc: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'dialog',
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
val: '${event.data}'
|
||||
},
|
||||
dialog: {
|
||||
title: '触发表单项校验成功事件',
|
||||
data: {
|
||||
val: '${val}'
|
||||
},
|
||||
body: [
|
||||
{
|
||||
type: 'tpl',
|
||||
tpl: '当前表单数据:${val|json}'
|
||||
}
|
||||
]
|
||||
msg: '${event.data|json}'
|
||||
}
|
||||
}
|
||||
]
|
||||
@ -350,21 +242,9 @@ export default {
|
||||
formItemValidateError: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'dialog',
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
val: '${event.data}'
|
||||
},
|
||||
dialog: {
|
||||
title: '触发表单项校验失败事件',
|
||||
data: {
|
||||
val: '${val}'
|
||||
},
|
||||
body: [
|
||||
{
|
||||
type: 'tpl',
|
||||
tpl: '当前表单数据:${val|json}'
|
||||
}
|
||||
]
|
||||
msg: '${event.data|json}'
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -34,9 +34,11 @@ export default {
|
||||
},
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发clear事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -71,9 +73,11 @@ export default {
|
||||
},
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发focus事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -123,9 +127,11 @@ export default {
|
||||
},
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发clear事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -160,9 +166,11 @@ export default {
|
||||
},
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发focus事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -207,7 +215,7 @@ export default {
|
||||
actionType: 'clear',
|
||||
componentId: 'clear-input-number-receiver',
|
||||
description: '点击清空指定输入框的内容'
|
||||
},
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -223,27 +231,33 @@ export default {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发blur事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
focus: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发focus事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
change: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发change事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -287,9 +301,11 @@ export default {
|
||||
},
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发focus事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -326,9 +342,11 @@ export default {
|
||||
},
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发focus事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ export default {
|
||||
actionType: 'clear',
|
||||
componentId: 'clear-input-number-receiver',
|
||||
description: '点击清空指定输入框的内容'
|
||||
},
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -45,27 +45,33 @@ export default {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发blur事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
focus: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发focus事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
change: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发change事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -14,8 +14,8 @@ export default {
|
||||
debug: true,
|
||||
body: [
|
||||
{
|
||||
name: "input-rating-clear",
|
||||
type: "action",
|
||||
name: 'input-rating-clear',
|
||||
type: 'action',
|
||||
label: 'clear触发器',
|
||||
level: 'primary',
|
||||
onEvent: {
|
||||
@ -40,16 +40,18 @@ export default {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发change事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "input-rating-reset",
|
||||
type: "action",
|
||||
name: 'input-rating-reset',
|
||||
type: 'action',
|
||||
label: 'reset触发器',
|
||||
level: 'primary',
|
||||
onEvent: {
|
||||
@ -75,9 +77,11 @@ export default {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发change事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -8,8 +8,8 @@ export default {
|
||||
debug: true,
|
||||
body: [
|
||||
{
|
||||
name: "input-tree-clear",
|
||||
type: "action",
|
||||
name: 'input-tree-clear',
|
||||
type: 'action',
|
||||
label: 'clear触发器',
|
||||
level: 'primary',
|
||||
className: 'mr-3',
|
||||
@ -26,8 +26,8 @@ export default {
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "input-tree-reset",
|
||||
type: "action",
|
||||
name: 'input-tree-reset',
|
||||
type: 'action',
|
||||
label: 'reset触发器',
|
||||
level: 'primary',
|
||||
className: 'mr-3',
|
||||
@ -44,8 +44,8 @@ export default {
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "input-tree-expand",
|
||||
type: "action",
|
||||
name: 'input-tree-expand',
|
||||
type: 'action',
|
||||
label: 'expand触发器(openLevel: 1)',
|
||||
level: 'primary',
|
||||
className: 'mr-3',
|
||||
@ -56,15 +56,17 @@ export default {
|
||||
actionType: 'expand',
|
||||
componentId: 'input-tree-action',
|
||||
description: '点击展开',
|
||||
args: {
|
||||
openLevel: 1
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "input-tree-collapse",
|
||||
type: "action",
|
||||
name: 'input-tree-collapse',
|
||||
type: 'action',
|
||||
label: 'collapse触发器',
|
||||
level: 'primary',
|
||||
className: 'mr-3',
|
||||
@ -131,9 +133,11 @@ export default {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发change事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
add: {
|
||||
@ -149,27 +153,33 @@ export default {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发edit事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
delete: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发delete事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
loadFinished: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发loadFinished事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -1,191 +0,0 @@
|
||||
export default {
|
||||
type: 'page',
|
||||
title: '逻辑编排',
|
||||
regions: ['body', 'toolbar', 'header'],
|
||||
body: {
|
||||
type: 'form',
|
||||
data: {
|
||||
loopData: [
|
||||
{
|
||||
name: 'lv',
|
||||
age: '19'
|
||||
},
|
||||
{
|
||||
name: 'xj',
|
||||
age: '21'
|
||||
}
|
||||
],
|
||||
branchCont: 18,
|
||||
expression: 'kkk'
|
||||
},
|
||||
body: [
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_001',
|
||||
label: '条件',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'ajax',
|
||||
args: {
|
||||
param: '0'
|
||||
},
|
||||
api: 'https://api/form/ajax?param=${param}', // param=2,如果想要拿到当前域的数据需要通过args数据映射
|
||||
expression: 'expression === "kkk"'
|
||||
},
|
||||
{
|
||||
actionType: 'ajax',
|
||||
args: {
|
||||
param: '1'
|
||||
},
|
||||
api: 'https://api/form/ajax?param=${param}', // param=2,如果想要拿到当前域的数据需要通过args数据映射
|
||||
expression: 'expression === "jjj"'
|
||||
},
|
||||
{
|
||||
actionType: 'ajax',
|
||||
args: {
|
||||
param: '2'
|
||||
},
|
||||
api: 'https://api/form/ajax?param=${param}', // param=2,如果想要拿到当前域的数据需要通过args数据映射
|
||||
expression: 'expression === "kkk"'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_002',
|
||||
label: '并行',
|
||||
className: 'ml-2',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'parallel',
|
||||
children: [
|
||||
{
|
||||
actionType: 'ajax',
|
||||
api: 'https://api/form/parallel-ajax-1',
|
||||
preventDefault: false
|
||||
// stopPropagation: true
|
||||
},
|
||||
{
|
||||
actionType: 'ajax',
|
||||
api: 'https://api/form/parallel-ajax-2'
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_003',
|
||||
label: '循环',
|
||||
className: 'ml-2',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'loop',
|
||||
loopName: 'loopData',
|
||||
preventDefault: false,
|
||||
stopPropagation: false,
|
||||
args: {
|
||||
level: 3
|
||||
},
|
||||
children: [
|
||||
{
|
||||
actionType: 'reload',
|
||||
preventDefault: false,
|
||||
stopPropagation: false
|
||||
},
|
||||
{
|
||||
actionType: 'ajax',
|
||||
api: 'https://api/form/loop-ajax-1?name=${name}',
|
||||
preventDefault: false,
|
||||
stopPropagation: false
|
||||
},
|
||||
// {
|
||||
// actionType: 'break'
|
||||
// },
|
||||
{
|
||||
actionType: 'ajax',
|
||||
api: 'https://api/form/loop-ajax-2?age=${age}'
|
||||
},
|
||||
{
|
||||
actionType: 'loop',
|
||||
loopName: 'loopData',
|
||||
args: {
|
||||
level: 3
|
||||
},
|
||||
children: [
|
||||
{
|
||||
actionType: 'ajax',
|
||||
api: 'https://api/form/loop-loop-ajax-1'
|
||||
},
|
||||
{
|
||||
actionType: 'ajax',
|
||||
api: 'https://api/form/loop-loop-ajax-2?age=${age}',
|
||||
preventDefault: false,
|
||||
stopPropagation: false
|
||||
},
|
||||
{
|
||||
actionType: 'continue'
|
||||
},
|
||||
{
|
||||
actionType: 'ajax',
|
||||
api: 'https://api/form/loop-loop-ajax-3'
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_004',
|
||||
label: 'switch排他',
|
||||
className: 'ml-2',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'switch',
|
||||
preventDefault: false,
|
||||
stopPropagation: false,
|
||||
children: [
|
||||
{
|
||||
actionType: 'ajax',
|
||||
api: 'https://api/form/branch-ajax-1',
|
||||
expression: 'this.branchCont > 19',
|
||||
preventDefault: false,
|
||||
stopPropagation: true // 这里无效,因为条件不成立
|
||||
},
|
||||
{
|
||||
actionType: 'ajax',
|
||||
api: 'https://api/form/branch-ajax-2',
|
||||
expression: 'this.branchCont > 17',
|
||||
preventDefault: false,
|
||||
stopPropagation: false
|
||||
},
|
||||
{
|
||||
actionType: 'ajax',
|
||||
api: 'https://api/form/branch-ajax-3',
|
||||
expression: 'this.branchCont > 16'
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
};
|
@ -2,9 +2,11 @@ const change = {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发change事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
@ -12,9 +14,11 @@ const blur = {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发blur事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
@ -22,9 +26,11 @@ const focus = {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发focus事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
|
@ -37,8 +37,10 @@ export default {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'success',
|
||||
msg: 'API inited: <b>${date}</b>'
|
||||
msg: 'API inited: <b>${event.data.date}</b>'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -73,8 +75,10 @@ export default {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: 'SchemaAPI inited: <b>title: ${title}</b>'
|
||||
msg: 'SchemaAPI inited: <b>title: ${event.data.title}</b>'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -195,8 +199,10 @@ export default {
|
||||
{
|
||||
actionType: 'setValue',
|
||||
componentId: 'service-setvalue',
|
||||
args: {
|
||||
value: {language: ['🇨🇳 中国']}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -1,130 +0,0 @@
|
||||
export default {
|
||||
type: 'page',
|
||||
title: '事件/动作干预',
|
||||
regions: ['body', 'toolbar', 'header'],
|
||||
body: [
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_001',
|
||||
label: '联动表单1(事件干预)',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'broadcast',
|
||||
eventName: 'broadcast_1',
|
||||
args: {
|
||||
name: 'lvxj',
|
||||
age: 18
|
||||
},
|
||||
description: '一个按钮的点击事件'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
id: 'b_002',
|
||||
label: '联动表单2(动作干预)',
|
||||
className: 'ml-2',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'broadcast',
|
||||
eventName: 'broadcast_1',
|
||||
args: {
|
||||
name: 'lvxj',
|
||||
age: 18
|
||||
},
|
||||
description: '一个按钮的点击事件'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
type: 'form',
|
||||
name: 'form1',
|
||||
id: 'form_001',
|
||||
title: '表单1-刷新(刷新后,按钮的弹窗动作因为被干预,不会执行)',
|
||||
debug: true,
|
||||
body: [
|
||||
{
|
||||
type: 'input-text',
|
||||
id: 'form_001_text_01',
|
||||
label: '年龄',
|
||||
name: 'age',
|
||||
disabled: false,
|
||||
mode: 'horizontal'
|
||||
}
|
||||
],
|
||||
data: {
|
||||
expression: 'kkk',
|
||||
param: '1'
|
||||
},
|
||||
onEvent: {
|
||||
broadcast_1: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'reload',
|
||||
args: {
|
||||
age: '${event.data.age}'
|
||||
},
|
||||
preventDefault: true, // 阻止按钮的弹窗
|
||||
expression: 'expression === "kkk"' // or this.xxx
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'form',
|
||||
name: 'form2',
|
||||
id: 'form_002',
|
||||
title: '表单2-刷新+发Ajax(只执行刷新,Ajax请求被干预,不会执行)',
|
||||
debug: true,
|
||||
body: [
|
||||
{
|
||||
type: 'input-text',
|
||||
id: 'form_001_text_01',
|
||||
label: '年龄',
|
||||
name: 'age',
|
||||
disabled: false,
|
||||
mode: 'horizontal'
|
||||
}
|
||||
],
|
||||
data: {
|
||||
expression: 'kkk',
|
||||
param: '1'
|
||||
},
|
||||
onEvent: {
|
||||
broadcast_1: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'reload',
|
||||
args: {
|
||||
age: '${event.data.age}'
|
||||
},
|
||||
preventDefault: false, // 阻止按钮的弹窗
|
||||
stopPropagation: true,
|
||||
expression: 'expression === "kkk"' // or this.xxx
|
||||
},
|
||||
{
|
||||
actionType: 'ajax',
|
||||
args: {
|
||||
param: '2'
|
||||
},
|
||||
api: 'https://api/form/ajax?param=${param}', // param=2,如果想要拿到当前域的数据需要通过args数据映射
|
||||
expression: 'expression === "kkk"',
|
||||
preventDefault: false,
|
||||
stopPropagation: false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
@ -14,17 +14,19 @@ export default {
|
||||
debug: true,
|
||||
body: [
|
||||
{
|
||||
name: "switch",
|
||||
type: "switch",
|
||||
option: "开关事件",
|
||||
name: 'switch',
|
||||
type: 'switch',
|
||||
option: '开关事件',
|
||||
onEvent: {
|
||||
change: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发change事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -16,8 +16,10 @@ export default {
|
||||
{
|
||||
actionType: 'changeActiveKey',
|
||||
componentId: 'tabs-change-receiver',
|
||||
args: {
|
||||
activeKey: 0
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -35,8 +37,10 @@ export default {
|
||||
{
|
||||
actionType: 'changeActiveKey',
|
||||
componentId: 'tabs-change-receiver',
|
||||
args: {
|
||||
activeKey: 1
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -86,8 +90,10 @@ export default {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发change事件'
|
||||
msg: '更新至${event.data.value}'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -3,9 +3,11 @@ const getEventDesc = eventName => {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: `派发${eventName}事件`
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
};
|
||||
|
@ -1,6 +1,6 @@
|
||||
const wizardSchema = {
|
||||
type: 'wizard',
|
||||
initApi: '/api/mock2/form/initForm',
|
||||
initApi: '/api/mock2/form/initData',
|
||||
steps: [
|
||||
{
|
||||
title: '第一步',
|
||||
@ -34,7 +34,7 @@ const wizardSchema = {
|
||||
name: 'name'
|
||||
}
|
||||
],
|
||||
initApi: '/api/mock2/form/initForm',
|
||||
initApi: '/api/mock2/form/initData',
|
||||
api: '/api/mock2/form/saveForm?waitSeconds=2'
|
||||
},
|
||||
{
|
||||
@ -52,8 +52,10 @@ function generateEventAcions(events) {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: `派发 ${event} 事件`
|
||||
msg: `派发 ${event} 事件,数据:` + '${event.data|json}'
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
const options = [
|
||||
{
|
||||
label: 'Folder A',
|
||||
@ -33,34 +32,40 @@ const options = [
|
||||
label: 'file D',
|
||||
value: 5
|
||||
}
|
||||
]
|
||||
];
|
||||
|
||||
const onEvent = {
|
||||
blur: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发blur事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
focus: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发focus事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
change: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发change事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
add: {
|
||||
@ -76,30 +81,36 @@ const onEvent = {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发edit事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
delete: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发delete事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
loadFinished: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'toast',
|
||||
args: {
|
||||
msgType: 'info',
|
||||
msg: '派发loadFinished事件'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export default {
|
||||
type: 'page',
|
||||
@ -111,8 +122,8 @@ export default {
|
||||
debug: true,
|
||||
body: [
|
||||
{
|
||||
name: "tree-select-clear",
|
||||
type: "action",
|
||||
name: 'tree-select-clear',
|
||||
type: 'action',
|
||||
label: 'clear触发器',
|
||||
level: 'primary',
|
||||
className: 'mr-3',
|
||||
@ -129,8 +140,8 @@ export default {
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "tree-select-reset",
|
||||
type: "action",
|
||||
name: 'tree-select-reset',
|
||||
type: 'action',
|
||||
label: 'reset触发器',
|
||||
level: 'primary',
|
||||
className: 'mr-3',
|
||||
|
@ -66,12 +66,6 @@ import CRUDLinkPageSchema from './Linkage/CRUD';
|
||||
import OptionsPageSchema from './Linkage/Options';
|
||||
import OptionsLocalPageSchema from './Linkage/OptionsLocal';
|
||||
import FormSubmitSchema from './Linkage/FormSubmit';
|
||||
import CommonEventActionSchema from './EventAction/Common';
|
||||
import BroadcastEventActionSchema from './EventAction/Broadcast';
|
||||
import CustomEventActionSchema from './EventAction/Custom';
|
||||
import LogicEventActionSchema from './EventAction/Logic';
|
||||
import StopEventActionSchema from './EventAction/Stop';
|
||||
import DataFlowEventActionSchema from './EventAction/DataFlow';
|
||||
import InputEventSchema from './EventAction/InputEvent';
|
||||
import DateEventSchema from './EventAction/DateEvent';
|
||||
import SwitchEventSchema from './EventAction/SwitchEvent';
|
||||
@ -528,16 +522,6 @@ export const examples = [
|
||||
label: '事件动作机制',
|
||||
icon: 'fa fa-bullhorn',
|
||||
children: [
|
||||
{
|
||||
label: '执行通用动作',
|
||||
path: '/examples/event-action/common',
|
||||
component: makeSchemaRenderer(CommonEventActionSchema)
|
||||
},
|
||||
{
|
||||
label: '广播(自定义事件)',
|
||||
path: '/examples/event-action/broadcat',
|
||||
component: makeSchemaRenderer(BroadcastEventActionSchema)
|
||||
},
|
||||
{
|
||||
label: '执行其他组件动作',
|
||||
children: [
|
||||
@ -622,26 +606,6 @@ export const examples = [
|
||||
component: makeSchemaRenderer(ServiceEventSchema)
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: '自定义JS',
|
||||
path: '/examples/event-action/custom',
|
||||
component: makeSchemaRenderer(CustomEventActionSchema)
|
||||
},
|
||||
{
|
||||
label: '执行逻辑编排动作',
|
||||
path: '/examples/event-action/logic',
|
||||
component: makeSchemaRenderer(LogicEventActionSchema)
|
||||
},
|
||||
{
|
||||
label: '事件/动作干预',
|
||||
path: '/examples/event-action/stop',
|
||||
component: makeSchemaRenderer(StopEventActionSchema)
|
||||
},
|
||||
{
|
||||
label: '动作间数据传递',
|
||||
path: '/examples/event-action/dataflow',
|
||||
component: makeSchemaRenderer(DataFlowEventActionSchema)
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -1,9 +1,9 @@
|
||||
import omit from 'lodash/omit';
|
||||
import {Api} from '../types';
|
||||
import {normalizeApiResponseData} from '../utils/api';
|
||||
import {ServerError} from '../utils/errors';
|
||||
import {createObject, isEmpty, isVisible} from '../utils/helper';
|
||||
import {createObject, isEmpty} from '../utils/helper';
|
||||
import {RendererEvent} from '../utils/renderer-event';
|
||||
import {filter} from '../utils/tpl';
|
||||
import {
|
||||
RendererAction,
|
||||
ListenerAction,
|
||||
@ -12,12 +12,15 @@ import {
|
||||
} from './Action';
|
||||
|
||||
export interface IAjaxAction extends ListenerAction {
|
||||
args: {
|
||||
api: Api;
|
||||
messages: {
|
||||
success: string;
|
||||
failed: string;
|
||||
};
|
||||
options: object;
|
||||
[propName: string]: any;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@ -33,17 +36,21 @@ export class AjaxAction implements RendererAction {
|
||||
renderer: ListenerContext,
|
||||
event: RendererEvent<any>
|
||||
) {
|
||||
if (!renderer.props.env?.fetcher) {
|
||||
throw new Error('env.fetcher is required!');
|
||||
}
|
||||
|
||||
const env = event.context.env;
|
||||
try {
|
||||
const result = await env.fetcher(
|
||||
action.api as string,
|
||||
action.args,
|
||||
action.options ?? {}
|
||||
action.args?.api as string,
|
||||
omit(action.args ?? {}, ['api', 'options', 'messages']),
|
||||
action.args?.options ?? {}
|
||||
);
|
||||
|
||||
if (!isEmpty(result.data) || result.ok) {
|
||||
const responseData = normalizeApiResponseData(result.data);
|
||||
// 记录请求返回的数据
|
||||
// 记录请求返回的数据
|
||||
event.setData(
|
||||
createObject(
|
||||
event.data,
|
||||
@ -58,13 +65,15 @@ export class AjaxAction implements RendererAction {
|
||||
|
||||
if (!result.ok) {
|
||||
throw new ServerError(
|
||||
(action.messages && action.messages.failed) ?? result.msg,
|
||||
action.args?.messages?.failed ?? result.msg,
|
||||
result
|
||||
);
|
||||
} else {
|
||||
const msg = action.args?.messages?.success ?? result.msg;
|
||||
msg &&
|
||||
env.notify(
|
||||
'success',
|
||||
(action.messages && action.messages.success) ?? result.msg,
|
||||
msg,
|
||||
result.msgTimeout !== undefined
|
||||
? {
|
||||
closeButton: true,
|
||||
|
@ -26,7 +26,7 @@ export class BroadcastAction implements RendererAction {
|
||||
event: RendererEvent<any>
|
||||
) {
|
||||
if (!action.eventName) {
|
||||
console.warn('eventName 未定义,请定义事件名称');
|
||||
console.error('eventName 未定义,请定义事件名称');
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -49,11 +49,10 @@ export class CmptAction implements RendererAction {
|
||||
|
||||
// 数据更新
|
||||
if (action.actionType === 'setValue') {
|
||||
const value = dataMapping(action.value, event.data);
|
||||
if (component.setData) {
|
||||
return component.setData(value);
|
||||
return component.setData(action.args?.value);
|
||||
} else {
|
||||
return component.props.onChange?.(value);
|
||||
return component.props.onChange?.(action.args?.value);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4,13 +4,15 @@ import {
|
||||
RendererAction,
|
||||
ListenerAction,
|
||||
ListenerContext,
|
||||
LoopStatus,
|
||||
registerAction
|
||||
} from './Action';
|
||||
|
||||
export interface ICopyAction extends ListenerAction {
|
||||
args: {
|
||||
content: string;
|
||||
copyFormat?: string;
|
||||
[propName: string]: any;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@ -26,9 +28,13 @@ export class CopyAction implements RendererAction {
|
||||
renderer: ListenerContext,
|
||||
event: RendererEvent<any>
|
||||
) {
|
||||
if (action.content) {
|
||||
renderer.props.env.copy?.(filter(action.content, action.args, '| raw'), {
|
||||
format: action.copyFormat
|
||||
if (!renderer.props.env?.copy) {
|
||||
throw new Error('env.copy is required!');
|
||||
}
|
||||
|
||||
if (action.args?.content) {
|
||||
renderer.props.env.copy?.(action.args.content, {
|
||||
format: action.args?.copyFormat ?? 'text/html'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -8,12 +8,18 @@ import {
|
||||
} from './Action';
|
||||
|
||||
export interface IAlertAction extends ListenerAction {
|
||||
args: {
|
||||
msg: string;
|
||||
[propName: string]: any;
|
||||
};
|
||||
}
|
||||
|
||||
export interface IConfirmAction extends ListenerAction {
|
||||
args: {
|
||||
title: string;
|
||||
msg: string;
|
||||
[propName: string]: any;
|
||||
};
|
||||
}
|
||||
|
||||
export interface IDialogAction extends ListenerAction {
|
||||
@ -76,7 +82,7 @@ export class AlertAction implements RendererAction {
|
||||
renderer: ListenerContext,
|
||||
event: RendererEvent<any>
|
||||
) {
|
||||
event.context.env.alert?.(action.msg);
|
||||
event.context.env.alert?.(action.args?.msg);
|
||||
}
|
||||
}
|
||||
|
||||
@ -89,7 +95,7 @@ export class ConfirmAction implements RendererAction {
|
||||
renderer: ListenerContext,
|
||||
event: RendererEvent<any>
|
||||
) {
|
||||
event.context.env.confirm?.(action.msg, action.title);
|
||||
event.context.env.confirm?.(action.args?.msg, action.args?.title);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -11,11 +11,14 @@ import {
|
||||
} from './Action';
|
||||
|
||||
export interface IEmailAction extends ListenerAction {
|
||||
args: {
|
||||
to: string;
|
||||
cc: string;
|
||||
bcc: string;
|
||||
subject: string;
|
||||
body: string;
|
||||
[propName: string]: any;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@ -31,11 +34,8 @@ export class EmailAction implements RendererAction {
|
||||
renderer: ListenerContext,
|
||||
event: RendererEvent<any>
|
||||
) {
|
||||
const mailTo = filter(action.to, action.args);
|
||||
const mailInfo = mapValues(
|
||||
pick(action, 'cc', 'bcc', 'subject', 'body'),
|
||||
val => filter(val, action.args)
|
||||
);
|
||||
const mailTo = action.args?.to;
|
||||
const mailInfo = pick(action.args ?? {}, 'cc', 'bcc', 'subject', 'body');
|
||||
const mailStr = qs.stringify(mailInfo);
|
||||
const mailto = `mailto:${mailTo}?${mailStr}`;
|
||||
|
||||
|
@ -3,6 +3,7 @@ import {buildApi} from '../utils/api';
|
||||
import {isEmpty, isObject, qsstringify} from '../utils/helper';
|
||||
import {RendererEvent} from '../utils/renderer-event';
|
||||
import {filter} from '../utils/tpl';
|
||||
import omit from 'lodash/omit';
|
||||
import {
|
||||
RendererAction,
|
||||
ListenerAction,
|
||||
@ -11,21 +12,27 @@ import {
|
||||
} from './Action';
|
||||
|
||||
export interface ILinkAction extends ListenerAction {
|
||||
args: {
|
||||
link: string;
|
||||
url?: never;
|
||||
blank?: boolean;
|
||||
params?: {
|
||||
[key: string]: string;
|
||||
};
|
||||
[propName: string]: any;
|
||||
};
|
||||
}
|
||||
|
||||
export interface IUrlAction extends ListenerAction {
|
||||
args: {
|
||||
url: string;
|
||||
link?: never;
|
||||
blank?: boolean;
|
||||
params?: {
|
||||
[key: string]: string;
|
||||
};
|
||||
[propName: string]: any;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@ -37,7 +44,7 @@ export interface IUrlAction extends ListenerAction {
|
||||
*/
|
||||
export class LinkAction implements RendererAction {
|
||||
async run(
|
||||
action: ILinkAction | IUrlAction,
|
||||
action: ListenerAction,
|
||||
renderer: ListenerContext,
|
||||
event: RendererEvent<any>
|
||||
) {
|
||||
@ -48,16 +55,26 @@ export class LinkAction implements RendererAction {
|
||||
// 通过buildApi兼容较复杂的url情况
|
||||
let urlObj = buildApi(
|
||||
{
|
||||
url: (action.url || action.link) as string,
|
||||
url: (action.args?.url || action.args?.link) as string,
|
||||
method: 'get'
|
||||
},
|
||||
{...action.params, ...action.args},
|
||||
{
|
||||
...(action.args?.params ?? {}),
|
||||
...omit(action.args ?? {}, ['params', 'blank', 'url', 'link'])
|
||||
},
|
||||
{
|
||||
autoAppend: true
|
||||
}
|
||||
);
|
||||
|
||||
renderer.props.env.jumpTo(urlObj.url, action as Action, action.args);
|
||||
renderer.props.env.jumpTo(
|
||||
urlObj.url,
|
||||
{
|
||||
actionType: action.actionType,
|
||||
...action.args
|
||||
},
|
||||
action.args
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -13,7 +13,10 @@ import {
|
||||
import {resolveVariable} from '../utils/tpl-builtin';
|
||||
|
||||
export interface ILoopAction extends ListenerAction, LogicAction {
|
||||
args: {
|
||||
loopName: string;
|
||||
[propName: string]: any;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@ -30,18 +33,19 @@ export class LoopAction implements RendererAction {
|
||||
event: RendererEvent<any>,
|
||||
mergeData: any
|
||||
) {
|
||||
if (typeof action.loopName !== 'string') {
|
||||
console.warn('loopName 必须是字符串类型');
|
||||
const loopName = action.args?.loopName;
|
||||
if (typeof loopName !== 'string') {
|
||||
console.error('loopName 必须是字符串类型');
|
||||
return;
|
||||
}
|
||||
|
||||
const loopData = resolveVariable(action.loopName, mergeData) || [];
|
||||
const loopData = resolveVariable(loopName, mergeData) || [];
|
||||
|
||||
// 必须是数组
|
||||
if (!loopData) {
|
||||
console.warn(`没有找到数据 ${action.loopName}`);
|
||||
console.error(`没有找到数据 ${loopName}`);
|
||||
} else if (!Array.isArray(loopData)) {
|
||||
console.warn(`${action.loopName} 数据不是数组`);
|
||||
console.error(`${loopName} 数据不是数组`);
|
||||
} else if (action.children?.length) {
|
||||
// 暂存一下
|
||||
const protoData = event.data;
|
||||
@ -62,6 +66,7 @@ export class LoopAction implements RendererAction {
|
||||
if (renderer.loopStatus === LoopStatus.BREAK || event.stoped) {
|
||||
// 还原事件数据
|
||||
event.setData(protoData);
|
||||
event.stopPropagation();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -7,7 +7,10 @@ import {
|
||||
} from './Action';
|
||||
|
||||
export interface IPageGoAction extends ListenerAction {
|
||||
args: {
|
||||
delta?: number;
|
||||
[propName: string]: any;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@ -40,7 +43,7 @@ export class PageGoAction implements RendererAction {
|
||||
renderer: ListenerContext,
|
||||
event: RendererEvent<any>
|
||||
) {
|
||||
window.history.go(action.delta || 0);
|
||||
window.history.go(action.args?.delta || 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -32,8 +32,15 @@ export class ToastAction implements RendererAction {
|
||||
renderer: ListenerContext,
|
||||
event: RendererEvent<any>
|
||||
) {
|
||||
const msg = resolveVariableAndFilter(action.msg, action.args, '| raw');
|
||||
event.context.env.notify?.(action.msgType || 'info', String(msg), action);
|
||||
if (!renderer.props.env?.notify) {
|
||||
throw new Error('env.notify is required!');
|
||||
}
|
||||
|
||||
event.context.env.notify?.(
|
||||
action.args?.msgType || 'info',
|
||||
String(action.args?.msg),
|
||||
action.args
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -122,7 +122,7 @@ export default class TreeControl extends React.Component<TreeProps> {
|
||||
onChange && onChange(resetValue ?? '');
|
||||
}
|
||||
if (action.actionType === 'expand') {
|
||||
this.treeRef.syncUnFolded(this.props, action.openLevel);
|
||||
this.treeRef.syncUnFolded(this.props, action.args.openLevel);
|
||||
}
|
||||
if (action.actionType === 'collapse') {
|
||||
this.treeRef.syncUnFolded(this.props, 0);
|
||||
|
@ -648,7 +648,7 @@ export default class Wizard extends React.Component<WizardProps, WizardState> {
|
||||
const previous = store.data;
|
||||
const final = {...previous, ...values};
|
||||
|
||||
if (await this.dispatchEvent('change', {formData: final})) {
|
||||
if (await this.dispatchEvent('change', final)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -692,7 +692,7 @@ export default class Wizard extends React.Component<WizardProps, WizardState> {
|
||||
onFinished
|
||||
} = this.props;
|
||||
|
||||
if (await this.dispatchEvent('finished', {formData: store.data})) {
|
||||
if (await this.dispatchEvent('finished', store.data)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -719,7 +719,7 @@ export default class Wizard extends React.Component<WizardProps, WizardState> {
|
||||
formStore
|
||||
.saveRemote(action.api || step.api || api!, store.data, {
|
||||
onSuccess: () => {
|
||||
this.dispatchEvent('submitSucc', {formData: store.data});
|
||||
this.dispatchEvent('submitSucc', store.data);
|
||||
|
||||
if (
|
||||
!isEffectiveApi(finnalAsyncApi, store.data) ||
|
||||
|
Loading…
Reference in New Issue
Block a user