diff --git a/module/execution/config/dtable.php b/module/execution/config/dtable.php index ce7a87a57a..b2a3008b0b 100644 --- a/module/execution/config/dtable.php +++ b/module/execution/config/dtable.php @@ -168,3 +168,56 @@ $config->execution->team->dtable->fieldList['limited']['sortType'] = false; $config->execution->team->dtable->fieldList['actions']['type'] = 'actions'; $config->execution->team->dtable->fieldList['actions']['minWidth'] = 60; $config->execution->team->dtable->fieldList['actions']['actionsMap'] = $config->execution->team->actionList; + +global $app; +$app->loadLang('bug'); +$app->loadLang('task'); +$config->execution->importBug = new stdclass(); +$config->execution->importBug->dtable = new stdclass(); +$config->execution->importBug->dtable->fieldList['id']['title'] = $lang->idAB; +$config->execution->importBug->dtable->fieldList['id']['type'] = 'checkID'; +$config->execution->importBug->dtable->fieldList['id']['sortType'] = false; + +$config->execution->importBug->dtable->fieldList['severity']['title'] = $lang->bug->abbr->severity; +$config->execution->importBug->dtable->fieldList['severity']['type'] = 'severity'; +$config->execution->importBug->dtable->fieldList['severity']['sortType'] = false; +$config->execution->importBug->dtable->fieldList['severity']['fixed'] = 'left'; + +$config->execution->importBug->dtable->fieldList['pri']['title'] = $lang->execution->pri; +$config->execution->importBug->dtable->fieldList['pri']['type'] = 'pri'; +$config->execution->importBug->dtable->fieldList['pri']['sortType'] = false; +$config->execution->importBug->dtable->fieldList['pri']['fixed'] = 'left'; + +$config->execution->importBug->dtable->fieldList['title']['title'] = $lang->bug->title; +$config->execution->importBug->dtable->fieldList['title']['type'] = 'shortNestedTitle'; +$config->execution->importBug->dtable->fieldList['title']['sortType'] = false; +$config->execution->importBug->dtable->fieldList['title']['data-toggle'] = 'modal'; +$config->execution->importBug->dtable->fieldList['title']['link'] = array('module' => 'bug', 'method' => 'view', 'params' => 'bugID={id}'); + +$config->execution->importBug->dtable->fieldList['status']['title'] = $lang->bug->status; +$config->execution->importBug->dtable->fieldList['status']['type'] = 'status'; +$config->execution->importBug->dtable->fieldList['status']['sortType'] = false; +$config->execution->importBug->dtable->fieldList['status']['statusMap'] = $lang->bug->statusList; + +$config->execution->importBug->dtable->fieldList['taskPri']['title'] = $lang->bug->pri; +$config->execution->importBug->dtable->fieldList['taskPri']['name'] = 'pri'; +$config->execution->importBug->dtable->fieldList['taskPri']['type'] = 'html'; +$config->execution->importBug->dtable->fieldList['taskPri']['width'] = 68; +$config->execution->importBug->dtable->fieldList['taskPri']['sortType'] = false; + +$config->execution->importBug->dtable->fieldList['assignedTo']['title'] = $lang->bug->assignedTo; +$config->execution->importBug->dtable->fieldList['assignedTo']['type'] = 'html'; +$config->execution->importBug->dtable->fieldList['assignedTo']['width'] = 108; +$config->execution->importBug->dtable->fieldList['assignedTo']['sortType'] = false; + +$config->execution->importBug->dtable->fieldList['estimate']['title'] = $lang->task->estimate; +$config->execution->importBug->dtable->fieldList['estimate']['type'] = 'number'; +$config->execution->importBug->dtable->fieldList['estimate']['sortType'] = false; + +$config->execution->importBug->dtable->fieldList['estStarted']['title'] = $lang->task->estStarted; +$config->execution->importBug->dtable->fieldList['estStarted']['type'] = 'datetime'; +$config->execution->importBug->dtable->fieldList['estStarted']['sortType'] = false; + +$config->execution->importBug->dtable->fieldList['deadline']['title'] = $lang->task->deadline; +$config->execution->importBug->dtable->fieldList['deadline']['type'] = 'datetime'; +$config->execution->importBug->dtable->fieldList['deadline']['sortType'] = false; diff --git a/module/execution/js/importbug.ui.js b/module/execution/js/importbug.ui.js index 94f36679d7..f9175f8153 100644 --- a/module/execution/js/importbug.ui.js +++ b/module/execution/js/importbug.ui.js @@ -1,22 +1,65 @@ -window.handleImportBug = function(element, config, data) +window.handleImportBug = function(result, data) { - if(config.name == 'severity') + const {col, row, value} = data; + + if(col.name == 'pri' && col.type == 'html') { - $(element).html(``); + $('#priSelect .select-pri').attr('name', `pri[${row.data.id}]`); + + result[0] = null; + result[result.length] = {html: $('#priSelect').html()}; } - else if(config.name == 'title') + else if(col.name == 'assignedTo') { - const bugLink = $.createLink('bug', 'view', `bugID=${data.id}`); - $(element).html(`${data.title}`); + $('#userSelect .select-user').attr('name', `user[${row.data.id}]`); + + result[0] = null; + result[result.length] = {html: $('#userSelect').html()}; } - else if(config.name == 'status') + else if(col.name == 'estimate') { - $(element).html(`${statusList[data.status]}`); + $('#numInput .input-num').attr('name', `estimate[${row.data.id}]`); + + result[0] = null; + result[result.length] = {html: $('#numInput').html()}; + } + else if(col.name == 'estStarted' || col.name == 'deadline') + { + $('#dateInput .input-date').attr('name', `${col.name}[${row.data.id}]`); + + result[0] = null; + result[result.length] = {html: $('#dateInput').html()}; + } + + return result; +} + + +/** + * 设置优先级,指派给和截止日期的默认值。 + * Set defaults for pri, assign and deadline. + */ +const today = zui.formatDate(new Date(), 'yyyy-MM-dd'); +window.onRenderRow = function({row}) +{ + $(`.dtable-row[data-id="${row.id}"]`).find('.select-pri').val(row.data.pri); + $(`.dtable-row[data-id="${row.id}"]`).find('.select-user').val(row.data.assignedTo); + + if(row.data.deadline > executionBegin && row.data.deadline > today) + { + $(`.dtable-row[data-id="${row.id}"]`).find('input[name^=deadline]').val(row.data.deadline); } } -window.importBug = function() +$(document).off('click', '.import-bug-btn').on('click', '.import-bug-btn', function() { + const dtable = zui.DTable.query($(this).target); + const checkedList = dtable.$.getChecks(); + if(!checkedList.length) return false; + const formData = new FormData($("#importForm")[0]); + checkedList.forEach((id) => formData.append(`id[${id}]`, id)); + $.ajaxSubmit({url: $('#importForm').attr('action'), data: formData}); -} + return false; +}); diff --git a/module/execution/ui/importbug.html.php b/module/execution/ui/importbug.html.php index a07cbcce71..0c61429340 100644 --- a/module/execution/ui/importbug.html.php +++ b/module/execution/ui/importbug.html.php @@ -15,111 +15,98 @@ namespace zin; featureBar ( set::current('all'), - set::linkParams("toExecution={$execution->id}"), + set::linkParams("executionID={$execution->id}"), li ( searchToggle(set::module('bug')) ) ); -jsVar('statusList', $lang->bug->statusList); -formBatchPanel +formBase ( - set::mode('edit'), setID('importForm'), - set::data(array_values($bugs)), - set::onRenderRowCol(jsRaw('window.handleImportBug')), - formBatchItem - ( - set::name('id'), - set::label(''), - set::control('checkbox'), - set::width('20px'), - ), - formBatchItem - ( - set::name('id'), - set::label('ID'), - set::control('index'), - set::width('60px'), - ), - formBatchItem - ( - set::name('severity'), - set::label($lang->bug->abbr->severity), - set::control('static'), - set::width('48px'), - ), - formBatchItem - ( - set::name('title'), - set::label($lang->bug->title), - set::control('static'), - ), - formBatchItem - ( - set::name('status'), - set::label($lang->bug->status), - set::control('static'), - set::width('80px') - ), - formBatchItem - ( - set::name('pri'), - set::label($lang->execution->pri), - set::control('select'), - set::required(in_array('pri', $requiredFields)), - set::width('68px'), - set::value('3'), - set::items($lang->bug->priList), - ), - formBatchItem - ( - set::name('assignedTo'), - set::label($lang->task->assignedTo), - set::control('picker'), - set::required(in_array('assignedTo', $requiredFields)), - set::width('108px'), - set::items($users), - ), - formBatchItem - ( - set::name('estimate'), - set::label($lang->task->estimate), - set::control('number'), - set::required(in_array('estimate', $requiredFields)), - set::width('64px'), - ), - formBatchItem - ( - set::name('estStarted'), - set::label($lang->task->estStarted), - set::control('date'), - set::required(in_array('estStarted', $requiredFields)), - set::width('110px'), - ), - formBatchItem - ( - set::name('deadline'), - set::label($lang->task->deadline), - set::control('date'), - set::required(in_array('deadline', $requiredFields)), - set::width('110px'), - ), + set::action(createLink('execution', 'importBug', "executionID={$execution->id}&browseType={$browseType}¶m={$param}")), set::actions(array()), - set::footerActions(array( - array( - 'text' => $lang->import, - 'icon' => 'import', - 'class' => 'btn secondary toolbar-item batch-btn size-sm', - 'onClick' => 'window.importBug()' - ), - array( - 'text' => $lang->goback, - 'class' => 'btn toolbar-item size-sm text-gray ml-2', - 'url' => createLink('execution', 'task', "executionID={$execution->id}") + dtable + ( + set::userMap($users), + set::cols($config->execution->importBug->dtable->fieldList), + set::data($bugs), + set::checkable(true), + set::showToolbarOnChecked(false), + set::onRenderCell(jsRaw('window.handleImportBug')), + set::onRenderRow(jsRaw('window.onRenderRow')), + set::footToolbar(array( + 'items' => array( + array( + 'text' => $lang->import, + 'class' => 'btn secondary import-bug-btn size-sm', + ), + array( + 'text' => $lang->goback, + 'class' => 'btn size-sm text-gray', + 'url' => createLink('execution', 'task', "executionID={$execution->id}") + ) + ) + )), + set::footPager( + usePager(), + set::recPerPage($recPerPage), + set::recTotal($recTotal), + set::linkCreator(helper::createLink('execution', 'importBug', "executionID={$execution->id}&browseType={$browseType}¶m=$param&recTotal={$pager->recTotal}&recPerPage={recPerPage}&page={page}")) ) - )), + ) +); + +jsVar('executionBegin', $execution->begin); +div +( + setClass('hidden'), + setID('priSelect'), + select + ( + setClass('select-pri w-12'), + set::name('pri[]'), + set::items($lang->task->priList), + set::value(3) + ) +); + +div +( + setClass('hidden'), + setID('userSelect'), + select + ( + setClass('select-user w-24'), + set::name('assignedTo[]'), + set::items($users) + ) +); + +div +( + setClass('hidden'), + setID('numInput'), + control + ( + set::type('number'), + set::min('0'), + setClass('input-num w-12'), + set::name('estimate[]'), + ) +); + +div +( + setClass('hidden'), + setID('dateInput'), + control + ( + set::type('date'), + setClass('input-date w-26'), + set::name('deadline[]'), + ) ); render();