UNPKG

myprint-design

Version:

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

1 lines 14.1 kB
{"version":3,"file":"memoryClipboardUtil.mjs","sources":["../../../../src/utils/memoryClipboardUtil.ts"],"sourcesContent":["import { getSelectElement, removeSelectElement, updatePanel } from '@myprint/design/plugins/moveable/moveable';\nimport { elementTypeContainerList, noCopyElementTypeList } from '@myprint/design/constants/common';\nimport { Container, MyElement, Point, SvgData } from '@myprint/design/types/entity';\nimport { addElement, getCurrentPanel } from '@myprint/design/utils/elementUtil';\nimport { parse, stringify } from '@myprint/design/utils/utils';\nimport { ActionEnum, record, Snapshot } from '@myprint/design/utils/historyUtil';\nimport { nextTick } from 'vue-demi';\nimport { px2unit } from '@myprint/design/utils/devicePixelRatio';\n\ntype memoryClipboardType = 'COPY' | 'CUT'\n\nfunction boundElement(newElement: MyElement, parentTmp: Container) {\n if (newElement.x + newElement.width > parentTmp.width) {\n newElement.x = parentTmp.width - newElement.width;\n }\n if (newElement.y + newElement.height > parentTmp.height) {\n newElement.y = parentTmp.height - newElement.height;\n }\n}\n\nfunction getIncr(clipboard: any, id: string) {\n let pasteNum = clipboard.pasteNumMap[id];\n if (pasteNum == undefined) {\n pasteNum = 1;\n clipboard.pasteNumMap[id] = pasteNum;\n }\n return pasteNum;\n}\n\nexport const memoryClipboardUtil = {\n clipboard: {\n data: [] as MyElement[],\n type: 'COPY' as memoryClipboardType,\n pasteNumMap: {}\n },\n\n copy() {\n const elementList = getSelectElement().filter(v => !noCopyElementTypeList.includes(v.type));\n if (elementList.length == 0) {\n return;\n }\n\n for (let myElement of this.clipboard.data) {\n myElement.runtimeOption.cutIngIs = undefined!;\n }\n this.clipboard.data = elementList;\n this.clipboard.type = 'COPY';\n this.clipboard.pasteNumMap = {};\n },\n\n cut() {\n const elementList = getSelectElement().filter(v => !noCopyElementTypeList.includes(v.type));\n if (elementList.length == 0) {\n return;\n }\n for (let myElement of this.clipboard.data) {\n myElement.runtimeOption.cutIngIs = undefined!;\n }\n for (let myElement of elementList) {\n myElement.runtimeOption.cutIngIs = true;\n }\n this.clipboard.data = elementList;\n this.clipboard.type = 'CUT';\n this.clipboard.pasteNumMap = {};\n },\n\n paste() {\n if (this.clipboard.data == undefined) {\n return;\n }\n\n // 判断当前选中的元素\n const elementList = getSelectElement();\n const newElementList: MyElement[] = [];\n const panel = getCurrentPanel();\n let parent: Container = panel;\n\n if (elementList.length == 1 && elementTypeContainerList.includes(elementList[0].type)) {\n parent = elementList[0];\n }\n\n let panelPasteNum = getIncr(this.clipboard, panel.id);\n let pasteNum = getIncr(this.clipboard, parent.id);\n\n let x = px2unit(10) * pasteNum;\n let y = px2unit(10) * pasteNum;\n // console.log(elementList);\n if (elementTypeContainerList.includes(parent.type)) {\n x = -this.clipboard.data[0].x + x;\n y = -this.clipboard.data[0].y + y;\n }\n let incrParent = false;\n let incrPanel = false;\n\n if (this.clipboard.type == 'CUT') {\n for (let myElement of this.clipboard.data) {\n myElement.runtimeOption.cutIngIs = undefined!;\n }\n removeSelectElement(this.clipboard.data);\n // 删除原来的\n this.clipboard.type = 'COPY';\n for (let datum of this.clipboard.data) {\n const parentTmp = elementTypeContainerList.includes(datum.type) ? getCurrentPanel() : parent;\n computePosition(datum, parentTmp);\n boundElement(datum, parentTmp);\n addElement(getCurrentPanel(), parentTmp, datum);\n newElementList.push(datum);\n }\n\n // 记录历史\n record(<Snapshot>{\n type: 'Element',\n action: ActionEnum.CUT,\n elementList: newElementList\n });\n } else {\n // 粘贴新的\n for (let i = 0; i < this.clipboard.data.length; i++) {\n let datum = this.clipboard.data[i];\n\n const parentTmp = elementTypeContainerList.includes(datum.type) ? getCurrentPanel() : parent;\n\n // 设置合适的位置\n const newElement = parse(stringify(datum, 'parent', 'target'), {} as MyElement);\n\n switch (newElement.type) {\n case 'SvgPolygonLine':\n case 'SvgBezierCurve':\n case 'SvgBezierCurveThree':\n case 'SvgLine':\n if (newElement.data) {\n const data = JSON.parse(newElement.data) as SvgData;\n const points = data.points as Point[];\n const controlPoints = data.controlPoints as Point[];\n const dataJson = {} as SvgData;\n if (points) {\n for (let point of points) {\n point.x = px2unit(point.x, panel);\n point.y = px2unit(point.y, panel);\n }\n dataJson.points = points;\n }\n\n if (controlPoints) {\n for (let point of controlPoints) {\n point.x = px2unit(point.x, panel);\n point.y = px2unit(point.y, panel);\n }\n dataJson.controlPoints = controlPoints;\n }\n\n newElement.data = JSON.stringify(dataJson);\n }\n }\n\n newElement.id = undefined!;\n computePosition(newElement, parentTmp);\n\n boundElement(newElement, parentTmp);\n addElement(getCurrentPanel(), parentTmp, newElement);\n newElementList.push(newElement);\n }\n\n // 记录历史\n record(<Snapshot>{\n type: 'Element',\n action: ActionEnum.PASTE,\n elementList: newElementList\n });\n }\n\n nextTick(() => {\n // setSelectedTargets()\n if (elementTypeContainerList.includes(parent.type)) {\n newElementList.length = 0;\n newElementList.push(parent as MyElement);\n }\n updatePanel(newElementList);\n });\n\n if (incrPanel) {\n this.clipboard.pasteNumMap[panel.id]++;\n }\n if (incrParent) {\n this.clipboard.pasteNumMap[parent.id]++;\n }\n\n function computePosition(newElement: MyElement, parentTmp: Container) {\n if (parentTmp.type == 'Panel') {\n // 设置合适的位置\n newElement.x = newElement.x + px2unit(10) * panelPasteNum;\n newElement.y = newElement.y + px2unit(10) * panelPasteNum;\n incrPanel = true;\n } else {\n // 设置合适的位置\n newElement.x = newElement.x + x;\n newElement.y = newElement.y + y;\n incrParent = true;\n }\n }\n }\n\n};\n"],"names":[],"mappings":"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"}