v1.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. var itemIndex = 1;
  2. window.loadBranchRelation = function(e)
  3. {
  4. const $this = $(e.target);
  5. const $picker = $this.zui('picker');
  6. const branch = $picker.$.value;
  7. const branchIndex = $picker.options.index;
  8. const productID = $('[name=product]').val();
  9. loadModuleForTwins(productID, branch, branchIndex)
  10. loadPlanForTwins(productID, branch, branchIndex)
  11. disableSelectedBranches()
  12. };
  13. window.addBranchesBox = function(e)
  14. {
  15. $('[name=parent]').zui('picker').$.changeState({value: ''});
  16. $('[name=parent]').zui('picker').render({disabled: true});
  17. const productID = $('[name=product]').val();
  18. const $formRow = $(e.target).closest('.switchBranch,.newLine');
  19. const $branchPicker = $('.switchBranch #branchBox .picker-box').zui('picker');
  20. const $modulePicker = $('.switchBranch #moduleIdBox .picker-box').zui('picker');
  21. const $planPicker = $('.switchBranch #planIdBox .picker-box').zui('picker');
  22. $modulePicker.options.defaultValue = '0';
  23. $('#storyNoticeBranch').removeClass('hidden');
  24. if($("form [name^='branches']").length == $branchPicker.options.items.length) return false;
  25. var selectedVal = [];
  26. $("form [name^='branches']").each(function()
  27. {
  28. var selectedProduct = $(this).val();
  29. if(!selectedVal.includes(selectedProduct)) selectedVal.push(selectedProduct);
  30. });
  31. var branch = 0;
  32. $branchPicker.options.items.forEach(function(item)
  33. {
  34. if(!selectedVal.includes(item.value) && branch == 0) branch = item.value;
  35. });
  36. var $newLine = $('#addBranchesBox').clone();
  37. $formRow.after($newLine);
  38. $newLine.addClass('newLine').removeClass('hidden').addClass('addBranchesBox' + itemIndex).removeAttr('id');
  39. $newLine.find('#branches').addClass('picker-box').attr('id', 'branches_' + itemIndex).attr('data-on', 'change').attr('data-call', 'loadBranchRelation').attr('data-params', 'event').picker($.extend({}, $branchPicker.options, {name: "branches[" + itemIndex + "]", index: itemIndex, defaultValue: branch, afterRender: function(){disableSelectedBranches()}}));
  40. $newLine.find('#modules').addClass('picker-box').attr('id', 'modules_' + itemIndex).picker($.extend({}, $modulePicker.options, {name: "modules[" + itemIndex + "]"}));
  41. $newLine.find('#plans').addClass('picker-box').attr('id', 'plans_' + itemIndex).picker($.extend({}, $planPicker.options, {name: "plans[" + itemIndex + "]"}));
  42. $newLine.find('.addNewLine').on('click', addBranchesBox);
  43. $newLine.find('.removeNewLine').on('click', deleteBranchesBox);
  44. loadModuleForTwins(productID, branch, itemIndex)
  45. loadPlanForTwins(productID, branch, itemIndex)
  46. if($(".twinsStoryBox .newLine").length + 1 == $branchPicker.options.items.length)
  47. {
  48. $('.addNewLine').css('pointer-events', 'none')
  49. $('.addNewLine').addClass('disabled')
  50. }
  51. itemIndex ++;
  52. };
  53. window.deleteBranchesBox = function(e)
  54. {
  55. $(e.target).closest('.newLine').remove();
  56. disableSelectedBranches();
  57. $('.addNewLine').css('pointer-events', 'auto')
  58. $('.addNewLine').removeClass('disabled')
  59. if($('form [name^="branches"]').length < 2)
  60. {
  61. $('[name=parent]').zui('picker').render({disabled: false});
  62. $('#storyNoticeBranch').addClass('hidden');
  63. }
  64. };
  65. function loadModuleForTwins(productID, branch, branchIndex)
  66. {
  67. /* Load module */
  68. var currentModule = 0;
  69. var moduleLink = $.createLink('tree', 'ajaxGetOptionMenu', 'productID=' + productID + '&viewtype=story&branch=' + branch + '&rootModuleID=0&returnType=html&fieldID=' + branchIndex + '&extra=nodeleted&currentModuleID=' + currentModule);
  70. if(branchIndex > 0)
  71. {
  72. var $moduleIdBox = $('.addBranchesBox' + branchIndex + ' #moduleIdBox');
  73. }
  74. else
  75. {
  76. var $moduleIdBox = $('.switchBranch #moduleIdBox');
  77. }
  78. $.get(moduleLink, function(data)
  79. {
  80. let $picker = $moduleIdBox.find('.picker-box').zui('picker');
  81. data = JSON.parse(data);
  82. $picker.render({items:data.items});
  83. $picker.$.setValue('');
  84. });
  85. }
  86. function loadPlanForTwins(productID, branch, branchIndex)
  87. {
  88. /* Load plan */
  89. if(branch == '0') branch = '';
  90. planLink = $.createLink('product', 'ajaxGetPlans', 'productID=' + productID + '&branch=' + branch + '&params=unexpired,noclosed&skipParent=true');
  91. if(branchIndex > 0)
  92. {
  93. var $planIdBox = $('.addBranchesBox'+ branchIndex +' #planIdBox');
  94. }
  95. else
  96. {
  97. var $planIdBox = $('.switchBranch #planIdBox');
  98. }
  99. $.get(planLink, function(data)
  100. {
  101. let $picker = $planIdBox.find('.picker-box').zui('picker');
  102. $picker.render({items: JSON.parse(data)});
  103. $picker.$.setValue('');
  104. });
  105. }
  106. function disableSelectedBranches()
  107. {
  108. let selectedVal = [];
  109. let $pickers = [];
  110. $("form [name^='branches']").each(function()
  111. {
  112. let $picker = $(this).zui('picker');
  113. let value = $picker.$.value;
  114. $pickers.push($picker);
  115. if(!selectedVal.includes(value)) selectedVal.push(value);
  116. })
  117. $pickers.forEach(function($picker)
  118. {
  119. let value = $picker.$.value;
  120. let options = $picker.options;
  121. let items = [];
  122. options.items.forEach(function(item)
  123. {
  124. item = $.extend({}, item, {disabled: false});
  125. if(value !== item.value && selectedVal.includes(item.value)) item = $.extend({}, item, {disabled: true});
  126. items.push(item);
  127. })
  128. options.items = items;
  129. delete options.afterRender;
  130. $picker.render(options);
  131. });
  132. }