fastlion-amis
Version:
一种MIS页面生成工具
525 lines (524 loc) • 25.4 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.setLabelTemplateDataWithArrange = exports.setLabelTemplateData = exports.buildLabelTemplate = exports.getMaxCount = void 0;
var tslib_1 = require("tslib");
var js_base64_1 = require("js-base64");
var type_1 = require("./type");
// 计算每行放的个最大数
var getMaxCount = function (templateWidth, pageWidth, spacing) {
var count = 1;
while ((count * templateWidth + (count - 1) * spacing) <= pageWidth) {
count++;
if (count > 50) {
break;
}
}
return count - 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;
};
//# sourceMappingURL=./utils/print/util.js.map