|
@@ -36,6 +36,7 @@ import {Pattern, Textbox} from "fabric";
|
|
|
import {MaxSize, MinSize, TransparentFill} from "@/configs/background";
|
|
import {MaxSize, MinSize, TransparentFill} from "@/configs/background";
|
|
|
import {mm2px, px2mm} from "@/utils/image";
|
|
import {mm2px, px2mm} from "@/utils/image";
|
|
|
import {ArcText} from "@/extension/object/ArcText";
|
|
import {ArcText} from "@/extension/object/ArcText";
|
|
|
|
|
+import useHandleBackground from "@/hooks/useHandleBackground";
|
|
|
|
|
|
|
|
|
|
|
|
|
const fabricStore = useFabricStore()
|
|
const fabricStore = useFabricStore()
|
|
@@ -51,8 +52,11 @@ const {getJSONData, getSVGData} = useCanvasExport()
|
|
|
let outerSessionId = ""
|
|
let outerSessionId = ""
|
|
|
let tmpSaveFlag = true
|
|
let tmpSaveFlag = true
|
|
|
|
|
|
|
|
|
|
+let jsonTemplate = {}
|
|
|
|
|
+
|
|
|
const {drawAreaFocus} = storeToRefs(mainStore)
|
|
const {drawAreaFocus} = storeToRefs(mainStore)
|
|
|
const {keydownListener, keyupListener, pasteListener} = useCanvasHotkey()
|
|
const {keydownListener, keyupListener, pasteListener} = useCanvasHotkey()
|
|
|
|
|
+const {setBackgroudImage, setBackgroundImageOption, getBackgroundImageOption} = useHandleBackground();
|
|
|
|
|
|
|
|
|
|
|
|
|
const addDrawAreaFocus = () => {
|
|
const addDrawAreaFocus = () => {
|
|
@@ -135,6 +139,7 @@ const getPreviewTemplateDetail = async (pk: number, templateParams: any, outerSe
|
|
|
templatesStore.setTemplateName(res.data.templateName)
|
|
templatesStore.setTemplateName(res.data.templateName)
|
|
|
templatesStore.setProductIdentity(res.data.productIdentity ? res.data.productIdentity.split(",") : [])
|
|
templatesStore.setProductIdentity(res.data.productIdentity ? res.data.productIdentity.split(",") : [])
|
|
|
const data = res.data.jsonContent
|
|
const data = res.data.jsonContent
|
|
|
|
|
+ jsonTemplate = JSON.parse(data)
|
|
|
await templatesStore.changeTemplate(JSON.parse(data))
|
|
await templatesStore.changeTemplate(JSON.parse(data))
|
|
|
|
|
|
|
|
emit("loaded");
|
|
emit("loaded");
|
|
@@ -236,10 +241,19 @@ function onWindowMessage(event) {
|
|
|
.getObjects()
|
|
.getObjects()
|
|
|
.filter((item) => item.id === WorkSpaceDrawType)[0];
|
|
.filter((item) => item.id === WorkSpaceDrawType)[0];
|
|
|
if (!workSpaceDraw) return;
|
|
if (!workSpaceDraw) return;
|
|
|
- const top = workSpaceDraw.top + workSpaceDraw.get('backgroundPadding').top
|
|
|
|
|
- const left = workSpaceDraw.left + workSpaceDraw.get('backgroundPadding').left
|
|
|
|
|
- const right = workSpaceDraw.left + workSpaceDraw.width - workSpaceDraw.get('backgroundPadding').right
|
|
|
|
|
- const bottom = workSpaceDraw.top + workSpaceDraw.height - workSpaceDraw.get('backgroundPadding').bottom
|
|
|
|
|
|
|
+ const bgPadding = {
|
|
|
|
|
+ top: 0, left: 0, right: 0, bottom: 0
|
|
|
|
|
+ }
|
|
|
|
|
+ if (workSpaceDraw.get('backgroundPadding')) {
|
|
|
|
|
+ bgPadding.top = workSpaceDraw.get('backgroundPadding').top
|
|
|
|
|
+ bgPadding.left = workSpaceDraw.get('backgroundPadding').left
|
|
|
|
|
+ bgPadding.right = workSpaceDraw.get('backgroundPadding').right
|
|
|
|
|
+ bgPadding.bottom = workSpaceDraw.get('backgroundPadding').bottom
|
|
|
|
|
+ }
|
|
|
|
|
+ const top = workSpaceDraw.top + bgPadding.top
|
|
|
|
|
+ const left = workSpaceDraw.left + bgPadding.left
|
|
|
|
|
+ const right = workSpaceDraw.left + workSpaceDraw.width - bgPadding.right
|
|
|
|
|
+ const bottom = workSpaceDraw.top + workSpaceDraw.height - bgPadding.bottom
|
|
|
|
|
|
|
|
const eObj = objects.find((object) => {
|
|
const eObj = objects.find((object) => {
|
|
|
return object.left < left ||
|
|
return object.left < left ||
|
|
@@ -281,10 +295,6 @@ onMounted(() => {
|
|
|
initEditor(query.template)
|
|
initEditor(query.template)
|
|
|
initPixi()
|
|
initPixi()
|
|
|
outerSessionId = query.sessionId
|
|
outerSessionId = query.sessionId
|
|
|
- // document.addEventListener('keydown', keydownListener)
|
|
|
|
|
- // document.addEventListener('keyup', keyupListener)
|
|
|
|
|
- // window.addEventListener('blur', keyupListener)
|
|
|
|
|
- // window.addEventListener('paste', pasteListener as any)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (query.runMode == 0) {
|
|
if (query.runMode == 0) {
|
|
@@ -294,18 +304,24 @@ onMounted(() => {
|
|
|
|
|
|
|
|
//每隔30秒暂存一次用户的设计
|
|
//每隔30秒暂存一次用户的设计
|
|
|
setTimeout(tmpSaveCurrentTemplate, 30000);
|
|
setTimeout(tmpSaveCurrentTemplate, 30000);
|
|
|
|
|
+ } else if (query.runMode == 1) {
|
|
|
|
|
+ document.addEventListener('keydown', keydownListener)
|
|
|
|
|
+ document.addEventListener('keyup', keyupListener)
|
|
|
|
|
+ window.addEventListener('blur', keyupListener)
|
|
|
|
|
+ window.addEventListener('paste', pasteListener as any)
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
onUnmounted(() => {
|
|
onUnmounted(() => {
|
|
|
- // document.removeEventListener('keydown', keydownListener)
|
|
|
|
|
- // document.removeEventListener('keyup', keyupListener)
|
|
|
|
|
- // window.removeEventListener('blur', keyupListener)
|
|
|
|
|
- // window.removeEventListener('paste', pasteListener as any)
|
|
|
|
|
if (query.runMode == 0) {
|
|
if (query.runMode == 0) {
|
|
|
// 使用iframe方案,本网页是内嵌页面
|
|
// 使用iframe方案,本网页是内嵌页面
|
|
|
// 监听来自父页面的消息
|
|
// 监听来自父页面的消息
|
|
|
window.removeEventListener("message", onWindowMessage)
|
|
window.removeEventListener("message", onWindowMessage)
|
|
|
|
|
+ } else if (query.runMode == 1) {
|
|
|
|
|
+ document.removeEventListener('keydown', keydownListener)
|
|
|
|
|
+ document.removeEventListener('keyup', keyupListener)
|
|
|
|
|
+ window.removeEventListener('blur', keyupListener)
|
|
|
|
|
+ window.removeEventListener('paste', pasteListener as any)
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
|
|
|
|
|
@@ -385,6 +401,7 @@ const getCanvasSize = () => {
|
|
|
return {width, height};
|
|
return {width, height};
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+
|
|
|
// 修改画布宽度
|
|
// 修改画布宽度
|
|
|
const changeTemplateSize = (width, height) => {
|
|
const changeTemplateSize = (width, height) => {
|
|
|
const [canvas] = useCanvas();
|
|
const [canvas] = useCanvas();
|
|
@@ -393,7 +410,7 @@ const changeTemplateSize = (width, height) => {
|
|
|
.filter((item) => item.id === WorkSpaceDrawType)[0];
|
|
.filter((item) => item.id === WorkSpaceDrawType)[0];
|
|
|
if (!workSpaceDraw) return;
|
|
if (!workSpaceDraw) return;
|
|
|
const ratio = currentTemplate.value.height / currentTemplate.value.width;
|
|
const ratio = currentTemplate.value.height / currentTemplate.value.width;
|
|
|
- // let {width, height} = getCanvasSize();
|
|
|
|
|
|
|
+
|
|
|
if (width / zoom.value < mm2px(MinSize)) {
|
|
if (width / zoom.value < mm2px(MinSize)) {
|
|
|
ElMessage({
|
|
ElMessage({
|
|
|
message: t("style.minimumSizeLimit") + MinSize,
|
|
message: t("style.minimumSizeLimit") + MinSize,
|
|
@@ -427,10 +444,32 @@ const changeTemplateSize = (width, height) => {
|
|
|
workSpaceDraw.set({width: width / zoom.value, height: height / zoom.value});
|
|
workSpaceDraw.set({width: width / zoom.value, height: height / zoom.value});
|
|
|
templatesStore.setSize(width, height, zoom.value);
|
|
templatesStore.setSize(width, height, zoom.value);
|
|
|
sizeMode.value = 2;
|
|
sizeMode.value = 2;
|
|
|
- canvas.renderAll();
|
|
|
|
|
// resetCanvas()
|
|
// resetCanvas()
|
|
|
// addHistorySnapshot();
|
|
// addHistorySnapshot();
|
|
|
-};
|
|
|
|
|
|
|
+
|
|
|
|
|
+ //根据改变的比例等比缩放其他元素
|
|
|
|
|
+
|
|
|
|
|
+ const backGroundObject = jsonTemplate.objects.find((item) => item.id === WorkSpaceDrawType);
|
|
|
|
|
+ //原始背景图属性
|
|
|
|
|
+ const originBgImage = jsonTemplate.backgroundImage
|
|
|
|
|
+
|
|
|
|
|
+ const originWidth = backGroundObject.width * zoom.value;
|
|
|
|
|
+ const originHeight = backGroundObject.height * zoom.value;
|
|
|
|
|
+
|
|
|
|
|
+ const cScaleX = width / originWidth;
|
|
|
|
|
+ const cScaleY = height / originHeight;
|
|
|
|
|
+
|
|
|
|
|
+ //如果有背景图,则同步改变背景图大小
|
|
|
|
|
+ if (canvas.backgroundImage) {
|
|
|
|
|
+ canvas.backgroundImage.scaleX = originBgImage.scaleX * cScaleX;
|
|
|
|
|
+ canvas.backgroundImage.scaleY = originBgImage.scaleY * cScaleY;
|
|
|
|
|
+ setBackgroundImageOption(canvas.backgroundImage);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ canvas.renderAll();
|
|
|
|
|
+
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
|
|
|
|
|
</script>
|
|
</script>
|