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: 独立表 oa_instance_draft 存发起人填写草稿;提交时复用 oa_engine.start_instance,成功后软删草稿。前端在发起弹窗加「暂存草稿」,新建 drafts/index.vue 列表页。
Tech Stack: FastAPI + SQLAlchemy + MySQL;Vue 3 + Element Plus;Fresh Mint UI。
Spec: docs/superpowers/specs/2026-08-06-oa-approval-instance-draft-design.md
UI Demo: docs/demos/oa-approval-draft-box-demo.html
| 文件 | 职责 |
|---|---|
docs/sql/oa_instance_draft.sql |
建表 + sys_menu 草稿箱 |
backend/app/models/models.py |
OaInstanceDraft |
backend/app/crud/oa_instance_draft.py |
草稿 CRUD |
backend/app/api/oa_approval.py |
drafts 路由 |
backend/tests/test_oa_instance_draft.py |
权限/序列化/提交后软删等单测 |
web-admin/src/api/oaApproval.ts |
drafts API |
web-admin/src/router/modules/sqxp.ts |
路由「草稿箱」 |
web-admin/src/views/oa-approval/drafts/index.vue |
草稿箱页 |
web-admin/src/views/oa-approval/start/index.vue |
暂存按钮 + draftId 回填 |
待同步到生产的sql脚本 |
追加本 SQL 引用说明(若团队习惯) |
Files:
Create: docs/sql/oa_instance_draft.sql
[x] Step 1: 编写 SQL
[x] Step 2: 本地执行 SQL(若有 DB) — 脚本已写入 docs/sql/oa_instance_draft.sql,需在目标库手动执行
[x] Step 3: Commit — 待用户要求再提交
Files:
Modify: backend/app/models/models.py(紧挨 OaInstance 之前或之后)
[ ] Step 1: 增加 OaInstanceDraft
[ ] Step 2: Commit feat(backend): add OaInstanceDraft model.
Files:
backend/app/crud/oa_instance_draft.pybackend/app/api/oa_approval.pyCreate: backend/tests/test_oa_instance_draft.py
[ ] Step 1: 写失败/单元测试(_row_to_dict 字段、owner 校验逻辑可用纯函数;提交后 del_flag 行为可用 mock Session)
[ ] Step 2: 实现 CRUD
list_drafts, get_draft, create_draft, update_draft, soft_delete, batch_soft_deleteOaApp 取 appName、version_no;仅 owner_user_id[ ] Step 3: 挂路由
/drafts/drafts/{id}/drafts/batch-delete/drafts/{id}/submit → start_instance + soft delete[ ] Step 4: pytest 通过
[ ] Step 5: Commit feat(backend): OA instance draft CRUD and submit API.
Files:
web-admin/src/api/oaApproval.tsweb-admin/src/router/modules/sqxp.ts(发起审批与待办之间插入 drafts)Modify: web-admin/src/types/api.d.ts(若有 OA 类型需补)
[ ] Step 1: API 封装
[ ] Step 2: 路由 meta.title=草稿箱, menuCode=oa:drafts
[ ] Step 3: Commit
Files:
Create: web-admin/src/views/oa-approval/drafts/index.vue
[ ] Step 1: 按 Demo +「我发起的」模式做列表(筛选、表格、分页、操作列 min-width≥260、状态 Tag)
[ ] Step 2: 编辑打开弹窗(可内嵌复用 start 逻辑或跳转 start?draftId=)——采用 start?draftId=** 减少重复
[ ] Step 3: 提交/删除/批量删除接线
[ ] Step 4: Commit
Files:
Modify: web-admin/src/views/oa-approval/start/index.vue
[ ] Step 1: footer 增加「暂存草稿」(取消 / 暂存 / 提交;主色仅提交)
[ ] Step 2: route.query.draftId 加载详情并回填;保存走 PUT
[ ] Step 3: 暂存成功提示并关弹窗
[ ] Step 4: Commit
./scripts/update-graph.sh all(或 backend+frontend)App.vue panelTitleBarTextRules 含「草稿箱」(若需要竖条)