// 移至上层和移至下层的事件处理在下方(第 2179 行),避免重复绑定 var _keyctrl = false, _keyc = false, _textEdit = false, _inputEdit = false; $('input').focus(function () { _inputEdit = true; }); $('input').blur(function () { _inputEdit = false; }); $('textarea').focus(function () { _inputEdit = true; }); $('textarea').blur(function () { _inputEdit = false; }); $("body").keyup(function (event) { // 兼容三端�?modifier key 检测(Windows/Linux: Ctrl, Mac: Cmd/Meta�? if (event.keyCode == 17 || event.keyCode == 91 || event.keyCode == 93) { // Ctrl 键或 Meta 键(Mac Cmd)释�? _keyctrl = false; }; if (event.keyCode == 67) { _keyc = false; }; }) $("body").keydown(function (event) { // 统一的快捷键处理(兼�?Windows/Linux: Ctrl, Mac: Cmd/Meta�? const isModifierKey = event.ctrlKey || event.metaKey; // 兼容三端 // 快捷键处理(在输入框或文本区域中时不触发,除了删除相关的�? if (!_inputEdit && !_textEdit) { // CTRL/CMD+N - 新建 if (isModifierKey && event.keyCode == 78) { event.preventDefault(); $("#new").click(); return; } // CTRL/CMD+O - 打开 if (isModifierKey && event.keyCode == 79) { event.preventDefault(); $("#open").click(); return; } // CTRL/CMD+S - 保存 if (isModifierKey && !event.shiftKey && event.keyCode == 83) { event.preventDefault(); $("#save").click(); return; } // CTRL/CMD+SHIFT+S - 保存副本 if (isModifierKey && event.shiftKey && event.keyCode == 83) { event.preventDefault(); if (typeof window.output === 'function') { window.output(null, saveAs); } return; } // CTRL/CMD+Z - 还原 if (isModifierKey && !event.shiftKey && event.keyCode == 90) { event.preventDefault(); $("#previous").click(); return; } // CTRL/CMD+Y - 重做 if (isModifierKey && !event.shiftKey && event.keyCode == 89) { event.preventDefault(); $("#next").click(); return; } // CTRL/CMD+C - 复制 if (isModifierKey && event.keyCode == 67 && event.target.nodeName == 'BODY') { event.preventDefault(); window.copySelection(); return; } // CTRL/CMD+V - 粘贴 if (isModifierKey && event.keyCode == 86 && event.target.nodeName == 'BODY') { event.preventDefault(); window.pasteFromClipboard(); return; } // CTRL/CMD + SHIFT + DEL (Windows) �?CMD + SHIFT + Backspace (Mac) - 清空 if (isModifierKey && event.shiftKey && (event.keyCode == 46 || event.keyCode == 8)) { event.preventDefault(); $("#clean").click(); return; } // CTRL/CMD + DEL (Windows) �?CMD + Backspace (Mac) - 删除 if (isModifierKey && !event.shiftKey && (event.keyCode == 46 || event.keyCode == 8)) { event.preventDefault(); $("#delete").click(); return; } } // 兼容三端�?modifier key 检测(Windows/Linux: Ctrl, Mac: Cmd/Meta�? if (event.keyCode == 17 || event.metaKey) { // Ctrl 键或 Meta 键(Mac Cmd�? _keyctrl = true; if (_keyc && _textEdit) { //同时按下且在编辑状�? setTimeout("clipboard.writeText( (clipboard.readText()+' ') );", 1) //clipboard.writeText((clipboard.readText()+' ')) } } if (event.keyCode == 67) { _keyc = true; if (_keyctrl & _textEdit) { //同时按下且在编辑状�? setTimeout("clipboard.writeText( (clipboard.readText()+' ') );", 1) //clipboard.writeText((clipboard.readText()+' ')) } } if (event.keyCode == 37) { //left let v = -1; if (_keyctrl || event.ctrlKey || event.metaKey) { v = -5; } const currentCanvas = window.canvas || canvas; if (currentCanvas && currentCanvas.getActiveObject()) { let x = currentCanvas.getActiveObject().get('left'); x += v; currentCanvas.getActiveObject().set('left', x); currentCanvas.renderAll(); if (typeof window.recordState === 'function') { window.recordState(); } else if (typeof recordState === 'function') { recordState(); } if (typeof updateControls === 'function') { updateControls(); } } } if (event.keyCode == 38) { //up let v = -1; if (_keyctrl || event.ctrlKey || event.metaKey) { v = -5; } const currentCanvas = window.canvas || canvas; if (currentCanvas && currentCanvas.getActiveObject()) { let y = currentCanvas.getActiveObject().get('top'); y += v; currentCanvas.getActiveObject().set('top', y); currentCanvas.renderAll(); if (typeof window.recordState === 'function') { window.recordState(); } else if (typeof recordState === 'function') { recordState(); } if (typeof updateControls === 'function') { updateControls(); } } } if (event.keyCode == 39) { //right let v = 1; if (_keyctrl || event.ctrlKey || event.metaKey) { v = 5; } const currentCanvas = window.canvas || canvas; if (currentCanvas && currentCanvas.getActiveObject()) { let x = currentCanvas.getActiveObject().get('left'); x += v; currentCanvas.getActiveObject().set('left', x); currentCanvas.renderAll(); if (typeof window.recordState === 'function') { window.recordState(); } else if (typeof recordState === 'function') { recordState(); } if (typeof updateControls === 'function') { updateControls(); } } } if (event.keyCode == 40) { //down let v = 1; if (_keyctrl || event.ctrlKey || event.metaKey) { v = 5; } const currentCanvas = window.canvas || canvas; if (currentCanvas && currentCanvas.getActiveObject()) { let y = currentCanvas.getActiveObject().get('top'); y += v; currentCanvas.getActiveObject().set('top', y); currentCanvas.renderAll(); if (typeof window.recordState === 'function') { window.recordState(); } else if (typeof recordState === 'function') { recordState(); } if (typeof updateControls === 'function') { updateControls(); } } } // 普通删除键(DEL键,没有按CTRL/CMD�? if (event.keyCode == 46 && !isModifierKey && !_inputEdit && !_textEdit) { // 使用 window.canvas 作为后备,确保在 eval() 加载 .jsc 时也能访问 const currentCanvas = window.canvas || canvas; const currentObjs = window.objs || objs; if (!currentCanvas) { return; } let actObjs = currentCanvas.getActiveObjects(); let allObjs = currentCanvas.getObjects(); let flag = 0; for (let item of actObjs) { if (item != allObjs[0]) { let i = getIndex(item, currentCanvas);//0是背景,所以从1开始,但objs不包含背景图片,故要-1 currentObjs.splice(i - 1, 1); currentCanvas.remove(item); flag = 1; } } if (typeof window.updateList === 'function') { window.updateList(); } currentCanvas.discardActiveObject(); if (flag == 1) { if (typeof window.recordState === 'function') { window.recordState(); } else if (typeof recordState === 'function') { recordState(); } currentCanvas.renderAll(); if (typeof window.handleObjectSelected === 'function') { window.handleObjectSelected(); } } } }); // pre_add_image 已在 design1.js 中定义为全局变量 $("#addPic").click(function () { OpenDialog(); function OpenDialog() { dialog.showOpenDialog({ title: language_str("selectPic"),//请选择图片 buttonLabel: language_str("comf"),//"确认" filters: [ { name: 'Image File Type', extensions: ['png', 'jpg', 'jpeg'] }, ] }).then(result => { if (result.canceled) return; //console.log(result.filePaths) fabric.Image.fromURL(result.filePaths[0], function (image) { //image.left = pointer.x; image.setSrc(image.toDataURL(), function (image) { pre_add_image = image; background_image.hoverCursor = "crosshair"; $(this).css("background-color", "#646E76"); $("#addOutPic").css("background-color", ""); $("#addText").css("background-color", ""); $("#addCircleText").css("background-color", ""); $("#addOutText").css("background-color", ""); $("#addRect").css("background-color", ""); $("#addCircle").css("background-color", ""); $("#addLine").css("background-color", ""); $("#addQrCode").css("background-color", ""); $("#addBarCode").css("background-color", ""); $("#addCounter").css("background-color", ""); addState = 1; }); //canvas.add(image); }); }).catch(err => { }) } }); $("#addOutPic").click(function () { background_image.hoverCursor = "crosshair"; $(this).css("background-color", "#646E76"); $("#addPic").css("background-color", ""); $("#addText").css("background-color", ""); $("#addCircleText").css("background-color", ""); $("#addOutText").css("background-color", ""); $("#addRect").css("background-color", ""); $("#addCircle").css("background-color", ""); $("#addLine").css("background-color", ""); $("#addQrCode").css("background-color", ""); $("#addBarCode").css("background-color", ""); $("#addCounter").css("background-color", ""); addState = 2; }); $("#addText").click(function () { background_image.hoverCursor = "crosshair"; $(this).css("background-color", "#646E76"); $("#addPic").css("background-color", ""); $("#addOutPic").css("background-color", ""); $("#addCircleText").css("background-color", ""); $("#addOutText").css("background-color", ""); $("#addRect").css("background-color", ""); $("#addCircle").css("background-color", ""); $("#addLine").css("background-color", ""); $("#addQrCode").css("background-color", ""); $("#addBarCode").css("background-color", ""); $("#addCounter").css("background-color", ""); addState = 3; }); $("#addCircleText").click(function () { background_image.hoverCursor = "crosshair"; $(this).css("background-color", "#646E76"); $("#addPic").css("background-color", ""); $("#addOutPic").css("background-color", ""); $("#addText").css("background-color", ""); $("#addOutText").css("background-color", ""); $("#addRect").css("background-color", ""); $("#addCircle").css("background-color", ""); $("#addLine").css("background-color", ""); $("#addQrCode").css("background-color", ""); $("#addBarCode").css("background-color", ""); $("#addCounter").css("background-color", ""); addState = 11; }); $("#addOutText").click(function () { background_image.hoverCursor = "crosshair"; $(this).css("background-color", "#646E76"); $("#addPic").css("background-color", ""); $("#addOutPic").css("background-color", ""); $("#addText").css("background-color", ""); $("#addCircleText").css("background-color", ""); $("#addRect").css("background-color", ""); $("#addCircle").css("background-color", ""); $("#addLine").css("background-color", ""); $("#addQrCode").css("background-color", ""); $("#addBarCode").css("background-color", ""); $("#addCounter").css("background-color", ""); addState = 4; }); $("#addRect").click(function () { background_image.hoverCursor = "crosshair"; $(this).css("background-color", "#646E76"); $("#addPic").css("background-color", ""); $("#addOutPic").css("background-color", ""); $("#addText").css("background-color", ""); $("#addCircleText").css("background-color", ""); $("#addOutText").css("background-color", ""); $("#addCircle").css("background-color", ""); $("#addLine").css("background-color", ""); $("#addQrCode").css("background-color", ""); $("#addBarCode").css("background-color", ""); $("#addCounter").css("background-color", ""); addState = 5; }); $("#addCircle").click(function () { background_image.hoverCursor = "crosshair"; $(this).css("background-color", "#646E76"); $("#addPic").css("background-color", ""); $("#addOutPic").css("background-color", ""); $("#addText").css("background-color", ""); $("#addCircleText").css("background-color", ""); $("#addOutText").css("background-color", ""); $("#addRect").css("background-color", ""); $("#addLine").css("background-color", ""); $("#addQrCode").css("background-color", ""); $("#addBarCode").css("background-color", ""); $("#addCounter").css("background-color", ""); addState = 6; }); $("#addLine").click(function () { background_image.hoverCursor = "crosshair"; $(this).css("background-color", "#646E76"); $("#addPic").css("background-color", ""); $("#addOutPic").css("background-color", ""); $("#addText").css("background-color", ""); $("#addCircleText").css("background-color", ""); $("#addOutText").css("background-color", ""); $("#addRect").css("background-color", ""); $("#addCircle").css("background-color", ""); $("#addQrCode").css("background-color", ""); $("#addBarCode").css("background-color", ""); $("#addCounter").css("background-color", ""); addState = 7; }); $("#addQrCode").click(function () { background_image.hoverCursor = "crosshair"; $(this).css("background-color", "#646E76"); $("#addPic").css("background-color", ""); $("#addOutPic").css("background-color", ""); $("#addText").css("background-color", ""); $("#addCircleText").css("background-color", ""); $("#addOutText").css("background-color", ""); $("#addRect").css("background-color", ""); $("#addCircle").css("background-color", ""); $("#addLine").css("background-color", ""); $("#addBarCode").css("background-color", ""); $("#addCounter").css("background-color", ""); addState = 8; }); $("#addBarCode").click(function () { background_image.hoverCursor = "crosshair"; $(this).css("background-color", "#646E76"); $("#addPic").css("background-color", ""); $("#addOutPic").css("background-color", ""); $("#addText").css("background-color", ""); $("#addCircleText").css("background-color", ""); $("#addOutText").css("background-color", ""); $("#addRect").css("background-color", ""); $("#addCircle").css("background-color", ""); $("#addLine").css("background-color", ""); $("#addQrCode").css("background-color", ""); $("#addCounter").css("background-color", ""); addState = 9; }); $("#addCounter").click(function () { background_image.hoverCursor = "crosshair"; $(this).css("background-color", "#646E76"); $("#addPic").css("background-color", ""); $("#addOutPic").css("background-color", ""); $("#addText").css("background-color", ""); $("#addCircleText").css("background-color", ""); $("#addOutText").css("background-color", ""); $("#addRect").css("background-color", ""); $("#addCircle").css("background-color", ""); $("#addLine").css("background-color", ""); $("#addQrCode").css("background-color", ""); $("#addBarCode").css("background-color", ""); addState = 10; }); $("#version_change").click(function () { if (bg_version == 1) { bg_version = 2; } else { bg_version = 1; } // 类型改变 $("#source_front").attr("src", "./public/images/front_bg" + bg_version + "_1.png"); canvas.renderAll(); }); $("#front_side").click(function () { $(this).addClass("ui-button-active"); $("#back_side").removeClass("ui-button-active"); $(".canvas-container:eq(0)").show(); $(".canvas-container:eq(1)").hide(); canvas = canvas1; objs = objs1; background_image = background_image1; window.canvas = canvas; window.objs = objs; window.background_image = background_image; next_objs = next_objs1; pre_objs = pre_objs1; next_json = next_json1; pre_json = pre_json1; recordObjs = recordObjs1; recordJson = recordJson1; step = step1; if (typeof window.updateList === 'function') { window.updateList(); } $("#line_control").hide(); $("#base_control").hide(); $("#pic_control").hide(); $("#out_pic_control").hide(); $("#text_control").hide(); $("#circle_text_control").hide(); $("#out_text_control").hide(); $("#rect_control").hide(); $("#circle_control").hide(); $("#counter_control").hide(); $("#qrcode_Controll").hide(); $("#barcode_controll").hide(); $("#component_type").text(language_str("bg"));//背景 }); $("#back_side").click(function () { $(this).addClass("ui-button-active"); $("#front_side").removeClass("ui-button-active"); $(".canvas-container:eq(0)").hide(); $(".canvas-container:eq(1)").show(); canvas = canvas2; objs = objs2; background_image = background_image2; window.canvas = canvas; window.objs = objs; window.background_image = background_image; next_objs = next_objs2; pre_objs = pre_objs2; next_json = next_json2; pre_json = pre_json2; recordObjs = recordObjs2; recordJson = recordJson2; step = step2; if (typeof window.updateList === 'function') { window.updateList(); } $("#line_control").hide(); $("#base_control").hide(); $("#pic_control").hide(); $("#out_pic_control").hide(); $("#text_control").hide(); $("#circle_text_control").hide(); $("#out_text_control").hide(); $("#rect_control").hide(); $("#circle_control").hide(); $("#counter_control").hide(); $("#qrcode_Controll").hide(); $("#barcode_controll").hide(); $("#component_type").text(language_str("bg"));//"背景" }); $("#top_alignment").click(function () { let _objs = canvas.getActiveObjects(); if (_objs.length == 1) { //只选中了一�? let obj = _objs[0]; obj.setCoords(); let coords = obj.getCoords(true); let objMinY = getCoordsMinY(coords); let bgMinY = getCoordsMinY(background_image.getCoords(true)); let deltaY = bgMinY - objMinY; obj.set("top", obj.get("top") + deltaY); obj.setCoords(); canvas.renderAll(); window.recordState(); return; } // 多个对象对齐:找到所有对象边界框的最小Y值 let minTop = Infinity; for (let item of _objs) { item.setCoords(); let coords = item.getCoords(true); let itemMinY = getCoordsMinY(coords); if (itemMinY < minTop) { minTop = itemMinY; } } // 将所有对象对齐到最小Y值 groupItems = []; for (let item of _objs) { item.setCoords(); let coords = item.getCoords(true); let itemMinY = getCoordsMinY(coords); let deltaY = minTop - itemMinY; item.set("top", item.get("top") + deltaY); item.setCoords(); groupItems.push(item); } canvas.discardActiveObject(); let sel = new fabric.ActiveSelection(groupItems, { canvas: canvas, }); canvas.setActiveObject(sel); canvas.requestRenderAll(); canvas.renderAll(); }); $("#bottom_alignment").click(function () { let _objs = canvas.getActiveObjects(); if (_objs.length == 1) { //只选中了一�? let idx = getIndex(_objs[0]); let type = objs[idx - 1].type; let other = 0;//strokeWidth if (type == 5 || type == 6 || type == 7) { other = _objs[0].get("strokeWidth") } let obj = _objs[0]; obj.setCoords(); let coords = obj.getCoords(true); let objMaxY = getCoordsMaxY(coords); let bgMaxY = getCoordsMaxY(background_image.getCoords(true)); let deltaY = bgMaxY - objMaxY; obj.set("top", obj.get("top") + deltaY); obj.setCoords(); canvas.renderAll(); window.recordState(); return; } // 多个对象对齐:找到所有对象边界框的最大Y值 let maxBottom = -Infinity; for (let item of _objs) { item.setCoords(); let coords = item.getCoords(true); let itemMaxY = getCoordsMaxY(coords); if (itemMaxY > maxBottom) { maxBottom = itemMaxY; } } // 将所有对象对齐到最大Y值 groupItems = []; for (let item of _objs) { item.setCoords(); let coords = item.getCoords(true); let itemMaxY = getCoordsMaxY(coords); let deltaY = maxBottom - itemMaxY; item.set("top", item.get("top") + deltaY); item.setCoords(); groupItems.push(item); } canvas.discardActiveObject(); let sel = new fabric.ActiveSelection(groupItems, { canvas: canvas, }); canvas.setActiveObject(sel); canvas.requestRenderAll(); canvas.renderAll(); }); $("#center_y_alignment").click(function () { let _objs = canvas.getActiveObjects(); if (_objs.length == 1) { //只选中了一�? let idx = getIndex(_objs[0]); let type = objs[idx - 1].type; let other = 0;//strokeWidth if (type == 5 || type == 6 || type == 7) { other = _objs[0].get("strokeWidth") } let obj = _objs[0]; obj.setCoords(); let coords = obj.getCoords(true); let objMinY = getCoordsMinY(coords); let objMaxY = getCoordsMaxY(coords); let objCenterY = (objMinY + objMaxY) / 2; let bgCoords = background_image.getCoords(true); let bgMinY = getCoordsMinY(bgCoords); let bgMaxY = getCoordsMaxY(bgCoords); let bgCenterY = (bgMinY + bgMaxY) / 2; let deltaY = bgCenterY - objCenterY; obj.set("top", obj.get("top") + deltaY); obj.setCoords(); canvas.renderAll(); window.recordState(); return; } // 多个对象对齐:找到所有对象边界框的中心Y值 let minTop = Infinity; let maxBottom = -Infinity; for (let item of _objs) { item.setCoords(); let coords = item.getCoords(true); let itemMinY = getCoordsMinY(coords); let itemMaxY = getCoordsMaxY(coords); if (itemMinY < minTop) minTop = itemMinY; if (itemMaxY > maxBottom) maxBottom = itemMaxY; } let groupCenterY = (minTop + maxBottom) / 2; // 将所有对象对齐到中心Y值 groupItems = []; for (let item of _objs) { item.setCoords(); let coords = item.getCoords(true); let itemMinY = getCoordsMinY(coords); let itemMaxY = getCoordsMaxY(coords); let itemCenterY = (itemMinY + itemMaxY) / 2; let deltaY = groupCenterY - itemCenterY; item.set("top", item.get("top") + deltaY); item.setCoords(); groupItems.push(item); } canvas.discardActiveObject(); let sel = new fabric.ActiveSelection(groupItems, { canvas: canvas, }); canvas.setActiveObject(sel); canvas.requestRenderAll(); canvas.renderAll(); window.recordState(); }); $("#left_alignment").click(function () { let _objs = canvas.getActiveObjects(); if (_objs.length == 1) { //只选中了一�? let obj = _objs[0]; obj.setCoords(); let coords = obj.getCoords(true); let objMinX = getCoordsMinX(coords); let bgMinX = getCoordsMinX(background_image.getCoords(true)); let deltaX = bgMinX - objMinX; obj.set("left", obj.get("left") + deltaX); obj.setCoords(); canvas.renderAll(); window.recordState(); return; } // 多个对象对齐:找到所有对象边界框的最小X值 let minLeft = Infinity; for (let item of _objs) { item.setCoords(); let coords = item.getCoords(true); let itemMinX = getCoordsMinX(coords); if (itemMinX < minLeft) { minLeft = itemMinX; } } // 将所有对象对齐到最小X值 groupItems = []; for (let item of _objs) { item.setCoords(); let coords = item.getCoords(true); let itemMinX = getCoordsMinX(coords); let deltaX = minLeft - itemMinX; item.set("left", item.get("left") + deltaX); item.setCoords(); groupItems.push(item); } canvas.discardActiveObject(); let sel = new fabric.ActiveSelection(groupItems, { canvas: canvas, }); canvas.setActiveObject(sel); canvas.requestRenderAll(); canvas.renderAll(); window.recordState(); }); $("#right_alignment").click(function () { let _objs = canvas.getActiveObjects(); if (_objs.length == 1) { //只选中了一�? let idx = getIndex(_objs[0]); let type = objs[idx - 1].type; let other = 0;//strokeWidth if (type == 5 || type == 6 || type == 7) { other = item.get("strokeWidth") } let obj = _objs[0]; obj.setCoords(); let coords = obj.getCoords(true); let objMaxX = getCoordsMaxX(coords); let bgMaxX = getCoordsMaxX(background_image.getCoords(true)); let deltaX = bgMaxX - objMaxX; obj.set("left", obj.get("left") + deltaX); obj.setCoords(); canvas.renderAll(); window.recordState(); return; } // 多个对象对齐:找到所有对象边界框的最大X值 let maxRight = -Infinity; for (let item of _objs) { item.setCoords(); let coords = item.getCoords(true); let itemMaxX = getCoordsMaxX(coords); if (itemMaxX > maxRight) { maxRight = itemMaxX; } } // 将所有对象对齐到最大X值 let groupItems = []; for (let item of _objs) { item.setCoords(); let coords = item.getCoords(true); let itemMaxX = getCoordsMaxX(coords); let deltaX = maxRight - itemMaxX; item.set("left", item.get("left") + deltaX); item.setCoords(); groupItems.push(item); } //BUG1 canvas.discardActiveObject(); let sel = new fabric.ActiveSelection(groupItems, { canvas: canvas, }); canvas.setActiveObject(sel); canvas.requestRenderAll(); canvas.renderAll(); window.recordState(); }); $("#center_x_alignment").click(function () { let _objs = canvas.getActiveObjects(); if (_objs.length == 1) { //只选中了一�? let idx = getIndex(_objs[0]); let type = objs[idx - 1].type; let other = 0;//strokeWidth if (type == 5 || type == 6 || type == 7) { other = _objs[0].get("strokeWidth") } let obj = _objs[0]; obj.setCoords(); let coords = obj.getCoords(true); let objMinX = getCoordsMinX(coords); let objMaxX = getCoordsMaxX(coords); let objCenterX = (objMinX + objMaxX) / 2; let bgCoords = background_image.getCoords(true); let bgMinX = getCoordsMinX(bgCoords); let bgMaxX = getCoordsMaxX(bgCoords); let bgCenterX = (bgMinX + bgMaxX) / 2; let deltaX = bgCenterX - objCenterX; obj.set("left", obj.get("left") + deltaX); obj.setCoords(); canvas.renderAll(); window.recordState(); return; } // 多个对象对齐:找到所有对象边界框的中心X值 let minLeft = Infinity; let maxRight = -Infinity; for (let item of _objs) { item.setCoords(); let coords = item.getCoords(true); let itemMinX = getCoordsMinX(coords); let itemMaxX = getCoordsMaxX(coords); if (itemMinX < minLeft) minLeft = itemMinX; if (itemMaxX > maxRight) maxRight = itemMaxX; } let groupCenterX = (minLeft + maxRight) / 2; // 将所有对象对齐到中心X值 groupItems = []; for (let item of _objs) { item.setCoords(); let coords = item.getCoords(true); let itemMinX = getCoordsMinX(coords); let itemMaxX = getCoordsMaxX(coords); let itemCenterX = (itemMinX + itemMaxX) / 2; let deltaX = groupCenterX - itemCenterX; item.set("left", item.get("left") + deltaX); item.setCoords(); groupItems.push(item); } canvas.discardActiveObject(); let sel = new fabric.ActiveSelection(groupItems, { canvas: canvas, }); canvas.setActiveObject(sel); canvas.requestRenderAll(); canvas.renderAll(); window.recordState(); }); $("#up_obj").click(function () {//上移,放到前�?数组中在后面 let idx = getIndex(canvas.getActiveObject()); if (idx + 1 != canvas.getObjects().length) { canvas.bringForward(canvas.getActiveObject()); canvas.renderAll(); let temp = objs[idx - 1]; objs[idx - 1] = objs[idx]; objs[idx] = temp; //console.log(objs); window.recordState(); if (typeof window.updateList === 'function') { window.updateList(); } if (typeof window.selectObj === 'function') { window.selectObj(idx); } } }); $("#down_obj").click(function () {//下移,放到后�?数组中在前面 let idx = getIndex(canvas.getActiveObject()); if (idx != 1) { canvas.sendBackwards(canvas.getActiveObject()); canvas.renderAll(); //[objs[idx-2],objs[idx-1]] = [objs[idx-1],objs[idx-2]]; let temp = objs[idx - 1]; objs[idx - 1] = objs[idx - 2]; objs[idx - 2] = temp; window.recordState(); if (typeof window.updateList === 'function') { window.updateList(); } if (typeof window.selectObj === 'function') { window.selectObj(idx - 2); } } }); $("#set_bg").click(function () {//设置为背�? let obj = canvas.getActiveObject(); let idx = getIndex(obj); const scaleX = 2787 / obj.width const scaleY = 2787 / obj.height // 使用缩放后的实际尺寸计算位置,确保与初始背景图片位置一致 const scaledWidth = obj.width * scaleX; const scaledHeight = obj.height * scaleY; obj.set({ scaleX: scaleX, scaleY: scaleY, left: ($('#canvas1').width() - scaledWidth) / 2, top: ($('#canvas1').height() - scaledHeight) / 2, }); $('#text_w').val(2787) $('#text_h').val(2787) $('#text_x').val(0) $('#text_y').val(0) if (obj.get("selectable")) { obj.set("selectable", false); $("#lock_img").attr("src", "public/images/lock20.png") } canvas.sendToBack(obj); canvas.bringForward(obj); canvas.renderAll(); let objItem = objs.splice(idx - 1, 1)[0] objs.unshift(objItem) window.recordState(); if (typeof window.updateList === 'function') { window.updateList(); } if (typeof window.selectObj === 'function') { window.selectObj(0); } }); // ========================================== // onStateRestored 函数在 core.js 中定义并附加到 window 对象 // ========================================== $("#previous").click(function () { if (step.val == 0) return; step.val--; // 判断当前是正面还是背面 if ($("#front_side").hasClass("ui-button-active")) { // 1. 恢复业务数据 objs1 = JSON.parse(recordObjs1[step.val]); objs = objs1; // 2. 恢复画布 (使用回调函数) canvas.loadFromJSON(recordJson1[step.val], function () { // 加载后解锁所有对象(背景除外) if (typeof window.unlockAllObjects === 'function') { window.unlockAllObjects(canvas); } if (typeof window.onStateRestored === 'function') { window.onStateRestored(); // 图片加载完才执行这一行 } }); } else { // 背面逻辑 objs2 = JSON.parse(recordObjs2[step.val]); objs = objs2; canvas.loadFromJSON(recordJson2[step.val], function () { if (typeof window.onStateRestored === 'function') { window.onStateRestored(); } }); } }); // ========================================== $("#next").click(function () { // 获取当前历史记录的最大长度 let maxLen = $("#front_side").hasClass("ui-button-active") ? recordObjs1.length : recordObjs2.length; if (step.val >= maxLen - 1) return; step.val++; if ($("#front_side").hasClass("ui-button-active")) { objs1 = JSON.parse(recordObjs1[step.val]); objs = objs1; canvas.loadFromJSON(recordJson1[step.val], function () { // 加载后解锁所有对象(背景除外) if (typeof window.unlockAllObjects === 'function') { window.unlockAllObjects(canvas); } if (typeof window.onStateRestored === 'function') { window.onStateRestored(); // 图片加载完才执行这一行 } }); } else { objs2 = JSON.parse(recordObjs2[step.val]); objs = objs2; canvas.loadFromJSON(recordJson2[step.val], function () { if (typeof window.onStateRestored === 'function') { window.onStateRestored(); } }); } }); $("#clean").click(function () { objs.splice(0, objs.length); let allObjs = canvas.getObjects(); for (let item of allObjs) { if (item != allObjs[0]) { canvas.remove(item); } } if (typeof window.updateList === 'function') { window.updateList(); } window.recordState(); }); $("#rotate").click(function () { let obj = canvas.getActiveObject(); obj.rotate(Math.round((obj.get("angle") + 90) % 360)); $("#text_r").val(obj.get("angle")); canvas.renderAll(); updateControls(); window.recordState(); }); $('#vertical_obj').click(function () { let obj = canvas.getActiveObject(); obj.set("flipY", !obj.get("flipY")); canvas.renderAll(); updateControls(); window.recordState(); }); $('#align_obj').click(function () { let obj = canvas.getActiveObject(); obj.set("flipX", !obj.get("flipX")); canvas.renderAll(); updateControls(); window.recordState(); }); $("#text_italics").click(function () { if ($(this).hasClass("ui-radio-acitve")) { //已�? canvas.getActiveObject().set("fontStyle", "normal") $(this).removeClass("ui-radio-acitve") } else { //未�? canvas.getActiveObject().set("fontStyle", "italic") $(this).addClass("ui-radio-acitve") } window.recordState(); canvas.renderAll(); window.recordState(); }); $("#text_bold").click(function () { if ($(this).hasClass("ui-radio-acitve")) { //已�?恢复正常 canvas.getActiveObject().set("fontWeight", "normal") $(this).removeClass("ui-radio-acitve") } else { //未�? canvas.getActiveObject().set("fontWeight", "bold") $(this).addClass("ui-radio-acitve") } window.recordState(); canvas.renderAll(); window.recordState(); }); $("#text_underline").click(function () { if ($(this).hasClass("ui-radio-acitve")) { //已�? canvas.getActiveObject().set("underline", false) $(this).removeClass("ui-radio-acitve") } else { //未�? canvas.getActiveObject().set("underline", true) $(this).addClass("ui-radio-acitve") } window.recordState(); canvas.renderAll(); window.recordState(); }); $("#text_linethrough").click(function () { if ($(this).hasClass("ui-radio-acitve")) { //已�? canvas.getActiveObject().set("linethrough", false) $(this).removeClass("ui-radio-acitve") } else { //未�? canvas.getActiveObject().set("linethrough", true) $(this).addClass("ui-radio-acitve") } window.recordState(); canvas.renderAll(); window.recordState(); }); $("#circle_text_italics").click(function () { if ($(this).hasClass("ui-radio-acitve")) { //已�? canvas.getActiveObject().set("fontStyle", "normal") $(this).removeClass("ui-radio-acitve") } else { //未�? canvas.getActiveObject().set("fontStyle", "italic") $(this).addClass("ui-radio-acitve") } window.recordState(); canvas.renderAll(); window.recordState(); }); $("#circle_text_bold").click(function () { if ($(this).hasClass("ui-radio-acitve")) { //已�?恢复正常 canvas.getActiveObject().set("fontWeight", "normal") $(this).removeClass("ui-radio-acitve") } else { //未�? canvas.getActiveObject().set("fontWeight", "bold") $(this).addClass("ui-radio-acitve") } window.recordState(); canvas.renderAll(); window.recordState(); }); $('#out_left_alignment').click(function () { $('#out_left_alignment').parent().removeClass('tool1') $('#out_right_alignment').parent().removeClass('tool1') $('#out_center_alignment').parent().removeClass('tool1') setTimeout(() => { $('#out_left_alignment').parent().addClass('tool1') }); canvas.getActiveObject().set('textAlign', 'left') let idx = getIndex(canvas.getActiveObject()) objs[idx - 1].align = 'left' window.recordState(); canvas.renderAll(); }) $('#out_right_alignment').click(function () { $('#out_left_alignment').parent().removeClass('tool1') $('#out_right_alignment').parent().removeClass('tool1') $('#out_center_alignment').parent().removeClass('tool1') setTimeout(() => { $('#out_right_alignment').parent().addClass('tool1') }); canvas.getActiveObject().set('textAlign', 'right') let idx = getIndex(canvas.getActiveObject()) objs[idx - 1].align = 'right' window.recordState(); canvas.renderAll(); }) $('#out_center_alignment').click(function () { $('#out_left_alignment').parent().removeClass('tool1') $('#out_right_alignment').parent().removeClass('tool1') $('#out_center_alignment').parent().removeClass('tool1') setTimeout(() => { $('#out_center_alignment').parent().addClass('tool1') }); canvas.getActiveObject().set('textAlign', 'center') let idx = getIndex(canvas.getActiveObject()) objs[idx - 1].align = 'center' window.recordState(); canvas.renderAll(); }) $("#out_text_italics").click(function () { if ($(this).hasClass("ui-radio-acitve")) { //已�? canvas.getActiveObject().set("fontStyle", "normal") $(this).removeClass("ui-radio-acitve") } else { //未�? canvas.getActiveObject().set("fontStyle", "italic") $(this).addClass("ui-radio-acitve") } window.recordState(); canvas.renderAll(); window.recordState(); }); $("#out_text_bold").click(function () { if ($(this).hasClass("ui-radio-acitve")) { //已�?恢复正常 canvas.getActiveObject().set("fontWeight", "normal") $(this).removeClass("ui-radio-acitve") } else { //未�? canvas.getActiveObject().set("fontWeight", "bold") $(this).addClass("ui-radio-acitve") } window.recordState(); canvas.renderAll(); window.recordState(); }); $("#out_text_underline").click(function () { if ($(this).hasClass("ui-radio-acitve")) { //已�? canvas.getActiveObject().set("underline", false) $(this).removeClass("ui-radio-acitve") } else { //未�? canvas.getActiveObject().set("underline", true) $(this).addClass("ui-radio-acitve") } window.recordState(); canvas.renderAll(); window.recordState(); }); $("#out_text_linethrough").click(function () { if ($(this).hasClass("ui-radio-acitve")) { //已�? canvas.getActiveObject().set("linethrough", false) $(this).removeClass("ui-radio-acitve") } else { //未�? canvas.getActiveObject().set("linethrough", true) $(this).addClass("ui-radio-acitve") } window.recordState(); canvas.renderAll(); window.recordState(); }); $("#lock").off('click').on('click', function (e) { e.stopPropagation(); if (!canvas.getActiveObject()) return; let obj = canvas.getActiveObject(); // 检查是否已锁定(通过lockMovementX判断,因为锁定时会设置所有lock属性) let isLocked = obj.get("lockMovementX") === true; let shouldLock = !isLocked; // 锁定/解锁所有编辑操作,但保持选中状态(不取消选中) obj.set({ lockMovementX: shouldLock, lockMovementY: shouldLock, lockRotation: shouldLock, lockScalingX: shouldLock, lockScalingY: shouldLock, lockSkewingX: shouldLock, lockSkewingY: shouldLock, // 锁定时不可选中,解锁时可选中(但保持当前选中状态) selectable: !shouldLock, evented: !shouldLock }); if (shouldLock) { $("#lock_img").attr("src", "public/images/lock20.png")//已锁定 } else { $("#lock_img").attr("src", "public/images/unlock20.png")//已解锁 } updateControls(); window.recordState(); // 更新对象列表以同步锁状态 if (typeof window.updateList === 'function') { window.updateList(); } canvas.renderAll(); }); $("#text_back_transparent").click(function () { canvas.getActiveObject().set("textBackgroundColor", ""); $("#text_back_color").val("#ffffff"); canvas.renderAll(); window.recordState(); }); $("#circle_text_back_transparent").click(function () { canvas.getActiveObject().set("textBackgroundColor", ""); $("#circle_text_back_color").val("#ffffff"); canvas.renderAll(); window.recordState(); }); $("#out_text_back_transparent").click(function () { canvas.getActiveObject().set("textBackgroundColor", ""); $("#out_text_back_color").val("#ffffff"); canvas.renderAll(); window.recordState(); }); $("#rect_transparent").click(function () { canvas.getActiveObject().set("fill", ""); $("#rect_color").val("#ffffff"); canvas.renderAll(); window.recordState(); }); $("#rect_stroke_transparent").click(function () { canvas.getActiveObject().set("stroke", ""); $("#rect_stroke").val("#ffffff"); canvas.renderAll(); window.recordState(); }); $("#circle_transparent").click(function () { canvas.getActiveObject().set("fill", ""); $("#circle_color").val("#ffffff"); canvas.renderAll(); window.recordState(); }); $("#circle_stroke_transparent").click(function () { canvas.getActiveObject().set("stroke", ""); $("#circle_stroke").val("#ffffff"); canvas.renderAll(); window.recordState(); }); // saveAs 函数保留,因为它被作为回调传递给 output 函数(第52行) function saveAs(op1, callback) { let j = canvas1.toJSON(["selectable", "hoverable", "hoverCursor", "text", "fontStyle", "fontWeight", "underline"]); let b = canvas2.toJSON(["selectable", "hoverable", "hoverCursor", "text", "fontStyle", "fontWeight", "underline"]); // 清理不需要的 src 字段(使用 window.cleanupSrcFields,在 output.js 中定义) if (typeof window.cleanupSrcFields === 'function') { window.cleanupSrcFields(j.objects, objs1); window.cleanupSrcFields(b.objects, objs2); } let o = { f: j, b: {}, fo: objs1, bo: objs2 }; let con_o = Object.assign(o, op1); dialog.showSaveDialog({ title: language_str("saveFile"),//'保存文件' filters: [ { name: 'Soon File Type', extensions: ['soon'] }, ] }).then(result => { if (result.filePath == "") { return; } if (result.filePath.substring(result.filePath.length - 5).indexOf('.') == -1) { result.filePath += '.soon'; } let fs = require('fs') con_o.soonType = 1 fs.writeFileSync(result.filePath, JSON.stringify(con_o), 'utf8') openAs.name = result.filePath; layer.msg(language_str("saveSucc") + openAs.name);//'保存成功�? if (typeof window.saveHistory === 'function') { window.saveHistory(); } if (callback && typeof callback === 'function') { callback(); } }).catch(err => { }) } // save 函数已在 output.js 中定义 $("#copy").click(function () { window.copySelection(); }) // 粘贴 $("#paste").click(function () { window.pasteFromClipboard(); }) // 保存 (保持你原有的保存逻辑不变) $("#save").click(function () { if (typeof window.output === 'function') { window.output(); // 这里调用你的 output 函数 } return; // ... (下面是你原有的被 return 截断的代码,建议以后清理掉,但这里我按要求保�? let j = canvas1.toJSON(["selectable", "hoverable", "hoverCursor", "text", "fontStyle", "fontWeight", "underline"]); // ... (省略你原来那段很长的保存代码) ... }); function getDate() { let date = new Date(); return date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate(); } function getAbsoluteXY(_obj) { let coord = _obj.get("lineCoords"); return [_obj.get("left"), _obj.get("top")] } // fullPath 和 saveHistory 已在 output.js 中定义 $("#open").click(function () { if (step.val == 0) { OpenDialog(); return; } layer.confirm('' + language_str("whetherSave") + '', function (index) {//confirm 是否保存当前文件�? if (typeof window.output === 'function') { window.output(OpenDialog); } layer.close(index); }, function (index) { OpenDialog(); }); function OpenDialog() { dialog.showOpenDialog({ title: "请选择文件", buttonLabel: language_str("comf"), filters: [ { name: 'Soon File Type', extensions: ['soon'] }, ] }).then(result => { if (result.canceled) return; let filePath = result.filePaths[0]; let fs = require('fs'); let fsData = fs.readFileSync(filePath); let j = JSON.parse(fsData.toString()); let type = j.soonType ? j.soonType : j.backBlackPic ? 2 : 1; if (type == 2) { ipcRenderer.send('open-design-page', filePath, type); return; } // 调用 output.js 中的 openFile 函数 if (typeof window.openFile === 'function') { window.openFile(filePath); } }).catch(err => { }) } }); //let blank = "{\"f\":{\"version\":\"4.6.0\",\"objects\":[{\"type\":\"image\",\"version\":\"4.6.0\",\"originX\":\"left\",\"originY\":\"top\",\"left\":253.5,\"top\":121.5,\"width\":2787,\"height\":2787,\"fill\":\"#000000\",\"stroke\":null,\"strokeWidth\":0,\"strokeDashArray\":null,\"strokeLineCap\":\"butt\",\"strokeDashOffset\":0,\"strokeLineJoin\":\"miter\",\"strokeUniform\":false,\"strokeMiterLimit\":4,\"scaleX\":1,\"scaleY\":1,\"angle\":0,\"flipX\":false,\"flipY\":false,\"opacity\":1,\"shadow\":null,\"visible\":true,\"backgroundColor\":\"\",\"fillRule\":\"nonzero\",\"paintFirst\":\"fill\",\"globalCompositeOperation\":\"source-over\",\"skewX\":0,\"skewY\":0,\"cropX\":0,\"cropY\":0,\"selectable\":false,\"hoverable\":false,\"hoverCursor\":\"default\",\"src\":\"data:image/png;base64,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YFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIEDpfCiFAAAcY0lEQVSAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMT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\",\"crossOrigin\":null,\"filters\":[]}],\"hoverCursor\":\"move\"},\"b\":{\"version\":\"4.6.0\",\"objects\":[{\"type\":\"image\",\"version\":\"4.6.0\",\"originX\":\"left\",\"originY\":\"top\",\"left\":253.5,\"top\":121.5,\"width\":2787,\"height\":2787,\"fill\":\"rgb(0,0,0)\",\"stroke\":null,\"strokeWidth\":0,\"strokeDashArray\":null,\"strokeLineCap\":\"butt\",\"strokeDashOffset\":0,\"strokeLineJoin\":\"miter\",\"strokeUniform\":false,\"strokeMiterLimit\":4,\"scaleX\":1,\"scaleY\":1,\"angle\":0,\"flipX\":false,\"flipY\":false,\"opacity\":1,\"shadow\":null,\"visible\":true,\"backgroundColor\":\"\",\"fillRule\":\"nonzero\",\"paintFirst\":\"fill\",\"globalCompositeOperation\":\"source-over\",\"skewX\":0,\"skewY\":0,\"cropX\":0,\"cropY\":0,\"selectable\":false,\"hoverable\":false,\"hoverCursor\":\"default\",\"src\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAwAAAKICAYAAAD0EmiCAAAAAXNSR0IArs4c6QAAIABJREFUeF7t3W3I5Xldx/HvT3SLdk0ljFyN0t1IEjN2TMEHZXcoKEjmQ9HKUkgURQtv8pGlVN6UlqBJN+Kzwhuo0MjKHhi27pJJUbG7IesNJOUurt2s6T/+cmYZd3bmc12zM7M783kd2Acy3+uc831954lvzpxrzX3w2LbtATPz+Jm5bmYeNzPXzszVM/NtM3Pl4b+r7oO35iUJECBAgAABAgQIECBAgMDFFrhjZr58+O8/ZuZzM3PTzPzTzNw4M/+w1vraxX5T62K94LZtj56ZZ8zMj87MDx3iwMV6ea9DgAABAgQIECBAgAABAgQuVYH/nJmPzsxfzsyfrrX+7WIsckGDwbZtD5mZ587M82bmSRdjIa9BgAABAgQIECBAgAABAgQuc4G/m5n3zMx711q3X6hdL0gw2LbtETPzypl54cz4pwUX6nqelwABAgQIECBAgAABAgSaBfZ/yvCumXnTWuvz5xvivAaDQyh43cz8zMx88/l+s56PAAECBAgQIECAAAECBAgQOE3gf2bm92fm9eczHJyXYLBt24MOnyh4jU8U+KtLgAABAgQIECBAgAABAgTuE4H9EwdvOHzi4Cv39h3c62CwbduJQ8nYf+uBBwECBAgQIECAAAECBAgQIHDfCnxqZn56rbX/hoVzfpxzMNi2bf/ZV8zMr87MFef8DvwgAQIECBAgQIAAAQIECBAgcL4F7pyZ187Mm9da27k8+TkFg23bHjwzfzAzzz6XF/UzBAgQIECAAAECBAgQIECAwEUReP/MPH+t9aXjvtqxg8G2bY+cmT+ZmR847ouZJ0CAAAECBAgQIECAAAECBC66wN/PzDPXWp89zisfKxhs23bNzPzFzHz3cV7ELAECBAgQIECAAAECBAgQIHCfCnx6Zn5srXXzUd/FkYPBtm2Pnpm/mZlHHfXJzREgQIAAAQIECBAgQIAAAQL3G4HPzMwPr7VuOco7OlIw2Lbt4TPzsZm59ihPaoYAAQIECBAgQIAAAQIECBC4XwrcNDNPWWt9Ib27GAy2bbtyZj4yM09OT+bPCRAgQIAAAQIECBAgQIAAgfu9wMdn5ifSFyGeNRgcfnXiH83MT93v1/UGCRAgQIAAAQIECBAgQIAAgaMKvG9mnnO2X7mYgsErZ+Y3jvpq5ggQIECAAAECBAgQIECAAIFLRuCX1lpn/P/8ZwwG27ZdNzN/OzNXXDKreqMECBAgQIAAAQIECBAgQIDAUQXuPHyfwQ339AP3GAy2bXvQzHxiZr7/qK9ijgABAgQIECBAgAABAgQIELjkBD41MyfWWl+5+zs/UzB41cy88ZJb0xsmQIAAAQIECBAgQIAAAQIEjivwmrXWaQ3gtGCwbdvVM/MvM3PVcV/BPAECBAgQIECAAAECBAgQIHDJCdwxM49da3321Hd+T8HgnTPzwktuPW+YAAECBAgQIECAAAECBAgQOFeBd621XnTGYLBt26MPny7Yv8PAgwABAgQIECBAgAABAgQIEOgQ2L/DYP+UwS0n1/2GTxhs2/a2mXlJh4UtCRAgQIAAAQIECBAgQIAAgVME3r7WeulpwWDbtofOzGdm5kpcBAgQIECAAAECBAgQIECAQJ3Af83MI9dat+2b3/UJg23bfmFmfqeOw8IECBAgQIAAAQIECBAgQIDASYEXr7XecfdgcP3MPJERAQIECBAgQIAAAQIECBAgUCtw/VrrSXcFg23brpmZm2o5LE6AAAECBAgQIECAAAECBAicFLhm//LDr/+ThG3bXjYzb2VDgAABAgQIECBAgAABAgQI1Au8bK31WyeDwYdm5mn1JAAIECBAgAABAgQIECBAgACBD6+1nr62bXvgzHxxZq5iQoAAAQIECBAgQIAAAQIECNQL3DEzD9uDwXUzc0M9BwACBAgQIECAAAECBAgQIEDgpMCJPRi8YGbezYQAAQIECBAgQIAAAQIECBAgcBB4wR4M3jIzL0dCgAABAgQIECBAgAABAgQIEDgIvHUPBh+YmWchIUCAAAECBAgQIECAAAECBAgcBD64B4P9+wv27zHwIECAAAECBAgQIECAAAECBAjsAjfuweBfZ+Z7eBAgQIAAAQIECBAgQIAAAQIEDgK37sHg8zPzHUgIECBAgAABAgQIECBAgAABAgeB2/dgsP9+xSuRECBAgAABAgQIECBAgAABAgQOAl/dg8GGgwABAgQIECBAgAABAgQIECBwqoBg4O8DAQIECBAgQIAAAQIECBAgcJqAYOAvBQECBAgQIECAAAECBAgQICAY+DtAgAABAgQIECBAgAABAgQIZAGfMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIEDpfCiFAAAcY0lEQVSAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMT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\",\"crossOrigin\":null,\"filters\":[]}],\"hoverCursor\":\"move\"},\"fo\":[],\"bo\":[]}"; let t_objs1 = canvas1.getObjects(); let t_objs2 = canvas2.getObjects(); for (let i = 1; i < t_objs1.length; i++) { canvas1.remove(t_objs1[i]); } for (let i = 1; i < t_objs2.length; i++) { canvas2.remove(t_objs2[i]); } objs2 = []; objs1 = []; step1.val = 0; step2.val = 0; recordJson1 = []; recordJson2 = []; recordObjs1 = []; recordObjs2 = []; if ($("#front_side").hasClass("ui-button-active")) { objs = objs1; recordObjs = recordObjs1; recordJson = recordJson1; step = step1; } else if ($("#back_side").hasClass("ui-button-active")) { objs = objs2; recordObjs = recordObjs2; recordJson = recordJson2; step = step2; } openAs.name = ""; canvas1.renderAll(); canvas2.renderAll(); if (typeof window.updateList === 'function') { window.updateList(); } $("#new").click(function () { if (step.val == 0) { ipcRenderer.send('open-first-page'); return; } layer.confirm('' + language_str("whetherSave") + '', function (index) {//confirm 是否保存当前文件�? if (typeof window.output === 'function') { window.output(() => ipcRenderer.send('open-first-page')); } }, function (index) { ipcRenderer.send('open-first-page'); }); }); // =========================================================== $("#text_y").bind('input propertychange', function () { if (!canvas.getActiveObject()) return; if ($("#text_y").val() == "") { $("#text_y").val(0) } let val = background_image.top; if ($("#text_y").val() != "") { val = background_image.top + parseInt($("#text_y").val()); } canvas.getActiveObject().set("top", val) canvas.renderAll(); window.recordState(); }) $("#text_x").bind('input propertychange', function () { if (!canvas.getActiveObject()) return; if ($("#text_x").val() == "") { $("#text_x").val(0) } let val = background_image.left; if ($("#text_x").val() != "") { val = background_image.left + parseInt($("#text_x").val()); } canvas.getActiveObject().set("left", val) canvas.renderAll(); window.recordState(); }) $("#text_w").bind('input propertychange', function () { if (!canvas.getActiveObject()) return; let val = "0"; if ($("#text_w").val() != "") { val = $("#text_w").val(); } let idx = getIndex(canvas.getActiveObject()); if (idx <= 0 || !objs[idx - 1]) return; let type = objs[idx - 1].type; if (type == 3 || type == 4) { canvas.getActiveObject().set("width", parseInt(val)) } else { canvas.getActiveObject().set("scaleX", parseInt(val) / canvas.getActiveObject().get("width")) } canvas.renderAll(); window.recordState(); }) $("#text_h").bind('input propertychange', function () { if (!canvas.getActiveObject()) return; let idx = getIndex(canvas.getActiveObject()); if (idx <= 0 || !objs[idx - 1]) return; if (objs[idx - 1].type == 7) { if ($("#text_h").val() == "") { $("#text_h").val(canvas.getActiveObject().get("strokeWidth")); } canvas.getActiveObject().set("strokeWidth", parseInt($("#text_h").val())); canvas.renderAll(); return; } let val = "0"; if ($("#text_h").val() != "") { val = $("#text_h").val(); } let type = objs[idx - 1].type; if (type == 3 || type == 4) { canvas.getActiveObject().set("height", parseInt(val)) } else { canvas.getActiveObject().set("scaleY", parseInt(val) / canvas.getActiveObject().get("height")) } canvas.renderAll(); window.recordState(); }) $("#text_r").bind('input propertychange', function () { if (!canvas.getActiveObject()) return; if ($("#text_r").val() == "") { $("#text_r").val("0") } $("#text_r").val(parseInt($("#text_r").val()) % 360) //canvas.getActiveObject().set("rotate", val) canvas.getActiveObject().rotate(parseInt($("#text_r").val())) canvas.renderAll(); window.recordState(); }) $("#out_pic_field_name").bind('input propertychange', function () { let idx = getIndex(canvas.getActiveObject()); objs[idx - 1].name = $("#out_pic_field_name").val(); if (typeof window.updateList === 'function') { window.updateList(); } window.recordState(); }) $("#text_black").click(function () { let idx = getIndex(canvas.getActiveObject()); if ($(this).prop("checked")) { objs[idx - 1].black = true; } else { objs[idx - 1].black = false; } window.recordState(); }); $("#out_text_field_name").bind('input propertychange', function () { let idx = getIndex(canvas.getActiveObject()); objs[idx - 1].name = $("#out_text_field_name").val(); if (typeof window.updateList === 'function') { window.updateList(); } window.recordState(); }) $("#qrcode_field_name").bind('input propertychange', function () { let idx = getIndex(canvas.getActiveObject()); objs[idx - 1].name = $("#qrcode_field_name").val(); if (typeof window.updateList === 'function') { window.updateList(); } window.recordState(); }) $("#qrcode_color").bind('input propertychange', function () { let item = canvas.getActiveObject(); let qr = jrQrcode.getQrBase64($("#qrcode_val").val(), { padding: 0, foreground: $(this).val() }); let idx = getIndex(item); objs[idx - 1].color = $(this).val(); item.setSrc(qr, function (img) { canvas.renderAll(); window.recordState(); }); }); $("#qrcode_val").bind('change', function () { let val = $(this).val() ? $(this).val() : 'https://www.cardsoon.com' let item = canvas.getActiveObject(); let qr = jrQrcode.getQrBase64(val, { padding: 0, foreground: $("#qrcode_color").val() }); let idx = getIndex(item); objs[idx - 1].val = val; item.setSrc(qr, function (img) { canvas.renderAll(); window.recordState(); }); }); $("#barcode_color").bind('input propertychange', function () { let item = canvas.getActiveObject(); let idx = getIndex(item); objs[idx - 1].color = $(this).val(); JsBarcode("#barcode", objs[idx - 1].val, { margin: 0, lineColor: objs[idx - 1].color, fontSize: objs[idx - 1].fontSize, font: objs[idx - 1].font }); let barcode = document.getElementById('barcode'); let bar = barcode.toDataURL("image/png"); item.setSrc(bar, function (img) { canvas.renderAll(); window.recordState(); }); }); $("#barcode_field_name").bind('input propertychange', function () { let idx = getIndex(canvas.getActiveObject()); objs[idx - 1].name = $("#barcode_field_name").val(); if (typeof window.updateList === 'function') { window.updateList(); } window.recordState(); }) $("#text_color").bind('input propertychange', function () { canvas.getActiveObject().set("fill", $("#text_color").val()); canvas.renderAll(); window.recordState(); }) $("#text_back_color").bind('input propertychange', function () { canvas.getActiveObject().set("textBackgroundColor", $("#text_back_color").val()); canvas.renderAll(); window.recordState(); }) $("#text_size").bind('input propertychange', function () { let val = 1 if (parseFloat($("#text_size").val())) { val = parseFloat($("#text_size").val()) if (val < 1) { val = 1 } else if (val > dpi) { val = dpi } else if (val % 0.5 !== 0) { val = Math.round(val * 2) / 2 } } $("#text_size").val(val) canvas.getActiveObject().set("fontSize", val * dpi / 72); $("#text_h").val((canvas.getActiveObject().get("height")).toFixed(0)); $("#text_w").val((canvas.getActiveObject().get("width")).toFixed(0)); canvas.renderAll(); window.recordState(); }) $("#circle_text_color").bind('input propertychange', function () { canvas.getActiveObject().set("fill", $("#circle_text_color").val()); canvas.renderAll(); window.recordState(); }) $("#circle_text_back_color").bind('input propertychange', function () { canvas.getActiveObject().set("textBackgroundColor", $("#circle_text_back_color").val()); canvas.renderAll(); window.recordState(); }) $("#circle_text_text").bind('input propertychange', function () { let val = $("#circle_text_text").val().trim() canvas.getActiveObject().set("text", ` ${val} `); canvas.renderAll(); if (typeof window.updateList === 'function') { window.updateList(); } window.recordState(); }) $("#out_text_color").bind('input propertychange', function () { canvas.getActiveObject().set("fill", $("#out_text_color").val()); canvas.renderAll(); window.recordState(); }) $("#out_text_back_color").bind('input propertychange', function () { canvas.getActiveObject().set("textBackgroundColor", $("#out_text_back_color").val()); canvas.renderAll(); window.recordState(); }) $("#out_text_size").bind('input propertychange', function () { let val = 1 if (parseFloat($("#out_text_size").val())) { val = parseFloat($("#out_text_size").val()) if (val < 1) { val = 1 } else if (val > dpi) { val = dpi } else if (val % 0.5 !== 0) { val = Math.round(val * 2) / 2 } } $("#out_text_size").val(val) canvas.getActiveObject().set("fontSize", val * dpi / 72); $("#text_h").val((canvas.getActiveObject().get("height")).toFixed(0)); $("#text_w").val((canvas.getActiveObject().get("width")).toFixed(0)); canvas.renderAll(); window.recordState(); }) // 监听合成文本输入框 (占位符) $("#out_text_text").on('input propertychange', function () { let val = $(this).val(); // 【核心修改】如果值为空,强制给 2 个空格 if (val === "") { val = " "; } let obj = canvas.getActiveObject(); if (obj) { obj.set("text", val); obj.setCoords(); canvas.requestRenderAll(); if (typeof window.updateList === 'function') { window.updateList(); } window.recordState(); } }); $("#rect_color").bind('input propertychange', function () { canvas.getActiveObject().set("fill", $("#rect_color").val()); canvas.renderAll(); window.recordState(); }) $("#rect_stroke").bind('input propertychange', function () { canvas.getActiveObject().set("stroke", $("#rect_stroke").val()); canvas.renderAll(); window.recordState(); }) $("#rect_stroke_width").bind('input propertychange', function () { if ($("#rect_stroke_width").val() == "") { $("#rect_stroke_width").val("0") } else { $("#rect_stroke_width").val(parseInt($("#rect_stroke_width").val())) } canvas.getActiveObject().set("strokeWidth", parseInt($("#rect_stroke_width").val())); canvas.renderAll(); window.recordState(); }) $("#rect_radius").bind('input propertychange', function () { if ($("#rect_radius").val() == "") { $("#rect_radius").val("0") } else { $("#rect_radius").val(parseInt($("#rect_radius").val())) } canvas.getActiveObject().set("rx", parseInt($("#rect_radius").val())); canvas.getActiveObject().set("ry", parseInt($("#rect_radius").val())); canvas.renderAll(); window.recordState(); }) $("#circle_color").bind('input propertychange', function () { canvas.getActiveObject().set("fill", $("#circle_color").val()); canvas.renderAll(); window.recordState(); }) $("#circle_stroke").bind('input propertychange', function () { canvas.getActiveObject().set("stroke", $("#circle_stroke").val()); canvas.renderAll(); window.recordState(); }) $("#circle_stroke_width").bind('input propertychange', function () { if ($("#circle_stroke_width").val() == "") { $("#circle_stroke_width").val("0") } else { $(this).val(parseInt($(this).val())) } canvas.getActiveObject().set("strokeWidth", parseInt($("#circle_stroke_width").val())); canvas.renderAll(); window.recordState(); }) $("#counter_start").bind('input propertychange', function () { canvas.getActiveObject().set("text", $("#counter_start").val()); let item = canvas.getActiveObject(); let idx = getIndex(item); objs[idx - 1].start = $(this).val(); canvas.renderAll(); window.recordState(); }) $("#counter_add").bind('input propertychange', function () { let item = canvas.getActiveObject(); let idx = getIndex(item); objs[idx - 1].add = $(this).val(); canvas.renderAll(); window.recordState(); }) $("#counter_color").bind('input propertychange', function () { canvas.getActiveObject().set("fill", $("#counter_color").val()); canvas.renderAll(); window.recordState(); }) $("#count_size").bind('input propertychange', function () { let val = 1 if (parseFloat($("#count_size").val())) { val = parseFloat($("#count_size").val()) if (val < 1) { val = 1 } else if (val > dpi) { val = dpi } else if (val % 0.5 !== 0) { val = Math.round(val * 2) / 2 } } $("#count_size").val(val) canvas.getActiveObject().set("fontSize", val * dpi / 72); $("#text_h").val((canvas.getActiveObject().get("height")).toFixed(0)); $("#text_w").val((canvas.getActiveObject().get("width")).toFixed(0)); canvas.renderAll(); window.recordState(); }) $("#line_color").bind('input propertychange', function () { canvas.getActiveObject().set("stroke", $("#line_color").val()); canvas.renderAll(); window.recordState(); }) $("#line_dist").bind('input propertychange', function () { if ($("#line_dist").val() == "") { $("#line_dist").val(0) } canvas.getActiveObject().set("strokeDashArray", [parseInt($("#line_dist").val()), parseInt($("#line_dist").val())]) canvas.renderAll(); window.recordState(); }) // 监听普通文本输入 (占位符) $("#text_text").on('input propertychange', function () { // 1. 获取输入框的值,不要用 trim(),否则无法输入空格 let val = $(this).val(); // 2. 核心修改:只有当删光时,才给 4 个空格作为占位符 if (val === "") { val = " "; // 4个空格,比原来的2个更宽,更好点 } // 3. 更新对象 canvas.getActiveObject().set("text", val); canvas.requestRenderAll(); // 使用 requestRenderAll 性能更好 if (typeof window.updateList === 'function') { window.updateList(); } window.recordState(); }); $("#barcode_val").bind('input propertychange', function () { let item = canvas.getActiveObject(); let idx = getIndex(item); objs[idx - 1].val = $(this).val(); JsBarcode("#barcode", objs[idx - 1].val, { margin: 0, lineColor: objs[idx - 1].color, fontSize: objs[idx - 1].fontSize, font: objs[idx - 1].font }); let barcode = document.getElementById('barcode'); let bar = barcode.toDataURL("image/png"); item.setSrc(bar, function (img) { canvas.renderAll(); window.recordState(); }); }) $("#barcode_show").click(function () { let item = canvas.getActiveObject(); let idx = getIndex(canvas.getActiveObject()); let val = $("#barcode_size").val() if ($(this).prop("checked")) { objs[idx - 1].show = true; val = 0 } else { objs[idx - 1].show = false; } JsBarcode("#barcode", objs[idx - 1].val, { margin: 0, lineColor: objs[idx - 1].color, fontSize: val * dpi / 72, font: objs[idx - 1].font }); let barcode = document.getElementById('barcode'); let bar = barcode.toDataURL("image/png"); item.setSrc(bar, function (img) { canvas.renderAll(); window.recordState(); }); }); $("#barcode_size").bind('input propertychange', function () { let item = canvas.getActiveObject(); let idx = getIndex(item); let val = 1 if (parseFloat($(this).val())) { val = parseFloat($(this).val()) if (val < 1) { val = 1 } else if (val > dpi) { val = dpi } else if (val % 0.5 !== 0) { val = Math.round(val * 2) / 2 } } $("#barcode_size").val(val) objs[idx - 1].fontSize = val * dpi / 72; JsBarcode("#barcode", objs[idx - 1].val, { margin: 0, lineColor: objs[idx - 1].color, fontSize: objs[idx - 1].fontSize, font: objs[idx - 1].font }); let barcode = document.getElementById('barcode'); let bar = barcode.toDataURL("image/png"); item.setSrc(bar, function (img) { canvas.renderAll(); window.recordState(); }); }) $('#count_font_family').on('change', function () { canvas.getActiveObject().set("fontFamily", $(this).find('option:selected').text()) canvas.renderAll() window.recordState(); }); $('#text_font_family').on('change', function () { canvas.getActiveObject().set("fontFamily", $(this).find('option:selected').text()) canvas.renderAll() window.recordState(); }); $('#circle_text_font_family').on('change', function () { canvas.getActiveObject().set("fontFamily", $(this).find('option:selected').text()) canvas.renderAll() window.recordState(); }); $('#language_select').on('change', function () {//语言选择 langua_ge($(this).find('option:selected').val()); s_lan = $(this).find('option:selected').val(); localStorage.setItem("lang", s_lan); }); $('#barcode_font_family').on('change', function () { let item = canvas.getActiveObject(); let idx = getIndex(item); objs[idx - 1].font = $(this).find('option:selected').text(); JsBarcode("#barcode", objs[idx - 1].val, { margin: 0, lineColor: objs[idx - 1].color, fontSize: objs[idx - 1].fontSize, font: objs[idx - 1].font }); let barcode = document.getElementById('barcode'); let bar = barcode.toDataURL("image/png"); item.setSrc(bar, function (img) { canvas.renderAll(); window.recordState(); }); //window.recordState(); }); $('#out_text_font_family').on('change', function () { canvas.getActiveObject().set("fontFamily", $(this).find('option:selected').text()) canvas.renderAll() window.recordState(); }); $(".obj_list").on("click", "div", function () { let idx = objs.length - 1 - $(this).index(); if (typeof window.selectObj === 'function') { window.selectObj(idx); } }); $("#exceed").click(function () { let idx = getIndex(canvas.getActiveObject()); if ($(this).prop("checked")) { objs[idx - 1].exceed = true; } else { objs[idx - 1].exceed = false; } window.recordState(); }); $("#autoWrap").click(function () { let idx = getIndex(canvas.getActiveObject()); if ($(this).prop("checked")) { objs[idx - 1].autoWrap = true; } else { objs[idx - 1].autoWrap = false; } window.recordState(); }); $("#fixSize").click(function () { let idx = getIndex(canvas.getActiveObject()); if ($(this).prop("checked")) { objs[idx - 1].fixSize = true; } else { objs[idx - 1].fixSize = false; } window.recordState(); }); $("#circle_text_center").click(function () { let idx = getIndex(canvas.getActiveObject()); if ($(this).prop("checked")) { objs[idx - 1].circleCenter = 1; } else { objs[idx - 1].circleCenter = 0; } window.recordState(); }); // =========================================================== $("#text_italics").click(function () { if ($(this).hasClass("ui-radio-acitve")) { //已选 canvas.getActiveObject().set("fontStyle", "normal") $(this).removeClass("ui-radio-acitve") } else { //未选 canvas.getActiveObject().set("fontStyle", "italic") $(this).addClass("ui-radio-acitve") } window.recordState(); canvas.renderAll(); window.recordState(); }); $("#text_bold").click(function () { if ($(this).hasClass("ui-radio-acitve")) { //已选,恢复正常 canvas.getActiveObject().set("fontWeight", "normal") $(this).removeClass("ui-radio-acitve") } else { //未选 canvas.getActiveObject().set("fontWeight", "bold") $(this).addClass("ui-radio-acitve") } window.recordState(); canvas.renderAll(); window.recordState(); }); $("#text_underline").click(function () { if ($(this).hasClass("ui-radio-acitve")) { //已选 canvas.getActiveObject().set("underline", false) $(this).removeClass("ui-radio-acitve") } else { //未选 canvas.getActiveObject().set("underline", true) $(this).addClass("ui-radio-acitve") } window.recordState(); canvas.renderAll(); window.recordState(); }); $("#text_linethrough").click(function () { if ($(this).hasClass("ui-radio-acitve")) { //已选 canvas.getActiveObject().set("linethrough", false) $(this).removeClass("ui-radio-acitve") } else { //未选 canvas.getActiveObject().set("linethrough", true) $(this).addClass("ui-radio-acitve") } window.recordState(); canvas.renderAll(); window.recordState(); }); $("#circle_text_italics").click(function () { if ($(this).hasClass("ui-radio-acitve")) { //已选 canvas.getActiveObject().set("fontStyle", "normal") $(this).removeClass("ui-radio-acitve") } else { //未选 canvas.getActiveObject().set("fontStyle", "italic") $(this).addClass("ui-radio-acitve") } window.recordState(); canvas.renderAll(); window.recordState(); }); $("#circle_text_bold").click(function () { if ($(this).hasClass("ui-radio-acitve")) { //已选,恢复正常 canvas.getActiveObject().set("fontWeight", "normal") $(this).removeClass("ui-radio-acitve") } else { //未选 canvas.getActiveObject().set("fontWeight", "bold") $(this).addClass("ui-radio-acitve") } window.recordState(); canvas.renderAll(); window.recordState(); }); $('#out_left_alignment').click(function () { $('#out_left_alignment').parent().removeClass('tool1') $('#out_right_alignment').parent().removeClass('tool1') $('#out_center_alignment').parent().removeClass('tool1') setTimeout(() => { $('#out_left_alignment').parent().addClass('tool1') }); canvas.getActiveObject().set('textAlign', 'left') let idx = getIndex(canvas.getActiveObject()) objs[idx - 1].align = 'left' window.recordState(); canvas.renderAll() }) $('#out_right_alignment').click(function () { $('#out_left_alignment').parent().removeClass('tool1') $('#out_right_alignment').parent().removeClass('tool1') $('#out_center_alignment').parent().removeClass('tool1') setTimeout(() => { $('#out_right_alignment').parent().addClass('tool1') }); canvas.getActiveObject().set('textAlign', 'right') let idx = getIndex(canvas.getActiveObject()) objs[idx - 1].align = 'right' window.recordState(); canvas.renderAll() }) $('#out_center_alignment').click(function () { $('#out_left_alignment').parent().removeClass('tool1') $('#out_right_alignment').parent().removeClass('tool1') $('#out_center_alignment').parent().removeClass('tool1') setTimeout(() => { $('#out_center_alignment').parent().addClass('tool1') }); canvas.getActiveObject().set('textAlign', 'center') let idx = getIndex(canvas.getActiveObject()) objs[idx - 1].align = 'center' window.recordState(); canvas.renderAll() }) $("#out_text_italics").click(function () { if ($(this).hasClass("ui-radio-acitve")) { //已选 canvas.getActiveObject().set("fontStyle", "normal") $(this).removeClass("ui-radio-acitve") } else { //未选 canvas.getActiveObject().set("fontStyle", "italic") $(this).addClass("ui-radio-acitve") } window.recordState(); canvas.renderAll(); window.recordState(); }); $("#out_text_bold").click(function () { if ($(this).hasClass("ui-radio-acitve")) { //已选,恢复正常 canvas.getActiveObject().set("fontWeight", "normal") $(this).removeClass("ui-radio-acitve") } else { //未选 canvas.getActiveObject().set("fontWeight", "bold") $(this).addClass("ui-radio-acitve") } window.recordState(); canvas.renderAll(); window.recordState(); }); $("#out_text_underline").click(function () { if ($(this).hasClass("ui-radio-acitve")) { //已选 canvas.getActiveObject().set("underline", false) $(this).removeClass("ui-radio-acitve") } else { //未选 canvas.getActiveObject().set("underline", true) $(this).addClass("ui-radio-acitve") } window.recordState(); canvas.renderAll(); window.recordState(); }); $("#out_text_linethrough").click(function () { if ($(this).hasClass("ui-radio-acitve")) { //已选 canvas.getActiveObject().set("linethrough", false) $(this).removeClass("ui-radio-acitve") } else { //未选 canvas.getActiveObject().set("linethrough", true) $(this).addClass("ui-radio-acitve") } window.recordState(); canvas.renderAll(); window.recordState(); }); // =========================================================== $("#delete").click(function () { let actObjs = canvas.getActiveObjects(); let allObjs = canvas.getObjects(); let flag = 0; for (let item of actObjs) { if (item != allObjs[0]) { let i = getIndex(item);//0是背景,所以从1开始,但objs不包含背景图片,故要-1 objs.splice(i - 1, 1); canvas.remove(item); flag = 1; } } if (typeof window.updateList === 'function') { window.updateList(); } canvas.discardActiveObject(); if (flag == 1) { window.recordState(); canvas.renderAll(); } }); // 移至上层和移至下层:先取消所有绑定(包括第一处的绑定),然后重新绑定(确保只绑定一次) // 注意:第一处的事件绑定(第 842 行和第 861 行)会被这里的 off('click') 取消 $("#up_obj").off('click').on('click', function () {//上移,放到前面 数组中在后面 let idx = getIndex(canvas.getActiveObject()); if (idx + 1 != canvas.getObjects().length) { canvas.bringForward(canvas.getActiveObject()); canvas.renderAll(); let temp = objs[idx - 1]; objs[idx - 1] = objs[idx]; objs[idx] = temp; window.recordState(); if (typeof window.updateList === 'function') { window.updateList(); } if (typeof window.selectObj === 'function') { window.selectObj(idx); } } }); $("#down_obj").off('click').on('click', function () {//下移,放到后面 数组中在前面 let idx = getIndex(canvas.getActiveObject()); if (idx != 1) { canvas.sendBackwards(canvas.getActiveObject()); canvas.renderAll(); let temp = objs[idx - 1]; objs[idx - 1] = objs[idx - 2]; objs[idx - 2] = temp; window.recordState(); if (typeof window.updateList === 'function') { window.updateList(); } if (typeof window.selectObj === 'function') { window.selectObj(idx - 2); } } }); $("#set_bg").click(function () {//设置为背景 let obj = canvas.getActiveObject(); let idx = getIndex(obj); const scaleX = 2787 / obj.width const scaleY = 2787 / obj.height // 使用缩放后的实际尺寸计算位置,确保与初始背景图片位置一致 const scaledWidth = obj.width * scaleX; const scaledHeight = obj.height * scaleY; obj.set({ scaleX: scaleX, scaleY: scaleY, left: ($('#canvas1').width() - scaledWidth) / 2, top: ($('#canvas1').height() - scaledHeight) / 2, }); $('#text_w').val(2787) $('#text_h').val(2787) $('#text_x').val(0) $('#text_y').val(0) // 设为背景时,锁定所有编辑操作,并设置为不可选中 obj.set({ lockMovementX: true, lockMovementY: true, lockRotation: true, lockScalingX: true, lockScalingY: true, lockSkewingX: true, lockSkewingY: true, selectable: false, evented: false }); $("#lock_img").attr("src", "public/images/lock20.png") canvas.sendToBack(obj); canvas.bringForward(obj); canvas.renderAll(); let objItem = objs.splice(idx - 1, 1)[0] objs.unshift(objItem) // 确保背景图(索引0)的锁定属性被正确设置 setTimeout(() => { let bgObj = canvas.getObjects()[0]; if (bgObj) { bgObj.set({ lockMovementX: true, lockMovementY: true, lockRotation: true, lockScalingX: true, lockScalingY: true, lockSkewingX: true, lockSkewingY: true, selectable: false, evented: false }); canvas.renderAll(); } }, 100); window.recordState(); if (typeof window.updateList === 'function') { window.updateList(); } if (typeof window.selectObj === 'function') { window.selectObj(0); } }); // 重复的lock点击事件已移除,使用第一处的绑定 $("#text_back_transparent").click(function () { canvas.getActiveObject().set("textBackgroundColor", ""); $("#text_back_color").val("#ffffff"); canvas.renderAll(); window.recordState(); }); $("#circle_text_back_transparent").click(function () { canvas.getActiveObject().set("textBackgroundColor", ""); $("#circle_text_back_color").val("#ffffff"); canvas.renderAll(); window.recordState(); }); $("#out_text_back_transparent").click(function () { canvas.getActiveObject().set("textBackgroundColor", ""); $("#out_text_back_color").val("#ffffff"); canvas.renderAll(); window.recordState(); }); $("#rect_transparent").click(function () { canvas.getActiveObject().set("fill", ""); $("#rect_color").val("#ffffff"); canvas.renderAll(); window.recordState(); }); $("#rect_stroke_transparent").click(function () { canvas.getActiveObject().set("stroke", ""); $("#rect_stroke").val("#ffffff"); canvas.renderAll(); window.recordState(); }); $("#circle_transparent").click(function () { canvas.getActiveObject().set("fill", ""); $("#circle_color").val("#ffffff"); canvas.renderAll(); window.recordState(); }); $("#circle_stroke_transparent").click(function () { canvas.getActiveObject().set("stroke", ""); $("#circle_stroke").val("#ffffff"); canvas.renderAll(); window.recordState(); }); // =========================================================== $("#about").click(async function () { // 1. 先异步获取版本号 let version = "0.0.0"; // 默认值,防止获取失败 try { if (window.sysAPI && window.sysAPI.getAppVersion) { const v = await window.sysAPI.getAppVersion(); version = "v" + v; // 拼接一个 v,变成 v2.3.017 } } catch (e) { } // 2. 获取成功后再弹出窗口 layer.open({ type: 1 , title: language_str("about") , area: '450px;' , id: 'LAY_layuipro' , moveType: 1 , content: '