UNPKG

label-print-design

Version:

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

267 lines (260 loc) 9.55 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var vue = require('vue'); var vueDemi = require('vue-demi'); var d3Array = require('d3-array'); var d3Selection = require('d3-selection'); var d3Drag = require('d3-drag'); var svgUtil = require('../../../utils/svgUtil.js'); var common = require('../../../constants/common.js'); var elementUtil = require('../../../utils/elementUtil.js'); function _interopNamespaceDefault(e) { var n = Object.create(null); if (e) { Object.keys(e).forEach(function (k) { if (k !== 'default') { var d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty(n, k, d.get ? d : { enumerable: true, get: function () { return e[k]; } }); } }); } n.default = e; return Object.freeze(n); } var d3Array__namespace = /*#__PURE__*/_interopNamespaceDefault(d3Array); var d3Selection__namespace = /*#__PURE__*/_interopNamespaceDefault(d3Selection); var d3Drag__namespace = /*#__PURE__*/_interopNamespaceDefault(d3Drag); var _sfc_main = /* @__PURE__ */ vue.defineComponent({ __name: "svg-base", props: { element: { default: () => ({}) }, svgOptions: { default: () => { return { width: 0, height: 0, controlLine: [], centerPoint: {}, controlPointScale: {}, controlPointResize: {}, controlPointEndDragStart: {}, // svg 形状点 allPoint: [], virtualPoint: [], drawAuxiliary: false }; } }, draw: { type: Function, default: () => { } }, dragStart: { type: Function, default: () => { } }, dragIng: { type: Function, default: (_subject, _event, _dx, _dy) => { } }, dragEnd: { type: Function, default: () => { } }, changeSize: { type: Function, default: () => { return false; } }, doubleClick: { type: Function, default: () => { } } }, setup(__props) { const props = __props; let path; const chartRef = vueDemi.ref(); let subject = void 0, dx, dy; let startX, startY; let dragFun; let lastClickPoint = void 0; vueDemi.watch(() => props.element.runtimeOption.status, (n, _o) => { props.svgOptions.drawAuxiliary = common.elementHandleHandleStatusList.includes(n) && !props.element.lock; svgUtil.updateSvg(chartRef.value, props.svgOptions, props.draw); draggable(); }); vueDemi.watch(() => props.element.lock, (_n, _o) => { props.svgOptions.drawAuxiliary = common.elementHandleHandleStatusList.includes(props.element.runtimeOption.status) && !props.element.lock; svgUtil.updateSvg(chartRef.value, props.svgOptions, props.draw); draggable(); }); vueDemi.watch([() => props.element.width, () => props.element.height], (_n, _o) => { const renderIs = props.changeSize(); if (renderIs) { svgUtil.updateSvg(chartRef.value, props.svgOptions, props.draw); } }); vueDemi.watch([() => props.element.option.color, () => props.element.option.background, () => props.element.option.opacity], (_n, _o) => { svgUtil.updateSvg(chartRef.value, props.svgOptions, props.draw); }); vueDemi.onMounted(() => { props.svgOptions.element = props.element; dragFun = d3Drag__namespace.drag().subject(dragSubject).on("start", (event) => { if (subject) { d3Selection__namespace.select(chartRef.value).style("cursor", "grabbing"); dx = subject.x - event.x; dy = subject.y - event.y; props.dragStart(subject); startX = event.x; startY = event.y; if (subject.type == "virtual") { const insertIndex = subject.insertIndex; subject.insertIndex = void 0; subject.type = void 0; props.svgOptions.allPoint.splice(insertIndex, 0, subject); props.svgOptions.linePoints.splice(insertIndex, 0, subject); svgUtil.updateSvg(chartRef.value, props.svgOptions, props.draw); } } }).on("drag", (event) => { if (subject) { props.dragIng(subject, event, dx, dy); } }).on("end", (event) => { if (subject) { if (startX == event.x && startY == event.y) { const timestamp = Date.now(); if (lastClickPoint == void 0) { lastClickPoint = { x: startX, y: startY, clickTimestamp: timestamp }; } else { if (startX == lastClickPoint.x && startY == lastClickPoint.y && timestamp - lastClickPoint.clickTimestamp < 350) { props.doubleClick(subject); lastClickPoint = void 0; } else { lastClickPoint = { x: startX, y: startY, clickTimestamp: timestamp }; } } } else { props.dragEnd(subject); } } d3Selection__namespace.select(chartRef.value).style("cursor", null); svgUtil.updateSvg(chartRef.value, props.svgOptions, props.draw); }).on( "start.render drag.render end.render", () => svgUtil.updateSvg(chartRef.value, props.svgOptions, props.draw) ); svgUtil.updateSvg(chartRef.value, props.svgOptions, props.draw); }); function draggable() { if (!props.svgOptions.drawAuxiliary) { d3Selection__namespace.select(chartRef.value).on("mousemove", null).on(".drag", null); d3Selection__namespace.select(chartRef.value).style("cursor", null); } else { d3Selection__namespace.select(chartRef.value).on("mousemove", (event) => dragSubject({ sourceEvent: event })).call(dragFun); } } function dragSubject(event) { if (!props.svgOptions.allPoint) { return null; } const p = d3Selection__namespace.pointer(event.sourceEvent, chartRef.value); subject = d3Array__namespace.least(props.svgOptions.allPoint, (a, b) => svgUtil.dist(p, a) - svgUtil.dist(p, b)); if (svgUtil.dist(p, subject) > 12) subject = void 0; if (subject == null && props.svgOptions.virtualPoint && props.svgOptions.virtualPoint.length > 0) { subject = d3Array__namespace.least(props.svgOptions.virtualPoint, (a, b) => svgUtil.dist(p, a) - svgUtil.dist(p, b)); if (svgUtil.dist(p, subject) > 12) subject = void 0; } if (subject) d3Selection__namespace.select(chartRef.value).style("cursor", "hand").style("cursor", "grab"); else d3Selection__namespace.select(chartRef.value).style("cursor", null); return subject; } return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock( "svg", { ref_key: "chartRef", ref: chartRef, class: "my-print-chart" }, [ _cache[2] || (_cache[2] = vue.createElementVNode( "path", { class: "u-path", d: "" }, null, -1 /* HOISTED */ )), vue.unref(elementUtil.displayDesign)(_ctx.element) ? (vue.openBlock(), vue.createElementBlock( vue.Fragment, { key: 0 }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.svgOptions.controlLine, (index) => { return vue.openBlock(), vue.createElementBlock("line", { class: "u-line", key: index }); }), 128 /* KEYED_FRAGMENT */ )), (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.svgOptions.allPoint, (index) => { return vue.openBlock(), vue.createElementBlock("g", { class: "u-point", style: { "display": "none" }, key: index }, _cache[0] || (_cache[0] = [ vue.createElementVNode( "circle", { r: "3" }, null, -1 /* HOISTED */ ) ])); }), 128 /* KEYED_FRAGMENT */ )), (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.svgOptions.virtualPoint, (index) => { return vue.openBlock(), vue.createElementBlock("g", { class: "uv-point", style: { "display": "none" }, key: index }, _cache[1] || (_cache[1] = [ vue.createElementVNode( "circle", { r: "3" }, null, -1 /* HOISTED */ ) ])); }), 128 /* KEYED_FRAGMENT */ )) ], 64 /* STABLE_FRAGMENT */ )) : vue.createCommentVNode("v-if", true) ], 512 /* NEED_PATCH */ ); }; } }); exports.default = _sfc_main; //# sourceMappingURL=svg-base.vue2.js.map