//该附件类不用于文档表单的展现 MWF.require("MWF.widget.AttachmentController", null,false); MWF.xApplication.cms.Document.Attachment = new Class({ Implements: [Options, Events], options: { "documentId" : "", "isNew": false, "isEdited" : true, "size" : "max", "isSizeChange" : true }, initialize: function (node, app, actions, lp, options) { this.setOptions(options); this.app = app; this.node = $(node); this.actions = actions; this.lp = lp; }, load: function () { this.loadAttachmentController(); }, loadAttachmentController: function () { var options = { "style": "cms", "title": MWF.xApplication.cms.Document.LP.attachmentArea, //"附件区域", "size": this.options.size , "resize": true, //"attachmentCount": this.json.attachmentCount || 0, "isUpload": (this.options.isNew || this.options.isEdited) ? true : false, "isDelete": (this.options.isNew || this.options.isEdited) ? true : false, "isReplace": false, "isDownload": true, "isSizeChange": this.options.isSizeChange, "readonly": (!this.options.isNew && !this.options.isEdited ) ? true : false }; this.attachmentController = new MWF.widget.ATTER(this.node, this, options); this.attachmentController.load(); //this.actions.listAttachmentInfo.each(function (att) { // this.attachmentController.addAttachment(att); //}.bind(this)); if( this.data ){ this.data.each(function (att) { this.attachmentController.addAttachment(att); }.bind(this)); }else if( this.options.documentId && this.options.documentId!="" ){ this.listAttachment( function( json ){ json.data.each(function (att) { this.attachmentController.addAttachment(att); }.bind(this)); }.bind(this)) } }, transportData : function( json ){ if( typeOf(json.data) == "array" ){ json.data.each(function(d){ d.person = d.creatorUid; d.lastUpdateTime = d.updateTime; }) }else if( typeOf(json.data) == "object" ){ var d = json.data; d.person = d.creatorUid; d.lastUpdateTime = d.updateTime; }else{ json.each(function(d){ d.person = d.creatorUid; d.lastUpdateTime = d.updateTime; }) } return json; }, listAttachment: function( callback ){ if( this.options.documentId && this.options.documentId!="" ){ this.actions.listAttachment(this.options.documentId, function(json){ if(callback)callback(this.transportData(json)); }.bind(this)) } }, createUploadFileNode: function () { this.uploadFileAreaNode = new Element("div"); var html = ""; this.uploadFileAreaNode.set("html", html); this.fileUploadNode = this.uploadFileAreaNode.getFirst(); this.fileUploadNode.addEvent("change", function () { this.isQueryUploadSuccess = true; this.fireEvent( "queryUploadAttachment" ); if( this.isQueryUploadSuccess ){ var files = this.fileUploadNode.files; if (files.length) { for (var i = 0; i < files.length; i++) { var file = files.item(i); var formData = new FormData(); formData.append('file', file); formData.append('site', this.options.documentId); this.actions.uploadAttachment(this.options.documentId, function (o, text) { j = JSON.decode(text); if ( j.data ) { //j.userMessage var aid = typeOf( j.data ) == "object" ? j.data.id : j.data[0].id; this.actions.getAttachment( aid, this.options.documentId, function (json) { json = this.transportData(json); if (json.data) { this.attachmentController.addAttachment(json.data); //this.attachmentList.push(json.data); } this.attachmentController.checkActions(); this.fireEvent("upload", [json.data]); }.bind(this)) } this.attachmentController.checkActions(); }.bind(this), null, formData, file); } } }else{ this.uploadFileAreaNode.destroy(); this.uploadFileAreaNode = false; } }.bind(this)); }, uploadAttachment: function (e, node) { if (!this.uploadFileAreaNode) { this.createUploadFileNode(); } this.fileUploadNode.click(); }, deleteAttachments: function (e, node, attachments) { var names = []; attachments.each(function (attachment) { names.push(attachment.data.name); }.bind(this)); var _self = this; this.app.confirm("warn", e, this.lp.deleteAttachmentTitle, this.lp.deleteAttachment + "( " + names.join(", ") + " )", 300, 120, function () { while (attachments.length) { attachment = attachments.shift(); _self.deleteAttachment(attachment); } this.close(); }, function () { this.close(); }, null); }, deleteAttachment: function (attachment) { this.fireEvent("delete", [attachment.data]); this.actions.deleteAttachment(attachment.data.id, function (json) { this.attachmentController.removeAttachment(attachment); //this.form.businessData.attachmentList.erase( attachment.data ) this.attachmentController.checkActions(); }.bind(this)); }, replaceAttachment: function (e, node, attachment) { var _self = this; this.form.confirm("warn", e, this.lp.replaceAttachmentTitle, this.lp.replaceAttachment + "( " + attachment.data.name + " )", 300, 120, function () { _self.replaceAttachmentFile(attachment); this.close(); }, function () { this.close(); }, null); }, createReplaceFileNode: function (attachment) { this.replaceFileAreaNode = new Element("div"); var html = ""; this.replaceFileAreaNode.set("html", html); this.fileReplaceNode = this.replaceFileAreaNode.getFirst(); this.fileReplaceNode.addEvent("change", function () { var files = this.fileReplaceNode.files; if (files.length) { for (var i = 0; i < files.length; i++) { var file = files.item(i); var formData = new FormData(); formData.append('file', file); // formData.append('site', this.json.id); this.actions.replaceAttachment(attachment.data.id, this.options.documentId, function (o, text) { this.form.documentAction.getAttachment(attachment.data.id, this.opetions.documentId, function (json) { attachment.data = json.data; attachment.reload(); this.attachmentController.checkActions(); }.bind(this)) }.bind(this), null, formData, file); } } }.bind(this)); }, replaceAttachmentFile: function (attachment) { if (!this.replaceFileAreaNode) { this.createReplaceFileNode(attachment); } this.fileReplaceNode.click(); }, downloadAttachment: function (e, node, attachments) { attachments.each(function (att) { this.actions.getAttachmentStream(att.data.id, this.options.documentId); }.bind(this)); }, openAttachment: function (e, node, attachments) { attachments.each(function (att) { this.actions.getAttachmentStream(att.data.id, this.options.documentId); }.bind(this)); }, getAttachmentUrl: function (attachment, callback) { this.actions.getAttachmentUrl(attachment.data.id, this.options.documentId, callback); }, getAttachmentData : function(){ var data = []; this.attachmentController.attachments.each(function( att ){ data.push(att.data) }); return data; }, getAttachmentIds : function(){ var ids = []; this.attachmentController.attachments.each(function( att ){ ids.push(att.data.id) }); return ids; }, loadAttachmentSelecter: function( option, callback ){ MWF.require("MWF.widget.AttachmentSelector", function() { var options = { "style" : "cms", "title": MWF.xApplication.cms.Document.LP.selectAttachment, //"选择附件" "listStyle": "icon", "selectType" : "all", "size": "max", "attachmentCount": 0, //"isUpload": true, //"isDelete": true, //"isReplace": true, //"isDownload": true, "isUpload": (this.options.isNew || this.options.isEdited) ? true : false, "isDelete": (this.options.isNew || this.options.isEdited) ? true : false, "isReplace": false, "isDownload": true, "toBase64" : true, "base64MaxSize" : 800, //"isSizeChange": this.options.isSizeChange, "readonly": (!this.options.isNew && !this.options.isEdited ) ? true : false //"readonly": false }; options = Object.merge( options, option ); if (this.readonly) options.readonly = true; this.attachmentController = new MWF.widget.AttachmentSelector(document.body, this, options); this.attachmentController.load(); this.postSelect = callback; if( this.data ){ this.data.each(function (att) { this.attachmentController.addAttachment(att); }.bind(this)); }else{ this.listAttachment( function( json ){ json.data.each(function (att) { this.attachmentController.addAttachment(att); }.bind(this)); }.bind(this)) } }.bind(this)); }, selectAttachment: function(e, node, attachments){ if( attachments.length > 0 ){ var data = attachments[attachments.length-1].data; this.actions.getAttachmentUrl( data.id, this.options.documentId, function(url){ if( this.attachmentController.options.toBase64 ){ this.actions.getSubjectAttachmentBase64( data.id, this.attachmentController.options.base64MaxSize, function( json ){ var base64Code = json.data ? "data:image/png;base64,"+json.data.value : null; if(this.postSelect)this.postSelect( url , data, base64Code ) }.bind(this) ) }else{ if(this.postSelect)this.postSelect( url , data ) } }.bind(this)) } } });