import { mouseposition } from '../global/location'; import server from './server'; import luckysheetsizeauto from './resize'; import { modelHTML } from './constant'; import {checkProtectionAuthorityNormal} from './protection'; import { getSheetIndex } from '../methods/get'; import { setluckysheet_scroll_status } from '../methods/set'; import { replaceHtml } from '../utils/util'; import Store from '../store'; import locale from '../locale/locale'; import tooltip from '../global/tooltip'; import method from '../global/method'; const imageCtrl = { imgItem: { type: '3', //1移动并调整单元格大小 2移动并且不调整单元格的大小 3不要移动单元格并调整其大小 src: '', //图片url originWidth: null, //图片原始宽度 originHeight: null, //图片原始高度 default: { width: null, //图片 宽度 height: null, //图片 高度 left: null, //图片离表格左边的 位置 top: null, //图片离表格顶部的 位置 }, crop: { width: null, //图片裁剪后 宽度 height: null, //图片裁剪后 高度 offsetLeft: 0, //图片裁剪后离未裁剪时 左边的位移 offsetTop: 0, //图片裁剪后离未裁剪时 顶部的位移 }, isFixedPos: false, //固定位置 fixedLeft: null, //固定位置 左位移 fixedTop: null, //固定位置 右位移 border: { width: 0, //边框宽度 radius: 0, //边框半径 style: 'solid', //边框类型 color: '#000', //边框颜色 } }, images: null, currentImgId: null, currentWinW: null, currentWinH: null, resize: null, resizeXY: null, move: false, moveXY: null, cropChange: null, cropChangeXY: null, cropChangeObj: null, copyImgItemObj: null, insertImg: function (file) { const uploadImage = Store.toJsonOptions && Store.toJsonOptions['uploadImage']; if (typeof uploadImage === 'function') { // 上传形式 uploadImage(file).then(url => { imageCtrl._insertImg(url); }).catch(error => { tooltip.info('', '图片上传失败'); }); } else { // 内部base64形式 let render = new FileReader(); render.readAsDataURL(file); render.onload = function(event){ let src = event.target.result; imageCtrl._insertImg(src); $("#luckysheet-imgUpload").val(""); } } }, _insertImg: function(src){ let _this = this; let last = Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1]; let rowIndex = last.row_focus || 0; let colIndex = last.column_focus || 0; let left = colIndex == 0 ? 0 : Store.visibledatacolumn[colIndex - 1]; let top = rowIndex == 0 ? 0 : Store.visibledatarow[rowIndex - 1]; let image = new Image(); image.onload = function(){ let width = image.width, height = image.height; let img = { src: src, left: left, top: top, originWidth: width, originHeight: height } _this.addImgItem(img); } let imageUrlHandle = Store.toJsonOptions && Store.toJsonOptions['imageUrlHandle']; image.src = typeof imageUrlHandle === 'function' ? imageUrlHandle(src) : src; }, generateRandomId: function(prefix) { if(prefix == null){ prefix = "img"; } let userAgent = window.navigator.userAgent.replace(/[^a-zA-Z0-9]/g, "").split(""); let mid = ""; for(let i = 0; i < 12; i++){ mid += userAgent[Math.round(Math.random() * (userAgent.length - 1))]; } let time = new Date().getTime(); return prefix + "_" + mid + "_" + time; }, modelHtml: function(id, imgItem) { let _this = this; let imageUrlHandle = Store.toJsonOptions && Store.toJsonOptions['imageUrlHandle']; let src = typeof imageUrlHandle === 'function' ? imageUrlHandle(imgItem.src) : imgItem.src; let imgItemParam = _this.getImgItemParam(imgItem); let width = imgItemParam.width * Store.zoomRatio; let height = imgItemParam.height * Store.zoomRatio; let left = imgItemParam.left * Store.zoomRatio; let top = imgItemParam.top * Store.zoomRatio; let position = imgItemParam.position; let borderWidth = imgItem.border.width; return `
`; }, getSliderHtml: function() { let imageText = locale().imageText; return `
${imageText.imageSetting}
${imageText.conventional}
${imageText.border}
`; }, sliderHtmlShow: function() { let _this = this; $("#luckysheet-modal-dialog-slider-imageCtrl").remove(); let sliderHtml = _this.getSliderHtml(); $("body").first().append(sliderHtml); luckysheetsizeauto(); let imgItem = _this.images[_this.currentImgId]; //类型 let type = imgItem.type; $("#luckysheet-modal-dialog-slider-imageCtrl #imgItemType" + type).prop("checked", true); //固定位置 let isFixedPos = imgItem.isFixedPos; $("#luckysheet-modal-dialog-slider-imageCtrl #imgItemIsFixedPos").prop("checked", isFixedPos); //边框宽度 let border = imgItem.border; $("#luckysheet-modal-dialog-slider-imageCtrl #imgItemBorderWidth").val(border.width); $("#luckysheet-modal-dialog-slider-imageCtrl #imgItemBorderRadius").val(border.radius); $("#luckysheet-modal-dialog-slider-imageCtrl #imgItemBorderStyle").val(border.style); $("#luckysheet-modal-dialog-slider-imageCtrl #imgItemBorderColor span").css("background-color", border.color).attr("title", border.color); _this.init(); }, colorSelectDialog: function(currenColor){ const _locale = locale(); const locale_button = _locale.button; const locale_toolbar = _locale.toolbar; const locale_imageCtrl = _locale.imageCtrl; $("#luckysheet-modal-dialog-mask").show(); $("#luckysheet-imageCtrl-colorSelect-dialog").remove(); $("body").first().append(replaceHtml(modelHTML, { "id": "luckysheet-imageCtrl-colorSelect-dialog", "addclass": "luckysheet-imageCtrl-colorSelect-dialog", "title": locale_imageCtrl.borderTile, "content": `
${locale_imageCtrl.borderCur}:
`, "botton": ` `, "style": "z-index:100003" })); let $t = $("#luckysheet-imageCtrl-colorSelect-dialog") .find(".luckysheet-modal-dialog-content") .css("min-width", 300) .end(), myh = $t.outerHeight(), myw = $t.outerWidth(); let winw = $(window).width(), winh = $(window).height(); let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop(); $("#luckysheet-imageCtrl-colorSelect-dialog").css({ "left": (winw + scrollLeft - myw) / 2, "top": (winh + scrollTop - myh) / 3 }).show(); //初始化选择颜色插件 $("#luckysheet-imageCtrl-colorSelect-dialog").find(".colorshowbox").spectrum({ showPalette: true, showPaletteOnly: true, preferredFormat: "hex", clickoutFiresChange: false, showInitial: true, showInput: true, flat: true, hideAfterPaletteSelect: true, showSelectionPalette: true, showButtons: false,//隐藏选择取消按钮 maxPaletteSize: 8, maxSelectionSize: 8, color: currenColor, cancelText: locale_button.cancel, chooseText: locale_toolbar.confirmColor, togglePaletteMoreText: locale_toolbar.customColor, togglePaletteLessText: locale_toolbar.collapse, togglePaletteOnly: true, clearText: locale_toolbar.clearText, noColorSelectedText: locale_toolbar.noColorSelectedText, localStorageKey: "spectrum.textcolor" + server.gridKey, palette: [ ["#000", "#444", "#666", "#999", "#ccc", "#eee", "#f3f3f3", "#fff"], ["#f00", "#f90", "#ff0", "#0f0", "#0ff", "#00f", "#90f", "#f0f"], ["#f4cccc", "#fce5cd", "#fff2cc", "#d9ead3", "#d0e0e3", "#cfe2f3", "#d9d2e9", "#ead1dc"], ["#ea9999", "#f9cb9c", "#ffe599", "#b6d7a8", "#a2c4c9", "#9fc5e8", "#b4a7d6", "#d5a6bd"], ["#e06666", "#f6b26b", "#ffd966", "#93c47d", "#76a5af", "#6fa8dc", "#8e7cc3", "#c27ba0"], ["#c00", "#e69138", "#f1c232", "#6aa84f", "#45818e", "#3d85c6", "#674ea7", "#a64d79"], ["#900", "#b45f06", "#bf9000", "#38761d", "#134f5c", "#0b5394", "#351c75", "#741b47"], ["#600", "#783f04", "#7f6000", "#274e13", "#0c343d", "#073763", "#20124d", "#4c1130"] ], move: function(color){ if (color != null) { color = color.toHexString(); } else { color = "#000"; } $("#luckysheet-imageCtrl-colorSelect-dialog .currenColor span").css("background-color", color).attr("title", color); } }); }, init: function() { let _this = this; //关闭 $("#luckysheet-modal-dialog-slider-imageCtrl .luckysheet-model-close-btn").click(function () { $("#luckysheet-modal-dialog-slider-imageCtrl").hide(); luckysheetsizeauto(); }); //常规 $("#luckysheet-modal-dialog-slider-imageCtrl").off("change.radio").on("change.radio", ".radio-item input[type=radio][name=imgItemType]", function() { _this.configChange("type", this.value); }) //固定位置 $("#luckysheet-modal-dialog-slider-imageCtrl").off("change.checkbox").on("change.checkbox", ".slider-box-checkbox input[type=checkbox]", function() { _this.configChange("fixedPos", this.checked); }) //边框宽度 $("#luckysheet-modal-dialog-slider-imageCtrl").off("change.borderWidth").on("change.borderWidth", "#imgItemBorderWidth", function() { _this.configChange("border-width", this.valueAsNumber); }) //边框半径 $("#luckysheet-modal-dialog-slider-imageCtrl").off("change.borderRadius").on("change.borderRadius", "#imgItemBorderRadius", function() { _this.configChange("border-radius", this.valueAsNumber); }) //边框样式 $("#luckysheet-modal-dialog-slider-imageCtrl").off("change.borderStyle").on("change.borderStyle", "#imgItemBorderStyle", function() { _this.configChange("border-style", this.value); }) //边框颜色 选择 $("#luckysheet-modal-dialog-slider-imageCtrl").off("click.color").on("click.color", "#imgItemBorderColor", function() { let currenColor = $(this).find("span").attr("title"); _this.colorSelectDialog(currenColor); }) //边框选择颜色 确定 $(document).off("click.selectColorConfirm").on("click.selectColorConfirm", "#luckysheet-imageCtrl-colorSelect-dialog-confirm", function(){ let $parent = $(this).parents("#luckysheet-imageCtrl-colorSelect-dialog"); $("#luckysheet-modal-dialog-mask").hide(); $parent.hide(); let currenColor = $parent.find(".currenColor span").attr("title"); $("#luckysheet-modal-dialog-slider-imageCtrl #imgItemBorderColor span").css("background-color", currenColor).attr("title", currenColor); _this.configChange("border-color", currenColor); }); //image active $("#luckysheet-image-showBoxs").off("mousedown.active").on("mousedown.active", ".luckysheet-modal-dialog-image", function(e) { if(!checkProtectionAuthorityNormal(Store.currentSheetIndex, "editObjects",false)){ return; } $(this).hide(); let id = $(this).attr("id"); if(_this.currentImgId != null && _this.currentImgId != id){ _this.cancelActiveImgItem(); } _this.currentImgId = id; let item = _this.images[id]; let imgItemParam = _this.getImgItemParam(item); let width = imgItemParam.width * Store.zoomRatio; let height = imgItemParam.height * Store.zoomRatio; let left = imgItemParam.left * Store.zoomRatio; let top = imgItemParam.top * Store.zoomRatio; let position = imgItemParam.position; $("#luckysheet-modal-dialog-activeImage").show().css({ "width": width, "height": height, "left": left, "top": top, "position": position }); let imageUrlHandle = Store.toJsonOptions && Store.toJsonOptions['imageUrlHandle']; let imgUrl = typeof imageUrlHandle === 'function' ? imageUrlHandle(item.src) : item.src; $("#luckysheet-modal-dialog-activeImage .luckysheet-modal-dialog-content").css({ "background-image": "url(" + imgUrl + ")", "background-size": item.default.width * Store.zoomRatio + "px " + item.default.height * Store.zoomRatio + "px", "background-position": -item.crop.offsetLeft * Store.zoomRatio + "px " + -item.crop.offsetTop * Store.zoomRatio + "px" }) $("#luckysheet-modal-dialog-activeImage .luckysheet-modal-dialog-border").css({ "border-width": item.border.width * Store.zoomRatio, "border-style": item.border.style, "border-color": item.border.color, "border-radius": item.border.radius * Store.zoomRatio, "left": -item.border.width * Store.zoomRatio, "right": -item.border.width * Store.zoomRatio, "top": -item.border.width * Store.zoomRatio, "bottom": -item.border.width * Store.zoomRatio, }) _this.sliderHtmlShow(); e.stopPropagation(); }) //image move $("#luckysheet-modal-dialog-activeImage").off("mousedown.move").on("mousedown.move", ".luckysheet-modal-dialog-content", function(e) { if(!checkProtectionAuthorityNormal(Store.currentSheetIndex, "editObjects",false)){ return; } if(!$("#luckysheet-modal-dialog-slider-imageCtrl").is(":visible")){ _this.sliderHtmlShow(); } _this.move = true; _this.currentWinW = $("#luckysheet-cell-main")[0].scrollWidth; _this.currentWinH = $("#luckysheet-cell-main")[0].scrollHeight; let offset = $("#luckysheet-modal-dialog-activeImage").offset(); _this.moveXY = [ e.pageX - offset.left, e.pageY - offset.top, ]; setluckysheet_scroll_status(true); e.stopPropagation(); }) //image resize $("#luckysheet-modal-dialog-activeImage").off("mousedown.resize").on("mousedown.resize", ".luckysheet-modal-dialog-resize-item", function(e) { if(!checkProtectionAuthorityNormal(Store.currentSheetIndex, "editObjects",false)){ return; } _this.currentWinW = $("#luckysheet-cell-main")[0].scrollWidth; _this.currentWinH = $("#luckysheet-cell-main")[0].scrollHeight; _this.resize = $(this).data("type"); let scrollTop = $("#luckysheet-cell-main").scrollTop(), scrollLeft = $("#luckysheet-cell-main").scrollLeft(); let mouse = mouseposition(e.pageX, e.pageY); let x = mouse[0] + scrollLeft; let y = mouse[1] + scrollTop; let position = $("#luckysheet-modal-dialog-activeImage").position(); let width = $("#luckysheet-modal-dialog-activeImage").width(); let height = $("#luckysheet-modal-dialog-activeImage").height(); _this.resizeXY = [ x, y, width, height, position.left + scrollLeft, position.top + scrollTop, scrollLeft, scrollTop ]; setluckysheet_scroll_status(true); e.stopPropagation(); }) //image croppingEnter $("#luckysheet-modal-dialog-activeImage").off("mousedown.croppingEnter").on("mousedown.croppingEnter", ".luckysheet-modal-controll-crop", function(e) { _this.croppingEnter(); e.stopPropagation(); }) //image croppingExit $("#luckysheet-modal-dialog-cropping").off("mousedown.croppingExit").on("mousedown.croppingExit", ".luckysheet-modal-controll-crop", function(e) { _this.croppingExit(); e.stopPropagation(); }) //image crop change $("#luckysheet-modal-dialog-cropping").off("mousedown.cropChange").on("mousedown.cropChange", ".resize-item", function(e) { _this.cropChange = $(this).data("type"); let scrollTop = $("#luckysheet-cell-main").scrollTop(), scrollLeft = $("#luckysheet-cell-main").scrollLeft(); let mouse = mouseposition(e.pageX, e.pageY); let x = mouse[0] + scrollLeft; let y = mouse[1] + scrollTop; _this.cropChangeXY = [ x, y ]; setluckysheet_scroll_status(true); e.stopPropagation(); }) //image restore $("#luckysheet-image-showBoxs").off("mousedown.restore").on("mousedown.restore", ".luckysheet-modal-controll-restore", function(e) { _this.restoreImgItem(); e.stopPropagation(); }) //image delete $("#luckysheet-image-showBoxs").off("mousedown.delete").on("mousedown.delete", ".luckysheet-modal-controll-del", function(e) { _this.removeImgItem(); e.stopPropagation(); }) }, configChange: function(type, value){ let _this = this; let imgItem = _this.images[_this.currentImgId]; switch(type){ case "type": imgItem.type = value; break; case "fixedPos": imgItem.isFixedPos = value; let imgItemParam = _this.getImgItemParam(imgItem); let width = imgItemParam.width; let height = imgItemParam.height; let left = imgItemParam.left; let top = imgItemParam.top; let position = imgItemParam.position; $("#luckysheet-modal-dialog-activeImage").show().css({ "width": width, "height": height, "left": left, "top": top, "position": position }); break; case "border-width": imgItem.border.width = value; $("#luckysheet-modal-dialog-activeImage .luckysheet-modal-dialog-border").css({ "border-width": value, "left": -value, "right": -value, "top": -value, "bottom": -value }); break; case "border-radius": imgItem.border.radius = value; $("#luckysheet-modal-dialog-activeImage .luckysheet-modal-dialog-border").css("border-radius", value); break; case "border-style": imgItem.border.style = value; $("#luckysheet-modal-dialog-activeImage .luckysheet-modal-dialog-border").css("border-style", value); break; case "border-color": imgItem.border.color = value; $("#luckysheet-modal-dialog-activeImage .luckysheet-modal-dialog-border").css("border-color", value); break; } _this.ref(); }, getImgItemParam(imgItem){ let isFixedPos = imgItem.isFixedPos; let width = imgItem.default.width, height = imgItem.default.height, left = imgItem.default.left, top = imgItem.default.top; if(imgItem.crop.width != width || imgItem.crop.height != height){ width = imgItem.crop.width; height = imgItem.crop.height; left += imgItem.crop.offsetLeft; top += imgItem.crop.offsetTop; } let position = 'absolute'; if(isFixedPos){ position = 'fixed'; left = imgItem.fixedLeft + imgItem.crop.offsetLeft; top = imgItem.fixedTop + imgItem.crop.offsetTop; } return { width: width, height: height, left: left, top: top, position: position } }, cancelActiveImgItem: function(){ let _this = this; $("#luckysheet-modal-dialog-activeImage").hide(); $("#luckysheet-modal-dialog-cropping").hide(); $("#luckysheet-modal-dialog-slider-imageCtrl").hide(); let imgItem = _this.images[_this.currentImgId]; let imgItemParam = _this.getImgItemParam(imgItem); let width = imgItemParam.width * Store.zoomRatio; let height = imgItemParam.height * Store.zoomRatio; let left = imgItemParam.left * Store.zoomRatio; let top = imgItemParam.top * Store.zoomRatio; let position = imgItemParam.position; $("#" + _this.currentImgId).show().css({ "width": width, "height": height, "left": left, "top": top, "position": position }); $("#" + _this.currentImgId + " img").css({ "width": imgItem.default.width * Store.zoomRatio, "height": imgItem.default.height * Store.zoomRatio, "left": -imgItem.crop.offsetLeft * Store.zoomRatio, "top": -imgItem.crop.offsetTop * Store.zoomRatio }); $("#" + _this.currentImgId + " .luckysheet-modal-dialog-border").css({ "border-width": imgItem.border.width * Store.zoomRatio, "border-style": imgItem.border.style, "border-color": imgItem.border.color, "border-radius": imgItem.border.radius * Store.zoomRatio, "left": -imgItem.border.width * Store.zoomRatio, "right": -imgItem.border.width * Store.zoomRatio, "top": -imgItem.border.width * Store.zoomRatio, "bottom": -imgItem.border.width * Store.zoomRatio, }) _this.currentImgId = null; }, addImgItem: function(img) { let _this = this; let width, height; let max = 400; if(img.originHeight < img.originWidth){ height = Math.round(img.originHeight * (max / img.originWidth)); width = max; } else{ width = Math.round(img.originWidth * (max / img.originHeight)); height = max; } if(_this.images == null){ _this.images = {}; } let imgItem = $.extend(true, {}, _this.imgItem); imgItem.src = img.src; imgItem.originWidth = img.originWidth; imgItem.originHeight = img.originHeight; imgItem.default.width = width; imgItem.default.height = height; imgItem.default.left = img.left; imgItem.default.top = img.top; imgItem.crop.width = width; imgItem.crop.height = height; let scrollTop = $("#luckysheet-cell-main").scrollTop(), scrollLeft = $("#luckysheet-cell-main").scrollLeft(); imgItem.fixedLeft = img.left - scrollLeft + Store.rowHeaderWidth; imgItem.fixedTop = img.top - scrollTop + Store.infobarHeight + Store.toolbarHeight + Store.calculatebarHeight + Store.columnHeaderHeight; let id = _this.generateRandomId(); let modelHtml = _this.modelHtml(id, imgItem); $("#luckysheet-image-showBoxs .img-list").append(modelHtml); _this.images[id] = imgItem; _this.ref(); _this.init(); }, moveImgItem: function() { let _this = this; _this.move = false; let obj = $("#luckysheet-modal-dialog-activeImage")[0]; let item = _this.images[_this.currentImgId]; if(item.isFixedPos){ item.fixedLeft = obj.offsetLeft - item.crop.offsetLeft; item.fixedTop = obj.offsetTop - item.crop.offsetTop; } else{ item.default.left = obj.offsetLeft - item.crop.offsetLeft; item.default.top = obj.offsetTop - item.crop.offsetTop; } _this.ref(); }, resizeImgItem: function() { let _this = this; _this.resize = null; let obj = $("#luckysheet-modal-dialog-activeImage")[0]; let item = _this.images[_this.currentImgId]; let scaleX = obj.clientWidth / item.crop.width; let scaleY = obj.clientHeight / item.crop.height; item.default.width = Math.round(item.default.width * scaleX); item.default.height = Math.round(item.default.height * scaleY); item.crop.width = Math.round(item.crop.width * scaleX); item.crop.height = Math.round(item.crop.height * scaleY); item.crop.offsetLeft = Math.round(item.crop.offsetLeft * scaleX); item.crop.offsetTop = Math.round(item.crop.offsetTop * scaleY); if(item.isFixedPos){ item.fixedLeft = obj.offsetLeft; item.fixedTop = obj.offsetTop; } else{ item.default.left = obj.offsetLeft - item.crop.offsetLeft; item.default.top = obj.offsetTop - item.crop.offsetTop; } _this.ref(); }, croppingEnter: function() { let _this = this; _this.cropping = true; if(!checkProtectionAuthorityNormal(Store.currentSheetIndex, "editObjects",false)){ return; } $("#luckysheet-modal-dialog-activeImage").hide(); $("#luckysheet-modal-dialog-slider-imageCtrl").hide(); let item = _this.images[_this.currentImgId]; let imgItemParam = _this.getImgItemParam(item); let width = imgItemParam.width; let height = imgItemParam.height; let left = imgItemParam.left; let top = imgItemParam.top; let position = imgItemParam.position; $("#luckysheet-modal-dialog-cropping").show().css({ "width": width, "height": height, "left": left, "top": top, "position": position }); let imageUrlHandle = Store.toJsonOptions && Store.toJsonOptions['imageUrlHandle']; let imgSrc = typeof imageUrlHandle === 'function' ? imageUrlHandle(item.src) : item.src; $("#luckysheet-modal-dialog-cropping .cropping-mask").css({ "width": item.default.width, "height": item.default.height, "background-image": "url(" + imgSrc + ")", "left": -item.crop.offsetLeft, "top": -item.crop.offsetTop }) $("#luckysheet-modal-dialog-cropping .cropping-content").css({ "background-image": "url(" + imgSrc + ")", "background-size": item.default.width + "px " + item.default.height + "px", "background-position": -item.crop.offsetLeft + "px " + -item.crop.offsetTop + "px" }) $("#luckysheet-modal-dialog-cropping .luckysheet-modal-dialog-border").css({ "border-width": item.border.width, "border-style": item.border.style, "border-color": item.border.color, "border-radius": item.border.radius, "left": -item.border.width, "right": -item.border.width, "top": -item.border.width, "bottom": -item.border.width, }) }, croppingExit: function() { let _this = this; _this.cropping = false; $("#luckysheet-modal-dialog-cropping").hide(); let item = _this.images[_this.currentImgId]; let imgItemParam = _this.getImgItemParam(item); let width = imgItemParam.width; let height = imgItemParam.height; let left = imgItemParam.left; let top = imgItemParam.top; let position = imgItemParam.position; $("#luckysheet-modal-dialog-activeImage").show().css({ "width": width, "height": height, "left": left, "top": top, "position": position }); let imageUrlHandle = Store.toJsonOptions && Store.toJsonOptions['imageUrlHandle']; let imgSrc = typeof imageUrlHandle === 'function' ? imageUrlHandle(item.src) : item.src; $("#luckysheet-modal-dialog-activeImage .luckysheet-modal-dialog-content").css({ "background-image": "url(" + imgSrc + ")", "background-size": item.default.width + "px " + item.default.height + "px", "background-position": -item.crop.offsetLeft + "px " + -item.crop.offsetTop + "px" }) }, cropChangeImgItem: function() { let _this = this; _this.cropChange = null; let item = _this.images[_this.currentImgId]; item.crop.width = _this.cropChangeObj.width; item.crop.height = _this.cropChangeObj.height; item.crop.offsetLeft = _this.cropChangeObj.offsetLeft; item.crop.offsetTop = _this.cropChangeObj.offsetTop; _this.ref(); }, restoreImgItem: function() { let _this = this; let imgItem = _this.images[_this.currentImgId]; imgItem.default.width = imgItem.originWidth; imgItem.default.height = imgItem.originHeight; imgItem.crop.width = imgItem.originWidth; imgItem.crop.height = imgItem.originHeight; imgItem.crop.offsetLeft = 0; imgItem.crop.offsetTop = 0; let imgItemParam = _this.getImgItemParam(imgItem); let width = imgItemParam.width; let height = imgItemParam.height; let left = imgItemParam.left; let top = imgItemParam.top; let position = imgItemParam.position; $("#luckysheet-modal-dialog-activeImage").show().css({ "width": width, "height": height, "left": left, "top": top, "position": position }); let imageUrlHandle = Store.toJsonOptions && Store.toJsonOptions['imageUrlHandle']; let imgSrc = typeof imageUrlHandle === 'function' ? imageUrlHandle(imgItem.src) : imgItem.src; $("#luckysheet-modal-dialog-activeImage .luckysheet-modal-dialog-content").css({ "background-image": "url(" + imgSrc + ")", "background-size": imgItem.default.width + "px " + imgItem.default.height + "px", "background-position": -imgItem.crop.offsetLeft + "px " + -imgItem.crop.offsetTop + "px" }) _this.ref(); }, removeImgItem: function() { let _this = this; let imgItem = _this.images[_this.currentImgId]; // 钩子 imageDeleteBefore if(!method.createHookFunction('imageDeleteBefore', imgItem)){ return; } $("#luckysheet-modal-dialog-activeImage").hide(); $("#luckysheet-modal-dialog-cropping").hide(); $("#luckysheet-modal-dialog-slider-imageCtrl").hide(); $("#" + _this.currentImgId).remove(); delete _this.images[_this.currentImgId]; _this.currentImgId = null; // 钩子 imageDeleteAfter method.createHookFunction('imageDeleteAfter', imgItem); _this.ref(); }, copyImgItem: function(e) { let _this = this; _this.copyImgItemObj = $.extend(true, {}, _this.images[_this.currentImgId]); let clipboardData = window.clipboardData; //for IE if (!clipboardData) { // for chrome clipboardData = e.originalEvent.clipboardData; } let cpdata = '
'; if (!clipboardData) { let textarea = $("#luckysheet-copy-content"); textarea.html(cpdata); textarea.focus(); textarea.select(); document.execCommand("selectAll"); document.execCommand("Copy"); // 等50毫秒,keyPress事件发生了再去处理数据 setTimeout(function () { $("#luckysheet-copy-content").blur(); }, 10); } else { clipboardData.setData('Text', cpdata); return false;//否则设不生效 } }, pasteImgItem: function() { let _this = this; if(_this.images == null){ _this.images = {}; } let rowIndex = Store.luckysheet_select_save[0].row_focus || 0; let colIndex = Store.luckysheet_select_save[0].column_focus || 0; let left = colIndex == 0 ? 0 : Store.visibledatacolumn[colIndex - 1]; let top = rowIndex == 0 ? 0 : Store.visibledatarow[rowIndex - 1]; let img = $.extend(true, {}, _this.copyImgItemObj); img.default.left = left - img.crop.offsetLeft; img.default.top = top - img.crop.offsetTop; let scrollTop = $("#luckysheet-cell-main").scrollTop(), scrollLeft = $("#luckysheet-cell-main").scrollLeft(); img.fixedLeft = img.default.left - scrollLeft + Store.rowHeaderWidth; img.fixedTop = img.default.top - scrollTop + Store.infobarHeight + Store.toolbarHeight + Store.calculatebarHeight + Store.columnHeaderHeight; let id = _this.generateRandomId(); let modelHtml = _this.modelHtml(id, img); $("#luckysheet-image-showBoxs .img-list").append(modelHtml); _this.images[id] = img; _this.ref(); _this.init(); }, allImagesShow: function() { let _this = this; $("#luckysheet-modal-dialog-activeImage").hide(); $("#luckysheet-modal-dialog-cropping").hide(); $("#luckysheet-modal-dialog-slider-imageCtrl").hide(); $("#luckysheet-image-showBoxs .img-list").empty(); if(_this.images == null){ return; } for(let imgId in _this.images){ let imgItem = _this.images[imgId]; let modelHtml = _this.modelHtml(imgId, imgItem); $("#luckysheet-image-showBoxs .img-list").append(modelHtml); } }, moveChangeSize: function(rc, index, size) { let _this = this; let images = $.extend(true, {}, _this.images); if(rc == "row"){ let row = Store.visibledatarow[index], row_pre = index - 1 == -1 ? 0 : Store.visibledatarow[index - 1]; let changeSize = size - (row - row_pre - 1); for(let imgId in images){ let imgItem = images[imgId]; let imgItemParam = _this.getImgItemParam(imgItem); let type = imgItem.type; if(type == "1"){ if(imgItemParam.top >= row){ imgItem.default.top = imgItemParam.top + changeSize - imgItem.crop.offsetTop; } else{ if(imgItemParam.top + imgItemParam.height >= row-2){ if(imgItemParam.top < row + changeSize){ let scaleY = (imgItemParam.height + changeSize) / imgItemParam.height; imgItem.default.height = Math.round(imgItem.default.height * scaleY); imgItem.crop.height = Math.round(imgItem.crop.height * scaleY); imgItem.crop.offsetTop = Math.round(imgItem.crop.offsetTop * scaleY); } else{ let scaleY = (imgItemParam.top + imgItemParam.height - row) / imgItemParam.height; imgItem.default.height = Math.round(imgItem.default.height * scaleY); imgItem.crop.height = Math.round(imgItem.crop.height * scaleY); imgItem.crop.offsetTop = Math.round(imgItem.crop.offsetTop * scaleY); imgItem.default.top = row + changeSize - imgItem.crop.offsetTop; } } else{ if(imgItemParam.top > row + changeSize){ let scaleY = 1 / imgItemParam.height; imgItem.default.height = Math.round(imgItem.default.height * scaleY); imgItem.crop.height = Math.round(imgItem.crop.height * scaleY); imgItem.crop.offsetTop = Math.round(imgItem.crop.offsetTop * scaleY); imgItem.default.top = row + changeSize - imgItem.crop.offsetTop; } else if(imgItemParam.top + imgItemParam.height > row + changeSize){ let scaleY = (row + changeSize - imgItemParam.top) / imgItemParam.height; imgItem.default.height = Math.round(imgItem.default.height * scaleY); imgItem.crop.height = Math.round(imgItem.crop.height * scaleY); imgItem.crop.offsetTop = Math.round(imgItem.crop.offsetTop * scaleY); } } } } else if(type == "2"){ if(imgItemParam.top >= row){ imgItem.default.top = imgItemParam.top + changeSize - imgItem.crop.offsetTop; } else if(imgItemParam.top > row + changeSize){ imgItem.default.top = row + changeSize - imgItem.crop.offsetTop; } } } } else if(rc == "column"){ let col = Store.visibledatacolumn[index], col_pre = index - 1 == -1 ? 0 : Store.visibledatacolumn[index - 1]; let changeSize = size - (col - col_pre - 1); for(let imgId in images){ let imgItem = images[imgId]; let imgItemParam = _this.getImgItemParam(imgItem); let type = imgItem.type; if(type == "1"){ if(imgItemParam.left >= col){ imgItem.default.left = imgItemParam.left + changeSize - imgItem.crop.offsetLeft; } else{ if(imgItemParam.left + imgItemParam.width >= col-2){ if(imgItemParam.left < col + changeSize){ let scaleX = (imgItemParam.width + changeSize) / imgItemParam.width; imgItem.default.width = Math.round(imgItem.default.width * scaleX); imgItem.crop.width = Math.round(imgItem.crop.width * scaleX); imgItem.crop.offsetLeft = Math.round(imgItem.crop.offsetLeft * scaleX); } else{ let scaleX = (imgItemParam.left + imgItemParam.width - col) / imgItemParam.width; imgItem.default.width = Math.round(imgItem.default.width * scaleX); imgItem.crop.width = Math.round(imgItem.crop.width * scaleX); imgItem.crop.offsetLeft = Math.round(imgItem.crop.offsetLeft * scaleX); imgItem.default.left = col + changeSize - imgItem.crop.offsetLeft; } } else{ if(imgItemParam.left > col + changeSize){ let scaleX = 1 / imgItemParam.width; imgItem.default.width = Math.round(imgItem.default.width * scaleX); imgItem.crop.width = Math.round(imgItem.crop.width * scaleX); imgItem.crop.offsetLeft = Math.round(imgItem.crop.offsetLeft * scaleX); imgItem.default.left = col + changeSize - imgItem.crop.offsetLeft; } else if(imgItemParam.left + imgItemParam.width > col + changeSize){ let scaleX = (col + changeSize - imgItemParam.left) / imgItemParam.width; imgItem.default.width = Math.round(imgItem.default.width * scaleX); imgItem.crop.width = Math.round(imgItem.crop.width * scaleX); imgItem.crop.offsetLeft = Math.round(imgItem.crop.offsetLeft * scaleX); } } } } else if(type == "2"){ if(imgItemParam.left >= col){ imgItem.default.left = imgItemParam.left + changeSize - imgItem.crop.offsetLeft; } else if(imgItemParam.left > col + changeSize){ imgItem.default.left = col + changeSize - imgItem.crop.offsetLeft; } } } } return images; }, ref: function() { let _this = this; let file = Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)]; let images = _this.images; if (Store.clearjfundo) { Store.jfundo.length = 0; Store.jfredo.push({ "type": "imageCtrl", "sheetIndex": Store.currentSheetIndex, "images": file.images == null ? null : $.extend(true, {}, file.images), "curImages": images }); } file.images = $.extend(true, {}, images); server.saveParam("all", Store.currentSheetIndex, file.images, { "k": "images" }); }, } export default imageCtrl;