docs(oa): align return/reject/cancel with DingTalk copy-new-instance
Supersede same-instance multi-round return and source-instance linking; document copy-form restart for returned, cancelled, and rejected. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
1 parent
26800865cd
commit
8b2d8284c7
2 files changed
+145
-1
No files matched your search
@@ -1,8 +1,13 @@
|
||||
# OA 审批进度展示与实例流转设计(钉钉对齐)
|
||||
|
||||
> **部分废止(2026-07-15)**
|
||||
> 打回「同实例多轮再提交」、进度「第 N 轮」、撤销/再提「关联旧单」等语义已改对齐钉钉:**打回=本单终态;再办=复制表单开新实例(拒绝/撤销同)**。
|
||||
> 权威修订见:`docs/superpowers/specs/2026-07-15-oa-return-copy-new-instance-design.md`。
|
||||
> 本文仍有效:**P0 进度树序**、拒绝≠打回文案、抄送排序、终态不展示未到达。
|
||||
|
||||
| 项 | 内容 |
|
||||
|----|------|
|
||||
| 状态 | 已定稿;实现已落地(见 `docs/superpowers/plans/2026-07-15-oa-approval-progress-timeline.md`) |
|
||||
| 状态 | **部分废止**;树序进度仍有效(见上) |
|
||||
| 日期 | 2026-07-15 |
|
||||
| 范围 | web-admin 审批详情「审批进度」;拒绝 / 撤销 / 打回 的实例语义 |
|
||||
| 权威对齐 | 钉钉 OA 审批详情(`tasks` + `operation_records` 思路) |
|
||||
@@ -196,6 +201,7 @@
|
||||
|------|------|
|
||||
| 2026-07-15 | 按钉钉思路:拒绝结束本单;撤销后再提 = 新实例;打回 = 同实例再提交;进度 = 轮次时间轴 + 轮内设计序。 |
|
||||
| 2026-07-15 | 未到达节点:进行中可展示;终态不展示(在混合模型中确认)。 |
|
||||
| 2026-07-15 | **修订**:打回改为终态 + 复制开新单;废止同实例多轮与旧单关联。见 `2026-07-15-oa-return-copy-new-instance-design.md`。 |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -0,0 +1,138 @@
|
||||
# OA 打回/拒绝/撤销:终态 + 复制表单开新实例(钉钉对齐修订)
|
||||
|
||||
| 项 | 内容 |
|
||||
|----|------|
|
||||
| 状态 | 已定稿(待实现) |
|
||||
| 日期 | 2026-07-15 |
|
||||
| 范围 | 打回语义、复制再发、审批进度去重、「已处理」列表、废弃同实例多轮与旧单关联 |
|
||||
| 权威对齐 | 钉钉:打回 / 撤销 / 拒绝均终结当前审批单;再办 = 复制表单开新实例 |
|
||||
| 关联 | **废止并取代** `2026-07-15-oa-approval-progress-timeline-design.md` 中 §3.3 同实例多轮、§4.3 多轮轴、§5.2 P1 同单再提交与「关联旧单」;**保留**该文 P0 进度树序与拒绝≠打回文案约定 |
|
||||
|
||||
---
|
||||
|
||||
## 1. 背景
|
||||
|
||||
实现 P1「同实例打回再提交 + 多轮进度 + `sourceInstanceId` 关联」后,产品实测发现:
|
||||
|
||||
1. **已处理**列表看不到打回记录(`done` 查询未含 `returned`)。
|
||||
2. 进度轴出现**审批人节点 + 独立「打回」节点**双重展示,多余。
|
||||
3. 对照钉钉:打回、撤销都会**终结当前单**;再办是复制一份开**新实例**,无需同单多轮,也无需强制关联旧单。
|
||||
|
||||
本文件按钉钉模式修订产品语义,并作为后续实现权威来源。
|
||||
|
||||
---
|
||||
|
||||
## 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 打回引擎行为(修订)
|
||||
|
||||
审批人打回且意见必填时:
|
||||
|
||||
1. 当前审批任务 → `returned`,写入意见与完成时间。
|
||||
2. 同实例其余 `pending` 任务 → `cancelled`。
|
||||
3. 实例 → `returned`(**终态**,不可再同单提交)。
|
||||
4. 可继续写 `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。 |
|
||||
Reference in new issue
Block a user