2026-07-17-oa-start-flow-preview-resolved-path.md 2.5 KB

发起审批钉钉式最终路径预览 Implementation Plan

For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (- [ ]) syntax for tracking.

Goal: 条件字段未齐时底部占位「必填信息填写后,流程将自动显示」;齐后只展示命中审批链。

Architecture: preview_start_flow 收集条件字段做 resolved 门闩;通过后 _match_condition_group 单路 walk。API 改为 POST 传 formData。前端防抖刷新 + OaFlowPreview 占位态。

Tech Stack: FastAPI / SQLAlchemy;Vue 3 + Element Plus;pytest

Spec: docs/superpowers/specs/2026-07-17-oa-start-flow-preview-resolved-path-design.md


File map

File Responsibility
backend/app/services/oa_engine.py 字段收集、有值判定、单路 preview walk、resolved 返回
backend/app/api/oa_approval.py POST /templates/{id}/flow-preview
backend/tests/test_oa_flow_preview.py 纯函数 + preview 逻辑单测
web-admin/src/api/oaApproval.ts POST 客户端与类型
web-admin/src/components/oa-approval/OaFlowPreview.vue 待确定占位 UI
web-admin/src/views/oa-approval/start/index.vue formData 防抖刷新

Task 1: 后端门闩与单路 walk + 单测

Files:

  • Modify: backend/app/services/oa_engine.py
  • Create: backend/tests/test_oa_flow_preview.py
  • Modify: backend/app/api/oa_approval.py

  • [x] Step 1: 实现 _collect_condition_fields、_form_value_present;改 _walk_preview_nodes 条件分支为匹配单路;preview_start_flow 返回 {resolved, message, steps}

  • [x] Step 2: API 改为 POST,body 含 formData / initiatorSelectUserIds;保留 GET 转调空 formData(可选兼容)

  • [x] Step 3: 单测覆盖:无条件 resolved;有条件字段空;命中条件1;走默认

  • [x] Step 4: pytest backend/tests/test_oa_flow_preview.py 通过

Task 2: 前端 API + 预览组件 + 发起页

Files:

  • Modify: web-admin/src/api/oaApproval.ts
  • Modify: web-admin/src/components/oa-approval/OaFlowPreview.vue
  • Modify: web-admin/src/views/oa-approval/start/index.vue

  • [x] Step 1: fetchOaFlowPreview 改为 POST;类型加 resolved / message

  • [x] Step 2: OaFlowPreview 支持 resolved===false 占位文案

  • [x] Step 3: start/index.vue 传入 formData、防抖 watch、绑定 resolved/message

  • [x] Step 4: 更新 graphify(backend + frontend)