250 lines
5.9 KiB
JavaScript
250 lines
5.9 KiB
JavaScript
$('#teamTable').on('click.team', '.btn-add', function()
|
|
{
|
|
var $newRow = $(this).closest('tr').clone();
|
|
|
|
let options = zui.Picker.query("[name^='team']").options;
|
|
|
|
$newRow.find('.picker-box').remove();
|
|
$newRow.find('td').eq(1).append('<div class="picker-box" id="line"></div>');
|
|
|
|
$newRow.find('input').val('');
|
|
$newRow.find('[name^=teamConsumed]').val(0);
|
|
$(this).closest('tr').after($newRow);
|
|
|
|
toggleBtn();
|
|
let index = setLineIndex();
|
|
let newID = $newRow.find('[id^=line]').attr('id');
|
|
let taskMode = $('[name=mode]').val() ? $('[name=mode]').val() : '';
|
|
|
|
/* Init team's select picker. */
|
|
options.defaultValue = '';
|
|
options.disabled = false;
|
|
if(taskMode == 'multi')
|
|
{
|
|
let members = [];
|
|
let $teams = $('#teamTable').find('.picker-box [name^=team]');
|
|
for(i = 0; i < $teams.length; i++)
|
|
{
|
|
let value = $teams.eq(i).val();
|
|
if(members.includes(value))
|
|
{
|
|
$teams.eq(i).closest('tr').addClass('hidden');
|
|
continue;
|
|
}
|
|
if(value != '') members.push(value);
|
|
}
|
|
|
|
$.each(options.items, function(i, item)
|
|
{
|
|
if(item.value == '') return;
|
|
options.items[i].disabled = members.includes(item.value);
|
|
});
|
|
}
|
|
|
|
new zui.Picker(`#${newID}`, options);
|
|
|
|
})
|
|
|
|
$('#teamTable').on('click.team', '.btn-delete', function()
|
|
{
|
|
var $row = $(this).closest('tr');
|
|
if(!checkRemove($row.index())) return;
|
|
|
|
$row.remove();
|
|
toggleBtn();
|
|
setLineIndex();
|
|
disableMembers();
|
|
});
|
|
|
|
$('#teamTable').on('change.team', '.picker-select', function()
|
|
{
|
|
disableMembers();
|
|
});
|
|
|
|
$('#teamTable').on('click', "[data-type='add']", function()
|
|
{
|
|
setTimeout(function(){disableMembers()}, 300);
|
|
});
|
|
|
|
/* 切换串行/并行 展示/隐藏工序图标. */
|
|
$(function()
|
|
{
|
|
$('.form').on('change.team', '[name="mode"]', function()
|
|
{
|
|
if($(this).val() == 'multi')
|
|
{
|
|
$('#teamTable td .icon-angle-down').addClass('hidden');
|
|
}
|
|
else
|
|
{
|
|
$('#teamTable td .icon-angle-down').removeClass('hidden');
|
|
}
|
|
});
|
|
})
|
|
|
|
/**
|
|
* Set line number.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
function setLineIndex()
|
|
{
|
|
let index = 1;
|
|
$('.team-number').each(function()
|
|
{
|
|
$(this).text(index);
|
|
$(this).closest('tr').find('[id^="line"]').attr('id', 'line' + index);
|
|
index ++;
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Check delete button hide or not.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
function toggleBtn()
|
|
{
|
|
var $deleteBtn = $('#teamTable').find('.btn-delete');
|
|
if($deleteBtn.length == 1)
|
|
{
|
|
$deleteBtn.addClass('hidden');
|
|
}
|
|
else
|
|
{
|
|
$deleteBtn.removeClass('hidden');
|
|
}
|
|
};
|
|
|
|
function onPageUnmount()
|
|
{
|
|
$('#modalTeam').off('.saveTeam');
|
|
}
|
|
|
|
/**
|
|
* Disable user select box.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
function disableMembers()
|
|
{
|
|
let mode = $('[name=mode]').val() ? $('[name=mode]').val() : '';
|
|
if(mode == 'multi')
|
|
{
|
|
let members = [];
|
|
let $teams = $('#teamTable').find('.picker-box [name^=team]');
|
|
for(i = 0; i < $teams.length; i++)
|
|
{
|
|
let value = $teams.eq(i).val();
|
|
if(members.includes(value))
|
|
{
|
|
$teams.eq(i).closest('tr').addClass('hidden');
|
|
continue;
|
|
}
|
|
if(value != '') members.push(value);
|
|
}
|
|
|
|
$teams.each(function()
|
|
{
|
|
let $team = $(this);
|
|
let account = $team.val();
|
|
let $teamPicker = $team.zui('picker');
|
|
let teamItems = $teamPicker.options.items;
|
|
$.each(teamItems, function(i, item)
|
|
{
|
|
if(item.value == '') return;
|
|
teamItems[i].disabled = members.includes(item.value) && item.value != account;
|
|
})
|
|
|
|
$teamPicker.render({items: teamItems});
|
|
});
|
|
|
|
$('#teamTable').find('tr.hidden').remove();
|
|
}
|
|
else
|
|
{
|
|
let $teams = $('#teamTable').find('.picker-box [name^=team]');
|
|
$teams.each(function()
|
|
{
|
|
let $team = $(this);
|
|
let $teamPicker = $team.zui('picker');
|
|
let teamItems = $teamPicker.options.items;
|
|
$.each(teamItems, function(i, item)
|
|
{
|
|
if(item.value == '') return;
|
|
teamItems[i].disabled = false;
|
|
})
|
|
$teamPicker.render({items: $teamPicker.options.items});
|
|
});
|
|
}
|
|
}
|
|
|
|
$('#teamTable').on('change.team', '.picker-box [name^=team]', function()
|
|
{
|
|
disableMembers();
|
|
})
|
|
|
|
/**
|
|
* Check if it can be removed.
|
|
*
|
|
* @param int $removeIndex
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
function checkRemove(removeIndex)
|
|
{
|
|
let $teams = $('#teamTable').find('.picker-box [name^=team]');
|
|
let totalLeft = 0;
|
|
let memberCount = 0;
|
|
for(i = 0; i < $teams.length; i++)
|
|
{
|
|
let $this = $teams.eq(i);
|
|
let value = $this.val();
|
|
if(value == '') continue;
|
|
|
|
let $tr = $this.closest('tr');
|
|
if($tr.index() == removeIndex) continue;
|
|
|
|
memberCount++;
|
|
|
|
let $teamLeft = $tr.find('[name^=teamLeft]');
|
|
if($teamLeft.length > 0)
|
|
{
|
|
left = parseFloat($teamLeft.val());
|
|
if(!isNaN(left)) totalLeft += left;
|
|
}
|
|
}
|
|
|
|
if(memberCount < 2)
|
|
{
|
|
zui.Modal.alert(teamMemberError);
|
|
return false;
|
|
}
|
|
|
|
if($('#teamTable').find('td > .btn-delete:enabled').length == 1) return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
window.confirmBug = function(confirmTip, taskID, bugID)
|
|
{
|
|
zui.Modal.confirm(confirmTip).then((res) => {
|
|
if(res)
|
|
{
|
|
loadPage($.createLink('bug', 'view', `bugID=${bugID}`));
|
|
}
|
|
else
|
|
{
|
|
loadPage($.createLink('task', 'view', `taskID=${taskID}`));
|
|
}
|
|
});
|
|
}
|
|
|
|
function ignoreTip(event)
|
|
{
|
|
$(event.target).closest('.form-tip').remove();
|
|
}
|