UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

818 lines (817 loc) 48.1 kB
"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