fineui是帆软报表和BI产品线所使用的前端框架。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

277 lines
8.4 KiB

/**
* 图片组件
* Created by GameJian on 2016/1/26.
*/
BI.UploadImage = BI.inherit(BI.Widget, {
_defaultConfig: function () {
return BI.extend(BI.UploadImage.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-upload-image"
})
},
_init: function () {
BI.UploadImage.superclass._init.apply(this, arguments);
var self = this, o = this.options;
this.label = BI.createWidget({
type: "bi.text_button",
trigger: "dblclick",
cls: "upload-image-text-button-label",
whiteSpace: "normal",
text: BI.i18nText("BI-DoubleClick_To_Upload_Image")
});
this.file = BI.createWidget({
type: "bi.multifile_editor",
accept: "*.jpg;*.png;*.gif;*.bmp;*.jpeg;",
maxSize: 1024 * 1024 * 100,
title: BI.i18nText("BI-Upload_Image")
});
this.img = BI.createWidget({
type: "bi.image_button",
invalid: true,
width: "100%",
height: "100%"
});
this.label.on(BI.TextButton.EVENT_CHANGE, function () {
if (self.isValid()) {
self.file.select();
}
});
this.file.on(BI.MultifileEditor.EVENT_CHANGE, function (data) {
this.upload();
});
//直接把图片保存到resource目录下面
this.file.on(BI.MultifileEditor.EVENT_UPLOADED, function () {
var files = this.getValue();
var file = files[files.length - 1];
var attachId = file.attach_id, fileName = file.filename;
var imageId = attachId + "_" + fileName;
BI.requestAsync("fr_bi_base", "save_upload_image", {
attach_id: attachId
}, function (res) {
self.img.setValue(imageId);
self.img.setSrc(BI.UploadImage.getImageSrc(imageId));
self._check();
self._setSize("auto", "auto");
self.fireEvent(BI.UploadImage.EVENT_CHANGE, imageId);
})
});
this.uploadWrapper = BI.createWidget({
type: "bi.absolute",
items: [{
el: {
type: "bi.icon_button",
cls: "upload-image-icon-button img-upload-font",
width: 24,
height: 24
},
top: 0,
right: 0,
bottom: 0,
left: 0
}, {
el: this.file,
top: 0,
right: 0,
bottom: 0,
left: 0
}],
width: 24,
height: 24
});
this.del = BI.createWidget({
type: "bi.bubble_combo",
el: {
type: "bi.icon_button",
cls: "upload-image-icon-button img-shutdown-font",
title: BI.i18nText("BI-Basic_Delete"),
height: 24,
width: 24
},
popup: {
type: "bi.bubble_bar_popup_view",
buttons: [{
value: BI.i18nText(BI.i18nText("BI-Basic_Sure")),
handler: function () {
self.fireEvent(BI.UploadImage.EVENT_DESTROY);
}
}, {
value: BI.i18nText("BI-Basic_Cancel"),
level: "ignore",
handler: function () {
self.del.hideView();
}
}],
el: {
type: "bi.vertical_adapt",
items: [{
type: "bi.label",
text: BI.i18nText("BI-Sure_Delete_Current_Component"),
cls: "upload-image-delete-label",
textAlign: "left",
width: 300
}],
width: 300,
height: 100,
hgap: 20
},
maxHeight: 140,
minWidth: 340
},
invisible: true,
stopPropagation: true
});
this.size = BI.createWidget({
type: "bi.image_button_size_combo",
cls: "upload-image-icon-button"
});
this.size.on(BI.ImageButtonSizeCombo.EVENT_CHANGE, function () {
self._sizeChange(self.size.getValue());
self.fireEvent(BI.UploadImage.EVENT_CHANGE, arguments)
});
this.href = BI.createWidget({
type: "bi.image_button_href",
cls: "upload-image-icon-button"
});
this.href.on(BI.ImageButtonHref.EVENT_CHANGE, function () {
if (BI.isNotEmptyString(self.href.getValue())) {
self.img.setValid(true)
} else {
self.img.setValid(false)
}
self.fireEvent(BI.UploadImage.EVENT_CHANGE, arguments)
});
this.img.on(BI.ImageButton.EVENT_CHANGE, function () {
window.open(BI.Func.formatAddress(self.href.getValue()));
});
BI.createWidget({
type: "bi.absolute",
element: this,
items: [{
el: {
type: "bi.absolute",
scrollable: false,
items: [{
el: this.img
}]
},
left: 0,
right: 0,
top: 0,
bottom: 0
}, {
el: this.label,
left: 10,
right: 10,
top: 10,
bottom: 10
}, {
el: this.del,
right: 4,
top: 8
}, {
el: this.href,
right: 36,
top: 8
}, {
el: this.size,
right: 68,
top: 8
}, {
el: this.uploadWrapper,
right: 100,
top: 8
}]
});
this.setToolbarVisible(false);
this.img.invisible();
},
_check: function () {
var f = BI.isNotEmptyString(this.img.getValue());
this.label.setVisible(!f);
this.img.visible(f);
},
_setSize: function (w, h) {
this.img.setImageWidth(w);
this.img.setImageHeight(h)
},
_sizeChange: function (size) {
var self = this, o = this.options;
switch (size) {
case BICst.IMAGE_RESIZE_MODE.ORIGINAL:
self._setSize("auto", "auto");
break;
case BICst.IMAGE_RESIZE_MODE.EQUAL:
self._setSize("auto", "auto");
var width = this.img.getImageWidth(), height = this.img.getImageHeight();
var W = this.element.width(), H = this.element.height();
if (W / H > width / height) {
self._setSize("auto", "100%");
} else {
self._setSize("100%", "auto");
}
break;
case BICst.IMAGE_RESIZE_MODE.STRETCH:
self._setSize("100%", "100%");
break;
default :
self._setSize("auto", "auto");
}
},
setToolbarVisible: function (v) {
this.uploadWrapper.setVisible(v);
this.size.setVisible(v);
this.href.setVisible(v);
this.del.setVisible(v);
},
getValue: function () {
return {href: this.href.getValue(), size: this.size.getValue(), src: this.img.getValue()}
},
setValue: function (v) {
var self = this;
v || (v = {});
if (BI.isNotEmptyString(v.href)) {
self.img.setValid(true)
}
this.href.setValue(v.href);
this.size.setValue(v.size);
this.img.setValue(v.src);
if (BI.isNotEmptyString(v.src)) {
this.img.setSrc(BI.UploadImage.getImageSrc(v.src));
}
this._check();
this._sizeChange(v.size)
},
resize: function () {
this._sizeChange(this.size.getValue());
}
});
BI.extend(BI.UploadImage, {
getImageSrc: function (src) {
return BI.servletURL + "?op=fr_bi&cmd=get_uploaded_image&image_id=" + src;
}
});
BI.UploadImage.EVENT_DESTROY = "EVENT_DESTROY";
BI.UploadImage.EVENT_CHANGE = "EVENT_CHANGE";
$.shortcut("bi.upload_image", BI.UploadImage);