style(admin products): buttonize import/filter/batch actions

This commit is contained in:
萝卜
2026-03-14 09:53:03 +00:00
parent a556da7f94
commit 12fe0fa7cf

View File

@@ -14,9 +14,9 @@
<h3 class="mt-0">批量导入商品</h3>
<p class="muted">先下载模板,按模板填写后上传 CSV。平台模板首列需要填写 `merchant_id`,分类通过 `category_slug` 匹配。</p>
<div class="card-link-list mb-12">
<a href="/admin/products/import-template">下载导入模板</a>
<a href="{{ '/admin/products/export' . ($exportQuery ? ('?' . $exportQuery) : '') }}">导出当前筛选结果 CSV</a>
<a href="/admin/products/import-histories">查看独立导入历史页</a>
<a href="/admin/products/import-template" class="btn btn-secondary btn-sm">下载导入模板</a>
<a href="{{ '/admin/products/export' . ($exportQuery ? ('?' . $exportQuery) : '') }}" class="btn btn-secondary btn-sm">导出当前筛选结果 CSV</a>
<a href="/admin/products/import-histories" class="btn btn-secondary btn-sm">查看独立导入历史页</a>
</div>
@if(session('import_result'))
@php $importResult = session('import_result'); @endphp
@@ -31,13 +31,13 @@
</ul>
@endif
@if(!empty($importResult['failure_file']))
<div class="mt-10"><a href="/admin/products/import-failures/{{ $importResult['failure_file'] }}">下载失败明细 CSV</a></div>
<div class="mt-10"><a href="/admin/products/import-failures/{{ $importResult['failure_file'] }}" class="btn btn-secondary btn-sm">下载失败明细 CSV</a></div>
@endif
</div>
@endif
<form method="post" action="/admin/products/import" enctype="multipart/form-data">
@csrf
<div class="actions"><input type="file" name="import_file" accept=".csv,text/csv"><button type="submit">开始导入</button></div>
<div class="actions gap-10"><input type="file" name="import_file" accept=".csv,text/csv"><button type="submit" class="btn btn-sm">开始导入</button></div>
</form>
<div class="mt-16">
@@ -46,7 +46,7 @@
<h4 class="mb-6">导入历史摘要</h4>
<div class="muted">商品页仅保留摘要与最近 5 条记录;完整筛选、分页与复盘请前往独立导入历史页。</div>
</div>
<a href="/admin/products/import-histories">进入完整导入历史页</a>
<a href="/admin/products/import-histories" class="btn btn-secondary btn-sm">进入完整导入历史页</a>
</div>
<div class="grid-4 mb-12">
<div class="stat-box"><div class="muted">累计导入批次</div><strong class="num-sm">{{ $importHistoryStats['total_imports'] ?? 0 }}</strong></div>
@@ -94,7 +94,7 @@
<input type="number" min="0" name="max_stock" placeholder="最高库存" value="{{ $filters['max_stock'] }}">
<select name="sort">@foreach($filterOptions['sortOptions'] as $sortValue => $sortLabel)<option value="{{ $sortValue }}" @selected(($filters['sort'] ?? 'latest') === $sortValue)>{{ $sortLabel }}</option>@endforeach</select>
</div>
<div class="mt-12 actions"><button type="submit">筛选</button><a href="/admin/products">重置</a></div>
<div class="mt-12 actions gap-10"><button type="submit" class="btn btn-sm">筛选</button><a href="/admin/products" class="btn btn-secondary btn-sm">重置</a></div>
</form>
<div class="card section-dark my-20"><h3 class="mt-0">当前筛选摘要</h3><div class="grid-4">@foreach($activeFilterSummary as $summaryLabel => $summaryValue)<div class="summary-box"><div class="muted">{{ $summaryLabel }}</div><strong class="num-md">{{ $summaryValue }}</strong></div>@endforeach</div></div>
@@ -167,7 +167,7 @@
<input name="stock" placeholder="库存" value="{{ old('stock') }}">
</div>
<div class="mt-12"><input name="summary" placeholder="简介" class="w-full" value="{{ old('summary') }}"></div>
<div class="mt-12"><button type="submit">创建商品</button></div>
<div class="mt-12 actions"><button type="submit" class="btn btn-sm">创建商品</button></div>
</form>
</div>
@@ -176,11 +176,11 @@
<form id="platform-batch-form" method="post" action="/admin/products/batch" onsubmit="return confirm('确认执行本次批量操作?');">
@csrf
<input type="hidden" name="return_url" value="{{ request()->fullUrl() }}">
<div class="actions mb-12">
<div class="actions gap-10 mb-12">
<select name="action"><option value="change_status">批量改状态</option><option value="change_category">批量改分类</option></select>
<select name="status"><option value="">选择状态(用于批量改状态)</option>@foreach($filterOptions['statuses'] as $status)<option value="{{ $statusLabels[$status] ?? $status }}">{{ $statusLabels[$status] ?? $status }}</option>@endforeach</select>
<select name="category_id"><option value="">清空分类 / 不指定(用于批量改分类)</option>@foreach($categories as $category)<option value="{{ $category->id }}">商家{{ $category->merchant_id }} / {{ $category->name }}</option>@endforeach</select>
<button type="submit">执行批量操作</button>
<button type="submit" class="btn btn-sm">执行批量操作</button>
</div>
</form>
<p class="muted muted-tight">平台侧批量改分类会校验所选分类是否属于被勾选商品对应商家;若混选了不同商家的商品,请选择各自可用的分类或先分批处理。</p>
@@ -192,7 +192,7 @@
<td><input type="checkbox" name="product_ids[]" value="{{ $product->id }}" data-check-item="platform-products" form="platform-batch-form"></td>
<td>{{ $product->id }}</td>
<td>{{ $product->merchant?->name ?? ('商家#'.$product->merchant_id) }}</td>
<td><form method="post" action="/admin/products/{{ $product->id }}" class="actions">@csrf <input name="title" value="{{ $product->title }}"></td>
<td><form method="post" action="/admin/products/{{ $product->id }}" class="actions gap-10">@csrf <input name="title" value="{{ $product->title }}"></td>
<td><select name="category_id"><option value="">未分类</option>@foreach($categories->where('merchant_id', $product->merchant_id) as $category)<option value="{{ $category->id }}" @selected($product->category_id === $category->id)>{{ $category->name }}</option>@endforeach</select></td>
<td><input name="slug" value="{{ $product->slug }}" placeholder="slug" class="w-140 block mb-6"><input name="sku" value="{{ $product->sku }}" placeholder="SKU" class="w-140"></td>
<td><input name="price" value="{{ $product->price }}" class="w-90 block mb-6"><div class="muted">原价:¥{{ number_format((float) $product->original_price, 2) }}</div></td>
@@ -200,7 +200,7 @@
<td>{{ $product->created_at?->format('Y-m-d H:i') }}</td>
<td>{{ $product->updated_at?->format('Y-m-d H:i') }}</td>
<td><select name="status"><option value="draft" @selected($product->status==='draft')>草稿</option><option value="published" @selected($product->status==='published')>已上架</option><option value="offline" @selected($product->status==='offline')>已下架</option></select></td>
<td><button type="submit">更新</button></form><form method="post" action="/admin/products/{{ $product->id }}/delete" class="inline" onsubmit="return confirm('确定删除这个商品?');">@csrf <button type="submit" class="button-danger">删除</button></form></td>
<td><button type="submit" class="btn btn-secondary btn-sm">更新</button></form><form method="post" action="/admin/products/{{ $product->id }}/delete" class="inline" onsubmit="return confirm('确定删除这个商品?');">@csrf <button type="submit" class="btn btn-danger btn-sm">删除</button></form></td>
</tr>
@endforeach
</tbody>