| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315 |
- $(document).off('click', '.batch-btn').on('click', '.batch-btn', function()
- {
- const dtable = zui.DTable.query($(this).target);
- const checkedList = dtable.$.getChecks();
- if(!checkedList.length) return;
- const url = $(this).data('url');
- const form = new FormData();
- checkedList.forEach((id) => {
- const data = dtable.$.getRowInfo(id).data;
- if(data.isScene) form.append('sceneIdList[]', data.caseID);
- if(!data.isScene) form.append('caseIdList[]', data.caseID);
- });
- if($(this).hasClass('ajax-btn'))
- {
- if($(this).hasClass('batch-delete-btn'))
- {
- zui.Modal.confirm(confirmBatchDeleteSceneCase).then((res) => {if(res) $.ajaxSubmit({url, data:form});});
- }
- else
- {
- $.ajaxSubmit({url, data:form});
- }
- }
- else
- {
- postAndLoadPage(url, form);
- }
- });
- /**
- * 拖拽用例或者场景。
- * Drag case or scene.
- *
- * @param from 被拿起的元素
- * @param to 放下时的目标元素
- * @param type 放在目标元素的上方还是下方
- * @access public
- * @return bool
- */
- window.onSortEnd = function(from, to, type)
- {
- if(!from || !to) return false;
- if(!from.data.isScene && !to.data.isScene)
- {
- if(from.data.parent != to.data.parent) changeScene(from.data.id, to.data.parent);
- changeOrder(from.data.caseID, from.data.sort, to.data.caseID, to.data.sort, type, 'case');
- }
- else if(from.data.isScene && to.data.isScene)
- {
- if(from.data.parent == to.data.parent)
- {
- $('#dragModal').attr('data-sourceID', from.data.id);
- $('#dragModal').attr('data-targetID', to.data.id);
- $('#dragModal').attr('data-sourceSort', from.data.sort);
- $('#dragModal').attr('data-targetSort', to.data.sort);
- $('#dragModal').attr('data-type', type);
- zui.Modal.open({id: 'dragModal'});
- }
- else
- {
- changeScene(from.data.id, to.data.id);
- }
- }
- else if(!from.data.isScene && to.data.isScene)
- {
- changeScene(from.data.id, to.data.id);
- }
- return true;
- }
- function changeScene(caseID, sceneID)
- {
- const url = $.createLink('testcase', 'changeScene');
- const form = new FormData();
- form.append('sourceID', caseID);
- form.append('targetID', sceneID);
- $.ajaxSubmit({url, data:form});
- }
- function changeOrder(sourceID, sourceOrder, targetID, targetOrder, type, module)
- {
- const url = $.createLink('testcase', 'updateOrder');
- const form = new FormData();
- form.append('sourceID', sourceID);
- form.append('sourceOrder', sourceOrder);
- form.append('targetID', targetID);
- form.append('targetOrder', targetOrder);
- form.append('type', type);
- form.append('module', module);
- $.ajaxSubmit({url, data:form});
- }
- /**
- * 拖拽的用例或者场景是否允许放下。
- * Is it allowed to drop the dragged case or scene.
- *
- * @param from 被拿起的元素
- * @param to 放下时的目标元素
- * @access public
- * @return bool
- */
- window.canSortTo = function(from, to)
- {
- if(!from || !to) return false;
- if(!from.data.isScene && !to.data.isScene && from.data.parent != 0 && from.data.parent != to.data.parent) return false;
- if(from.data.isScene && !to.data.isScene) return false;
- return true;
- }
- /**
- * 切换显示所有用例和自动化用例。
- * Toggles between displaying all cases and automation cases.
- *
- * @param event $event
- * @access public
- * @return void
- */
- window.toggleOnlyAutoCase = function(event)
- {
- const onlyAutoCase = $(event.target).prop('checked') ? 1 : 0;
- $.cookie.set('onlyAutoCase', onlyAutoCase, {expires:config.cookieLife, path:config.webRoot});
- loadCurrentPage();
- }
- /**
- * 标题列显示额外的内容。
- * Display extra content in the title column.
- *
- * @param object result
- * @param object info
- * @access public
- * @return object
- */
- window.onRenderCell = function(result, {row, col})
- {
- if(result)
- {
- if(col.name == 'caseID' && row.data.isScene)
- {
- result.shift(); // 移除场景ID
- }
- if(col.name == 'title')
- {
- const data = row.data;
- const module = this.options.customData.modules[data.module];
- if(data.color) result[0].props.style = 'color: ' + data.color;
- if(data.isScene) // 场景
- {
- result.shift(); // 移除带链接的场景名称
- result.push({html: data.title}); // 添加不带链接的场景名称
- if(module) result.unshift({html: '<span class="label gray-pale rounded-full nowrap">' + module + '</span>'}); // 添加模块标签
- result.unshift({html: '<span class="label gray-300-outline text-gray rounded-full nowrap">' + scene + '</span>'}); // 添加场景标签
- if(data.hasCase == false) result.push({html: '<span class="text-gray">(' + noCase + ')</span>'}); // 添加暂无用例标签
- }
- else // 用例
- {
- if(data.auto == 'auto') result.unshift({html: '<span class="label gray-pale rounded-full nowrap">' + automated + '</span>'}); // 添加自动化标签
- if(module) result.unshift({html: '<span class="label gray-pale rounded-full nowrap">' + module + '</span>'}); // 添加模块标签
- if(row.data.fromCaseID > 0)
- {
- if(isFromDoc)
- {
- result.push({html: `[<i class='icon icon-share'></i> #${row.data.fromCaseID}]`}); // 添加来源用例
- }
- else if(canImportToLib)
- {
- let caseLink = $.createLink('testcase', 'view', `id=${row.data.fromCaseID}`);
- result.push({html: `[<a href=${caseLink} data-app='qa'><i class='icon icon-share'></i> #${row.data.fromCaseID}</a>]`}); // 添加来源用例链接
- }
- }
- }
- }
- if(col.name == 'pri' && row.data.isScene)
- {
- result.shift(); // 移除场景优先级
- }
- if(col.name == 'status' && row.data.status == 'casechanged')
- {
- result[0] = {html: '<span style="color:#ff6f42">' + caseChanged + '</span>'};
- }
- if(col.name == 'story' && row.data.story > 0)
- {
- result[0] = {html: `<a href="${$.createLink('story', 'view', `storyID=${row.data.story}`)}">${row.data.storyTitle}</a>`};
- }
- }
- if(row.data.lastEditedDate == '0000-00-00 00:00:00') row.data.lastEditedDate = '';
- if(row.data.reviewedDate == '0000-00-00') row.data.reviewedDate = '';
- return result;
- }
- /**
- * 计算表格信息的统计。
- * Set summary for table footer.
- *
- * @param element element
- * @param array checks
- * @access public
- * @return object
- */
- window.setStatistics = function(element, checks)
- {
- if(checks.length)
- {
- caseCount = 0;
- runCaseCount = 0;
- checks.forEach((id) => {
- const scene = element.getRowInfo(id).data;
- if(scene.isScene == false)
- {
- caseCount ++;
- if(scene.lastRunResult != '') runCaseCount ++;
- }
- });
- return zui.formatString(checkedSummary, {
- checked: caseCount,
- run: runCaseCount
- });
- }
- }
- /**
- * Get selected case id list.
- *
- * @param string selector
- * @access public
- * @return void
- */
- function getCheckedCaseIdList(selector)
- {
- let caseIdList = '';
- const dtable = zui.DTable.query('#' + selector);
- $.each(dtable.$.getChecks(), function(index, caseID)
- {
- if(index > 0) caseIdList += ',';
- caseIdList += caseID;
- });
- $('#caseIdList').val(caseIdList);
- }
- /**
- * Check ztf script run result.
- *
- * @param e
- * @access public
- * @return void
- */
- window.checkZtf = function(e)
- {
- e.preventDefault();
- e.stopPropagation();
- const url = $(this).attr('href');
- $.get(url, function(result)
- {
- const load = result.load;
- if(!load || typeof load == 'string')
- {
- zui.Modal.open({url: load, size: 'lg', replace: true});
- return false;
- }
- zui.Modal.confirm(load.confirm).then((res) => {
- if(!res) return loadModal(load.canceled, null, {size: 'lg'});
- $.post(load.confirmed, {}, function(result)
- {
- result = JSON.parse(result);
- if(result.result == 'fail') return zui.Modal.alert(result.message);
- loadModal(load.canceled, null, {size: 'lg'});
- });
- });
- }, 'json');
- }
- window.clickChangeScenen = function()
- {
- const caseID = $('#dragModal').attr('data-sourceID');
- const sceneID = $('#dragModal').attr('data-targetID');
- changeScene(caseID, sceneID);
- }
- window.clickChangeOrder = function()
- {
- const sourceID = $('#dragModal').attr('data-sourceID');
- const sourceOrder = $('#dragModal').attr('data-sourceSort');
- const targetID = $('#dragModal').attr('data-targetID');
- const targetOrder = $('#dragModal').attr('data-targetSort');
- const type = $('#dragModal').attr('data-type');
- changeOrder(sourceID, sourceOrder, targetID, targetOrder, type, 'scene');
- }
- $('#dragModal').on('click', '[data-dismiss=modal]', function()
- {
- loadCurrentPage({cache: false});
- });
- window.firstRendered = false;
- window.toggleCheckRows = function(idList)
- {
- if(!idList?.length || firstRendered) return;
- firstRendered = true;
- const dtable = zui.DTable.query($('#testcases'));
- dtable.$.toggleCheckRows(idList.split(','), true);
- }
|