create.blade.php 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  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="{{mix('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 class="card col-md-8 offset-md-2" id="tutorial">
  106. <div class="card-body">
  107. <form method="POST" action="{{ url('maintenance/tutorial') }}">
  108. @csrf
  109. <div class="form-group row">
  110. <label for="owner_id" class="col-2 col-form-label text-right">所属货主</label>
  111. <div class="col-8">
  112. <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%">
  113. <option v-for="owner in owners" :value="owner.id">@{{ owner.name }}</option>
  114. </select>
  115. </div>
  116. </div>
  117. <div class="form-group row">
  118. <label for="name" class="col-2 col-form-label text-right">标题</label>
  119. <div class="col-8">
  120. <input type="text" class="form-control @error('name') is-invalid @enderror"
  121. name="name" autocomplete="off" value="{{ old('name') }}" required>
  122. @error('name')
  123. <span class="invalid-feedback" role="alert">
  124. <strong>{{ $errors->first('name') }}</strong>
  125. </span>
  126. @enderror
  127. </div>
  128. </div>
  129. <div id="for-trix"></div>
  130. <div class="form-group row">
  131. <label for="initial_weight" class="col-2 col-form-label text-right">内容</label>
  132. <div class="col-8" id="content"></div>
  133. </div>
  134. <div class="form-group row">
  135. <label for="type" class="col-2 col-form-label text-right">类型</label>
  136. <div class="col-8">
  137. <select name="type" class="form-control" style="width: 50%;">
  138. <option value="二次加工">二次加工</option>
  139. </select>
  140. </div>
  141. </div>
  142. <div class="form-group row">
  143. <div class="col-8 offset-2">
  144. <input type="submit" class="btn btn-success form-control">
  145. </div>
  146. </div>
  147. </form>
  148. </div>
  149. </div>
  150. </div>
  151. <div id="trix">
  152. @trix(\App\Tutorial::class, 'content')
  153. </div>
  154. @endsection
  155. @section('lastScript')
  156. <script>
  157. new Vue({
  158. el:"#tutorial",
  159. data:{
  160. owners:[
  161. @foreach($owners as $owner)
  162. {!! $owner !!},
  163. @endforeach
  164. ],
  165. @if(isset($owner_id)) owner_id:'{{$owner_id}}', @endif
  166. },
  167. mounted() {
  168. let trix=$("#trix");
  169. $("#content").append(trix);
  170. },
  171. });
  172. </script>
  173. @endsection