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);
// }
}
});