ImportAction.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <?php
  2. namespace App\Admin\Actions\Vaccines;
  3. use Encore\Admin\Actions\Action;
  4. use Illuminate\Http\Request;
  5. use App\Imports\Vaccines\ImportMember;
  6. use Encore\Admin\Admin;
  7. use Maatwebsite\Excel\Facades\Excel;
  8. class ImportAction extends Action
  9. {
  10. protected $selector = '.import-action';
  11. public function handle(Request $request)
  12. {
  13. try{
  14. // $request ...
  15. $file = $request-> file('file');
  16. Excel::import(new ImportMember(),$file);
  17. return $this->response()->success('数据导入成功')->refresh();
  18. }catch (\Exception $e){
  19. return $this->response()->error($e -> getMessage());
  20. }
  21. }
  22. public function html()
  23. {
  24. return <<<HTML
  25. <a class="btn btn-sm btn-default import-action">导入</a>
  26. HTML;
  27. }
  28. //表单
  29. public function form()
  30. {
  31. $this
  32. ->file('file', '请选择文件')
  33. ->options(['showPreview' => false,
  34. 'allowedFileExtensions'=>['xlsx','xls','csv'],
  35. 'showUpload'=>true
  36. ]);
  37. }
  38. //上传等待
  39. public function handleActionPromise()
  40. {
  41. $resolve = <<<SCRIPT
  42. var actionResolverss = function (data) {
  43. $('.modal-footer').show()
  44. $('.tips').remove()
  45. var response = data[0];
  46. var target = data[1];
  47. if (typeof response !== 'object') {
  48. return $.admin.swal({type: 'error', title: 'Oops!'});
  49. }
  50. var then = function (then) {
  51. if (then.action == 'refresh') {
  52. $.admin.reload();
  53. }
  54. if (then.action == 'download') {
  55. window.open(then.value, '_blank');
  56. }
  57. if (then.action == 'redirect') {
  58. $.admin.redirect(then.value);
  59. }
  60. };
  61. if (typeof response.html === 'string') {
  62. target.html(response.html);
  63. }
  64. if (typeof response.swal === 'object') {
  65. $.admin.swal(response.swal);
  66. }
  67. if (typeof response.toastr === 'object') {
  68. $.admin.toastr[response.toastr.type](response.toastr.content, '', response.toastr.options);
  69. }
  70. if (response.then) {
  71. then(response.then);
  72. }
  73. };
  74. var actionCatcherss = function (request) {
  75. $('.modal-footer').show()
  76. $('.tips').remove()
  77. if (request && typeof request.responseJSON === 'object') {
  78. $.admin.toastr.error(request.responseJSON.message, '', {positionClass:"toast-bottom-center", timeOut: 10000}).css("width","500px")
  79. }
  80. };
  81. SCRIPT;
  82. Admin::script($resolve);
  83. return <<<SCRIPT
  84. $('.modal-footer').hide()
  85. let html = `<div class='tips' style='color: #ff3249;font-size: 18px;'>导入时间取决于数据量,请耐心等待结果不要关闭窗口!<img src="data:image/gif;base64,R0lGODlhEAAQAPQAAP///1VVVfr6+np6eqysrFhYWG5ubuPj48TExGNjY6Ojo5iYmOzs7Lq6utjY2ISEhI6OjgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAAFUCAgjmRpnqUwFGwhKoRgqq2YFMaRGjWA8AbZiIBbjQQ8AmmFUJEQhQGJhaKOrCksgEla+KIkYvC6SJKQOISoNSYdeIk1ayA8ExTyeR3F749CACH5BAkKAAAALAAAAAAQABAAAAVoICCKR9KMaCoaxeCoqEAkRX3AwMHWxQIIjJSAZWgUEgzBwCBAEQpMwIDwY1FHgwJCtOW2UDWYIDyqNVVkUbYr6CK+o2eUMKgWrqKhj0FrEM8jQQALPFA3MAc8CQSAMA5ZBjgqDQmHIyEAIfkECQoAAAAsAAAAABAAEAAABWAgII4j85Ao2hRIKgrEUBQJLaSHMe8zgQo6Q8sxS7RIhILhBkgumCTZsXkACBC+0cwF2GoLLoFXREDcDlkAojBICRaFLDCOQtQKjmsQSubtDFU/NXcDBHwkaw1cKQ8MiyEAIfkECQoAAAAsAAAAABAAEAAABVIgII5kaZ6AIJQCMRTFQKiDQx4GrBfGa4uCnAEhQuRgPwCBtwK+kCNFgjh6QlFYgGO7baJ2CxIioSDpwqNggWCGDVVGphly3BkOpXDrKfNm/4AhACH5BAkKAAAALAAAAAAQABAAAAVgICCOZGmeqEAMRTEQwskYbV0Yx7kYSIzQhtgoBxCKBDQCIOcoLBimRiFhSABYU5gIgW01pLUBYkRItAYAqrlhYiwKjiWAcDMWY8QjsCf4DewiBzQ2N1AmKlgvgCiMjSQhACH5BAkKAAAALAAAAAAQABAAAAVfICCOZGmeqEgUxUAIpkA0AMKyxkEiSZEIsJqhYAg+boUFSTAkiBiNHks3sg1ILAfBiS10gyqCg0UaFBCkwy3RYKiIYMAC+RAxiQgYsJdAjw5DN2gILzEEZgVcKYuMJiEAOwAAAAAAAAAAAA=="><\/div>`
  86. $('.modal-header').append(html)
  87. process.then(actionResolverss).catch(actionCatcherss);
  88. SCRIPT;
  89. }
  90. }