UNPKG

label-print-design

Version:

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

304 lines (301 loc) 12.4 kB
import { defineComponent, openBlock, createElementBlock, Fragment, createElementVNode, renderSlot, unref, createBlock, Teleport, createVNode, createCommentVNode } from 'vue'; import { ref, reactive, nextTick } from 'vue-demi'; import { unit2unit, unit2px, px2unit } from '../../../utils/devicePixelRatio.mjs'; import Design from '../../design/design.vue.mjs'; import { getCurrentPanel, initElement, innerElementIs, addElement, handleElementType, installParentElement } from '../../../utils/elementUtil.mjs'; import { clearEventBubble } from '../../../utils/event.mjs'; import { dragNewElement, dragNewElementCancel, updatePanel } from '../../../plugins/moveable/moveable.mjs'; import { useAppStoreHook } from '../../../stores/app.mjs'; import DragWrapper from './dragWrapper.vue.mjs'; import { mouseTips } from '../../../utils/mouseTips.mjs'; import { record, ActionEnum } from '../../../utils/historyUtil.mjs'; import { recursionForTableCell } from '../../../utils/table/dataTable.mjs'; const padding = 30; var _sfc_main = /* @__PURE__ */ defineComponent({ __name: "base-widget", props: { data: { default: () => ({}) }, pageUnit: {} }, setup(__props) { const appStore = useAppStoreHook(); const designRef = ref(); const isDrop = ref(false); const tmpElement = ref({}); const dragWrapper = reactive({ visible: false, transitionAnime: false, x: 0, y: 0, width: 0, height: 0, opacity: 0 }); const props = __props; const panel = getCurrentPanel(); function dragStart(ev) { mouseTips.visible(); tmpElement.value = JSON.parse(JSON.stringify(props.data)); const element = tmpElement.value; let parentElement; let startX = 0, startY = 0; if (element.type == "PageHeader" || element.type == "PageFooter") { element.width = unit2unit(panel.pageUnit, props.pageUnit, panel.width); } mouseTips.move(ev.clientX, ev.clientY, "\u677E\u5F00\u53D6\u6D88"); if (props.pageUnit != panel.pageUnit) { element.width = unit2unit(props.pageUnit, panel.pageUnit, tmpElement.value.width); element.height = unit2unit(props.pageUnit, panel.pageUnit, tmpElement.value.height); if (element.type == "DataTable") { recursionForTableCell(element.columnList, (providerCell) => { const columnCell = providerCell; if (columnCell.height == null) { columnCell.height = 7; } if (!columnCell.data) { columnCell.data = columnCell.label; } columnCell.height = unit2unit(props.pageUnit, panel.pageUnit, columnCell.height); columnCell.width = unit2unit(props.pageUnit, panel.pageUnit, columnCell.width); if (columnCell.columnBody) { if (columnCell.columnBody.height) { columnCell.columnBody.height = unit2unit(props.pageUnit, panel.pageUnit, columnCell.columnBody.height); } if (columnCell.columnBody.width) { columnCell.columnBody.width = unit2unit(props.pageUnit, panel.pageUnit, columnCell.columnBody.width); } } }); } if (element.type.startsWith("Svg") && 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 = unit2unit(props.pageUnit, panel.pageUnit, point.x); point.y = unit2unit(props.pageUnit, panel.pageUnit, point.y); } dataJson.points = points; } if (controlPoints) { for (let point of controlPoints) { point.x = unit2unit(props.pageUnit, panel.pageUnit, point.x); point.y = unit2unit(props.pageUnit, panel.pageUnit, point.y); } dataJson.controlPoints = controlPoints; } element.data = JSON.stringify(dataJson); } } else { if (element.type == "DataTable") { recursionForTableCell(element.columnList, (providerCell) => { const columnCell = providerCell; if (columnCell.height == null) { columnCell.height = 7; } if (!columnCell.data) { columnCell.data = columnCell.label; } }); } } initElement(panel, element, 0); let halfWidth = unit2px(tmpElement.value.width) / 2; let halfHeight = unit2px(tmpElement.value.height) / 2; startX = ev.clientX - halfWidth; startY = ev.clientY - halfHeight; element.x = px2unit(startX - appStore.panelPosition.x + appStore.panelPosition.scrollX - padding); element.y = px2unit(startY - appStore.panelPosition.y + appStore.panelPosition.scrollY - padding); element.runtimeOption.x = unit2px(element.x); element.runtimeOption.y = unit2px(element.y); element.runtimeOption.init.x = element.runtimeOption.x; element.runtimeOption.init.y = element.runtimeOption.y; element.runtimeOption.parent = panel; dragWrapper.visible = true; dragWrapper.opacity = 1; dragWrapper.x = startX; dragWrapper.y = startY; dragWrapper.width = element.runtimeOption.width; dragWrapper.height = element.runtimeOption.height; isDrop.value = true; document.addEventListener("mousemove", mouseMove); document.addEventListener("mouseup", mouseup); clearEventBubble(ev); nextTick(() => { const myHtmlElement = designRef.value.$el; element.runtimeOption.target = myHtmlElement; myHtmlElement.element = element; dragNewElement(element.runtimeOption.target, ev); }); function mouseMove(evMove) { let diffXNum = evMove.clientX + -appStore.panelPosition.x + -appStore.panelPosition.w; let diffYNum = evMove.clientY + -appStore.panelPosition.y + -appStore.panelPosition.h; if (diffXNum < 0) { diffXNum = 0; } if (diffYNum < 0) { diffYNum = 0; } if (diffXNum <= halfWidth && diffYNum <= halfHeight) { if (evMove.clientY < appStore.panelPosition.y || evMove.clientX < appStore.panelPosition.x) { dragWrapper.opacity = 1; } else { if (diffYNum == 0) { dragWrapper.opacity = diffXNum / halfWidth; } else if (diffXNum == 0) { dragWrapper.opacity = diffYNum / halfHeight; } else { dragWrapper.opacity = (diffXNum / halfWidth + diffYNum / halfHeight) / 2; } } } dragWrapper.x = element.runtimeOption.x + appStore.panelPosition.x + padding - appStore.panelPosition.scrollX; dragWrapper.y = element.runtimeOption.y + appStore.panelPosition.y + padding - appStore.panelPosition.scrollY; mouseTips.move(dragWrapper.x + halfWidth, dragWrapper.y + halfHeight); if (diffXNum == 0 && diffYNum == 0) { mouseTips.setData("\u677E\u5F00\u653E\u7F6E"); const point = { x: element.runtimeOption.x + halfWidth, y: element.runtimeOption.y + halfHeight }; if (!parentElement || !innerElementIs(point, element, parentElement)) { if (parentElement) { parentElement.runtimeOption.dragInIs = false; parentElement = void 0; } if (panel.pageHeader && innerElementIs(point, element, panel.pageHeader)) { panel.pageHeader.runtimeOption.dragInIs = true; parentElement = panel.pageHeader; } else if (panel.pageFooter && innerElementIs(point, element, panel.pageFooter)) { panel.pageFooter.runtimeOption.dragInIs = true; parentElement = panel.pageFooter; } else { for (let elementOf of panel.elementList) { if (elementOf.type == "Container" && innerElementIs(point, element, elementOf)) { elementOf.runtimeOption.dragInIs = true; parentElement = elementOf; break; } } } panel.runtimeOption.dragInIs = !parentElement; } } else { mouseTips.setData("\u677E\u5F00\u53D6\u6D88"); panel.runtimeOption.dragInIs = false; } } function mouseup(mouseupEvent) { mouseTips.hidden(); mouseupEvent["tmpElement"] = true; if (dragWrapper.opacity > 0) { dragWrapper.opacity = 1; if (dragWrapper.x == startX && dragWrapper.y == startY) { dragWrapper.visible = false; } else { dragWrapper.transitionAnime = true; dragWrapper.x = startX; dragWrapper.y = startY; } dragNewElementCancel(element.runtimeOption.target); isDrop.value = false; } else { dragWrapper.visible = false; panel.runtimeOption.dragInIs = false; if (parentElement) { element.x = element.x - parentElement.x; element.y = element.y - parentElement.y; addElement(panel, parentElement, element); parentElement.runtimeOption.dragInIs = false; parentElement = void 0; } else { handleElementType(element).handle( "PageHeader", () => { if (panel.pageHeader != void 0) { return; } panel.pageHeader = element; element.width = panel.width; element.runtimeOption.width = unit2px(panel.width); element.runtimeOption.x = 0; element.runtimeOption.y = 0; element.x = 0; element.y = 0; installParentElement(panel, element); } ).handle( "PageFooter", () => { if (panel.pageFooter != void 0) { return; } panel.pageFooter = element; element.width = panel.width; element.runtimeOption.width = unit2px(panel.width); element.runtimeOption.x = 0; element.x = 0; element.y = panel.height - element.height; element.runtimeOption.y = unit2px(panel.height - element.height); installParentElement(panel, element); } ).end(() => { addElement(panel, panel, element); }); } record({ type: "Element", action: ActionEnum.ADD, elementList: [element] }); nextTick(() => { updatePanel([element]); setTimeout(() => { isDrop.value = false; }, 1); }); } document.removeEventListener("mousemove", mouseMove); document.removeEventListener("mouseup", mouseup); } } return (_ctx, _cache) => { return openBlock(), createElementBlock( Fragment, null, [ createElementVNode( "div", { onMousedown: _cache[0] || (_cache[0] = ($event) => dragStart($event)) }, [ renderSlot(_ctx.$slots, "default") ], 32 /* NEED_HYDRATION */ ), unref(isDrop) ? (openBlock(), createBlock(Teleport, { key: 0, to: ".design-content" }, [ createVNode(Design, { element: unref(tmpElement), ref_key: "designRef", ref: designRef }, null, 8, ["element"]) ])) : createCommentVNode("v-if", true), unref(dragWrapper).visible ? (openBlock(), createBlock(Teleport, { key: 1, to: "body" }, [ createVNode(DragWrapper, { data: unref(dragWrapper) }, null, 8, ["data"]) ])) : createCommentVNode("v-if", true) ], 64 /* STABLE_FRAGMENT */ ); }; } }); export { _sfc_main as default }; //# sourceMappingURL=base-widget.vue2.mjs.map