* Code for showimport view.
This commit is contained in:
+11
-2
@@ -131,14 +131,23 @@ class port extends control
|
||||
$this->display();
|
||||
}
|
||||
|
||||
public function ajaxGetTbody($model = '', $pagerID)
|
||||
/**
|
||||
* Ajax get Tbody .
|
||||
*
|
||||
* @param string $model
|
||||
* @param int $pagerID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function ajaxGetTbody($model = '', $lastID = 0, $pagerID = 1)
|
||||
{
|
||||
$this->loadModel($model);
|
||||
$importFields = $this->config->$model->templateFields;
|
||||
$fields = $this->port->initFieldList($model, $importFields, false);
|
||||
$formatDatas = $this->port->format($model);
|
||||
$datas = $this->port->getPageDatas($formatDatas, $pagerID);
|
||||
$html = $this->port->buildNextList($datas->datas, $fields);
|
||||
|
||||
$html = $this->port->buildNextList($datas->datas, $lastID, $fields, $pagerID);
|
||||
die($html);
|
||||
}
|
||||
|
||||
|
||||
+27
-7
@@ -1304,21 +1304,30 @@ class portModel extends model
|
||||
}
|
||||
|
||||
/**
|
||||
* buildNextList
|
||||
* Build NextList.
|
||||
*
|
||||
* @param array $list
|
||||
* @param int $lastID
|
||||
* @param string $fields
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function buildNextList($list = array(), $fields = '')
|
||||
public function buildNextList($list = array(), $lastID = 0, $fields = '', $pagerID = 1)
|
||||
{
|
||||
$html = '';
|
||||
$key = key($list);
|
||||
$showImportCount = $this->config->port->showImportCount;
|
||||
$lastRow = $lastID + $key + $showImportCount;
|
||||
|
||||
foreach($list as $row => $object)
|
||||
{
|
||||
if($row <= $lastID) continue;
|
||||
if($row > $lastRow) break;
|
||||
|
||||
$tmpList[$row] = $object;
|
||||
$trClass = '';
|
||||
if(!isset($list[$row+1])) $trClass = 'showmore';
|
||||
$html .= "<tr class='text-top $trClass'>";
|
||||
if($row == $lastRow) $trClass = 'showmore';
|
||||
$html .= "<tr class='text-top $trClass' data-id=$row>";
|
||||
$html .= '<td>';
|
||||
$html .= $object->id;
|
||||
$html .= html::hidden("id[$row]", $object->id);
|
||||
@@ -1331,9 +1340,16 @@ class portModel extends model
|
||||
$name = "{$field}[$row]";
|
||||
$selected = !empty($object->$field) ? $object->$field : '';
|
||||
|
||||
if($control == 'select') $html .= '<td>' . html::select("$name", $values, $selected, "class='form-control picker-select' data-field='{$field}'") . '</td>';
|
||||
$options = array();
|
||||
if($control == 'select' or $control == 'multiple')
|
||||
{
|
||||
if(!empty($values[$selected])) $options = array($selected => $values[$selected]);
|
||||
if(!empty($values[$selected]) and isset($values[0])) $options = array_slice($values, 0, 1);
|
||||
}
|
||||
|
||||
elseif($control == 'multiple') $html .= '<td>' . html::select("{$name}[]", $values, $selected, "multiple class='form-control picker-select'") . '</td>';
|
||||
if($control == 'select') $html .= '<td>' . html::select("$name", $options, $selected, "class='form-control picker-select nopicker' data-field='{$field}'") . '</td>';
|
||||
|
||||
elseif($control == 'multiple') $html .= '<td>' . html::select($name . "[]", $options, $selected, "multiple class='form-control picker-select nopicker' data-field='{$field}'") . '</td>';
|
||||
|
||||
elseif($control == 'date') $html .= '<td>' . html::input("$name", $selected, "class='form-control form-date autocomplete='off'") . '</td>';
|
||||
|
||||
@@ -1343,7 +1359,11 @@ class portModel extends model
|
||||
|
||||
elseif($control == 'textarea') $html .= '<td>' . html::textarea("$name", $selected, "class='form-control' cols='50' rows='1'") . '</td>';
|
||||
|
||||
elseif($field == 'stepDesc' or $field == 'stepExpect') $html .= '<td>' . $this->process4Testcase($field, $list, $row) . '</td>';
|
||||
elseif($field == 'stepDesc' or $field == 'stepExpect')
|
||||
{
|
||||
$stepDesc = $this->process4Testcase($field, $tmpList, $row);
|
||||
if($stepDesc) $html .= '<td>' . $stepDesc . '</td>';
|
||||
}
|
||||
|
||||
else $html .= '<td>' . html::input("$name", $selected, "class='form-control autocomplete='off'") . '</td>';
|
||||
}
|
||||
|
||||
@@ -2497,4 +2497,97 @@ class testcaseModel extends model
|
||||
|
||||
return $menu;
|
||||
}
|
||||
|
||||
/**
|
||||
* processDatas
|
||||
*
|
||||
* @param int $datas
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function processDatas($datas)
|
||||
{
|
||||
if(isset($datas->datas)) $datas = $datas->datas;
|
||||
$columnKey = array();
|
||||
$caseData = array();
|
||||
$stepData = array();
|
||||
$stepVars = 0;
|
||||
|
||||
foreach($datas as $row => $cellValue)
|
||||
{
|
||||
foreach($cellValue as $field => $value)
|
||||
{
|
||||
if($field != 'stepDesc' and $field != 'stepExpect') continue;
|
||||
if($field == 'stepDesc' or $field == 'stepExpect')
|
||||
{
|
||||
$steps = $value;
|
||||
if(strpos($value, "\n"))
|
||||
{
|
||||
$steps = explode("\n", $value);
|
||||
}
|
||||
elseif(strpos($value, "\r"))
|
||||
{
|
||||
$steps = explode("\r", $value);
|
||||
}
|
||||
if(is_string($steps)) $steps = explode("\n", $steps);
|
||||
|
||||
$stepKey = str_replace('step', '', strtolower($field));
|
||||
|
||||
$caseStep = array();
|
||||
foreach($steps as $step)
|
||||
{
|
||||
$trimedStep = trim($step);
|
||||
if(empty($trimedStep)) continue;
|
||||
if(preg_match('/^(([0-9]+)\.[0-9]+)([.、]{1})/U', $step, $out) and ($field == 'stepDesc' or ($field == 'stepExpect' and isset($stepData[$row]['desc'][$out[1]]))))
|
||||
{
|
||||
$num = $out[1];
|
||||
$parent = $out[2];
|
||||
$sign = $out[3];
|
||||
$signbit = $sign == '.' ? 1 : 3;
|
||||
$step = trim(substr($step, strlen($num) + $signbit));
|
||||
if(!empty($step)) $caseStep[$num]['content'] = $step;
|
||||
$caseStep[$num]['type'] = 'item';
|
||||
$caseStep[$parent]['type'] = 'group';
|
||||
}
|
||||
elseif(preg_match('/^([0-9]+)([.、]{1})/U', $step, $out) and ($field == 'stepDesc' or ($field == 'stepExpect' and isset($stepData[$row]['desc'][$out[1]]))))
|
||||
{
|
||||
$num = $out[1];
|
||||
$sign = $out[2];
|
||||
$signbit = $sign == '.' ? 1 : 3;
|
||||
$step = trim(substr($step, strpos($step, $sign) + $signbit));
|
||||
if(!empty($step)) $caseStep[$num]['content'] = $step;
|
||||
$caseStep[$num]['type'] = 'step';
|
||||
}
|
||||
elseif(isset($num))
|
||||
{
|
||||
if(!isset($caseStep[$num]['content'])) $caseStep[$num]['content'] = '';
|
||||
if(!isset($caseStep[$num]['type'])) $caseStep[$num]['type'] = 'step';
|
||||
$caseStep[$num]['content'] .= "\n" . $step;
|
||||
}
|
||||
else
|
||||
{
|
||||
if($field == 'stepDesc')
|
||||
{
|
||||
$num = 1;
|
||||
$caseStep[$num]['content'] = $step;
|
||||
$caseStep[$num]['type'] = 'step';
|
||||
}
|
||||
if($field == 'stepExpect' and isset($stepData[$row]['desc']))
|
||||
{
|
||||
end($stepData[$row]['desc']);
|
||||
$num = key($stepData[$row]['desc']); $caseStep[$num]['content'] = $step;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unset($num);
|
||||
unset($sign);
|
||||
$stepVars += count($caseStep, COUNT_RECURSIVE) - count($caseStep);
|
||||
$stepData[$row][$stepKey] = $caseStep;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return $stepData;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,6 +49,7 @@ $(function()
|
||||
</script>
|
||||
<?php else:?>
|
||||
<?php js::set('requiredFields', $requiredFields);?>
|
||||
<?php js::set('allCount', $allCount);?>
|
||||
<div id="mainContent" class="main-content">
|
||||
<div class="main-header clearfix">
|
||||
<h2><?php echo $lang->task->import;?></h2>
|
||||
@@ -99,7 +100,8 @@ $(function()
|
||||
$hasMultiple = false;
|
||||
?>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
|
||||
<tfoot class='hidden'>
|
||||
<tr>
|
||||
<td colspan='10' class='text-center form-actions'>
|
||||
<?php
|
||||
@@ -128,12 +130,18 @@ $(function()
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<script>
|
||||
$.ajaxSetup({async: false});
|
||||
|
||||
$.get(createLink('port', 'ajaxGetTbody','model=<?php echo $model;?>&lastID=0&pagerID=<?php echo $pagerID;?>'), function(data)
|
||||
{
|
||||
$('#showData > tbody').append(data);
|
||||
if($('#showData tbody').find('tr').hasClass('showmore') === false) $('#showData tfoot').removeClass('hidden');
|
||||
$('#showData tbody').find('.picker-select').picker({chosenMode: true});
|
||||
})
|
||||
|
||||
window.addEventListener('scroll', this.handleScroll);
|
||||
function handleScroll(e)
|
||||
{
|
||||
var relative = 200; // 相对距离
|
||||
var relative = 500; // 相对距离
|
||||
$('tr.showmore').each(function()
|
||||
{
|
||||
var $showmore = $(this);
|
||||
@@ -142,7 +150,7 @@ function handleScroll(e)
|
||||
|
||||
if(getScrollTop() + getWindowHeight() >= offsetTop - relative)
|
||||
{
|
||||
throttle(loadData($showmore), 150)
|
||||
throttle(loadData($showmore), 250)
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -150,10 +158,13 @@ function handleScroll(e)
|
||||
function loadData($showmore)
|
||||
{
|
||||
$showmore.removeClass('showmore');
|
||||
|
||||
$.get(createLink('port', 'ajaxGetTbody','model=<?php echo $model;?>&pagerID=<?php echo $pagerID;?>'), function(data)
|
||||
var lastID = $showmore.attr('data-id');
|
||||
var url = createLink('port', 'ajaxGetTbody','model=<?php echo $model;?>&lastID=' + lastID + '&pagerID=<?php echo $pagerID;?>');
|
||||
$.get(url, function(data)
|
||||
{
|
||||
$showmore.after(data);
|
||||
if($('#showData tbody').find('tr').hasClass('showmore') === false) $('#showData tfoot').removeClass('hidden');
|
||||
$('#showData tbody').find('.picker-select.nopicker').picker({chosenMode: true}).removeClass('nopicker');
|
||||
})
|
||||
}
|
||||
|
||||
@@ -197,11 +208,6 @@ function getWindowHeight()
|
||||
return document.compatMode == "CSS1Compat" ? windowHeight = document.documentElement.clientHeight : windowHeight = document.body.clientHeight
|
||||
}
|
||||
|
||||
$.get(createLink('port', 'ajaxGetTbody','model=<?php echo $model;?>&pagerID=<?php echo $pagerID;?>'), function(data)
|
||||
{
|
||||
$('#showData > tbody').append(data);
|
||||
})
|
||||
|
||||
$('#showData').on('mouseenter', '.picker', function(e){
|
||||
var myPicker = $(this);
|
||||
var field = myPicker.prev().attr('data-field');
|
||||
@@ -211,12 +217,15 @@ $('#showData').on('mouseenter', '.picker', function(e){
|
||||
var value = myPicker.prev().val();
|
||||
|
||||
if($('#' + id).attr('isInit')) return;
|
||||
|
||||
$.ajaxSettings.async = false;
|
||||
$.get(createLink('port', 'ajaxGetOptions', 'model=<?php echo $model;?>&field=' + field + '&value=' + value + '&index=' + index), function(data)
|
||||
{
|
||||
$('#' + id).parent().html(data);
|
||||
$('#' + id).picker({chosenMode: true});
|
||||
$('#' + id).attr('isInit', true);
|
||||
});
|
||||
$.ajaxSettings.async = true;
|
||||
})
|
||||
|
||||
$(function()
|
||||
|
||||
Reference in New Issue
Block a user