/*!
* Copyright 2011 Guangzhou Donghong Software Technology Inc.
* Licensed under the www.jxstar.org
*/
/**
* 附件相关处理工具:
* 1、表格记录附件浏览功能扩展。
* 2、表单附件字段处理工具类。
* 3、图片浏览控件扩展。
*
* 远程附件管理存在的问题:
* 1、表格附件标记功能都已实现远程预览;
* 2、Form中的附件字段,不能支持上传远程附件的功能、查看与删除都没有问题;
* 如果远程上传,则把附件字段设置为只读,且通过菜单按钮上传此字段中的图文附件;
*
* @author TonyTan
* @version 1.0, 2011-11-22
*/
JxAttach = {};
(function(){
Ext.apply(JxAttach, {
//在表格中添加附件列,此方法用在表格INC文件的第一行
addAttachCol: function(cols, index) {
//添加一列
var item = {col:
{header:'
', width:22, name:'attachcol',
xtype:'actioncolumn', menuDisabled:true, align:'center', iconCls:'myhidden',
renderer:function(){
return '
';
}
}
};
if (!index) index = 0;
cols.insert(index, item);
},
//取表格中定义附件列序号
getAttachColNum: function(grid) {
var isCheck = grid.getSelectionModel() instanceof Ext.grid.CheckboxSelectionModel;
var mycols = grid.gridNode.param.cols;
for (var i = 0, n = mycols.length; i < n; i++) {
if (mycols[i].col.name == 'attachcol') {
//排除序号列与checkbox列
return i + (isCheck ? 2:1);
}
}
return -1;
},
//根据contentType取dsoframer程序的名称
officeAppName: function(contentType) {
if (contentType.indexOf('word') >= 0) {
return 'Word.Document';
} else if (contentType.indexOf('excel') >= 0 || contentType.indexOf('spreadsheetml.sheet') >= 0) {
return 'Excel.Sheet';
}
return '';
},
//在线浏览office文档
previewOffice: function(attachId, attachName, appName) {
var objid = "objAttach_" + attachId;
var tabid = 'tabAttach_' + attachId;
var divid = "divAttach_" + attachId;
var mainTab = Jxstar.sysMainTab;
//如果已经打开,则直接退出
var tab = mainTab.getComponent(tabid);
if (tab) {
mainTab.activate(tab);
return;
}
var div_html = ''+
'

'+
'
正在加载'+ attachName +'...'+
'
';
var url = Jxstar.path+"/fileAction.do?funid=sys_attach&pagetype=editgrid&eventcode=down&dataType=byte&keyid="+attachId+'&user_id='+Jxstar.session['user_id'];
var html = div_html +
'';
var tab = mainTab.add({
id:tabid,
pagetype:'formpic',
label: attachName,
border: false,
layout: 'fit',
closable: true,
iconCls: 'function',
html:html
});
mainTab.activate(tab);
var obj = Ext.getDom(objid);
obj.Open(url, true, appName);
Ext.fly(divid).hide();
Ext.fly(obj).setStyle({left:0, top:0, width:'100%', height:'100%'});
},
//在线显示PDF文档
previewPDF: function(attachId, attachName, params) {
if (!JxAttach.isPdf(attachName)) {
JxHint.alert(jx.req.text4);//'只有PDF文档才能在线阅读!'
return;
}
var tabid = 'tabAttachPDF_' + attachId;
var mainTab = Jxstar.sysMainTab;
//如果已经打开,则直接退出
var tab = mainTab.getComponent(tabid);
if (tab) {
mainTab.activate(tab);
return;
}
var html = ''+
''+
'

'+
'
正在加载文件...'+
'
';
var tab = mainTab.add({
id:tabid,
pagetype:'formpic',
label: attachName.split('.')[0],
border: false,
layout: 'fit',
closable: true,
iconCls: 'function',
html:html
});
mainTab.activate(tab);
JxAttach.loadDoc(attachId, attachName, tab, params);
},
//通过打开附件的方式加载文件流,而不是下载,增加参数:notdown=1
loadDoc: function(attachId, attachName, tab, v_params) {
var showWin = function(fileurl) {
tab.getEl().child('div').hide();
var frm = tab.getEl().child('iframe');
frm.dom.src = fileurl;
frm.show();
tab.show();
tab.bwrap.show();
};
var params = '/fileAction.do?';
if (v_params) {
params += v_params;
} else {
params += 'funid=sys_attach&keyid='+ attachId +'&eventcode=down';
}
params += '¬down=1&user_id=' + Jxstar.session['user_id'];
params += '&dataType=byte&_dc=' + (new Date()).getTime();
var fileurl = Jxstar.path + params;
var viewurl = Jxstar.systemVar.sys__attach__pdfview||'';
if (viewurl.length > 0) {
var e = encodeURIComponent;
fileurl = viewurl+'?file='+e(Jxstar.allpath + params);
}
showWin(fileurl);
},
//private 构建图片缩放工具栏
imgZoomTool: function(imgCmp) {
var resiz, imgel, oldw = 0, oldh = 0;
//构建缩放比例数据
var zooms = [];
for (var i = 20; i <= 200; i += 20) {
zooms[zooms.length] = [i, i];
}
zooms[zooms.length] = ['all', '全屏'];
//旋转角度
var dus = [];
for (var i = 0; i < 360; i += 90) {
dus[dus.length] = [i, i];
}
var tbar = new Ext.Toolbar({items:[
{xtype:'tbtext', text:'缩放比例:'},
{xtype:'combo', name:'combo_ratio', width:80, editable:false,
store: new Ext.data.SimpleStore({
fields:['value','text'],
data: zooms
}),
mode: 'local', triggerAction: 'all', valueField: 'value',
displayField: 'text', value: 100,
listeners:{select:function(s){
if (!resiz || oldw == 0) return;
var v = s.getValue(), w, h;
if (v == 'all') {
w = imgel.getWidth();
h = imgel.getHeight();
var a = 1, b = 1;
if (oldw > w) a = (w/oldw);
if (oldh > h) b = (h/oldh);
//取比率小的值,按比例缩放
if (a > b) a = b;
if (a < 1) {
w = parseInt(oldw*a);
h = parseInt(oldh*a);
}
} else {
w = parseInt(oldw) * parseInt(v) / 100;
h = parseInt(oldh) * parseInt(v) / 100;
}
resiz.resizeTo(w, h);
//设置缩放后的图片居中
var neww = parseInt((imgel.getWidth() - w)/2);
resiz.getEl().setX(imgel.getX()+neww);
var newh = parseInt((imgel.getHeight() - h)/2);
resiz.getEl().setY(imgel.getY()+newh);
}}},
{xtype:'tbtext', text:' %'},
{xtype:'tbtext', text:'旋转角度:'},
{xtype:'combo', width:80, editable:false,
store: new Ext.data.SimpleStore({
fields:['value','text'],
data: dus
}),
mode: 'local', triggerAction: 'all', valueField: 'value',
displayField: 'text', value: 0,
listeners:{select:function(s){
var v = s.getValue();
if (Ext.isIE) {
v = Math.round(v/90);
imgel.dom.style.filter = "progid:DXImageTransform.Microsoft.BasicImage(rotation="+v+")";
} else {
imgel.dom.style.transform = "rotate("+v+"deg)";
}
}}}]
});
//延时添加图片缩放功能
var delayFn = function(){
imgel = imgCmp.getEl();
resiz = new Ext.Resizable(imgel.child('img'), {
wrap:true,
pinned:true,
minWidth:200,
minHeight:100,
preserveRatio:true,
dynamic:true,
handles:'all',
draggable:true
});
//取图片原始大小
oldw = resiz.getEl().getWidth();
oldh = resiz.getEl().getHeight();
//取画布大小,图片按比例缩放
var w = imgel.getWidth();
var h = imgel.getHeight();
var a = 1, b = 1;
if (oldw > w) a = (w/oldw);
if (oldh > h) b = (h/oldh);
if (a > b) a = b;//取比率小的值,按比例缩放
if (a < 1) {
resiz.resizeTo(parseInt(oldw*a), parseInt(oldh*a));
var combo = tbar.find('name', 'combo_ratio')[0];
if (combo) combo.setValue('all');
}
//设置缩放后的图片居中
var neww = parseInt((w - oldw*a)/2);
if (neww > 0) {
resiz.getEl().setX(resiz.getEl().getX()+neww);
}
var newh = parseInt((h - oldh*a)/2);
if (newh > 0) {
resiz.getEl().setY(resiz.getEl().getY()+newh);
}
};
JxUtil.delay(500, delayFn);
return tbar;
},
//在线浏览图片
previewImage: function(attachId, attachName, imgURL) {
var tabid = 'tabAttachIMG_' + attachId;
var mainTab = Jxstar.sysMainTab;
//如果已经打开,则直接退出
var tab = mainTab.getComponent(tabid);
if (tab) {
mainTab.remove(tabid, true);
}
var url = Jxstar.path+"/fileAction.do?funid=sys_attach&pagetype=editgrid&eventcode=down&dataType=byte&keyid="+attachId+'&user_id='+Jxstar.session['user_id'];
if (imgURL && imgURL.length > 0) url = imgURL;
var html = '
';
var imgbox = new Ext.BoxComponent({
border:false,
html: html
});
var tbar = this.imgZoomTool(imgbox);
var tab = mainTab.add({
id:tabid,
pagetype:'formpic',
label: attachName,
border: false,
layout: 'fit',
closable: true,
iconCls: 'function',
tbar:tbar,
items:[imgbox]
});
mainTab.activate(tab);
},
//弹出窗口显示图片
showImage: function(attachId, attachName) {
var url = Jxstar.path+"/fileAction.do?funid=sys_attach&pagetype=editgrid&eventcode=down&dataType=byte&keyid="+attachId+'&user_id='+Jxstar.session['user_id'];
var html = '
';
var imgbox = new Ext.BoxComponent({
border:false,
html: html
});
var tbar = this.imgZoomTool(imgbox);
var win = new Ext.Window({
title: '浏览-' + attachName,
layout: 'fit',
width: 805,
height: 550,
constrainHeader: true,
resizable: true,
border: false,
modal: true,
closeAction: 'close',
autoScroll: true,
tbar:tbar,
items:[imgbox]
});
win.show();
},
//添加在线预览菜单
previewMenu: function(data) {
var previewFn, menu;
var type = data.content_type;
//word,xls有预览功能
/*很多浏览器的安全设置不允许执行Activex控件,这种体验也差
var appName = JxAttach.officeAppName(type);
if (Ext.isIE && appName.length > 0) {
//不能直接使用外部变量
previewFn = function(obj){
var md = obj.initialConfig.data;
var attachId = md.attach_id;
var attachName = md.attach_name;
var appName = JxAttach.officeAppName(md.content_type);
JxAttach.previewOffice(attachId, attachName, appName);
};
}*/
//PDF文件有预览功能,此OCX控件不支持流文件
if (type == 'application/pdf') {
previewFn = function(obj){
var md = obj.initialConfig.data;
var attachId = md.attach_id;
var attachName = md.attach_name;
JxAttach.previewPDF(attachId, attachName);
};
}
//图片文件有预览功能
if (type.indexOf('image') == 0) {
previewFn = function(obj){
var md = obj.initialConfig.data;
var attachId = md.attach_id;
var attachName = md.attach_name;
JxAttach.previewImage(attachId, attachName);
};
}
if (previewFn) {
menu = {items:[{
text:'在线浏览',
data:data, handler:previewFn}
]};
}
return menu;
},
//是office或者pdf
isDocs: function(fname) {
var ext = '';
var lasti = fname.lastIndexOf('.');
if (lasti >= 0) ext = fname.substr(lasti+1);
if (ext == 'pdf' || ext == 'doc' || ext == 'docx' ||
ext == 'xls' || ext == 'xlsx' || ext == 'ppt' || ext == 'pptx') {
return true;
}
return false;
},
isPdf: function(fname){
var ext = '';
var lasti = fname.lastIndexOf('.');
if (lasti >= 0) ext = fname.substr(lasti+1);
return (ext == 'pdf');
},
//在附件明细表中,采用弹出窗口的方式显示文档
showWinDoc: function(g, rowi, coli, e) {
var cm = g.getColumnModel();
var colname = cm.getColumnId(coli);
if (colname.indexOf('__attach_name') < 0 && colname.indexOf('__attach_path') < 0) return;
var t = e.getTarget();
if (t.tagName.toLowerCase() != 'a') return;
var rec = g.getStore().getAt(rowi);
var attachid = rec.get('sys_attach__attach_id');
var rec = g.getStore().getAt(rowi);
var attachid = rec.get('sys_attach__attach_id');
var attachname = rec.get('sys_attach__attach_name');
var contenttype = rec.get('sys_attach__content_type');
var downfile = function(attachid) {
var params = 'funid=sys_attach&keyid='+ attachid +'&pagetype=editgrid&eventcode=down';
Request.attachDown(params);
};
var viewfile = function(attachid, attachname, contenttype) {
if (contenttype.indexOf('image') >= 0) {
JxAttach.previewImage(attachid, attachname);
} else if (JxAttach.isDocs(attachname)) {
JxAttach.previewPDF(attachid, attachname);
}
};
if ((contenttype.indexOf('image') >= 0 || JxAttach.isPdf(attachname))) {
var menu = new Ext.menu.Menu({items:[
{text:'下载', data:attachid, handler:function(){downfile(attachid);}},
{text:'在线浏览', data:attachid, handler:function(){viewfile(attachid, attachname, contenttype);}}
]});
menu.show(t);
} else {
downfile(attachid);
}
},
//表格中有附件的记录,添加附件标志
viewAttachFlag: function(grid) {
if (grid == null) return;
var attachColNum = JxAttach.getAttachColNum(grid);
//如果定义了附件列,或者标识了需要显示附件,则处理附件标志显示
if (!(attachColNum >= 0 || grid.isShowAttach == true)) return;
if (attachColNum < 0) attachColNum = 0;
var store = grid.getStore();
var cnt = store.getCount();
if (cnt == 0) return;
var define = grid.gridNode.define;
//组织机构与用户的附件不显示
if (define.tablename == 'sys_dept' || define.tablename == 'sys_user') return;
var pkcol = define.pkcol;
var pks = '';
for (var i = 0; i < cnt; i++) {
var record = store.getAt(i);
pks += record.get(pkcol) + ',';
}
pks = pks.substr(0, pks.length-1);
//alert('pks=' + pks);
var hdCall = function(data) {
if (data.length == 0) return;
var attachs = [], mitems = [];
var rownum = -1;
for (var i = 0; i < data.length; i++) {
var row_num = parseInt(data[i].row_num);
var data_id = data[i].data_id;
var attach_id = data[i].attach_id;
var attach_name = data[i].attach_name;
var content_type = data[i].content_type;
var is_relat = data[i].is_relat;
//如果不是同一条记录的附件,则新建菜单
if (rownum != row_num) {
mitems = [];
}
//构建附件菜单
var cfg = {
id:attach_id,
text:attach_name,
handler:function(){
var params = 'funid=sys_attach&keyid='+ this.id +'&pagetype=editgrid&eventcode=down';
Request.attachDown(params);
}
};
//如果是关联附件,则显示红色字体
if (is_relat == '1') {
cfg.style = {color: 'red'};
}
//处理office文件与pdf文件的预览
var menu = JxAttach.previewMenu(data[i]);
if (menu) cfg.menu = menu;
//添加附件菜单
mitems[mitems.length] = cfg;
//如果不是同一条记录的附件,则新建菜单
if (rownum != row_num) {
rownum = row_num;
var td = grid.getView().getCell(row_num, attachColNum);
Ext.fly(td.firstChild).addClass('flag_attach');
//把菜单配置对象保存起来
var tdel = Ext.get(td);
tdel.myitems = mitems;
tdel.on('click', function(){
var menu = new Ext.menu.Menu({items:[this.myitems], width:200});
menu.on('hide', function(m){
m.myitems = null;
m.destroy();
});
menu.show(this);
});
}
}
};
//是否添加关联附件
var is_queryrelat = grid.isQueryRelat || '0';
var relat = Jxstar.systemVar.sys__attach__relat || '0';
if (relat != '1') is_queryrelat = '0';
//加密传输参数,避免SQL注入
if (JxUtil.use64()) {
pks = JxUtil.base64(pks);
}
//从后台查询任务信息
var params = 'funid=queryevent&pagetype=grid&eventcode=query_attach';
params += '&tablename='+ define.tablename +'&keyids='+ pks + '&is_queryrelat=' + is_queryrelat;
//是否只显示某类附件
var attachtype = grid.queryAttachType;
if (attachtype) {
params += '&attach_type=' + attachtype;
}
Request.dataRequest(params, hdCall);
},
/********************下面的方法是用于表单附件字段********************/
//public 表格提交时判断必填附件是否有上传
checkGrid: function(grid) {
var records = JxUtil.getSelectRows(grid);
if (!JxUtil.selected(records)) return;
var tabPanel = grid.findParentByType('tabpanel');
if (tabPanel == null) return;
var formTab = tabPanel.getComponent(1);
if (formTab == null) return;
var formPanel = formTab.getComponent(0);
if (formPanel == null || formPanel.isXType('form') == false) return;
var fields = formPanel.findByType('fileuploadfield');
if (fields == null || fields.length == 0) return;
//根据表单中的必填标记判断表格中的数据
for(var j = 0; j < records.length; j++) {
var data = records[j];
for(var i = 0; i < fields.length; i++) {
var f = fields[i];
if (f.allowBlank == false) {
var val = data.get(f.name);
if (val == null || val.length == 0) {
JxHint.alert(String.format(jx.util.itematt, f.fieldLabel));//【' + f.fieldLabel + '】栏目没有上传附件,不能提交!
return false;
}
}
}
}
},
//public 检查附件字符是否必填且没有上传附件
checkAttach: function(form) {
var fields = form.findByType('fileuploadfield');
if (fields == null || fields.length == 0) return true;
for(var i = 0; i < fields.length; i++) {
var f = fields[i];
if (f.allowBlank == false) {
var val = f.getValue();
if (val == null || val.length == 0) {
JxHint.alert(String.format(jx.util.itematt, f.fieldLabel));//'【' + f.fieldLabel + '】栏目没有上传附件,不能提交!'
return false;
}
}
}
return true;
},
//public 选择附件前判断,如果是已签字的记录不能调整
beforeChange: function(fileField) {
if (fileField.disabled) return;
var param = JxAttach.attachParam(fileField, '');
if (param == null) return;
var form = param.form;
var dataId = form.get(param.define.pkcol);
if (dataId == null || dataId.length == 0) {
JxHint.alert(jx.event.nosave);
return false;
}
//设置业务状态值
var audit0 = '0', audit6 = '6';
if (param.define.status) {
audit0 = param.define.status['audit0'];
}
var audit = audit0;
if (param.define.auditcol.length > 0) {
audit = form.get(param.define.auditcol);
}
if (audit != audit0 && audit != audit6) {
//JxHint.alert(jx.util.auditna);//业务记录已提交,不能修改附件!
//return false;
}
},
//public 表单中的附件控件显示附件方法
showAttach: function(mya) {
if (mya == null || mya.parentNode == null) return;
var fileField = Ext.getCmp(mya.parentNode.id);
if (fileField == null) return;
var param = JxAttach.attachParam(fileField, 'fdown');
if (param == null) return;
Request.attachDown(param.params);
},
//public 表单中的附件控件删除附件方法
deleteAttach: function(mya) {
if (mya == null || mya.parentNode == null) return;
var fileField = Ext.getCmp(mya.parentNode.id);
if (fileField == null) return;
if (fileField.fileInput.dom.disabled) return;
var hdcall = function() {
var param = JxAttach.attachParam(fileField, 'fdelete');
if (param == null) return;
//设置业务状态值
var audit0 = '0', audit6 = '6';
if (param.define.status) {
audit0 = param.define.status['audit0'];
}
var audit = audit0;
if (param.define.auditcol.length > 0) {
audit = param.form.get(param.define.auditcol);
}
if (audit != audit0 && audit != audit6) {
//JxHint.alert(jx.util.auditnd);//业务记录已提交,不能删除附件!
//return false;
}
//清除附件字段值
var hdcall = function() {
fileField.setValue('');
if (!Ext.isEmpty(param.form.myRecord)) {
param.form.myRecord.set(fileField.name, '');
param.form.myRecord.commit();
}
};
//发送删除请求
Request.postRequest(param.params, hdcall);
};
//确定删除选择的记录吗?
Ext.Msg.confirm(jx.base.hint, jx.event.delyes, function(btn) {
if (btn == 'yes') hdcall();
});
},
//public 保存表单中的附件信息
saveAttach: function(fileField) {
if (fileField.disabled) return;
var param = JxAttach.attachParam(fileField, 'fcreate');
if (param == null) return;
var form = param.form;
var dataId = form.get(param.define.pkcol);
if (dataId == null || dataId.length == 0) {
JxHint.alert(jx.event.nosave);
return false;
}
var hdcall = function() {
if (!Ext.isEmpty(form.myRecord)) {
form.myRecord.set(fileField.name, fileField.getValue());
form.myRecord.commit();
}
}
//上传附件
var params = param.params + '&attach_name='+ encodeURIComponent(fileField.getValue());
Request.fileRequest(form, params, hdcall, fileField);
},
//private 公共参数处理
attachParam: function(fileField, eventCode) {
//取到表单相关信息
var fileForm = fileField.findParentByType('form');
if (Ext.isEmpty(fileForm)) {
JxHint.alert(jx.util.formnat);//没有找到Form表单对象,不能上传附件!
return;
}
var form = fileForm.getForm();
var define = fileForm.formNode.define;
var nodeId = define.nodeid;
var tableName = define.tablename;
var dataId = form.get(define.pkcol);
if (Ext.isEmpty(dataId)) {
JxHint.alert(jx.event.nosave);
return;
}
var fieldName = fileField.name.split('__')[1];
//上传参数
var params = 'funid=sys_attach&pagetype=editgrid&eventcode='+ eventCode;
params += '&attach_field='+ fieldName +'&dataid='+ dataId;
params += '&table_name='+ tableName +'&datafunid='+ nodeId;
return {form:form, params:params, define:define};
}
});//Ext.apply
})();
/**
* 下面的处理图片浏览的工具类。
*
**/
var ImageShower = function(config){
this.config = config;
};
ImageShower.prototype = {
lookup : {},
show: function() {
this.initTemplates();
this.store = new Ext.data.JsonStore({
url: this.config.url,
root: 'data',
fields: [
'name', 'url', 'title'
],
listeners: {
'load': {fn:function(){ this.view.select(0); }, scope:this, single:true}
}
});
this.store.load();
var formatData = function(data){
data.shortName = Ext.util.Format.ellipsis(data.title, 15);
data.sizeString = '34';//formatSize(data);
data.dateString = new Date().format("m/d/Y g:i a");
this.lookup[data.name] = data;
return data;
};
this.view = new Ext.DataView({
store: this.store,
tpl: this.thumbTemplate,
singleSelect: true,
autoHeight:true,
overClass:'x-view-over',
itemSelector:'div.thumb-wrap',
emptyText: 'No images to display',
prepareData: formatData.createDelegate(this),
listeners: {
'selectionchange': {fn:this.showDetails, scope:this, buffer:100},
'loadexception' : {fn:this.onLoadException, scope:this},
'beforeselect' : {fn:function(view){
return view.store.getRange().length > 0;
}}
}
});
var imgZoomTool = function(ct) {
//构建缩放比例数据
var zooms = [];
for (var i = 20; i <= 200; i += 20) {
zooms[zooms.length] = [i, i];
}
zooms[zooms.length] = ['all', '全屏'];
//旋转角度
var dus = [];
for (var i = 0; i < 360; i += 90) {
dus[dus.length] = [i, i];
}
var tbar = new Ext.Toolbar({items:[
{xtype:'tbtext', text:'缩放比例:'},
{xtype:'combo', width:80, editable:false, name:'zoomvalue',
store: new Ext.data.SimpleStore({
fields:['value','text'],
data: zooms
}),
mode: 'local', triggerAction: 'all', valueField: 'value',
displayField: 'text', value: 100,
listeners:{select:function(s){
var imgel = Ext.getCmp('img-detail-panel').body;
var resiz = imgel.resiz;
var oldw = resiz.oldw;
var oldh = resiz.oldh;
if (!resiz || oldw == 0) return;
var v = s.getValue(), w, h;
if (v == 'all') {
w = imgel.getWidth();
h = imgel.getHeight();
var a = 1, b = 1;
if (oldw > w) a = (w/oldw);
if (oldh > h) b = (h/oldh);
if (a > b) a = b;//取比率小的值,按比例缩放
if (a < 1) {
w = parseInt(oldw*a);
h = parseInt(oldh*a);
}
} else {
w = parseInt(oldw) * parseInt(v) / 100;
h = parseInt(oldh) * parseInt(v) / 100;
}
resiz.resizeTo(w, h);
//设置缩放后的图片居中
var neww = parseInt((imgel.getWidth() - w)/2);
resiz.getEl().setX(imgel.getX()+neww);
var newh = parseInt((imgel.getHeight() - h)/2);
resiz.getEl().setY(imgel.getY()+newh);
}}},
{xtype:'tbtext', text:' %'},
{xtype:'tbtext', text:'旋转角度:'},
{xtype:'combo', width:80, editable:false,
store: new Ext.data.SimpleStore({
fields:['value','text'],
data: dus
}),
mode: 'local', triggerAction: 'all', valueField: 'value',
displayField: 'text', value: 0,
listeners:{select:function(s){
var imgel = Ext.getCmp('img-detail-panel').body.child('div');//如果取body,会造成挡住工具栏
var v = s.getValue();
if (Ext.isIE) {
v = Math.round(v/90);
imgel.dom.style.filter = "progid:DXImageTransform.Microsoft.BasicImage(rotation="+v+")";
} else {
imgel.dom.style.transform = "rotate("+v+"deg)";
}
}}}]
});
return tbar;
};
var pct = this.config.parentCtl;
var tbar = imgZoomTool(pct);
var tabid = 'images-view';
//如果存在,则先删除
var panel = pct.getComponent(tabid);
if (panel) {
var dv = panel.getComponent(0);
dv.removeAll(true);
dv.add(this.view);
} else {
var cfg = {
id:tabid,
pagetype:'formpic',
layout: 'border',
border:false,
closable: true,
iconCls:'tab_form',
items:[{
id: 'img-chooser-view',
region: 'west',
split: true,
width: 160,
minWidth: 160,
maxWidth: 300,
border:false,
autoScroll: true,
items: this.view
},{
id: 'img-detail-panel',
border:false,
region: 'center',
autoScroll: true,
tbar:tbar
}]
};
panel = pct.add(cfg);
pct.doLayout();
}
return panel;
},
initTemplates : function(){
this.thumbTemplate = new Ext.XTemplate(
'',
'',
'',
''
);
this.thumbTemplate.compile();
this.detailsTemplate = new Ext.XTemplate(
'',
'
',
'
',//style="width:100%;height:100%;" 显示原图大小
'',
'
'
);
this.detailsTemplate.compile();
},
showDetails : function(){
var selNode = this.view.getSelectedNodes();
var imgCmp = Ext.getCmp('img-detail-panel');
var detailEl = imgCmp.body;
if(selNode && selNode.length > 0){
selNode = selNode[0];
var data = this.lookup[selNode.id];
//支持显示高清图片
if (data.url.indexOf('is_highimage') < 0) {
data.url = data.url + '&is_highimage=1';
}
detailEl.hide();
this.detailsTemplate.overwrite(detailEl, data);
detailEl.slideIn('l', {stopFx:true,duration:.2});
//设置显示比例100
var tbar = imgCmp.getTopToolbar();
tbar.get(1).setValue(100);
JxUtil.delay(500, function(){
var imgel = detailEl.child('img');
var resiz = new Ext.Resizable(imgel, {
wrap:true,
pinned:true,
minWidth:200,
minHeight:100,
preserveRatio:true,
dynamic:true,
handles:'all',
draggable:true
});
//取图片原始大小
var oldw = resiz.getEl().getWidth();
var oldh = resiz.getEl().getHeight();
resiz.oldw = oldw;
resiz.oldh = oldh;
//方便工具栏取到此缩放对象
detailEl.resiz = resiz;
//取画布大小,图片按比例缩放
var w = detailEl.getWidth();
var h = detailEl.getHeight();
var a = 1, b = 1;
if (oldw > w) a = (w/oldw);
if (oldh > h) b = (h/oldh);
if (a > b) a = b;//取比率小的值,按比例缩放
if (a < 1) {
resiz.resizeTo(parseInt(oldw*a), parseInt(oldh*a));
var combo = tbar.find('name', 'zoomvalue')[0];
if (combo) combo.setValue('all');
}
//设置缩放后的图片居中
var neww = parseInt((w - oldw*a)/2);
if (neww > 0) {
resiz.getEl().setX(resiz.getEl().getX()+neww);
}
var newh = parseInt((h - oldh*a)/2);
if (newh > 0) {
resiz.getEl().setY(resiz.getEl().getY()+newh);
}
});
}else{
detailEl.update('');
}
},
onLoadException : function(v,o){
this.view.getEl().update('Error loading images.
');
}
};