6.2 KiB
6.2 KiB
OA 打回/拒绝/撤销:终态 + 复制表单开新实例(钉钉对齐修订)
| 项 | 内容 |
|---|---|
| 状态 | 已定稿;实现已落地(见 docs/superpowers/plans/2026-07-15-oa-return-copy-new-instance.md) |
| 日期 | 2026-07-15 |
| 范围 | 打回语义、复制再发、审批进度去重、「已处理」列表、废弃同实例多轮与旧单关联 |
| 权威对齐 | 钉钉:打回 / 撤销 / 拒绝均终结当前审批单;再办 = 复制表单开新实例 |
| 关联 | 废止并取代 2026-07-15-oa-approval-progress-timeline-design.md 中 §3.3 同实例多轮、§4.3 多轮轴、§5.2 P1 同单再提交与「关联旧单」;保留该文 P0 进度树序与拒绝≠打回文案约定 |
1. 背景
实现 P1「同实例打回再提交 + 多轮进度 + sourceInstanceId 关联」后,产品实测发现:
- 已处理列表看不到打回记录(
done查询未含returned)。 - 进度轴出现审批人节点 + 独立「打回」节点双重展示,多余。
- 对照钉钉:打回、撤销都会终结当前单;再办是复制一份开新实例,无需同单多轮,也无需强制关联旧单。
本文件按钉钉模式修订产品语义,并作为后续实现权威来源。
2. 目标与非目标
目标
- 打回 / 拒绝 / 撤销 = 本单终态(不再同实例复活)。
- 三种终态下,发起人均可 「复制并重新发起」:仅复制表单(及可复用的发起选人等),开启全新实例。
- 新旧实例不写库关联(不使用 / 不依赖
source_instance_id展示跳转)。 - 进度单轴、无「第 N 轮」;打回结果落在审批人任务节点上。
- 「已处理」含打回。
非目标
- 不在详情展示「由旧单重提」跳转链。
- 不做钉钉全量操作类型复刻。
- 不强制物理删除已有
source_instance_id/current_round/oa_instance_event列或表(可保留兼容;业务路径不再依赖多轮 resubmit)。
3. 三种终态(SHALL)
| 动作 | 操作者 | 本单状态 | 进度终态文案(建议) | 再办 |
|---|---|---|---|---|
| 打回 | 审批人 | returned(展示:已打回) |
审批人节点「已打回」+ 意见;不追加独立终态「已打回」行 | 复制表单 → 新实例 |
| 拒绝 | 审批人 | rejected(已拒绝) |
审批人「已拒绝」+「流程结束(已拒绝)」 | 同上 |
| 撤销 | 发起人 | cancelled(已撤销) |
「已撤销」 | 同上 |
3.1 禁止
- 不得将打回做成同实例
running/returned后再resubmit开第二轮。 - 不得把拒绝叫做打回,或把打回做成拒绝而不标
returned。 - 不得在新实例强制写入「来源旧单」业务关联并在 UI 展示跳转(本版本)。
- 不得在进度中同时展示「审批人(已打回)」与独立的
kind=return「打回」节点。
3.2 打回引擎行为(修订)
审批人打回且意见必填时:
- 当前审批任务 →
returned,写入意见与完成时间。 - 同实例其余
pending任务 →cancelled。 - 实例 →
returned(终态,不可再同单提交)。 - 可继续写
oa_instance_event(审计可选);进度投影不得再追加独立打回节点。
3.3 复制并重新发起(SHALL)
- 入口:我发起的列表、实例详情;当状态 ∈
{returned, cancelled, rejected}且当前用户为发起人。 - 文案:统一「复制并重新发起」(取代「修改并再次提交」「修改并重新提交」)。
- 行为:携带旧单
appId+ 表单快照(及发起页需要的选人等)进入发起流;用户确认后POST start,得到新instanceId。 - 传输:可用路由 query 如
copyFromInstanceId(仅前端预填,不入新实例关联字段)。若需后端预填接口,只读返回旧单 formData,不写source_instance_id。 - SHALL NOT 调用同实例
resubmit_instance。
4. 审批进度(修订)
4.1 仍生效(来自原 P0)
- 节点顺序:流程树序 →
order_num→create_time→id。 - 含发起人「已提交」、任务节点、抄送、进行中的未到达;终态后不挂未达节点。
4.2 废止
- 「第 N 轮」分段标题与多轮 submit 轴。
build_progress_items中对event_type=return追加的独立kind=return项。
4.3 打回进度示意
发起人 · 已提交
抄送人 · 已结束(抄送)
审批人 · 已打回 · 意见:…
拒绝 / 撤销示意不变(单轴终态),无旧单关联提示。
5. 列表与文案
| 场景 | 规则 |
|---|---|
| 已处理 | kind=done 含 approved / rejected / returned |
| 我发起的 | returned 展示「已打回」(不用「待修改」) |
| 详情状态 | 同上 |
6. 对既有实现的处置
| 能力 | 处置 |
|---|---|
POST /instances/{id}/resubmit |
移除或返回明确废弃错误;前端不再调用 |
start(..., sourceInstanceId) 写库关联 + 详情「查看原单」 |
停止写入与展示;copyFrom 仅预填 |
current_round / 任务 round_no 多轮逻辑 |
业务路径不再递增多轮;字段可保留默认 1 |
设计器 allowReturn |
保留(控制是否出现打回按钮) |
7. 验收要点
- 打回后实例为终态「已打回」,不能同单再次提交。
- 打回后进度仅审批人节点显示已打回+意见,无独立「打回」节点、无「第 N 轮」。
- 审批人「已处理」可见该打回任务。
- 已打回 / 已撤销 / 已拒绝:发起人可「复制并重新发起」,得到新实例且表单已预填;新旧无关联跳转。
- 拒绝与打回按钮/结果文案互不混用。
8. 决议记录
| 日期 | 决议 |
|---|---|
| 2026-07-15 | 产品确认:对齐钉钉;打回=终态;再办=复制开新单;三种终态均可复制;不做旧单关联。 |
| 2026-07-15 | 废止同实例多轮与独立打回进度节点;修复已处理未含 returned。 |