fix(business): 编辑/流转/归属加锁与终态编辑门槛,has_docs 单点收口

- get_with_names 加 for_update 参数:update/change_status/change_ownership
  以锁定读取行,与发货/回款写路径同一锁口径——「有发货禁换客户」的
  快照读校验不再被并发新增发货旁路(此前 delete 有锁、唯独编辑无锁)
- update_business 补终态门槛(明细/汇总是 M3 核算基线,与发货/回款
  服务禁写终态同口径);前端编辑按钮按终态禁用并加 tooltip
- 新增 business_repository.has_docs(单条 OR exists):替换 update
  换客户与 delete 两处内联双查询,M3 新增挂靠单据类型时只改一处
- 出参组装复用首查 row:change_ownership 的姓名侧按「变更项取校验
  函数返回的新人名、未变项沿用首查名」处理(首查名是变更前快照)
- 新增终态编辑 400 且明细未动的集成用例

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
liuwenxinandClaude Code committed 2026-10-14 17:30:21 +08:00
1 parent a0086554b1
commit 6d612daf30
4 files changed
+108 -33

No files matched your search

@@ -627,7 +627,19 @@ onMounted(() => {
<el-table-column label="操作" width="300" fixed="right">
<template #default="{ row }">
<el-button link type="primary" size="small" @click="openDrawer(row)">详情</el-button>
<el-button link type="primary" size="small" @click="openEdit(row)">编辑</el-button>
<el-tooltip content="已完成或已终止的业务禁止编辑" :disabled="row.status === 1" placement="top">
<span class="op-wrap">
<el-button
link
type="primary"
size="small"
:disabled="row.status !== 1"
@click="openEdit(row)"
>
编辑
</el-button>
</span>
</el-tooltip>
<el-tooltip content="终态不可再变更" :disabled="row.status === 1" placement="top">
<span class="op-wrap">
<el-button