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 @@
+确认删除公司主体“”?历史协议的主体名称快照会保留。
+ +