113 lines
3.5 KiB
JavaScript
113 lines
3.5 KiB
JavaScript
window.pivotID = typeof(pivotID) != 'undefined' ? pivotID : 0;
|
|
window.clickCell = function(col, {colName, rowInfo})
|
|
{
|
|
const drillConditions = rowInfo.data.conditions[colName];
|
|
const isDrill = rowInfo.data.isDrill[colName];
|
|
const version = rowInfo.data.version;
|
|
const status = rowInfo.data.status;
|
|
let value = rowInfo.data[colName];
|
|
|
|
if(!isDrill || rowInfo.data.field0_colspan) return false;
|
|
|
|
let conditions = [];
|
|
let filterValues = [];
|
|
let originField = '0';
|
|
let id = window.pivotID;
|
|
|
|
if(Array.isArray(value)) value = value[0];
|
|
value = (value + '').replace('%', '');
|
|
|
|
if(Array.isArray(drillConditions) && drillConditions.length)
|
|
{
|
|
[originField, conditions] = drillConditions;
|
|
filterValues = getFilterValues();
|
|
conditions = conditions.map(condition => condition.value);
|
|
}
|
|
conditions = latin1ToBase64(JSON.stringify(conditions))
|
|
filterValues = latin1ToBase64(JSON.stringify(filterValues))
|
|
|
|
let drillModalLink = $.createLink('pivot', 'drillModal', `pivotID=${id}&version=${version}&colName=${originField}&status=${status}&conditions=${conditions}&filterValues=${filterValues}&value=${value}`);
|
|
drillModalLink = drillModalLink.replace(/\+/g, '%2B');
|
|
|
|
zui.Modal.open({url: drillModalLink, size: 'lg', key: 'drill'});
|
|
}
|
|
|
|
window.latin1ToBase64 = function(str)
|
|
{
|
|
const encoder = new TextEncoder();
|
|
const latin1Array = encoder.encode(str);
|
|
const latin1String = String.fromCharCode.apply(null, latin1Array);
|
|
return btoa(latin1String);
|
|
}
|
|
|
|
/**
|
|
* 获得筛选器表单数据。
|
|
* Get filter form data.
|
|
*
|
|
* @access public
|
|
* @return object
|
|
*/
|
|
window.getFilterValues = function(where)
|
|
{
|
|
let root = '';
|
|
if(where == 'versions')
|
|
{
|
|
root = $('#pivotVersionPanel').find('#conditions .filter');
|
|
}
|
|
else
|
|
{
|
|
root = $('#conditions .filter');
|
|
}
|
|
|
|
const filterValues = [];
|
|
root.each(function(index)
|
|
{
|
|
const $filter = $(this);
|
|
if ($filter.hasClass('filter-input'))
|
|
{
|
|
filterValues[index] = $filter.find('input').val();
|
|
}
|
|
else if($filter.hasClass('filter-select') || $filter.hasClass('filter-multipleselect'))
|
|
{
|
|
$filterPicker = $filter.find('.picker').zui('picker');
|
|
filterValues[index] = $filterPicker.$.value;
|
|
}
|
|
else if($filter.hasClass('filter-date') || $filter.hasClass('filter-datetime'))
|
|
{
|
|
const $pickValue = $filter.find('.pick-value');
|
|
if($pickValue.length == 1)
|
|
{
|
|
filterValues[index] = $pickValue.val();
|
|
}
|
|
else if($pickValue.length == 2)
|
|
{
|
|
filterValues[index] = {begin: $pickValue.eq(0).val(), end: $pickValue.eq(1).val()};
|
|
}
|
|
}
|
|
});
|
|
|
|
return filterValues;
|
|
}
|
|
|
|
/**
|
|
* 计算数据表格的高度。
|
|
* Calculate height of data table.
|
|
*
|
|
* @param int height
|
|
* @access public
|
|
* @return int
|
|
*/
|
|
window.getHeight = function(height = 800)
|
|
{
|
|
const windowHeight = $(window).height();
|
|
|
|
const $panelBody = $('#pivotPanel .panel-body');
|
|
const styles = $panelBody.length ? window.getComputedStyle($panelBody[0]) : null;
|
|
const paddingBottom = parseInt(styles?.paddingBottom ?? 0, 10);
|
|
|
|
const boundingRect = $panelBody.length ? $panelBody[0].getBoundingClientRect() : null;
|
|
const offsetTop = boundingRect?.y ?? 0;
|
|
|
|
return Math.min(windowHeight - offsetTop - paddingBottom * 2 - 10, height);
|
|
}
|