进阶流程图绘制工具 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(隐藏)。
实操示例:审批节点中,仅当“审批类型=指定审批”时显示“指定审批人”属性,仅当“开启超时提醒”时显示“超时处理策略”属性:
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(非必填)。
实操示例:数据节点中,“排序字段”仅在“开启排序”时必填;“筛选条件”仅在“开启数据筛选”时必填:
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事件:对当前属性值进行业务校验,返回异常信息(字符串)则表示校验失败,提示用户修正。
实操示例:通知节点中,选择“通知方式=短信”后联动校验手机号格式;选择“通知方式=邮件”后联动校验邮箱格式并自动填充默认邮件模板:
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事件的落地配置】:
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 形成了“属性定制-控件开发-交互管控”的完整闭环,全方位支撑企业级复杂流程的数字化落地。
【资源支持】:
项目地址:
GitHub(https://github.com/unione-cloud/unione-flow-editor)
Gitee(https://gitee.com/unione-cloud/unione-flow-editor)