InviteController.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\Invite;
  5. use Illuminate\Contracts\View\View;
  6. use Illuminate\Http\JsonResponse;
  7. use Log;
  8. use PhpOffice\PhpSpreadsheet\Exception;
  9. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  10. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  11. use Str;
  12. class InviteController extends Controller
  13. {
  14. public function index(): View
  15. { // 邀请码列表
  16. return view('admin.aff.invite', [
  17. 'inviteList' => Invite::with(['invitee:id,username', 'inviter:id,username'])->orderBy('status')->orderByDesc('id')->paginate(15)->appends(request('page')),
  18. ]);
  19. }
  20. public function generate(): JsonResponse
  21. { // 生成邀请码
  22. for ($i = 0; $i < 10; $i++) {
  23. $obj = new Invite;
  24. $obj->code = strtoupper(substr(md5(microtime().Str::random(6)), 8, 12));
  25. $obj->dateline = date('Y-m-d H:i:s', strtotime(sysConfig('admin_invite_days').' days'));
  26. $obj->save();
  27. }
  28. return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.generate')])]);
  29. }
  30. public function export(): void
  31. { // 导出邀请码
  32. $inviteList = Invite::whereStatus(0)->orderBy('id')->get();
  33. $filename = trans('user.invite.attribute').'_'.date('Ymd').'.xlsx';
  34. $spreadsheet = new Spreadsheet;
  35. $spreadsheet->getProperties()->setCreator('ProxyPanel')->setLastModifiedBy('ProxyPanel')->setTitle(trans('user.invite.attribute'))->setSubject(trans('user.invite.attribute'));
  36. $spreadsheet->setActiveSheetIndex(0);
  37. $sheet = $spreadsheet->getActiveSheet();
  38. $sheet->setTitle(trans('user.invite.attribute'));
  39. $sheet->fromArray([trans('user.invite.attribute'), trans('common.available_date')]);
  40. foreach ($inviteList as $k => $vo) {
  41. $sheet->fromArray([$vo->code, $vo->dateline], null, 'A'.($k + 2));
  42. }
  43. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); // 输出07Excel文件
  44. // header('Content-Type:application/vnd.ms-excel'); // 输出Excel03版本文件
  45. header('Content-Disposition: attachment;filename="'.$filename.'"');
  46. header('Cache-Control: max-age=0');
  47. try {
  48. $writer = new Xlsx($spreadsheet);
  49. $writer->save('php://output');
  50. } catch (Exception $e) {
  51. Log::error(trans('common.error_action_item', ['action' => trans('common.export'), 'attribute' => trans('user.invite.attribute')]).': '.$e->getMessage());
  52. }
  53. }
  54. }