From 78b1dcc296e2fe45fc3a7788ea8bb73e191ac1be Mon Sep 17 00:00:00 2001 From: limeng <1131177064@qq.com> Date: Sun, 11 Oct 2026 14:24:15 +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?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../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 00e09ef8..acc0bfb5 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 @@
+确认删除公司主体“”?历史协议的主体名称快照会保留。
+ +