1
0

InviteController.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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', ['inviteList' => Invite::with(['invitee:id,username', 'inviter:id,username'])->orderBy('status')->orderByDesc('id')->paginate(15)->appends(request('page'))]);
  17. }
  18. public function generate(): JsonResponse
  19. { // 生成邀请码
  20. $invites = [];
  21. $expirationDate = date('Y-m-d H:i:s', strtotime(sysConfig('admin_invite_days').' days'));
  22. for ($i = 0; $i < 10; $i++) {
  23. $invites[] = [
  24. 'code' => strtoupper(substr(md5(microtime().Str::random(6)), 8, 12)),
  25. 'dateline' => $expirationDate,
  26. ];
  27. }
  28. Invite::insert($invites);
  29. return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.generate')])]);
  30. }
  31. public function export(): void
  32. { // 导出邀请码
  33. $inviteList = Invite::whereStatus(0)->select(['code', 'dateline'])->get();
  34. $filename = trans('user.invite.attribute').'_'.date('Ymd').'.xlsx';
  35. $spreadsheet = new Spreadsheet;
  36. $spreadsheet->getProperties()
  37. ->setCreator('ProxyPanel')
  38. ->setLastModifiedBy('ProxyPanel')
  39. ->setTitle(trans('user.invite.attribute'))
  40. ->setSubject(trans('user.invite.attribute'));
  41. $spreadsheet->setActiveSheetIndex(0);
  42. $sheet = $spreadsheet->getActiveSheet();
  43. $sheet->setTitle(trans('user.invite.attribute'));
  44. $sheet->fromArray([trans('user.invite.attribute'), trans('common.available_date')]);
  45. foreach ($inviteList as $k => $vo) {
  46. $sheet->fromArray([$vo->code, $vo->dateline], null, 'A'.($k + 2));
  47. }
  48. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  49. header('Content-Disposition: attachment;filename="'.$filename.'"');
  50. header('Cache-Control: max-age=0');
  51. try {
  52. $writer = new Xlsx($spreadsheet);
  53. $writer->save('php://output');
  54. } catch (Exception $e) {
  55. Log::error(trans('common.error_action_item', ['action' => trans('common.export'), 'attribute' => trans('user.invite.attribute')]).': '.$e->getMessage());
  56. }
  57. }
  58. }