|
| 1 | +<?php |
| 2 | + |
| 3 | +namespace App\Controller\Common; |
| 4 | + |
| 5 | +use App\Middleware\RequestMiddleware; |
| 6 | +use App\Controller\AbstractController; |
| 7 | +use Hyperf\HttpServer\Annotation\Controller; |
| 8 | +use Hyperf\HttpServer\Annotation\Middleware; |
| 9 | +use Hyperf\HttpServer\Annotation\RequestMapping; |
| 10 | + |
| 11 | + |
| 12 | +/** |
| 13 | + * Excel导出控制器 |
| 14 | + * @Controller(prefix="excel") |
| 15 | + */ |
| 16 | +class ExcelExportController extends AbstractController |
| 17 | +{ |
| 18 | + /** |
| 19 | + * 获取Excel内容数据 |
| 20 | + * @RequestMapping(path="excel_content", methods="post") |
| 21 | + * @Middleware(RequestMiddleware::class) |
| 22 | + */ |
| 23 | + public function getExcelContent() |
| 24 | + { |
| 25 | + $requestParams = $this->request->all(); |
| 26 | + $data = $requestParams['data'] ?? []; //数据模块 |
| 27 | + $percentArr = $requestParams['percent_arr'] ?? []; //是否百分比的字段 |
| 28 | + $tableHeader = $requestParams['table_header'] ?? []; //表头字段 |
| 29 | + $tableHeaderMean = $requestParams['table_header_mean'] ?? []; //表头字段解释 |
| 30 | + $stringArr = $requestParams['string_arr'] ?? []; // 需要以字符形式导出的字段(防止科学计数法格式) |
| 31 | + $time = $requestParams['time'] ?? 'time'; //时间字段 |
| 32 | + |
| 33 | + $tableContent = ''; |
| 34 | + $tableContent .= '<table id="tables"><tbody><tr>'; |
| 35 | + foreach ($tableHeader as $k => $v) { |
| 36 | + $tableContent .= '<th>' . $tableHeaderMean[$v] . '</th>'; |
| 37 | + } |
| 38 | + $tableContent .= '</tr>'; |
| 39 | + foreach($data as $k => $v) { |
| 40 | + $tableContent .= '<tr>'; |
| 41 | + foreach ($tableHeader as $k1 => $v1) { |
| 42 | + //判断是否为时间戳格式 |
| 43 | + if (($v1 == $time || preg_match('/_time/', $v1)) && is_numeric($v[$v1])) { |
| 44 | + if (in_array($v1, $stringArr)) { |
| 45 | + $tableContent .= '<td style="mso-number-format:\'\@\';" data-tableexport-msonumberformat="\@">' . date('Y-m-d H:i:s', $v[$v1]) . '</td>'; |
| 46 | + } else { |
| 47 | + $tableContent .= '<td>' . date('Y-m-d H:i:s', $v[$v1]) . '</td>'; |
| 48 | + } |
| 49 | + }else { |
| 50 | + if (in_array($v1, $stringArr)) { |
| 51 | + $tableContent .= '<td style="mso-number-format:\'\@\';" data-tableexport-msonumberformat="\@">' . $v[$v1] . ((in_array($v1, $percentArr)) ? '%' : '') . '</td>'; |
| 52 | + } else { |
| 53 | + $tableContent .= '<td>' . $v[$v1] . ((in_array($v1, $percentArr)) ? '%' : '') . '</td>'; |
| 54 | + } |
| 55 | + } |
| 56 | + } |
| 57 | + $tableContent .= '</tr>'; |
| 58 | + } |
| 59 | + $tableContent .= '</tbody></table>'; |
| 60 | + return $this->success([ |
| 61 | + 'excel_content' => $tableContent |
| 62 | + ]); |
| 63 | + } |
| 64 | +} |
0 commit comments