|
@@ -410,7 +410,7 @@ JpcFlowTabSrv.prototype.createNew = function(){
|
|
|
let chkFontHeight = 12;
|
|
|
if (font) {
|
|
|
chkFontName = font[JV.FONT_PROPS[0]];
|
|
|
- chkFontHeight = font[JV.FONT_PROPS[JV.FONT_PROP_IDX_HEIGHT]];
|
|
|
+ chkFontHeight = parseFloat(font[JV.FONT_PROPS[JV.FONT_PROP_IDX_HEIGHT]]);
|
|
|
}
|
|
|
let hasSplitStr = false, splitStrArr = [];
|
|
|
let accAmt = 0;
|
|
@@ -425,6 +425,20 @@ JpcFlowTabSrv.prototype.createNew = function(){
|
|
|
}
|
|
|
}
|
|
|
if (accAmt > rst) rst = accAmt;
|
|
|
+ if (rst > 3) {
|
|
|
+ // 新优化,计算实际能显示完的真正行数
|
|
|
+ const rowHeight = JpcFlowTabHelper.getRowHeight(bands, rptTpl, me.isEx);
|
|
|
+ let tmpFV = ((chkFontHeight + JV.CLOSE_OUTPUT_ROW_BUFFER) * rst) / rowHeight;
|
|
|
+ let tmpAmt = Math.floor(tmpFV);
|
|
|
+ // tmpAmt += Math.ceil((tmpFV - tmpAmt) / 0.5);
|
|
|
+ // if (tmpFV - tmpAmt >= 0.5 && rst > 6) {
|
|
|
+ // tmpAmt++;
|
|
|
+ // }
|
|
|
+ if (Math.ceil(tmpFV) > tmpAmt) {
|
|
|
+ tmpAmt++;
|
|
|
+ }
|
|
|
+ rst = tmpAmt;
|
|
|
+ }
|
|
|
// if (hasSplitStr && outputType !== JV.OUTPUT_TYPE_EXCEL) {
|
|
|
if (hasSplitStr) {
|
|
|
let newValArr = [];
|
|
@@ -1300,11 +1314,51 @@ JpcFlowTabSrv.prototype.createNew = function(){
|
|
|
if (showText) {
|
|
|
textArr = textArr.concat(showText.split('|'));
|
|
|
}
|
|
|
+ /*
|
|
|
if (contentValInfo[3] < textArr.length && contentValInfo[3] >= 0) {
|
|
|
showText = textArr[contentValInfo[3]];
|
|
|
} else {
|
|
|
showText = '';
|
|
|
}
|
|
|
+ /*/
|
|
|
+ // 因新逻辑要优化自动行高,不再是一个折行占用1row,而是:
|
|
|
+ // a. 根据实际情况,设置了一个实际的行数值(比如共有10行,根据行高情况,可能只设置了6行的高度,在setupAutoHeightData方法里处理)
|
|
|
+ // b. 这里最大的难题在于跨页分配(预估会有来回调整,目前采用按比例分配原则)
|
|
|
+ // c. 还有个问题就是多个自动行高指标的问题
|
|
|
+ const ACT_ROWS = contentValInfo[4]; //经实际计算,能容纳所有数据的实际行数
|
|
|
+ const CURRENT_ROW = contentValInfo[3]; //从0开始
|
|
|
+ const QUOTA_Rate = textArr.length / ACT_ROWS; //每行显示的加权系数(超过2的话,表示给的行高太多了,需要另外一些特殊处理,后期有需要再加)
|
|
|
+ if (textArr.length <= 3 || ACT_ROWS > textArr.length) {
|
|
|
+ //表示这个一定是附属的autoheight指标,或者数据就只有3行(假如数据3行精简成2行,但刚好处于分页状态,那么无论是前一页或后一页,显示上都很纠结(多出来的一行放哪好?),所以新逻辑的起点要3行以上,少了就不折腾了,老老实实地一个萝卜一个坑)
|
|
|
+ if (CURRENT_ROW < textArr.length && CURRENT_ROW >= 0) {
|
|
|
+ showText = textArr[CURRENT_ROW];
|
|
|
+ } else {
|
|
|
+ showText = '';
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //这里不管是不是附属autoheight指标,有足够的条件单独处理
|
|
|
+ if (QUOTA_Rate >= 2) {
|
|
|
+ //压缩超过一半空间的话,说明给的行高度太高了,需要另外一些特殊处理,后期有需要再加
|
|
|
+ } else {
|
|
|
+ //正常的压缩比例
|
|
|
+ let startIdx = 0, endIdx = 0;
|
|
|
+ if (CURRENT_ROW > 0) {
|
|
|
+ endIdx = Math.round((CURRENT_ROW + 1) * QUOTA_Rate) - 1;
|
|
|
+ let preEndIdx = 0;
|
|
|
+ if (CURRENT_ROW > 1) {
|
|
|
+ //重定位 preEndIdx
|
|
|
+ preEndIdx = Math.round(CURRENT_ROW * QUOTA_Rate) - 1;
|
|
|
+ }
|
|
|
+ startIdx = preEndIdx + 1;
|
|
|
+ }
|
|
|
+ //按比例分配
|
|
|
+ showText = textArr[startIdx];
|
|
|
+ for (let idx = startIdx + 1; idx <= endIdx; idx++) {
|
|
|
+ showText += `|${textArr[idx]}`;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //*/
|
|
|
let rst = JpcCommonOutputHelper.createCommonOutput(tab_field, showText, controls);
|
|
|
rst[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, rows, rowIdx, cols, colIdx, me.multiCols, multiColIdx, true, false);
|
|
|
rst[JV.PROP_IS_AUTO_HEIGHT] = true;
|