ajaxSelect.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. mgJsComponentHandler.addDefaultComponent('mg-ajax-select', {
  2. template: '#t-mg-ajax-select',
  3. props: [
  4. 'component_id',
  5. 'component_namespace',
  6. 'component_index',
  7. 'reload_fields_ids',
  8. 'is_multiple',
  9. 'hide_by_default_if_no_data'
  10. ],
  11. data: function () {
  12. return {
  13. options: [],
  14. selected: null
  15. };
  16. },
  17. created: function () {
  18. var self = this;
  19. self.$nextTick(function () {
  20. self.loadAjaxData();
  21. });
  22. //create reload events
  23. for (var key in self.reload_fields_ids) {
  24. if (!self.reload_fields_ids.hasOwnProperty(key)) {
  25. continue;
  26. }
  27. mgEventHandler.on('SelectFieldValueChanged', self.reload_fields_ids[key], function (id, params) {
  28. self.loadAjaxData();
  29. });
  30. }
  31. },
  32. methods: {
  33. initSelect: function () {
  34. var self = this;
  35. if ($('#' + self.component_id).hasClass('selectized')) {
  36. var selectizedInstance = $('#' + self.component_id).selectize();
  37. selectizedInstance[0].selectize.destroy();
  38. }
  39. $('#' + self.component_id).selectize({
  40. valueField: 'key',
  41. labelField: 'value',
  42. searchField: 'value',
  43. create: false,
  44. plugins: ['remove_button'],
  45. options: self.options,
  46. items: self.selected
  47. });
  48. },
  49. loadAjaxData: function () {
  50. var self = this;
  51. self.loading_state = true;
  52. var loadFormData = false;
  53. for (var key in self.reload_fields_ids) {
  54. if (!self.reload_fields_ids.hasOwnProperty(key)) {
  55. continue;
  56. }
  57. if (self.reload_fields_ids[key] !== '' && self.reload_fields_ids)
  58. {
  59. loadFormData = true;
  60. break;
  61. }
  62. }
  63. if (loadFormData) {
  64. var tmpForm = $("select[name='" + self.component_id + "']").parents('form').first();
  65. var tmpFormId = $(tmpForm).attr('id');
  66. var tmpFormDataHandler = new mgFormControler(tmpFormId);
  67. var formData = tmpFormDataHandler.getFieldsData();
  68. if (typeof formData.formData !== 'undefined') {
  69. formData = formData.formData;
  70. }
  71. } else {
  72. var formData = {};
  73. }
  74. var requestParams = {
  75. loadData: self.component_id,
  76. namespace: self.component_namespace,
  77. index: self.component_index
  78. };
  79. for (var key in formData) {
  80. if (!formData.hasOwnProperty(key)) {
  81. continue;
  82. }
  83. requestParams[key] = formData[key];
  84. }
  85. var response = mgPageControler.vueLoader.vloadData(requestParams);
  86. return response.done(function (data) {
  87. self.options = [];
  88. for (var key in data.data.rawData.options) {
  89. if (!data.data.rawData.options.hasOwnProperty(key)) {
  90. continue;
  91. }
  92. var tmpOpt = {};
  93. tmpOpt[key] = data.data.rawData.options[key];
  94. self.options.push({}[key] = data.data.rawData.options[key]);
  95. }
  96. self.selected = typeof data.data.rawData.selected === 'string' ? [data.data.rawData.selected] : data.data.rawData.selected;
  97. self.$nextTick(function () {
  98. self.showSelectIfHidden();
  99. });
  100. self.$nextTick(function () {
  101. self.initSelect();
  102. });
  103. }).fail(function () {
  104. self.$nextTick(function () {
  105. self.initSelect();
  106. });
  107. });
  108. },
  109. showSelectIfHidden: function () {
  110. var self = this;
  111. if (self.hide_by_default_if_no_data && self.options.length > 0) {
  112. if ($('#' + self.component_id).parents('.lu-form-group').first().length > 0) {
  113. $('#' + self.component_id).parents('.lu-form-group').first().removeAttr('hidden');
  114. }
  115. }
  116. }
  117. }
  118. });