266 lines
8.3 KiB
JavaScript
266 lines
8.3 KiB
JavaScript
|
|
function changeModule($target, type = 'single')
|
|||
|
|
{
|
|||
|
|
const name = $target.attr('name');
|
|||
|
|
if($target.prop('checked'))
|
|||
|
|
{
|
|||
|
|
$("input[type=hidden][name='" + name + "']").val('1').attr('disabled');
|
|||
|
|
if(type == 'single') checkRelated(name, 'open');
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
$("input[type=hidden][name='" + name + "']").val('1').attr('disabled');
|
|||
|
|
$("input[type=hidden][name='" + name + "']").val('0').removeAttr('disabled');
|
|||
|
|
if(type == 'single') checkRelated(name, 'close');
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
function checkModule(event)
|
|||
|
|
{
|
|||
|
|
changeModule($(event.target));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function checkGroup()
|
|||
|
|
{
|
|||
|
|
const checked = $(this).prop('checked');
|
|||
|
|
$(this).closest('tr').find("div:not(.hidden) > input[type=checkbox][name^='module']").each(function()
|
|||
|
|
{
|
|||
|
|
const name = $(this).attr('name');
|
|||
|
|
$(this).prop('checked', checked);
|
|||
|
|
$(`input[type=hidden][name='${name}']`).val(checked ? '1' : '0');
|
|||
|
|
});
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
function checkAll()
|
|||
|
|
{
|
|||
|
|
const checked = $(this).prop('checked');
|
|||
|
|
$('input[type=checkbox][name^=allChecker]').prop('checked', checked);
|
|||
|
|
$(this).closest('table').find("div:not(.hidden) > input[type=checkbox][name^='module']").each(function()
|
|||
|
|
{
|
|||
|
|
$(this).prop('checked', checked);
|
|||
|
|
changeModule($(this), 'all');
|
|||
|
|
});
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
|
|||
|
|
window.submitForm = function()
|
|||
|
|
{
|
|||
|
|
const isCheckedUR = $('[name="module[productUR]"]').prop('checked');
|
|||
|
|
const isCheckedER = $('[name="module[productER]"]').prop('checked');
|
|||
|
|
|
|||
|
|
let message = confirmDisableStoryType;
|
|||
|
|
let storyType = '';
|
|||
|
|
|
|||
|
|
if(edition != 'ipd' && URAndSR && !isCheckedUR)
|
|||
|
|
{
|
|||
|
|
storyType += URCommon;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(enableER && !isCheckedER)
|
|||
|
|
{
|
|||
|
|
if(storyType) storyType += ',';
|
|||
|
|
storyType += ERCommon;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(storyType)
|
|||
|
|
{
|
|||
|
|
zui.Modal.confirm(
|
|||
|
|
{
|
|||
|
|
message: message.replace(/{type}/g, storyType),
|
|||
|
|
icon: 'icon-exclamation-sign',
|
|||
|
|
iconClass: 'warning-pale rounded-full icon-2x'
|
|||
|
|
}).then((res) =>
|
|||
|
|
{
|
|||
|
|
if(res)
|
|||
|
|
{
|
|||
|
|
realSubmitForm();
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
setModuleState('productUR', true);
|
|||
|
|
setModuleState('productER', true);
|
|||
|
|
});
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
realSubmitForm();
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
window.realSubmitForm = function()
|
|||
|
|
{
|
|||
|
|
const formData = new FormData($('#setModuleForm form')[0]);
|
|||
|
|
const url = $.createLink('admin', 'setmodule');
|
|||
|
|
$.ajaxSubmit({url: url, data: formData});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 设置模块的checkbox和hidden input状态
|
|||
|
|
* @param {string} moduleName - 模块名称(如 'productUR', 'productER')
|
|||
|
|
* @param {boolean} checked - 是否选中
|
|||
|
|
*/
|
|||
|
|
function setModuleState(moduleName, checked)
|
|||
|
|
{
|
|||
|
|
const checkboxSelector = `[name="module[${moduleName}]"]`;
|
|||
|
|
const hiddenSelector = `#module${moduleName}[type=hidden]`;
|
|||
|
|
$(checkboxSelector).prop('checked', checked);
|
|||
|
|
$(hiddenSelector).val(checked ? '1' : '0');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 检查模块是否已启用
|
|||
|
|
* @param {string} moduleName - 模块名称
|
|||
|
|
* @returns {boolean} 是否已启用
|
|||
|
|
*/
|
|||
|
|
function isModuleEnabled(moduleName)
|
|||
|
|
{
|
|||
|
|
return $('[name="module[' + moduleName + ']"]').prop('checked');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 显示依赖关系确认对话框
|
|||
|
|
* @param {string} message - 确认消息
|
|||
|
|
* @param {Function} onConfirm - 确认回调
|
|||
|
|
* @param {Function} onCancel - 取消回调
|
|||
|
|
*/
|
|||
|
|
function showDependencyConfirm(message, onConfirm, onCancel)
|
|||
|
|
{
|
|||
|
|
zui.Modal.confirm(
|
|||
|
|
{
|
|||
|
|
message: message,
|
|||
|
|
icon: 'icon-exclamation-sign',
|
|||
|
|
iconClass: 'warning-pale rounded-full icon-2x'
|
|||
|
|
}).then((res) =>
|
|||
|
|
{
|
|||
|
|
if(res)
|
|||
|
|
{
|
|||
|
|
if(onConfirm) onConfirm();
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
if(onCancel) onCancel();
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
window.checkRelated = function(name, type)
|
|||
|
|
{
|
|||
|
|
if(type === 'open')
|
|||
|
|
{
|
|||
|
|
// 开启 业务需求 时,需要确保 用户需求 已开启
|
|||
|
|
if(name.includes('productER') && edition !== 'ipd')
|
|||
|
|
{
|
|||
|
|
if(!isModuleEnabled('productUR'))
|
|||
|
|
{
|
|||
|
|
const message = openDependFeature.replace('{source}', ERCommon).replace('{target}', URCommon);
|
|||
|
|
showDependencyConfirm(
|
|||
|
|
message,
|
|||
|
|
() => setModuleState('productUR', true),
|
|||
|
|
() => setModuleState('productER', false)
|
|||
|
|
);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
// 开启 项目变更 时,需要确保 交付物 已开启
|
|||
|
|
else if(name.includes('projectCm'))
|
|||
|
|
{
|
|||
|
|
if(!isModuleEnabled('projectDeliverable'))
|
|||
|
|
{
|
|||
|
|
const message = openDependFeature.replace('{source}', cmLang).replace('{target}', deliverableLang);
|
|||
|
|
showDependencyConfirm(
|
|||
|
|
message,
|
|||
|
|
() => setModuleState('projectDeliverable', true),
|
|||
|
|
() => setModuleState('projectCm', false)
|
|||
|
|
);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
// 开启 项目变更 时,需要确保 交付物 和 基线 都已开启
|
|||
|
|
else if(name.includes('projectChange'))
|
|||
|
|
{
|
|||
|
|
const deliverableEnabled = isModuleEnabled('projectDeliverable');
|
|||
|
|
const cmEnabled = isModuleEnabled('projectCm');
|
|||
|
|
|
|||
|
|
if(!deliverableEnabled || !cmEnabled)
|
|||
|
|
{
|
|||
|
|
let message = openDependFeature.replace('{source}', changeLang);
|
|||
|
|
const missingLangs = [];
|
|||
|
|
|
|||
|
|
if(!deliverableEnabled) missingLangs.push(deliverableLang);
|
|||
|
|
if(!cmEnabled) missingLangs.push(cmLang);
|
|||
|
|
|
|||
|
|
message = message.replace('{target}', missingLangs.join(','));
|
|||
|
|
|
|||
|
|
showDependencyConfirm(
|
|||
|
|
message,
|
|||
|
|
() =>
|
|||
|
|
{
|
|||
|
|
if(!deliverableEnabled) setModuleState('projectDeliverable', true);
|
|||
|
|
if(!cmEnabled) setModuleState('projectCm', true);
|
|||
|
|
},
|
|||
|
|
() => setModuleState('projectChange', false)
|
|||
|
|
);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
// 关闭 用户需求 时,如果 业务需求 已开启,需要提示关闭 业务需求
|
|||
|
|
if(name.includes('productUR') && edition !== 'ipd')
|
|||
|
|
{
|
|||
|
|
if(isModuleEnabled('productER'))
|
|||
|
|
{
|
|||
|
|
const message = closeDependFeature.replace('{source}', URCommon).replace('{target}', ERCommon);
|
|||
|
|
showDependencyConfirm(
|
|||
|
|
message,
|
|||
|
|
() => setModuleState('productER', false),
|
|||
|
|
() =>
|
|||
|
|
{
|
|||
|
|
setModuleState('productUR', true);
|
|||
|
|
setModuleState('productER', true);
|
|||
|
|
}
|
|||
|
|
);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
// 关闭 交付物 时,如果 项目变更 或 基线 已开启,需要提示关闭它们
|
|||
|
|
else if(name.includes('projectDeliverable'))
|
|||
|
|
{
|
|||
|
|
const changeEnabled = isModuleEnabled('projectChange');
|
|||
|
|
const cmEnabled = isModuleEnabled('projectCm');
|
|||
|
|
|
|||
|
|
if(changeEnabled || cmEnabled)
|
|||
|
|
{
|
|||
|
|
let message = closeDependFeature.replace('{source}', deliverableLang);
|
|||
|
|
const activeLangs = [];
|
|||
|
|
|
|||
|
|
if(changeEnabled) activeLangs.push(changeLang);
|
|||
|
|
if(cmEnabled) activeLangs.push(cmLang);
|
|||
|
|
|
|||
|
|
message = message.replace('{target}', activeLangs.join(','));
|
|||
|
|
|
|||
|
|
showDependencyConfirm(
|
|||
|
|
message,
|
|||
|
|
() =>
|
|||
|
|
{
|
|||
|
|
if(changeEnabled) setModuleState('projectChange', false);
|
|||
|
|
if(cmEnabled) setModuleState('projectCm', false);
|
|||
|
|
},
|
|||
|
|
() => setModuleState('projectDeliverable', true)
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
// 关闭 基线 时,如果 项目变更 已开启,需要提示关闭 项目变更
|
|||
|
|
else if(name.includes('projectCm'))
|
|||
|
|
{
|
|||
|
|
if(isModuleEnabled('projectChange'))
|
|||
|
|
{
|
|||
|
|
const message = closeDependFeature.replace('{source}', cmLang).replace('{target}', changeLang);
|
|||
|
|
showDependencyConfirm(
|
|||
|
|
message,
|
|||
|
|
() => setModuleState('projectChange', false),
|
|||
|
|
() => setModuleState('projectCm', true)
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|