| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- $('#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();
- }
|