fastlion-amis
Version:
一种MIS页面生成工具
173 lines (172 loc) • 7.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getCountOfPage = exports.createHtml = void 0;
var tslib_1 = require("tslib");
var lodash_1 = require("lodash");
var commonTableFunction_1 = require("../../../../../store/utils/commonTableFunction");
var utils_1 = require("../../../../../utils/utils");
var createHtml = function (options, tableColumns, tableHeadRows, tableData, range, isLastTask) {
var _a;
var start = range[0], end = range[1];
var showColumns = tableColumns.filter(function (column) { return column.printType != 'none' && column.width != 0 && column.width != undefined; });
var width = 0;
var idx = showColumns.length;
for (var i = 0; i < showColumns.length; i++) {
var column = showColumns[i];
width += column.width;
if (width > options.tableWidth) {
idx = i;
break;
}
}
var columns = showColumns.slice(0, idx);
var table = document.createElement('table');
table.style.margin = '0 auto';
table.style.borderCollapse = 'collapse';
table.style.tableLayout = 'fixed';
table.style.border = "".concat(Math.max(2, (_a = options.borderWidth) !== null && _a !== void 0 ? _a : 2), "px solid #333333");
table.style.wordBreak = 'break-all';
table.style.fontSize = "".concat(options.contentFontSize, "px");
table.style.fontFamily = options.contentFontFamily;
table.style.width = "".concat(width, "px");
table.setAttribute('border', options.lineWidth.toString());
// table.setAttribute('style', `font-size: 13px; width: ${width}px; border-collapse:collapse; margin: 0 auto; border: ${options.borderWidth}px solid; table-layout: fixed;`)
var colgroup = document.createElement('colgroup');
columns.forEach(function (column) {
var col = document.createElement('col');
if (column.width) {
col.style.setProperty('width', "".concat(column.width * 3.78, "px"));
}
colgroup.appendChild(col);
});
table.appendChild(colgroup);
var thead = document.createElement('thead');
thead.style.display = 'table-header-group';
var _loop_1 = function (i) {
var headRow = tableHeadRows[i];
var tr = document.createElement('tr');
headRow.slice(0, idx).forEach(function (item) {
var temp = item.rowspan == tableHeadRows.length - i;
var th = document.createElement('th');
th.textContent = temp ? item.column.label : item.label;
th.colSpan = item.colspan;
th.rowSpan = item.rowspan;
th.style.padding = "".concat(options.rowPadding, "px ").concat(options.colPadding, "px");
tr.appendChild(th);
});
thead.appendChild(tr);
};
for (var i = 0; i < tableHeadRows.length; i++) {
_loop_1(i);
}
table.appendChild(thead);
var sortColumnNames = (0, lodash_1.flatMap)(columns !== null && columns !== void 0 ? columns : [], function (column) { return column.sort != 'none' ? { name: column.name, func: column.sort } : []; });
var tbody = document.createElement('tbody');
var data = sortArray(tableData.slice(start, end), sortColumnNames).map(function (item) { return (tslib_1.__assign(tslib_1.__assign({}, item), { rowSpans: {} })); });
(0, commonTableFunction_1.combineCell)(data, columns.filter(function (item) { return item.combined; }));
for (var i = 0; i < data.length; i++) {
var row = data[i];
var tr = document.createElement('tr');
for (var j = 0; j < columns.length; j++) {
var column = columns[j];
var rowspan = row.rowSpans[column.name];
if (rowspan === 0)
continue;
var td = document.createElement('td');
var value = (0, commonTableFunction_1.getCellValue)(row[column.name], column);
td.textContent = value;
td.rowSpan = rowspan || 1;
td.style.textAlign = column.align;
td.style.padding = "".concat(options.rowPadding, "px ").concat(options.colPadding, "px");
tr.appendChild(td);
}
tbody.appendChild(tr);
}
var hasStatistic = columns.some(function (column) { return column.statistic != 'none'; });
var dataTypeArr = ['number', 'static-number', 'input-number', 'progress', 'static-progress'];
if (isLastTask && !options.countAllPage && hasStatistic) {
var tr = document.createElement('tr');
var _loop_2 = function (j) {
var td = document.createElement('td');
if (j == 0) {
td.textContent = '合计:';
}
var column = columns[j];
if (column.statistic == 'Sum') {
if (dataTypeArr.includes(column.type) || column.pristine.isNumerical) {
var value = (0, utils_1.calcFn)('sum', column.name, tableData);
td.textContent = (0, commonTableFunction_1.getCellValue)(value, column);
}
else {
var value = data.filter(function (item) { return item[column.name]; }).length;
td.textContent = value.toString();
}
td.style.textAlign = column.align;
}
tr.appendChild(td);
};
for (var j = 0; j < columns.length; j++) {
_loop_2(j);
}
tbody.appendChild(tr);
}
table.appendChild(tbody);
if (options.countAllPage && hasStatistic) {
var tfoot = document.createElement('tfoot');
var tr_1 = document.createElement('tr');
columns.forEach(function (column, index) {
var td = document.createElement('td');
if (index == 0) {
td.textContent = '合计:';
}
if (column.statistic == 'Sum') {
if (dataTypeArr.includes(column.type) || column.pristine.isNumerical) {
var value = (0, utils_1.calcFn)('sum', column.name, tableData);
td.textContent = (0, commonTableFunction_1.getCellValue)(value, column);
}
else {
var value = data.filter(function (item) { return item[column.name]; }).length;
td.textContent = value.toString();
}
td.style.textAlign = column.align;
}
tr_1.appendChild(td);
});
tfoot.appendChild(tr_1);
table.append(tfoot);
}
return table.outerHTML;
};
exports.createHtml = createHtml;
var sortArray = function (datas, columns) {
if (columns.length > 0) {
var column = columns.pop();
if (column) {
var name_1 = column.name;
var func_1 = column.func;
datas = datas.sort(function (a, b) {
var valueA = a[name_1];
var valueB = b[name_1];
return (0, utils_1.sortFn)(valueA, valueB, func_1);
});
sortArray(datas, columns);
}
}
return datas;
};
// fontsize lineheight
// 13px 14.8317
// 14px 15.97
// 15px 17.11
// 16px 18.25
// 17px 19.39
// 1px = (25.4 / 96)mm
// avg 1.1406994586296058
var getCountOfPage = function (tableHeight, fontSize, padding) {
var unit = 25.4 / 96;
var lineHeight = (((1 + fontSize) * 1.1406994586296058) + (padding * 2)) * unit;
var countOfPage = Math.floor(tableHeight / lineHeight);
return countOfPage;
};
exports.getCountOfPage = getCountOfPage;
//# sourceMappingURL=./renderers/Lion/LabelPrint/components/report/utils.js.map