diff --git a/module/pivot/js/common.js b/module/pivot/js/common.js
index 7e94ca686a..7a2bee750c 100644
--- a/module/pivot/js/common.js
+++ b/module/pivot/js/common.js
@@ -139,10 +139,16 @@ function checkFormSetting()
*/
function validate(showError = false)
{
- var pivot = DataStorage.pivot;
+ var pivot = DataStorage.pivot;
var formSettings = pivot.settings;
- /* Code for temporary */
- var isReady = true;
+ var isReady = true;
+ var firstErrDom = null;
+
+ if("summary" in formSettings && formSettings.summary == 'notuse')
+ {
+ if(isReady) $('#datagrid-tip').addClass('hidden');
+ return true;
+ }
/* check group settings. */
var exist = false;
@@ -164,6 +170,8 @@ function validate(showError = false)
var error = '
' + moreThanOneLang + '
';
tr.find('#group1').addClass('has-error');
tr.find('#group1').next().after(error);
+
+ firstErrDom = tr.find('#group1').parents('tr');
}
}
@@ -183,7 +191,9 @@ function validate(showError = false)
{
var error = '' + notemptyLang.replace('%s', pivotLang.step2.columnField) + '
';
$column.find('#column').addClass('has-error');
- $column.find('#column').next().after(error);
+ $column.find('#column').parent().after(error);
+
+ if(!firstErrDom) firstErrDom = $column.find('#column').parents('.column');
}
}
@@ -195,11 +205,14 @@ function validate(showError = false)
var error = '' + notemptyLang.replace('%s', pivotLang.step2.calcMode) + '
';
$column.find('#stat').addClass('has-error');
$column.find('#stat').next().after(error);
+
+ if(!firstErrDom) firstErrDom = $column.find('#stat').parents('.column');
}
}
});
if(isReady) $('#datagrid-tip').addClass('hidden');
+ if(!isReady && firstErrDom) firstErrDom[0].scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' })
return isReady;
}
@@ -436,7 +449,7 @@ function setDateField(query)
var target = $(query).parents('table, #queryFilters, #filterItems,#filterForm').find('[data-index="' + $period.attr('data-index') + '"]').find('#default:visible');
if(target.length)
{
- target.val($(this).attr('href').replace('#', '$'));
+ target.val($(this).attr('href').replace('#', '$')).trigger('change');
$period.hide();
}
event.stopPropagation();
@@ -447,6 +460,10 @@ function setDateField(query)
if(query == '.form-date') $(query).datepicker();
if(query == '.form-datetime') $(query).datetimepicker();
+ var dateVal = $(query).val();
+ $(query).val('').datetimepicker('update').trigger('mousedown');
+ $(query).val(dateVal);
+
$(query).on('show', function(e)
{
var $e = $(e.target);
diff --git a/module/pivot/model.php b/module/pivot/model.php
index 45af99265c..4552ece83e 100644
--- a/module/pivot/model.php
+++ b/module/pivot/model.php
@@ -1377,6 +1377,98 @@ class pivotModel extends model
return array($data, $configs);
}
+ /**
+ * Gen sheet by origin sql.
+ *
+ * @param array $fields
+ * @param array $settings
+ * @param string $sql
+ * @param array $filters
+ * @param array $langs
+ * @access public
+ * @return string
+ */
+ public function genOriginSheet($fields, $settings, $sql, $filters, $langs = array())
+ {
+ $sql = $this->initVarFilter($filters, $sql);
+
+ /* Process rows. */
+ $connectSQL = '';
+ if(!empty($filters) && !isset($filters[0]['from']))
+ {
+ $wheres = array();
+ foreach($filters as $field => $filter)
+ {
+ $wheres[] = "tt.`$field` {$filter['operator']} {$filter['value']}";
+ }
+
+ $whereStr = implode(' and ', $wheres);
+ $connectSQL .= " where $whereStr";
+ }
+
+ $this->app->loadClass('sqlparser', true);
+ $parser = new sqlparser($sql);
+ $statement = $parser->statements[0];
+ if(!$statement->limit)
+ {
+ $statement->limit = new stdclass();
+ $statement->limit->offset = 0;
+ $statement->limit->rowCount = 99999999;
+ }
+ $sql = $statement->build();
+
+ $columnSQL = "select * from ($sql) tt" . $connectSQL;
+ $rows = $this->dao->query($columnSQL)->fetchAll();
+ $rows = json_decode(json_encode($rows), true);
+
+ $cols = array();
+ $clientLang = $this->app->getClientLang();
+ /* Build cols. */
+ foreach($fields as $field)
+ {
+ $key = $field['field'];
+
+ $col = new stdclass();
+ $col->name = $key;
+ $col->isGroup = true;
+
+ $fieldObject = $field['object'];
+ $relatedField = $field['field'];
+
+ $colLabel = $key;
+ if($fieldObject)
+ {
+ $this->app->loadLang($fieldObject);
+ if(isset($this->lang->$fieldObject->$relatedField)) $colLabel = $this->lang->$fieldObject->$relatedField;
+ }
+
+ if(isset($langs[$key]) and !empty($langs[$key][$clientLang])) $colLabel = $langs[$key][$clientLang];
+ $col->label = $colLabel;
+
+ $cols[0][] = $col;
+ }
+
+ $fieldOptions = $this->getFieldsOptions($fields, $sql);
+ foreach($rows as $key => $row)
+ {
+ foreach($row as $field => $value)
+ {
+ $optionList = isset($fieldOptions[$field]) ? $fieldOptions[$field] : array();
+ $row[$field] = isset($optionList[$value]) ? $optionList[$value] : $value;
+ }
+
+ $rows[$key] = $row;
+ }
+
+ $data = new stdclass();
+ $data->cols = $cols;
+ $data->array = $rows;
+
+ $configs = array_fill(0, count($rows), array_fill(0, count($fields), 1));
+
+ return array($data, $configs);
+ }
+
/**
* 初始化分组信息。
* Init groups info.
diff --git a/module/pivot/zen.php b/module/pivot/zen.php
index c19f8ce784..05079f4eaa 100644
--- a/module/pivot/zen.php
+++ b/module/pivot/zen.php
@@ -166,7 +166,14 @@ class pivotZen extends pivot
$fields = json_decode(json_encode($pivot->fieldSettings), true);
$langs = json_decode($pivot->langs, true) ?? array();
- list($data, $configs) = $this->pivot->genSheet($fields, $pivot->settings, $sql, $filterFormat, $langs);
+ if(isset($pivot->settings['summary']) and $pivot->settings['summary'] =='notuse')
+ {
+ list($data, $configs) = $this->pivot->genOriginSheet($fields, $pivot->settings, $sql, $filterFormat, $langs);
+ }
+ else
+ {
+ list($data, $configs) = $this->pivot->genSheet($fields, $pivot->settings, $sql, $filterFormat, $langs);
+ }
$this->view->pivotName = $pivot->name;
$this->view->currentMenu = $groupID . '_' . $pivot->id;