design.step.ui.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. /* Group */
  2. window.getGroupValues = function(event)
  3. {
  4. let groups = [];
  5. for(let key in pivotState().settings) {
  6. if(!key.startsWith("group")) continue;
  7. groups.push(pivotState().settings[key]);
  8. }
  9. return groups;
  10. }
  11. window.addSettingGroup = function(event)
  12. {
  13. let groupIndex = getGroupIndex(event);
  14. let groupValues = getGroupValues();
  15. groupValues.splice(groupIndex, 0, '');
  16. rebuildGroups(groupValues);
  17. allowAutoGenDrills();
  18. setDesignChangedWarning();
  19. updateDesignPage('settings');
  20. }
  21. window.deleteSettingGroup = function(event)
  22. {
  23. let groupIndex = getGroupIndex(event) - 1;
  24. let groupValues = getGroupValues();
  25. groupValues.splice(groupIndex, 1);
  26. rebuildGroups(groupValues);
  27. allowAutoGenDrills();
  28. setDesignChangedWarning();
  29. updateDesignPage('deleteGroup');
  30. }
  31. window.rebuildGroups = function(groupValues)
  32. {
  33. let {settings} = pivotState();
  34. for(let key in settings) {
  35. if(key.startsWith("group")) delete settings[key];
  36. }
  37. let index = 1;
  38. for(let key in groupValues) {
  39. let group = 'group' + index;
  40. settings[group] = groupValues[key];
  41. index ++;
  42. }
  43. pivotState('settings', settings);
  44. }
  45. /* Column */
  46. window.addSettingColumn = function(event)
  47. {
  48. allowAutoGenDrills();
  49. updateDesignPage('addColumn');
  50. }
  51. window.deleteSettingColumn = function(event)
  52. {
  53. let {settings} = pivotState();
  54. let columnIndex = getColumnIndex(event) - 1;
  55. let column = settings.columns[columnIndex];
  56. settings.columns.splice(columnIndex, 1);
  57. allowAutoGenDrills();
  58. removeDrillByColumn(column.field);
  59. pivotState('settings', settings);
  60. updateDesignPage('deleteColumn');
  61. }
  62. /* change function */
  63. window.changeSettingGroup = function(event)
  64. {
  65. allowAutoGenDrills();
  66. let key = getGroupName(event);
  67. setDesignChangedWarning();
  68. setPivotState(key, $(event.target).val());
  69. }
  70. window.changeSettingColumnField = function(event)
  71. {
  72. let columnField = $(event.target).closest('.column-line').find('.picker-column').find('.form-group-wrapper').zui('picker').$.value;
  73. changeColumnCommon(event, 'field', $(event.target).val());
  74. allowAutoGenDrills();
  75. setDesignChangedWarning(columnField, true);
  76. removeDrillFields();
  77. }
  78. window.changeSettingColumnOrigin = function(event)
  79. {
  80. changeColumnCommon(event, 'showOrigin', $(event.target).is(':checked') ? 1 : 0)
  81. allowAutoGenDrills();
  82. updateDesignPage('changeOrigin', getColumnIndex(event));
  83. }
  84. window.changeSettingColumnSlice = function(event)
  85. {
  86. let columnField = $(event.target).closest('.column-line').find('.picker-column').find('.form-group-wrapper').zui('picker').$.value;
  87. setDesignChangedWarning(columnField, true);
  88. changeColumnCommon(event, 'slice', $(event.target).val());
  89. allowAutoGenDrills();
  90. updateDesignPage('changeSlice', getColumnIndex(event));
  91. }
  92. window.changeSettingColumnStat = function(event)
  93. {
  94. changeColumnCommon(event, 'stat', $(event.target).val());
  95. }
  96. window.removeDrillByColumn = function(field)
  97. {
  98. if(!pivotState().drills.length) return;
  99. let {drills} = pivotState();
  100. const index = drills.findIndex(drill => drill.field == field);
  101. if(index < 0) return;
  102. const drill = drills[index];
  103. if(drill.type == 'auto')
  104. {
  105. delete drills[index];
  106. return;
  107. }
  108. drills[index].field = '';
  109. pivotState('drills', drills);
  110. }
  111. window.removeDrillFields = function()
  112. {
  113. let {settings, drills, defaultDrill} = pivotState();
  114. let fields = settings.columns.map(column => column.field);
  115. if(!fields.includes(defaultDrill.field)) defaultDrill.field = '';
  116. if(drills.length)
  117. {
  118. for(drillIndex in drills)
  119. {
  120. let field = drills[drillIndex].field;
  121. if(!fields.includes(field)) drills[drillIndex].field = '';
  122. }
  123. }
  124. pivotState('drills', drills);
  125. pivotState('defaultDrill', defaultDrill);
  126. }
  127. window.changeSettingColumnShowMode = function(event)
  128. {
  129. changeColumnCommon(event, 'showMode', $(event.target).val());
  130. updateDesignPage('changeShowMode', getColumnIndex(event));
  131. }
  132. window.changeSettingColumnMonopolize = function(event)
  133. {
  134. let monopolize = $(event.target).is(':checked') ? 1 : 0;
  135. changeColumnCommon(event, 'monopolize', monopolize);
  136. }
  137. window.changeShowTotal = function(event)
  138. {
  139. changeColumnCommon(event, 'showTotal', $(event.target).val());
  140. }
  141. window.handleSummaryChange = function(event)
  142. {
  143. const checked = $(event.target).is(':checked');
  144. if(checked)
  145. {
  146. setPivotState('summary', 'use');
  147. }
  148. else
  149. {
  150. setPivotState('', {summary: 'notuse'});
  151. }
  152. allowAutoGenDrills();
  153. updateDesignPage('settings');
  154. }
  155. window.handleColumnTotalChange = function(event)
  156. {
  157. setPivotState('columnTotal', $(event.target).val());
  158. updateDesignPage('summaryColumn');
  159. }
  160. window.handleColumnPositionChange = function(event)
  161. {
  162. setPivotState('columnPosition', $(event.target).val());
  163. }
  164. /* Function changeColumnCommon */
  165. window.changeColumnCommon = function(e, field, value)
  166. {
  167. let columnIndex = getColumnIndex(e) - 1;
  168. let settingStr = 'columns.' + columnIndex + '.' + field;
  169. setPivotState(settingStr, value);
  170. }
  171. /* Tool function, need not care about them at most of time. */
  172. /* set pivotState field function */
  173. window.commonPivotState = function(str, value = '', mode = 'set')
  174. {
  175. let {settings} = pivotState();
  176. let parts = str.split(".");
  177. const length = parts.length;
  178. if(length > 3) return;
  179. let [field, index, key] = parts;
  180. if(mode == 'set')
  181. {
  182. if(length == 1) settings = field == '' ? value : {...settings, [field]: value};
  183. if(length == 2) settings[field][index] = value;
  184. if(length == 3) settings[field][index][key] = value;
  185. pivotState('settings', settings);
  186. }
  187. if(mode == 'get')
  188. {
  189. if(length == 1) return field == '' ? settings : settings[field];
  190. if(length == 2) return settings[field][index];
  191. if(length == 3) return settings[field][index][key];
  192. }
  193. }
  194. window.setPivotState = function(str, value)
  195. {
  196. return commonPivotState(str, value, 'set');
  197. }
  198. window.getPivotState = function(str)
  199. {
  200. return commonPivotState(str, '', 'get');
  201. }
  202. /* Group setting */
  203. window.getGroupName = function(e)
  204. {
  205. return $(e.target).closest(".group-line").data('key');
  206. }
  207. window.getGroupIndex = function(e)
  208. {
  209. return parseInt(getGroupName(e).slice(5));
  210. }
  211. /* Column setting */
  212. window.getColumnIndex = function(e)
  213. {
  214. return parseInt($(e.target).closest(".column-line").data('index'));
  215. }