MWF.xApplication.Execution = MWF.xApplication.Execution || {};
MWF.xDesktop.requireApp("Template", "MPopupForm", null, false);
MWF.xDesktop.requireApp("Template", "MForm", null, false);
MWF.xDesktop.requireApp("Execution", "Minder", null, false);
MWF.xDesktop.requireApp("Execution", "WorkDeploy", null,false);
MWF.xApplication.Execution.WorkMinder = new Class({
Extends: MPopupForm,
Implements: [Options, Events],
options: {
"style": "default",
"template" : "default",
"theme": "fresh-blue-compat", //"fresh-blue"
"width": "100%",
"height": "100%",
"hasTop": true,
"hasTopIcon" : true,
"hasTopContent" : true,
"hasIcon": false,
"hasBottom": false,
"hasScroll" : false,
"title": "脑图展现",
"draggable": false,
"closeAction": true
},
initialize: function (explorer, data, options) {
this.setOptions(options);
this.app = explorer.app;
this.lp = this.app.lp;
this.actions = this.app.restActions;
this.explorer = explorer;
this.path = "../x_component_Execution/$WorkMinder/";
this.cssPath = this.path+this.options.style+"/css.wcss";
this._loadCss();
this.options.title = this.lp.minderTitle + "-" + ( data.title || "") ;
this.data = data;
},
load: function (callback) {
this.open();
},
_open: function () {
this.formMaskNode = new Element("div.formMaskNode", {
"styles": this.css.formMaskNode,
"events": {
"mouseover": function (e) {
e.stopPropagation();
},
"mouseout": function (e) {
e.stopPropagation();
}
}
}).inject(this.app.content);
this.formAreaNode = new Element("div.formAreaNode", {
"styles": this.css.formAreaNode
});
this.formAreaNode.inject(this.formMaskNode, "after");
this.formAreaNode.fade("in");
this.createFormNode();
//this.setFormNodeSize();
this.refreshFun = this.refresh.bind(this);
this.app.addEvent("resize", this.refreshFun);
if (this.options.draggable && this.formTopNode) {
var size = this.app.content.getSize();
var nodeSize = this.formAreaNode.getSize();
this.formAreaNode.makeDraggable({
"handle": this.formTopNode,
"limit": {
"x": [0, size.x - nodeSize.x],
"y": [0, size.y - nodeSize.y]
}
});
}
},
destroy : function(){
if(this.minder)this.minder.destroy() ;
this.formMaskNode.destroy();
this.formAreaNode.destroy();
delete this;
},
refresh: function(){
this.setFormNodeSize();
if(this.minder)this.minder.refresh();
},
reload: function(){
if(this.minder)this.minder.destroy() ;
this.formTableArea.empty();
this._createTableContent();
},
_createTableContent: function () {
this.setFormNodeSize();
this.formTableArea.setStyles({"width": "100%", "height": "100%","background-color":"#fbfbfb"})
this.listNestWork( function(json){
this.createMinder( json );
}.bind(this))
},
createMinder: function( json ) {
this.minder = new MWF.xApplication.Execution.Minder(this.formTableArea, this.app, json, {
"hasNavi" : false,
"onPostLoad" : function(){
this.minder.km.execCommand('ExpandToLevel', 1); //折叠到第一层
this.minder.loadNavi( this.formTableContainer );
}.bind(this),
"onPostLoadNode" : function( minderNode ){
this.setMinderNode( minderNode );
}.bind(this)
});
this.minder.load();
},
listNestWork: function( callback ){
//var data = {
// "root": {
// "data": {"id": "9f92035021ac", "text": "软装修"},
// "children": [{
// "data": {"id": "b45yogtullsg", "created": 1463069010918, "text": "包阳台"},
// "children": [{
// "data": {"id": "3jl3i3j43", "created": 1463069010923, "text": "凤铝"}
// }, {
// "data": {"id": "3jl3i3j44", "created": 1463069010923, "text": "断桥"}
// }]
// },
// {
// "data": {"id": "b45yohdlynco", "created": 1463069012113, "text": "衣柜"}, "children": [
// {"data": {"id": "b45yohdlynco", "created": 1463069012113, "text": "主卧"}},
// {"data": {"id": "b45yohdlynco", "created": 1463069012113, "text": "次卧"}}
// ]
// },
// {"data": {"id": "b45yohdlynco", "created": 1463069012113, "text": "床"}, "children": []},
// {"data": {"id": "b45yohdlynco", "created": 1463069012113, "text": "餐桌"}, "children": []},
// {"data": {"id": "b45yohdlynco", "created": 1463069012113, "text": "灯具"}, "children": []},
// {"data": {"id": "b45yohdlynco", "created": 1463069012113, "text": "窗帘"}, "children": []}
// ]
// }
//};
//if(callback)callback( data );
//this.actions.getUserNestBaseWork(this.data.id, function(json){
// var d = this.transportData( json );
// if(callback)callback( d );
//}.bind(this))
this.actions.getUserMind(this.data.id, function(json){
var d = this.transportData( json );
if(callback)callback( d );
}.bind(this))
},
transportData : function( json ){
var newData = [];
this.getNestData( json.data.works , newData );
var d = {
root : {
data : this.data,
children : newData
}
};
d.root.data.text = d.root.data.title.length > 30 ? d.root.data.title.substr(0, 30) + "..." : d.root.data.title;
d.root.data.note = " ";
d.root.data.isCenterWork = true;
return d;
},
getNestData: function( oldData, newData ){
oldData.each( function(d){
var newd = {};
if(d.subWorks ){
newd.children = [];
this.getNestData( d.subWorks , newd.children );
}
newd.data = d;
if( d.subWorks )delete newd.data.subWorks;
newd.data.text = d.title.length > 20 ? d.title.substr(0, 20) + "..." : d.title;
//if( newd.data.workProcessStatus == this.lp.WorkDeploy.statusDraft ){
// newd.data.readOnly = true;
//}else{
newd.data.note= d.watch? " ":null;
//newd.data.note = " "
/*
* 取值为 0 移除进度信息;
* 取值为 1 表示未开始;
* 取值为 2 表示完成 1/8;
* 取值为 3 表示完成 2/8;
* 取值为 4 表示完成 3/8;
* 其余类推,取值为 9 表示全部完成
*/
//newd.data.progress = 8;
newd.data.resource = this.getActions( newd.data, newd.children );
//}
newData.push( newd );
}.bind(this))
},
setMinderNode : function( minderNode ){
var _self = this;
//alert("title="+minderNode.getData().title)
//alert("watch="+minderNode.getData().watch)
if( !minderNode.getData().watch ){
//km.select([minderNode],true);
//km.execCommand('Background', "#dcdcdc");
//km.execCommand('ForeColor', "#fff");
}else{
var icon = minderNode.getRenderer('NoteIconRenderer').getRenderShape();
if( icon ){
icon.addEventListener("mouseover", function ( ev ) {
_self.workInforTimer = setTimeout(function() {
var c = this.getRenderBox('screen');
_self.showWorkInfor( this.getData(), c );
}.bind(this), 300);
}.bind(minderNode));
icon.addEventListener("mouseout", function ( ev ) {
clearTimeout(_self.workInforTimer);
_self.destroyWorkInfor();
}.bind(minderNode));
icon.addEventListener("click", function ( ev ) {
_self.openWork( this, this.getData() );
ev.stopPropagation();
}.bind(minderNode));
}
var actions = minderNode.getRenderer('ResourceRenderer');
if( actions && actions.overlays && actions.overlays.length > 0){
actions.overlays.forEach(function( atn ){
atn.addEventListener("click", function ( ev ) {
var e = {
event : {
x : ev.originEvent.x,
y : ev.originEvent.y
}
};
_self.activeAction( atn.lastResourceName, this.getData(), e );
ev.stopPropagation();
}.bind(minderNode));
})
}
var cNode = minderNode.getRenderContainer().node;
cNode.addEventListener("dblclick", function ( ev ) {
_self.openWork( this, this.getData() );
}.bind(minderNode));
}
},
getActions: function( data, children ){
var actions = [];
//return actions;
if( data.workProcessStatus == this.lp.WorkDeploy.statusDraft ){
if( this.app.identity == data.deployerIdentity ){
actions.push("删除");
}
}else{
if( (!children || children.length == 0) && this.app.identity == data.deployerIdentity) {
actions.push("删除");
}
if( data.responsibilityIdentity == this.app.identity ){
actions.push("汇报");
actions.push("拆分");
}
}
//return ["删除", "拆分"];
return []
},
activeAction : function( actionText, data, ev){
if( actionText == "删除" ){
this.removeWork(data, ev);
}else if(actionText == "汇报"){
this.reportWork( data );
}else if(actionText == "拆分"){
this.splitWork( data );
}
},
openWork : function(node, data){
if( data.isCenterWork ){
this.openCenterWork(node, data)
}else{
this.openBaseWork(node, data);
}
},
openCenterWork: function(node, data){
var isEditedBool = ( data.processStatus == this.lp.WorkDeploy.statusDraft && this.app.identity == data.deployerIdentity )? true : false;
this.workDeploy = new MWF.xApplication.Execution.WorkMinder.WorkDeploy(this, this.actions,{"id":data.id},{
"isEdited":isEditedBool,
"centerWorkId":data.id,
"onQueryClose" : function(){
if( this.workDeploy.contentChanged ){
this.reload();
}
}.bind(this)
} );
this.workDeploy.load();
},
openBaseWork : function( node, data ){
if( data.workProcessStatus == this.lp.WorkDeploy.statusDraft ){
MWF.xDesktop.requireApp("Execution", "WorkForm", null, false);
var workform = new MWF.xApplication.Execution.WorkForm(this.explorer, this.app.restActions, data,{
"isNew": false,
"isEdited": this.app.identity == data.deployerIdentity,
"onPostSave" : function(){
this.reload();
}.bind(this)
});
workform.load();
}else{
MWF.xDesktop.requireApp("Execution", "WorkDetail", function(){
var workform = new MWF.xApplication.Execution.WorkDetail(this, this.app.restActions,data,{
"isNew": false,
"isEdited": false
});
workform.load();
}.bind(this));
}
},
removeWork:function( data , ev ){
var lp = this.app.lp;
var text = lp.deleteDocument2.replace(/{title}/g, data.title);
var _self = this;
this.readyRemove = true;
this.app.confirm("warn", ev, lp.deleteDocumentTitle, text, 350, 120, function () {
_self._removeDocument( data );
this.close();
}, function () {
_self.readyRemove = false;
this.close();
});
},
_removeDocument: function( data ){
if( data.isCenterWork ){
this.actions.deleteCenterWork(data.id, function(json){
this.app.notice(this.app.lp.deleteDocumentOK, "success");
this.reload();
}.bind(this));
}else{
this.actions.deleteBaseWork(data.id, function(json){
if(json.type && json.type == "success"){
this.app.notice(this.app.lp.deleteDocumentOK, "success");
this.reload();
}else{
this.app.notice(json.data.message, "error")
}
}.bind(this));
}
},
reportWork: function( data ){
MWF.xDesktop.requireApp("Execution", "WorkReport", function(){
var d = {
title : data.title,
workId : data.id,
centerId : data.centerId,
//centerTitle: this.data.centerTitle,
parentWorkId : data.parentWorkId,
//parentWorkTitle : this.data.title,
workType : data.workType,
workLevel : data.workLevel,
completeDateLimitStr : data.completeDateLimitStr,
completeDateLimit : data.completeDateLimit,
reportCycle: data.reportCycle,
responsibilityOrganizationName: data.responsibilityOrganizationName,
responsibilityEmployeeName: data.responsibilityEmployeeName,
responsibilityIdentity: data.responsibilityIdentity,
cooperateOrganizationName: data.cooperateOrganizationName,
cooperateEmployeeName: data.cooperateEmployeeName,
cooperateIdentity: data.cooperateIdentity,
readLeaderName: data.readLeaderName,
readLeaderIdentity: data.readLeaderIdentity,
reportDayInCycle: data.reportDayInCycle
};
var workReport = new MWF.xApplication.Execution.WorkReport(this, this.app.restActions, d, {
"isNew": false,
"isEdited": false,
"from" : "drafter"
});
workReport.load();
}.bind(this));
},
splitWork: function( data ){
MWF.xDesktop.requireApp("Execution", "WorkForm", function(){
var d = {
title : data.title,
centerId : data.centerId,
//centerTitle: data.centerTitle,
parentWorkId : data.id,
//parentWorkTitle : data.title,
workType : data.workType,
workLevel : data.workLevel,
completeDateLimitStr : data.completeDateLimitStr,
completeDateLimit : data.completeDateLimit,
reportCycle: data.reportCycle,
reportDayInCycle: data.reportDayInCycle
};
var workform = new MWF.xApplication.Execution.WorkForm(this, this.app.restActions,d,{
"isNew": false,
"isEdited": true,
"tabLocation": "myDo",
"onPostSave" : function(){ this.reload(); }.bind(this),
"onPostDeploy" : function(){ this.reload();}.bind(this)
});
workform.load();
}.bind(this));
},
destroyWorkInfor:function(){
if( this.inforNode ){
this.inforNode.destroy();
this.inforNode = null;
}
if( this.tooltip ){
this.tooltip.destroy();
this.tooltip = null;
}
},
showWorkInfor: function( data, c ){
this.destroyWorkInfor();
this.createInforNode( data, c);
},
setInforNodeCoondinates: function( inforNode, targetCoondinates ){
var containerScroll = this.formTableContainer.getScroll();
var containerSize = this.formTableContainer.getSize();
var nodeSize = inforNode.getSize();
var left;
var arrowX, arrowY;
if( targetCoondinates.left + 10 + nodeSize.x - containerScroll.x > containerSize.x ){
left = targetCoondinates.left + 50 - nodeSize.x;
arrowX = "right";
}else{
left = targetCoondinates.left + 10;
arrowX = "left";
}
var top;
if( targetCoondinates.top + 57 + nodeSize.y - containerScroll.y > containerSize.y ){
top = targetCoondinates.top - nodeSize.y - 10;
arrowY = "bottom";
}else{
top = targetCoondinates.top + targetCoondinates.height + 10;
arrowY = "top";
}
inforNode.setStyles({
"left" : left,
"top" : top
});
this.inforBoxArrow = new Element("div", {"styles":this.css.inforBoxArrow}).inject(this.inforNode);
if( arrowY == "top" ){
this.inforBoxArrow.setStyles({
"top" : "-8px",
"background-position" : "0px -18px"
})
}else{
this.inforBoxArrow.setStyles({
"bottom" : "-8px",
"background-position" : "0px -28px"
})
}
if( arrowX == "left" ){
this.inforBoxArrow.setStyle( "left" , "52px")
}else{
this.inforBoxArrow.setStyle( "right" , "10px")
}
},
createInforNode: function( data, c, callback){
this.inforNode = new Element("div", {
styles : {
"font-size" : "12px",
"position" : "absolute",
"z-index" : "11",
"background-color" : "#fff",
"border" : "1px solid #aaa",
"padding" : "10px",
"border-radius" : "3px",
"box-shadow": "0px 0px 5px #aaa"
}
}).inject( this.formTableArea );
this.inforNode.set("html", data.isCenterWork ? this.getCenterWorkInforHtml( data ) : this.getSubWorkInforHtml( data ) );
this.setInforNodeCoondinates( this.inforNode, c );
if( callback )callback();
},
getSubWorkInforHtml : function(data){
var titleStyle = "font-weight:bold;";
var valueStyle = "";
var lp = this.lp.workForm;
return "
" +
"" +
" | "+data.title+" | " +
"
" +
" | "+"状态"+": | " +
" "+data.workProcessStatus+" | " +
"
" +
" | "+lp.workType+": | " +
" "+data.workType+" | " +
//"
" +
//" | "+lp.workLevel+": | " +
//" "+data.workLevel+" | " +
"
" +
" | "+lp.timeLimit+": | " +
" "+data.completeDateLimitStr+" | " +
"
" +
" | "+lp.dutyDepartment+": | " +
" "+data.responsibilityOrganizationName+" | " +
"
" +
" | "+lp.dutyPerson+": | " +
" "+data.responsibilityEmployeeName+" | " +
"
" +
" | "+lp.secondDepartment+": | " +
" "+data.cooperateOrganizationName+" | " +
"
" +
" | "+lp.secondPerson+": | " +
" "+data.cooperateEmployeeName+" | " +
"
" +
"
"
},
getCenterWorkInforHtml: function(data){
var titleStyle = "font-weight:bold;";
var valueStyle = "";
var lp = this.lp;
var description = data.description.length > 50 ? data.description.substring(0,50) + "..." : data.description;
return "" +
"" +
" | "+data.title+" | " +
"
" +
" | "+"状态"+": | " +
" "+data.processStatus+" | " +
"
" +
" | "+lp.workForm.workType+": | " +
" "+data.defaultWorkType+" | " +
//"
" +
//" | "+lp.workForm.workLevel+": | " +
//" "+data.defaultWorkLevel+" | " +
"
" +
" | "+lp.workForm.timeLimit+": | " +
" "+data.defaultCompleteDateLimitStr+" | " +
"
" +
" | "+lp.baseWorkView.deployerName+": | " +
" "+data.deployerIdentity+" | " +
"
" +
" | "+lp.WorkDeploy.draftDate+": | " +
" "+data.createTime+" | " +
"
" +
" | "+lp.description+": | " +
" "+ description+" | " +
"
" +
"
";
},
setFormNodeSize: function (width, height, top, left) {
if (!width)width = this.options.width ? this.options.width : "50%";
if (!height)height = this.options.height ? this.options.height : "50%";
if (!top) top = this.options.top ? this.options.top : 0;
if (!left) left = this.options.left ? this.options.left : 0;
//var appTitleSize = this.app.window.title.getSize();
var allSize = this.app.content.getSize();
var limitWidth = allSize.x; //window.screen.width
var limitHeight = allSize.y; //window.screen.height
"string" == typeof width && (1 < width.length && "%" == width.substr(width.length - 1, 1)) && (width = parseInt(limitWidth * parseInt(width, 10) / 100, 10));
"string" == typeof height && (1 < height.length && "%" == height.substr(height.length - 1, 1)) && (height = parseInt(limitHeight * parseInt(height, 10) / 100, 10));
300 > width && (width = 300);
220 > height && (height = 220);
top = top || parseInt((limitHeight - height) / 2, 10); //+appTitleSize.y);
left = left || parseInt((limitWidth - width) / 2, 10);
this.formAreaNode.setStyles({
"width": "" + width + "px",
"height": "" + height + "px",
"top": "" + top + "px",
"left": "" + left + "px"
});
this.formNode.setStyles({
"width": "" + width + "px",
"height": "" + height + "px"
});
var iconSize = this.formIconNode ? this.formIconNode.getSize() : {x: 0, y: 0};
var topSize = this.formTopNode ? this.formTopNode.getSize() : {x: 0, y: 0};
var bottomSize = this.formBottomNode ? this.formBottomNode.getSize() : {x: 0, y: 0};
var contentHeight = height - iconSize.y - topSize.y - bottomSize.y;
//var formMargin = formHeight -iconSize.y;
this.formContentNode.setStyles({
"height": "" + contentHeight + "px"
});
this.formTableContainer.setStyles({
"width": "" + (width) + "px",
"height": "" + contentHeight + "px"
});
}
});
MWF.xApplication.Execution.WorkMinder.WorkDeploy = new Class({
Extends: MWF.xApplication.Execution.WorkDeploy,
deploy: function(){
var ids = [];
this.actions.getUserDeployBaseWork( this.centerWorkId, function(json){
if(this.centerWorkInforData){
if(this.centerWorkInforData.processStatus == this.lp.statusDraft){ //中心工作草稿环节,
json.data.each(function(d){
if(d.workProcessStatus == this.lp.statusDraft){
ids.push(d.id)
}
}.bind(this))
}else{ //其他环节,其他环节也有可能拟稿人追加
json.data.each(function( d ){
//if( d.subWrapOutOkrWorkBaseInfos ){
// d.subWrapOutOkrWorkBaseInfos.each(function( infor ){
if( d.subWorks ){
d.subWorks.each(function( infor ){
if( infor.workProcessStatus == this.lp.statusDraft ){
ids.push( infor.id )
}
}.bind(this))
}
if(d.workProcessStatus == this.lp.statusDraft){
ids.push(d.id)
}
}.bind(this))
}
}
if( ids.length > 0 ){
var data = { "workIds":ids };
this.actions.deployBaseWork( data, function( j ){
if(j.type && j.type == "success"){
this.app.notice(this.lp.deployeSuccess, "ok");
//this.reloadContent();
this.close();
this.explorer.reload();
}else{
this.app.notice(j.data.message, "error")
}
}.bind(this));
}else{
this.app.notice(this.lp.noWordNeedDeployed, "ok");
}
}.bind(this));
}
});