* Replace select with picker in story::batchToTask, and modify it's js.

This commit is contained in:
liumengyi
2023-11-10 10:14:45 +08:00
parent 673b0920ed
commit 3bee641085
2 changed files with 42 additions and 35 deletions
+33 -29
View File
@@ -1,39 +1,44 @@
window.renderRowData = function($row, index, row)
{
index += 1;
$story = $row.find('td.form-batch-control .form-batch-input[data-name=story]');
$inputControl = $story.closest('.input-control');
$inputControl.length == 0 ? $story.wrap("<div class='input-group'></div>") : $inputControl.wrap("<div class='input-group'></div>");
index += 1;
$row.find('[data-name="story"]').find('.picker-box').on('inited', function(e, info)
{
let $story = $(info[0].element);
$story.closest('.form-batch-ditto-wrapper').length == 0 ? $story.css('width', 'calc(100% - 60px)').wrap("<div class='input-group'></div>") : $story.closest('.form-batch-ditto-wrapper').css('width', 'calc(100% - 60px)').wrap("<div class='input-group'></div>");
viewLink = typeof row != 'undefined' ? "href='" + $.createLink('story', 'view', "storyID=" + row.story) + "' data-toggle='modal' data-size='lg'" : "href='###' disabled=disabled";
$inputGroup = $inputControl.length == 0 ? $story.closest('.input-group') : $inputControl.closest('.input-group');
$row.find('td.form-batch-control .form-batch-input[data-name=module]').attr('onchange', 'setStories(this.value, ' + executionID + ', ' + index + ')');
$story.attr('onchange', 'setStoryRelated(' + index + ')');
$inputGroup.append("<span class='input-group-addon' style='padding:0px;'></span");
$inputGroup.find('.input-group-addon').append("<a id='preview_" + index + "' " + viewLink + " class='btn ghost size-sm' title='" + langPreview + "'><i class='icon icon-eye'></i></a>");
$inputGroup.find('.input-group-addon').append("<a href='javascript:copyStoryTitle(" + index + ")' class='btn ghost size-sm' title='" + copyStoryTitle + "'><i class='icon-arrow-right'></i></a>");
let $inputControl = $story.closest('.input-group');
let viewLink = typeof row != 'undefined' && row.story != 0 ? "href='" + $.createLink('story', 'view', "storyID=" + row.story) + "' data-toggle='modal' data-size='lg'" : "href='###' disabled=disabled";
let $inputGroup = $("<span class='flex items-center' style='padding:0px;'></span>");
$inputGroup.append("<a id='preview_" + index + "' " + viewLink + " class='btn ghost size-sm' title='" + langPreview + "'><i class='icon icon-eye'></i></a>");
$inputGroup.append("<a class='copy-title-btn btn ghost size-sm' title='" + copyStoryTitleTip + "'><i class='icon-arrow-right'></i></a>");
$inputControl.append($inputGroup[0]);
});
};
window.setStories = function(moduleID, executionID, index)
function setStories(event)
{
var link = $.createLink('story', 'ajaxGetExecutionStories', 'executionID=' + executionID + '&productID=0&branch=all&moduleID=' + moduleID + '&storyID=0&num=' + index + '&type=short');
$.get(link, function(stories)
const $target = $(event.target);
const moduleID = $target.val();
const $row = $target.closest('tr');
const link = $.createLink('story', 'ajaxGetExecutionStories', 'executionID=' + executionID + '&productID=0&branch=all&moduleID=' + moduleID + '&storyID=0&pageType=&type=short');
$.getJSON(link, function(stories)
{
let $story = $('[name=story\\[' + index + '\\]]');
let $inputGroup = $story.closest('.input-group');
let $story = $row.find('[name^=story]');
let storyID = $story.val();
if(!stories) stories = '<select id="story_' + index + '" name="story[' + index + ']" class="form-control"></select>';
$('[name=story\\[' + index + '\\]]').replaceWith(stories);
$inputGroup.find('[name^=story]').attr('class', 'form-control form-batch-input').attr('data-name', 'story').attr('name', 'story[' + index + ']').attr('id', 'story_' + (index - 1)).attr('onchange', 'setStoryRelated(' + index + ')').val(storyID);
let $storyPicker = $story.zui('picker');
$storyPicker.render({items: stories});
$storyPicker.$.setValue(storyID);
});
};
window.setStoryRelated = function(index)
function setStoryRelated(event)
{
var storyID = $('[name=story\\[' + index + '\\]]').val();
const $target = $(event.target);
const storyID = $target.val();
const index = parseInt($target.closest('tr').attr('data-index')) + 1;
if(storyID != 0)
{
storyLink = $.createLink('story', 'view', "storyID=" + storyID);
var storyLink = $.createLink('story', 'view', "storyID=" + storyID);
$('#preview_' + index).removeAttr('disabled');
$('#preview_' + index).attr('data-toggle', 'modal');
$('#preview_' + index).attr('data-size', 'lg');
@@ -42,7 +47,7 @@ window.setStoryRelated = function(index)
}
else
{
storyLink = '###';
var storyLink = '###';
$('#preview_' + index).attr('disabled', 'disabled');
$('#preview_' + index).css('pointer-events', 'none');
$('#preview_' + index).removeAttr('data-toggle');
@@ -51,15 +56,14 @@ window.setStoryRelated = function(index)
}
};
window.copyStoryTitle = function(index)
function copyStoryTitle(event)
{
var $story = $('[name=story\\[' + index + '\\]]');
var storyValue = $story.val();
var storyTitle = $story.find('option[value="' + storyValue + '"]').text();
var $target = $(event.target);
var $story = $target.closest('.form-batch-control');
var storyTitle = $story.find('.picker span.picker-single-selection').text();
var startPosition = storyTitle.indexOf(':') + 1;
var endPosition = storyTitle.lastIndexOf('[');
if(endPosition > 0 && startPosition > 0) storyTitle = storyTitle.substr(startPosition, endPosition - startPosition);
$('[name=name\\[' + index + '\\]]').val(storyTitle);
$($story.closest('tr').find('[name^=name]')).val(storyTitle);
}
+9 -6
View File
@@ -14,15 +14,15 @@ namespace zin;
jsVar('executionID', $executionID);
jsVar('langPreview', $lang->preview);
jsVar('copyStoryTitle', $lang->task->copyStoryTitle);
jsVar('copyStoryTitleTip', $lang->task->copyStoryTitle);
$fields = array();
$fields['id'] = array('name' => 'id', 'label' => $lang->idAB, 'control' => 'index', 'width' => '32px');
$fields['module'] = array_merge(array('name' => 'module', 'label' => $lang->task->module, 'width' => '200px', 'ditto' => true, 'defaultDitto' => 'off', 'items' => $modules, 'control' => 'select'), $config->task->form->batchcreate['module']);
$fields['story'] = array_merge(array('name' => 'story', 'label' => $lang->task->story, 'width' => '250px', 'ditto' => true, 'defaultDitto' => 'off', 'items' => $storyPairs, 'control' => 'select'), $config->task->form->batchcreate['story']);
$fields['name'] = array_merge(array('name' => 'name', 'label' => $lang->task->name, 'ditto' => false, 'defaultDitto' => 'off', 'filter' => 'trim', 'control' => 'text'), $config->task->form->batchcreate['name']);
$fields['type'] = array_merge(array('name' => 'type', 'label' => $lang->typeAB, 'width' => '120px', 'ditto' => true, 'defaultDitto' => 'off', 'items' => $lang->task->typeList, 'control' => 'select'), $config->task->form->batchcreate['type']);
$fields['assignedTo'] = array_merge(array('name' => 'assignedTo', 'label' => $lang->task->assignedTo, 'width' => '120px', 'ditto' => false, 'defaultDitto' => 'off', 'items' => $members, 'control' => 'select'), $config->task->form->batchcreate['assignedTo']);
$fields['module'] = array_merge(array('name' => 'module', 'label' => $lang->task->module, 'width' => '200px', 'ditto' => true, 'defaultDitto' => 'off', 'items' => $modules, 'control' => 'picker'), $config->task->form->batchcreate['module']);
$fields['story'] = array_merge(array('name' => 'story', 'label' => $lang->task->story, 'width' => '250px', 'ditto' => true, 'defaultDitto' => 'off', 'items' => $storyPairs, 'control' => 'picker'), $config->task->form->batchcreate['story']);
$fields['name'] = array_merge(array('name' => 'name', 'label' => $lang->task->name, 'width' => '250px', 'ditto' => false, 'defaultDitto' => 'off', 'filter' => 'trim', 'control' => 'text'), $config->task->form->batchcreate['name']);
$fields['type'] = array_merge(array('name' => 'type', 'label' => $lang->typeAB, 'width' => '140px', 'ditto' => true, 'defaultDitto' => 'off', 'items' => $lang->task->typeList, 'control' => 'picker'), $config->task->form->batchcreate['type']);
$fields['assignedTo'] = array_merge(array('name' => 'assignedTo', 'label' => $lang->task->assignedTo, 'width' => '120px', 'ditto' => false, 'defaultDitto' => 'off', 'items' => $members, 'control' => 'picker'), $config->task->form->batchcreate['assignedTo']);
$fields['estimate'] = array_merge(array('name' => 'estimate', 'label' => $lang->task->estimateAB, 'width' => '120px', 'ditto' => true, 'defaultDitto' => 'off', 'filter' => 'trim', 'control' => 'text'), $config->task->form->batchcreate['estimate']);
$fields['estStarted'] = array_merge(array('name' => 'estStarted', 'label' => $lang->task->estStarted, 'width' => '120px', 'ditto' => true, 'defaultDitto' => 'off', 'filter' => 'trim', 'control' => 'date'), $config->task->form->batchcreate['estStarted']);
$fields['deadline'] = array_merge(array('name' => 'deadline', 'label' => $lang->task->deadline, 'width' => '120px', 'ditto' => true, 'defaultDitto' => 'off', 'filter' => 'trim', 'control' => 'date'), $config->task->form->batchcreate['deadline']);
@@ -59,6 +59,9 @@ formBatchPanel
set::maxRows(count($data)),
set::data($data),
set::onRenderRow(jsRaw('renderRowData')),
on::change('[data-name="module"]', 'setStories'),
on::change('[data-name="story"]', 'setStoryRelated'),
on::click('.copy-title-btn', 'copyStoryTitle'),
formHidden('syncFields', implode(',', $syncFields)),
);