移除售后费用页聚水潭工单区块 #101

Merged
yueyang merged 1 commits from feature/yueyang-remove-after-sales-work-orders into main 2026-09-03 17:06:33 +08:00
2 changed files with 3 additions and 199 deletions

View File

@ -6,24 +6,6 @@
'shop_name' => mb_substr(trim((string) request('shop_name', '')), 0, 100),
'sku_id' => mb_substr(trim((string) request('sku_id', '')), 0, 100),
];
try {
$workOrders = app(\Modules\EcommerceFinance\Repositories\WorkOrderMirrorRepository::class)->paginateAfterSales(
max((int) request('work_order_page', 1), 1),
10,
$filters,
);
} catch (\Throwable) {
$workOrders = [
'data' => [],
'total' => 0,
'page' => max((int) request('work_order_page', 1), 1),
'per_page' => 10,
'last_page' => 1,
'ready' => false,
'sync_status' => ['ready' => false, 'code' => 'unavailable', 'last_succeeded_at' => null, 'datasets' => []],
];
}
$refundFilters = [
'from' => $filters['from'] ?: now()->subDays(6)->toDateString(),
'to' => $filters['to'] ?: now()->toDateString(),
@ -90,26 +72,6 @@
@include('business.pages.partials.upstream-data-styles')
<style>
.financial-after-sales-page .after-sales-work-order-head {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 1rem;
padding: 1rem;
border-bottom: 1px solid var(--vip-border, #d8d2c7);
}
.financial-after-sales-page .after-sales-work-order-head h2 {
margin: 0;
font-size: .875rem;
}
.financial-after-sales-page .after-sales-work-order-head p {
margin: .35rem 0 0;
color: var(--vip-content-muted, #595959);
font-size: .78125rem;
}
.financial-after-sales-page .after-sales-filters {
display: grid;
grid-template-columns: repeat(5, minmax(9rem, 1fr)) auto;
@ -147,56 +109,6 @@
gap: .5rem;
}
.financial-after-sales-page .after-sales-work-order-table-wrap {
overflow-x: auto;
}
.financial-after-sales-page .after-sales-work-order-table {
width: 100%;
min-width: 54rem;
border-collapse: collapse;
}
.financial-after-sales-page .after-sales-work-order-table th,
.financial-after-sales-page .after-sales-work-order-table td {
padding: .75rem 1rem;
border-bottom: 1px solid var(--vip-border, #d8d2c7);
text-align: left;
vertical-align: top;
font-size: .78125rem;
}
.financial-after-sales-page .after-sales-work-order-table th {
background: var(--vip-content-accent-soft, #f7f0de);
color: var(--vip-content-ink, #171717);
font-weight: 600;
}
.financial-after-sales-page .after-sales-work-order-table td {
color: var(--vip-content-ink, #171717);
}
.financial-after-sales-page .after-sales-work-order-table td:last-child {
max-width: 20rem;
color: var(--vip-content-muted, #595959);
}
.financial-after-sales-page .after-sales-work-order-pagination {
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
padding: .75rem 1rem;
color: var(--vip-content-muted, #595959);
font-size: .78125rem;
}
.financial-after-sales-page .after-sales-work-order-pagination__controls {
display: inline-flex;
align-items: center;
gap: .5rem;
}
.financial-after-sales-page .after-sales-refund-head {
display: flex;
align-items: flex-start;
@ -281,8 +193,6 @@
}
@media (max-width: 560px) {
.financial-after-sales-page .after-sales-work-order-head,
.financial-after-sales-page .after-sales-work-order-pagination,
.financial-after-sales-page .after-sales-refund-head,
.financial-after-sales-page .after-sales-refund-pagination {
align-items: flex-start;
@ -440,81 +350,4 @@
@endif
</section>
<section class="upstream-data-table-panel" aria-labelledby="financial-after-sales-work-orders-title">
<div class="after-sales-work-order-head">
<div>
<h2 id="financial-after-sales-work-orders-title">聚水潭售后工单</h2>
<p>工单作为售后处理线索展示,费用金额仍以订单售后费用明细的金额字段为准。</p>
</div>
@if (($workOrders['ready'] ?? false) && ($workOrders['total'] ?? 0) > 0)
<span>{{ $workOrders['total'] }} 条工单</span>
@endif
</div>
@if (!($workOrders['ready'] ?? false))
<div class="upstream-data-alert" role="status">
<span class="material-icons-outlined" aria-hidden="true">sync</span>
<span>聚水潭售后工单镜像尚未完成首次同步,当前不把空镜像解释为没有工单。</span>
</div>
@endif
<div class="after-sales-work-order-table-wrap">
<table class="after-sales-work-order-table" aria-label="聚水潭售后工单列表">
<thead>
<tr>
<th>工单号</th>
<th>工单类型</th>
<th>标题</th>
<th>状态</th>
<th>创建人</th>
<th>创建时间</th>
<th>表单信息</th>
</tr>
</thead>
<tbody>
@forelse (($workOrders['data'] ?? []) as $workOrder)
<tr>
<td>{{ $workOrder['order_no'] ?? '-' }}</td>
<td>{{ $workOrder['work_type_name'] ?? '-' }}</td>
<td>{{ $workOrder['title'] ?? '-' }}</td>
<td>{{ $workOrder['status'] ?? '-' }}</td>
<td>{{ $workOrder['create_user'] ?? '-' }}</td>
<td>{{ $workOrder['create_time'] ?? '-' }}</td>
<td>
@forelse (($workOrder['form_values'] ?? []) as $formValue)
<div>{{ $formValue['field_name'] ?? $formValue['field_code'] ?? '字段' }}:{{ $formValue['field_value'] ?? '-' }}</div>
@empty
-
@endforelse
</td>
</tr>
@empty
<tr>
<td colspan="7">{{ ($workOrders['ready'] ?? false) ? '当前筛选暂无售后工单。' : '等待售后工单镜像首次同步。' }}</td>
</tr>
@endforelse
</tbody>
</table>
</div>
@if (($workOrders['ready'] ?? false) && ($workOrders['last_page'] ?? 1) > 1)
<div class="after-sales-work-order-pagination">
<span>第 {{ $workOrders['page'] }} / {{ $workOrders['last_page'] }} 页,共 {{ $workOrders['total'] }} 条</span>
<div class="after-sales-work-order-pagination__controls">
<a
href="{{ $workOrders['page'] > 1 ? request()->fullUrlWithQuery(['work_order_page' => $workOrders['page'] - 1]) : '#' }}"
@class(['upstream-data-button', 'is-disabled' => $workOrders['page'] <= 1])
aria-label="上一页售后工单"
title="上一页售后工单"
><span class="material-icons-outlined" aria-hidden="true">chevron_left</span></a>
<a
href="{{ $workOrders['page'] < $workOrders['last_page'] ? request()->fullUrlWithQuery(['work_order_page' => $workOrders['page'] + 1]) : '#' }}"
@class(['upstream-data-button', 'is-disabled' => $workOrders['page'] >= $workOrders['last_page']])
aria-label="下一页售后工单"
title="下一页售后工单"
><span class="material-icons-outlined" aria-hidden="true">chevron_right</span></a>
</div>
</div>
@endif
</section>
</div>

View File

@ -5,7 +5,6 @@ namespace Tests\Feature\Business;
use App\Models\Auth\Permission;
use Modules\EcommerceFinance\Models\AlipayBill;
use Modules\EcommerceFinance\Repositories\NonJingxiRefundMirrorRepository;
use Modules\EcommerceFinance\Repositories\WorkOrderMirrorRepository;
use Tests\Feature\FeatureTestCase;
class PagesTest extends FeatureTestCase
@ -189,7 +188,7 @@ class PagesTest extends FeatureTestCase
}
}
public function testFinancialAfterSalesPageRendersMirroredJushuitanWorkOrders(): void
public function testFinancialAfterSalesPageRendersMirroredJushuitanRefunds(): void
{
$this->user->attachPermission(
Permission::where('name', 'read-admin-panel')->firstOrFail()
@ -245,31 +244,6 @@ class PagesTest extends FeatureTestCase
]);
$this->app->instance(NonJingxiRefundMirrorRepository::class, $refunds);
$workOrders = \Mockery::mock(WorkOrderMirrorRepository::class);
$workOrders->shouldReceive('paginateAfterSales')->once()->withArgs(function (int $page, int $limit, array $filters): bool {
return $page === 1 && $limit === 10
&& $filters['from'] === '2026-08-24'
&& $filters['to'] === '2026-08-24'
&& $filters['shop_name'] === '天猫旗舰店';
})->andReturn([
'data' => [[
'order_no' => 'WO-FIN-005',
'work_type_name' => '天猫_售后超标',
'title' => '售后超标提醒',
'status' => '待处理',
'create_user' => '运营一组',
'create_time' => '2026-08-24 10:00:00',
'form_values' => [['field_name' => '店铺名称', 'field_value' => '天猫旗舰店']],
]],
'total' => 1,
'page' => 1,
'per_page' => 10,
'last_page' => 1,
'ready' => true,
'sync_status' => ['ready' => true, 'code' => 'ready', 'last_succeeded_at' => '2026-08-24 12:00:00', 'datasets' => []],
]);
$this->app->instance(WorkOrderMirrorRepository::class, $workOrders);
$this->loginAs()
->get(route('business.pages.show', [
'section' => 'financial-operations',
@ -279,11 +253,8 @@ class PagesTest extends FeatureTestCase
'shop_name' => '天猫旗舰店',
]))
->assertOk()
->assertSeeText('聚水潭售后工单')
->assertSeeText('WO-FIN-005')
->assertSeeText('天猫_售后超标')
->assertSeeText('天猫旗舰店')
->assertSeeText('费用金额仍以订单售后费用明细的金额字段为准')
->assertDontSeeText('聚水潭售后工单')
->assertDontSeeText('WO-FIN-005')
->assertSeeText('售后(退货退款)明细')
->assertSeeText('AS-FIN-001')
->assertSeeText('ORDER-FIN-001')