UNPKG

myprint-design

Version:

操作简单,组件丰富的一站式打印解决方案打印设计器

1,017 lines (1,014 loc) 36.9 kB
import { elementTypeContainerList, fontMap } from '../constants/common.mjs'; import { to, _defaultVal, mitt, generateUUID, parse, stringify } from './utils.mjs'; import { reactive } from 'vue-demi'; import { formatDate } from './timeUtil.mjs'; import { unit2px, px2unit, unit2unit } from './devicePixelRatio.mjs'; import { arrayRemove } from './arrays.mjs'; import { useAppStoreHook } from '../stores/app.mjs'; import { updatePanel } from '../plugins/moveable/moveable.mjs'; import { findTableHeadDeep, recursionHandleTableHead, handleTableCellInitHeight, findUpperCell } from './table/dataTable.mjs'; import MathCalc, { _defaultNum } from './numberUtil.mjs'; import { isNil, isEmpty } from 'lodash'; function displayDesign(element) { return !displayPreview(element); } function displayPreview(element) { return element.runtimeOption.previewIs; } function setCurrentPanel(panel) { useAppStoreHook().currentPanel = panel; useAppStoreHook().lastPageUnit = panel.pageUnit; } function getCurrentPanel(panel) { return panel != null ? panel : useAppStoreHook().currentPanel; } function setPreviewData(previewData) { useAppStoreHook().previewData = previewData == null ? [] : previewData; } function getPreviewData() { return useAppStoreHook().previewData == null ? [] : useAppStoreHook().previewData; } function setProvider(provider) { if (provider == null) { to({}, useAppStoreHook().provider); } else { to(provider, useAppStoreHook().provider); } } function getProvider() { return useAppStoreHook().provider == null ? {} : useAppStoreHook().provider; } function getRecursionParentPanel(element) { const panel = element.runtimeOption.parent; if (panel == null) { return null; } if (panel.pageUnit != null) { return panel; } return getRecursionParentPanel(panel); } function getCurrentPanelUnit(panel) { return _defaultVal(getCurrentPanel(panel).pageUnit, "px"); } function setCurrentElement(element) { useAppStoreHook().currentElement = element; mitt.emit("changeElement"); } function valueUnit(value, panel) { return value + getCurrentPanel(panel).pageUnit; } function widthValueUnit(element) { return element.runtimeOption.workEnvironment == "DataTable" ? "100%" : element.width + getCurrentPanel(element.runtimeOption.parent).pageUnit; } function heightValueUnit(element) { return element.runtimeOption.workEnvironment == "DataTable" ? "100%" : element.height + getCurrentPanel().pageUnit; } function getPositionX(element) { if (element.runtimeOption.parent.x) { return MathCalc.sum(element.x, element.runtimeOption.parent.x); } return element.x; } function getPositionY(element) { if (element.runtimeOption.parent.y) { return element.y + element.runtimeOption.parent.y; } return element.y; } function width(element) { if (["DottedVerticalLine", "VerticalLine"].includes(element.type)) { return element.option.borderWidth + 0.6; } return element.width; } function height(element) { if (["DottedHorizontalLine", "HorizontalLine"].includes(element.type)) { return element.option.borderWidth + 2; } return element.height; } function clearPanel(panel) { panel.pageHeader = void 0; panel.pageFooter = void 0; panel.elementList = []; panel.auxiliaryLineList = []; } function initPanel(panel, provider) { panel.name == null && (panel.name = "\u65B0\u6A21\u7248"); panel.width == null && (panel.width = _defaultNum(provider.value.width, 210)); panel.height == null && (panel.height = _defaultNum(provider.value.height, 297)); panel.pageSize == null && (panel.pageSize = _defaultVal(provider.value.pageSize, "A4")); panel.fontSizeUnit == null && (panel.fontSizeUnit = _defaultVal(provider.value.fontSizeUnit, "px")); panel.pageUnit == null && (panel.pageUnit = _defaultVal(provider.value.pageUnit, "mm")); panel.dragSnapPanelIs == null && (panel.dragSnapPanelIs = provider.value.dragSnapPanelIs); panel.dragSnapIs == null && (panel.dragSnapIs = provider.value.dragSnapIs); panel.elementList == void 0 && (panel.elementList = []); panel.groupList == null && (panel.groupList = []); panel.auxiliaryLineList == null && (panel.auxiliaryLineList = []); } function none(element) { if (element == null) { return; } element.runtimeOption.status = "NONE"; if (element.elementList != null) { for (let childrenElement of element.elementList) { none(childrenElement); } } } function handle(element) { element.runtimeOption.status = "HANDLE"; } function recursionForElement(container, callback) { recursionElement(container, callback); recursionElement(container.pageFooter, callback); recursionElement(container.pageHeader, callback); } function recursionElement(container, callback) { if (container?.elementList?.length > 0) { for (let elementTmp of container.elementList) { callback(elementTmp); recursionElement(elementTmp, callback); } } } function innerElementIs(point, element, parentElement) { return !(elementTypeContainerList.includes(element.type) && elementTypeContainerList.includes(parentElement.type)) && point.x >= parentElement.runtimeOption.x && point.x <= parentElement.runtimeOption.x + parentElement.runtimeOption.width && point.y >= parentElement.runtimeOption.y && point.y <= parentElement.runtimeOption.y + parentElement.runtimeOption.height; } function parentInitElement(panel, parent, element, index) { initElement(panel, element, index); installParentElement(parent, element); if (element.elementList?.length > 0) { for (let i = 0; i < element.elementList.length; i++) { let elementTmp = element.elementList[i]; parentInitElement(panel, element, elementTmp, i); } } } function initElement(panel, element, index) { if (element == null) { return; } if (element.option == null) { element.option = {}; } if (element.runtimeOption == null) { element.runtimeOption = {}; } element.runtimeOption.index = index; element.runtimeOption.status = "NONE"; let initWidth = 0, initHeight = 0, initBorderWidth = 0; if (!element.id) { element.id = generateUUID(); switch (element.type) { case "Text": initWidth = 30; initHeight = 8; break; case "DataTable": initWidth = 200; initHeight = 30; if (element.option.tableHeightType == null) { element.option.tableHeightType = "AUTO"; } if (element.tableBodyList == void 0) { let indexView = { type: "Text", field: "autoIncrement", width: unit2unit("mm", getCurrentPanelUnit(), 10), label: "\u5E8F\u53F7", height: element.columnList[0].height, option: { disableSort: 1, disableEnable: 0, enable: 1, formatter: "{{autoIncrement}}" } }; indexView.columnBody = { type: "Text", height: indexView.height, data: "1", option: { ...indexView.option } }; element.columnList.unshift(indexView); const deep = findTableHeadDeep(element.columnList, 0) + 1; const tableHeadListList = [...Array.from({ length: deep }, (_) => [])]; recursionHandleTableHead(tableHeadListList, element.columnList, 0); handleTableCellInitHeight(tableHeadListList); element.tableHeadList = tableHeadListList; element.tableBodyList = [[]]; const floorHeaderList = tableHeadListList[deep - 1]; let maxHeadHeight = -1, maxBodyHeight = -1; for (let i = 0; i < floorHeaderList.length; i++) { let tableHeadCellElement = floorHeaderList[i]; if (tableHeadCellElement == null) { tableHeadCellElement = findUpperCell(tableHeadListList, i, deep - 1); } if (tableHeadCellElement == null) { continue; } if (tableHeadCellElement.columnBody == void 0) { tableHeadCellElement.columnBody = { height: MathCalc.div(tableHeadCellElement.height, tableHeadCellElement.rowspan), data: tableHeadCellElement.data, type: "Text", option: tableHeadCellElement.option }; } if (tableHeadCellElement.columnBody.type == null) { tableHeadCellElement.columnBody.type = "Text"; } if (tableHeadCellElement.columnBody.data == null) { tableHeadCellElement.columnBody.data = tableHeadCellElement.data; } if (!tableHeadCellElement.columnBody.height) { tableHeadCellElement.columnBody.height = MathCalc.div(tableHeadCellElement.height, tableHeadCellElement.rowspan); } tableHeadCellElement.columnBody.width = tableHeadCellElement.width; tableHeadCellElement.type = "Text"; tableHeadCellElement.data = tableHeadCellElement.label; tableHeadCellElement.columnBody.rowspan = 1; tableHeadCellElement.columnBody.colspan = 1; element.tableBodyList[0].push(tableHeadCellElement.columnBody); if (maxHeadHeight < tableHeadCellElement.height) { maxHeadHeight = tableHeadCellElement.height; } if (maxBodyHeight < tableHeadCellElement.columnBody.height) { maxBodyHeight = tableHeadCellElement.columnBody.height; } tableHeadCellElement.columnBody = void 0; } if (element.option.tableHeightType == "AUTO") { element.height = maxHeadHeight + maxBodyHeight; } } break; case "Image": initWidth = 30; initHeight = 30; break; case "Rect": initWidth = 30; initHeight = 30; initBorderWidth = px2unit(1); break; case "HorizontalLine": case "DottedHorizontalLine": initWidth = 30; initBorderWidth = px2unit(1); initHeight = px2unit(initBorderWidth + 3); break; case "VerticalLine": case "DottedVerticalLine": initHeight = 30; initBorderWidth = px2unit(1); initWidth = px2unit(initBorderWidth + 3); break; case "SvgPolygonLine": case "SvgBezierCurve": case "SvgBezierCurveThree": case "SvgLine": if (element.data) { const data = JSON.parse(element.data); const points = data.points; const controlPoints = data.controlPoints; const dataJson = {}; if (points) { for (let point of points) { point.x = unit2px(point.x, panel); point.y = unit2px(point.y, panel); } dataJson.points = points; } if (controlPoints) { for (let point of controlPoints) { point.x = unit2px(point.x, panel); point.y = unit2px(point.y, panel); } dataJson.controlPoints = controlPoints; } element.data = JSON.stringify(dataJson); } break; } } if (element.type == "Text" || element.type == "TextTime") { if (!element.contentType) { element.contentType = "Text"; } } if (element.type == "DataTable") { for (let i = 0; i < element.tableHeadList.length; i++) { const headList = element.tableHeadList[i]; for (let j = 0; j < headList.length; j++) { const column = headList[j]; if (column) { parentInitElement(panel, element, column, i); column.runtimeOption.workEnvironment = "DataTable"; column.runtimeOption.cellType = "Head"; } } } for (let i = 0; i < element.tableBodyList.length; i++) { const bodyList = element.tableBodyList[i]; for (let j = 0; j < bodyList.length; j++) { parentInitElement(panel, element, bodyList[j], element.tableHeadList.length); bodyList[j].runtimeOption.workEnvironment = "DataTable"; bodyList[j].runtimeOption.cellType = "Body"; } } if (!element.statisticsList) { element.statisticsList = []; } for (let i = 0; i < element.statisticsList.length; i++) { const statisticsList = element.statisticsList[i]; for (let j = 0; j < statisticsList.length; j++) { parentInitElement(panel, element, statisticsList[j], element.tableHeadList.length); statisticsList[j].runtimeOption.workEnvironment = "DataTable"; statisticsList[j].runtimeOption.cellType = "Statistics"; } } } if (["Text", "TextTime", "PageNum", "DataTable"].includes(element.type)) { if (!element.option.fontFamily) { element.option.fontFamily = "heiti"; } if (element.option.fontSize == null) { element.option.fontSize = 13; } } if (element.width == null) { element.width = initWidth; } if (element.height == null) { element.height = initHeight; } if (element.option.opacity == null) { element.option.opacity = 1; } if (!element.option.rotate) { element.option.rotate = 0; } if (element.option.padding == null) { element.option.padding = {}; } element.runtimeOption.init = {}; element.runtimeOption.init.runtimeOption = {}; element.runtimeOption.width = unit2px(element.width, panel); element.runtimeOption.height = unit2px(element.height, panel); element.runtimeOption.x = unit2px(element.x, panel); element.runtimeOption.y = unit2px(element.y, panel); element.runtimeOption.rotate = element.option.rotate; element.runtimeOption.init.x = element.runtimeOption.x; element.runtimeOption.init.y = element.runtimeOption.y; element.runtimeOption.init.width = element.runtimeOption.width; element.runtimeOption.init.height = element.runtimeOption.height; element.runtimeOption.init.runtimeOption.rotate = element.runtimeOption.rotate; if (element.option.margin == null) { element.option.margin = {}; } } function elementGroup(htmlElementList) { const panel = getCurrentPanel(); const idList = flatIdList(htmlElementList); const index = findGroup(idList); for (let htmlElementListElement of htmlElementList) { htmlElementListElement.element.groupIs = true; } if (index >= 0) { panel.groupList[index] = idList; } else { panel.groupList.push(idList); } } function groupListToMap(groupList) { const map = {}; for (let i = 0; i < groupList.length; i++) { for (let groupListElement of groupList[i]) { map[groupListElement] = i; } } return map; } function elementUngroup(htmlElementList) { const panel = getCurrentPanel(); const idList = flatIdList(htmlElementList); const index = findGroup(idList); for (let htmlElementListElement of htmlElementList) { htmlElementListElement.element.groupIs = false; } if (index >= 0) { panel.groupList.splice(index, 1); } } function elementDown(elementList, layer) { elementList.sort(function(a, b) { return a.runtimeOption.index - b.runtimeOption.index; }); for (let myElement of elementList) { let newLayer = myElement.runtimeOption.index - layer; const parentElementList = myElement.runtimeOption.parent.elementList; if (newLayer < 0) { newLayer = 0; } const tmp = parentElementList[myElement.runtimeOption.index]; for (let i = myElement.runtimeOption.index; i > newLayer; i--) { parentElementList[i] = parentElementList[i - 1]; parentElementList[i].runtimeOption.index = i; } parentElementList[newLayer] = tmp; tmp.runtimeOption.index = newLayer; } updatePanel(elementList); } function elementUp(elementList, layer) { elementList.sort(function(a, b) { return a.runtimeOption.index - b.runtimeOption.index; }); for (let myElement of elementList) { let newLayer = myElement.runtimeOption.index + layer; const parentElementList = myElement.runtimeOption.parent.elementList; if (newLayer > parentElementList.length - 1) { newLayer = parentElementList.length - 1; } const tmp = parentElementList[myElement.runtimeOption.index]; for (let i = myElement.runtimeOption.index; i < newLayer; i++) { parentElementList[i] = parentElementList[i + 1]; parentElementList[i].runtimeOption.index = i; } parentElementList[newLayer] = tmp; tmp.runtimeOption.index = newLayer; } updatePanel(elementList); } function flatIdList(htmlElementList) { const idList = []; for (let htmlElementListElement of htmlElementList) { if (Array.isArray(htmlElementListElement)) { for (let htmlElementListElementElement of htmlElementListElement) { idList.push(htmlElementListElementElement.element.id); } } else { idList.push(htmlElementListElement.element.id); } } return idList; } function findGroup(idList) { const panel = getCurrentPanel(); for (let i = 0; i < panel.groupList.length; i++) { const groupListKey = panel.groupList[i]; if (groupListKey.some((item) => { return idList.includes(item); })) { return i; } } return -1; } function element2PreviewWrapper(element) { const previewWrapper = parse(stringify(element, "parent", "target", "elementList", "previewWrapperList", "nestColumnList"), reactive({})); previewWrapper.id = generateUUID(); previewWrapper.heightIs = true; previewWrapper.runtimeOption.parent = element.runtimeOption.parent; previewWrapper.runtimeOption.previewIs = true; if (element.elementList != null) { previewWrapper.previewWrapperList = []; for (let myElement of element.elementList) { previewWrapper.previewWrapperList.push(element2PreviewWrapper(myElement)); } } if (element.tableHeadList != null && element.tableHeadList.length > 0) { for (let i = 0; i < element.tableHeadList.length; i++) { const rowList = element.tableHeadList[i]; for (let j = 0; j < rowList.length; j++) { if (rowList[j] == null) { continue; } previewWrapper.tableHeadList[i][j].runtimeOption.parent = rowList[j].runtimeOption.parent; } } } if (element.tableBodyList != null) { for (let i = 0; i < element.tableBodyList.length; i++) { const rowList = element.tableBodyList[i]; for (let j = 0; j < rowList.length; j++) { if (rowList[j] == null) { continue; } previewWrapper.tableBodyList[i][j].runtimeOption.parent = rowList[j].runtimeOption.parent; } } } if (element.statisticsList != null) { for (let i = 0; i < element.statisticsList.length; i++) { const rowList = element.statisticsList[i]; for (let j = 0; j < rowList.length; j++) { if (rowList[j] == null) { continue; } previewWrapper.statisticsList[i][j].runtimeOption.parent = rowList[j].runtimeOption.parent; } } } return previewWrapper; } function installPanelParentElement(panel) { installParentElement(panel, panel.pageHeader); installParentElement(panel, panel.pageFooter); installListParentElement(panel, panel.elementList); } function installListParentElement(parent, elementList) { for (let element of elementList) { installParentElement(parent, element); if (element.type == "DataTable") { for (let tableHeadListElement of element.tableHeadList) { for (let tableCellElement of tableHeadListElement) { installParentElement(element, tableCellElement); } } for (let tableHeadListElement of element.tableBodyList) { for (let tableCellElement of tableHeadListElement) { installParentElement(element, tableCellElement); } } for (let tableHeadListElement of element.statisticsList) { for (let tableCellElement of tableHeadListElement) { installParentElement(element, tableCellElement); } } } if (element.elementList != null) { installListParentElement(element, element.elementList); } } } function installParentElement(parent, element) { if (!element) { return; } element.runtimeOption.parent = parent; } function clearParent(element) { if (element.runtimeOption == null || element.runtimeOption.parent == void 0) { return; } element.runtimeOption.parent = void 0; } function addElement(panel, parent, element) { if (parent.elementList == null) { parent.elementList = []; } parent.elementList.push(element); initElement(panel, element, parent.elementList.length - 1); installParentElement(parent, element); } function removeElement(element) { if (element.runtimeOption.parent == null) { return; } if (element.runtimeOption.parent.elementList == null) { return; } handleElementType(element).handle( "PageHeader", () => element.runtimeOption.parent.pageHeader = void 0 ).handle( "PageFooter", () => element.runtimeOption.parent.pageFooter = void 0 ).end(() => { arrayRemove(element.runtimeOption.parent.elementList, element); }); } function handleElementType(element) { const handleList = []; const handlers = { handle(type, callback) { handleList.push(type); if (element.type === type) { callback(); } return handlers; }, pageHeader(callback) { handleList.push("PageHeader"); if (isPageHeader(element)) { callback(); } return handlers; }, pageFooter(callback) { handleList.push("PageFooter"); if (isPageFooter(element)) { callback(); } return handlers; }, end(callback) { if (!handleList.includes(element.type)) { callback(); } } }; return handlers; } function getFontSizeUnit(panel) { const currentPanel = getCurrentPanel(panel); return currentPanel.fontSizeUnit == null ? "px" : currentPanel.fontSizeUnit; } function defaultPreviewData(previewData) { return previewData == null || previewData.length == 0 ? [{}] : previewData; } function elementCommonPositionStyle(element) { const fontFamily = element.option.fontFamily || "heiti"; return { fontFamily: fontMap[fontFamily], fontSize: element.option.fontSize + getFontSizeUnit(getRecursionParentPanel(element)) }; } function elementBarCodeValueStyle(element, cssStyle) { if (cssStyle == null) { cssStyle = {}; } const option = element.option; const panel = element.runtimeOption.parent; let textDecoration = ""; if (option.underline) { textDecoration = textDecoration + "underline "; } if (option.lineThrough) { textDecoration = textDecoration + "line-through "; } option.opacity != null && (cssStyle.opacity = option.opacity); option.color && (cssStyle.color = option.color); option.background && (cssStyle.background = option.background); option.bold && (cssStyle.fontWeight = option.bold ? "bold" : "normal"); textDecoration && (cssStyle.textDecoration = textDecoration); option.italic && (cssStyle.fontStyle = option.italic ? "italic" : "normal"); if (option.textAlign) { cssStyle.justifyContent = option.textAlign; } if (option.lineBreak == 0) { cssStyle.whiteSpace = "nowrap"; } if (option.lineHeight != null) { cssStyle.lineHeight = valueUnit(option.lineHeight, panel); } if (option.verticalAlign) { cssStyle.alignItems = option.verticalAlign; } return cssStyle; } function elementCommonStyle(element, cssStyle) { if (cssStyle == null) { cssStyle = elementCommonPositionStyle(element); } const option = element.option; const panel = getRecursionParentPanel(element); let textDecoration = ""; if (option.underline) { textDecoration = textDecoration + "underline "; } if (option.lineThrough) { textDecoration = textDecoration + "line-through "; } option.opacity != null && (cssStyle.opacity = option.opacity); option.color && (cssStyle.color = option.color); option.background && (cssStyle.background = option.background); option.bold && (cssStyle.fontWeight = option.bold ? "bold" : "normal"); textDecoration && (cssStyle.textDecoration = textDecoration); option.italic && (cssStyle.fontStyle = option.italic ? "italic" : "normal"); if (option.textAlign) { cssStyle.justifyContent = option.textAlign; } if (option.lineBreak == 0) { cssStyle.whiteSpace = "nowrap"; } if (option.lineHeight != null) { cssStyle.lineHeight = valueUnit(option.lineHeight, panel); } if (option.verticalAlign) { cssStyle.alignItems = option.verticalAlign; } if (element.runtimeOption.workEnvironment == "DataTable") { let extHeight = 0; const parent = element.runtimeOption.parent; if (parent != null) { if (parent.option.borderAll) { if (element.rowspan > 1) { extHeight = element.rowspan - 1; } } if (parent.option.tableBodyHeightType == "FIXED") { cssStyle.height = element.runtimeOption.init.height + extHeight + "px"; cssStyle.maxHeight = element.runtimeOption.init.height + extHeight + "px"; cssStyle.overflow = "hidden"; } } else { } if (element.type == "Text" && element.contentType == "Barcode") { cssStyle.width = element.runtimeOption.width + "px"; cssStyle.maxWidth = element.runtimeOption.width + "px"; } } else { if (option.borderAll) { cssStyle.border = "1px solid black"; cssStyle.boxSizing = "border-box"; } } if (!isNil(option.borderRadius)) { cssStyle.borderRadius = valueUnit(option.borderRadius, panel); } if (!isNil(option.padding)) { if (option.padding.top) cssStyle.paddingTop = valueUnit(option.padding.top, panel); if (option.padding.bottom) cssStyle.paddingBottom = valueUnit(option.padding.bottom, panel); if (option.padding.left) cssStyle.paddingLeft = valueUnit(option.padding.left, panel); if (option.padding.right) cssStyle.paddingRight = valueUnit(option.padding.right, panel); } if (option.margin) { let subWidth = 0, subHeight = 0; if (option.margin.top) { cssStyle.marginTop = valueUnit(option.margin.top, panel); subHeight += unit2px(option.margin.top, panel); } if (option.margin.bottom) { cssStyle.marginBottom = valueUnit(option.margin.bottom, panel); subHeight += unit2px(option.margin.bottom, panel); } if (option.margin.left) { cssStyle.marginLeft = valueUnit(option.margin.left, panel); subWidth += unit2px(option.margin.left, panel); } if (option.margin.right) { cssStyle.marginRight = valueUnit(option.margin.right, panel); subWidth += unit2px(option.margin.right, panel); } if (subWidth > 0) { cssStyle.width = `calc(100% - ${subWidth}px)`; } if (subHeight > 0) { cssStyle.height = `calc(100% - ${subHeight}px)`; } } return cssStyle; } function isPageHeader(element) { return element != null && element.type == "PageHeader"; } function isPageFooter(element) { return element != null && element.type == "PageFooter"; } function formatter(element, variable = {}) { if (element.option.formatter) { let contentData; if (element.type == "TextTime") { const variableNames = extractVariableNames(element.option.formatter); if (variableNames == null || variableNames.length == 0) { contentData = "\u4E0D\u652F\u6301\u7684\u53D8\u91CF"; } else { try { variable[variableNames[0]] = formatDate(variable.nowDate ? variable.nowDate : new Date(), variableNames[0]); contentData = replaceVariables(element.option.formatter, variable); } catch (e) { contentData = "\u4E0D\u652F\u6301\u7684\u53D8\u91CF"; } } } else { contentData = replaceVariables(element.option.formatter, variable); } return contentData; } return element.data; } function extractVariableNames(template) { const regex = /\{\{(.+?)}}/g; const matches = template.match(regex); if (!matches) { return []; } return matches.map((match) => match.slice(2, -2)); } function parseVariables(str) { const regex = /\{\{(.*?)}}/g; const matches = str.match(regex); if (!matches) { return []; } const variables = []; for (const match of matches) { const parts = match.slice(2, -2).split("::"); const name = parts[0].trim(); const defaultValue = parts[1] ? parts[1].trim() : ""; variables.push({ name, defaultValue }); } return variables; } function replaceVariables(str, params) { let result = str; const variables = parseVariables(str); for (const variable of variables) { const { name, defaultValue } = variable; const value = params[name] !== void 0 ? params[name] : defaultValue; result = result.replace(new RegExp(isEmpty(defaultValue) ? `{{${name}}}` : `{{${name}::${defaultValue}}}`, "g"), value); } return result; } function changePageSize(val) { const panel = getCurrentPanel(); if (val) { panel.width = unit2unit("mm", panel.pageUnit, val.width); panel.height = unit2unit("mm", panel.pageUnit, val.height); } if (panel.pageHeader != null) { panel.pageHeader.width = unit2unit("mm", panel.pageUnit, panel.width); panel.pageHeader.runtimeOption.width = unit2px(panel.width); } if (panel.pageFooter != null) { panel.pageFooter.width = unit2unit("mm", panel.pageUnit, panel.width); panel.pageFooter.y = unit2unit("mm", panel.pageUnit, panel.height - panel.pageFooter.height); panel.pageFooter.runtimeOption.width = unit2px(panel.width); } mitt.emit("changePageSize"); } function changePageUnit() { const panel = getCurrentPanel(); panel.width = unit2unit(useAppStoreHook().lastPageUnit, panel.pageUnit, panel.width); panel.height = unit2unit(useAppStoreHook().lastPageUnit, panel.pageUnit, panel.height); const { pageHeader, pageFooter, pageUnit } = panel; for (let element of panel.elementList) { computedChangePageUnit(pageUnit, element); } if (pageHeader) { computedChangePageUnit(pageUnit, pageHeader); } if (pageFooter) { computedChangePageUnit(pageUnit, pageFooter); } useAppStoreHook().lastPageUnit = panel.pageUnit; } function computedChangePageUnit(pageUnit, element) { element.x = unit2unit(useAppStoreHook().lastPageUnit, pageUnit, element.x); element.y = unit2unit(useAppStoreHook().lastPageUnit, pageUnit, element.y); element.width = unit2unit(useAppStoreHook().lastPageUnit, pageUnit, element.width); element.height = unit2unit(useAppStoreHook().lastPageUnit, pageUnit, element.height); if (element.option.lineHeight != null) { element.option.lineHeight = unit2unit(useAppStoreHook().lastPageUnit, pageUnit, element.option.lineHeight); } if (element.elementList) { for (let myElement of element.elementList) { computedChangePageUnit(pageUnit, myElement); } } } function computedShapeBound(points) { let minX = points[0].x; let minY = points[0].y; let maxX = points[0].x; let maxY = points[0].y; for (let i = 1; i < points.length; i++) { let point = points[i]; minX = Math.min(minX, point.x); minY = Math.min(minY, point.y); maxX = Math.max(maxX, point.x); maxY = Math.max(maxY, point.y); } return { x: minX, y: minY, width: maxX - minX, height: maxY - minY }; } function setElementWidthHeightPx(width2, height2, element) { setElementWidthPx(width2, element); setElementHeightPx(height2, element); } function setElementWidthPx(width2, element) { element.runtimeOption.width = width2; element.runtimeOption.init.width = width2; element.width = px2unit(width2, getRecursionParentPanel(element)); } function setElementHeightPx(height2, element) { element.runtimeOption.height = height2; element.runtimeOption.init.height = height2; element.height = px2unit(height2, getRecursionParentPanel(element)); } function setElementOffsetWidthPx(offsetWidth, element) { element.runtimeOption.width = element.runtimeOption.init.width + offsetWidth; element.width = px2unit(element.runtimeOption.width, getRecursionParentPanel(element)); } function recursionUpdateCellParentWidth(columnElement, offsetX, panel) { columnElement.runtimeOption.width = columnElement.runtimeOption.init.width + offsetX; columnElement.width = px2unit(columnElement.runtimeOption.width, panel); if (columnElement.runtimeOption.cellParent != null) { recursionUpdateCellParentWidth(columnElement.runtimeOption.cellParent, offsetX, panel); } } function recursionUpdateCellParentInitWidth(columnElement) { columnElement.runtimeOption.init.width = columnElement.runtimeOption.width; if (columnElement.runtimeOption.cellParent != null) { recursionUpdateCellParentInitWidth(columnElement.runtimeOption.cellParent); } } function multipleElementGetValueList(props) { const elementList = useAppStoreHook().currentElement; const valueList = /* @__PURE__ */ new Set(); if (elementList.length == 0) { return [...valueList]; } for (let currentElementElement of elementList) { valueList.add(getNestedPropertyValue(currentElementElement, props)); } return [...valueList]; } function multipleElementGetValue(props) { const elementList = useAppStoreHook().currentElement; if (elementList.length == 0) { return void 0; } const firstValue = getNestedPropertyValue(elementList[0], props); for (let currentElementElement of elementList) { if (getNestedPropertyValue(currentElementElement, props) != firstValue) { return void 0; } } return firstValue; } function getNestedPropertyValue(obj, propertyPath) { const properties = propertyPath.split("."); let currentObj = obj; for (let prop of properties) { if (currentObj.hasOwnProperty(prop)) { currentObj = currentObj[prop]; } else { return void 0; } } return currentObj; } function setNestedPropertyValue(obj, propertyPath, value) { const properties = propertyPath.split("."); let currentObj = obj; for (let i = 0; i < properties.length - 1; i++) { if (!currentObj.hasOwnProperty(properties[i])) { currentObj[properties[i]] = {}; } currentObj = currentObj[properties[i]]; } currentObj[properties[properties.length - 1]] = value; } function multipleElementSetValue(props, val) { for (let currentElementElement of useAppStoreHook().currentElement) { setNestedPropertyValue(currentElementElement, props, val); if (currentElementElement.type == "DataTable") { for (let myElement of currentElementElement.tableHeadList) { for (let tableCellElement of myElement) { if (tableCellElement != null) { setNestedPropertyValue(tableCellElement, props, val); } } } for (let bodyRowList of currentElementElement.tableBodyList) { for (let myElement of bodyRowList) { setNestedPropertyValue(myElement, props, val); } } for (let bodyRowList of currentElementElement.statisticsList) { for (let myElement of bodyRowList) { setNestedPropertyValue(myElement, props, val); } } } } } function autoComputedPanelHeight() { const panel = getCurrentPanel(); if (panel.pageSize != "AutoHeight") { return; } if (panel.elementList == null || panel.elementList.length == 0) { return; } let maxY = 0; for (let myElement of panel.elementList) { const tmpY = myElement.y + myElement.height; maxY = Math.max(tmpY, maxY); } panel.height = maxY; } function getPrintRealHeight(panel) { panel = getCurrentPanel(panel); if (panel.pageSize == "AutoHeight") { return panel.runtimeOption.printRealHeight; } return panel.height; } export { addElement, autoComputedPanelHeight, changePageSize, changePageUnit, clearPanel, clearParent, computedShapeBound, defaultPreviewData, displayDesign, displayPreview, element2PreviewWrapper, elementBarCodeValueStyle, elementCommonPositionStyle, elementCommonStyle, elementDown, elementGroup, elementUngroup, elementUp, extractVariableNames, formatter, getCurrentPanel, getCurrentPanelUnit, getPositionX, getPositionY, getPreviewData, getPrintRealHeight, getProvider, getRecursionParentPanel, groupListToMap, handle, handleElementType, height, heightValueUnit, initElement, initPanel, innerElementIs, installListParentElement, installPanelParentElement, installParentElement, isPageFooter, isPageHeader, multipleElementGetValue, multipleElementGetValueList, multipleElementSetValue, none, parentInitElement, recursionElement, recursionForElement, recursionUpdateCellParentInitWidth, recursionUpdateCellParentWidth, removeElement, replaceVariables, setCurrentElement, setCurrentPanel, setElementHeightPx, setElementOffsetWidthPx, setElementWidthHeightPx, setElementWidthPx, setPreviewData, setProvider, valueUnit, width, widthValueUnit }; //# sourceMappingURL=elementUtil.mjs.map