filters(); $columns = $data->exportColumns(); $file = tmpfile(); abort_if($file === false, 500, '无法创建导出文件。'); try { fwrite($file, "\xEF\xBB\xBF"); fputcsv($file, array_values($columns)); foreach ($data->rows($filters) as $row) { $values = []; foreach (array_keys($columns) as $key) { $values[] = $row[$key] ?? ''; } fputcsv($file, array_map(static function (mixed $value): string { $value = (string) $value; // 长数字单号保留文本,避免 Excel 截断;同时阻止公式执行。 return preg_match('/^[=+\-@\t\r\n]|^\d{12,}$/u', $value) ? "'" . $value : $value; }, $values)); } rewind($file); } catch (\Throwable $exception) { fclose($file); report($exception); abort(503, '聚工单镜像未就绪或读取失败,未生成不完整的厂家记账,请稍后重试。'); } return response()->streamDownload(static function () use ($file): void { fpassthru($file); fclose($file); }, SupplierBookkeepingPageData::TITLE . '-' . now()->format('YmdHis') . '.csv', ['Content-Type' => 'text/csv; charset=UTF-8']); } }