add.blade.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. @extends('admin.public.base')
  2. @section('body_class')
  3. style="margin: 0 auto;width: 96%;padding: 30px 0px;"
  4. @endsection
  5. @section('content')
  6. <form class="post-form" action="" method="post">
  7. <div class="form-group col-sm-2">
  8. <label class="control-label">课程配图</label>
  9. <div id="thumb">
  10. <a id="thumb-image" href="#" data-toggle="image" class="img-thumb">
  11. <img src="{{path_compat('')}}" height="100" />
  12. </a>
  13. <input type="hidden" name="thumb" value="" id="input-image" />
  14. </div>
  15. </div>
  16. <div class="form-group col-sm-2">
  17. <label class="control-label">课程视频</label>
  18. <div id="video_src">
  19. <a id="video_upload" href="javascript:;" class="img-thumb" >
  20. <video src="{{path_compat('')}}" poster="{{path_compat('')}}" height="100" width="100" ></video>
  21. </a>
  22. <input type="hidden" name="video_src" value="" />
  23. </div>
  24. </div>
  25. <div class="form-group col-sm-4">
  26. <label class="control-label">课程名称</label>
  27. <input class="form-control" required="required" type="text" placeholder="课程名称" maxlength="40" name="name" value="" />
  28. </div>
  29. <div class="form-group col-sm-2">
  30. <label class="control-label">开始时间</label>
  31. <input class="form-control" required="required" type="datetime-local" placeholder="开始时间" name="start_time" value="" />
  32. </div>
  33. <div class="form-group col-sm-2">
  34. <label class="control-label">结束时间</label>
  35. <input class="form-control" required="required" type="datetime-local" placeholder="结束时间" name="end_time" value="" />
  36. </div>
  37. <div class="form-group col-sm-12">
  38. <label class="control-label">课程介绍</label>
  39. <textarea required="required" id="container" name="content" placeholder="课程介绍" ></textarea>
  40. </div>
  41. <div class="form-group col-sm-12">
  42. @csrf
  43. <input id="send" type="submit" value="提交" class="btn btn-primary btn-block" />
  44. </div>
  45. </form>
  46. @endsection
  47. @section('javascript')
  48. <script src="/static/ueditor/ueditor.config.js"></script>
  49. <script src="/static/ueditor/ueditor.all.js"></script>
  50. <script type="text/javascript">
  51. var editor = new UE.ui.Editor();
  52. editor.render("container");
  53. </script>
  54. <script type="text/javascript">
  55. $('#video_upload').on('click', function() {
  56. // 定义预签名URL
  57. var signedUrl = '';
  58. var videoSrc = '';
  59. // 请求接口获取签名URL
  60. $.ajax({
  61. url: "{{url('admin/video_course/get_sign_url')}}",
  62. type: 'get',
  63. dataType: 'json',
  64. success: function(data) {
  65. // 判断返回值
  66. if(data.code != 'success'){
  67. art.dialog({content: data.msg,lock: true,ok: function() {}});
  68. return ;
  69. }
  70. // 获取签名URL
  71. signedUrl = data.data.sign_url;
  72. videoSrc = data.data.video_src;
  73. // 没有获取到结果的话,结束
  74. if( !signedUrl ) {
  75. return;
  76. }
  77. // 移除之前上传的表单
  78. $('#form-upload').remove();
  79. // 生成一个表单,并且使用CSRF
  80. $('body').prepend('<form enctype="multipart/form-data" id="form-upload" style="display: none;"><input osctype="btn_upload_file" id="form-upload-file" type="file" name="file" /> @csrf </form>');
  81. $('#form-upload input[name=\'file\']').trigger('click');
  82. },
  83. error: function(xhr, status, error) {
  84. console.error('Error:', error);
  85. }
  86. });
  87. $(document).on('change','#form-upload-file',function(){
  88. // 获取文件
  89. const fileInput = document.getElementById('form-upload-file');
  90. const file = fileInput.files[0];
  91. // 如果没有上传文件
  92. if ( !file ) {
  93. art.dialog({content: '请上传文件',lock: true,ok: function() {}});
  94. return ;
  95. }
  96. // 调用上传
  97. upload(file, signedUrl);
  98. })
  99. const upload = async (file, presignedUrl) => {
  100. // 提示上传中
  101. art.dialog({id:'loading',lock: true,title:'视频上传中'});
  102. // 上传文件
  103. const response = await fetch(presignedUrl, {method: 'PUT',body: file.slice(0, file.size)});
  104. // 移除loading
  105. art.dialog.list['loading'].close();
  106. // 结果
  107. if (!response.ok) {
  108. art.dialog({content: '上传失败',lock: true,ok: function() {}});
  109. return ;
  110. }
  111. // 显示上传成功的图片
  112. $('#video_upload').html('<video src="'+videoSrc+'" height="100" width="100" ></video>');
  113. $('#video_src input').val(videoSrc);
  114. };
  115. });
  116. </script>
  117. @endsection