53 lines
2.5 KiB
Markdown
53 lines
2.5 KiB
Markdown
# 发起审批钉钉式最终路径预览 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)
|
||
|
||
---
|