fastlion-amis
Version:
一种MIS页面生成工具
818 lines (817 loc) • 48.1 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildTableHtml = exports.setLabelTemplateDataWithArrange = exports.setLabelTemplateData = exports.buildLabelTemplate = exports.getMaxCount = exports.buildFormTemplate = exports.buildDetailTemplate = void 0;
var tslib_1 = require("tslib");
var js_base64_1 = require("js-base64");
var type_1 = require("./type");
var moment_1 = (0, tslib_1.__importDefault)(require("moment"));
var utils_1 = require("../utils");
var commonTableFunction_1 = require("../../store/utils/commonTableFunction");
var lodash_1 = require("lodash");
var _1 = require(".");
var tpl_builtin_1 = require("../tpl-builtin");
var createHtml = function () { return (0, tslib_1.__awaiter)(void 0, void 0, void 0, function () {
var iframe, htmlContent, content;
var _a, _b;
return (0, tslib_1.__generator)(this, function (_c) {
switch (_c.label) {
case 0:
iframe = document.getElementById('dom-print-container');
htmlContent = (_b = (_a = iframe === null || iframe === void 0 ? void 0 : iframe.contentWindow) === null || _a === void 0 ? void 0 : _a.document.documentElement.innerHTML) !== null && _b !== void 0 ? _b : '';
if (!(htmlContent.length > (2 * 1024 * 1024))) return [3 /*break*/, 2];
return [4 /*yield*/, (0, _1.writeFileToTemp)(htmlContent)];
case 1:
content = _c.sent();
return [2 /*return*/, { useURL: true, content: content }];
case 2: return [2 /*return*/, Promise.resolve({ useURL: false, content: htmlContent })];
}
});
}); };
var buildDetailTemplate = function (settings, options) { return (0, tslib_1.__awaiter)(void 0, void 0, Promise, function () {
var userInfo, userObj, width, height, direction, defaultTop, defaultBottom, defaultLeft, defaultRight, showLogo, title, showTitle, showDynamicSubTitles, dynamicSubTiltes, showPrinter, showDate, subTitle, extraTitle, showPageNum, showBarCode, showQRCode, codeLabel, codeValue, _a, useURL, content, pageWidth, pageHeight, headerHeight, codeWidth, codeHeight, titleHeight, titleMarginTop, subTitleHeight, subTitleMarginTop, subTitleCount, htmlMarginTop, htmlMarginBottom, footerHeight, pageNumWidth, rect, headerRect, logoRect, codeRect, codeLabelRect, extraTitleRect, titleRect, subTitleRect, subTitleRect1, subTitleRect2, subTitleRect3, footerRect, printerRect, dateRect, numRect, sumRect, htmlRect;
var _b, _c;
return (0, tslib_1.__generator)(this, function (_d) {
switch (_d.label) {
case 0:
userInfo = (_b = sessionStorage.getItem('userInfo')) !== null && _b !== void 0 ? _b : '{}';
userObj = userInfo && JSON.parse(userInfo);
width = settings.width, height = settings.height, direction = settings.direction, defaultTop = settings.top, defaultBottom = settings.bottom, defaultLeft = settings.left, defaultRight = settings.right;
showLogo = options.showLogo, title = options.title, showTitle = options.showTitle, showDynamicSubTitles = options.showDynamicSubTitles, dynamicSubTiltes = options.dynamicSubTiltes, showPrinter = options.showPrinter, showDate = options.showDate, subTitle = options.subTitle, extraTitle = options.extraTitle, showPageNum = options.showPageNum, showBarCode = options.showBarCode, showQRCode = options.showQRCode, codeLabel = options.codeLabel, codeValue = options.codeValue;
return [4 /*yield*/, createHtml()];
case 1:
_a = _d.sent(), useURL = _a.useURL, content = _a.content;
pageWidth = direction == 'vertical' ? width : height;
pageHeight = direction == 'vertical' ? height : width;
headerHeight = 15;
codeWidth = (showBarCode || showQRCode) ? showBarCode ? 60 : 25 : 0;
codeHeight = (showBarCode || showQRCode) ? showBarCode ? 15 : 25 : 0;
titleHeight = showTitle ? 5 : 0;
titleMarginTop = 3;
subTitleHeight = showDynamicSubTitles ? 6 : 0;
subTitleMarginTop = showDynamicSubTitles ? 3 : 0;
subTitleCount = dynamicSubTiltes.length;
htmlMarginTop = 3;
htmlMarginBottom = 8;
footerHeight = 4;
pageNumWidth = 12;
rect = { top: defaultTop, left: defaultLeft, width: pageWidth - defaultLeft - defaultRight, height: pageHeight - defaultTop - defaultBottom };
headerRect = { top: rect.top, left: rect.left, width: rect.width, height: headerHeight };
logoRect = { top: headerRect.top, left: headerRect.left, width: showLogo ? headerRect.height : 0, height: showLogo ? headerRect.height : 0, content: showLogo ? "<img src=\"./public/images/sanfu.png\"/>" : '' };
codeRect = { top: headerRect.top, left: headerRect.width + headerRect.left - codeWidth, width: codeWidth, height: codeHeight, label: '', codeType: showQRCode ? 'QRCode' : 'code39', content: (showBarCode || showQRCode) ? codeValue : undefined };
codeLabelRect = { top: codeRect.top + codeRect.height + 1, left: codeRect.left, width: codeRect.width + 5, height: 10, content: codeLabel + ":" + codeValue };
extraTitleRect = { top: headerRect.top, left: headerRect.left + logoRect.width, width: headerRect.width - logoRect.width, height: headerRect.height, content: extraTitle };
titleRect = { top: headerRect.top + headerRect.height + titleMarginTop, left: rect.left, width: rect.width, height: titleHeight, content: showTitle ? title + (subTitle ? "[" + subTitle + "]" : '') : '' };
subTitleRect = { top: titleRect.top + titleRect.height + subTitleMarginTop, left: defaultLeft, width: rect.width, height: subTitleHeight };
subTitleRect1 = { top: subTitleRect.top, left: subTitleRect.left, width: subTitleRect.width / (subTitleCount || 1), height: subTitleRect.height, content: showDynamicSubTitles ? dynamicSubTiltes[0] : undefined };
subTitleRect2 = { top: subTitleRect.top, left: subTitleCount <= 1 ? 0 : subTitleRect.left + (subTitleRect.width / subTitleCount), width: subTitleCount <= 1 ? 0 : subTitleRect.width / (subTitleCount || 1), height: subTitleRect.height, content: showDynamicSubTitles ? dynamicSubTiltes[1] : undefined };
subTitleRect3 = { top: subTitleRect.top, left: subTitleCount <= 2 ? 0 : subTitleRect.left + (subTitleRect.width / subTitleCount * (subTitleCount - 1)), width: subTitleCount <= 2 ? 0 : subTitleRect.width / (subTitleCount || 1), height: subTitleRect.height, content: showDynamicSubTitles ? dynamicSubTiltes[2] : undefined };
footerRect = { top: rect.height + defaultTop - footerHeight, left: rect.left, width: rect.width, height: footerHeight };
printerRect = { top: footerRect.top, left: rect.left, width: footerRect.width * 0.3, height: showPrinter ? footerRect.height : 0, content: showPrinter ? "\u6253\u5370\u8005:" + ((_c = userObj.user_name) !== null && _c !== void 0 ? _c : '') : '' };
dateRect = { top: footerRect.top, left: footerRect.left + printerRect.width, width: footerRect.width * 0.4, height: showDate ? footerRect.height : 0, content: showDate ? "\u6253\u5370\u65F6\u95F4:" + (0, moment_1.default)(new Date()).format('YYYY-MM-DD HH:mm:ss') : '' };
numRect = { top: footerRect.top, left: footerRect.left + printerRect.width + dateRect.width + (footerRect.width * 0.3 - pageNumWidth * 2) - 2, width: pageNumWidth, height: footerRect.height, content: showPageNum ? '第#页' : '' };
sumRect = { top: footerRect.top, left: numRect.left + numRect.width + 2, width: pageNumWidth, height: footerRect.height, content: showPageNum ? '共#页' : '' };
htmlRect = {
top: subTitleRect.top + subTitleRect.height + htmlMarginTop,
left: rect.left,
width: rect.width,
height: footerRect.top - (subTitleRect.top + subTitleRect.height + htmlMarginTop) - htmlMarginBottom,
content: content,
useURL: useURL
};
return [2 /*return*/, {
header: headerRect, logo: logoRect, code: codeRect, codeLabel: codeLabelRect, extraTitle: extraTitleRect, title: titleRect,
subTitle: subTitleRect, subTitle1: subTitleRect1, subTitle2: subTitleRect2, subTitle3: subTitleRect3,
html: htmlRect, date: dateRect, printer: printerRect, footer: footerRect, num: numRect, sum: sumRect
}];
}
});
}); };
exports.buildDetailTemplate = buildDetailTemplate;
var buildFormTemplate = function (settings, options) {
var _a, _b;
var userInfo = (_a = sessionStorage.getItem('userInfo')) !== null && _a !== void 0 ? _a : '{}';
var userObj = userInfo && JSON.parse(userInfo);
var width = settings.width, height = settings.height, direction = settings.direction, defaultTop = settings.top, defaultBottom = settings.bottom, defaultLeft = settings.left, defaultRight = settings.right;
var showHeaderTitle = options.showHeaderTitle, headerTitle = options.headerTitle, showHeaderLine = options.showHeaderLine, showLogo = options.showLogo, showTitle = options.showTitle, titleAllPrint = options.titleAllPrint, title = options.title, showSubTitle = options.showSubTitle, subTitleAllPrint = options.subTitleAllPrint, _c = options.subTitle, subTitle = _c === void 0 ? [] : _c, showFooterLine = options.showFooterLine, showFooterTitle = options.showFooterTitle, footerTitle = options.footerTitle, showPrinter = options.showPrinter, showDate = options.showDate, showPageNum = options.showPageNum;
var pageWidth = direction == 'vertical' ? width : height;
var pageHeight = direction == 'vertical' ? height : width;
var headerHeight = (showLogo || showHeaderTitle || showHeaderLine) ? 18 : 0;
var footerHeight = 5;
var titleHeight = 3.4;
var subTitleHeight = showSubTitle ? 6 : 0;
var subTitleMarginTop = showSubTitle ? 3 : 0;
var subTitleCount = subTitle.length;
var pageNumWidth = 12;
var lineHeight = 0.3;
var headerRect = { top: defaultTop, left: defaultLeft, width: pageWidth - defaultLeft - defaultRight, height: headerHeight };
var headerLineRect = { top: headerRect.top + headerRect.height + 2, left: headerRect.left, width: headerRect.width, height: showHeaderLine ? lineHeight : 0 };
var logoRect = { top: headerRect.top, left: headerRect.left, width: showLogo ? headerRect.height : 0, height: showLogo ? headerRect.height : 0, content: showLogo ? "<img src=\"./public/images/sanfu.png\"/>" : '' };
var headerTitleRect = { top: headerRect.top + (headerRect.height / 2 - 2), left: headerRect.left + logoRect.width + 5, width: headerRect.width - logoRect.width - 5, height: titleHeight, content: showHeaderTitle ? headerTitle : '' };
var footerRect = { top: pageHeight - defaultBottom - footerHeight, left: defaultLeft, width: pageWidth - defaultLeft - defaultRight, height: footerHeight };
var footerTitleRect = { top: footerRect.top - footerHeight, left: footerRect.left, width: footerRect.width, height: showFooterTitle ? footerHeight : 0, content: showFooterTitle ? footerTitle : '' };
var footerLineRect = { top: footerRect.top, left: footerRect.left, width: footerRect.width, height: showFooterLine ? lineHeight : 0 };
var printerRect = { top: footerRect.top + 2, left: footerRect.left, width: footerRect.width * 0.3, height: footerRect.height, content: showPrinter ? "\u6253\u5370\u8005:" + ((_b = userObj.user_name) !== null && _b !== void 0 ? _b : '') : '' };
var dateRect = { top: footerRect.top + 2, left: footerRect.left + printerRect.width, width: footerRect.width * 0.4, height: footerRect.height, content: showDate ? "\u6253\u5370\u65F6\u95F4:" + (0, moment_1.default)(new Date()).format('YYYY-MM-DD HH:mm:ss') : '' };
var numRect = { top: footerRect.top + 2, left: footerRect.left + printerRect.width + dateRect.width + (footerRect.width * 0.3 - pageNumWidth * 2) - 2, width: pageNumWidth, height: footerRect.height, content: showPageNum ? '第#页' : '' };
var sumRect = { top: footerRect.top + 2, left: numRect.left + numRect.width + 2, width: pageNumWidth, height: footerRect.height, content: showPageNum ? '共#页' : '' };
var bodyRect = { top: 5 + headerRect.top + headerRect.height, left: defaultLeft, width: pageWidth - defaultLeft - defaultRight, height: pageHeight - (headerRect.top + headerRect.height + 3) - (footerRect.height + defaultBottom + 3) - (showFooterTitle ? footerHeight : 0) };
var titleRect = { top: bodyRect.top, left: bodyRect.left, width: bodyRect.width, height: titleHeight, content: showTitle ? title : '', itemType: titleAllPrint ? 1 : 0 };
var subTitleRect = { top: titleRect.top + titleRect.height + subTitleMarginTop, left: bodyRect.left, width: bodyRect.width, height: subTitleHeight };
var subTitleRect1 = { top: subTitleRect.top, left: subTitleRect.left, width: subTitleRect.width / (subTitleCount || 1), height: subTitleCount > 0 ? subTitleRect.height : 0, content: showSubTitle ? subTitle[0] : undefined, itemType: subTitleAllPrint ? 1 : 0 };
var subTitleRect2 = { top: subTitleRect.top, left: subTitleCount <= 1 ? 0 : subTitleRect.left + (subTitleRect.width / subTitleCount), width: subTitleCount <= 1 ? 0 : subTitleRect.width / (subTitleCount || 1), height: subTitleCount > 0 ? subTitleRect.height : 0, content: showSubTitle ? subTitle[1] : undefined, itemType: subTitleAllPrint ? 1 : 0 };
var subTitleRect3 = { top: subTitleRect.top, left: subTitleCount <= 2 ? 0 : subTitleRect.left + (subTitleRect.width / subTitleCount * (subTitleCount - 1)), width: subTitleCount <= 2 ? 0 : subTitleRect.width / (subTitleCount || 1), height: subTitleCount > 0 ? subTitleRect.height : 0, content: showSubTitle ? subTitle[2] : undefined, itemType: subTitleAllPrint ? 1 : 0 };
var tableRect = { top: subTitleRect.top + subTitleRect1.height + 3, left: bodyRect.left, width: bodyRect.width, height: bodyRect.height - titleRect.height - subTitleRect.height - subTitleMarginTop - 9 };
return {
header: headerRect, logo: logoRect, headerLine: headerLineRect, headerTitle: headerTitleRect,
body: bodyRect, title: titleRect, subTitle: subTitleRect, subTitle1: subTitleRect1, subTitle2: subTitleRect2, subTitle3: subTitleRect3,
table: tableRect,
footer: footerRect, footerLine: footerLineRect, footerTitle: footerTitleRect,
printer: printerRect, date: dateRect, num: numRect, sum: sumRect
};
};
exports.buildFormTemplate = buildFormTemplate;
// 计算每行放的个最大数
var getMaxCount = function (templateWidth, pageWidth, spacing) {
var count = 1;
while ((count * templateWidth + (count - 1) * spacing) <= pageWidth) {
count++;
if (count > 50) {
break;
}
}
return (count - 1) || 1;
};
exports.getMaxCount = getMaxCount;
// 解析base64内容构造标签模板
var buildLabelTemplate = function (templateContent) {
var _a, _b, _c;
var getParams = function (dataStr) {
var start = dataStr.indexOf('(') + 1;
var end = dataStr.lastIndexOf(')');
var str = dataStr.substring(start, end);
var params = str.split(',');
return params.map(function (value) {
var left = value.startsWith('"') ? value.substring(1) : value;
var right = left.endsWith('"') ? left.substring(0, left.length - 1) : left;
return right.replaceAll('\\"', '"').replaceAll('\\r', '').replaceAll('\\n', '');
});
};
var getStyleParams = function (dataStr) {
var isNumber = function (value) {
return /^[0-9]+.?[0-9]*/.test(value);
};
var params = getParams(dataStr);
var id = isNumber(params[0]) ? Number(params[0]) : params[0];
var name = params[1];
var value = isNumber(params[2]) ? Number(params[2]) : params[2];
return [id, name, value];
};
var labelTemplate = {
tempTop: new type_1.LabelNumber(0, 297),
tempLeft: new type_1.LabelNumber(0, 210),
tempWidth: new type_1.LabelNumber(0, 210),
tempHeight: new type_1.LabelNumber(0, 297),
labelTexts: [],
labelHtmls: [],
labelImages: [],
labelTables: [],
labelBarCodes: [],
labelRects: [],
labelEllipses: [],
labelShapes: [],
labelLines: []
};
var value = (0, js_base64_1.decode)(templateContent);
var tempDatas = value.split('LODOP');
var exprs = [type_1.LabelCodeType.ADD_RECT, type_1.LabelCodeType.ADD_ELLIPSE, type_1.LabelCodeType.ADD_LINE];
var initData = tempDatas.find(function (data) { return data.includes(type_1.LabelCodeType.INITA); });
var initParams = getParams(initData);
var tempWidth = new type_1.LabelNumber(initParams[2]);
var tempHeight = new type_1.LabelNumber(initParams[3]);
labelTemplate.tempTop = new type_1.LabelNumber(initParams[0]);
labelTemplate.tempLeft = new type_1.LabelNumber(initParams[1]);
labelTemplate.tempWidth = tempWidth;
labelTemplate.tempHeight = tempHeight;
var _loop_1 = function (i) {
var data = tempDatas[i];
var j = i + 1;
var params = getParams(data);
// 添加文本
if (data.includes(type_1.LabelCodeType.ADD_TEXT)) {
var styles = [];
while (tempDatas[j] && tempDatas[j].includes(type_1.LabelCodeType.SET_STYLE)) {
var param = getStyleParams(tempDatas[j]);
styles.push(param);
j++;
}
var labelText = data.includes(type_1.LabelCodeType.ADD_TEXTA) ? {
fieldName: params[0],
top: new type_1.LabelNumber(params[1], tempHeight.number),
left: new type_1.LabelNumber(params[2], tempWidth.number),
width: new type_1.LabelNumber(params[3], tempWidth.number),
height: new type_1.LabelNumber(params[4], tempHeight.number),
content: params[5],
styles: styles
} : {
top: new type_1.LabelNumber(params[0], tempHeight.number),
left: new type_1.LabelNumber(params[1], tempWidth.number),
width: new type_1.LabelNumber(params[2], tempWidth.number),
height: new type_1.LabelNumber(params[3], tempHeight.number),
content: params[4],
styles: styles
};
labelTemplate.labelTexts.push(labelText);
}
// 添加富文本和图片
if (data.includes(type_1.LabelCodeType.ADD_HTML)) {
var styles = [];
while (tempDatas[j] && tempDatas[j].includes(type_1.LabelCodeType.SET_STYLE)) {
var param = getStyleParams(tempDatas[j]);
styles.push(param);
j++;
}
var fieldName = (_a = styles.find(function (_a) {
var _id = _a[0], name = _a[1];
return name === 'ItemName';
})) === null || _a === void 0 ? void 0 : _a[2];
var labelHtml = {
top: new type_1.LabelNumber(params[0], tempHeight.number),
left: new type_1.LabelNumber(params[1], tempWidth.number),
width: new type_1.LabelNumber(params[2], tempWidth.number),
height: new type_1.LabelNumber(params[3], tempHeight.number),
content: params[4],
fieldName: fieldName,
styles: styles
};
labelTemplate.labelHtmls.push(labelHtml);
}
// 添加图片
if (data.includes(type_1.LabelCodeType.ADD_IMAGE)) {
var styles = [];
while (tempDatas[j] && tempDatas[j].includes(type_1.LabelCodeType.SET_STYLE)) {
var param = getStyleParams(tempDatas[j]);
styles.push(param);
j++;
}
var fieldName = (_b = styles.find(function (_a) {
var _id = _a[0], name = _a[1];
return name === 'ItemName';
})) === null || _b === void 0 ? void 0 : _b[2];
var labelImage = {
top: new type_1.LabelNumber(params[0], tempHeight.number),
left: new type_1.LabelNumber(params[1], tempWidth.number),
width: new type_1.LabelNumber(params[2], tempWidth.number),
height: new type_1.LabelNumber(params[3], tempHeight.number),
url: params.slice(4).join(),
fieldName: fieldName,
styles: styles
};
labelTemplate.labelImages.push(labelImage);
}
// 添加表格
if (data.includes(type_1.LabelCodeType.ADD_TABLE)) {
var styles = [];
while (tempDatas[j] && tempDatas[j].includes(type_1.LabelCodeType.SET_STYLE)) {
var param = getStyleParams(tempDatas[j]);
styles.push(param);
j++;
}
var fieldName = (_c = styles.find(function (_a) {
var _id = _a[0], name = _a[1];
return name === 'ItemName';
})) === null || _c === void 0 ? void 0 : _c[2];
var labelTable = {
top: new type_1.LabelNumber(params[0], tempHeight.number),
left: new type_1.LabelNumber(params[1], tempWidth.number),
width: new type_1.LabelNumber(params[2], tempWidth.number),
height: new type_1.LabelNumber(params[3], tempHeight.number),
content: params.slice(4).join(),
fieldName: fieldName,
styles: styles
};
labelTemplate.labelTables.push(labelTable);
}
// 添加条码
if (data.includes(type_1.LabelCodeType.ADD_BARCODE)) {
var styles = [];
while (tempDatas[j] && tempDatas[j].includes(type_1.LabelCodeType.SET_STYLE)) {
var param = getStyleParams(tempDatas[j]);
styles.push(param);
j++;
}
var labelBarCode = data.includes(type_1.LabelCodeType.ADD_BARCODEA) ? {
fieldName: params[0],
top: new type_1.LabelNumber(params[1], tempHeight.number),
left: new type_1.LabelNumber(params[2], tempWidth.number),
width: new type_1.LabelNumber(params[3], tempWidth.number),
height: new type_1.LabelNumber(params[4], tempHeight.number),
codeType: params[5],
codeValue: params[6],
styles: styles
} : {
top: new type_1.LabelNumber(params[0], tempHeight.number),
left: new type_1.LabelNumber(params[1], tempWidth.number),
width: new type_1.LabelNumber(params[2], tempWidth.number),
height: new type_1.LabelNumber(params[3], tempHeight.number),
codeType: params[4],
codeValue: params[5],
styles: styles
};
labelTemplate.labelBarCodes.push(labelBarCode);
}
// 添加其它图形
if (data.includes(type_1.LabelCodeType.ADD_SHAPE)) {
var labelShape = {
shapeType: Number(params[0]),
top: new type_1.LabelNumber(params[1], tempHeight.number),
left: new type_1.LabelNumber(params[2], tempWidth.number),
width: new type_1.LabelNumber(params[3], tempWidth.number),
height: new type_1.LabelNumber(params[4], tempHeight.number),
lineStyle: Number(params[5]),
lineWidth: Number(params[6]),
fillColor: params[7]
};
labelTemplate.labelShapes.push(labelShape);
}
// 添加图形
var expr = exprs.find(function (expr) { return data.includes(expr); });
if (expr) {
var label = {
top: new type_1.LabelNumber(params[0], tempHeight.number),
left: new type_1.LabelNumber(params[1], tempWidth.number),
width: new type_1.LabelNumber(params[2], tempWidth.number),
height: new type_1.LabelNumber(params[3], tempHeight.number),
lineStyle: Number(params[4]),
lineWidth: Number(params[5])
};
switch (expr) {
case type_1.LabelCodeType.ADD_RECT:
labelTemplate.labelRects.push(label);
break;
case type_1.LabelCodeType.ADD_ELLIPSE:
labelTemplate.labelEllipses.push(label);
break;
case type_1.LabelCodeType.ADD_LINE:
labelTemplate.labelLines.push(label);
break;
default: break;
}
}
};
for (var i = 0; i < tempDatas.length; i++) {
_loop_1(i);
}
return labelTemplate;
};
exports.buildLabelTemplate = buildLabelTemplate;
// 设置模板内标签的数据,一页放一个模板
var setLabelTemplateData = function (labelTemplate, printData, baseUrl, tableColumn) {
var labelTexts = labelTemplate.labelTexts, labelHtmls = labelTemplate.labelHtmls, labelImages = labelTemplate.labelImages, labelBarCodes = labelTemplate.labelBarCodes, labelTables = labelTemplate.labelTables;
var labelDatas = [];
var _loop_2 = function (i) {
var tempTexts = [];
var tempHtmls = [];
var tempImages = [];
var tempTables = [];
var tempBarCodes = [];
var labelData = printData[i];
var fields = Object.keys(labelData);
labelTexts.forEach(function (text) {
var content = text.content;
var field = fields.find(function (field) { return field === text.fieldName; });
if (field) {
var data = labelData[field];
if (data) {
if (content.includes("[" + field + "]")) {
content = content.replaceAll("[" + field + "]", data);
}
else {
content = data;
}
}
}
tempTexts.push((0, tslib_1.__assign)((0, tslib_1.__assign)({}, text), { content: content }));
});
labelHtmls.forEach(function (html) {
var content = html.content;
var field = fields.find(function (field) { return field === html.fieldName; });
if (field) {
var data = labelData[field];
if (data) {
var info = data.info;
if (info) {
var url = baseUrl ? (baseUrl + info[0].addr) : info[0].addr;
content = "<img style=\"width:100%\" src=" + url + " alt=\"\" />";
}
else if (typeof data === 'string') {
content = data.replaceAll('text-decoration-line', 'text-decoration');
}
else {
content = data;
}
}
}
tempHtmls.push((0, tslib_1.__assign)((0, tslib_1.__assign)({}, html), { content: content }));
});
labelImages.forEach(function (image) {
var url = image.url;
var field = fields.find(function (field) { return field === image.fieldName; });
if (field) {
var data = labelData[field];
if (data) {
url = "<img style=\"width:100%\" src=" + data + " alt=\"\" />";
}
}
tempImages.push((0, tslib_1.__assign)((0, tslib_1.__assign)({}, image), { url: url }));
});
labelTables.forEach(function (table) {
var content = table.content;
var field = fields.find(function (field) { return field === table.fieldName; });
if (field) {
var data = labelData[field];
if (typeof data !== 'string' && tableColumn) {
content = buildTableData(tableColumn[field], data);
}
}
tempTables.push((0, tslib_1.__assign)((0, tslib_1.__assign)({}, table), { content: content }));
});
labelBarCodes.forEach(function (barCode) {
var codeValue = barCode.codeValue;
var field = fields.find(function (field) { return field === barCode.fieldName; });
if (field) {
var data = labelData[field];
if (data) {
codeValue = data;
}
}
tempBarCodes.push((0, tslib_1.__assign)((0, tslib_1.__assign)({}, barCode), { codeValue: codeValue }));
});
labelDatas.push([
(0, tslib_1.__assign)((0, tslib_1.__assign)({}, labelTemplate), { labelTexts: tempTexts, labelHtmls: tempHtmls, labelTables: tempTables, labelBarCodes: tempBarCodes })
]);
};
for (var i = 0; i < printData.length; i++) {
_loop_2(i);
}
return labelDatas;
};
exports.setLabelTemplateData = setLabelTemplateData;
// 设置模板内标签的数据,一页放多个模板
var setLabelTemplateDataWithArrange = function (labelTemplate, printData, printerParam, countOfPage, countOfColumn, baseUrl) {
var labelCount = printData.length;
var tempWidth = labelTemplate.tempWidth, tempHeight = labelTemplate.tempHeight, labelTexts = labelTemplate.labelTexts, labelHtmls = labelTemplate.labelHtmls, labelImages = labelTemplate.labelImages, labelBarCodes = labelTemplate.labelBarCodes, labelRects = labelTemplate.labelRects, labelEllipses = labelTemplate.labelEllipses, labelLines = labelTemplate.labelLines, labelShapes = labelTemplate.labelShapes;
var colSpacing = printerParam.colSpacing, rowSpacing = printerParam.rowSpacing;
var pageParams = [];
var _loop_3 = function (i) {
var labelData = printData[i];
var tempTexts = [];
var tempHtmls = [];
var tempImages = [];
var tempBarCodes = [];
var tempShapes = [];
var tempRects = [];
var tempEllipses = [];
var tempLines = [];
var pageIndex = Math.floor(i / countOfPage);
var column = i % countOfColumn;
var row = Math.floor(i % countOfPage / countOfColumn);
var left = tempWidth.number * column + column * colSpacing;
var top = tempHeight.number * row + row * rowSpacing;
var fields = Object.keys(labelData);
labelTexts.forEach(function (text) {
var content = text.content;
var field = fields.find(function (field) { return field === text.fieldName; });
if (field) {
var data = labelData[field];
if (data) {
if (content.includes("[" + field + "]")) {
content = content.replaceAll("[" + field + "]", data);
}
else {
content = data;
}
}
}
var textLeft = new type_1.LabelNumber(left + text.left.number);
var textTop = new type_1.LabelNumber(top + text.top.number);
tempTexts.push((0, tslib_1.__assign)((0, tslib_1.__assign)({}, text), { content: content, left: textLeft, top: textTop }));
});
labelHtmls.forEach(function (html) {
var content = html.content;
var field = fields.find(function (field) { return field === html.fieldName; });
if (field) {
var data = labelData[field];
if (data) {
var info = data.info;
if (info) {
var url = baseUrl ? (baseUrl + info[0].addr) : info[0].addr;
content = "<img style=\"width:100%\" src=" + url + " alt=\"\" />";
}
else if (typeof data === 'string') {
content = data.replaceAll('text-decoration-line', 'text-decoration');
}
else {
content = data;
}
}
}
var htmlLeft = new type_1.LabelNumber(left + html.left.number);
var htmlTop = new type_1.LabelNumber(top + html.top.number);
tempHtmls.push((0, tslib_1.__assign)((0, tslib_1.__assign)({}, html), { content: content, left: htmlLeft, top: htmlTop }));
});
labelImages.forEach(function (image) {
var url = image.url;
var field = fields.find(function (field) { return field === image.fieldName; });
if (field) {
var data = labelData[field];
if (url) {
url = "<img style=\"width:100%\" src=" + data + " alt=\"\" />";
}
}
var imageLeft = new type_1.LabelNumber(left + image.left.number);
var imageTop = new type_1.LabelNumber(top + image.top.number);
tempImages.push((0, tslib_1.__assign)((0, tslib_1.__assign)({}, image), { url: url, left: imageLeft, top: imageTop }));
});
labelBarCodes.forEach(function (barCode) {
var codeValue = barCode.codeValue;
var field = fields.find(function (field) { return field === barCode.fieldName; });
if (field) {
var data = labelData[field];
if (data) {
codeValue = data;
}
}
var barCodeLeft = new type_1.LabelNumber(left + barCode.left.number);
var barCodeTop = new type_1.LabelNumber(top + barCode.top.number);
tempBarCodes.push((0, tslib_1.__assign)((0, tslib_1.__assign)({}, barCode), { codeValue: codeValue, left: barCodeLeft, top: barCodeTop }));
});
labelShapes.forEach(function (shape) {
var shapeLeft = new type_1.LabelNumber(left + shape.left.number);
var shapeTop = new type_1.LabelNumber(top + shape.top.number);
tempShapes.push((0, tslib_1.__assign)((0, tslib_1.__assign)({}, shape), { left: shapeLeft, top: shapeTop }));
});
labelEllipses.forEach(function (ellipse) {
var ellipseLeft = new type_1.LabelNumber(left + ellipse.left.number);
var ellipseTop = new type_1.LabelNumber(top + ellipse.top.number);
tempEllipses.push((0, tslib_1.__assign)((0, tslib_1.__assign)({}, ellipse), { left: ellipseLeft, top: ellipseTop }));
});
labelRects.forEach(function (rect) {
var rectLeft = new type_1.LabelNumber(left + rect.left.number);
var rectTop = new type_1.LabelNumber(top + rect.top.number);
tempRects.push((0, tslib_1.__assign)((0, tslib_1.__assign)({}, rect), { left: rectLeft, top: rectTop }));
});
labelLines.forEach(function (line) {
var lineLeft = new type_1.LabelNumber(left + line.left.number);
var lineTop = new type_1.LabelNumber(top + line.top.number);
tempLines.push((0, tslib_1.__assign)((0, tslib_1.__assign)({}, line), { left: lineLeft, top: lineTop }));
});
pageParams.push([pageIndex, (0, tslib_1.__assign)((0, tslib_1.__assign)({}, labelTemplate), { tempTop: new type_1.LabelNumber(top), tempLeft: new type_1.LabelNumber(left), labelTexts: tempTexts, labelHtmls: tempHtmls, labelBarCodes: tempBarCodes, labelShapes: tempShapes, labelEllipses: tempEllipses, labelRects: tempRects, labelLines: tempLines })]);
};
for (var i = 0; i < labelCount; i++) {
_loop_3(i);
}
var pageIndexs = Array.from(new Set(pageParams.map(function (rect) { return rect[0]; })));
var labelDatas = [];
for (var i = 0; i < pageIndexs.length; i++) {
var pageIndex = pageIndexs[i];
var tempDatas = [];
for (var j = 0; j < pageParams.length; j++) {
var pageParam = pageParams[j];
var pageTemplate = pageParam[1];
if (pageParam[0] === pageIndex) {
tempDatas.push(pageTemplate);
}
}
labelDatas.push(tempDatas);
}
return labelDatas;
};
exports.setLabelTemplateDataWithArrange = setLabelTemplateDataWithArrange;
var buildTableData = function (columnInfo, rowDatas) {
var _a, _b, _c;
var columns = columnInfo.columns, statistics = columnInfo.statistics;
columns.forEach(function (column) {
var stastic = statistics === null || statistics === void 0 ? void 0 : statistics.find(function (stastic) { return stastic.field === column.name; });
column.statistics = stastic === null || stastic === void 0 ? void 0 : stastic.property;
});
var div = document.createElement('div');
var table = document.createElement('table');
table.setAttribute('border', '1');
table.setAttribute('cellSpacing', '0');
table.setAttribute('width', '100%');
table.setAttribute('style', 'border-collapse:collapse');
table.setAttribute('bordercolor', '#333333');
var thead = document.createElement('thead');
var tr = document.createElement('tr');
for (var i = 0; i < columns.length; i++) {
var th = document.createElement('th');
var column = columns[i];
th.textContent = column.label;
tr.appendChild(th);
}
thead.appendChild(tr);
table.appendChild(thead);
var tbody = document.createElement('tbody');
for (var i = 0; i < rowDatas.length; i++) {
var row = rowDatas[i];
var tr_1 = document.createElement('tr');
for (var j = 0; j < columns.length; j++) {
var td = document.createElement('td');
var column = columns[j];
td.textContent = row[column.name];
tr_1.appendChild(td);
}
tbody.appendChild(tr_1);
}
table.appendChild(tbody);
if (statistics) {
var tfoot = document.createElement('tfoot');
var maxRow = (_b = (_a = statistics.map(function (item) { return item.property.length; }).sort(function (a, b) { return b - a; })) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : 0;
for (var i = 0; i < maxRow; i++) {
var tr_2 = document.createElement('tr');
for (var j = 0; j < columns.length; j++) {
var column = columns[j];
var statistic = (_c = column.statistics) === null || _c === void 0 ? void 0 : _c[i];
var td = document.createElement('td');
if (statistic) {
td.textContent = statistic.label;
td.setAttribute('format', statistic.format);
td.setAttribute('tdata', statistic.tdata);
}
tr_2.appendChild(td);
}
tfoot.appendChild(tr_2);
}
table.appendChild(tfoot);
}
div.appendChild(table);
return div.innerHTML;
};
var buildTableHtml = function (tableStyle, tableColumns, tableHeadRows, tableData, range, isLastTask) {
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 > tableStyle.tableWidth) {
idx = i;
break;
}
}
var columns = showColumns.slice(0, idx);
var hasStatistic = columns.some(function (column) { return column.statistic != 'none'; });
var wrap = document.createElement('div');
var div = document.createElement('div');
div.setAttribute('style', "text-align: center; overflow: hidden");
var table = document.createElement('table');
table.setAttribute('border', tableStyle.lineWidth.toString());
table.setAttribute('cellSpacing', '0');
table.setAttribute('style', "font-size: 13px; width: " + width + "px; border-collapse:collapse; margin: 0 auto; border: " + tableStyle.borderWidth + "px solid; table-layout: fixed;");
table.setAttribute('bordercolor', '#333333');
var colgroup = document.createElement('colgroup');
columns.forEach(function (column) {
var col = document.createElement('col');
if (column.width) {
col.style.setProperty('width', column.width * 3.78 + "px");
}
colgroup.appendChild(col);
});
table.appendChild(colgroup);
var thead = document.createElement('thead');
thead.setAttribute('style', 'display: table-header-group');
var _loop_4 = 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.setAttribute('colspan', item.colspan.toString());
th.setAttribute('rowspan', item.rowspan.toString());
th.setAttribute('style', 'white-space: pre-line; word-wrap: break-word');
tr.appendChild(th);
});
thead.appendChild(tr);
};
for (var i = 0; i < tableHeadRows.length; i++) {
_loop_4(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 ((0, tslib_1.__assign)((0, tslib_1.__assign)({}, item), { rowSpans: {} })); });
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;
td.setAttribute('style', "white-space: pre-line; word-wrap: break-word; text-align: " + (column.align || 'left') + "; padding: " + tableStyle.rowPadding * 3.78 + "px " + tableStyle.colPadding * 3.78 + "px ; ");
tr.appendChild(td);
}
tbody.appendChild(tr);
}
var dataTypeArr = ['number', 'static-number', 'input-number', 'progress', 'static-progress'];
if (isLastTask && !tableStyle.countAllPage && hasStatistic) {
var tr = document.createElement('tr');
var _loop_5 = 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.setAttribute('style', "white-space: pre-line; word-wrap: break-word; text-align: " + (column.align || 'left'));
}
tr.appendChild(td);
};
for (var j = 0; j < columns.length; j++) {
_loop_5(j);
}
tbody.appendChild(tr);
}
table.appendChild(tbody);
if (tableStyle.countAllPage && hasStatistic) {
var tfoot = document.createElement('tfoot');
var tr_3 = 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.setAttribute('style', "white-space: pre-line; word-wrap: break-word; text-align: " + (column.align || 'left'));
}
tr_3.appendChild(td);
});
tfoot.appendChild(tr_3);
table.append(tfoot);
}
div.appendChild(table);
wrap.appendChild(div);
return wrap.innerHTML;
};
exports.buildTableHtml = buildTableHtml;
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;
};
var combineCell = function (arr, combinedColumns) {
var _a, _b;
for (var _i = 0, combinedColumns_1 = combinedColumns; _i < combinedColumns_1.length; _i++) {
var _c = combinedColumns_1[_i], name = _c.name, _d = _c.combinedNull, combinedNull = _d === void 0 ? true : _d;
var i = 0;
while (i < arr.length) {
if (arr[i].rowSpans[name] !== 0) {
arr[i].rowSpans[name] = 1;
}
var j = i + 1;
while (j < arr.length &&
(0, lodash_1.isEqual)(combinedNull ? (0, tpl_builtin_1.resolveVariable)(name, arr[i]) : (_a = (0, tpl_builtin_1.resolveVariable)(name, arr[i])) !== null && _a !== void 0 ? _a : Math.random(), combinedNull ? (0, tpl_builtin_1.resolveVariable)(name, arr[j]) : (_b = (0, tpl_builtin_1.resolveVariable)(name, arr[j])) !== null && _b !== void 0 ? _b : Math.random())) {
arr[i].rowSpans[name]++;
arr[j].rowSpans[name] = 0;
j++;
}
i = j;
}
}
return arr;
};
//# sourceMappingURL=./utils/print/util.js.map