逻辑编排
逻辑编排概述
CodeWave 逻辑编排让开发者通过可视化流程图定义业务逻辑,无需编写大量代码即可实现复杂的业务流程。
事件驱动模型
事件类型
├── 用户交互事件
│ ├── 按钮点击(onClick)
│ ├── 表单提交(onSubmit)
│ ├── 输入变化(onChange)
│ └── 页面加载(onMounted)
├── 数据事件
│ ├── 数据加载完成
│ ├── 数据保存成功/失败
│ └── 数据删除确认
└── 系统事件
├── 路由变化
├── 定时器触发
└── 消息推送动作类型
数据操作
数据操作动作
├── 查询数据(Query)
│ ├── 查询实体列表
│ ├── 查询实体详情
│ └── 自定义 SQL 查询
├── 保存数据(Save)
│ ├── 创建实体
│ ├── 更新实体
│ └── 批量操作
└── 删除数据(Delete)
├── 删除单条
└── 批量删除UI 操作
UI 操作动作
├── 显示/隐藏组件
├── 启用/禁用组件
├── 打开/关闭弹窗
├── 跳转页面(路由)
├── 显示提示(Toast/Message)
├── 显示确认框(Confirm)
└── 刷新数据流程控制
流程控制
├── 条件判断(If/Else)
│ └── 根据条件执行不同分支
├── 循环(ForEach)
│ └── 遍历数组执行操作
├── 并行执行(Parallel)
│ └── 多个动作同时执行
└── 异常处理(Try/Catch)
└── 捕获错误,执行兜底逻辑典型逻辑示例
表单提交流程
[触发] 点击「提交」按钮
↓
[动作1] 表单验证
├── 验证通过 → 继续
└── 验证失败 → 显示错误信息,终止
↓
[动作2] 显示加载状态(按钮 loading)
↓
[动作3] 调用 API 保存数据
├── 成功 → 继续
└── 失败 → 显示错误提示,隐藏 loading,终止
↓
[动作4] 显示成功提示「保存成功」
↓
[动作5] 跳转到列表页审批流程
[触发] 点击「审批通过」
↓
[动作1] 显示确认框「确认通过该申请?」
├── 取消 → 终止
└── 确认 → 继续
↓
[动作2] 更新申请状态为「已通过」
↓
[动作3] 发送通知给申请人(调用消息 API)
↓
[动作4] 刷新列表数据
↓
[动作5] 显示成功提示条件分支示例
[触发] 订单金额变化
↓
[条件] 订单金额 > 10000?
├── 是 → [动作] 显示「大额订单」标签
│ [动作] 设置需要主管审批标志
└── 否 → [条件] 订单金额 > 1000?
├── 是 → [动作] 显示「普通订单」标签
└── 否 → [动作] 显示「小额订单」标签变量管理
变量类型
变量作用域
├── 页面变量(Page Variable)
│ └── 当前页面内有效,页面销毁后清除
├── 应用变量(App Variable)
│ └── 整个应用内有效(如当前用户信息)
└── 本地存储变量(Local Storage)
└── 持久化存储,刷新后仍存在变量使用
javascript
// 定义页面变量
const pageVars = {
loading: false,
selectedIds: [],
searchKeyword: '',
currentPage: 1
}
// 在组件属性中引用
button.loading: pageVars.loading
table.selectedRowKeys: pageVars.selectedIds
// 在动作中修改
pageVars.loading = true
pageVars.searchKeyword = searchInput.valueJavaScript 扩展
对于复杂逻辑,可以直接编写 JavaScript:
javascript
// 自定义函数示例:计算折扣价格
function calculateDiscountPrice(originalPrice, discountRate, memberLevel) {
let price = originalPrice * discountRate
// 会员额外折扣
const memberDiscounts = {
'bronze': 0.98,
'silver': 0.95,
'gold': 0.90,
'platinum': 0.85
}
const memberDiscount = memberDiscounts[memberLevel] || 1
price = price * memberDiscount
return Math.round(price * 100) / 100 // 保留两位小数
}
// 在逻辑编排中调用
const finalPrice = calculateDiscountPrice(
formData.originalPrice,
0.8,
currentUser.memberLevel
)