setmodule.ui.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. function changeModule(event)
  2. {
  3. const id = $(event.target).attr('id');
  4. if($(event.target).prop('checked'))
  5. {
  6. checkRelated(id, 'open');
  7. }
  8. else
  9. {
  10. checkRelated(id, 'close');
  11. }
  12. };
  13. /**
  14. * 设置模块的checkbox和hidden input状态
  15. * @param {string} id - 模块ID
  16. * @param {boolean} checked - 是否选中
  17. */
  18. function setModuleState(id, checked)
  19. {
  20. const checkboxSelector = `#${id}`;
  21. $(checkboxSelector).prop('checked', checked);
  22. }
  23. /**
  24. * 检查模块是否已启用
  25. * @param {string} id - 模块ID
  26. * @returns {boolean} 是否已启用
  27. */
  28. function isModuleEnabled(id)
  29. {
  30. return $(`#${id}`).prop('checked');
  31. }
  32. /**
  33. * 显示依赖关系确认对话框
  34. * @param {string} message - 确认消息
  35. * @param {Function} onConfirm - 确认回调
  36. * @param {Function} onCancel - 取消回调
  37. */
  38. function showDependencyConfirm(message, onConfirm, onCancel)
  39. {
  40. zui.Modal.confirm(
  41. {
  42. message: message,
  43. icon: 'icon-exclamation-sign',
  44. iconClass: 'warning-pale rounded-full icon-2x'
  45. }).then((res) =>
  46. {
  47. if(res)
  48. {
  49. if(onConfirm) onConfirm();
  50. return false;
  51. }
  52. if(onCancel) onCancel();
  53. });
  54. }
  55. window.checkRelated = function(id, type)
  56. {
  57. if(type === 'open')
  58. {
  59. // 开启 项目变更 时,需要确保 交付物 已开启
  60. if(id == 'feature-cm')
  61. {
  62. if(!isModuleEnabled('feature-deliverable'))
  63. {
  64. const message = openDependFeature.replace('{source}', cmLang).replace('{target}', deliverableLang);
  65. showDependencyConfirm(
  66. message,
  67. () => setModuleState('feature-deliverable', true),
  68. () => setModuleState('feature-cm', false)
  69. );
  70. return false;
  71. }
  72. }
  73. // 开启 项目变更 时,需要确保 交付物 和 基线 都已开启
  74. else if(id == 'feature-change')
  75. {
  76. const deliverableEnabled = isModuleEnabled('feature-deliverable');
  77. const cmEnabled = isModuleEnabled('feature-cm');
  78. if(!deliverableEnabled || !cmEnabled)
  79. {
  80. let message = openDependFeature.replace('{source}', changeLang);
  81. const missingLangs = [];
  82. if(!deliverableEnabled) missingLangs.push(deliverableLang);
  83. if(!cmEnabled) missingLangs.push(cmLang);
  84. message = message.replace('{target}', missingLangs.join(','));
  85. showDependencyConfirm(
  86. message,
  87. () =>
  88. {
  89. if(!deliverableEnabled) setModuleState('feature-deliverable', true);
  90. if(!cmEnabled) setModuleState('feature-cm', true);
  91. },
  92. () => setModuleState('feature-change', false)
  93. );
  94. return false;
  95. }
  96. }
  97. }
  98. else
  99. {
  100. // 关闭 交付物 时,如果 项目变更 或 基线 已开启,需要提示关闭它们
  101. if(id == 'feature-deliverable')
  102. {
  103. const changeEnabled = isModuleEnabled('feature-change');
  104. const cmEnabled = isModuleEnabled('feature-cm');
  105. if(changeEnabled || cmEnabled)
  106. {
  107. let message = closeDependFeature.replace('{source}', deliverableLang);
  108. const activeLangs = [];
  109. if(changeEnabled) activeLangs.push(changeLang);
  110. if(cmEnabled) activeLangs.push(cmLang);
  111. message = message.replace('{target}', activeLangs.join(','));
  112. showDependencyConfirm(
  113. message,
  114. () =>
  115. {
  116. if(changeEnabled) setModuleState('feature-change', false);
  117. if(cmEnabled) setModuleState('feature-cm', false);
  118. },
  119. () => setModuleState('feature-deliverable', true)
  120. );
  121. }
  122. }
  123. // 关闭 基线 时,如果 项目变更 已开启,需要提示关闭 项目变更
  124. else if(id == 'feature-cm')
  125. {
  126. if(isModuleEnabled('feature-change'))
  127. {
  128. const message = closeDependFeature.replace('{source}', cmLang).replace('{target}', changeLang);
  129. showDependencyConfirm(
  130. message,
  131. () => setModuleState('feature-change', false),
  132. () => setModuleState('feature-cm', true)
  133. );
  134. }
  135. }
  136. }
  137. }