Files
SoonDesign/frontend-web/js/design1/ui.js
T
24kycj 88c6ce8ccc 重构 monorepo 并完善网页端订阅与首页体验
- 迁移为 frontend-web、frontend-electron、backend-web 与 docker 部署结构
- 网页端:订阅门禁二次弹窗、套餐/支付组件化、顶栏分组对齐
- 首页:最近文件与模板库布局优化,缩略图对齐,下载与删除操作
- 新增管理后台、支付与云端文件 API,更新 README 与项目规范

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-08 18:17:39 +08:00

2437 lines
126 KiB
JavaScript

// 移至上层和移至下层的事件处理在下方(第 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)
}
}
if (event.keyCode == 67) {
_keyc = true;
if (_keyctrl & _textEdit) {
//同时按下且在编辑状?
setTimeout("clipboard.writeText( (clipboard.readText()+' ') );", 1)
}
}
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() {
var dialogApi = (typeof dialog !== 'undefined' && dialog) ? dialog : (window.platformBridge && window.platformBridge.showOpenDialog ? { showOpenDialog: function(opts) { return window.platformBridge.showOpenDialog(opts); } } : null);
if (!dialogApi) return;
dialogApi.showOpenDialog({
title: language_str("selectPic"),
buttonLabel: language_str("comf"),
filters: [{ name: 'Image File Type', extensions: ['png', 'jpg', 'jpeg'] }]
}).then(function(result) {
if (result.canceled) return;
var url = (result.files && result.files[0]) ? URL.createObjectURL(result.files[0]) : (result.filePaths && result.filePaths[0]);
if (!url) return;
fabric.Image.fromURL(url, 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", soonAsset("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", soonAsset("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 (window._isApplyingHistory) {
return;
}
if (step.val == 0) return;
step.val--;
// 判断当前是正面还是背面
if ($("#front_side").hasClass("ui-button-active")) {
// 1. 恢复业务数据
objs1 = JSON.parse(recordObjs1[step.val]);
objs = objs1;
// 2. 恢复画布 (使用回调函数)
window._isApplyingHistory = true;
canvas.loadFromJSON(recordJson1[step.val], function () {
// 加载后解锁所有对象(背景除外)
if (typeof window.unlockAllObjects === 'function') {
window.unlockAllObjects(canvas);
}
// 重新生成二维码和条码(因为它们需要根据 objs 数据动态生成)
if (typeof window.regenerateQrCodesAndBarcodes === 'function') {
window.regenerateQrCodesAndBarcodes(canvas, objs1);
}
if (typeof window.onStateRestored === 'function') {
window.onStateRestored(); // 图片加载完才执行这一行
}
window._isApplyingHistory = false;
});
} else {
// 背面逻辑
objs2 = JSON.parse(recordObjs2[step.val]);
objs = objs2;
window._isApplyingHistory = true;
canvas.loadFromJSON(recordJson2[step.val], function () {
// 加载后解锁所有对象(背景除外)
if (typeof window.unlockAllObjects === 'function') {
window.unlockAllObjects(canvas);
}
// 重新生成二维码和条码(因为它们需要根据 objs 数据动态生成)
if (typeof window.regenerateQrCodesAndBarcodes === 'function') {
window.regenerateQrCodesAndBarcodes(canvas, objs2);
}
if (typeof window.onStateRestored === 'function') {
window.onStateRestored();
}
window._isApplyingHistory = false;
});
}
});
// ==========================================
$("#next").click(function () {
// 正在应用历史(撤销/重做)时,直接忽略新的点击,防止并发操作
if (window._isApplyingHistory) {
return;
}
// 获取当前历史记录的最大长度
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;
window._isApplyingHistory = true;
canvas.loadFromJSON(recordJson1[step.val], function () {
// 加载后解锁所有对象(背景除外)
if (typeof window.unlockAllObjects === 'function') {
window.unlockAllObjects(canvas);
}
// 重新生成二维码和条码(因为它们需要根据 objs 数据动态生成)
if (typeof window.regenerateQrCodesAndBarcodes === 'function') {
window.regenerateQrCodesAndBarcodes(canvas, objs1);
}
if (typeof window.onStateRestored === 'function') {
window.onStateRestored(); // 图片加载完才执行这一行
}
window._isApplyingHistory = false;
});
} else {
objs2 = JSON.parse(recordObjs2[step.val]);
objs = objs2;
window._isApplyingHistory = true;
canvas.loadFromJSON(recordJson2[step.val], function () {
// 加载后解锁所有对象(背景除外)
if (typeof window.unlockAllObjects === 'function') {
window.unlockAllObjects(canvas);
}
// 重新生成二维码和条码(因为它们需要根据 objs 数据动态生成)
if (typeof window.regenerateQrCodesAndBarcodes === 'function') {
window.regenerateQrCodesAndBarcodes(canvas, objs2);
}
if (typeof window.onStateRestored === 'function') {
window.onStateRestored();
}
window._isApplyingHistory = false;
});
}
});
$("#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", soonAsset("lock20.png"))//已锁定
} else {
$("#lock_img").attr("src", soonAsset("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();
});
$("#copy").click(function () {
window.copySelection();
})
// 粘贴
$("#paste").click(function () {
window.pasteFromClipboard();
})
$("#save").click(function () {
if (typeof window.output === 'function') {
window.output();
}
});
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")]
}
$("#open").click(function () {
if (step.val == 0) {
OpenDialog();
return;
}
layer.confirm('<font style="color:black">' + language_str("whetherSave") + '</font>', function (index) {//confirm 是否保存当前文件?
if (typeof window.output === 'function') {
window.output(OpenDialog);
}
layer.close(index);
}, function (index) {
OpenDialog();
});
function OpenDialog() {
if (typeof window.soonRequireLogin === 'function' && !window.soonRequireLogin('打开文件')) return;
var dialogApi = (typeof dialog !== 'undefined' && dialog) ? dialog : (window.platformBridge && window.platformBridge.showOpenDialog ? { showOpenDialog: function(opts) { return window.platformBridge.showOpenDialog(opts); } } : null);
if (!dialogApi) return;
dialogApi.showOpenDialog({
title: "请选择文件",
buttonLabel: language_str("comf"),
filters: [{ name: 'Soon File Type', extensions: ['soon'] }]
}).then(function(result) {
if (result.canceled) return;
var file = (result.files && result.files[0]) || result.file;
function openWithKey(fileKey, j) {
var type = j.soonType ? j.soonType : j.backBlackPic ? 2 : 1;
if (type == 2) {
if (window.platformBridge) window.platformBridge.openDesignPage(fileKey, type);
return;
}
if (typeof window.openFile === 'function') {
window.openFile(fileKey, j);
}
}
function importAndOpen(j, fileName) {
if (!window.platformBridge || !window.platformBridge.importSoonFile) return;
window.platformBridge.importSoonFile(fileName || 'design.soon', j).then(function(res) {
if (res && res.fileKey) openWithKey(res.fileKey, j);
}).catch(function () {});
}
if (file && file.text) {
file.text().then(function(t) {
var j = JSON.parse(t);
importAndOpen(j, file.name || 'design.soon');
}).catch(function() {});
return;
}
var filePath = result.filePaths && result.filePaths[0];
if (!filePath) return;
var fs = typeof require !== 'undefined' ? require('fs') : null;
if (fs) {
var fsData = fs.readFileSync(filePath);
importAndOpen(JSON.parse(fsData.toString()), filePath);
}
}).catch(function(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,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YFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIEDpfCiFAAAcY0lEQVSAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMTBAgQIECAAAECBAgQIECgTkAwqDu5hQkQIECAAAECBAgQIECAQBYQDLKRCQIECBAgQIAAAQIECBAgUCcgGNSd3MIECBAgQIAAAQIECBAgQCALCAbZyAQBAgQIECBAgAABAgQIEKgTEAzqTm5hAgQIECBAgAABAgQIECCQBQSDbGSCAAECBAgQIECAAAECBAjUCQgGdSe3MAECBAgQIECAAAECBAgQyAKCQTYyQYAAAQIECBAgQIAAAQIE6gQEg7qTW5gAAQIECBAgQIAAAQIECGQBwSAbmSBAgAABAgQIECBAgAABAnUCgkHdyS1MgAABAgQIECBAgAABAgSygGCQjUwQIECAAAECBAgQIECAAIE6AcGg7uQWJkCAAAECBAgQIECAAAECWUAwyEYmCBAgQIAAAQIECBAgQIBAnYBgUHdyCxMgQIAAAQIECBAgQIAAgSwgGGQjEwQIECBAgAABAgQIECBAoE5AMKg7uYUJECBAgAABAgQIECBAgEAWEAyykQkCBAgQIECAAAECBAgQIFAnIBjUndzCBAgQIECAAAECBAgQIEAgCwgG2cgEAQIECBAgQIAAAQIECBCoExAM6k5uYQIECBAgQIAAAQIECBAgkAUEg2xkggABAgQIECBAgAABAgQI1AkIBnUntzABAgQIECBAgAABAgQIEMgCgkE2MkGAAAECBAgQIECAAAECBOoEBIO6k1uYAAECBAgQIECAAAECBAhkAcEgG5kgQIAAAQIECBAgQIAAAQJ1AoJB3cktTIAAAQIECBAgQIAAAQIEsoBgkI1MECBAgAABAgQIECBAgACBOgHBoO7kFiZAgAABAgQIECBAgAABAllAMMhGJggQIECAAAECBAgQIECAQJ2AYFB3cgsTIECAAAECBAgQIECAAIEsIBhkIxMECBAgQIAAAQIECBAgQKBOQDCoO7mFCRAgQIAAAQIECBAgQIBAFhAMspEJAgQIECBAgAABAgQIECBQJyAY1J3cwgQIECBAgAABAgQIECBAIAsIBtnIBAECBAgQIECAAAECBAgQqBMQDOpObmECBAgQIECAAAECBAgQIJAFBINsZIIAAQIECBAgQIAAAQIECNQJCAZ1J7cwAQIECBAgQIAAAQIECBDIAoJBNjJBgAABAgQIECBAgAABAgTqBASDupNbmAABAgQIECBAgAABAgQIZAHBIBuZIECAAAECBAgQIECAAAECdQKCQd3JLUyAAAECBAgQIECAAAECBLKAYJCNTBAgQIAAAQIECBAgQIAAgToBwaDu5BYmQIAAAQIECBAgQIAAAQJZQDDIRiYIECBAgAABAgQIECBAgECdgGBQd3ILEyBAgAABAgQIECBAgACBLCAYZCMT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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) {
if (ipcRenderer) ipcRenderer.send('open-first-page');
else if (window.platformBridge) window.platformBridge.openFirstPage();
return;
}
layer.confirm('<font style="color:black">' + language_str("whetherSave") + '</font>', function (index) {//confirm 是否保存当前文件?
if (typeof window.output === 'function') {
window.output(function() { if (ipcRenderer) ipcRenderer.send('open-first-page'); else if (window.platformBridge) window.platformBridge.openFirstPage(); });
}
}, function (index) {
if (ipcRenderer) ipcRenderer.send('open-first-page');
else if (window.platformBridge) window.platformBridge.openFirstPage();
});
});
// ===========================================================
$("#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('input propertychange', 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 ? `${val} ` : ` ${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();
let displayValue = true;
if ($(this).prop("checked")) {
objs[idx - 1].show = true;
displayValue = false;
} else {
objs[idx - 1].show = false;
displayValue = true;
}
//val = 0; // Remove this hack
JsBarcode("#barcode", objs[idx - 1].val, { margin: 0, lineColor: objs[idx - 1].color, fontSize: val * dpi / 72, font: objs[idx - 1].font, displayValue: displayValue });
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", soonAsset("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: '<div style="padding-top:20px;padding-bottom:30px;background-color: #32363A; color: #fff; font-weight: 300;text-align:center;">' +
'<div style="width: 120px;margin: 0 auto;"><img style="width: 120px;" src="' + soonAsset('IconA.png') + '"></div>' +
'<div style="font-size:24px;">Soon Design</div>' +
'<div style="font-size:14px;">' + language_str("vers") + ' ' + version + '</div>' +
'<div style="font-size:14px;">' + language_str("copyright") + '</div>' +
'</div>'
});
})
$("#help").click(function() {
if (window.platformBridge && window.platformBridge.openHelp) window.platformBridge.openHelp();
else if (ipcRenderer && ipcRenderer.send) ipcRenderer.send('open-help-file');
});
// ===========================================================
$('#display').on('click', function () {
if (typeof window.soonGuardMemberPreview === 'function' && !window.soonGuardMemberPreview()) return;
// 类型改变
fabric.Image.fromURL(soonAsset('front_bg') + bg_version + '_1.png', function (i1) {
i1.left = background_image.left;
i1.top = background_image.top;
let img1 = i1;
fabric.Image.fromURL(soonAsset('back_bg_1.png'), function (i2) {
i2.left = background_image.left;
i2.top = background_image.top;
let img2 = i2;
fabric.Image.fromURL(soonAsset('op_1.png'), function (i3) {
i3.left = background_image.left;
i3.top = background_image.top;
let img3 = i3;
if (typeof window.display_func === 'function') {
window.display_func(img1, img2, img3);
}
})
})
})
});
$("#output").click(function () {
// 另存为:传递 saveAs 函数作为第二个参数
if (typeof window.output === 'function') {
window.output(null, saveAs); // 调用output函数,使用saveAs进行另存为
}
});
// 确保移至上层和移至下层的事件绑定正确(在文件末尾再次确认)
// 取消所有绑定,然后重新绑定第二处的实现(第 2171 行和第 2189 行)
$(document).ready(function () {
setTimeout(function () {
$("#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);
}
}
});
}, 100);
});