edit.blade.php 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. @extends('layouts.app')
  2. @section('title')修改教程@endsection
  3. @section('head')
  4. <link rel="stylesheet" type="text/css" href="{{mix('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 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/'.$tutorial->id) }}">
  112. @csrf
  113. @method('PUT')
  114. <div class="form-group row">
  115. <label for="owner_id" class="col-2 col-form-label text-right">所属货主</label>
  116. <div class="col-8">
  117. <select name="owner_id" class="form-control @error('owner_id') is-invalid @enderror" style="width: 50%">
  118. <option v-for="owner in owners" selected v-if="tutorial.owner_id==owner.id" :value="owner.id">@{{ owner.name }}</option>
  119. <option v-for="owner in owners" v-if="tutorial.owner_id!=owner.id" :value="owner.id">@{{ owner.name }}</option>
  120. </select>
  121. </div>
  122. </div>
  123. <div class="form-group row">
  124. <label for="name" class="col-2 col-form-label text-right">标题</label>
  125. <div class="col-8">
  126. <input type="text" class="form-control @error('name') is-invalid @enderror"
  127. name="name" autocomplete="off" :value="tutorial.name" required>
  128. @error('name')
  129. <span class="invalid-feedback" role="alert">
  130. <strong>{{ $errors->first('name') }}</strong>
  131. </span>
  132. @enderror
  133. </div>
  134. </div>
  135. <div id="for-trix"></div>
  136. <div class="form-group row">
  137. <label for="initial_weight" class="col-2 col-form-label text-right">内容</label>
  138. <div class="col-8" id="content"></div>
  139. </div>
  140. <div class="form-group row">
  141. <label for="type" class="col-2 col-form-label text-right">类型</label>
  142. <div class="col-8">
  143. <select name="type" class="form-control" style="width: 50%;">
  144. <option value="二次加工">二次加工</option>
  145. </select>
  146. </div>
  147. </div>
  148. <div class="form-group row">
  149. <div class="col-8 offset-2">
  150. <input type="submit" class="btn btn-success form-control">
  151. </div>
  152. </div>
  153. </form>
  154. </div>
  155. </div>
  156. </div>
  157. <div id="trix">
  158. @trix($tutorial, 'content')
  159. </div>
  160. @endsection
  161. @section('lastScript')
  162. <script>
  163. new Vue({
  164. el:"#tutorial",
  165. data:{
  166. tutorial:{owner_id:'{{old('owner_id')?old('owner_id'):$tutorial->owner_id}}',
  167. name:'{{old('name')?old('name'):$tutorial->name}}',type:'{{old('type')?old('type'):$tutorial->type}}'},
  168. owners:[
  169. @foreach($owners as $owner)
  170. {!! $owner !!},
  171. @endforeach
  172. ],
  173. },
  174. mounted() {
  175. let trix=$("#trix");
  176. $("#content").append(trix);
  177. },
  178. });
  179. </script>
  180. @endsection