function getType() { return $('#zentaolist').data('type'); } function getSettings(useFormData = false) { const settings = $('#zentaolist').data('settings'); const idList = $('#zentaolist').data('idlist'); settings.idList = idList; if(!useFormData) return settings; const formData = new FormData(); for(const key in settings) { const value = settings[key]; if(Array.isArray(value)) { value.forEach((item, index) => (formData.append(`${key}[]`, item))); } else { formData.append(key, value); } } return formData; } function getValue(name) { return $('#zentaolist [name=' + name + ']').val(); } function updatePicker(name, items) { const $picker = $('#zentaolist [name=' + name + ']').zui('picker'); $picker.render({items}); $picker.$.setValue(null); } function checkForm(form, formData) { let isValid = true; $(form).find('.error-tip').addClass('hidden'); $(form).find('.form-group').removeClass('has-error'); // 遍历 FormData 中的所有键值对 for (let [name, value] of formData.entries()) { const inputElement = form.querySelector(`[name="${name}"]`); const formGroup = $(inputElement).closest('.form-group'); // 检查是否是必填项 if (inputElement && formGroup.hasClass('required') && !value?.length) { isValid = false; formGroup.find('.error-tip').removeClass('hidden'); formGroup.addClass('has-error'); } } return isValid; } window.backToSet = function() { const settings = $('#previewForm').data('settings'); const blockID = $('#previewForm').data('blockid'); parent.zui.Modal.open({ size: 'lg', url: settings.replace('{blockID}', blockID) }); } window.toggleCheckRows = function() { const idList = $('#zentaolist').data('idlist'); if(!idList?.length) return; const dtable = zui.DTable.query($('#previewTable')); dtable.$.toggleCheckRows(idList.split(','), true); } function loadWithForm(formData, view = 'setting', action = 'load') { const sessionUrl = $.createLink('doc', 'buildZentaoList', 'type=' + getType()); const loadUrl = $.createLink('doc', 'zentaolist', 'type=' + getType() + '&view=' + view); $.post(sessionUrl, formData, function(data) { data = JSON.parse(data); if(data.result == 'success') action === 'load' ? loadPage(loadUrl) : loadCurrentPage('#customSearchContent'); }); } function preview() { const form = $('#zentaolist form'); const formData = new FormData(form[0]); if(!checkForm(form[0], formData)) return; formData.append('action', 'preview'); loadWithForm(formData); } function insert() { const dtable = zui.DTable.query($('#previewTable')); const checkedList = dtable.$.getChecks(); const tip = $('#insert').data('tip'); if(checkedList.length == 0) { zui.Modal.alert(tip); return; } const form = $('#zentaolist form'); const formData = new FormData(form[0]); formData.append('action', 'insert'); formData.append('idList', checkedList.join(',')); loadWithForm(formData, 'list'); } window.cancel = function() { zui.Editor.iframe.delete(); } function changeCondition() { const condition = getValue('condition'); if(condition == 'customSearch') { $('#customSearchContent').removeClass('hidden'); } else { $('#customSearchContent').addClass('hidden'); } } window.updateCustomSearchItem = function($this, action) { const index = $this.data('index'); const form = $('#zentaolist form'); const formData = new FormData(form[0]); formData.append('conditionAction', action); formData.append('conditionIndex', index); loadWithForm(formData, 'setting', 'post'); } window.updateCustomSearch = function() { const form = $('#zentaolist form'); const formData = new FormData(form[0]); loadWithForm(formData, 'setting', 'post'); } function changeProduct() { const product = getValue('product'); const type = getType(); if(type === 'planStory' || type == 'planBug') { const link = $.createLink('productplan', 'ajaxGetProductplans', 'product=' + product); $.get(link, function(resp) { resp = JSON.parse(resp); updatePicker('plan', resp); }); } if(type === 'productCase') { const condition = getValue('condition'); if(condition == 'customSearch') updateCustomSearch(); } } window.renderCell = function(result, info) { if(['productStory', 'ER', 'UR', 'planStory', 'projectStory'].indexOf(blockType) !== -1) { if(info.col.name == 'title' && result) { const story = info.row.data; let html = ''; if(blockType == 'planStory' || blockType == 'projectStory') { let gradeLabel = gradeGroup[story.type][story.grade]; if(gradeLabel) html += "" + gradeLabel + " "; } else { let gradeLabel = ''; let showGrade = false; const gradeMap = gradeGroup[story.type] || {}; if(story.type != storyType) showGrade = true; if((story.type == 'epic' || story.type == 'requirement') && Object.keys(gradeMap).length >= 2) showGrade = true; if(story.type == 'story' && Object.keys(gradeMap).length >= 3) showGrade = true; if(story.grade > 1) showGrade = true; if(showGrade) gradeLabel = gradeMap[story.grade]; if(gradeLabel) html += "" + gradeLabel + " "; if(story.color) result[0].props.style = 'color: ' + story.color; } if(html) result.unshift({html}); } } if(blockType == 'productRelease') { if(info.col.name == 'build') { result = []; if(!info.row.data.build.name) return result; result.push({html: info.row.data.build.name}); } if(info.col.name == 'project') { result = []; if(!info.row.data.projectName) return result; result.push({html: `${info.row.data.projectName}`}); } } if(blockType == 'projectRelease') { if(info.col.name == 'name') { if(info.row.data.marker == 1) { result[result.length] = {html: ""}; } } if(info.col.name == 'build') { if(!info.row.data.buildInfos) info.row.data.buildInfos = info.row.data.builds; let result = []; for(key in info.row.data.buildInfos) result.push({html: info.row.data.buildInfos[key].name}) return result; } } if(blockType == 'productCase') { if(result) { if(info.col.name == 'caseID' && info.row.data.isScene) result.shift(); // 移除场景ID if(info.col.name == 'title') { const data = info.row.data; if(data.color) result[0].props.style = 'color: ' + data.color; if(data.isScene) // 场景 { result.shift(); // 移除带链接的场景名称 result.push({html: data.title}); // 添加不带链接的场景名称 result.unshift({html: '' + scene + ''}); // 添加场景标签 } else // 用例 { if(data.auto == 'auto') result.unshift({html: '' + automated + ''}); // 添加自动化标签 if(info.row.data.fromCaseID > 0) result.push({html: `[ #${info.row.data.fromCaseID}]`}); // 添加来源用例 } } if(info.col.name == 'pri' && info.row.data.isScene) result.shift(); // 移除场景优先级 if(info.col.name == 'status' && info.row.data.status == 'casechanged') result[0] = {html: '' + caseChanged + ''}; } if(info.row.data.lastEditedDate == '0000-00-00 00:00:00') info.row.data.lastEditedDate = ''; if(info.row.data.reviewedDate == '0000-00-00') info.row.data.reviewedDate = ''; } if(blockType == 'task') { if(result) { if(info.col.name == 'name' && !info.row.data.canView) { result.shift(); result.push({html: info.row.data.name}); } } } return result; }; window.getCellSpan = function(cell) { if(['id', 'branchName', 'name', 'branch', 'status', 'date', 'desc', 'releasedDate', 'actions', 'system'].includes(cell.col.name) && cell.row.data.rowspan) { return {rowSpan: cell.row.data.rowspan}; } }