label-print-design
Version:
操作简单,组件丰富的一站式打印解决方案打印设计器
303 lines (298 loc) • 14.2 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var vue = require('vue');
var vueDemi = require('vue-demi');
require('../../design/shape/line/horizontalLine/index.js');
require('../../design/shape/rect/rect/index.js');
require('../../design/shape/line/dottedHorizontalLine/index.js');
require('../../design/shape/line/verticalLine/index.js');
require('../../design/shape/line/dottedVerticalLine/index.js');
require('../../design/image/index.js');
require('../../design/text/index.js');
var dataTable = require('../../design/table/data-table/data-table.vue.js');
var event = require('../../../utils/event.js');
var numberUtil = require('../../../utils/numberUtil.js');
var scaleUtil = require('../../../utils/scaleUtil.js');
var app = require('../../../stores/app.js');
var elementUtil = require('../../../utils/elementUtil.js');
var devicePixelRatio = require('../../../utils/devicePixelRatio.js');
var config = require('../../../stores/config.js');
var historyUtil = require('../../../utils/historyUtil.js');
var tipIcon = require('../../my/icon/tip-icon.vue.js');
var index = require('../../../locales/index.js');
var utils = require('../../../utils/utils.js');
var text = require('../../design/text/text.vue.js');
var image = require('../../design/image/image.vue.js');
var rect = require('../../design/shape/rect/rect/rect.vue.js');
var horizontalLine = require('../../design/shape/line/horizontalLine/horizontalLine.vue.js');
var verticalLine = require('../../design/shape/line/verticalLine/verticalLine.vue.js');
var dottedHorizontalLine = require('../../design/shape/line/dottedHorizontalLine/dottedHorizontalLine.vue.js');
var dottedVerticalLine = require('../../design/shape/line/dottedVerticalLine/dottedVerticalLine.vue.js');
const _hoisted_1 = { class: "mini-map-toolbar display-flex" };
const _hoisted_2 = { class: "mini-map-toolbar_redo-undo display-flex" };
const _hoisted_3 = { class: "mini-map-toolbar_control display-flex" };
const _hoisted_4 = { class: "display-flex space-between width-100-p mini-map-toolbar_control_scale" };
const _hoisted_5 = { class: "mini-map-toolbar_control_ratio" };
const scaleContainerWidth = 260;
const scaleContainerHeight = 160;
var _sfc_main = /* @__PURE__ */ vue.defineComponent({
__name: "minimap-panel",
setup(__props) {
const appStore = app.useAppStoreHook();
const configStore = config.useConfigStore();
const designContentRef = vueDemi.ref();
const data = vueDemi.reactive({
viewport: {
x: 0,
y: 0
},
width: 0,
height: 0,
miniMap: {
x: 0,
y: 0
},
scale: 0,
openIs: true
});
utils.mitt.on("minimapViewportSize", minimapViewportSize);
utils.mitt.on("minimapViewportScroll", minimapViewportScroll);
function minimapViewportSize(size) {
data.viewport.width = size.width;
data.viewport.height = size.height;
}
function minimapViewportScroll(size) {
data.viewport.x = size.x;
data.viewport.y = size.y;
}
utils.mitt.on("changePageSize", changePageSize);
function changePageSize() {
data.width = devicePixelRatio.unit2px(elementUtil.getCurrentPanel().width);
data.height = devicePixelRatio.unit2px(elementUtil.getCurrentPanel().height);
let widthCalc = scaleContainerWidth / data.width;
let heightCalc = scaleContainerHeight / data.height;
let min = Math.min(widthCalc, heightCalc);
min = min / scaleUtil.scaleUtil.miniMap.scale;
data.scale = min;
data.miniMap.width = data.width * min;
data.miniMap.height = data.height * min;
data.miniMap.x = (scaleContainerWidth - data.miniMap.width) / 2;
data.miniMap.y = (scaleContainerHeight - data.miniMap.height) / 2;
}
const viewportStyle = vueDemi.computed(() => {
const style = {};
const viewport = data.viewport;
let w = viewport.width - 10;
let h = viewport.height;
let x = viewport.x;
let y = viewport.y;
let viewportWidth = Math.min(w * data.scale, data.miniMap.width);
let t = x * data.scale + data.miniMap.x + viewportWidth;
if (t > 260) {
t = 260 - viewportWidth;
} else {
t = t - viewportWidth;
}
style["left"] = t + "px";
style["top"] = data.miniMap.y + y * data.scale + "px";
style["width"] = viewportWidth + "px";
style["height"] = Math.min((h - 1) * data.scale, data.miniMap.height) + "px";
return style;
});
function mousedown(ev) {
const tmpX = ev.clientX;
const tmpY = ev.clientY;
document.addEventListener("mousemove", mousemove);
document.addEventListener("mouseup", mouseup);
appStore.dataRotation = "move";
let offsetScrollX = ev.offsetX - data.viewport.width / 2;
let offsetScrollY = ev.offsetY - data.viewport.height / 2;
utils.mitt.emit("scaleMove", { x: offsetScrollX, y: offsetScrollY });
function mousemove(ev2) {
let offsetX = (ev2.clientX - tmpX) / data.scale + offsetScrollX;
let offsetY = (ev2.clientY - tmpY) / data.scale + offsetScrollY;
utils.mitt.emit("scaleMove", { x: offsetX, y: offsetY });
event.clearEventBubble(ev2);
return true;
}
function mouseup(ev2) {
event.clearEventBubble(ev2);
document.removeEventListener("mousemove", mousemove);
document.removeEventListener("mouseup", mouseup);
appStore.dataRotation = "none";
return false;
}
event.clearEventBubble(ev);
return true;
}
function startScale(scale) {
scaleUtil.scaleUtil.miniMap.scale = numberUtil.default.sum(scaleUtil.scaleUtil.miniMap.scale, scale);
changePageSize();
}
return (_ctx, _cache) => {
return vue.openBlock(), vue.createElementBlock(
"div",
{
class: vue.normalizeClass(["content-scale", { run: vue.unref(appStore).currentElement.id == null }])
},
[
vue.unref(configStore).settingPanel.miniMap.visible ? (vue.openBlock(), vue.createElementBlock(
"div",
{
key: 0,
class: "scale-preview",
ref: "scalePreviewRef",
onMousedown: _cache[0] || (_cache[0] = ($event) => mousedown($event))
},
[
vue.createElementVNode(
"div",
{
class: "scale-design-content",
ref_key: "designContentRef",
ref: designContentRef,
style: vue.normalizeStyle({
left: vue.unref(data).miniMap.x + "px",
top: vue.unref(data).miniMap.y + "px",
transformOrigin: "0% 0%",
width: vue.unref(scaleUtil.scaleUtil).scale(vue.unref(data).width) + "px",
height: vue.unref(scaleUtil.scaleUtil).scale(vue.unref(data).height) + "px",
scale: vue.unref(data).scale
})
},
[
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList(vue.unref(elementUtil.getCurrentPanel)().elementList, (element, index) => {
return vue.openBlock(), vue.createElementBlock(
"div",
{
style: vue.normalizeStyle([{ "position": "absolute" }, { left: vue.unref(elementUtil.valueUnit)(element.x), top: vue.unref(elementUtil.valueUnit)(element.y), width: vue.unref(elementUtil.valueUnit)(element.width), height: vue.unref(elementUtil.valueUnit)(element.height) }]),
key: index,
class: "pointer-events"
},
[
element.type == "Text" ? (vue.openBlock(), vue.createBlock(vue.unref(text.default), {
key: 0,
element
}, null, 8, ["element"])) : vue.createCommentVNode("v-if", true),
element.type === "Image" ? (vue.openBlock(), vue.createBlock(vue.unref(image.default), {
key: 1,
element
}, null, 8, ["element"])) : vue.createCommentVNode("v-if", true),
element.type === "DataTable" ? (vue.openBlock(), vue.createBlock(dataTable.default, {
key: 2,
element
}, null, 8, ["element"])) : vue.createCommentVNode("v-if", true),
element.type === "Rect" ? (vue.openBlock(), vue.createBlock(vue.unref(rect.default), {
key: 3,
element
}, null, 8, ["element"])) : vue.createCommentVNode("v-if", true),
element.type === "HorizontalLine" ? (vue.openBlock(), vue.createBlock(vue.unref(horizontalLine.default), {
key: 4,
element
}, null, 8, ["element"])) : vue.createCommentVNode("v-if", true),
element.type === "VerticalLine" ? (vue.openBlock(), vue.createBlock(vue.unref(verticalLine.default), {
key: 5,
element
}, null, 8, ["element"])) : vue.createCommentVNode("v-if", true),
element.type === "DottedHorizontalLine" ? (vue.openBlock(), vue.createBlock(vue.unref(dottedHorizontalLine.default), {
key: 6,
element
}, null, 8, ["element"])) : vue.createCommentVNode("v-if", true),
element.type === "DottedVerticalLine" ? (vue.openBlock(), vue.createBlock(vue.unref(dottedVerticalLine.default), {
key: 7,
element
}, null, 8, ["element"])) : vue.createCommentVNode("v-if", true)
],
4
/* STYLE */
);
}),
128
/* KEYED_FRAGMENT */
))
],
4
/* STYLE */
),
vue.createElementVNode(
"div",
{
class: "viewport",
style: vue.normalizeStyle(vue.unref(viewportStyle))
},
null,
4
/* STYLE */
)
],
544
/* NEED_HYDRATION, NEED_PATCH */
)) : vue.createCommentVNode("v-if", true),
vue.createElementVNode("div", _hoisted_1, [
vue.createElementVNode("div", _hoisted_2, [
vue.createElementVNode(
"div",
{
onMousedown: _cache[1] || (_cache[1] = ($event) => vue.unref(event.clearEventBubble)($event)),
onClick: _cache[2] || (_cache[2] = //@ts-ignore
(...args) => vue.unref(historyUtil.undoPanel) && vue.unref(historyUtil.undoPanel)(...args)),
class: vue.normalizeClass([[{ "my-icon-disabled": !vue.unref(historyUtil.canUndo) }], "my-icon iconfont icon-undo mini-map-toolbar-icon"])
},
null,
34
/* CLASS, NEED_HYDRATION */
),
vue.createElementVNode(
"div",
{
onMousedown: _cache[3] || (_cache[3] = ($event) => vue.unref(event.clearEventBubble)($event)),
onClick: _cache[4] || (_cache[4] = //@ts-ignore
(...args) => vue.unref(historyUtil.redoPanel) && vue.unref(historyUtil.redoPanel)(...args)),
class: vue.normalizeClass([[{ "my-icon-disabled": !vue.unref(historyUtil.canRedo) }], "my-icon iconfont icon-redo mini-map-toolbar-icon"])
},
null,
34
/* CLASS, NEED_HYDRATION */
)
]),
vue.createElementVNode("div", _hoisted_3, [
vue.createCommentVNode(" <div>\u624B\u52BF</div>"),
vue.createElementVNode("div", _hoisted_4, [
vue.createVNode(tipIcon.default, {
tips: vue.unref(index.i18n)("common.panel.minimap.zoom.out"),
onClick: _cache[5] || (_cache[5] = ($event) => startScale(-0.1)),
placement: "top",
class: "icon-suoxiao iconfont mini-map-toolbar-icon"
}, null, 8, ["tips"]),
vue.createElementVNode(
"div",
_hoisted_5,
vue.toDisplayString(vue.unref(numberUtil.default).mul(vue.unref(scaleUtil.scaleUtil).miniMap.scale, 100)) + "% ",
1
/* TEXT */
),
vue.createVNode(tipIcon.default, {
tips: vue.unref(index.i18n)("common.panel.minimap.zoom.in"),
onClick: _cache[6] || (_cache[6] = ($event) => startScale(0.1)),
placement: "top",
class: "icon-fangda iconfont mini-map-toolbar-icon"
}, null, 8, ["tips"]),
vue.createCommentVNode(` <tip-icon :tips="i18n('common.panel.minimap.navigation')"`),
vue.createCommentVNode(' :modelValue="configStore.settingPanel.miniMap.visible"'),
vue.createCommentVNode(' @update:model-value="flag => configStore.settingPanel.miniMap.visible = flag"'),
vue.createCommentVNode(' class="icon-map iconfont mini-map-toolbar-icon" />')
])
])
])
],
2
/* CLASS */
);
};
}
});
exports.default = _sfc_main;
//# sourceMappingURL=minimap-panel.vue2.js.map