From 597104430eb283b38952db5899b85d9a4616627a Mon Sep 17 00:00:00 2001 From: limeng <1131177064@qq.com> Date: Sun, 11 Oct 2026 14:26:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=8F=E8=AE=AE=E7=AD=BE=E7=BD=B2=EF=BC=9A?= =?UTF-8?q?=E6=AF=8F=E6=9D=A1=E5=85=AC=E5=8F=B8=E4=B8=BB=E4=BD=93=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=88=A0=E9=99=A4=E5=8A=9F=E8=83=BD=20(#304)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 每条公司主体增加确认删除,保留历史快照,删除默认主体后选择剩余主体,全部删除回退当前公司。相关21项测试246条断言及隔离页面交互通过。 --- .../Business/CourierAgreementSignatures.php | 30 ++++- .../agreement-signing.blade.php | 86 ++++++++++++- routes/admin.php | 1 + .../Business/CourierSigningSubjectTest.php | 115 ++++++++++++++++++ 4 files changed, 228 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/Business/CourierAgreementSignatures.php b/app/Http/Controllers/Business/CourierAgreementSignatures.php index 5b85ea21..53ea1af5 100644 --- a/app/Http/Controllers/Business/CourierAgreementSignatures.php +++ b/app/Http/Controllers/Business/CourierAgreementSignatures.php @@ -289,6 +289,32 @@ class CourierAgreementSignatures extends Controller return $this->subjectResponse($subject->fresh(), '默认签署主体已切换。'); } + public function destroySubject(Request $request, CourierSigningSubject $subject): JsonResponse + { + $this->ensureCanManage(); + $this->ensureSubjectBelongsToCurrentCompany($subject); + + if ($response = $this->subjectsTableUnavailable()) { + return $response; + } + + $request->validate(['delete_confirmed' => ['required', 'accepted']]); + + DB::transaction(function () use ($subject): void { + $subject = CourierSigningSubject::query()->disableCache()->lockForUpdate()->findOrFail($subject->id); + $wasDefault = $subject->is_default; + $subject->forceFill(['is_default' => false, 'updated_by' => user_id()])->save(); + $subject->delete(); + + if ($wasDefault) { + $nextDefault = CourierSigningSubject::query()->disableCache()->orderBy('id')->lockForUpdate()->first(); + $nextDefault?->forceFill(['is_default' => true, 'updated_by' => user_id()])->save(); + } + }); + + return $this->subjectResponse(null, '公司主体已删除,历史协议的主体快照保留。'); + } + public function synchronize(CourierAgreementSignature $agreementSignature): RedirectResponse { $this->ensureCanManage(); @@ -576,11 +602,11 @@ class CourierAgreementSignatures extends Controller } } - private function subjectResponse(CourierSigningSubject $subject, string $message): JsonResponse + private function subjectResponse(?CourierSigningSubject $subject, string $message): JsonResponse { return response()->json([ 'message' => $message, - 'subject' => $this->serializeSubject($subject), + 'subject' => $subject ? $this->serializeSubject($subject) : null, 'subjects' => CourierSigningSubject::query() ->orderByDesc('is_default') ->orderBy('name') diff --git a/resources/views/business/pages/courier-payables/agreement-signing.blade.php b/resources/views/business/pages/courier-payables/agreement-signing.blade.php index 6808848d..3aef6e59 100644 --- a/resources/views/business/pages/courier-payables/agreement-signing.blade.php +++ b/resources/views/business/pages/courier-payables/agreement-signing.blade.php @@ -2125,10 +2125,20 @@
+确认删除公司主体“”?历史协议的主体名称快照会保留。
+ +