From 28959e33b16d9bacdfad81e8838bffba36633737 Mon Sep 17 00:00:00 2001 From: limeng <1131177064@qq.com> Date: Mon, 21 Sep 2026 16:47:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=AD=BE=E7=BD=B2=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E6=9F=A5=E8=AF=A2=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Business/Pages.php | 97 +++++++++++- .../agreement-signing.blade.php | 75 ++++++---- .../Business/AgreementSigningPageTest.php | 140 ++++++++++++++++++ 3 files changed, 282 insertions(+), 30 deletions(-) diff --git a/app/Http/Controllers/Business/Pages.php b/app/Http/Controllers/Business/Pages.php index 45068300..e816e066 100644 --- a/app/Http/Controllers/Business/Pages.php +++ b/app/Http/Controllers/Business/Pages.php @@ -623,9 +623,38 @@ class Pages extends Controller } try { - return CourierAgreementSignature::query() + $type = $this->agreementFilterType(); + if ($type === 'quote-confirmation') { + return collect(); + } + + $query = CourierAgreementSignature::query(); + $search = $this->agreementFilterSearch(); + $status = $this->agreementFilterStatus(); + + if ($search !== '') { + $like = '%' . addcslashes($search, '%_\\') . '%'; + $query->where(function ($builder) use ($like): void { + $builder + ->where('business_no', 'like', $like) + ->orWhere('courier_name', 'like', $like) + ->orWhere('organization_name', 'like', $like) + ->orWhere('operator_name', 'like', $like) + ->orWhere('company_full_name', 'like', $like); + }); + } + + if ($status !== null) { + $query->where('status', $status); + } + + if ($type !== null) { + $query->where('document_type', $type); + } + + return $query ->latest('id') - ->paginate(50, ['*'], 'agreement_page')->withQueryString(); + ->paginate(50, ['*'], 'agreement_task_page')->withQueryString(); } catch (QueryException $exception) { // 迁移尚未执行时仍允许打开页面;发送接口会明确提示数据库未就绪。 report($exception); @@ -633,6 +662,38 @@ class Pages extends Controller } } + protected function agreementFilterSearch(): string + { + return mb_substr(trim((string) request('agreement_search', '')), 0, 191); + } + + protected function agreementFilterStatus(): ?string + { + $status = trim((string) request('agreement_status', '')); + $allowed = [ + CourierAgreementSignature::STATUS_PREPARED, + CourierAgreementSignature::STATUS_SENDING, + CourierAgreementSignature::STATUS_SIGNING, + CourierAgreementSignature::STATUS_COMPLETED, + CourierAgreementSignature::STATUS_ARCHIVED, + CourierAgreementSignature::STATUS_REVOKED, + CourierAgreementSignature::STATUS_EXPIRED, + CourierAgreementSignature::STATUS_REJECTED, + CourierAgreementSignature::STATUS_FAILED, + CourierAgreementSignature::STATUS_UNKNOWN, + ]; + + return in_array($status, $allowed, true) ? $status : null; + } + + protected function agreementFilterType(): ?string + { + $type = trim((string) request('agreement_type', '')); + $allowed = array_keys(CourierAgreementSignature::DOCUMENTS); + + return in_array($type, $allowed, true) ? $type : null; + } + protected function agreementSubjects(?string $page): Collection { if ($page !== 'agreement-signing') { @@ -658,10 +719,36 @@ class Pages extends Controller } try { - return CourierQuoteSignature::query() - ->with('version') + $type = $this->agreementFilterType(); + if ($type !== null && $type !== 'quote-confirmation') { + return collect(); + } + + $query = CourierQuoteSignature::query()->with('version'); + $search = $this->agreementFilterSearch(); + $status = $this->agreementFilterStatus(); + + if ($search !== '') { + $like = '%' . addcslashes($search, '%_\\') . '%'; + $query->where(function ($builder) use ($like): void { + $builder + ->where('organization_name', 'like', $like) + ->orWhere('operator_name', 'like', $like) + ->orWhereHas('version', function ($versionQuery) use ($like): void { + $versionQuery + ->where('version_code', 'like', $like) + ->orWhere('carrier_name', 'like', $like); + }); + }); + } + + if ($status !== null) { + $query->where('status', $status); + } + + return $query ->latest('id') - ->paginate(50, ['*'], 'agreement_page')->withQueryString(); + ->paginate(50, ['*'], 'agreement_quote_page')->withQueryString(); } catch (QueryException $exception) { // 报价签署迁移尚未执行时仍允许打开协议签署页。 report($exception); 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 8db7a0f6..b3158a7c 100644 --- a/resources/views/business/pages/courier-payables/agreement-signing.blade.php +++ b/resources/views/business/pages/courier-payables/agreement-signing.blade.php @@ -9,6 +9,10 @@ @php($agreementCompanyName = $agreementDefaultSubject?->name ?: company()?->name ?: '当前公司') @php($agreementSubjectPayload = $agreementSubjects->map(fn ($subject) => ['id' => $subject->id, 'name' => $subject->name, 'unified_social_credit_code' => $subject->unified_social_credit_code, 'is_default' => (bool) $subject->is_default])->values()) @php($esignConfigured = \App\Services\Esign\EsignClient::configured()) +@php($agreementSearch = trim((string) request('agreement_search', ''))) +@php($agreementStatus = trim((string) request('agreement_status', ''))) +@php($agreementType = trim((string) request('agreement_type', ''))) +@php($agreementFiltersActive = $agreementSearch !== '' || $agreementStatus !== '' || $agreementType !== '')