From 3e6c9b4c99df59457362bd09609251e04edad9c8 Mon Sep 17 00:00:00 2001 From: qiuxiang <394405259@qq.com> Date: Tue, 27 Oct 2026 11:14:06 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=90=A5=E9=94=80=E8=B4=A6=E6=88=B7?= =?UTF-8?q?=E8=B4=A6=E5=8D=95=E5=90=AF=E7=94=A8=E6=97=A5=E6=9C=9F=E8=8C=83?= =?UTF-8?q?=E5=9B=B4=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/business/marketing-account-bills.js | 47 ++++++++++ .../partials/embedded-table.blade.php | 16 ++-- .../partials/embedded-table.blade.php | 16 ++-- .../partials/embedded-table.blade.php | 19 ++-- .../partials/embedded-table.blade.php | 19 ++-- .../partials/date-range-picker.blade.php | 2 + .../marketing-bill-date-range.blade.php | 91 +++++++++++++++++++ resources/views/business/pages/show.blade.php | 3 + .../MarketingAccountBillsTabsTest.php | 41 ++++++++- 9 files changed, 211 insertions(+), 43 deletions(-) create mode 100644 resources/views/business/pages/partials/marketing-bill-date-range.blade.php diff --git a/resources/assets/js/views/business/marketing-account-bills.js b/resources/assets/js/views/business/marketing-account-bills.js index 8a301b5f..344aefc1 100644 --- a/resources/assets/js/views/business/marketing-account-bills.js +++ b/resources/assets/js/views/business/marketing-account-bills.js @@ -65,10 +65,30 @@ } } + function setupBillDatePickers(scope) { + if (!scope || !window.CaiWuDatePicker) { + return; + } + + scope.querySelectorAll('[data-marketing-bill-date-filter]').forEach((form) => { + window.CaiWuDatePicker.setup(form); + + const from = form.elements.namedItem('from'); + const to = form.elements.namedItem('to'); + if (from && to) { + [from, to].forEach((input) => { + input.addEventListener('change', () => to.setCustomValidity('')); + }); + } + }); + } + function initialiseInsertedContent(workspace) { if (window.Alpine && typeof window.Alpine.initTree === 'function') { window.Alpine.initTree(workspace); } + + setupBillDatePickers(workspace); } async function navigate(url, options) { @@ -176,6 +196,27 @@ }, true); document.addEventListener('submit', (event) => { + const workspace = currentWorkspace(); + const dateFilter = workspace + ? event.target.closest(`${workspaceSelector} [data-marketing-bill-date-filter]`) + : null; + + if (dateFilter) { + const from = dateFilter.elements.namedItem('from'); + const to = dateFilter.elements.namedItem('to'); + if (from && to) { + to.setCustomValidity(''); + if (String(from.value || '') !== '' + && String(to.value || '') !== '' + && String(from.value) > String(to.value)) { + event.preventDefault(); + to.setCustomValidity('结束日期不能早于开始日期'); + to.reportValidity(); + return; + } + } + } + const form = event.target.closest(`${workspaceSelector} [data-jd-wallet-filter]`); if (!form) { @@ -198,6 +239,12 @@ navigate(target.href, { focus: '#jd-filter-store' }); }, true); + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', () => setupBillDatePickers(document)); + } else { + setupBillDatePickers(document); + } + window.addEventListener('popstate', () => { if (currentWorkspace() && isSupportedUrl(window.location.href)) { navigate(window.location.href, { pushState: false }); diff --git a/resources/views/banking/marketing_alibaba_bills/partials/embedded-table.blade.php b/resources/views/banking/marketing_alibaba_bills/partials/embedded-table.blade.php index 2134e202..cf36a499 100644 --- a/resources/views/banking/marketing_alibaba_bills/partials/embedded-table.blade.php +++ b/resources/views/banking/marketing_alibaba_bills/partials/embedded-table.blade.php @@ -69,7 +69,7 @@ @endforeach -
+
@@ -89,14 +89,12 @@ @endforeach
-
- - -
-
- - -
+ @include('business.pages.partials.marketing-bill-date-range', [ + 'idPrefix' => 'alibaba-filter', + 'fieldLabel' => '交易时间', + 'fromValue' => $filters['from'] ?? '', + 'toValue' => $filters['to'] ?? '', + ])
清除 diff --git a/resources/views/banking/marketing_jd_wallet_bills/partials/embedded-table.blade.php b/resources/views/banking/marketing_jd_wallet_bills/partials/embedded-table.blade.php index 45307a97..4531c0c0 100644 --- a/resources/views/banking/marketing_jd_wallet_bills/partials/embedded-table.blade.php +++ b/resources/views/banking/marketing_jd_wallet_bills/partials/embedded-table.blade.php @@ -98,7 +98,7 @@
@endif - +
@@ -110,14 +110,12 @@ @endforeach
-
- - -
-
- - -
+ @include('business.pages.partials.marketing-bill-date-range', [ + 'idPrefix' => 'jd-filter', + 'fieldLabel' => '账单日期', + 'fromValue' => $filters['from'] ?? '', + 'toValue' => $filters['to'] ?? '', + ])
清除 diff --git a/resources/views/banking/marketing_pinduoduo_bills/partials/embedded-table.blade.php b/resources/views/banking/marketing_pinduoduo_bills/partials/embedded-table.blade.php index 45ed7b07..bc733604 100644 --- a/resources/views/banking/marketing_pinduoduo_bills/partials/embedded-table.blade.php +++ b/resources/views/banking/marketing_pinduoduo_bills/partials/embedded-table.blade.php @@ -96,7 +96,8 @@ ], static fn ($value) => $value !== ''); @endphp + class="mb-4 rounded-lg border border-gray-200 bg-gray-50 px-4 py-3" + data-marketing-bill-date-filter>
@@ -117,16 +118,12 @@
-
- - -
-
- - -
+ @include('business.pages.partials.marketing-bill-date-range', [ + 'idPrefix' => 'pdd-filter', + 'fieldLabel' => '费用时间', + 'fromValue' => $currentFrom, + 'toValue' => $currentTo, + ])
+ + + + 至 + + + + + + +
+
diff --git a/resources/views/business/pages/show.blade.php b/resources/views/business/pages/show.blade.php index b0531e06..46de19d7 100644 --- a/resources/views/business/pages/show.blade.php +++ b/resources/views/business/pages/show.blade.php @@ -1022,6 +1022,9 @@ @elseif ($sectionView) @include($sectionView) @elseif (!empty($content) && !empty($content['view'])) + @if ($isMarketingAccountBillsPage) + @include('business.pages.partials.date-range-picker') + @endif
@include($content['view'], $content)
diff --git a/tests/Feature/Business/MarketingAccountBillsTabsTest.php b/tests/Feature/Business/MarketingAccountBillsTabsTest.php index db7bdd48..f830823a 100644 --- a/tests/Feature/Business/MarketingAccountBillsTabsTest.php +++ b/tests/Feature/Business/MarketingAccountBillsTabsTest.php @@ -354,7 +354,12 @@ class MarketingAccountBillsTabsTest extends FeatureTestCase ->assertOk() ->assertDontSeeText('抖音账户') ->assertDontSeeText('得物账户') - ->assertDontSeeText('唯品会账户'); + ->assertDontSeeText('唯品会账户') + ->assertSee('data-marketing-bill-date-filter', false) + ->assertSee('data-date-picker', false) + ->assertSee('id="tb-filter-from"', false) + ->assertSee('name="from"', false) + ->assertSeeText('开始日期'); $page = collect(config('business_navigation')) ->firstWhere('slug', 'billing-transactions')['pages']; @@ -400,7 +405,10 @@ class MarketingAccountBillsTabsTest extends FeatureTestCase ->assertOk() ->assertSeeText('导出') ->assertSee(e(route('business.pages.export', $parameters)), false) - ->assertSee('aria-label="导出当前筛选结果"', false); + ->assertSee('aria-label="导出当前筛选结果"', false) + ->assertSee('data-marketing-bill-date-filter', false) + ->assertSee('id="pdd-filter-from"', false) + ->assertSee('data-date-picker', false); } public function testPinduoduoBillsExportUsesTheCurrentMirrorFilters(): void @@ -595,7 +603,10 @@ class MarketingAccountBillsTabsTest extends FeatureTestCase ->assertSee('aria-label="导出当前筛选结果"', false) ->assertDontSeeText('投放日期') ->assertSee('data-jd-wallet-panel', false) - ->assertSee('data-jd-wallet-navigation', false); + ->assertSee('data-jd-wallet-navigation', false) + ->assertSee('data-marketing-bill-date-filter', false) + ->assertSee('id="jd-filter-from"', false) + ->assertSee('data-date-picker', false); $this->loginAs() ->get(route('business.pages.show', array_merge($base, ['jd_ledger' => 'consumption']))) @@ -608,6 +619,30 @@ class MarketingAccountBillsTabsTest extends FeatureTestCase ->assertDontSeeText('充值时间'); } + public function testMarketingAccountBillFormsUseTheSharedCalendarDateRange(): void + { + foreach ([ + 'banking/marketing_taobao_alipay_bills/partials/embedded-table.blade.php', + 'banking/marketing_alibaba_bills/partials/embedded-table.blade.php', + 'banking/marketing_pinduoduo_bills/partials/embedded-table.blade.php', + 'banking/marketing_jd_wallet_bills/partials/embedded-table.blade.php', + ] as $view) { + $this->assertStringContainsString( + "@include('business.pages.partials.marketing-bill-date-range'", + file_get_contents(resource_path('views/' . $view)), + ); + } + + $this->assertStringContainsString( + "@include('business.pages.partials.date-range-picker')", + file_get_contents(resource_path('views/business/pages/show.blade.php')), + ); + $this->assertStringContainsString( + 'setupBillDatePickers(workspace);', + file_get_contents(resource_path('assets/js/views/business/marketing-account-bills.js')), + ); + } + public function testJdWalletColdStartRegistersEveryRequiredSnapshotScope(): void { $this->allowMarketingAccountBillsPage(); -- 2.47.2