drill.step.ui.js 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. window.deleteDrill = function(event)
  2. {
  3. let {drills} = pivotState();
  4. let drillIndex = getDrillIndex(event);
  5. delete drills[drillIndex];
  6. pivotState('drills', drills);
  7. updateDesignPage('deleteDrill');
  8. }
  9. /* Drill setting */
  10. window.getDrillIndex = function(e)
  11. {
  12. return parseInt($(e.target).closest(".drill-line").data('index'));
  13. }
  14. window.addCondition = function(event)
  15. {
  16. let index = getConditionIndex(event);
  17. let modalID = getModalID(event);
  18. let newCondition = {'drillObject': '', 'drillAlias': '', 'drillField': '', 'queryField': ''};
  19. setDrillType(modalID, 'manual');
  20. let {drills, defaultDrill} = pivotState();
  21. if(modalID == 'drillModalDefault') {
  22. defaultDrill.condition.splice(index, 0, newCondition);
  23. pivotState('defaultDrill', defaultDrill);
  24. updateDesignPage('addCondition', 'Default');
  25. }
  26. else {
  27. let drillIndex = getModalDrillIndex(modalID);
  28. drills[drillIndex].condition.splice(index, 0, newCondition);
  29. pivotState('drills', drills);
  30. updateDesignPage('addCondition', drillIndex);
  31. }
  32. }
  33. window.deleteCondition = function(event)
  34. {
  35. let index = getConditionIndex(event) - 1;
  36. let modalID = getModalID(event);
  37. setDrillType(modalID, 'manual');
  38. let {drills, defaultDrill} = pivotState();
  39. if(modalID == 'drillModalDefault') {
  40. defaultDrill.condition.splice(index, 1);
  41. pivotState('defaultDrill', defaultDrill);
  42. updateDesignPage('addCondition', 'Default');
  43. }
  44. else {
  45. let drillIndex = getModalDrillIndex(modalID);
  46. drills[drillIndex].condition.splice(index, 1);
  47. pivotState('drills', drills);
  48. updateDesignPage('addCondition', drillIndex);
  49. }
  50. }
  51. window.changeField = function(event)
  52. {
  53. setDrillField(getModalID(event), 'field', $(event.target).val());
  54. setDrillType(getModalID(event), 'manual');
  55. }
  56. window.changeWhereSQL = function(event)
  57. {
  58. setDrillField(getModalID(event), 'whereSql', $(event.target).val());
  59. setDrillType(getModalID(event), 'manual');
  60. }
  61. window.changeDrillField = function(event)
  62. {
  63. let index = getConditionIndex(event) - 1;
  64. const value = $(event.target).val();
  65. let drillFieldKeys = value.split('.');
  66. let isSubquery = drillFieldKeys.length == 2;
  67. let drillObject = isSubquery ? '' : drillFieldKeys[1];
  68. let drillAlias = drillFieldKeys[0];
  69. let drillField = isSubquery ? drillFieldKeys[1] : drillFieldKeys[2];
  70. setDrillField(getModalID(event), `condition.${index}.drillObject`, drillObject);
  71. setDrillField(getModalID(event), `condition.${index}.drillAlias`, drillAlias);
  72. setDrillField(getModalID(event), `condition.${index}.drillField`, drillField);
  73. setDrillType(getModalID(event), 'manual');
  74. }
  75. window.changeQueryField = function(event)
  76. {
  77. let index = getConditionIndex(event) - 1;
  78. setDrillField(getModalID(event), `condition.${index}.queryField`, $(event.target).val());
  79. setDrillType(getModalID(event), 'manual');
  80. }
  81. window.changeObject = function(event)
  82. {
  83. const modalID = getModalID(event);
  84. setDrillField(modalID, 'object', $(event.target).val());
  85. setDrillType(modalID, 'manual');
  86. let {drills, defaultDrill} = pivotState();
  87. if(modalID == 'drillModalDefault') {
  88. defaultDrill.objectChanged = 1;
  89. pivotState('defaultDrill', defaultDrill);
  90. updateDesignPage('changeObject', 'Default');
  91. }
  92. else {
  93. let drillIndex = getModalDrillIndex(modalID);
  94. drills[drillIndex].objectChanged = 1;
  95. pivotState('drills', drills);
  96. updateDesignPage('changeObject', drillIndex);
  97. }
  98. }
  99. window.checkRequiredFields = function(modalID)
  100. {
  101. let hasError = false;
  102. $(`#${modalID} .form-tip`).addClass('hidden');
  103. let drill = modalID == 'drillModalDefault' ? pivotState().defaultDrill : pivotState().drills[getModalDrillIndex(modalID)];
  104. if(drill.field == '') {
  105. hasError = true;
  106. showErrorTip(modalID, 'field');
  107. }
  108. if(drill.object == '') {
  109. hasError = true;
  110. showErrorTip(modalID, 'object');
  111. }
  112. drill.condition.forEach((condition, index) => {
  113. if(condition.drillField == '') {
  114. hasError = true;
  115. showErrorTip(modalID, 'drillField', index + 1);
  116. }
  117. if(condition.queryField == '') {
  118. hasError = true;
  119. showErrorTip(modalID, 'queryField', index + 1);
  120. }
  121. });
  122. return hasError;
  123. }
  124. window.showErrorTip = function(modalID, field, index = null)
  125. {
  126. let divClass = `.${field}-select`;
  127. if(index) divClass = `.${field}-select-${index}`;
  128. let selector = `#${modalID} ${divClass}`;
  129. $(selector).find('.form-tip').removeClass('hidden');
  130. }
  131. window.getModalID = function(event)
  132. {
  133. return $(event.target).closest('.modal').attr('id');
  134. }
  135. window.getModalDrillIndex = function(modalID)
  136. {
  137. if(modalID == 'drillModalDefault') return 'Default';
  138. return parseInt(modalID.substring(10));
  139. }
  140. window.getConditionIndex = function(event)
  141. {
  142. return $(event.target).closest('.condition-line').data('index');
  143. }
  144. window.setDrillField = function(modalID, str, value)
  145. {
  146. let parts = str.split(".");
  147. if(parts.length > 3) return;
  148. let {drills, defaultDrill} = pivotState();
  149. if(modalID == 'drillModalDefault')
  150. {
  151. if(parts.length == 1)
  152. {
  153. let field = parts[0];
  154. defaultDrill[field] = value;
  155. }
  156. else if(parts.length == 3)
  157. {
  158. let field = parts[0];
  159. let index = parts[1];
  160. let key = parts[2];
  161. defaultDrill[field][index][key] = value;
  162. }
  163. pivotState('defaultDrill', defaultDrill);
  164. }
  165. else
  166. {
  167. let drillIndex = getModalDrillIndex(modalID);
  168. if(parts.length == 1)
  169. {
  170. let field = parts[0];
  171. drills[drillIndex][field] = value;
  172. }
  173. else if(parts.length == 3)
  174. {
  175. let field = parts[0];
  176. let index = parts[1];
  177. let key = parts[2];
  178. drills[drillIndex][field][index][key] = value;
  179. }
  180. pivotState('drills', drills);
  181. }
  182. }
  183. window.previewDrillResult = function(event)
  184. {
  185. let {drills, defaultDrill} = pivotState();
  186. let modalID = getModalID(event);
  187. let drillIndex = getModalDrillIndex(modalID);
  188. let whereSQL = modalID == 'drillModalDefault' ? defaultDrill.whereSql : drills[getModalDrillIndex(modalID)].whereSql;
  189. let index = modalID == 'drillModalDefault' ? 'Default' : drillIndex;
  190. if(modalID == 'drillModalDefault')
  191. {
  192. defaultDrill.preview = 1;
  193. pivotState('defaultDrill', defaultDrill);
  194. }
  195. else
  196. {
  197. drills[drillIndex].preview = 1;
  198. pivotState('drills', drills);
  199. }
  200. if(checkRequiredFields(modalID)) return;
  201. updateDesignPage('previewResult', index);
  202. }
  203. window.dryRunDrillSQL = function(modalID, postData, callback)
  204. {
  205. let errorDiv = $('#' + modalID).find('.error-message');
  206. errorDiv.empty();
  207. let url = $.createLink('pivot', 'ajaxGetPreviewResult');
  208. $.post(url, postData, function(result)
  209. {
  210. let resp = JSON.parse(result);
  211. if(resp.status == 'success') callback();
  212. if(resp.status == 'fail')
  213. {
  214. let div = "<div class='form-tip text-danger'>" + resp.error + "</div>";
  215. errorDiv.append(div);
  216. }
  217. });
  218. }
  219. window.saveDrill = function(event)
  220. {
  221. let modalID = getModalID(event);
  222. if(checkRequiredFields(modalID)) return;
  223. let {drills, defaultDrill, filters} = pivotState();
  224. let drillIndex = getModalDrillIndex(modalID);
  225. let drill = modalID == 'drillModalDefault' ? defaultDrill : drills[drillIndex];
  226. let postData = {'object': drill.object, 'whereSql': drill.whereSql, 'filters': JSON.stringify(filters)};
  227. dryRunDrillSQL(modalID, postData, function()
  228. {
  229. if(modalID == 'drillModalDefault') drills.push(defaultDrill);
  230. if(modalID != 'drillModalDefault') setDesignChangedWarning(drill.field, false);
  231. pivotState('drills', drills);
  232. updateDesignPage(modalID == 'drillModalDefault' ? 'addDrill' : 'editDrill');
  233. });
  234. }
  235. window.refreshConditions = function(event)
  236. {
  237. let {drills, defaultDrill, filters} = pivotState();
  238. let modalID = getModalID(event);
  239. let drillIndex = getModalDrillIndex(modalID);
  240. let drill = modalID == 'drillModalDefault' ? defaultDrill : drills[drillIndex];
  241. let postData = {'object': drill.object, 'whereSql': drill.whereSql, 'filters': JSON.stringify(filters)};
  242. dryRunDrillSQL(modalID, postData, function()
  243. {
  244. updateDesignPage('addCondition', drillIndex);
  245. });
  246. }