create.ui.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. window.addRow = function(e)
  2. {
  3. const currentGroup = $(e.target).closest('.form-group').clone();
  4. const prevGroup = $(e.target).closest('.form-group').prev('.form-group').clone();
  5. let stageOptions = zui.Picker.query("[name^='stage']").options;
  6. let requiredOptions = zui.Picker.query("[name^='required']").options;
  7. /* 获取已有下拉控件的最大id的值加1赋值给新行. */
  8. let index = 0;
  9. const checkedStages = [];
  10. $(".form-group[id^='stage']").each(function()
  11. {
  12. let id = $(this).attr('id').replace(/[^\d]/g, '');
  13. id = parseInt(id);
  14. id ++;
  15. index = id > index ? id : index;
  16. checkedStages.push($(this).find('input[name^="stage"]').val());
  17. })
  18. stageOptions = JSON.parse(JSON.stringify(stageOptions)); // 保证不会影响原来的options
  19. stageOptions.items.forEach(function(item)
  20. {
  21. if(checkedStages.includes(item.value)) item.disabled = true;
  22. });
  23. stageOptions.defaultValue = '';
  24. currentGroup.attr('id', `required${index}`).find('.btn-delete').removeClass('invisible');
  25. prevGroup.attr('id', `stage${index}`);
  26. /* 重新初始化新一行的下拉控件. */
  27. currentGroup.find('.picker-box').html(`<div class='form-group-wrapper picker-box'></div>`, false);
  28. prevGroup.find('.picker-box').html(`<div class='form-group-wrapper picker-box'></div>`, false);
  29. currentGroup.find('.form-label').remove();
  30. prevGroup.find('.form-label').remove();
  31. $(e.target).closest('.form-group').after(currentGroup);
  32. $(e.target).closest('.form-group').after(prevGroup);
  33. new zui.Picker(`#stage${index} .picker-box`, stageOptions);
  34. new zui.Picker(`#required${index} .picker-box`, requiredOptions);
  35. }
  36. window.deleteRow = function(e)
  37. {
  38. const currentGroup = $(e.target).closest('.form-group');
  39. const prevGroup = currentGroup.prev('.form-group');
  40. currentGroup.remove();
  41. prevGroup.remove();
  42. disableItems();
  43. }
  44. /**
  45. * 禁用已选中的下拉控件。
  46. * Disable the selected items in the dropdown control.
  47. */
  48. window.disableItems = function()
  49. {
  50. let chosenStages= [];
  51. $("[name^='stage']").each(function()
  52. {
  53. chosenStages.push($(this).val());
  54. });
  55. let allItems = zui.Picker.query("[name^='stage']").options.items;
  56. let stageItems = [];
  57. for(i = 0; i < allItems.length; i++)
  58. {
  59. allItems[i].disabled = false;
  60. if(chosenStages.includes(allItems[i].value)) allItems[i].disabled = true;
  61. stageItems[allItems[i].value] = Object.assign({},allItems[i]);
  62. stageItems[allItems[i].value].i = i;
  63. }
  64. $(".form-group[id^='stage']").each(function()
  65. {
  66. const $stage = $(this).find('.picker-box').zui('picker');
  67. const stageID = $(this).find('input[name^="stage"]').val();
  68. let currentStageItems = JSON.parse(JSON.stringify(allItems));
  69. if(stageID != 0) currentStageItems[stageItems[stageID].i].disabled = false;
  70. $stage.render({items: currentStageItems});
  71. });
  72. }
  73. window.refreshActivity = function(activityID)
  74. {
  75. $.getJSON($.createLink('deliverable', 'ajaxGetActivityOptions', `groupID=${groupID}&activityID=${activityID}`), function(data)
  76. {
  77. const activityPicker = zui.Picker.query("[name='activity']");
  78. activityPicker.render({items: data});
  79. activityPicker.$.setValue(activityID);
  80. });
  81. }
  82. window.changeModule = function(e)
  83. {
  84. const module = e.target.value;
  85. if(module == designModule)
  86. {
  87. $('.deliverable-list').closest('.form-group').addClass('hidden');
  88. }
  89. else
  90. {
  91. $('.deliverable-list').closest('.form-group').removeClass('hidden');
  92. }
  93. }