|
|
@@ -246,6 +246,7 @@ const JV = {
|
|
|
CONTROL_PROP_IDX_VERTICAL_EXCEL: 5,
|
|
|
CONTROL_PROP_IDX_SHRINK_FIRST: 6,
|
|
|
CONTROL_PROP_IDX_CLOSE_OUTPUT: 7,
|
|
|
+ CLOSE_OUTPUT_ROW_BUFFER: 4,
|
|
|
BORDER_STYLE_PROPS: ['LineWeight', 'DashStyle', 'Color'],
|
|
|
PROP_LINE_WEIGHT: 'LineWeight',
|
|
|
PROP_DASH_STYLE: 'DashStyle',
|
|
|
@@ -312,7 +313,7 @@ const JV = {
|
|
|
SIZE_LEGAL: [8.5, 14.0],
|
|
|
SIZE_16K: [7.75, 10.75],
|
|
|
SIZE_EXECUTIVE: [7.25, 10.5],
|
|
|
- OUTPUT_OFFSET: [2, 2, 1, 3],
|
|
|
+ OUTPUT_OFFSET: [1, 1, 1, 1],
|
|
|
OFFSET_IDX_LEFT: 0,
|
|
|
OFFSET_IDX_RIGHT: 1,
|
|
|
OFFSET_IDX_TOP: 2,
|
|
|
@@ -505,7 +506,8 @@ const JpcCommonHelper = {
|
|
|
//大于127为中文字
|
|
|
currentW = (strVal.charCodeAt(sIdx) > 127) ? chnW : otherW;
|
|
|
txtWidth += currentW;
|
|
|
- if (txtWidth > areaWidth) {
|
|
|
+ if (txtWidth > (areaWidth - 4)) {
|
|
|
+ //减4个像素是考虑到导出excel的情况
|
|
|
rst++;
|
|
|
txtWidth = currentW;
|
|
|
}
|
|
|
@@ -527,7 +529,8 @@ const JpcCommonHelper = {
|
|
|
for (let sIdx = 0; sIdx < strVal.length; sIdx++) {
|
|
|
currentW = (strVal.charCodeAt(sIdx) > 127) ? chnW : otherW;
|
|
|
txtWidth += currentW;
|
|
|
- if (txtWidth > areaWidth) {
|
|
|
+ if (txtWidth > (areaWidth - 4)) {
|
|
|
+ //减4个像素是考虑到导出excel的情况
|
|
|
if (preSIdx < sIdx) {
|
|
|
rst.push(strVal.substr(preSIdx, sIdx - preSIdx));
|
|
|
preSIdx = sIdx;
|
|
|
@@ -1655,7 +1658,7 @@ const isEmptyString = (str) => {
|
|
|
if (str === null || str === undefined) {
|
|
|
rst = true;
|
|
|
}
|
|
|
- else if (typeof str) {
|
|
|
+ else if (typeof str === 'string') {
|
|
|
let reg = /^\s*$/;
|
|
|
rst = reg.test(str);
|
|
|
}
|
|
|
@@ -1670,7 +1673,7 @@ const leftTrim = (str) => {
|
|
|
const rightTrim = (str) => {
|
|
|
return str.replace(/(\s*$)/g, "");
|
|
|
};
|
|
|
-const replaceAll = (targetStr, FindText, RepText) => {
|
|
|
+const replaceAll$1 = (targetStr, FindText, RepText) => {
|
|
|
let regExp = new RegExp(FindText, "gm");
|
|
|
return targetStr.replace(regExp, RepText);
|
|
|
};
|
|
|
@@ -1700,15 +1703,15 @@ const convertToCaptionNum = (num, isCurrency, isTraditionalCap) => {
|
|
|
intPartArr.push(capChars[parseInt(numSplitArr[0].charAt(idx))] + unitChars[len - idx - 1]);
|
|
|
}
|
|
|
rst = intPartArr.join('');
|
|
|
- rst = replaceAll(rst, capChars[0] + unitChars[3], capChars[0]); //零千 -> 零
|
|
|
- rst = replaceAll(rst, capChars[0] + unitChars[2], capChars[0]); //零百 -> 零
|
|
|
- rst = replaceAll(rst, capChars[0] + unitChars[1], capChars[0]); //零十 -> 零
|
|
|
+ rst = replaceAll$1(rst, capChars[0] + unitChars[3], capChars[0]); //零千 -> 零
|
|
|
+ rst = replaceAll$1(rst, capChars[0] + unitChars[2], capChars[0]); //零百 -> 零
|
|
|
+ rst = replaceAll$1(rst, capChars[0] + unitChars[1], capChars[0]); //零十 -> 零
|
|
|
//
|
|
|
- rst = replaceAll(replaceAll(rst, "零零", "零"), "零零", "零");
|
|
|
- rst = replaceAll(rst, capChars[0] + unitChars[8], unitChars[8]); //零亿 -> 亿
|
|
|
- rst = replaceAll(rst, capChars[0] + unitChars[4], unitChars[4]); //零万 -> 万
|
|
|
+ rst = replaceAll$1(replaceAll$1(rst, "零零", "零"), "零零", "零");
|
|
|
+ rst = replaceAll$1(rst, capChars[0] + unitChars[8], unitChars[8]); //零亿 -> 亿
|
|
|
+ rst = replaceAll$1(rst, capChars[0] + unitChars[4], unitChars[4]); //零万 -> 万
|
|
|
//
|
|
|
- rst = replaceAll(rst, unitChars[8] + unitChars[4], unitChars[8] + capChars[0]); //亿万 -> 亿零
|
|
|
+ rst = replaceAll$1(rst, unitChars[8] + unitChars[4], unitChars[8] + capChars[0]); //亿万 -> 亿零
|
|
|
if (num === 0) {
|
|
|
rst = "零";
|
|
|
}
|
|
|
@@ -1808,7 +1811,7 @@ var stringUtil = /*#__PURE__*/Object.freeze({
|
|
|
trim: trim,
|
|
|
leftTrim: leftTrim,
|
|
|
rightTrim: rightTrim,
|
|
|
- replaceAll: replaceAll,
|
|
|
+ replaceAll: replaceAll$1,
|
|
|
comdify: comdify$1,
|
|
|
convertToCaptionNum: convertToCaptionNum,
|
|
|
convertStrToBoolean: convertStrToBoolean,
|
|
|
@@ -2115,7 +2118,6 @@ const JE = {
|
|
|
}
|
|
|
},
|
|
|
removeFieldValue: function (field, dataObj, valIdx) {
|
|
|
- console.log('===================removeFieldValue');
|
|
|
if (field.DataNodeName === "NA") {
|
|
|
if (field.data_field.length > valIdx && valIdx >= 0) {
|
|
|
field.data_field.splice(valIdx, 1);
|
|
|
@@ -2128,8 +2130,9 @@ const JE = {
|
|
|
}
|
|
|
},
|
|
|
insertFieldValue: function (field, dataObj, valIdx, newValue) {
|
|
|
- console.log('===================insertFieldValue');
|
|
|
if (field.DataNodeName === "NA") {
|
|
|
+ if (!field.data_field)
|
|
|
+ field.data_field = [];
|
|
|
if (field.data_field.length > valIdx && valIdx >= 0) {
|
|
|
field.data_field.splice(valIdx, 0, newValue);
|
|
|
}
|
|
|
@@ -2145,6 +2148,35 @@ const JE = {
|
|
|
dataObj[field.DataNodeName][field.DataSeq][dataObj[field.DataNodeName][field.DataSeq].length] = newValue;
|
|
|
}
|
|
|
}
|
|
|
+ },
|
|
|
+ alignFieldDecimal: function (sourceID, destID, $CURRENT_RPT) {
|
|
|
+ // 把source指标的精度align到dest
|
|
|
+ const me = JE;
|
|
|
+ let sourceField = null;
|
|
|
+ if (isNaN(sourceID)) {
|
|
|
+ sourceField = sourceID;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ sourceField = me.F(sourceID, $CURRENT_RPT);
|
|
|
+ }
|
|
|
+ let destField;
|
|
|
+ if (isNaN(destID)) {
|
|
|
+ destField = destID;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ destField = me.F(destID, $CURRENT_RPT);
|
|
|
+ }
|
|
|
+ if (sourceField instanceof Object && sourceField && sourceField.Precision) {
|
|
|
+ destField.Precision = sourceField.Precision;
|
|
|
+ destField.fixedPrecisionNum = sourceField.fixedPrecisionNum;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ batchIniFields: function (IDArr, $CURRENT_RPT) {
|
|
|
+ // 批处理查找指标
|
|
|
+ const me = JE;
|
|
|
+ for (let idxF = 0; idxF < IDArr.length; idxF++) {
|
|
|
+ IDArr[idxF] = me.F(IDArr[idxF], $CURRENT_RPT);
|
|
|
+ }
|
|
|
}
|
|
|
};
|
|
|
|
|
|
@@ -2196,7 +2228,7 @@ let JpcFieldHelper = {
|
|
|
rst = true;
|
|
|
}
|
|
|
else if (map_field && tab_field.Format && tab_field.Format.indexOf("#") >= 0 && (customizeCfg && customizeCfg.fillZero)) {
|
|
|
- tab_field.Format = replaceAll(tab_field.Format, '#', '0');
|
|
|
+ tab_field.Format = replaceAll$1(tab_field.Format, '#', '0');
|
|
|
map_field.Format = tab_field.Format;
|
|
|
rst = true;
|
|
|
}
|
|
|
@@ -2226,7 +2258,17 @@ let JpcFieldHelper = {
|
|
|
if (showZero && showZero === 'F') {
|
|
|
const val = parseFloat(cell.Value);
|
|
|
if (val === 0) {
|
|
|
- cell.Value = '';
|
|
|
+ let chkRst = true;
|
|
|
+ if (typeof cell.Value === 'string' && cell.Value.length > 1) {
|
|
|
+ for (let idx = 0; idx < cell.Value.length; idx++) {
|
|
|
+ if (cell.Value[idx] !== '0' && cell.Value[idx] !== '.') {
|
|
|
+ chkRst = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (chkRst)
|
|
|
+ cell.Value = '';
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -2307,6 +2349,24 @@ let JpcFieldHelper = {
|
|
|
};
|
|
|
|
|
|
let JpcFlowTabHelper = {
|
|
|
+ getRowHeight: function (bands, rptTpl, isEx) {
|
|
|
+ let rst = 0;
|
|
|
+ (!isEx) ? JV.NODE_FLOW_INFO : JV.NODE_FLOW_INFO_EX;
|
|
|
+ let tab = rptTpl.流水式表_信息.流水式表_数据;
|
|
|
+ let band = bands[tab.BandName];
|
|
|
+ if (band) {
|
|
|
+ let maxFieldMeasure = 1.0;
|
|
|
+ if (JV.CAL_TYPE_ABSTRACT === JpcCommonHelper.getPosCalculationType(tab.CalculationType)) {
|
|
|
+ let unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
|
|
|
+ maxFieldMeasure = 1.0 * rptTpl.流水式表_信息.流水式表_数据.CommonHeight * unitFactor;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ maxFieldMeasure = (band.Bottom - band.Top) * rptTpl.流水式表_信息.流水式表_数据.CommonHeight / JV.HUNDRED_PERCENT;
|
|
|
+ }
|
|
|
+ rst = maxFieldMeasure;
|
|
|
+ }
|
|
|
+ return rst;
|
|
|
+ },
|
|
|
getMaxRowsPerPage: function (bands, rptTpl, isEx) {
|
|
|
let rst = 1;
|
|
|
let tab;
|
|
|
@@ -3215,8 +3275,336 @@ const fontWidthMap = {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+let FData = {};
|
|
|
+let PData = {};
|
|
|
+let DData = {};
|
|
|
+let rpt = {};
|
|
|
+let orgData = {};
|
|
|
+const setupData = ($CURRENT_RPT, $CURRENT_DATA) => {
|
|
|
+ rpt = $CURRENT_RPT;
|
|
|
+ orgData = $CURRENT_DATA;
|
|
|
+};
|
|
|
+const resetData = () => {
|
|
|
+ DData = {};
|
|
|
+ FData = {};
|
|
|
+ PData = {};
|
|
|
+};
|
|
|
+const getFieldValueArray = (field) => {
|
|
|
+ let rst;
|
|
|
+ if (field.DataNodeName === exports.IDataObjProps.NA) {
|
|
|
+ if (!field.data_field) {
|
|
|
+ field.data_field = [];
|
|
|
+ }
|
|
|
+ rst = field.data_field;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ if (!field.DataNodeName) {
|
|
|
+ console.log('进来了特殊情况');
|
|
|
+ // that means this is a self-defined discrete field!
|
|
|
+ field.DataNodeName = exports.IDataObjProps.discrete_data;
|
|
|
+ // field.DataSeq = dataObj[IDataObjProps.discrete_data];
|
|
|
+ orgData[exports.IDataObjProps.discrete_data].push([]);
|
|
|
+ }
|
|
|
+ rst = orgData[field.DataNodeName][field.DataSeq];
|
|
|
+ }
|
|
|
+ if (rst === null || rst === undefined)
|
|
|
+ rst = [];
|
|
|
+ return rst;
|
|
|
+};
|
|
|
+//获取一般指标的指标对象($CURRENT_RPT.fields中的对象)
|
|
|
+const F = (fieldID) => {
|
|
|
+ if (FData[fieldID]) {
|
|
|
+ return FData[fieldID];
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ for (const dataSet in rpt.fields) {
|
|
|
+ for (const field in rpt.fields[dataSet]) {
|
|
|
+ const newFieldID = field.replace('ID_', '');
|
|
|
+ if (newFieldID === `${fieldID}`) {
|
|
|
+ FData[fieldID] = rpt.fields[dataSet][field];
|
|
|
+ DData[fieldID] = getFieldValueArray(rpt.fields[dataSet][field]);
|
|
|
+ return FData[fieldID];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+};
|
|
|
+// 获取离散指标的指标对象($CURRENT_RPT.params中的对象,一般是打印页,总页数,当前页数)
|
|
|
+const P = (fieldID) => {
|
|
|
+ if (PData[fieldID]) {
|
|
|
+ return PData[fieldID];
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ for (const field in rpt.params) {
|
|
|
+ const fieldID = field.replace('ID_', '');
|
|
|
+ if (fieldID === fieldID) {
|
|
|
+ PData[fieldID] = rpt.params[field];
|
|
|
+ DData[fieldID] = rpt.params[field].Default_Value;
|
|
|
+ return rpt.params[field];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+};
|
|
|
+// 获取数据,只有一个参数时获取该指标所有数据(数组),两个参数时获取该指标中的第N个数据(值)
|
|
|
+const D = (fieldID, valIndex, newValue) => {
|
|
|
+ if (valIndex || valIndex === 0) {
|
|
|
+ if (DData[fieldID]) {
|
|
|
+ return DData[fieldID][valIndex];
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ if (!F(fieldID))
|
|
|
+ P(fieldID);
|
|
|
+ if (DData[fieldID]) {
|
|
|
+ if (DData[fieldID].length >= valIndex) {
|
|
|
+ if (!DData[fieldID][valIndex] && DData[fieldID][valIndex] !== 0)
|
|
|
+ return '';
|
|
|
+ return DData[fieldID][valIndex];
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ console.log(`指标id:${fieldID},${valIndex}>${DData[fieldID].length},请检查`);
|
|
|
+ return '';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ console.log(`无ID为${fieldID}的指标,请检查`);
|
|
|
+ return '';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ if (DData[fieldID]) {
|
|
|
+ return DData[fieldID];
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ if (!F(fieldID))
|
|
|
+ P(fieldID);
|
|
|
+ if (DData[fieldID]) {
|
|
|
+ return DData[fieldID];
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ console.log(`无ID为${fieldID}的指标,请检查`);
|
|
|
+ return [];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+};
|
|
|
+//获取相应指标的数据长度
|
|
|
+const L = (arg) => {
|
|
|
+ if (arg in exports.IDataObjProps) {
|
|
|
+ return orgData[arg][0].length;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ if (DData[arg]) {
|
|
|
+ return DData[arg].length;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ F(arg);
|
|
|
+ if (DData[arg]) {
|
|
|
+ return DData[arg];
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ console.log(`无ID为${arg}的指标,请检查`);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+};
|
|
|
+//获取当前页
|
|
|
+const getCurrentPage = () => {
|
|
|
+ let rst = 0;
|
|
|
+ if (rpt && rpt.runTimePageData.currentPage) {
|
|
|
+ rst = rpt.runTimePageData.currentPage;
|
|
|
+ }
|
|
|
+ return rst;
|
|
|
+};
|
|
|
+// 获取总页数
|
|
|
+const getTotalPage = () => {
|
|
|
+ let rst = 0;
|
|
|
+ if (rpt) {
|
|
|
+ rst = rpt.totalPages;
|
|
|
+ }
|
|
|
+ return rst;
|
|
|
+};
|
|
|
+//向目标对象赋值
|
|
|
+const setFieldValue = (field, valIdx, newValue) => {
|
|
|
+ if (field.DataNodeName === "NA") {
|
|
|
+ if (!field.data_field) {
|
|
|
+ field.data_field = [];
|
|
|
+ }
|
|
|
+ field.data_field[valIdx] = newValue;
|
|
|
+ }
|
|
|
+ else if (!field.DataNodeName) {
|
|
|
+ //that means this is a self-defined discrete field!
|
|
|
+ field.DataNodeName = exports.IDataObjProps.discrete_data;
|
|
|
+ field.DataSeq = orgData[exports.IDataObjProps.discrete_data].length;
|
|
|
+ orgData[exports.IDataObjProps.discrete_data].push([]);
|
|
|
+ orgData[field.DataNodeName][field.DataSeq][valIdx] = newValue;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ orgData[field.DataNodeName][field.DataSeq][valIdx] = newValue;
|
|
|
+ }
|
|
|
+};
|
|
|
+//反向设置原始数据
|
|
|
+const setFieldValueArray = (field, newArr) => {
|
|
|
+ if (newArr instanceof Array) {
|
|
|
+ if (field.DataNodeName === 'NA') {
|
|
|
+ field.data_field = newArr;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ if (!field.DataNodeName) {
|
|
|
+ // that means this is a self-defined discrete field!
|
|
|
+ field.DataNodeName = exports.IDataObjProps.discrete_data;
|
|
|
+ field.DataSeq = orgData[exports.IDataObjProps.discrete_data].length;
|
|
|
+ orgData[exports.IDataObjProps.discrete_data].push([]);
|
|
|
+ }
|
|
|
+ orgData[field.DataNodeName][field.DataSeq] = newArr;
|
|
|
+ }
|
|
|
+ }
|
|
|
+};
|
|
|
+//反向设置原始数据
|
|
|
+const setFieldDefaultValue = (fieldID, newValue) => {
|
|
|
+ rpt.params[`ID_${fieldID}`].Default_Value = newValue;
|
|
|
+};
|
|
|
+//该函数为共用方法,参数有两套组合:
|
|
|
+// (指标id,更改后的数组)
|
|
|
+// (指标id,需要更改的index,.需要更改的值)
|
|
|
+const setData = (fieldID, arg1, arg2) => {
|
|
|
+ const field = F(fieldID);
|
|
|
+ if (field) {
|
|
|
+ if (arg1 instanceof Array) {
|
|
|
+ if (DData[fieldID]) {
|
|
|
+ DData[fieldID] = arg1;
|
|
|
+ setFieldValueArray(field, arg1);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ console.log(`无ID为${fieldID}的指标,请检查`);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ if (typeof (arg1) === 'number') {
|
|
|
+ if (DData[fieldID]) {
|
|
|
+ if (arg1 <= DData[fieldID].length) {
|
|
|
+ DData[fieldID][arg1] = arg2;
|
|
|
+ setFieldValue(field, arg1, arg2);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ console.log(`指标id:${fieldID},数据长度为${DData[fieldID].length},第二参数为${arg1},请检查`);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ console.log(`无ID为${fieldID}的指标,请检查`);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (P(fieldID)) {
|
|
|
+ setFieldDefaultValue(fieldID, arg1);
|
|
|
+ DData[fieldID] = arg1;
|
|
|
+ }
|
|
|
+};
|
|
|
+//把数组每个元素都转换成数字
|
|
|
+const getNumberArray = (data) => {
|
|
|
+ const rst = [];
|
|
|
+ for (const item of data) {
|
|
|
+ if (isNaN(Number(item))) {
|
|
|
+ rst.push(0);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ rst.push(Number(item));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return rst;
|
|
|
+};
|
|
|
+const removeFieldValue = (fieldID, valIdx) => {
|
|
|
+ const fField = F(fieldID);
|
|
|
+ if (fField) {
|
|
|
+ DData[fieldID].splice(valIdx, 1);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ console.log(`指标${fieldID}的数据不支持removeFieldValue操作`);
|
|
|
+ }
|
|
|
+};
|
|
|
+const insertFieldValue = (fieldID, valIdx, newValue) => {
|
|
|
+ let field = F(fieldID);
|
|
|
+ if (field) {
|
|
|
+ DData[fieldID].splice(valIdx, 0, newValue);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ console.log(`指标${fieldID}的数据不支持insertFieldValue操作`);
|
|
|
+ }
|
|
|
+};
|
|
|
+//复制精度
|
|
|
+const copyPrecision = (targetFieldID, orgFieldID) => {
|
|
|
+ copyProperty(targetFieldID, orgFieldID, 'Precision');
|
|
|
+};
|
|
|
+const copyFixedPrecisionNum = (targetFieldID, orgFieldID) => {
|
|
|
+ copyProperty(targetFieldID, orgFieldID, 'fixedPrecisionNum');
|
|
|
+};
|
|
|
+//复制属性
|
|
|
+const copyProperty = (targetFieldID, orgFieldID, property) => {
|
|
|
+ const targetField = F(targetFieldID);
|
|
|
+ const orgField = F(orgFieldID);
|
|
|
+ if (targetField && orgField) {
|
|
|
+ if (orgField[property]) {
|
|
|
+ if (!targetField[property]) {
|
|
|
+ targetField[property] = {};
|
|
|
+ }
|
|
|
+ Object.assign(targetField[property], orgField[property]);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ console.log(`指标${orgFieldID}不存在${property}属性`);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ console.log(`指标${targetFieldID}和${orgFieldID}的数据不支持copyProperty操作`);
|
|
|
+ }
|
|
|
+};
|
|
|
+const setDate = (fieldID, format) => {
|
|
|
+ const date = new ReportDate();
|
|
|
+ setData(fieldID, date.Format(format));
|
|
|
+};
|
|
|
+const DLength = () => {
|
|
|
+ if (orgData && orgData.detail_data)
|
|
|
+ return orgData.detail_data[0].length;
|
|
|
+ return 0;
|
|
|
+};
|
|
|
+var formulasDataSetter = {
|
|
|
+ setupData,
|
|
|
+ P,
|
|
|
+ F,
|
|
|
+ D,
|
|
|
+ getCurrentPage,
|
|
|
+ getTotalPage,
|
|
|
+ L,
|
|
|
+ setFieldValue,
|
|
|
+ setFieldValueArray,
|
|
|
+ removeFieldValue,
|
|
|
+ insertFieldValue,
|
|
|
+ setData,
|
|
|
+ resetData,
|
|
|
+ getNumberArray,
|
|
|
+ copyPrecision,
|
|
|
+ copyFixedPrecisionNum,
|
|
|
+ copyProperty,
|
|
|
+ setDate,
|
|
|
+ DLength
|
|
|
+};
|
|
|
+
|
|
|
// 计算式执行(不同情况的方法会不同)
|
|
|
+/* eslint-disable import/prefer-default-export */
|
|
|
+const replaceAll = (FindText, RepText, str) => {
|
|
|
+ const regExp = new RegExp(FindText, 'g');
|
|
|
+ return str.replace(regExp, RepText);
|
|
|
+};
|
|
|
const formulaExec = (runType, $CURRENT_TEMPLATE, $CURRENT_DATA, $CURRENT_RPT) => {
|
|
|
+ formulasDataSetter.setupData($CURRENT_RPT, $CURRENT_DATA);
|
|
|
+ const { P, F, D, L, getCurrentPage, getTotalPage, setFieldValue, setFieldValueArray, removeFieldValue, insertFieldValue, setData, getNumberArray, copyPrecision, copyFixedPrecisionNum, copyProperty, setDate, DLength } = formulasDataSetter;
|
|
|
+ const { isEmptyString, trim, leftTrim, rightTrim, comdify, convertToCaptionNum, convertStrToBoolean, formatNumber, } = stringUtil;
|
|
|
+ const $JV = JV;
|
|
|
+ const $JE = JE;
|
|
|
+ const reportDate = ReportDate;
|
|
|
for (let execFmlIdx = 0; execFmlIdx < $CURRENT_RPT.formulas.length; execFmlIdx++) {
|
|
|
if ($CURRENT_RPT.formulas[execFmlIdx].run_type === runType) {
|
|
|
let expression = $CURRENT_RPT.formulas[execFmlIdx].expression;
|
|
|
@@ -3229,7 +3617,7 @@ const formulaExec = (runType, $CURRENT_TEMPLATE, $CURRENT_DATA, $CURRENT_RPT) =>
|
|
|
// console.log(expression);
|
|
|
//临时处理
|
|
|
if (expression.indexOf(`new Date(`)) {
|
|
|
- newExpression = expression.replaceAll(`new Date(`, `new ReportDate(`);
|
|
|
+ newExpression = replaceAll(/new Date\(/g, `new reportDate(`, expression);
|
|
|
}
|
|
|
eval(newExpression);
|
|
|
}
|
|
|
@@ -3239,8 +3627,40 @@ const formulaExec = (runType, $CURRENT_TEMPLATE, $CURRENT_DATA, $CURRENT_RPT) =>
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ formulasDataSetter.resetData();
|
|
|
+ return {
|
|
|
+ $JE,
|
|
|
+ $JV,
|
|
|
+ P,
|
|
|
+ F,
|
|
|
+ D,
|
|
|
+ L,
|
|
|
+ getCurrentPage,
|
|
|
+ getTotalPage,
|
|
|
+ setFieldValue,
|
|
|
+ setFieldValueArray,
|
|
|
+ removeFieldValue,
|
|
|
+ insertFieldValue,
|
|
|
+ setData,
|
|
|
+ getNumberArray,
|
|
|
+ copyPrecision,
|
|
|
+ copyFixedPrecisionNum,
|
|
|
+ copyProperty,
|
|
|
+ setDate,
|
|
|
+ DLength,
|
|
|
+ isEmptyString,
|
|
|
+ trim,
|
|
|
+ leftTrim,
|
|
|
+ rightTrim,
|
|
|
+ comdify,
|
|
|
+ convertToCaptionNum,
|
|
|
+ convertStrToBoolean,
|
|
|
+ formatNumber,
|
|
|
+ reportDate
|
|
|
+ };
|
|
|
};
|
|
|
const combinedGridFormula = ($RUN_TYPE, $TEXT, $TIMES, $CURRENT_RPT) => {
|
|
|
+ const { $JE, $JV, P, F, D, L, getCurrentPage, getTotalPage, setFieldValue, setFieldValueArray, removeFieldValue, insertFieldValue, setData, getNumberArray, copyPrecision, copyFixedPrecisionNum, copyProperty, setDate, DLength, isEmptyString, trim, leftTrim, rightTrim, comdify, convertToCaptionNum, convertStrToBoolean, formatNumber, reportDate } = $CURRENT_RPT.formulasObject;
|
|
|
if ($CURRENT_RPT.formulas) {
|
|
|
for (let execFmlIdx = 0; execFmlIdx < $CURRENT_RPT.formulas.length; execFmlIdx++) {
|
|
|
if ($CURRENT_RPT.formulas[execFmlIdx].run_type === $RUN_TYPE) {
|
|
|
@@ -3257,6 +3677,37 @@ const combinedGridFormula = ($RUN_TYPE, $TEXT, $TIMES, $CURRENT_RPT) => {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ formulasDataSetter.resetData();
|
|
|
+ return {
|
|
|
+ $JE,
|
|
|
+ $JV,
|
|
|
+ P,
|
|
|
+ F,
|
|
|
+ D,
|
|
|
+ L,
|
|
|
+ getCurrentPage,
|
|
|
+ getTotalPage,
|
|
|
+ setFieldValue,
|
|
|
+ setFieldValueArray,
|
|
|
+ removeFieldValue,
|
|
|
+ insertFieldValue,
|
|
|
+ setData,
|
|
|
+ getNumberArray,
|
|
|
+ copyPrecision,
|
|
|
+ copyFixedPrecisionNum,
|
|
|
+ copyProperty,
|
|
|
+ setDate,
|
|
|
+ DLength,
|
|
|
+ isEmptyString,
|
|
|
+ trim,
|
|
|
+ leftTrim,
|
|
|
+ rightTrim,
|
|
|
+ comdify,
|
|
|
+ convertToCaptionNum,
|
|
|
+ convertStrToBoolean,
|
|
|
+ formatNumber,
|
|
|
+ reportDate
|
|
|
+ };
|
|
|
};
|
|
|
|
|
|
class JpcFlowTabClass {
|
|
|
@@ -3523,6 +3974,7 @@ class JpcFlowTabClass {
|
|
|
};
|
|
|
let private_get_max_lines_of_the_record = function (theRecIdx) {
|
|
|
let rst = 1;
|
|
|
+ let maxAmt = 1;
|
|
|
for (let loop = 0; loop < me.auto_height_fields_idx.length; loop++) {
|
|
|
let tab_field = me.auto_height_fields_idx[loop][1];
|
|
|
let data_field = null, map_data_field = JE.F(tab_field.FieldID, $CURRENT_RPT);
|
|
|
@@ -3546,14 +3998,13 @@ class JpcFlowTabClass {
|
|
|
}
|
|
|
JpcFieldHelper.setValue(data_field, theRecIdx, value);
|
|
|
let values = value.split('|');
|
|
|
- if (values.length > rst)
|
|
|
- rst = values.length;
|
|
|
+ // if (values.length > rst) rst = values.length; // 考虑到紧凑输出,不能那么快设置rst
|
|
|
let font = private_get_font(tab_field.font);
|
|
|
let chkFontName = '宋体';
|
|
|
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;
|
|
|
@@ -3567,8 +4018,21 @@ class JpcFlowTabClass {
|
|
|
splitStrArr.push(i);
|
|
|
}
|
|
|
}
|
|
|
- if (accAmt > rst)
|
|
|
- rst = accAmt;
|
|
|
+ if (accAmt > 3) {
|
|
|
+ // 新优化,计算实际能显示完的真正行数
|
|
|
+ const rowHeight = JpcFlowTabHelper.getRowHeight(bands, rptTpl, me.isEx);
|
|
|
+ let tmpFV = ((chkFontHeight + JV.CLOSE_OUTPUT_ROW_BUFFER) * accAmt) / rowHeight;
|
|
|
+ let tmpAmt = Math.floor(tmpFV);
|
|
|
+ if (Math.ceil(tmpFV) > tmpAmt) {
|
|
|
+ tmpAmt++;
|
|
|
+ }
|
|
|
+ if (maxAmt < tmpAmt)
|
|
|
+ maxAmt = tmpAmt;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ if (maxAmt < accAmt)
|
|
|
+ maxAmt = accAmt;
|
|
|
+ }
|
|
|
if (hasSplitStr) {
|
|
|
let newValArr = [];
|
|
|
for (let i = 0; i < values.length; i++) {
|
|
|
@@ -3587,6 +4051,8 @@ class JpcFlowTabClass {
|
|
|
// 根据最新需求,暂时不考虑excel类型输出,换回原来逻辑
|
|
|
}
|
|
|
}
|
|
|
+ if (rst < maxAmt)
|
|
|
+ rst = maxAmt; // 最后才设置最大结果
|
|
|
return rst;
|
|
|
};
|
|
|
for (let tabField of tab_fields) {
|
|
|
@@ -3849,7 +4315,10 @@ class JpcFlowTabClass {
|
|
|
private_addPage(segIdx, null, true, false, -1);
|
|
|
}
|
|
|
else {
|
|
|
- private_addPage(segIdx, grpSeqInfo, false, true, ttlSegRecAmtNormal);
|
|
|
+ // private_addPage(segIdx, grpSeqInfo, false, true, ttlSegRecAmtNormal);
|
|
|
+ //在这里要考虑如果有多页正常的流水数据情况,那么就得考虑这页有多少条普通流水记录,不应该一刀切地用ttlSegRecAmtNormal
|
|
|
+ let splitPoint = ttlSegRecAmtNormal - handledRowAmt;
|
|
|
+ private_addPage(segIdx, grpSeqInfo, false, true, splitPoint);
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
@@ -4411,6 +4880,7 @@ class JpcFlowTabClass {
|
|
|
}
|
|
|
;
|
|
|
checkCombineEvent($RUN_TYPE, $VER_COMB_ARRAY, $HOR_COMB_ARRAY, $CURRENT_CELL_ITEMS, $CURRENT_RPT) {
|
|
|
+ const { $JE, $JV, P, F, D, L, getCurrentPage, getTotalPage, setFieldValue, setFieldValueArray, removeFieldValue, insertFieldValue, setData, getNumberArray, copyPrecision, copyFixedPrecisionNum, copyProperty, setDate, DLength, isEmptyString, trim, leftTrim, rightTrim, comdify, convertToCaptionNum, convertStrToBoolean, formatNumber, reportDate } = $CURRENT_RPT.formulasObject;
|
|
|
if ($CURRENT_RPT.formulas) {
|
|
|
for (let execFmlIdx = 0; execFmlIdx < $CURRENT_RPT.formulas.length; execFmlIdx++) {
|
|
|
if ($CURRENT_RPT.formulas[execFmlIdx].run_type === $RUN_TYPE) {
|
|
|
@@ -4427,6 +4897,36 @@ class JpcFlowTabClass {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ return {
|
|
|
+ $JE,
|
|
|
+ $JV,
|
|
|
+ P,
|
|
|
+ F,
|
|
|
+ D,
|
|
|
+ L,
|
|
|
+ getCurrentPage,
|
|
|
+ getTotalPage,
|
|
|
+ setFieldValue,
|
|
|
+ setFieldValueArray,
|
|
|
+ removeFieldValue,
|
|
|
+ insertFieldValue,
|
|
|
+ setData,
|
|
|
+ getNumberArray,
|
|
|
+ copyPrecision,
|
|
|
+ copyFixedPrecisionNum,
|
|
|
+ copyProperty,
|
|
|
+ setDate,
|
|
|
+ DLength,
|
|
|
+ isEmptyString,
|
|
|
+ trim,
|
|
|
+ leftTrim,
|
|
|
+ rightTrim,
|
|
|
+ comdify,
|
|
|
+ convertToCaptionNum,
|
|
|
+ convertStrToBoolean,
|
|
|
+ formatNumber,
|
|
|
+ reportDate
|
|
|
+ };
|
|
|
}
|
|
|
;
|
|
|
outputColumn(rptTpl, dataObj, page, segIdx, bands, unitFactor, multiColIdx, $CURRENT_RPT, customizeCfg) {
|
|
|
@@ -4528,12 +5028,56 @@ class JpcFlowTabClass {
|
|
|
if (showText) {
|
|
|
textArr = textArr.concat(showText.split('|'));
|
|
|
}
|
|
|
- if (contentValInfo[3] < textArr.length && contentValInfo[3] >= 0) {
|
|
|
- showText = textArr[contentValInfo[3]];
|
|
|
+ /*
|
|
|
+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 {
|
|
|
- showText = '';
|
|
|
+ //这里不管是不是附属autoheight指标,有足够的条件单独处理
|
|
|
+ if (QUOTA_Rate >= 3) {
|
|
|
+ console.log('压缩率太高了,模板的行高设置小一点');
|
|
|
+ //压缩超过一半空间的话,说明给的行高度太高了,需要另外一些特殊处理,后期有需要再加
|
|
|
+ }
|
|
|
+ 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.area = JpcAreaHelper.outputArea(tab_field.area, band, unitFactor, rows, rowIdx, cols, colIdx, me.multiCols, multiColIdx, true, false);
|
|
|
rst.isAutoHeight = true;
|
|
|
@@ -6387,6 +6931,7 @@ class JpcExClass {
|
|
|
params;
|
|
|
formulas;
|
|
|
events;
|
|
|
+ formulasObject = {};
|
|
|
constructor(rptTpl) {
|
|
|
if (rptTpl.流水式表_信息) {
|
|
|
this.flowTab = new JpcFlowTabClass(false);
|
|
|
@@ -6411,7 +6956,6 @@ class JpcExClass {
|
|
|
this.formulas = JpcFunc.createNew(rptTpl);
|
|
|
this.events = JpcEvent.createNew(rptTpl);
|
|
|
}
|
|
|
- ;
|
|
|
analyzeData(rptTpl, dataObj, defProperties, option, outputType) {
|
|
|
let me = this, dftPagingOption = option || exports.IPagingOption.normal;
|
|
|
//1. data object
|
|
|
@@ -6451,7 +6995,6 @@ class JpcExClass {
|
|
|
//for garbage collection:
|
|
|
dataHelper = null;
|
|
|
}
|
|
|
- ;
|
|
|
//获取总页数
|
|
|
paging(rptTpl, dataObj, defProperties, option) {
|
|
|
let me = this, dftPagingOption = option || exports.IPagingOption.normal;
|
|
|
@@ -6476,17 +7019,15 @@ class JpcExClass {
|
|
|
me.totalPages = me.billTab.paging(rptTpl, dataObj);
|
|
|
}
|
|
|
}
|
|
|
- ;
|
|
|
//根据步骤,对formulas中的计算式进行处理,并赋值到相应属性中
|
|
|
executeFormulas(runType, $CURRENT_TEMPLATE, $CURRENT_DATA, $CURRENT_RPT) {
|
|
|
- formulaExec(runType, $CURRENT_TEMPLATE, $CURRENT_DATA, $CURRENT_RPT);
|
|
|
+ return formulaExec(runType, $CURRENT_TEMPLATE, $CURRENT_DATA, $CURRENT_RPT);
|
|
|
}
|
|
|
- ;
|
|
|
outputAsPreviewPage(rptTpl, defProperties) {
|
|
|
let me = this, rst = {};
|
|
|
- rst.control_collection = private_buildDftControls(rptTpl, (defProperties === null) ? null : defProperties.ctrls);
|
|
|
- rst.style_collection = private_buildDftStyles(rptTpl, (defProperties === null) ? null : defProperties.styles);
|
|
|
- rst.font_collection = private_buildDftFonts(rptTpl, (defProperties === null) ? null : defProperties.fonts);
|
|
|
+ rst.control_collection = private_buildDftControls(rptTpl, defProperties === null ? null : defProperties.ctrls);
|
|
|
+ rst.style_collection = private_buildDftStyles(rptTpl, defProperties === null ? null : defProperties.styles);
|
|
|
+ rst.font_collection = private_buildDftFonts(rptTpl, defProperties === null ? null : defProperties.fonts);
|
|
|
rst.打印页面_信息 = {};
|
|
|
rst.打印页面_信息.报表名称 = rptTpl.主信息.报表名称;
|
|
|
rst.打印页面_信息.纸张宽高 = JpcCommonHelper.getPageSize(rptTpl);
|
|
|
@@ -6507,7 +7048,7 @@ class JpcExClass {
|
|
|
}
|
|
|
//1.
|
|
|
let rstPage = {
|
|
|
- cells: []
|
|
|
+ cells: [],
|
|
|
};
|
|
|
rstPage.page_seq = 1;
|
|
|
if (me.flowTab) {
|
|
|
@@ -6543,13 +7084,12 @@ class JpcExClass {
|
|
|
}
|
|
|
return rst;
|
|
|
}
|
|
|
- ;
|
|
|
outputAsSimpleJSONPageArray(rptTpl, dataObj, startPage, endPage, defProperties, customizeCfg) {
|
|
|
let me = this, rst = {};
|
|
|
- if ((startPage > 0) && (startPage <= endPage) && (endPage <= me.totalPages)) {
|
|
|
- rst.control_collection = private_buildDftControls(rptTpl, (defProperties === null) ? null : defProperties.ctrls);
|
|
|
- rst.style_collection = private_buildDftStyles(rptTpl, (defProperties === null) ? null : defProperties.styles);
|
|
|
- rst.font_collection = private_buildDftFonts(rptTpl, (defProperties === null) ? null : defProperties.fonts);
|
|
|
+ if (startPage > 0 && startPage <= endPage && endPage <= me.totalPages) {
|
|
|
+ rst.control_collection = private_buildDftControls(rptTpl, defProperties === null ? null : defProperties.ctrls);
|
|
|
+ rst.style_collection = private_buildDftStyles(rptTpl, defProperties === null ? null : defProperties.styles);
|
|
|
+ rst.font_collection = private_buildDftFonts(rptTpl, defProperties === null ? null : defProperties.fonts);
|
|
|
rst.打印页面_信息 = {};
|
|
|
rst.打印页面_信息.报表名称 = rptTpl.主信息.报表名称;
|
|
|
rst.打印页面_信息.纸张宽高 = JpcCommonHelper.getPageSize(rptTpl);
|
|
|
@@ -6560,7 +7100,7 @@ class JpcExClass {
|
|
|
try {
|
|
|
for (let page = startPage; page <= endPage; page++) {
|
|
|
me.runTimePageData.currentPage = page;
|
|
|
- me.executeFormulas('before_output', rptTpl, dataObj, me);
|
|
|
+ this.formulasObject = me.executeFormulas('before_output', rptTpl, dataObj, me);
|
|
|
// console.log('=======================');
|
|
|
rst.items.push(me.outputAsSimpleJSONPage(rptTpl, dataObj, bands, page, rst.control_collection, customizeCfg));
|
|
|
}
|
|
|
@@ -6585,7 +7125,6 @@ class JpcExClass {
|
|
|
}
|
|
|
return rst;
|
|
|
}
|
|
|
- ;
|
|
|
outputAsSimpleJSONPage(rptTpl, dataObj, bands, page, controls, customizeCfg) {
|
|
|
let me = this, rst = null;
|
|
|
function getPageMergeBorder() {
|
|
|
@@ -6638,7 +7177,6 @@ class JpcExClass {
|
|
|
}
|
|
|
return rst;
|
|
|
}
|
|
|
- ;
|
|
|
}
|
|
|
//暂定
|
|
|
const private_buildDftItems = (rptTpl, dftCollection, nodeName) => {
|
|
|
@@ -6648,8 +7186,10 @@ const private_buildDftItems = (rptTpl, dftCollection, nodeName) => {
|
|
|
const { ID, ...dftCollectionProps } = dftCollection[i];
|
|
|
rst[dftCollection[i].ID] = { ...dftCollectionProps };
|
|
|
}
|
|
|
- const propArray = (nodeName === 'control_collection') ? JV.CONTROL_PROPS : JV.FONT_PROPS;
|
|
|
- if (rptTpl && rptTpl[nodeName] && rptTpl[nodeName].length) {
|
|
|
+ const propArray = nodeName === 'control_collection' ? JV.CONTROL_PROPS : JV.FONT_PROPS;
|
|
|
+ if (rptTpl &&
|
|
|
+ rptTpl[nodeName] &&
|
|
|
+ rptTpl[nodeName].length) {
|
|
|
for (let i = 0; i < rptTpl[nodeName].length; i++) {
|
|
|
const rptDftItem = rptTpl[nodeName][i];
|
|
|
if (rst[rptDftItem.ID] === undefined) {
|
|
|
@@ -6680,7 +7220,8 @@ function private_buildDftStyles(rptTpl, dftStyleCollection) {
|
|
|
if (dftStyleCollection) {
|
|
|
for (let i = 0; i < dftStyleCollection.length; i++) {
|
|
|
const item = {};
|
|
|
- if (dftStyleCollection[i].border_style && dftStyleCollection[i].border_style.length > 0) {
|
|
|
+ if (dftStyleCollection[i].border_style &&
|
|
|
+ dftStyleCollection[i].border_style.length > 0) {
|
|
|
for (let j = 0; j < dftStyleCollection[i].border_style.length; j++) {
|
|
|
const borderItem = {};
|
|
|
private_CopyBorder(borderItem, dftStyleCollection[i].border_style[j]);
|
|
|
@@ -6689,7 +7230,9 @@ function private_buildDftStyles(rptTpl, dftStyleCollection) {
|
|
|
}
|
|
|
rst[dftStyleCollection[i].ID] = item;
|
|
|
}
|
|
|
- if (rptTpl && rptTpl.style_collection && rptTpl.style_collection.length > 0) {
|
|
|
+ if (rptTpl &&
|
|
|
+ rptTpl.style_collection &&
|
|
|
+ rptTpl.style_collection.length > 0) {
|
|
|
for (let i = 0; i < rptTpl.style_collection.length; i++) {
|
|
|
const rptDftItem = rptTpl.style_collection[i];
|
|
|
if (rst[rptDftItem.ID] === undefined) {
|
|
|
@@ -7046,7 +7589,8 @@ class RptCommon {
|
|
|
maxLen -= minLen;
|
|
|
}
|
|
|
for (let i = 0; i < maxLen; i++) {
|
|
|
- let value = (i < val1.length ? val1[i] : val1[minLen - 1]) * (i < val2.length ? val2[i] : val2[minLen - 1]);
|
|
|
+ let value = (i < val1.length ? val1[i] : val1[minLen - 1]) *
|
|
|
+ (i < val2.length ? val2[i] : val2[minLen - 1]);
|
|
|
if (value === null || value === undefined) {
|
|
|
value = 0;
|
|
|
}
|
|
|
@@ -7066,7 +7610,8 @@ class RptCommon {
|
|
|
maxLen -= minLen;
|
|
|
}
|
|
|
for (let i = 0; i < maxLen; i++) {
|
|
|
- let value = (i < val1.length ? val1[i] : val1[minLen - 1]) / (i < val2.length ? val2[i] : val2[minLen - 1]);
|
|
|
+ let value = (i < val1.length ? val1[i] : val1[minLen - 1]) /
|
|
|
+ (i < val2.length ? val2[i] : val2[minLen - 1]);
|
|
|
if (fixFormat)
|
|
|
value = parseFloat(value.toFixed(fixFormat));
|
|
|
rst.push(value);
|
|
|
@@ -7083,7 +7628,8 @@ class RptCommon {
|
|
|
maxLen -= minLen;
|
|
|
}
|
|
|
for (let i = 0; i < maxLen; i++) {
|
|
|
- let value = (i < val1.length ? val1[i] : val1[minLen - 1]) + (i < val2.length ? val2[i] : val2[minLen - 1]);
|
|
|
+ let value = (i < val1.length ? val1[i] : val1[minLen - 1]) +
|
|
|
+ (i < val2.length ? val2[i] : val2[minLen - 1]);
|
|
|
if (fixFormat)
|
|
|
value = parseFloat(value.toFixed(fixFormat));
|
|
|
rst.push(value);
|
|
|
@@ -7131,7 +7677,8 @@ class RptCommon {
|
|
|
maxLen -= minLen;
|
|
|
}
|
|
|
for (let i = 0; i < maxLen; i++) {
|
|
|
- let value = (i < val1.length ? val1[i] : val1[minLen - 1]) - (i < val2.length ? val2[i] : val2[minLen - 1]);
|
|
|
+ let value = (i < val1.length ? val1[i] : val1[minLen - 1]) -
|
|
|
+ (i < val2.length ? val2[i] : val2[minLen - 1]);
|
|
|
if (fixFormat)
|
|
|
value = parseFloat(value.toFixed(fixFormat));
|
|
|
rst.push(value);
|
|
|
@@ -7141,7 +7688,7 @@ class RptCommon {
|
|
|
formatString(arrVal, formatStr) {
|
|
|
const rst = [];
|
|
|
for (const val of arrVal) {
|
|
|
- rst.push(replaceAll(formatStr, '%S', val));
|
|
|
+ rst.push(replaceAll$1(formatStr, '%S', val));
|
|
|
}
|
|
|
return rst;
|
|
|
}
|
|
|
@@ -7203,7 +7750,7 @@ exports.projectConstList = projectConstList;
|
|
|
exports.projectFieldConstList = projectFieldConstList;
|
|
|
exports.rationKeyArray = rationKeyArray;
|
|
|
exports.rationType = rationType$1;
|
|
|
-exports.replaceAll = replaceAll;
|
|
|
+exports.replaceAll = replaceAll$1;
|
|
|
exports.rightTrim = rightTrim;
|
|
|
exports.setupDateFormat = setupDateFormat;
|
|
|
exports.summaryConstList = summaryConstList;
|