/**
* 多文件上传下载
*/
Ext.define('erp.view.core.form.FileField', {
extend: 'Ext.form.FieldSet',
alias: 'widget.mfilefield',
minHeight: 22,
collapsible: true,
title: '
附件',
style: 'background:#f1f1f1;',
margin: '2 2 2 2',
autoUpdate:true,//添加属性是否自动更新
filesize: 0,//附件总大小
initComponent: function() {
this.columnWidth = 1;//强制占一行
this.cls = '';
this.callParent(arguments);
this.items.items[0].name = this.name;
},
layout:'column',
items: [{
xtype: 'hidden',//该隐藏字段的值(附件在FilePath表的ID,用;隔开)将被保存到数据库
value: '',
fieldLabel: '附件'
},{
xtype: 'form',
columnWidth: 1,
frame: false,
border: false,
minHeight: 22,
bodyStyle: 'background:#f1f1f1;',
layout: 'hbox',
items: [{
xtype: 'filefield',
name: 'file',
buttonText: '浏览(≤100M)...',
buttonOnly: true,
hideLabel: true,
listeners: {
change: function(field){
if(field.value != null){
field.ownerCt.ownerCt.upload(field.ownerCt, field);
}
}
}
}]
}],
setValue: function(value){
this.value = value;
if(Ext.isEmpty(value))
this.down('hidden').setValue('');
else if(this.items && this.items.items.length==2){
this.download(value);
}
},
listeners : {
afterrender: function(f){
var form = f.ownerCt;
if(f.value != null && f.value.toString().trim() != ''){
f.download(f.value);
}
if(form.keyField){
Ext.getCmp(form.keyField).on('change', function(){
Ext.defer(function(){
Ext.each(f.items.items, function(item, index){
if(index > 1){
item.destroy();
}
});
if(f.value != null && f.value.toString().trim() != ''){
f.download(f.value);
}
}, 50);
});
}
f.setReadOnly(f.readOnly);
}
},
/**
* 上传附件
*/
upload: function(form, field){
var me = this;
var filename = '';
if(contains(field.value, "\\", true)){
filename = field.value.substring(field.value.lastIndexOf('\\') + 1);
} else {
filename = field.value.substring(field.value.lastIndexOf('/') + 1);
}
form.getForm().submit({
url: basePath + 'common/upload.action?em_code=' + em_code,
waitMsg: "正在上传:" + filename,
success: function(fp, o){
if(o.result.error){
showError(o.result.error);
} else {
me.fireEvent('afterupload', me, filename);
Ext.Msg.alert("恭喜", filename + " 上传成功!");
me.filesize += o.result.size;
me.setTitle('
附件' +
'(总大小:' + Ext.util.Format.fileSize(me.filesize) + ")");
var name = filename + " (" + Ext.util.Format.fileSize(o.result.size) + ")";
var w = Math.min((me.getStrLength(name) + 10) / 200, .8);
var field = Ext.create('erp.view.core.trigger.TrashField', {
fileName: filename,
value: name,
columnWidth: w,
readOnly: false,
editable: false,
filepath: o.result.filepath,
filesize: o.result.size,
realpath: o.result.path,
fieldStyle: 'background:#E0EEEE;'
});
me.add(field);
var val = me.down('hidden').value + o.result.filepath + ';';
me.down('hidden').setValue(val);
// 单据已经存在的情况下,直接修改attach字段
var form = me.ownerCt, kf;
if(form && form.keyField && (kf = Ext.getCmp(form.keyField)) != null
&& kf.getValue() != null && kf.getValue() != 0 && me.autoUpdate) {
field.updateAttachField(val, '添加附件');
}
}
}
});
},
/**
* 根据id读取对应PATH
* @param id{String} fp_id
*/
download: function(id){
var me = this;
var files = new Array();
Ext.Ajax.request({
url : basePath + 'common/getFilePaths.action',
async: false,
params: {
id: id,
itemId:me.id
},
method : 'post',
callback : function(options,success,response){
var res = new Ext.decode(response.responseText);
if(res.exception || res.exceptionInfo){
showError(res.exceptionInfo);
return;
}
files = res.files != null ? res.files : [];
}
});
Ext.each(files, function(f){
var path = f.fp_path;
var fileName = f.fp_name;
if(!fileName) {
if(contains(path, '\\', true)){
fileName = path.substring(path.lastIndexOf('\\') + 1);
} else {
fileName = path.substring(path.lastIndexOf('/') + 1);
}
}
me.filesize += f.fp_size;
me.setTitle('
附件' +
'(总大小:' + Ext.util.Format.fileSize(me.filesize) + ")");
var name = fileName + " (" + Ext.util.Format.fileSize(f.fp_size) + ")";
var w = Math.min((me.getStrLength(name) + 10) / 200, .8);
me.addItem(Ext.create('erp.view.core.trigger.TrashField', {
fileName: fileName,
value: name,
columnWidth: w,
readOnly: false,
editable: false,
filepath: f.fp_id,
filesize: f.fp_size,
realpath: path,
fieldStyle: 'background:#E0EEEE;'
}));
me.down('hidden').setValue(me.down('hidden').value + f.fp_id + ';');
me.down('hidden').originalValue = me.down('hidden').value;
});
},
addItem: function(item){
this.add(item);
},
setReadOnly: function(bool){
/*this.down('filefield').setDisabled(bool);*/
},
setFieldStyle: function(str) {
},
getStrLength: function(str) {
for (var len = str.length, c = 0, i = 0; i < len; i++)
str.charCodeAt(i) < 27 || str.charCodeAt(i) > 126 ? c += 2 : c++;
return c;
}
});