Files
zkxw/docs/superpowers/plans/2026-07-17-oa-start-flow-preview-resolved-path.md
T
2026-07-21 15:23:59 +08:00

53 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 发起审批钉钉式最终路径预览 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)
---