Files
shanxia2.0/docs/superpowers/specs/2026-08-05-crm-contract-reedit-to-draft-design.md
T
2026-08-06 09:58:20 +08:00

3.3 KiB
Raw Blame History

合同管理:审批中 / 已审批合同可再编辑并回草稿

目标

合同管理支持对「审批中」「已审批(尚未执行)」的合同再次编辑;编辑保存后合同变为草稿,可再次提交审批。

采用方案:编辑保存时回草稿(不新增独立「退回草稿」动作)。

可编辑状态

合同状态 status 可否编辑 说明
draft 是 含审批驳回后回草稿的现有行为
approving 是 审批中;保存后作废当前审批流并回草稿
approved 是 已审批且尚未开始执行
executing / finished / invalid 否 不在本需求范围;走现有执行 / 变更 / 作废流程

前端行为

打开编辑前确认

对 approving、approved,在打开编辑弹窗 / 页面之前弹出确认;用户取消则不打开。

原状态 确认文案
approving 编辑保存后将作废当前审批流,合同变回草稿,需重新提交审批
approved 编辑保存后合同将变回草稿,需重新提交审批

draft(含已驳回)直接打开编辑,无需该确认。

入口

以下入口对 approving、approved 解锁编辑,并走上述确认:

  • 合同列表工具栏「编辑」
  • 合同详情页 / 查看弹窗「修改」

「提交审批」仍仅 draft 可用(保存回草稿后即可再提)。

未保存

仅打开编辑、未点保存时,合同状态保持不变。

后端行为(更新合同)

放宽更新接口状态校验:允许 draft / approving / approved 更新;其余状态仍拒绝(如「仅草稿 / 审批中 / 已审批(未执行)的合同才能修改」)。

保存成功时统一副作用:

  1. status 置为 draft
  2. approval_status 清空(null)
  3. 若原状态为 approving:清理待审批记录(复用现有撤回审批的清理逻辑,如 delete_pending_approvals)
  4. 若原状态为 approved:同样清空审批状态;历史审批记录可保留只读展示,不阻塞再次提审

创建与更新字段校验、产品明细等现有业务规则不变;仅放宽状态门禁并增加回草稿副作用。

不变范围

  • executing / finished / invalid 不可通过本能力直接改合同
  • 运输计划等下游仍仅可关联 approved / executing;合同回草稿后暂时不可新建关联计划,属预期
  • 不改审批通过 / 驳回 / 开始执行等既有流转
  • 不新增独立「退回草稿」API(本方案在更新保存时完成状态回退)

改动落点(实现时)

  • backend/app/crud/crm/contract.py:update 状态门禁;保存后回 draft + 清审批状态;审批中清理待审记录
  • web-admin 合同列表 / 详情 / 查看弹窗 / 表单入口:可编辑状态判断 + 打开编辑前确认文案

验收要点

  1. 审批中合同:确认 → 编辑 → 保存后为草稿,待审记录已清理,可再提交审批
  2. 已审批(未执行)合同:确认 → 编辑 → 保存后为草稿,可再提交审批;保存前下游仍可按原状态关联
  3. 执行中 / 已完成 / 已作废:仍不可编辑
  4. 草稿 / 已驳回:行为与现网一致,无多余确认
  5. 仅打开编辑未保存:状态不变