移除售后费用页聚水潭工单区块 #101
@ -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>
|
||||
|
||||
@ -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')
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user