# OA 审批应用「复制」设计 | 项 | 内容 | |----|------| | 状态 | 已定稿 | | 日期 | 2026-07-31 | | 范围 | 审批管理页复制应用(基础信息 + 表单/流程/高级设置草稿) | | 页面 | `/#/system-manage/oa-approval/apps` | --- ## 1. 目标与非目标 **目标** - 在审批管理卡片「更多」中提供「复制」。 - 一键生成与源流程内容一致的新应用;名称 = 原名称 +「复制」。 - 内容来源:优先当前草稿;无草稿则用最新已发布版;皆无则空草稿。 - 副本始终为**未发布草稿**;复制成功后留在列表并刷新。 **非目标** - 不自动发布副本。 - 不复制历史版本、实例、任务。 - 不跳转设计器。 --- ## 2. 行为(SHALL) 1. 入口:卡片「更多」→「复制」(位于「编辑基础」与「删除」之间)。 2. 点击后直接执行(无二次确认);成功 Toast;刷新列表。 3. 新名称:`{appName}复制`。若超过 50 字:保留后缀「复制」,前缀截断使总长 ≤ 50。 4. 复制字段: - 应用:`groupId`、`iconUrl`、`description`、`initiatorScope`、`initiatorUserIds`、`adminScope`、`adminUserIds`、`status`、`orderNum`、`remark` - 版本草稿:`formSchemaJson`、`flowTreeJson`、`advancedSettingsJson`(深拷贝 JSON) 5. 新应用仅有 `version_no=1` 的 `draft`;`is_latest_published=0`;列表无已发布版本标签。 6. 租户隔离与创建应用权限一致(admin / super_admin)。 --- ## 3. API `POST /web/admin/oa-approval/apps/{app_id}/copy` - 成功:返回新应用字典(与 create 一致),message「复制成功」。 - 源不存在:400「应用不存在」。 --- ## 4. 前端 - `fetchCopyOaApp(id)` in `web-admin/src/api/oaApproval.ts` - `apps/index.vue`:下拉项 + `handleCopy`;图标可用 `CopyDocument` --- ## 5. 自检 - [x] 无未决占位符 - [x] 与口头确认一致(草稿优先 / 未发布 / 留列表) - [x] 范围仅应用复制,不涉及实例复制