|
|
@@ -0,0 +1,228 @@
|
|
|
+/**
|
|
|
+ * 多文件上传下载
|
|
|
+ */
|
|
|
+Ext.define('saas.view.core.form.field.FileField', {
|
|
|
+ extend: 'Ext.form.FieldSet',
|
|
|
+ alias: 'widget.mfilefield',
|
|
|
+ minHeight: 22,
|
|
|
+ collapsible: true,
|
|
|
+ multi: true,
|
|
|
+ allowBlank:true,
|
|
|
+ initComponent: function() {
|
|
|
+ this.columnWidth = 1;//强制占一行
|
|
|
+ this.cls = '';
|
|
|
+ this.title = this.title || '附件';
|
|
|
+ this._title = this.title;
|
|
|
+ this.callParent(arguments);
|
|
|
+ },
|
|
|
+ layout:'column',
|
|
|
+ items: [{
|
|
|
+ xtype: 'form',
|
|
|
+ columnWidth: 1,
|
|
|
+ frame: false,
|
|
|
+ border: false,
|
|
|
+ minHeight: 22,
|
|
|
+ bodyStyle: 'padding:2px;background:#f7f7f7',
|
|
|
+ layout: 'hbox',
|
|
|
+ items: [{
|
|
|
+ xtype: 'filefield',
|
|
|
+ name: 'file',
|
|
|
+ cls:'x-form-filefield',
|
|
|
+ buttonText: '浏览文件(≤20MB)',
|
|
|
+ buttonOnly: true,
|
|
|
+ hideLabel: true,
|
|
|
+ buttonConfig:{
|
|
|
+ cls:'x-filefield-button'
|
|
|
+ },
|
|
|
+ createFileInput : function() {
|
|
|
+ var me = this;
|
|
|
+ me.fileInputEl = me.button.el.createChild({
|
|
|
+ name: me.getName(),
|
|
|
+ cls: Ext.baseCSSPrefix + 'form-file-input',
|
|
|
+ tag: 'input',
|
|
|
+ type: 'file',
|
|
|
+ multiple:'multiple',
|
|
|
+ size: 1
|
|
|
+ }).on('change', me.onFileChange, me);
|
|
|
+ },
|
|
|
+ listeners: {
|
|
|
+ change: function(field){
|
|
|
+ if(field.value != null){
|
|
|
+ field.ownerCt.ownerCt.upload(field.ownerCt, field);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }]
|
|
|
+ }],
|
|
|
+ setValue: function(value){
|
|
|
+ this.value = value;
|
|
|
+ this.dirty = true;
|
|
|
+ this.ownerCt.viewModel.data[this.name] = this.value
|
|
|
+ },
|
|
|
+ getValue: function (){
|
|
|
+ return this.down('hidden').value;
|
|
|
+ },
|
|
|
+ renderMF: function(f){
|
|
|
+ f.setHtml(null);
|
|
|
+ var form = f.ownerCt;
|
|
|
+ if(f.value != null && f.value.toString().trim() != ''){
|
|
|
+ f.download(f.value,f.name);
|
|
|
+ }
|
|
|
+ if(typeof(form.readOnly)!="undefined"){
|
|
|
+ f.setReadOnly(form.readOnly);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 上传附件
|
|
|
+ */
|
|
|
+ upload: function(form, field){
|
|
|
+ var me = this;
|
|
|
+ var myForm = field.ownerCt;
|
|
|
+ var fileEl = field.fileInputEl.dom;
|
|
|
+ var fd = new FormData();
|
|
|
+ fd.append('file', fileEl.files[0]);
|
|
|
+ fd.append('folderId', 0);
|
|
|
+ form.setLoading(true);
|
|
|
+ Ext.Ajax.request({
|
|
|
+ url: '/api/file/upload',//这里是填写需要跨域访问的URL
|
|
|
+ cors: true,
|
|
|
+ useDefaultXhrHeader: false,
|
|
|
+ method: 'post',
|
|
|
+ rawData: fd,
|
|
|
+ headers: {
|
|
|
+ 'Access-Control-Allow-Origin': '*',
|
|
|
+ 'Authorization': saas.util.State.get('session').token,
|
|
|
+ //"Content-Type": 'multipart/form-data' //文件上传的格式,
|
|
|
+ "Content-Type":null
|
|
|
+ },
|
|
|
+ success: function (response, opts) {
|
|
|
+ form.setLoading(false);
|
|
|
+ var res = Ext.decode(response.responseText);
|
|
|
+ if(res.success){
|
|
|
+ saas.util.BaseUtil.showSuccessToast('上传成功');
|
|
|
+ var data = res.data;
|
|
|
+ var name = data.name + " (" + Ext.util.Format.fileSize(data.size) + ")";
|
|
|
+ var w = Math.min((me.getStrLength(name) + 25) / 200, .8);
|
|
|
+ if(data.id){
|
|
|
+ field = Ext.create('saas.view.core.form.field.TrashField', {
|
|
|
+ fileName: data.name,
|
|
|
+ value: name,
|
|
|
+ columnWidth: w,
|
|
|
+ readOnly: false,
|
|
|
+ editable: false,
|
|
|
+ filepath: data.fullPath,
|
|
|
+ filesize: data.size,
|
|
|
+ _id:data.id,
|
|
|
+ fieldStyle: 'background:#E0EEEE;'
|
|
|
+ });
|
|
|
+ me.add(field);
|
|
|
+ val = (me.value || '') + data.id + ';';
|
|
|
+ // //添加FilePath表的ID
|
|
|
+ me.setValue(val);
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ saas.util.BaseUtil.showErrorToast('上传失败: ' + res.message);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ failure: function (response, opts) {
|
|
|
+ form.setLoading(false);
|
|
|
+ var res = Ext.decode(response.responseText);
|
|
|
+ saas.util.BaseUtil.showErrorToast('上传失败: ' + res.message);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 根据id读取对应PATH
|
|
|
+ * @param id{String} fp_id
|
|
|
+ */
|
|
|
+ download: function(id,name){
|
|
|
+ var me = this;
|
|
|
+ me.clearAll();
|
|
|
+ var files = new Array();
|
|
|
+ Ext.Ajax.request({
|
|
|
+ url : '/api/file/info',
|
|
|
+ async: false,
|
|
|
+ params: {
|
|
|
+ ids: id
|
|
|
+ },
|
|
|
+ method : 'GET',
|
|
|
+ callback : function(options,success,response){
|
|
|
+ var res = new Ext.decode(response.responseText);
|
|
|
+ if(res.exception || res.exceptionInfo){
|
|
|
+ showError(res.exceptionInfo);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ files = res.data != null ? res.data : [];
|
|
|
+ }
|
|
|
+ });
|
|
|
+ Ext.each(files, function(f){
|
|
|
+ var name = f.name + " (" + Ext.util.Format.fileSize(f.size) + ")";
|
|
|
+ var w = Math.min((me.getStrLength(name) + 25) / 200, .8);
|
|
|
+ me.addItem(Ext.create('saas.view.core.form.field.TrashField', {
|
|
|
+ fileName: f.name,
|
|
|
+ value: name,
|
|
|
+ columnWidth: w,
|
|
|
+ readOnly: false,
|
|
|
+ editable: false,
|
|
|
+ filepath: f.fullPath,
|
|
|
+ filesize: f.size,
|
|
|
+ _id:f.id,
|
|
|
+ fieldStyle: 'background:#E0EEEE;'
|
|
|
+ }));
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ checkUploadAmount:function(form){
|
|
|
+ var files = form.getEl().down('input[type=file]').dom.files;
|
|
|
+ var amounts = 0;
|
|
|
+ for (var i = 0; i < files.length; i++) {
|
|
|
+ amounts = amounts + files[i].size
|
|
|
+ }
|
|
|
+ if (amounts>104857600) {
|
|
|
+ Ext.MessageBox.alert("警告","对不起,上传文件总大小超过100m");
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ },
|
|
|
+ addItem: function(item){
|
|
|
+ this.add(item);
|
|
|
+ },
|
|
|
+ setReadOnly: function(bool){
|
|
|
+ //只读情况下限制不允许上传
|
|
|
+ var f=this.down('filefield');
|
|
|
+ if(f.button&&f.fileInputEl){
|
|
|
+ //若界面配置字段可修改则允许传附件
|
|
|
+ if(this.modify) bool=false;
|
|
|
+ f.button.setDisabled(bool);
|
|
|
+ if(bool) {
|
|
|
+ f.fileInputEl.dom.setAttribute('disabled',bool);
|
|
|
+ }else f.fileInputEl.dom.removeAttribute('disabled');
|
|
|
+ }
|
|
|
+ },
|
|
|
+ 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;
|
|
|
+ },
|
|
|
+ clearAll: function() {
|
|
|
+ var me = this, items = me.query('trashfield');
|
|
|
+ Ext.Array.each(items, function(item){
|
|
|
+ me.remove(item);
|
|
|
+ });
|
|
|
+ me.filesize = 0;
|
|
|
+ },
|
|
|
+ checkFile:function(fileName){
|
|
|
+ var arr=['php','php2','php3', 'php5', 'phtml', 'asp', 'aspx', 'ascx', 'jsp', 'cfm', 'cfc', 'pl','pl','bat', 'dll', 'reg', 'cgi','war'];
|
|
|
+ var suffix=fileName.substring(fileName.lastIndexOf(".")+1);
|
|
|
+ return Ext.Array.contains(arr,suffix);
|
|
|
+ },
|
|
|
+ isValid:function(){
|
|
|
+ return true;
|
|
|
+ },
|
|
|
+ isDirty:function(){
|
|
|
+ return this.dirty;
|
|
|
+ }
|
|
|
+});
|