From e93edc77f43bc9b9e1be188f3ab66f6bae6ff863 Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Thu, 6 Aug 2026 14:58:23 +0800 Subject: [PATCH] chore: update graphify and add drafts inline-edit plan. Co-authored-by: Cursor --- ...2026-08-06-oa-drafts-inline-edit-dialog.md | 389 ++ .../graphify-out/.graphify_analysis.json | 3671 +++++------ web-admin/graphify-out/.graphify_extract.json | 787 ++- web-admin/graphify-out/GRAPH_REPORT.md | 322 +- web-admin/graphify-out/graph.html | 8 +- web-admin/graphify-out/graph.json | 5802 +++++++++-------- web-admin/graphify-out/manifest.json | 13 +- 7 files changed, 6100 insertions(+), 4892 deletions(-) create mode 100644 docs/superpowers/plans/2026-08-06-oa-drafts-inline-edit-dialog.md diff --git a/docs/superpowers/plans/2026-08-06-oa-drafts-inline-edit-dialog.md b/docs/superpowers/plans/2026-08-06-oa-drafts-inline-edit-dialog.md new file mode 100644 index 00000000..45666986 --- /dev/null +++ b/docs/superpowers/plans/2026-08-06-oa-drafts-inline-edit-dialog.md @@ -0,0 +1,389 @@ +# 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:** 从 `start/index.vue` 抽出 `OaStartFormDialog.vue`(表单 + Kit + 流程预览 + 保存/提交);发起页与草稿箱共用。草稿箱 `openForDraft(draftId)` 回显;列表快捷提交失败时打开同一弹窗。 + +**Tech Stack:** Vue 3 + Element Plus + form-create;既有 `@/api/oaApproval` 草稿 API(无后端改动)。 + +**Spec:** `docs/superpowers/specs/2026-08-06-oa-drafts-inline-edit-dialog-design.md` + +--- + +## File map + +| 文件 | 职责 | +|------|------| +| `web-admin/src/components/oa-approval/OaStartFormDialog.vue` | **新建**:发起/编辑草稿共用弹窗(从 start 抽出) | +| `web-admin/src/views/oa-approval/start/index.vue` | 保留模板卡片列表;弹窗改为挂载共用组件;深链仍打开弹窗 | +| `web-admin/src/views/oa-approval/drafts/index.vue` | 去掉跳转;挂载共用组件;编辑/提交失败走弹窗 | + +后端与 `oaApproval.ts` API:**不改**。 + +--- + +## Public API(`OaStartFormDialog`) + +组件通过 `defineExpose` 暴露: + +```ts +/** 选模板后新建发起(清空草稿态) */ +function openForApp(appRow: { id: string; appName?: string; [k: string]: any }): Promise + +/** + * 打开并回显草稿。 + * @param draftId 草稿 id + * @param templatesOptional 发起页可传当前模板列表,用于补全 app 行;草稿箱可省略 + */ +function openForDraft( + draftId: string, + templatesOptional?: Array<{ id: string; appName?: string }> +): Promise + +/** + * 复制旧实例表单后打开(仅发起页深链 copyFromInstanceId 使用)。 + * 内部先 openForApp,再预填 formData。 + */ +function openForAppWithCopy( + appRow: { id: string; appName?: string; [k: string]: any }, + copyFromInstanceId: string +): Promise +``` + +Events: + +```ts +// 保存草稿成功(create 或 update)后关闭前触发,便于父页刷新列表 +emit('saved') +// 提交成功;payload 为后端返回的实例(至少含 id) +emit('submitted', instance: { id?: string; [k: string]: any }) +// 弹窗关闭(取消或保存/提交后) +emit('closed') +``` + +Props:无必填 props(可见性由组件内部 `dlgVisible` 控制)。 + +弹窗模板须与现 `start/index.vue` 中 `el-dialog` 块一致(`dialog-form-layout`、`protocol-dialog-mask`、form-create、`OaFlowPreview`、底栏取消/保存草稿/提交)。 + +--- + +### Task 1: 抽出 `OaStartFormDialog.vue` + +**Files:** +- Create: `web-admin/src/components/oa-approval/OaStartFormDialog.vue` +- Reference (move from): `web-admin/src/views/oa-approval/start/index.vue`(dialog 模板 + 相关 script,约 L87–142 与 L214–714 中弹窗相关部分) + +- [x] **Step 1: 新建组件骨架** + +创建文件:含 `` 模板(从 start 原样搬入)、`