select-script.blade.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <script require="@select2">
  2. var configs = {!! json_encode($configs) !!};
  3. @if(isset($ajax))
  4. configs = $.extend(configs, {
  5. ajax: {
  6. url: "{{ $ajax['url'] }}",
  7. dataType: 'json',
  8. delay: 250,
  9. data: function (params) {
  10. return {
  11. q: params.term,
  12. page: params.page
  13. };
  14. },
  15. processResults: function (data, params) {
  16. params.page = params.page || 1;
  17. return {
  18. results: $.map(data.data, function (d) {
  19. d.id = d.{{ $ajax['idField'] }};
  20. d.text = d.{{ $ajax['textField'] }};
  21. return d;
  22. }),
  23. pagination: {
  24. more: data.next_page_url
  25. }
  26. };
  27. },
  28. cache: true
  29. },
  30. escapeMarkup: function (markup) {
  31. return markup;
  32. }
  33. });
  34. @endif
  35. @if(isset($remoteOptions))
  36. $.ajax({!! json_encode($remoteOptions) !!}).done(function(data) {
  37. configs.data = data;
  38. $("{!! $selector !!}").each(function (_, select) {
  39. select = $(select);
  40. select.select2(configs);
  41. var value = select.data('value') + '';
  42. if (value) {
  43. select.val(value.split(',')).trigger("change")
  44. }
  45. });
  46. });
  47. @else
  48. $("{!! $selector !!}").select2(configs);
  49. @endif
  50. </script>
  51. @if(isset($load))
  52. <script once>
  53. var selector = '{!! $selector !!}';
  54. $(document).off('change', selector);
  55. $(document).on('change', selector, function () {
  56. var target = $(this).closest('.fields-group').find(".{{ $load['class'] }}");
  57. if (String(this.value) !== '0' && ! this.value) {
  58. return;
  59. }
  60. $.ajax("{{ $load['url'] }}?q="+this.value).then(function (data) {
  61. target.find("option").remove();
  62. $(target).select2({
  63. data: $.map(data, function (d) {
  64. d.id = d.{{ $load['idField'] }};
  65. d.text = d.{{ $load['textField'] }};
  66. return d;
  67. })
  68. }).val(target.attr('data-value').split(',')).trigger('change');
  69. });
  70. });
  71. $(selector).trigger('change');
  72. </script>
  73. @endif
  74. @if(isset($loads))
  75. {{--loads联动--}}
  76. <script once>
  77. var selector = '{!! $selector !!}';
  78. var fields = '{!! $loads['fields'] !!}'.split('^');
  79. var urls = '{!! $loads['urls'] !!}'.split('^');
  80. var refreshOptions = function(url, target) {
  81. $.ajax(url).then(function(data) {
  82. target.find("option").remove();
  83. $(target).select2({
  84. data: $.map(data, function (d) {
  85. d.id = d.{{ $loads['idField'] }};
  86. d.text = d.{{ $loads['textField'] }};
  87. return d;
  88. })
  89. }).val(target.data('value').split(',')).trigger('change');
  90. });
  91. };
  92. $(document).off('change', selector);
  93. $(document).on('change', selector, function () {
  94. var _this = this;
  95. var promises = [];
  96. fields.forEach(function(field, index){
  97. var target = $(_this).closest('.fields-group').find('.' + fields[index]);
  98. if (_this.value !== '0' && ! _this.value) {
  99. return;
  100. }
  101. promises.push(refreshOptions(urls[index] + "?q="+ _this.value, target));
  102. });
  103. $.when(promises).then(function() {});
  104. });
  105. $(selector).trigger('change');
  106. </script>
  107. @endif
  108. {{--本地化--}}
  109. <script once>
  110. @php
  111. $lang = trans('select2');
  112. $locale = config('app.locale');
  113. @endphp
  114. if ($.fn.select2) {
  115. var e = $.fn.select2.amd;
  116. e.define("select2/i18n/{{ $locale }}", [], function () {
  117. return {
  118. errorLoading: function () {
  119. return "{{ $lang['error_loading'] }}"
  120. }, inputTooLong: function (e) {
  121. return "{{ $lang['input_too_long'] }}".replace(':num', e.input.length - e.maximum)
  122. }, inputTooShort: function (e) {
  123. return "{{ $lang['input_too_short'] }}".replace(':num', e.minimum - e.input.length)
  124. }, loadingMore: function () {
  125. return "{{ $lang['loading_more'] }}"
  126. }, maximumSelected: function (e) {
  127. return "{{ $lang['maximum_selected'] }}".replace(':num', e.maximum)
  128. }, noResults: function () {
  129. return "{{ $lang['no_results'] }}"
  130. }, searching: function () {
  131. return "{{ $lang['searching'] }}"
  132. }
  133. }
  134. }), {define: e.define, require: e.require}
  135. }
  136. </script>