create.blade.php 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. @extends('layouts.app')
  2. @section('title')创建教程@endsection
  3. @section('head')
  4. <link rel="stylesheet" type="text/css" href="{{asset('css/trix.css')}}">
  5. <script type="text/javascript" src="{{asset('js/trix.js')}}"></script>
  6. <script>
  7. addEventListener("trix-file-accept", function(event) {
  8. var config = laravelTrixConfig(event);
  9. if(
  10. config.hideToolbar ||
  11. (config.hideTools && config.hideTools.indexOf("file-tools") != -1) ||
  12. (config.hideButtonIcons && config.hideButtonIcons.indexOf("attach") != -1)
  13. ) {
  14. return event.preventDefault();
  15. }
  16. });
  17. addEventListener("trix-attachment-remove", function(event) {
  18. var config = laravelTrixConfig(event);
  19. var xhr = new XMLHttpRequest();
  20. var attachment = event.attachment.attachment.attributes.values.url.split("/").pop();
  21. xhr.open("DELETE", "{{url('laravel-trix/attachment/:attachment')}}".replace(':attachment',attachment), true);
  22. setAttachementUrlCollectorValue('attachment-' + config['id'], function(collector){
  23. for( var i = 0; i < collector.length; i++){
  24. if ( collector[i] === attachment) {
  25. collector.splice(i, 1);
  26. }
  27. }
  28. return collector;
  29. });
  30. xhr.send();
  31. });
  32. addEventListener("trix-attachment-add", function(event) {
  33. var config = laravelTrixConfig(event);
  34. if (event.attachment.file) {
  35. var attachment = event.attachment;
  36. config['attachment'] = attachment;
  37. uploadFile(config, setProgress, setAttributes, errorCallback);
  38. function setProgress(progress) {
  39. attachment.setUploadProgress(progress);
  40. }
  41. function setAttributes(attributes) {
  42. attachment.setAttributes(attributes);
  43. }
  44. function errorCallback(xhr,attachment){
  45. attachment.remove();
  46. alert(xhr.statusText);
  47. }
  48. }
  49. });
  50. function uploadFile(data, progressCallback, successCallback, errorCallback) {
  51. var formData = createFormData(data);
  52. var xhr = new XMLHttpRequest();
  53. xhr.open("POST", "{{url('laravel-trix/attachment')}}", true);
  54. xhr.upload.addEventListener("progress", function(event) {
  55. var progress = (event.loaded / event.total) * 100;
  56. progressCallback(progress);
  57. });
  58. xhr.addEventListener("load", function(event) {
  59. if (xhr.status >= 200 && xhr.status < 300) {
  60. var response = JSON.parse(xhr.response);
  61. setAttachementUrlCollectorValue('attachment-' + data['id'], function(collector){
  62. collector.push(response.url.split("/").pop())
  63. return collector;
  64. });
  65. successCallback({
  66. url : response.url,
  67. href: response.url
  68. })
  69. } else {
  70. errorCallback(xhr,data.attachment)
  71. }
  72. });
  73. xhr.send(formData);
  74. }
  75. function setAttachementUrlCollectorValue(inputId, callback){
  76. var attachmentCollector = document.getElementById(inputId);
  77. attachmentCollector.value = JSON.stringify(callback(JSON.parse(attachmentCollector.value)));
  78. }
  79. function createFormData(data) {
  80. var formData = new FormData();
  81. formData.append("Content-Type", data.attachment.file.type);
  82. formData.append("file", data.attachment.file);
  83. formData.append("field", data.field);
  84. formData.append("modelClass", data.modelClass);
  85. if(data.disk != undefined) {
  86. formData.append("disk", data.disk);
  87. }
  88. return formData;
  89. }
  90. function laravelTrixConfig (event) {
  91. return JSON.parse(event.target.getAttribute("data-config"));
  92. }
  93. window.onload = function() {
  94. var laravelTrixInstanceStyles = document.getElementsByTagName('laravel-trix-instance-style');
  95. var style = document.createElement('style');
  96. style.type = 'text/css';
  97. for (var tag of laravelTrixInstanceStyles) {
  98. style.innerHTML += tag.textContent + ' ';
  99. }
  100. document.getElementsByTagName('head')[0].appendChild(style);
  101. }
  102. </script>
  103. @endsection
  104. @section('content')
  105. <div id="nav2">
  106. @component('maintenance.menu')@endcomponent
  107. @component('maintenance.tutorial.menu')@endcomponent
  108. </div>
  109. <div class="card col-md-8 offset-md-2" id="tutorial">
  110. <div class="card-body">
  111. <form method="POST" action="{{ url('maintenance/tutorial') }}">
  112. @csrf
  113. <div class="form-group row">
  114. <label for="owner_id" class="col-2 col-form-label text-right">所属货主</label>
  115. <div class="col-8">
  116. <select @if(isset($owner_id)) v-model="owner_id" @endif name="owner_id" class="form-control @error('owner_id') is-invalid @enderror" style="width: 50%">
  117. <option v-for="owner in owners" :value="owner.id">@{{ owner.name }}</option>
  118. </select>
  119. </div>
  120. </div>
  121. <div class="form-group row">
  122. <label for="name" class="col-2 col-form-label text-right">标题</label>
  123. <div class="col-8">
  124. <input type="text" class="form-control @error('name') is-invalid @enderror"
  125. name="name" autocomplete="off" value="{{ old('name') }}" required>
  126. @error('name')
  127. <span class="invalid-feedback" role="alert">
  128. <strong>{{ $errors->first('name') }}</strong>
  129. </span>
  130. @enderror
  131. </div>
  132. </div>
  133. <div id="for-trix"></div>
  134. <div class="form-group row">
  135. <label for="initial_weight" class="col-2 col-form-label text-right">内容</label>
  136. <div class="col-8" id="content"></div>
  137. </div>
  138. <div class="form-group row">
  139. <label for="type" class="col-2 col-form-label text-right">类型</label>
  140. <div class="col-8">
  141. <select name="type" class="form-control" style="width: 50%;">
  142. <option value="二次加工">二次加工</option>
  143. </select>
  144. </div>
  145. </div>
  146. <div class="form-group row">
  147. <div class="col-8 offset-2">
  148. <input type="submit" class="btn btn-success form-control">
  149. </div>
  150. </div>
  151. </form>
  152. </div>
  153. </div>
  154. </div>
  155. <div id="trix">
  156. @trix(\App\Tutorial::class, 'content')
  157. </div>
  158. @endsection
  159. @section('lastScript')
  160. <script>
  161. new Vue({
  162. el:"#tutorial",
  163. data:{
  164. owners:[
  165. @foreach($owners as $owner)
  166. {!! $owner !!},
  167. @endforeach
  168. ],
  169. @if(isset($owner_id)) owner_id:'{{$owner_id}}', @endif
  170. },
  171. mounted() {
  172. let trix=$("#trix");
  173. $("#content").append(trix);
  174. },
  175. });
  176. </script>
  177. @endsection