MWF.xDesktop.requireApp("process.Xform", "$Module", null, false); /** @class Relatedlink 相关推荐组件,本组件根据其当前流程实例的相关性分数列式其他流程实例(带权限)。 * @o2cn 相关推荐组件 * @example * //可以在脚本中获取该组件 * //方法1: * var relatedlink = this.form.get("relatedlink"); //获取组件 * //方法2 * var relatedlink = this.target; //在组件本身的脚本中获取 * @extends MWF.xApplication.process.Xform.$Module * @o2category FormComponents * @since v7.3 * @o2range {Process|CMS|Portal} * @hideconstructor */ MWF.xApplication.process.Xform.Relatedlink = MWF.APPRelatedlink = new Class( /** @lends MWF.xApplication.process.Xform.Relatedlink# */ { Implements: [Events], Extends: MWF.xApplication.process.Xform.$Module, options: { /** * 加载数据后事件。 * @event MWF.xApplication.process.Xform.Relatedlink#postLoadData * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明} * @example * //触发该事件的时候可以获取到链接数据linkData * var linkData = this.target.linkData; * //可以修改linkData达到定制化链接数据的效果 * do something */ /** * 创建每行需要导入的数据后触发,this.event指向当前链接对象。 * @event MWF.xApplication.process.Xform.Relatedlink#postLoadLink * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明} * @example * this.event格式如下: * { * node: DomElement, * data: { * "title", "标题一", * ... * } * } */ "moduleEvents": ["queryLoad","postLoad", "afterLoad", "postLoadData", "postLoadLink"] }, _loadUserInterface: function(){ this.node.empty(); this.node.setStyle("-webkit-user-select", "text"); switch (this.json.activeType) { case "click": this.loadButton(); break; case "delay": break; case "immediately": this.loadContent(); break; } }, loadButton: function(){ this.buttonNode = new Element("div.rlbutton", { "styles": this.json.buttonStyles || {}, "text": this.json.buttonText, "events":{ click: function () { this.active(); this.buttonNode.destroy(); this.buttonNode = null; }.bind(this) } }).inject( this.node ); }, /** * @summary 当相关推荐被设置为延迟激活,通过active方法激活 * @param {Function} callback 激活后的回调 * @example * var relativeLink = this.form.get("fieldId"); * relativeLink.active(function(){ * //do someting * }) */ active: function( callback ){ if( !this.loaded ){ this.loadContent( callback ); }else{ if(callback)callback(); } }, loadContent: function( callback ){ o2.Actions.load("x_query_assemble_surface").MoreLikeThisAction.post({ flag: this.getFlag(), category: this.getCategory(), count: (this.json.count || 6).toInt() }, function(json){ this.linkData = json.data.moreLikeThisList; this.fireEvent("postLoadData"); this.loadLinks(); this.loaded = true; this.fireEvent("afterLoad"); if(callback)callback(); }.bind(this)); }, getFlag: function(){ return this.form.businessData.work.id; // if (this.form.businessData.work && !this.form.businessData.work.completedTime) { // return this.form.businessData.work.id; // } else { // return this.form.businessData.workCompleted.id; // } }, getCategory: function(){ return "processPlatform"; }, loadLinks: function(){ switch (this.json.mode){ case "script": this.loadLinkByScript(); break; case "text": this.loadLinkDefault(); break; default: this.loadLinkTable(); } }, loadLinkTable: function(){ var table = new Element("table", { "styles": this.json.tableStyles || this.form.css.relatedlinkTable, "border": "0", "cellSpacing": "0", "cellpadding": "3px", "width": "100%" }).inject(this.node); var tr = table.insertRow(0); //.setStyles( this.form.css.relatedlinkTableTitleLine ); var lp = MWF.xApplication.process.Xform.LP; var thStyle = this.json.tableTitleCellStyles || this.form.css.relatedlinkTableTitle; var td = tr.insertCell(0).setStyles(thStyle); td.set("text", lp.title); td = tr.insertCell(1).setStyles(thStyle); td.set("text", lp.creatorPerson); td = tr.insertCell(2).setStyles(thStyle); td.set("text", lp.creatorUnit); td = tr.insertCell(3).setStyles(thStyle); td.set("text", lp.createTime); td = tr.insertCell(4).setStyles(thStyle); td.set("text", lp.updateTime); td = tr.insertCell(5).setStyles(thStyle); td.set("text", lp.score); var tdStyle = this.json.tableContentCellStyles || this.form.css.relatedlinkTableCell; this.linkData.each(function (log, idx) { var tr = table.insertRow(table.rows.length); tr.setStyles( this.json.tableContentLineStyles || this.form.css.relatedlinkTableLine ); tr.addEvents({ "mouseover": function () { tr.setStyles( this.json.tableContentLineStyles_over || this.form.css.relatedlinkTableLine_over ) }.bind(this), "mouseout": function () { tr.setStyles( this.json.tableContentLineStyles || this.form.css.relatedlinkTableLine ) }.bind(this) }) var td = tr.insertCell(0).setStyles( tdStyle ); td.set("text", log.title); td.setStyles( this.json.tableContentCellStyles_title || this.form.css.relatedlinkTableCell_title ); td = tr.insertCell(1).setStyles(tdStyle); td.set("text", log.creatorPerson); td = tr.insertCell(2).setStyles(tdStyle); td.set("text", log.creatorUnit); td = tr.insertCell(3).setStyles(tdStyle); td.set("text", log.createTime); td = tr.insertCell(4).setStyles(tdStyle); td.set("text", log.updateTime); td = tr.insertCell(5).setStyles(tdStyle); td.set("text", log.score); this.setOpenEvent(tr, log); this.fireEvent("postLoadLink", [{ node: tr, data: log }]); }.bind(this)) }, loadLinkByScript: function(){ if (this.json.displayScript && this.json.displayScript.code){ var code = this.json.displayScript.code; this.linkData.each(function(log){ this.form.Macro.environment.link = log; var r = this.form.Macro.exec(code, this); var t = o2.typeOf(r); if (t==="string"){ this.node.appendHTML(r); }else if (t==="element"){ this.node.appendChild(r); } var node = this.node.getLast(); this.setOpenEvent(node, log); this.fireEvent("postLoadLink", [{ node: node, data: log }]); }.bind(this)); } }, loadLinkDefault: function(){ var text = this.json.textStyle; var readPersons = []; this.lineClass = "relatedlinkNode"; this.linkData.each(function(log, i){ var div = new Element("div", {styles: this.form.css[this.lineClass]}).inject(this.node); var rightDiv = new Element("div", {styles: this.form.css.relatedlinkTextNode}).inject(div); var html = text.replace(/{flag}/g, log.flag) .replace(/{createDate}/g, log.createTime.substring(0.10)) .replace(/{createTime}/g, log.createTime) .replace(/{updateDate}/g, log.updateTime.substring(0.10)) .replace(/{updateTime}/g, log.updateTime) .replace(/{creatorUnit}/g, o2.name.cn(log.creatorUnit)) .replace(/{creatorPerson}/g, o2.name.cn(log.creatorPerson)) .replace(/{title}/g, log.title || ""); rightDiv.appendHTML(html); if (this.lineClass === "relatedlinkNode"){ this.lineClass = "relatedlinkNode_even"; }else{ this.lineClass = "relatedlinkNode"; } this.setOpenEvent(div, log); this.fireEvent("postLoadLink", [{ node: div, data: log }]); }.bind(this)); }, setOpenEvent: function(node, data){ node.setStyle("cursor", "pointer"); if (data.category==="cms"){ node.addEvent("click", function(ev){ this.openCMSDocument( data, false); ev.stopPropagation(); }.bind(this)); }else{ node.addEvent("click", function(ev){ this.openWork(data); ev.stopPropagation(); }.bind(this)); } }, openWork: function(data){ var appId = "process.Work"+data.flag; // if (layout.desktop.apps[appId]){ // if (!layout.desktop.apps[appId].window){ // layout.desktop.apps[appId] = null; // layout.openApplication(null, layout.desktop.apps[appId].options.name, layout.desktop.apps[appId].options, layout.desktop.apps[appId].options.app, false, this, false); // }else{ // layout.desktop.apps[appId].setCurrent(); // } // }else { var op = { "jobId": data.flag, "appId": appId }; return layout.desktop.openApplication(this.event, "process.Work", op); // } }, openCMSDocument : function( data, isEdited ){ var appId = "cms.Document"+data.flag; // if (layout.desktop.apps[appId]){ // if (!layout.desktop.apps[appId].window){ // layout.desktop.apps[appId] = null; // layout.openApplication(null, layout.desktop.apps[appId].options.name, layout.desktop.apps[appId].options, layout.desktop.apps[appId].options.app, false, this, false); // }else{ // layout.desktop.apps[appId].setCurrent(); // } // }else { var options = { "documentId": data.flag, "appId": appId, "readonly" : !isEdited }; layout.desktop.openApplication(null, "cms.Document", options); // } } });