view.ui.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. window.renderStoryCell = function(result, info)
  2. {
  3. const story = info.row.data;
  4. if(info.col.name == 'title' && result)
  5. {
  6. let html = '';
  7. let gradeLabel = gradeGroup[story.type][story.grade];
  8. if(gradeLabel) html += "<span class='label gray-pale rounded-xl clip'>" + gradeLabel + "</span> ";
  9. if(html) result.unshift({html});
  10. }
  11. if(info.col.name == 'sort')
  12. {
  13. result[0] = {html: "<i class='icon-move'></i>", className: 'text-gray cursor-move move-roadmap'};
  14. }
  15. return result;
  16. };
  17. window.beforeCheckRows = function(checkedIds, checkedStatus)
  18. {
  19. const dtable = zui.DTable.query($('#unlinkStoryList'));
  20. let checkChildIds = {};
  21. for(let key in checkedIds)
  22. {
  23. let checkedID = checkedIds[key];
  24. if(checkedStatus[checkedID] == false) continue;
  25. rowData = dtable.$.getRowInfo(checkedID);
  26. if(typeof(rowData.data.children) != 'undefined')
  27. {
  28. children = rowData.data.children;
  29. for(let i in children) checkChildIds[children[i]] = true;
  30. }
  31. }
  32. return checkChildIds;
  33. }
  34. window.onSortEnd = function(from, to, type)
  35. {
  36. if(!from || !to) return false;
  37. const url = $.createLink('roadmap', 'ajaxStorySort', `roadmapID=${roadmapID}`);
  38. const form = new FormData();
  39. form.append('stories', JSON.stringify(this.state.rowOrders));
  40. form.append('orderBy', orderBy);
  41. form.append('pageID', storyPageID);
  42. form.append('recPerPage', storyRecPerPage);
  43. form.append('recTotal', storyRecTotal);
  44. $.ajaxSubmit({url, data:form});
  45. $.apps.updateAppUrl($.createLink('roadmap', 'view', `roadmap=${roadmapID}&type=story&orderBy=order_desc`));
  46. return true;
  47. }
  48. window.setStatistics = function(element, checkedIdList, pageSummary)
  49. {
  50. if(checkedIdList == undefined || checkedIdList.length == 0) return {html: pageSummary};
  51. let estimate = 0;
  52. let total = 0;
  53. const rows = element.layout.allRows;
  54. rows.forEach((row) => {
  55. if(checkedIdList.includes(row.id))
  56. {
  57. const story = element.getRowInfo(row.id);
  58. total += 1;
  59. if(story.data.isParent == '0') estimate += parseFloat(story.data.estimate);
  60. }
  61. });
  62. return {html: checkedSummary.replace('%total%', total).replace('%estimate%', estimate.toFixed(1))};
  63. }
  64. window.showLink = function(params, onlyUpdateTable)
  65. {
  66. const url = $.createLink('roadmap', 'linkUR', 'roadmapID=' + roadmapID + (params || '&browseType=&param='));
  67. if(onlyUpdateTable)
  68. {
  69. loadComponent($('#stories').find('.dtable').attr('id'), {url: url, component: 'dtable', partial: true});
  70. return;
  71. }
  72. loadTarget({url: url, target: 'stories'});
  73. };
  74. window.onSearchLinks = function(result)
  75. {
  76. const params = $.parseLink(result.load).vars[4];
  77. showLink(params ? atob(params[1]) : null, true);
  78. return false;
  79. };
  80. $(function()
  81. {
  82. if(link == 'true') showLink(null);
  83. });
  84. $(document).off('click', '.batch-btn > a, .batch-btn').on('click', '.batch-btn > a, .batch-btn', function()
  85. {
  86. const $this = $(this);
  87. if($this.data('disabled')) return;
  88. const type = $this.data('type');
  89. const dtable = zui.DTable.query($('#' + type + 'DTable'));
  90. const checkedList = dtable.$.getChecks();
  91. if(!checkedList.length) return;
  92. const postData = new FormData();
  93. const url = $this.data('url');
  94. checkedList.forEach((id) => postData.append(type + 'IdList[]', id));
  95. if($this.data('account')) postData.append('assignedTo', $this.data('account'));
  96. if($this.data('page') == 'batch')
  97. {
  98. postAndLoadPage(url, postData);
  99. }
  100. else
  101. {
  102. $.ajaxSubmit({url: url, data: postData});
  103. }
  104. });
  105. window.handleLinkObjectClick = function($this)
  106. {
  107. const dtable = zui.DTable.query($this);
  108. const checkedList = dtable.$.getChecks();
  109. if(!checkedList.length) return;
  110. const postData = new FormData();
  111. checkedList.forEach((id) => postData.append('stories[]', id));
  112. $.ajaxSubmit({url: $this.data('url'), data: postData});
  113. };