进阶流程图绘制工具 Unione Flow Editor-- 巧用Event事件机制,破解复杂业务交互难题
在企业级流程节点属性配置场景中,业务逻辑的复杂性往往对属性交互提出更高要求:不同审批类型需显示不同属性、必填规则随业务场景动态变化、控件选择需联动更新其他属性......而多数流程编辑器的属性交互仅支持"静态配置",无法适配这些动态复杂场景,导致配置效率低、业务适配性差。Unione Flow Editor 提供的灵活Event事件机制,通过visible、required、select等核心事件,可精准实现动态交互逻辑,让属性配置完全贴合复杂业务需求。本文将拆解属性交互的核心痛点,结合Event事件机制给出落地解决方案。
一、属性交互三大核心痛点,制约复杂业务落地
在实际业务配置中,静态属性配置往往难以应对动态场景,主要暴露以下三大痛点:
痛点1:属性显隐僵硬,无法适配多业务场景
多数流程编辑器的节点属性显隐为"固定配置",无法根据其他属性值动态调整。例如审批节点中,"指定审批人"属性在"审批类型=角色审批"时仍强制显示,"超时处理策略"在"未开启超时提醒"时依旧可见。无关属性的冗余显示不仅增加用户配置负担,还易导致配置错误,无法适配多类型、多场景的业务需求。
痛点2:必填规则固定,无法随业务逻辑动态切换
属性的"必填/非必填"规则被固定写死,无法根据业务场景动态变化。例如数据节点中,"排序字段"属性仅在"开启排序"时才需必填,但静态配置下要么始终必填(增加无关节点的配置成本),要么始终非必填(导致关键场景漏配置)。固定的必填规则无法匹配灵活的业务逻辑,降低流程配置的严谨性。
痛点3:控件交互孤立,缺乏跨属性联动逻辑
各属性控件之间相互独立,无法实现选择联动。例如在"条件分支节点"中,选择"条件类型=数值比较"后,无法自动联动显示"比较运算符""阈值"等关联属性;在"通知节点"中,选择"通知方式=短信"后,无法自动校验手机号格式并联动加载接收人列表。孤立的控件交互需用户手动切换配置,效率低且易出错。
二、Event事件机制:全维度解决复杂交互难题
针对上述痛点,Unione Flow Editor 提供的Event事件机制,通过select、visible、required、title、validate五大核心事件,实现属性交互的"全动态、高灵活"管控。每个事件可接收当前属性值(val)与全表单值(formValue),支持自定义业务逻辑,精准适配复杂场景。
解决方案1:用visible事件,实现属性动态显隐
适用场景:根据其他属性值控制当前属性的显示/隐藏,适配多业务场景的属性简化需求。
实现逻辑:通过visible事件接收formValue(全表单属性值),编写判断逻辑并返回true(显示)/false(隐藏)。
实操示例:审批节点中,仅当"审批类型=指定审批"时显示"指定审批人"属性,仅当"开启超时提醒"时显示"超时处理策略"属性:
TypeScript
registerNode([{
shape: 'approve',
props: {
// 审批类型属性(下拉选择:指定审批/角色审批/上级审批)
'base.approve.handlerType': {
name: 'approve.handlerType',
control: 'unione-select-box',
convert: {
types: 'local',
options: [
{ label: '指定审批', value: 'specify' },
{ label: '角色审批', value: 'role' },
{ label: '上级审批', value: 'superior' }
]
}
},
// 指定审批人属性:仅当审批类型=specify时显示
'base.approve.specify': {
name: 'approve.specify',
control: 'flow-candidate',
event: {
visible: (val, formValue) => {
// 核心逻辑:根据formValue中的审批类型判断显隐
return formValue.approve?.handlerType === 'specify';
}
}
},
// 开启超时提醒(开关)
'base.time.openRemind': {
name: 'time.openRemind',
control: 'unione-switch'
},
// 超时处理策略:仅当开启超时提醒时显示
'base.time.handleStrategy': {
name: 'time.handleStrategy',
control: 'unione-select-box',
convert: {
types: 'local',
options: [
{ label: '自动通过', value: 'pass' },
{ label: '自动驳回', value: 'reject' },
{ label: '提醒负责人', value: 'remind' }
]
},
event: {
visible: (val, formValue) => {
return formValue.time?.openRemind === true;
}
}
}
}
}])
效果:属性面板仅显示当前业务场景下的必要属性,冗余属性自动隐藏,降低配置难度,提升操作效率。
解决方案2:用required事件,实现动态必填规则
适用场景:根据业务逻辑动态切换属性的"必填/非必填"状态,保障配置严谨性的同时避免无关节点配置负担。
实现逻辑:通过required事件接收val与formValue,编写判断逻辑并返回true(必填)/false(非必填)。
实操示例:数据节点中,"排序字段"仅在"开启排序"时必填;"筛选条件"仅在"开启数据筛选"时必填:
TypeScript
registerNode([{
shape: 'data',
props: {
// 开启排序(开关)
'base.sorts.open': {
name: 'sorts.open',
control: 'unione-switch'
},
// 排序字段:开启排序时必填
'base.sorts.field': {
name: 'sorts.field',
control: 'flow-data-field',
event: {
required: (val, formValue) => {
// 核心逻辑:开启排序则必填
return formValue.sorts?.open === true;
}
}
},
// 开启数据筛选(开关)
'base.filter.open': {
name: 'filter.open',
control: 'unione-switch'
},
// 筛选条件:开启筛选时必填
'base.filter.condition': {
name: 'filter.condition',
control: 'flow-filter-condition',
event: {
required: (val, formValue) => {
return formValue.filter?.open === true;
}
}
}
}
}])
效果:仅在关键业务场景下要求必填配置,避免无关节点的冗余配置,同时保障核心逻辑的配置严谨性,减少流程运行错误。
解决方案3:用select+validate事件,实现跨属性联动与数据校验
适用场景:实现控件选择后的跨属性联动更新,同时对输入数据进行业务规则校验,保障数据合法性。
实现逻辑:
-
select事件:选择控件值变化时触发,可根据选择结果更新其他属性值(通过formValue关联);
-
validate事件:对当前属性值进行业务校验,返回异常信息(字符串)则表示校验失败,提示用户修正。
实操示例:通知节点中,选择"通知方式=短信"后联动校验手机号格式;选择"通知方式=邮件"后联动校验邮箱格式并自动填充默认邮件模板:
TypeScript
registerNode([{
shape: 'notice',
props: {
// 通知方式(下拉选择:短信/邮件/系统消息)
'base.notice.type': {
name: 'notice.type',
control: 'unione-select-box',
convert: {
types: 'local',
options: [
{ label: '短信', value: 'sms' },
{ label: '邮件', value: 'email' },
{ label: '系统消息', value: 'system' }
]
},
event: {
select: (val, { option, formValue }) => {
// 联动逻辑:选择邮件时,自动填充默认模板
if (val === 'email') {
// 通过formValue更新"邮件模板"属性值
formValue.notice.template = '【流程通知】您有新的审批待处理,点击查看:{link}';
}
}
}
},
// 接收人:根据通知方式校验格式
'base.notice.receiver': {
name: 'notice.receiver',
control: 'unione-input',
event: {
validate: (val, formValue) => {
const noticeType = formValue.notice?.type;
// 短信:校验手机号格式
if (noticeType === 'sms' && !/^1[3-9]\d{9}$/.test(val)) {
return '请输入正确的手机号';
}
// 邮件:校验邮箱格式
if (noticeType === 'email' && !/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/.test(val)) {
return '请输入正确的邮箱地址';
}
// 校验通过返回undefined
return undefined;
}
}
},
// 通知模板
'base.notice.template': {
name: 'notice.template',
control: 'unione-input'
}
}
}])
效果:实现控件选择与其他属性的联动更新,减少手动输入操作;同时通过实时校验保障数据合法性,避免因配置错误导致通知发送失败。
三、综合业务场景验证:Event事件机制落地闭环
以"企业采购审批流程"的审批节点配置为例,验证Event事件机制的综合应用:
【业务需求】:
-
审批类型分"普通审批""大额审批",大额审批需额外显示"财务审核人"属性;
-
大额审批的"财务审核人"为必填项,普通审批无需配置;
-
选择"大额审批"时,自动校验审批金额≥10000元,否则提示错误。
【基于Event事件的落地配置】:
TypeScript
registerNode([{
shape: 'approve',
props: {
'base.approve.type': {
name: 'approve.type',
control: 'unione-select-box',
convert: {
types: 'local',
options: [
{ label: '普通审批', value: 'normal' },
{ label: '大额审批', value: 'largeAmount' }
]
}
},
'base.approve.amount': {
name: 'approve.amount',
control: 'unione-input-number',
props: { label: '审批金额' },
event: {
validate: (val, formValue) => {
if (formValue.approve?.type === 'largeAmount' && val < 10000) {
return '大额审批金额需≥10000元';
}
return undefined;
}
}
},
'base.approve.financeAuditor': {
name: 'financeAuditor',
control: 'flow-candidate',
props: { label: '财务审核人' },
event: {
visible: (val, formValue) => {
return formValue.approve?.type === 'largeAmount';
},
required: (val, formValue) => {
return formValue.approve?.type === 'largeAmount';
}
}
}
}
}])
【落地效果】:
-
选择"普通审批"时,仅显示审批类型、审批金额属性,财务审核人自动隐藏;
-
选择"大额审批"时,自动显示财务审核人属性并标记为必填,同时校验审批金额≥10000元;
-
配置过程中实时反馈错误,保障流程配置符合业务规则,避免后续运行风险。
四、总结:Event事件机制,让属性交互适配复杂业务
主流流程编辑器的属性交互痛点,本质是"静态配置无法匹配动态业务逻辑"。Unione Flow Editor 的Event事件机制,通过visible、required、select、validate等核心事件,实现了属性显隐、必填规则、交互联动、数据校验的全动态管控。开发者可根据业务需求灵活编写事件逻辑,让节点属性配置从"被动适配工具"升级为"主动贴合业务",大幅提升流程配置的灵活性与严谨性。
无论是多场景属性适配、动态必填控制,还是跨属性联动校验,Event事件机制都能提供简洁高效的解决方案。结合前文的节点属性定制、控件开发能力,Unione Flow Editor 形成了"属性定制-控件开发-交互管控"的完整闭环,全方位支撑企业级复杂流程的数字化落地。
【资源支持】:
-
项目地址:
