scaffold.blade.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. <div class="box box-primary">
  2. <div class="box-header with-border">
  3. <h3 class="box-title">Scaffold</h3>
  4. </div>
  5. <!-- /.box-header -->
  6. <div class="box-body">
  7. <form method="post" action="{{$action}}" id="scaffold" pjax-container>
  8. <div class="box-body">
  9. <div class="form-horizontal">
  10. <div class="form-group">
  11. <label for="inputTableName" class="col-sm-1 control-label">Table name</label>
  12. <div class="col-sm-4">
  13. <input type="text" name="table_name" class="form-control" id="inputTableName" placeholder="table name" value="{{ old('table_name') }}">
  14. </div>
  15. <span class="help-block hide" id="table-name-help">
  16. <i class="fa fa-info"></i>&nbsp; Table name can't be empty!
  17. </span>
  18. </div>
  19. <div class="form-group">
  20. <label for="inputModelName" class="col-sm-1 control-label">Model</label>
  21. <div class="col-sm-4">
  22. <input type="text" name="model_name" class="form-control" id="inputModelName" placeholder="model" value="{{ old('model_name', "App\\Models\\") }}">
  23. </div>
  24. </div>
  25. <div class="form-group">
  26. <label for="inputControllerName" class="col-sm-1 control-label">Controller</label>
  27. <div class="col-sm-4">
  28. <input type="text" name="controller_name" class="form-control" id="inputControllerName" placeholder="controller" value="{{ old('controller_name', "App\\Admin\\Controllers\\") }}">
  29. </div>
  30. </div>
  31. <div class="form-group">
  32. <div class="col-sm-offset-1 col-sm-11">
  33. <div class="checkbox">
  34. <label>
  35. <input type="checkbox" checked value="migration" name="create[]" /> Create migration
  36. </label>
  37. <label>
  38. <input type="checkbox" checked value="model" name="create[]" /> Create model
  39. </label>
  40. <label>
  41. <input type="checkbox" checked value="controller" name="create[]" /> Create controller
  42. </label>
  43. <label>
  44. <input type="checkbox" checked value="migrate" name="create[]" /> Run migrate
  45. </label>
  46. </div>
  47. </div>
  48. </div>
  49. </div>
  50. <hr />
  51. <h4>Fields</h4>
  52. <table class="table table-hover" id="table-fields">
  53. <tbody>
  54. <tr>
  55. <th style="width: 200px">Field name</th>
  56. <th>Type</th>
  57. <th>Size</th>
  58. <th>Nullable</th>
  59. <th>Key</th>
  60. <th>Default value</th>
  61. <th>Comment</th>
  62. <th>Action</th>
  63. </tr>
  64. @if(old('fields'))
  65. @foreach(old('fields') as $index => $field)
  66. <tr>
  67. <td>
  68. <input type="text" name="fields[{{$index}}][name]" class="form-control" placeholder="field name" value="{{$field['name']}}" />
  69. </td>
  70. <td>
  71. <select style="width: 200px" name="fields[{{$index}}][type]">
  72. @foreach($dbTypes as $type)
  73. <option value="{{ $type }}" {{$field['type'] == $type ? 'selected' : '' }}>{{$type}}</option>
  74. @endforeach
  75. </select>
  76. </td>
  77. <td><input type="number" class="form-control" placeholder="size" name="fields[{{$index}}][size]" value="{{$field['size']}}"/></td>
  78. <td><input type="checkbox" name="fields[{{$index}}][nullable]" {{ array_get($field, 'nullable') == 'on' ? 'checked': '' }}/></td>
  79. <td>
  80. <select style="width: 150px" name="fields[{{$index}}][key]">
  81. {{--<option value="primary">Primary</option>--}}
  82. <option value="" {{$field['key'] == '' ? 'selected' : '' }}>NULL</option>
  83. <option value="unique" {{$field['key'] == 'unique' ? 'selected' : '' }}>Unique</option>
  84. <option value="index" {{$field['key'] == 'index' ? 'selected' : '' }}>Index</option>
  85. </select>
  86. </td>
  87. <td><input type="text" class="form-control" placeholder="default value" name="fields[{{$index}}][default]" value="{{$field['default']}}"/></td>
  88. <td><input type="text" class="form-control" placeholder="comment" name="fields[{{$index}}][comment]" value="{{$field['comment']}}" /></td>
  89. <td><a class="btn btn-sm btn-danger table-field-remove"><i class="fa fa-trash"></i> remove</a></td>
  90. </tr>
  91. @endforeach
  92. @else
  93. <tr>
  94. <td>
  95. <input type="text" name="fields[0][name]" class="form-control" placeholder="field name" />
  96. </td>
  97. <td>
  98. <select style="width: 200px" name="fields[0][type]">
  99. @foreach($dbTypes as $type)
  100. <option value="{{ $type }}">{{$type}}</option>
  101. @endforeach
  102. </select>
  103. </td>
  104. <td><input type="number" class="form-control" placeholder="size" name="fields[0][size]" value="0"></td>
  105. <td><input type="checkbox" name="fields[0][nullable]" /></td>
  106. <td>
  107. <select style="width: 150px" name="fields[0][key]">
  108. {{--<option value="primary">Primary</option>--}}
  109. <option value="" selected>NULL</option>
  110. <option value="unique">Unique</option>
  111. <option value="index">Index</option>
  112. </select>
  113. </td>
  114. <td><input type="text" class="form-control" placeholder="default value" name="fields[0][default]"></td>
  115. <td><input type="text" class="form-control" placeholder="comment" name="fields[0][comment]"></td>
  116. <td><a class="btn btn-sm btn-danger table-field-remove"><i class="fa fa-trash"></i> remove</a></td>
  117. </tr>
  118. @endif
  119. </tbody>
  120. </table>
  121. <hr style="margin-top: 0;"/>
  122. <div class='form-inline margin' style="width: 100%">
  123. <div class='form-group'>
  124. <button type="button" class="btn btn-sm btn-success" id="add-table-field"><i class="fa fa-plus"></i>&nbsp;&nbsp;Add field</button>
  125. </div>
  126. <div class='form-group pull-right' style="margin-right: 20px; margin-top: 5px;">
  127. <div class="checkbox">
  128. <label>
  129. <input type="checkbox" checked name="timestamps"> Created_at & Updated_at
  130. </label>
  131. &nbsp;&nbsp;
  132. <label>
  133. <input type="checkbox" name="soft_deletes"> Soft deletes
  134. </label>
  135. </div>
  136. </div>
  137. <div class="form-group pull-right" style="margin-right: 20px;">
  138. <label for="inputPrimaryKey">Primary key</label>
  139. <input type="text" name="primary_key" class="form-control" id="inputPrimaryKey" placeholder="Primary key" value="id" style="width: 100px;">
  140. </div>
  141. </div>
  142. {{--<hr />--}}
  143. {{--<h4>Relations</h4>--}}
  144. {{--<table class="table table-hover" id="model-relations">--}}
  145. {{--<tbody>--}}
  146. {{--<tr>--}}
  147. {{--<th style="width: 200px">Relation name</th>--}}
  148. {{--<th>Type</th>--}}
  149. {{--<th>Related model</th>--}}
  150. {{--<th>forignKey</th>--}}
  151. {{--<th>OtherKey</th>--}}
  152. {{--<th>With Pivot</th>--}}
  153. {{--<th>Action</th>--}}
  154. {{--</tr>--}}
  155. {{--</tbody>--}}
  156. {{--</table>--}}
  157. {{--<hr style="margin-top: 0;"/>--}}
  158. {{--<div class='form-inline margin' style="width: 100%">--}}
  159. {{--<div class='form-group'>--}}
  160. {{--<button type="button" class="btn btn-sm btn-success" id="add-model-relation"><i class="fa fa-plus"></i>&nbsp;&nbsp;Add relation</button>--}}
  161. {{--</div>--}}
  162. {{--</div>--}}
  163. </div>
  164. <!-- /.box-body -->
  165. <div class="box-footer">
  166. <button type="submit" class="btn btn-info pull-right">submit</button>
  167. </div>
  168. {{ csrf_field() }}
  169. <!-- /.box-footer -->
  170. </form>
  171. </div>
  172. </div>
  173. <template id="table-field-tpl">
  174. <tr>
  175. <td>
  176. <input type="text" name="fields[__index__][name]" class="form-control" placeholder="field name" />
  177. </td>
  178. <td>
  179. <select style="width: 200px" name="fields[__index__][type]">
  180. @foreach($dbTypes as $type)
  181. <option value="{{ $type }}">{{$type}}</option>
  182. @endforeach
  183. </select>
  184. </td>
  185. <td><input type="number" class="form-control" placeholder="size" name="fields[__index__][size]" value="0"></td>
  186. <td><input type="checkbox" name="fields[__index__][nullable]" /></td>
  187. <td>
  188. <select style="width: 150px" name="fields[__index__][key]">
  189. <option value="" selected>NULL</option>
  190. <option value="unique">Unique</option>
  191. <option value="index">Index</option>
  192. </select>
  193. </td>
  194. <td><input type="text" class="form-control" placeholder="default value" name="fields[__index__][default]"></td>
  195. <td><input type="text" class="form-control" placeholder="comment" name="fields[__index__][comment]"></td>
  196. <td><a class="btn btn-sm btn-danger table-field-remove"><i class="fa fa-trash"></i> remove</a></td>
  197. </tr>
  198. </template>
  199. <template id="model-relation-tpl">
  200. <tr>
  201. <td><input type="text" class="form-control" placeholder="relation name" value=""></td>
  202. <td>
  203. <select style="width: 150px">
  204. <option value="HasOne" selected>HasOne</option>
  205. <option value="BelongsTo">BelongsTo</option>
  206. <option value="HasMany">HasMany</option>
  207. <option value="BelongsToMany">BelongsToMany</option>
  208. </select>
  209. </td>
  210. <td><input type="text" class="form-control" placeholder="related model"></td>
  211. <td><input type="text" class="form-control" placeholder="default value"></td>
  212. <td><input type="text" class="form-control" placeholder="default value"></td>
  213. <td><input type="checkbox" /></td>
  214. <td><a class="btn btn-sm btn-danger model-relation-remove"><i class="fa fa-trash"></i> remove</a></td>
  215. </tr>
  216. </template>
  217. <script>
  218. $(function () {
  219. $('input[type=checkbox]').iCheck({checkboxClass:'icheckbox_minimal-blue'});
  220. $('select').select2();
  221. $('#add-table-field').click(function (event) {
  222. $('#table-fields tbody').append($('#table-field-tpl').html().replace(/__index__/g, $('#table-fields tr').length - 1));
  223. $('select').select2();
  224. $('input[type=checkbox]').iCheck({checkboxClass:'icheckbox_minimal-blue'});
  225. });
  226. $('#table-fields').on('click', '.table-field-remove', function(event) {
  227. $(event.target).closest('tr').remove();
  228. });
  229. $('#add-model-relation').click(function (event) {
  230. $('#model-relations tbody').append($('#model-relation-tpl').html().replace(/__index__/g, $('#model-relations tr').length - 1));
  231. $('select').select2();
  232. $('input[type=checkbox]').iCheck({checkboxClass:'icheckbox_minimal-blue'});
  233. relation_count++;
  234. });
  235. $('#model-relations').on('click', '.model-relation-remove', function(event) {
  236. $(event.target).closest('tr').remove();
  237. });
  238. $('#scaffold').on('submit', function (event) {
  239. //event.preventDefault();
  240. if ($('#inputTableName').val() == '') {
  241. $('#inputTableName').closest('.form-group').addClass('has-error');
  242. $('#table-name-help').removeClass('hide');
  243. return false;
  244. }
  245. return true;
  246. });
  247. });
  248. </script>