select-script.blade.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. $.ajax(url).then(function(data) {
  30. target.find("option").remove();
  31. $(target).select2({
  32. data: $.map(data, function (d) {
  33. d.id = d.{{ $loads['idField'] }};
  34. d.text = d.{{ $loads['textField'] }};
  35. return d;
  36. })
  37. }).val(String(target.data('value')).split(',')).trigger('change');
  38. });
  39. };
  40. $(document).off('change', selector);
  41. $(document).on('change', selector, function () {
  42. var _this = this;
  43. var promises = [];
  44. fields.forEach(function(field, index){
  45. var target = $(_this).closest('.fields-group').find('.' + fields[index]);
  46. if (_this.value !== '0' && ! _this.value) {
  47. return;
  48. }
  49. promises.push(refreshOptions(urls[index] + (urls[index].match(/\?/)?'&':'?') + "q="+ _this.value, target));
  50. });
  51. $.when(promises).then(function() {});
  52. });
  53. $(selector).trigger('change');
  54. </script>
  55. @endif
  56. @yield('admin.select-load')