znt/module/admin/js/setmodule.ui.js

266 lines
8.3 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
);
}
}
}
}