select-script.blade.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. @include('admin::scripts.select')
  2. <script require="@select2?lang={{ config('app.locale') === 'en' ? '' : str_replace('_', '-', config('app.locale')) }}" init="{!! $selector !!}">
  3. var configs = {!! admin_javascript_json($configs) !!};
  4. @yield('admin.select-ajax')
  5. @if(isset($remoteOptions))
  6. $.ajax({!! admin_javascript_json($remoteOptions) !!}).done(function(data) {
  7. configs.data = data;
  8. $this.each(function (_, select) {
  9. select = $(select);
  10. select.select2(configs);
  11. var value = select.data('value') + '';
  12. if (value) {
  13. select.val(value.split(',')).trigger("change")
  14. }
  15. });
  16. });
  17. @else
  18. $this.select2(configs);
  19. @endif
  20. {!! $cascadeScript !!}
  21. </script>
  22. @if(isset($loads))
  23. {{--loads联动--}}
  24. <script once>
  25. var selector = '{!! $selector !!}';
  26. var fields = '{!! $loads['fields'] !!}'.split('^');
  27. var urls = '{!! $loads['urls'] !!}'.split('^');
  28. var refreshOptions = function(url, target) {
  29. Dcat.loading();
  30. $.ajax(url).then(function(data) {
  31. Dcat.loading(false);
  32. target.find("option").remove();
  33. $(target).select2({
  34. data: $.map(data, function (d) {
  35. d.id = d.{{ $loads['idField'] }};
  36. d.text = d.{{ $loads['textField'] }};
  37. return d;
  38. })
  39. }).val(String(target.data('value')).split(',')).trigger('change');
  40. });
  41. };
  42. $(document).off('change', selector);
  43. $(document).on('change', selector, function () {
  44. var _this = this;
  45. var promises = [];
  46. var values = [];
  47. $(this).find('option:selected').each(function () {
  48. if (String(this.value) === '0'|| this.value) {
  49. values.push(this.value)
  50. }
  51. });
  52. fields.forEach(function(field, index){
  53. var target = $(_this).closest('.fields-group').find('.' + fields[index]);
  54. if (! values.length) {
  55. return;
  56. }
  57. promises.push(refreshOptions(urls[index] + (urls[index].match(/\?/)?'&':'?') + "q="+ values.join(','), target));
  58. });
  59. $.when(promises).then(function() {});
  60. });
  61. $(selector).trigger('change');
  62. </script>
  63. @endif
  64. @yield('admin.select-load')