step2.html.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516
  1. <?php js::set('edition', $config->edition);?>
  2. <?php $fieldList = array();?>
  3. <div id='mainContent' class='main-content'>
  4. <div class="display-content">
  5. <div class="cell">
  6. <div class='panel panel-position panel-padding'>
  7. <div class='panel-heading'>
  8. <div class='panel-title ptitle'>
  9. <?php echo $pivot->name;?>
  10. <?php if(common::hasPriv('pivot', 'export')):?>
  11. <a href="#" class="btn btn-link design-export pull-right hidden" data-toggle="modal" data-target="#export"><?php echo '<i class="icon-export muted"> </i>' . $lang->export;?></a>
  12. <?php endif;?>
  13. </div>
  14. </div>
  15. <div class="panel-body">
  16. <div id="datagridSpanExample2" class="datagrid">
  17. <div class='panel-body clear-padding clear-overflow'>
  18. <div id='filterContent' class='filterContent'>
  19. <div id="filterItems">
  20. </div>
  21. <div id='queryButton2' class='queryButton'>
  22. <button type="button" onclick='queryFilter()' class="btn btn-secondary save-step"><?php echo $lang->pivot->query;?></button>
  23. </div>
  24. </div>
  25. </div>
  26. </div>
  27. <div id='datagrid-tip' class="panel-position-child">
  28. <p><span class="text-muted"><?php echo $lang->pivot->noPivotTip;?></span></p>
  29. </div>
  30. </div>
  31. </div>
  32. </div>
  33. </div>
  34. <div class="config-content" id="sidebar">
  35. <div class="cell">
  36. <div class='panel panel-settings'>
  37. <div class='panel-heading border-bottom'>
  38. <div class='panel-title ptitle'>
  39. <?php echo $lang->pivot->baseSetting;?>
  40. </div>
  41. </div>
  42. <div class="panel-content">
  43. <div class='panel-heading border-bottom'>
  44. <div class='group-title'>
  45. <div class='panel-title' style="display:flex;">
  46. <div class="checkbox-primary">
  47. <input type="checkbox" name="summary[]" id="summary" onclick='changeSummary()'; title="<?php echo $lang->pivot->step2->summary;?>">
  48. <label for="summary"><span class='panel-title'><?php echo $lang->pivot->step2->summary;?></span>
  49. </label>
  50. </div>
  51. <div style="padding-left: 3px;">
  52. <i class="icon icon-help group-tip" data-toggle="popover" data-trigger="focus hover" data-placement="right" data-tip-class="text-muted popover-sm" data-content="<?php echo $lang->pivot->step2->summaryTip;?>" data-delay="100"></i>
  53. </div>
  54. </div>
  55. </div>
  56. </div>
  57. </div>
  58. <div class="panel-content auto-scroll" id='summaryForm'>
  59. <div class='panel-heading border-bottom'>
  60. <div class='group-title'>
  61. <div class='panel-title'>
  62. <?php echo $lang->pivot->step2->group;?>
  63. <i class="icon icon-help group-tip" data-toggle="popover" data-trigger="focus hover" data-placement="right" data-tip-class="text-muted popover-sm" data-content="<?php echo $lang->pivot->step2->groupsTip;?>" data-delay="100"></i>
  64. </div>
  65. </div>
  66. <div class='panel-body'>
  67. <form class='form-ajax' id="groupForm">
  68. <table class='table table-form'>
  69. </table>
  70. </form>
  71. </div>
  72. </div>
  73. <div class='panel-heading border-bottom' style='padding-bottom: 0px !important;'>
  74. <div class='panel-flex'>
  75. <div class='panel-title'>
  76. <?php echo $lang->pivot->step2->column;?>
  77. <i class="icon icon-help group-tip" data-toggle="popover" data-trigger="focus hover" data-placement="right" data-tip-class="text-muted popover-sm" data-content="<?php echo $lang->pivot->step2->columnsTip;?>" data-delay="100"></i>
  78. </div>
  79. <div class="pull-right column-flex column-center">
  80. <?php echo '<a class="add-column btn btn-link"><i class="icon icon-plus"></i> ' . $lang->pivot->addColumn . '</a>';?>
  81. </div>
  82. </div>
  83. <div class='panel-body'>
  84. <form class='form-ajax' id="columnForm"></form>
  85. </div>
  86. </div>
  87. <div class='panel-heading'>
  88. <div class='panel-title'>
  89. <?php echo $lang->pivot->step2->columnTotal;?>
  90. <i class="icon icon-help group-tip" data-toggle="popover" data-trigger="focus hover" data-placement="right" data-tip-class="text-muted popover-sm" data-content="<?php echo $lang->pivot->step2->columnTotalTip;?>" data-delay="100"></i>
  91. </div>
  92. <div class='panel-body top-padding'>
  93. <form class='form-ajax' id="columnTotalForm">
  94. <table class='table table-form'>
  95. <tr>
  96. <td class='group-width'>
  97. <?php echo html::select('columnTotal', $lang->pivot->step2->columnTotalList, isset($pivot->settings['columnTotal']) ? $pivot->settings['columnTotal'] : 'noShow', "class='form-control picker-select'");?>
  98. </td>
  99. </tr>
  100. </table>
  101. </form>
  102. </div>
  103. </div>
  104. </div>
  105. </div>
  106. <div class='panel pull-bottom'>
  107. <div class='panel-heading'>
  108. <div class='panel-footer'>
  109. <?php echo '<button type="button" class="btn btn-secondary btn-save-setting" onclick="apply()">' . $lang->pivot->saveSetting . '</button>';?>
  110. <?php echo '<button type="button" class="btn btn-primary btn-next-step" onclick="nextStep()">' . $lang->pivot->nextStep . '</button>';?>
  111. </div>
  112. </div>
  113. </div>
  114. </div>
  115. </div>
  116. </div>
  117. <template id='fieldSelectTpl'>
  118. </template>
  119. <template id='statSelectTpl'>
  120. <?php echo html::select('statTpl', $lang->pivot->step2->statList, '', "class='form-control picker-select' data-placeholder='{$lang->pivot->step2->selectStat}'");?>
  121. </template>
  122. <template id="columnTpl">
  123. <div class='column column-{index}'>
  124. <div class="column-header">
  125. <div>
  126. <div class='column-title title-flex'>
  127. <div class='column-heading column-flex column-center column-padding-right'>
  128. <span>{columnIndex}</span>
  129. </div>
  130. <div>
  131. <div class="input-group">
  132. {fieldSelect}
  133. <span class="input-group-addon required showOrigin">
  134. <?php echo html::checkBox('showOrigin', $lang->pivot->showOriginItem);?>
  135. </span>
  136. </div>
  137. </div>
  138. <div class="column-flex column-delete" style="margin-left:auto;">
  139. <button type="button" class="remove-column close" onclick="removeColumn({index})"><i class='icon icon-minus'></i></button>
  140. </div>
  141. </div>
  142. </div>
  143. </div>
  144. <div class="column-body">
  145. <form class="not-watch {columnHidden}">
  146. <table class="table table-form table-margin">
  147. <tbody>
  148. <tr>
  149. <th class='column-width'><?php echo $lang->pivot->sliceField;?></th>
  150. <td>{sliceField}</td>
  151. </tr>
  152. <tr>
  153. <th class='column-width'><?php echo $lang->pivot->calcMode;?></th>
  154. <td>{calcMode}</td>
  155. </tr>
  156. <tr>
  157. <th><?php echo $lang->pivot->showMode;?></th>
  158. <td>
  159. <div class='input-group'>
  160. {showMode}
  161. <span class='input-group-addon {monopolizeHide}'>
  162. {monopolize}
  163. </span>
  164. </div>
  165. </td>
  166. </tr>
  167. <tr class='default-line {fieldHide}'>
  168. <th><?php echo $lang->pivot->showTotal;?></th>
  169. <td>{showTotal}</td>
  170. </tr>
  171. </tbody>
  172. </table>
  173. </form>
  174. <form class="mask {maskHidden}">
  175. <table class="table table-form table-margin">
  176. <tbody>
  177. <tr>
  178. <th class='column-width'><?php echo $lang->pivot->sliceField;?></th>
  179. <td><?php echo html::select('columnMask', array('' => ''), '', "class='form-control picker-select disabled' data-placeholder='{$this->lang->pivot->showOriginPlaceholder->slice}' disabled");?></td>
  180. </tr>
  181. <tr>
  182. <th class='column-width'><?php echo $lang->pivot->calcMode;?></th>
  183. <td><?php echo html::select('calcModeMask', array('' => ''), '', "class='form-control picker-select disabled' data-placeholder='{$this->lang->pivot->showOriginPlaceholder->calcMode}' disabled");?></td>
  184. </tr>
  185. <tr>
  186. <th><?php echo $lang->pivot->showMode;?></th>
  187. <td><?php echo html::select('showModeMask', array('' => ''), '', "class='form-control picker-select disabled' data-placeholder='{$this->lang->pivot->showOriginPlaceholder->showMode}' disabled");?></td>
  188. </tr>
  189. </tbody>
  190. </table>
  191. </form>
  192. </div>
  193. </div>
  194. </template>
  195. <template id='groupActionTpl'>
  196. <td class='text-left btn-list'>
  197. <a href='javascript:;' onclick='addGroup(this)' class='btn btn-link btn-add' title='<?php echo $lang->pivot->step2->add;?>'><i class='icon-plus'></i></a>
  198. <a href='javascript:;' onclick='deleteGroup(this)' class='btn btn-link btn-delete' title='<?php echo $lang->pivot->step2->delete;?>'><i class='icon-close'></i></a>
  199. </td>
  200. </template>
  201. <template id='queryFilterItemTpl'>
  202. <div class='filter-item filter-item-{index} input-group' data-index='{index}'>
  203. <span class='field-name input-group-addon'>{name}</span>
  204. <div class="default-block hidden"><?php echo html::input('default', '', "class='form-control form-input '")?></div>
  205. <div class="default-block hidden"><?php echo html::input('default', '', "class='form-control form-date '")?></div>
  206. <div class="default-block hidden"><?php echo html::input('default', '', "class='form-control form-datetime '")?></div>
  207. <div class="default-block hidden"><?php echo html::select('default', '', '', "class='form-control form-select multiple'");?></div>
  208. </div>
  209. </template>
  210. <?php js::set('groupNum', $lang->pivot->step2->groupNum);?>
  211. <?php js::set('groupTip', $lang->pivot->step2->groupTip);?>
  212. <script>
  213. $(document).ready(function()
  214. {
  215. $(document).on('change', '#groupForm td select, #columnForm .column select, #columnForm .column input[type=checkbox], #columnTotalForm td select', function(evt)
  216. {
  217. var id = $(evt.target).attr('id');
  218. var value = $(evt.target).val();
  219. var refreshIds = ['column', 'stat', 'slice', 'showMode', 'monopolize1', 'showTotal', 'showOrigin0'];
  220. if(refreshIds.includes(id))
  221. {
  222. refreshColumnSetting();
  223. }
  224. else if(id == 'columnTotal')
  225. {
  226. var pivot = DataStorage.clone('pivot');
  227. pivot.settings.columnTotal = value;
  228. DataStorage.pivot = pivot;
  229. }
  230. else
  231. {
  232. // render groups
  233. var pivot = DataStorage.clone('pivot');
  234. for(var i = 1; i <= 5; i++)
  235. {
  236. var groupID = 'group' + i;
  237. delete pivot.settings[groupID];
  238. }
  239. $('#groupForm').find('table tr select').each(function(index)
  240. {
  241. var groupID = 'group' + (index + 1);
  242. pivot.settings[groupID] = $(this).val();
  243. });
  244. DataStorage.pivot = pivot;
  245. updateGroupField();
  246. }
  247. });
  248. $(document).on('change', '#columnForm .column .showOrigin input[type=checkbox]', function(evt)
  249. {
  250. var checked = $(evt.target).prop('checked');
  251. var $columnBody = $(evt.target).closest('.column-header').next('.column-body');
  252. var $mask = $columnBody.find('.mask');
  253. var $form = $columnBody.find('.not-watch');
  254. if(checked)
  255. {
  256. $mask.removeClass('hidden');
  257. $form.addClass('hidden');
  258. }
  259. else
  260. {
  261. $mask.addClass('hidden');
  262. $form.removeClass('hidden');
  263. }
  264. });
  265. $('.group-tip').popover();
  266. });
  267. function refreshColumnSetting()
  268. {
  269. var content = $('#step2Content');
  270. var form = content.find('form#columnForm');
  271. var columns = [];
  272. form.find('.column').each(function(index, elem)
  273. {
  274. var column = $(elem).find('select#column').val();
  275. var stat = $(elem).find('select#stat').val();
  276. var slice = $(elem).find('select#slice').val();
  277. var showMode = $(elem).find('select#showMode').val();
  278. var monopolize = $(elem).find('input#monopolize1').prop('checked') ? '1' : '0';
  279. var showTotal = $(elem).find('select#showTotal').val();
  280. var showOrigin = $(elem).find('input#showOrigin0').prop('checked') ? '1' : '0';
  281. $(elem).find('select#showTotal').closest('tr').toggle(slice !== 'noSlice');
  282. if(showMode === 'default')
  283. {
  284. $(elem).find('input#monopolize1').closest('span').addClass('hidden');
  285. }
  286. else
  287. {
  288. $(elem).find('input#monopolize1').closest('span').removeClass('hidden');
  289. }
  290. columns.push({field: column, stat, slice, showMode, monopolize, showTotal, showOrigin});
  291. });
  292. var pivot = DataStorage.clone('pivot');
  293. pivot.settings.columns = columns;
  294. DataStorage.pivot = pivot;
  295. }
  296. function apply(showError = true)
  297. {
  298. if(validate(showError)) showTable();
  299. }
  300. function showTable()
  301. {
  302. setSearchFilters();
  303. var pivot = DataStorage.clone('pivot');
  304. var step = DataStorage.step;
  305. var langs = DataStorage.langs;
  306. var pivotParams = JSON.parse(JSON.stringify(pivot));
  307. pivotParams.step = step;
  308. pivotParams.langs = langs;
  309. $.post(createLink('pivot', 'ajaxGetPivot'), pivotParams,function(resp)
  310. {
  311. var myDatagrid = $('#datagridSpanExample' + step);
  312. myDatagrid.find('.reportData').remove();
  313. myDatagrid.append(resp);
  314. });
  315. $('.design-export').removeClass('hidden');
  316. /* Just use once. */
  317. delete pivot.searchFilters;
  318. DataStorage.pivot = pivot;
  319. }
  320. function addGroup(evt)
  321. {
  322. var tr = $(evt).parent().parent();
  323. var form = $(evt).closest('form');
  324. var rows = 1;
  325. form.find('table tr select').each(function()
  326. {
  327. rows = Math.max(rows, parseInt($(this).attr('id').substring('5')));
  328. });
  329. var newRow = groupRow(rows + 1);
  330. tr.after(newRow);
  331. initPicker(newRow);
  332. updateGroupField();
  333. setDeleteGroupHidden(form);
  334. setAddHidden(form);
  335. }
  336. function deleteGroup(evt)
  337. {
  338. var form = $(evt).closest('form');
  339. var id = $(evt).closest('tr').find('select').attr('id');
  340. $(evt).parent().parent().remove();
  341. updateGroupField();
  342. setDeleteGroupHidden(form);
  343. setAddHidden(form);
  344. var pivot = DataStorage.clone('pivot');
  345. delete(pivot.settings[id]);
  346. DataStorage.pivot = pivot;
  347. }
  348. function deleteColumn(evt)
  349. {
  350. var form = $(evt).closest('form');
  351. $(evt).parent().parent().remove();
  352. setDeleteGroupHidden(form);
  353. refreshColumnSetting();
  354. }
  355. function setDeleteGroupHidden(form)
  356. {
  357. var rows = form.find('table tr').length;
  358. if(rows == 1)
  359. {
  360. form.find('table tr .btn-delete').addClass('hidden');
  361. }
  362. else
  363. {
  364. form.find('table tr .btn-delete').removeClass('hidden');
  365. }
  366. }
  367. function setAddHidden(form)
  368. {
  369. var maxRows = edition == 'max' ? 5 : 3;
  370. var rows = form.find('table tr').length;
  371. if(rows == maxRows && form.attr('id') == 'groupForm')
  372. {
  373. form.find('table tr .btn-add').addClass('hidden');
  374. }
  375. else
  376. {
  377. form.find('table tr .btn-add').removeClass('hidden');
  378. }
  379. }
  380. function initGroupForm()
  381. {
  382. var content = $('#step2Content');
  383. var form = content.find('form#groupForm');
  384. form.find('table').empty();
  385. var hasGroup = false;
  386. $.each(DataStorage.pivot.settings, function(index, value)
  387. {
  388. if(index.indexOf('group') != '-1')
  389. {
  390. index = index.substring('5');
  391. form.find('table').append(groupRow(index));
  392. hasGroup = true;
  393. }
  394. });
  395. if(!hasGroup) form.find('table').append(groupRow(1));
  396. initPicker(form);
  397. updateGroupField();
  398. setDeleteGroupHidden(form);
  399. setAddHidden(form);
  400. }
  401. function groupRow(index)
  402. {
  403. var name = 'group' + index;
  404. var value = DataStorage.pivot.settings['group' + index];
  405. var select = fieldSelect(name, value, groupTip)
  406. var content = $('#step2Content');
  407. var actionHtml = content.find('#groupActionTpl').html();
  408. var td = $('<td class="group-width"></td>').append(select);
  409. var tr = $('<tr></tr>').append(td);
  410. tr.append(actionHtml);
  411. return tr;
  412. }
  413. function fieldSelect(name, value = '', placeholder = '', required = false)
  414. {
  415. var content = $('#step2Content');
  416. var fieldHtml = content.find('#fieldSelectTpl').html();
  417. var field = $(fieldHtml);
  418. field.attr('name', name);
  419. field.attr('id', name.replace('[', '').replace(']', ''));
  420. field.attr('data-placeholder', placeholder);
  421. field.val(value);
  422. if(required) field.addClass('required')
  423. return field;
  424. }
  425. function statSelect(name, value = '', placeholder = '')
  426. {
  427. var content = $('#step2Content');
  428. var statHtml = content.find('#statSelectTpl').html();
  429. var stat = $(statHtml);
  430. stat.attr('name', name);
  431. stat.attr('id', name.replace('[', '').replace(']', ''));
  432. stat.attr('data-placeholder', placeholder);
  433. stat.val(value);
  434. return stat;
  435. }
  436. function updateGroupField()
  437. {
  438. $('#groupForm td select').each(function()
  439. {
  440. var groupPicker = $(this).data('zui.picker');
  441. var optionList = groupPicker.list;
  442. optionList.forEach(function(option){ option.disabled = false });
  443. groupPicker.updateOptionList(optionList);
  444. })
  445. $('#groupForm td select').each(function()
  446. {
  447. var $select = $(this);
  448. var selectPicker = $select.data('zui.picker');
  449. if(!selectPicker) return;
  450. var selectItem = selectPicker.getListItem(selectPicker.getValue());
  451. if(!selectItem) return;
  452. var groupName = $(this).attr('name');
  453. $('#groupForm td select').each(function()
  454. {
  455. var currentGroup = $(this).attr('name');
  456. if(currentGroup == groupName) return;
  457. var $currentPicker = $(this).data('zui.picker');
  458. $currentPicker.updateOptionList([$.extend({}, selectItem, {disabled: true})]);
  459. });
  460. })
  461. }
  462. </script>
  463. <script><?php include('../../js/column.js');?></script>