Files
zkxw/docs/superpowers/plans/2026-07-31-oa-app-copy.md
T
zlwuandCursor 06db3bc966 feat(permission): replace OA roles with post-bound roles and assignee posts
Unify effective roles via post-role bindings, remove dedicated OA role UI, and update OA assignee resolution plus related SQL/docs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-04 17:41:04 +08:00

37 lines
1.6 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.
# OA 审批应用复制 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:** 后端 `POST /apps/{id}/copy` 原子复制 `oa_app` + 一份草稿版本;前端「更多」菜单调用并刷新列表。
**Tech Stack:** FastAPI + SQLAlchemy;Vue 3 + Element Plus
**Spec:** `docs/superpowers/specs/2026-07-31-oa-app-copy-design.md`
---
### Task 1: 后端 copy_app CRUD + API
**Files:**
- Modify: `backend/app/crud/oa_approval.py`
- Modify: `backend/app/api/oa_approval.py`
- [ ] **Step 1:** 在 `oa_approval.py` CRUD 增加 `copy_app`:查源 app → 选草稿或最新发布 → `create_app` 等价新建(名称加「复制」并截断)→ 用源 JSON 写入 draft 版本(覆盖 create 时空草稿)。
- [ ] **Step 2:** 增加路由 `POST /apps/{app_id}/copy`,返回 `_app_to_dict(..., has_draft=True)`。
### Task 2: 前端 API + 菜单
**Files:**
- Modify: `web-admin/src/api/oaApproval.ts`
- Modify: `web-admin/src/views/oa-approval/apps/index.vue`
- [ ] **Step 1:** 增加 `fetchCopyOaApp`
- [ ] **Step 2:** 「更多」增加「复制」;`handleCopy` 调用后 `loadData`
### Task 3: 验证
- [ ] 手工:复制有草稿 / 仅已发布 / 空应用;名称与未发布状态正确
- [ ] 更新 graph:`./scripts/update-graph.sh all`(或 backend + frontend)