37 lines
1.8 KiB
PHP
37 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Business;
|
|
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Routing\Controller;
|
|
use Modules\EcommerceFinance\Repositories\SupplierManagementMirrorRepository;
|
|
use Modules\EcommerceFinance\View\SupplierManagementPageData;
|
|
|
|
class SupplierManagement extends Controller
|
|
{
|
|
public function export(Request $request, SupplierManagementMirrorRepository $repository, SupplierManagementPageData $page)
|
|
{
|
|
abort_unless($repository->ready(), 503, '供应商资料尚未完成首次同步,暂时不能导出。');
|
|
$filters = $page->filters($request->query());
|
|
|
|
return response()->streamDownload(static function () use ($repository, $filters): void {
|
|
$csv = fopen('php://output', 'w');
|
|
fputs($csv, "\xEF\xBB\xBF");
|
|
fputcsv($csv, array_values(SupplierManagementMirrorRepository::COLUMNS));
|
|
foreach ($repository->exportRows($filters) as $row) {
|
|
$values = [];
|
|
foreach (array_keys(SupplierManagementMirrorRepository::COLUMNS) as $column) {
|
|
$value = (string) ($row->{$column} ?? '');
|
|
if ($column === 'coopersgn') $value = ['1' => '合作', '2' => '不合作'][$value] ?? '未维护';
|
|
// Excel 不能执行供应商提供的公式文本,且长编码保留为文本。
|
|
if (preg_match('/^[=+\-@\t\r\n]/', ltrim($value)) || preg_match('/^\d{12,}$/', $value)) $value = "'" . $value;
|
|
$values[] = $value;
|
|
}
|
|
fputcsv($csv, $values);
|
|
}
|
|
fclose($csv);
|
|
}, 'supplier_management_' . now()->format('Ymd_His') . '.csv',
|
|
['Content-Type' => 'text/csv; charset=UTF-8', 'Cache-Control' => 'private, no-store']);
|
|
}
|
|
}
|