| 项 | 内容 |
|---|---|
| 状态 | 已定稿(待实现) |
| 日期 | 2026-08-06 |
| 范围 | web-admin 草稿箱 /#/system-manage/oa-approval/drafts;抽取与「发起审批」共用的发起/编辑草稿弹窗 |
| Demo | .superpowers/brainstorm/.../drafts-edit-dialog-demo.html(方案 A) |
| 关联 | 发起页 views/oa-approval/start/index.vue;既有草稿 API(详情 / 更新 / 提交) |
当前草稿箱点「编辑」会 router.push 到「发起审批」并带 ?draftId=,用户离开草稿箱路由,体验割裂。
产品要求:留在草稿箱完成编辑与提交;弹窗与「发起审批」新增/编辑草稿弹窗完全一致,草稿箱仅多一步回显已存草稿数据。
目标
非目标
| 入口 | 行为 |
|---|---|
| 操作列「编辑」 | 不跳转;打开共用弹窗;draftId → 拉详情回显 |
| 操作列「提交审批」 | 确认后快捷 submit;成功刷新并可进详情;失败则打开同一弹窗(回显) |
| 弹窗「取消」 | 关闭,不保存 |
| 弹窗「保存草稿」 | update 当前草稿 → 关弹窗 → 刷新列表 + badge |
| 弹窗「提交」 | 校验表单与自选审批人 → submit → 关弹窗 → 刷新 → 有实例 id 则跳详情 |
弹窗标题:模板/应用名称(与发起审批一致);底栏图标与文案对齐发起审批(取消 Close、保存 Document、提交 Check)。
从 start/index.vue 抽出弹窗及相关逻辑为:
web-admin/src/components/oa-approval/OaStartFormDialog.vue(名称可微调,须语义清晰)
职责(SHALL):
OaFlowPreview、各类 Kit 同步逻辑。openForApp(appRow):新建发起(发起页选模板后调用)。openForDraft(draftId):拉 fetchOaInstanceDraftDetail,回显 formData、initiatorSelectByNode,进入编辑草稿态。fetchOaTemplateDetail、fetchOaFlowPreview、fetchCreateOaInstanceDraft / fetchUpdateOaInstanceDraft / fetchSubmitOaInstanceDraft / fetchStartOaInstance。| 文件 | 改动 |
|---|---|
views/oa-approval/start/index.vue |
列表/选模板保留;弹窗改为挂载 OaStartFormDialog;?draftId / ?appId / ?copyFromInstanceId 仍可打开该弹窗(兼容深链) |
views/oa-approval/drafts/index.vue |
移除「编辑」跳转;挂载同一弹窗;openEdit → openForDraft;快捷提交失败时同样打开 |
编辑 → openForDraft(id)
→ GET draft detail(appId, formData, initiatorSelectByNode, appName…)
→ 加载模板表单规则 + 流程预览
→ 回填 formData / 自选人
保存 → PUT update draft → 关窗 → 刷新列表
提交 → validate → POST submit draft → 关窗 → 刷新 → 可选跳详情
appId:提示「草稿缺少审批模板」,不打开空弹窗。backdrop-filter: none;dialog-form-layout + protocol-dialog-mask,与现网一致。web-admin/src/components/oa-approval/OaStartFormDialog.vueweb-admin/src/views/oa-approval/start/index.vueweb-admin/src/views/oa-approval/drafts/index.vue后端:无变更(本期)。
draftId/appId/copyFrom 行为与改造前等价。