@leadal/flowstream-ui-plus 0.0.2 → 0.0.3

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.
@@ -292,12 +292,21 @@ const firstHandleNodes = result.data || []
292
292
  import flowstream from '@leadal/flowstream-ui-plus'
293
293
 
294
294
  async function submit() {
295
- await flowstream.getRuntimeService().start({
295
+ const result = await flowstream.getRuntimeService().start({
296
296
  processDefinitionId,
297
297
  draftUserId: currentUser.id,
298
298
  draftUserName: currentUser.name,
299
299
  business: { key: businessId, name: businessName },
300
300
  variables,
301
+ async onBeforeStart(startArgs) {
302
+ const formData = await openBusinessForm()
303
+ if (!formData) return false
304
+ startArgs.variables = { ...startArgs.variables, ...formData }
305
+ return true
306
+ },
307
+ async onBeforeSend(context) {
308
+ return validateBeforeSend(context)
309
+ },
301
310
  onStarted(result) {
302
311
  saveFlowRelation(result.processInstanceId)
303
312
  },
@@ -306,22 +315,28 @@ async function submit() {
306
315
  refreshBusinessList()
307
316
  },
308
317
  onClose() {
309
- console.log('发送弹窗已关闭,流程实例仍然存在')
318
+ console.log('发送弹窗已关闭;未发送时流程实例会被撤销')
310
319
  },
311
320
  onError(error) {
312
321
  console.error(error.phase, error.message)
313
322
  },
314
323
  })
324
+ if (result === false) return
315
325
  }
316
326
  ```
317
327
 
318
- - `start()` 内部依次完成首办节点解析、`quickStart`、发送弹窗初始化、下一节点和候选办理人查询。
328
+ - `onBeforeStart(args)` 在任何流程查询和启动接口之前执行,支持 `boolean | Promise<boolean>`;返回 `false` 时不会创建流程实例,`start()` 返回 `false`。
329
+ - `start()` 通过启动校验后,内部依次完成首办节点解析、`quickStart`、发送弹窗初始化、下一节点和候选办理人查询。
330
+ - `onBeforeSend(context)` 在实例创建成功后、审批人选择弹窗打开前执行,也支持 Promise;返回 `false` 时保留流程实例和当前会话,但不打开弹窗。
331
+ - 条件稍后满足时调用 `await flowstream.getRuntimeService().open()`,组件会重新执行 `onBeforeSend`;决定放弃时调用 `close()` 撤销实例并释放会话。
319
332
  - 调用成功后直接打开选择弹窗,业务模板不需要挂载隐藏组件。
320
333
  - 候选办理人可以有多个;`singleAssignee` 默认开启,每个下一节点只能选择一人。
321
334
  - 用户确认后由内部发送组件调用 `sendTask()`;`onAfterSend` 参数中的 `sendData.flowNodeAssignees` 是实际发送的下一节点和办理人。
322
- - 用户关闭弹窗只会取消本次发送,不会撤销已启动实例;可调用 `flowstream.getRuntimeService().open()` 重新打开。
335
+ - 用户未发送就关闭弹窗时会撤销刚创建的流程实例并释放会话;只有 `onBeforeSend` 返回 `false`、弹窗尚未打开时,才能调用 `open()` 在条件满足后继续。
323
336
  - `processDefinitionId`、`draftUserId`、`draftUserName` 均为必填;快速启动不支持多个首办节点或多个起草人待办。
324
337
 
338
+ 业务表单弹窗应由接入项目实现,并将用户操作转换为 Promise:确认且校验成功时 `resolve(true)`,取消、关闭或组件卸载时 `resolve(false)`。不要只修改一个响应式布尔变量而不结束 Promise,否则 `start()` 会一直等待。
339
+
325
340
  ## 14. 获取应用与流程
326
341
 
327
342
  业务页面需要「选应用 → 选流程 → 发起」级联场景时,可查询应用列表和流程定义列表。
@@ -358,4 +373,3 @@ const flows = await flowstream.getRuntimeService().getFlows({ appId })
358
373
  - 接口约定(路径待后端确认):`POST /flowstream/server/repository/app/event/list`、`POST /flowstream/server/repository/flowdef/event/list`。
359
374
  - `FlowApp`、`FlowDefinition` 类型已从库中导出,字段以后端实际返回为准。
360
375
  - 拿到流程定义后,将 `flow.id` 作为 `processDefinitionId` 传给 `runtimeService.start()` 即可完成发起。
361
-
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leadal/flowstream-ui-plus",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "description": "FlowStream workflow components for Vue 3",
5
5
  "type": "module",
6
6
  "main": "dist/flowstream-ui-plus.umd.cjs",