- |
+ |
@if ($error)
{{ $error }}
@elseif ($platformTotal === 0)
diff --git a/tests/Feature/Business/StoreViolationAlertPageTest.php b/tests/Feature/Business/StoreViolationAlertPageTest.php
index 18fac931..27e9a39e 100644
--- a/tests/Feature/Business/StoreViolationAlertPageTest.php
+++ b/tests/Feature/Business/StoreViolationAlertPageTest.php
@@ -37,6 +37,8 @@ class StoreViolationAlertPageTest extends FeatureTestCase
$table->string('shop_name', 191)->default('');
$table->string('violation_type', 500)->nullable();
$table->string('violation_category', 64)->nullable();
+ $table->string('violation_reason', 500)->nullable();
+ $table->string('disposition', 500)->nullable();
$table->string('violation_no', 100);
$table->date('violation_date')->nullable();
$table->decimal('points_deducted', 10, 2)->nullable();
@@ -69,21 +71,24 @@ class StoreViolationAlertPageTest extends FeatureTestCase
DB::connection('business_mirror')->table('store_violation_records')->insert([
[
'platform' => 'jd', 'shop_name' => '京东-亿家达全屋旗舰店', 'violation_type' => '延迟发货/缺货无货',
- 'violation_category' => '发货履约', 'violation_no' => 'JD202610040001', 'violation_date' => '2026-10-04',
+ 'violation_category' => '发货履约', 'violation_reason' => '订单存在延迟发货、缺货无货', 'disposition' => '警告',
+ 'violation_no' => 'JD202610040001', 'violation_date' => '2026-10-04',
'points_deducted' => 2, 'status' => '待处理', 'penalty_date' => null, 'appeal_deadline' => '2026-10-11',
'handling_status' => '未处理', 'source' => 'crawl', 'crawl_date' => '2026-10-04',
'created_at' => '2026-10-05 08:00:00', 'updated_at' => '2026-10-05 08:00:00',
],
[
'platform' => 'jd', 'shop_name' => '京东-卓禾卧室家具旗舰店', 'violation_type' => '订单存在揽收超时行为',
- 'violation_category' => '发货履约', 'violation_no' => 'JD202610040002', 'violation_date' => '2026-10-03',
+ 'violation_category' => '发货履约', 'violation_reason' => '订单存在揽收超时行为', 'disposition' => null,
+ 'violation_no' => 'JD202610040002', 'violation_date' => '2026-10-03',
'points_deducted' => null, 'status' => '超期未申诉', 'penalty_date' => '2026-10-05', 'appeal_deadline' => '2026-10-08',
'handling_status' => '处理中', 'source' => 'crawl', 'crawl_date' => '2026-10-04',
'created_at' => '2026-10-05 08:00:00', 'updated_at' => '2026-10-05 08:00:00',
],
[
'platform' => 'jingxi', 'shop_name' => '京喜-久伴吾家具京喜自营工厂店', 'violation_type' => '发票违规',
- 'violation_category' => '发票与考核', 'violation_no' => 'JX202610040001', 'violation_date' => '2026-10-04',
+ 'violation_category' => '发票与考核', 'violation_reason' => null, 'disposition' => '维持原判',
+ 'violation_no' => 'JX202610040001', 'violation_date' => '2026-10-04',
'points_deducted' => null, 'status' => '已处置', 'penalty_date' => null, 'appeal_deadline' => null,
'handling_status' => '已处理', 'source' => 'crawl', 'crawl_date' => '2026-10-04',
'created_at' => '2026-10-05 08:00:00', 'updated_at' => '2026-10-05 08:00:00',
@@ -117,11 +122,14 @@ class StoreViolationAlertPageTest extends FeatureTestCase
->assertSee('店铺名')
->assertSee('违规类型')
->assertSee('违规分类')
+ ->assertSee('违规原因')
+ ->assertSee('处置方式')
->assertSee('违规单号')
->assertSee('违规日期')
->assertSee('扣分')
->assertSee('申诉截止日期')
->assertSee('处理状态')
+ ->assertSee('订单存在延迟发货、缺货无货')
->assertSee('JD202610040001')
->assertSee('京东-亿家达全屋旗舰店')
->assertSee('data-platform-panel="jingxi"', false);
@@ -166,13 +174,15 @@ class StoreViolationAlertPageTest extends FeatureTestCase
file_put_contents($temp, $binary);
$sheet = IOFactory::load($temp)->getActiveSheet();
- $headers = $sheet->rangeToArray('A1:J1')[0];
+ $headers = $sheet->rangeToArray('A1:L1')[0];
$this->assertSame(
- ['店铺名', '违规类型', '违规分类', '违规单号', '违规日期', '扣分', '状态', '处罚日期', '申诉截止日期', '处理状态'],
+ ['店铺名', '违规类型', '违规分类', '违规原因', '处置方式', '违规单号', '违规日期', '扣分', '状态', '处罚日期', '申诉截止日期', '处理状态'],
$headers,
);
- $this->assertSame('JD202610040001', $sheet->getCell('D2')->getValue());
+ $this->assertSame('订单存在延迟发货、缺货无货', $sheet->getCell('D2')->getValue());
+ $this->assertSame('警告', $sheet->getCell('E2')->getValue());
+ $this->assertSame('JD202610040001', $sheet->getCell('F2')->getValue());
unlink($temp);
}
@@ -237,6 +247,43 @@ class StoreViolationAlertPageTest extends FeatureTestCase
$response->assertSessionHasErrors('import');
}
+ public function test_import_maps_reason_and_disposition_columns(): void
+ {
+ $this->allowPage();
+
+ $file = $this->makeWorkbook([
+ ['店铺名', '违规单号', '违规原因', '处置方式'],
+ ['京东-纪辰家具旗舰店', 'JD202610040088', '订单存在揽收超时行为', '警告;整改'],
+ ]);
+
+ $preview = $this->loginAs()->post(route('business.store-violation-alert.import.preview'), [
+ 'platform' => 'jd',
+ 'import' => $file,
+ ]);
+
+ $preview->assertRedirect();
+ $payload = $preview->getSession()->get('store_violation_preview');
+ $this->assertIsArray($payload);
+ $this->assertSame(1, $payload['summary']['new']);
+
+ $commit = $this->loginAs()->post(route('business.store-violation-alert.import.commit'), [
+ 'preview_token' => $payload['token'],
+ ]);
+ $commit->assertRedirect();
+
+ $record = DB::connection('business_mirror')
+ ->table('store_violation_records')
+ ->where('platform', 'jd')
+ ->where('violation_no', 'JD202610040088')
+ ->first();
+
+ $this->assertNotNull($record);
+ $this->assertSame('订单存在揽收超时行为', $record->violation_reason);
+ $this->assertSame('警告;整改', $record->disposition);
+ // 未提供违规类型时,违规分类按违规原因关键词自动归类。
+ $this->assertSame('发货履约', $record->violation_category);
+ }
+
/** @param list> $rows */
private function makeWorkbook(array $rows): UploadedFile
{
diff --git a/tests/Unit/Business/StoreViolationMapperTest.php b/tests/Unit/Business/StoreViolationMapperTest.php
index e654ef30..e165fd45 100644
--- a/tests/Unit/Business/StoreViolationMapperTest.php
+++ b/tests/Unit/Business/StoreViolationMapperTest.php
@@ -71,6 +71,33 @@ class StoreViolationMapperTest extends TestCase
$this->assertNull($this->mapper->normalizePoints('不扣分'));
}
+ public function test_map_crawl_row_includes_reason_and_disposition_when_upstream_provides_them(): void
+ {
+ $base = [
+ 'shop_name' => '京喜-久伴吾家具京喜自营工厂店',
+ 'violation_no' => '86522327',
+ 'violation_date' => '2026-09-30',
+ 'deadline' => '2026-10-07',
+ 'violation_content' => '订单存在揽收超时行为',
+ 'status' => '待处理',
+ 'window_name' => '京喜-久伴吾家具京喜自营工厂店_商家后台',
+ 'platform' => '京喜',
+ 'crawl_date' => '2026-10-04',
+ ];
+
+ $mapped = $this->mapper->mapCrawlRow($base + [
+ 'violation_reason' => '订单存在揽收超时行为',
+ 'disposition' => '警告;扣2分',
+ ]);
+ $this->assertSame('订单存在揽收超时行为', $mapped['violation_reason']);
+ $this->assertSame('警告;扣2分', $mapped['disposition']);
+
+ // 上游尚未提供两列时保持 null,避免同步误覆盖导入补充的数据。
+ $legacy = $this->mapper->mapCrawlRow($base);
+ $this->assertNull($legacy['violation_reason']);
+ $this->assertNull($legacy['disposition']);
+ }
+
public function test_unrecognized_points_throw(): void
{
$this->expectException(InvalidArgumentException::class);
diff --git a/tests/Unit/Console/StoreViolationsSyncExtraColumnsTest.php b/tests/Unit/Console/StoreViolationsSyncExtraColumnsTest.php
new file mode 100644
index 00000000..3f301800
--- /dev/null
+++ b/tests/Unit/Console/StoreViolationsSyncExtraColumnsTest.php
@@ -0,0 +1,33 @@
+assertSame([], SyncStoreViolations::pickExtraColumns([
+ 'id', 'shop_name', 'violation_no', 'violation_date', 'deadline',
+ 'violation_content', 'status', 'window_name', 'platform', 'crawl_date',
+ ]));
+ }
+
+ public function test_picks_exact_and_alternative_column_names_case_insensitively(): void
+ {
+ $this->assertSame(
+ ['violation_reason' => 'violation_reason', 'disposition' => 'disposition'],
+ SyncStoreViolations::pickExtraColumns(['id', 'violation_reason', 'disposition']),
+ );
+
+ $this->assertSame(
+ ['violation_reason' => 'reason', 'disposition' => 'handling_method'],
+ SyncStoreViolations::pickExtraColumns(['Reason', 'HANDLING_METHOD']),
+ );
+ }
+}
From 6b6b97a375724aaeda2e6c9dbd0f20727b5737e4 Mon Sep 17 00:00:00 2001
From: zhoushengchen <3057083327@qq.com>
Date: Tue, 13 Oct 2026 11:32:28 +0800
Subject: [PATCH 15/44] =?UTF-8?q?=E5=BA=94=E4=BB=98=E4=BA=91=E4=BB=93?=
=?UTF-8?q?=E8=BD=A6=E8=B4=B9=EF=BC=9A=E7=AD=9B=E9=80=89=E5=8C=BA=E6=94=B6?=
=?UTF-8?q?=E7=B4=A7=E3=80=81=E8=A1=A8=E6=A0=BC=E5=8C=BA=E6=94=BE=E5=A4=A7?=
=?UTF-8?q?=20(#324)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
...payable-cloud-warehouse-vehicle-fee.blade.php | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/resources/views/business/pages/courier-payables/payable-cloud-warehouse-vehicle-fee.blade.php b/resources/views/business/pages/courier-payables/payable-cloud-warehouse-vehicle-fee.blade.php
index eded0d9e..0312fcd3 100644
--- a/resources/views/business/pages/courier-payables/payable-cloud-warehouse-vehicle-fee.blade.php
+++ b/resources/views/business/pages/courier-payables/payable-cloud-warehouse-vehicle-fee.blade.php
@@ -19,19 +19,21 @@
From 7223a2eb2ea3d1cf9ce92f6b318a4880d14e35a9 Mon Sep 17 00:00:00 2001
From: zhoushengchen <3057083327@qq.com>
Date: Tue, 13 Oct 2026 11:53:43 +0800
Subject: [PATCH 16/44] =?UTF-8?q?=E5=BA=94=E4=BB=98=E4=BA=91=E4=BB=93?=
=?UTF-8?q?=E8=BD=A6=E8=B4=B9=EF=BC=9A=E8=A1=A8=E6=A0=BC=E6=95=B0=E6=8D=AE?=
=?UTF-8?q?=E5=8C=BA=E5=A1=AB=E6=BB=A1=E5=88=B0=E5=BA=95=E9=83=A8=20(#325)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../payable-cloud-warehouse-vehicle-fee.blade.php | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/resources/views/business/pages/courier-payables/payable-cloud-warehouse-vehicle-fee.blade.php b/resources/views/business/pages/courier-payables/payable-cloud-warehouse-vehicle-fee.blade.php
index 0312fcd3..3144eccc 100644
--- a/resources/views/business/pages/courier-payables/payable-cloud-warehouse-vehicle-fee.blade.php
+++ b/resources/views/business/pages/courier-payables/payable-cloud-warehouse-vehicle-fee.blade.php
@@ -33,7 +33,11 @@
.ding-payable-button.primary { border-color:var(--vip-content-accent-dark,#856632); background:var(--vip-content-accent-dark,#856632); color:#fff; }
.ding-payable-alert { padding:.75rem 1rem; margin-bottom:1rem; border:1px solid var(--vip-danger,#B80000); border-radius:.5rem; background:#fff5f5; color:var(--vip-danger,#B80000); }
.ding-payable-meta { display:flex; flex-wrap:wrap; gap:.75rem; align-items:center; margin-bottom:.5rem; color:var(--vip-content-muted,#595959); font-size:.75rem; }
- .ding-payable-page .ding-payable-table-wrap { max-height:min(calc(100vh - 16.5rem), 46rem); }
+ /* 表格区填满整块区域:提高高度上限,并回收本页外层容器的底部留白。 */
+ .my-6:has(.ding-payable-page) { margin-bottom: .4rem; }
+ .business-content-section:has(.ding-payable-page) { padding-bottom: .4rem; }
+ .container:has(.ding-payable-page) { margin-bottom: 0; padding-bottom: 0; }
+ .ding-payable-page .ding-payable-table-wrap { max-height:min(calc(100vh - 12rem), 46rem); }
.ding-payable-table-wrap { overflow:auto; border:1px solid var(--vip-border,#D8D2C7); border-radius:.5rem; background:#fff; }
.ding-payable-table { width:100%; min-width:125rem; border-collapse:separate; border-spacing:0; font-size:.75rem; }
.ding-payable-table th,.ding-payable-table td { padding:.55rem .65rem; border-right:1px solid var(--vip-border,#D8D2C7); border-bottom:1px solid var(--vip-border,#D8D2C7); white-space:nowrap; vertical-align:top; }
From 0fa52090f78e9059e9584e105aeddb6a2bb5894d Mon Sep 17 00:00:00 2001
From: zhoushengchen <3057083327@qq.com>
Date: Tue, 13 Oct 2026 12:10:58 +0800
Subject: [PATCH 17/44] =?UTF-8?q?=E9=80=80=E8=B4=A7=E5=8F=96=E4=BB=B6?=
=?UTF-8?q?=E7=AE=A1=E7=90=86=EF=BC=9A=E5=90=8C=E6=AD=A5=E6=9D=A1=E4=B8=8E?=
=?UTF-8?q?=E7=AD=9B=E9=80=89=E5=8C=BA=E6=94=B6=E7=B4=A7=E3=80=81=E5=88=97?=
=?UTF-8?q?=E8=A1=A8=E5=8C=BA=E6=94=BE=E5=A4=A7=20(#326)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../return-pickup-management.blade.php | 43 +++++++++++--------
1 file changed, 24 insertions(+), 19 deletions(-)
diff --git a/resources/views/business/pages/courier-payables/return-pickup-management.blade.php b/resources/views/business/pages/courier-payables/return-pickup-management.blade.php
index d23c299c..9ffdcfbc 100644
--- a/resources/views/business/pages/courier-payables/return-pickup-management.blade.php
+++ b/resources/views/business/pages/courier-payables/return-pickup-management.blade.php
@@ -66,7 +66,7 @@
color: var(--vip-content-ink, #171717);
font-family: JetBrains Mono, Microsoft YaHei, PingFang SC, monospace;
font-size: 0.8125rem;
- margin: 1.5rem 0;
+ margin: .5rem 0 .4rem;
}
.return-pickup-status {
@@ -74,7 +74,7 @@
align-items: center;
justify-content: space-between;
gap: 12px;
- padding: 10px 14px;
+ padding: 6px 12px;
border: 1px solid var(--vip-border, #d8d2c7);
border-radius: 12px;
background: #fff;
@@ -101,17 +101,17 @@
.return-pickup-status__meta {
display: flex;
flex-wrap: wrap;
- gap: 4px 14px;
+ gap: 3px 12px;
color: var(--vip-content-muted, #595959);
- font-size: 0.75rem;
+ font-size: 0.7rem;
}
.return-pickup-filters {
display: grid;
grid-template-columns: repeat(6, minmax(0, 1fr));
- gap: 10px 14px;
- margin-top: 14px;
- padding: 14px;
+ gap: 6px 10px;
+ margin-top: 8px;
+ padding: 8px 10px;
border: 1px solid var(--vip-border, #d8d2c7);
border-radius: 12px;
background: #fff;
@@ -121,21 +121,21 @@
display: flex;
min-width: 0;
flex-direction: column;
- gap: 4px;
+ gap: 3px;
}
.return-pickup-field label {
color: var(--vip-content-muted, #595959);
- font-size: 0.75rem;
+ font-size: 0.7rem;
}
.return-pickup-field input,
.return-pickup-field select {
- min-height: 34px;
+ min-height: 28px;
border: 1px solid var(--vip-border, #d8d2c7);
- border-radius: 8px;
+ border-radius: 6px;
background: #fff;
- padding: 0 10px;
+ padding: 0 8px;
color: var(--vip-content-ink, #171717);
font: inherit;
outline: none;
@@ -144,18 +144,18 @@
.return-pickup-actions {
display: flex;
align-items: flex-end;
- gap: 8px;
+ gap: 6px;
}
.return-pickup-button {
display: inline-flex;
- min-height: 34px;
+ min-height: 28px;
align-items: center;
- gap: 6px;
+ gap: 5px;
border: 1px solid var(--vip-border, #d8d2c7);
- border-radius: 8px;
+ border-radius: 6px;
background: #fff;
- padding: 0 12px;
+ padding: 0 9px;
color: var(--vip-content-ink, #171717);
font: inherit;
cursor: pointer;
@@ -210,11 +210,16 @@
}
.return-pickup-table-wrap--scroll {
- max-height: max(16rem, min(56vh, 40rem));
+ max-height: max(14rem, min(calc(100vh - 19.5rem), 44rem));
overflow-y: auto;
scrollbar-gutter: stable;
}
+ /* 列表区填满底部:回收本页外层容器留白(仅本页生效)。 */
+ .my-6:has(.return-pickup-page) { margin-bottom: .4rem; }
+ .business-content-section:has(.return-pickup-page) { padding-bottom: .4rem; }
+ .container:has(.return-pickup-page) { margin-bottom: 0; padding-bottom: 0; }
+
.return-pickup-table-wrap--scroll thead th {
position: sticky;
top: 0;
@@ -296,7 +301,7 @@
align-items: center;
justify-content: space-between;
gap: 12px;
- padding: 10px 12px;
+ padding: 5px 12px;
border-top: 1px solid var(--vip-border, #d8d2c7);
color: var(--vip-content-muted, #595959);
font-size: 0.75rem;
From b962c23e92996413c241ee89aaf5c1ed7f8d7b9d Mon Sep 17 00:00:00 2001
From: zhoushengchen <3057083327@qq.com>
Date: Tue, 13 Oct 2026 13:13:14 +0800
Subject: [PATCH 18/44] =?UTF-8?q?=E9=99=84=E5=8A=A0=E8=B4=B9=E7=BB=93?=
=?UTF-8?q?=E7=AE=97=EF=BC=9A=E5=AF=BC=E5=85=A5/=E6=98=8E=E7=BB=86?=
=?UTF-8?q?=E5=A4=B4=E6=94=B6=E7=B4=A7=E3=80=81=E7=BB=93=E6=9E=9C=E7=BB=9F?=
=?UTF-8?q?=E8=AE=A1=E5=B9=B6=E5=85=A5=E5=AF=BC=E5=85=A5=E8=A1=8C=E5=8F=B3?=
=?UTF-8?q?=E4=BE=A7=20(#327)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../courier-surcharge-settlement.blade.php | 20 ++++++++++---------
1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/resources/views/business/pages/courier-payables/courier-surcharge-settlement.blade.php b/resources/views/business/pages/courier-payables/courier-surcharge-settlement.blade.php
index fc8c1304..1a55c0f9 100644
--- a/resources/views/business/pages/courier-payables/courier-surcharge-settlement.blade.php
+++ b/resources/views/business/pages/courier-payables/courier-surcharge-settlement.blade.php
@@ -141,18 +141,20 @@
.settlement-button--primary { border-color: var(--settlement-accent); background: var(--settlement-accent); color: #fff; }
.settlement-button .material-icons-outlined { font-size: .95rem; }
.settlement-import-bar { display: flex; flex-wrap: wrap; align-items: end; gap: .45rem .75rem; margin-top: .45rem; padding: .5rem .9rem; border: 1px solid var(--settlement-border); border-radius: .75rem; background: #fff; }
- .settlement-import-bar .settlement-field { flex: 0 1 22rem; }
+ .settlement-import-bar .settlement-field { flex: 0 1 18rem; }
.settlement-import-bar input[type="file"] { width: 100%; height: 1.9rem; padding: .25rem .5rem; border: 1px dashed var(--settlement-border); border-radius: .4rem; background: #fffdf8; color: var(--settlement-ink); font: inherit; }
.settlement-import-bar .settlement-table-hint { align-self: center; flex-basis: 100%; }
+ .settlement-import-meta { display: flex; flex-wrap: wrap; align-items: center; gap: .15rem .9rem; margin-left: auto; align-self: center; color: var(--settlement-muted); font-size: .7rem; }
+ .settlement-import-meta strong { color: var(--settlement-ink); }
.settlement-table-surface { overflow: visible; border: 1px solid var(--settlement-border); border-radius: .75rem; background: #fff; }
- .settlement-table-head { display: flex; align-items: flex-start; justify-content: space-between; flex-wrap: wrap; gap: .75rem 1rem; padding: .85rem 1.15rem; border-bottom: 1px solid var(--settlement-border); }
+ .settlement-table-head { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: .4rem .9rem; padding: .5rem .9rem; border-bottom: 1px solid var(--settlement-border); }
+ .settlement-table-head .finance-table-controls { margin: 0; padding: 0; border: 0; background: transparent; }
.settlement-table-title { display: flex; align-items: center; gap: .45rem; font-size: .9rem; font-weight: 700; }
.settlement-table-title .material-icons-outlined { color: var(--settlement-accent); font-size: 1.1rem; }
- .settlement-table-hint { color: var(--settlement-muted); font-size: .72rem; }
- .settlement-table-meta { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: .6rem 1rem; padding: .65rem 1.15rem; border-bottom: 1px solid var(--settlement-border); background: #fffdf8; color: var(--settlement-muted); font-size: .72rem; }
- .settlement-table-meta strong { color: var(--settlement-ink); }
- .settlement-table-scroll { max-height: min(62vh, 42rem); overflow: auto; overscroll-behavior: contain; scrollbar-gutter: stable both-edges; }
+ .settlement-table-hint { color: var(--settlement-muted); font-size: .68rem; }
+ .settlement-table-scroll { overflow: auto; overscroll-behavior: contain; scrollbar-gutter: stable both-edges; }
+ .surcharge-settlement-page .settlement-table-scroll { max-height: max(14rem, min(calc(100vh - 12rem), 46rem)); }
.settlement-table { width: max-content; min-width: 100%; border-collapse: separate; border-spacing: 0; font-size: .75rem; }
.settlement-table th,
.settlement-table td { min-width: 7.5rem; padding: .62rem .7rem; border-right: 1px solid var(--settlement-border); border-bottom: 1px solid var(--settlement-border); text-align: left; vertical-align: top; white-space: nowrap; }
@@ -246,12 +248,12 @@
download下载导入模板
- 首行需包含「单号」「附加费类型」,建议提供「快递名称」;「金额」可选,填了会返回导入金额与差异金额(系统金额 − 导入金额)。未生成结算行的运单用导入核验获取字段明细。
+ 当前筛选结果:{{ number_format((int) ($summary['count'] ?? $rows->total()), 0) }} 条数据状态:{{ $syncLabel }}@if (! empty($sync['last_succeeded_at'])),最近同步 {{ $sync['last_succeeded_at'] }}@endif
+ 首行需包含「单号」「附加费类型」,建议提供「快递名称」;「金额」可选,填了会返回与系统的差异金额。
- table_view附加费结算明细 快递名称和附加费类型固定显示,其余字段可在“列设置”中调整;点击行可高亮标记。 列设置按当前用户和本页面保存
- 当前筛选结果:{{ number_format((int) ($summary['count'] ?? $rows->total()), 0) }} 条数据状态:{{ $syncLabel }}@if (! empty($sync['last_succeeded_at'])),最近同步 {{ $sync['last_succeeded_at'] }}@endif
+ table_view附加费结算明细 快递名称和附加费类型固定显示,其余字段可在“列设置”中调整;点击行可高亮标记。
|