WebSocket.js 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703
  1. MWF.xDesktop = MWF.xDesktop || {};
  2. MWF.xApplication = MWF.xApplication || {};
  3. MWF.require("MWF.xDesktop.Actions.RestActions", null, false);
  4. MWF.xDesktop.WebSocket = new Class({
  5. Implements: [Options, Events],
  6. options: {},
  7. initialize: function(options){
  8. var addressObj = layout.serviceAddressList["x_message_assemble_communicate"];
  9. var uri = new URI(window.location.href);
  10. var scheme = uri.get("scheme");
  11. var wsScheme = (scheme.toString().toLowerCase()==="https") ? "wss" : "ws";
  12. this.ws = wsScheme+"://"+addressObj.host+(addressObj.port==80 ? "" : ":"+addressObj.port)+addressObj.context+"/ws/collaboration";
  13. this.reConnect = true;
  14. this.checking = false;
  15. this.heartTimeout = 60000;
  16. this.checkingTimeout = 4000;
  17. this.heartMsg = "heartbeat";
  18. this.maxErrorCount = 10;
  19. this.errorCount = 0;
  20. // var addressObj = layout.desktop.serviceAddressList["x_collaboration_assemble_websocket"];
  21. // this.ws = "ws://"+addressObj.host+(addressObj.port==80 ? "" : ":"+addressObj.port)+addressObj.context+"/ws/collaboration";
  22. //var ws = "ws://hbxa01.bf.ctc.com/x_collaboration_assemble_websocket/ws/collaboration";
  23. //使用轮询方式处理消息.....
  24. // this.webSocket = {
  25. // "readyState":"1",
  26. // "close": function(){},
  27. // "open": function(){}
  28. // };
  29. // window.setInterval(function(){
  30. // o2.Actions.get("")
  31. // }, 10000);
  32. ///*暂时不启用WebSocket了------------
  33. //this.ws = this.ws+"?x-token="+encodeURIComponent(Cookie.read("x-token"))+"&authorization="+encodeURIComponent(Cookie.read("x-token"));
  34. this.connect();
  35. },
  36. connect: function(){
  37. if (layout.config.webSocketEnable){
  38. var ws = this.ws+"?x-token="+encodeURIComponent(Cookie.read("x-token"));
  39. try{
  40. this.webSocket = new WebSocket(ws);
  41. //this.webSocket = new WebSocket(this.ws);
  42. this.webSocket.onopen = function (e){this.onOpen(e);}.bind(this);
  43. this.webSocket.onclose = function (e){this.onClose(e);}.bind(this);
  44. this.webSocket.onmessage = function (e){this.onMessage(e);}.bind(this);
  45. this.webSocket.onerror = function (e){this.onError(e);}.bind(this);
  46. //---------------------------------*/
  47. }catch(e){
  48. //WebSocket.close();
  49. //this.webSocket = new WebSocket(this.ws);
  50. this.errorCount++;
  51. console.log("Unable to connect to the websocket server, will retry in "+(this.checkingTimeout/1000)+" seconds");
  52. this.checkRetry();
  53. // if (this.webSocket){
  54. // this.close();
  55. // //this.webSocket = new WebSocket(this.ws);
  56. // }
  57. }
  58. }
  59. },
  60. onOpen: function(e){
  61. this.errorCount = 0;
  62. console.log("websocket is open, You can receive system messages");
  63. this.heartbeat();
  64. //MWF.xDesktop.notice("success", {"x": "right", "y": "top"}, "websocket is open ...");
  65. },
  66. onClose: function(e){
  67. console.log("websocket is closed. ");
  68. //if (this.reConnect) this.checkRetry();
  69. //MWF.xDesktop.notice("success", {"x": "right", "y": "top"}, "websocket is closed ...");
  70. },
  71. onMessage: function(e){
  72. if (e.data){
  73. try{
  74. if (e.data===this.heartMsg){
  75. this.heartbeat();
  76. //console.log("get heartbeat...");
  77. return true;
  78. }
  79. var data = JSON.decode(e.data);
  80. switch (data.category){
  81. case "dialog":
  82. switch (data.type){
  83. case "text":
  84. this.receiveChatMessage(data);
  85. break;
  86. default:
  87. }
  88. break;
  89. default:
  90. switch (data.type){
  91. case "task":
  92. case "task_create":
  93. case "task_urge":
  94. case "task_expire":
  95. case "task_press":
  96. this.receiveTaskMessage(data);
  97. break;
  98. case "read":
  99. case "read_create":
  100. this.receiveReadMessage(data);
  101. break;
  102. case "review":
  103. this.receiveReviewMessage(data);
  104. break;
  105. case "fileEditor":
  106. case "attachment_editor":
  107. case "attachment_editorCancel":
  108. case "attachment_editorModify":
  109. this.receiveFileEditorMessage(data);
  110. break;
  111. case "fileShare":
  112. case "attachment_share":
  113. case "attachment_shareCancel":
  114. this.receiveFileShareMessage(data);
  115. break;
  116. case "meetingInvite":
  117. case "meeting_invite":
  118. this.receiveMeetingInviteMessage(data);
  119. break;
  120. case "meetingCancel":
  121. case "meeting_cancel":
  122. this.receiveMeetingCancelMessage(data);
  123. break;
  124. case "meetingAccept":
  125. case "meeting_accept":
  126. this.receiveMeetingAcceptMessage(data);
  127. break;
  128. case "meetingReject":
  129. case "meeting_reject":
  130. this.receiveMeetingRejectMessage(data);
  131. break;
  132. case "attendanceAppealInvite":
  133. this.receiveAttendanceAppealInviteMessage(data);
  134. break;
  135. case "attendanceAppealAccept":
  136. this.receiveAttendanceAppealAcceptMessage(data);
  137. break;
  138. case "attendanceAppealReject":
  139. this.receiveAttendanceAppealRejectMessage(data);
  140. break;
  141. case "calendar_alarm":
  142. this.receiveCalendarAlarmMessage(data);
  143. break;
  144. case "teamwork_taskCreate":
  145. case "teamwork_taskUpdate":
  146. case "teamwork_taskDelelte":
  147. case "teamwork_taskOvertime":
  148. case "teamwork_taskChat":
  149. this.receiveTeamWorkMessage(data);
  150. break;
  151. case "custom_create":
  152. this.receiveCustomMessage(data);
  153. case "im_create":
  154. console.log("im 消息来了!!!");
  155. this.receiveIMMessage(data);
  156. break;
  157. default:
  158. }
  159. }
  160. }catch(e){}
  161. }
  162. },
  163. onError: function(e){
  164. this.errorCount++;
  165. //console.log(e);
  166. console.log("Unable to connect to the websocket server, will retry in "+(this.checkingTimeout/1000)+" seconds.");
  167. this.checkRetry();
  168. //MWF.xDesktop.notice("success", {"x": "right", "y": "top"}, "websocket is error ...");
  169. },
  170. checkRetry: function(){
  171. if (this.serverCheck) window.clearTimeout(this.serverCheck);
  172. if (this.heartbeatCheck) window.clearTimeout(this.heartbeatCheck);
  173. if (this.errorCount < this.maxErrorCount) this.serverCheck = window.setTimeout(function(){
  174. this.retry();
  175. }.bind(this), this.checkingTimeout);
  176. },
  177. retry: function(){
  178. if (this.webSocket){
  179. this.close();
  180. }
  181. console.log("Retry connect to websocket server. ("+this.errorCount+"/"+this.maxErrorCount+")");
  182. this.connect();
  183. },
  184. close: function(){
  185. this.reConnect = false;
  186. if (this.webSocket) this.webSocket.close();
  187. //WebSocket.close();
  188. },
  189. send: function(msg){
  190. if (!this.webSocket || this.webSocket.readyState != 1) {
  191. if (this.serverCheck) window.clearTimeout(this.serverCheck);
  192. this.retry();
  193. }
  194. // try{
  195. this.webSocket.send(JSON.encode(msg));
  196. // }catch(e){
  197. // this.retry();
  198. // this.webSocket.send(JSON.encode(msg));
  199. // }
  200. },
  201. heartbeat: function(){
  202. if (this.serverCheck) window.clearTimeout(this.serverCheck);
  203. if (this.heartbeatCheck) window.clearTimeout(this.heartbeatCheck);
  204. this.heartbeatCheck = window.setTimeout(function(){
  205. this.sendHeartbeat(this.heartMsg);
  206. }.bind(this), this.heartTimeout);
  207. },
  208. sendHeartbeat: function(msg){
  209. if (!this.webSocket || this.webSocket.readyState != 1) {
  210. if (this.serverCheck) window.clearTimeout(this.serverCheck);
  211. this.retry();
  212. }
  213. try{
  214. //console.log("send heartbeat ...");
  215. this.webSocket.send(msg);
  216. this.checkRetry();
  217. }catch(e){
  218. //console.log("send heartbeat error !!!");
  219. if (this.serverCheck) window.clearTimeout(this.serverCheck);
  220. this.retry();
  221. //this.initialize();
  222. }
  223. },
  224. receiveChatMessage: function(data){
  225. if (layout.desktop.widgets["IMIMWidget"]) layout.desktop.widgets["IMIMWidget"].receiveChatMessage(data);
  226. //if (layout.desktop.top.userPanel) layout.desktop.top.userPanel.receiveChatMessage(data);
  227. },
  228. openWork: function(id, e){
  229. o2.Actions.get("x_processplatform_assemble_surface").getWorkInfor(id, function(){
  230. var options = {"workId": id, "appId": "process.Work"+id};
  231. layout.desktop.openApplication(e, "process.Work", options);
  232. }.bind(this), function(){
  233. layout.desktop.openApplication(e, "process.TaskCenter", null, {
  234. "status": {
  235. "navi": "task"
  236. }
  237. });
  238. }.bind(this));
  239. },
  240. receiveTaskMessage: function(data){
  241. debugger;
  242. var task = data.body;
  243. //var content = MWF.LP.desktop.messsage.receiveTask+"《"+task.title+"》, "+MWF.LP.desktop.messsage.activity+": <font style='color: #ea621f'>"+(task.activityName || "")+"</font>";
  244. var content = data.title;
  245. content += "<br/><font style='color: #333; font-weight: bold'>"+MWF.LP.desktop.messsage.appliction+": </font><font style='color: #ea621f'>"+task.applicationName+"</font>; "+
  246. "<font style='color: #333; font-weight: bold'>"+MWF.LP.desktop.messsage.process+": </font><font style='color: #ea621f'>"+task.processName+"</font>";
  247. var msg = {
  248. "subject": MWF.LP.desktop.messsage.taskMessage,
  249. "content": content
  250. };
  251. var messageItem = layout.desktop.message.addMessage(msg, data.body.startTime);
  252. var tooltipItem = layout.desktop.message.addTooltip(msg, data.body.startTime);
  253. tooltipItem.contentNode.addEvent("click", function(e){
  254. layout.desktop.message.hide();
  255. this.openWork(task.work,e);
  256. }.bind(this));
  257. messageItem.contentNode.addEvent("click", function(e){
  258. layout.desktop.message.addUnread(-1);
  259. layout.desktop.message.hide();
  260. this.openWork(task.work,e);
  261. }.bind(this));
  262. },
  263. receiveReadMessage: function(data){
  264. var read = data.body;
  265. //var content = MWF.LP.desktop.messsage.receiveRead+"《"+read.title+"》. ";
  266. var content = data.title;
  267. content += "<br/><font style='color: #333; font-weight: bold'>"+MWF.LP.desktop.messsage.appliction+": </font><font style='color: #ea621f'>"+read.applicationName+"</font>; "+
  268. "<font style='color: #333; font-weight: bold'>"+MWF.LP.desktop.messsage.process+": </font><font style='color: #ea621f'>"+read.processName+"</font>";
  269. var msg = {
  270. "subject": MWF.LP.desktop.messsage.readMessage,
  271. "content": content
  272. };
  273. var messageItem = layout.desktop.message.addMessage(msg, data.body.startTime);
  274. var tooltipItem = layout.desktop.message.addTooltip(msg, data.body.startTime);
  275. tooltipItem.contentNode.addEvent("click", function(e){
  276. layout.desktop.message.hide();
  277. this.openWork(read.work,e);
  278. }.bind(this));
  279. messageItem.contentNode.addEvent("click", function(e){
  280. layout.desktop.message.addUnread(-1);
  281. layout.desktop.message.hide();
  282. this.openWork(read.work,e);
  283. }.bind(this));
  284. },
  285. receiveCustomMessage: function(data){
  286. var content = "<font style='color: #333; font-weight: bold'>"+MWF.LP.desktop.messsage.customMessage+":</font>"+data.body;
  287. var msg = {
  288. "subject": MWF.LP.desktop.messsage.customMessageTitle,
  289. "content": content
  290. };
  291. var messageItem = layout.desktop.message.addMessage(msg);
  292. var tooltipItem = layout.desktop.message.addTooltip(msg);
  293. },
  294. receiveIMMessage: function(data){
  295. var imBody = data.body;
  296. var jsonBody = imBody.body;
  297. var conversationId = imBody.conversationId;
  298. var body = JSON.parse(jsonBody);
  299. var msgBody = body.body; //默认text 文本消息
  300. if (body.type && body.type == "emoji") { //表情 消息
  301. msgBody = "[表情]";
  302. }
  303. var content = "<font style='color: #333; font-weight: bold'>"+data.title+"</font>"+msgBody;
  304. var msg = {
  305. "subject": MWF.LP.desktop.messsage.customMessageTitle,
  306. "content": content
  307. };
  308. var messageItem = layout.desktop.message.addMessage(msg);
  309. var options = {"conversationId": conversationId};
  310. messageItem.contentNode.addEvent("click", function(e){
  311. layout.desktop.message.addUnread(-1);
  312. layout.desktop.message.hide();
  313. layout.desktop.openApplication(e, "IMV2", options);
  314. }.bind(this));
  315. var tooltipItem = layout.desktop.message.addTooltip(msg);
  316. tooltipItem.contentNode.addEvent("click", function(e){
  317. layout.desktop.message.hide();
  318. layout.desktop.openApplication(e, "IMV2", options);
  319. }.bind(this));
  320. },
  321. receiveReviewMessage: function(data){
  322. var content = MWF.LP.desktop.messsage.receiveReview+"《"+data.title+"》. ";
  323. content += "<br/><font style='color: #333; font-weight: bold'>"+MWF.LP.desktop.messsage.appliction+": </font><font style='color: #ea621f'>"+data.applicationName+"</font>; "+
  324. "<font style='color: #333; font-weight: bold'>"+MWF.LP.desktop.messsage.process+": </font><font style='color: #ea621f'>"+data.processName+"</font>";
  325. var msg = {
  326. "subject": MWF.LP.desktop.messsage.reviewMessage,
  327. "content": content
  328. };
  329. var messageItem = layout.desktop.message.addMessage(msg, data.body.startTime);
  330. var tooltipItem = layout.desktop.message.addTooltip(msg, data.body.startTime);
  331. tooltipItem.contentNode.addEvent("click", function(e){
  332. layout.desktop.message.hide();
  333. layout.desktop.openApplication(e, "process.TaskCenter", null, {
  334. "status": {
  335. "navi": "review"
  336. }
  337. });
  338. });
  339. messageItem.contentNode.addEvent("click", function(e){
  340. layout.desktop.message.addUnread(-1);
  341. layout.desktop.message.hide();
  342. layout.desktop.openApplication(e, "process.TaskCenter", null, {
  343. "status": {
  344. "navi": "review"
  345. }
  346. });
  347. });
  348. },
  349. receiveFileEditorMessage: function(data){
  350. var content = "<font style='color: #ea621f; font-weight: bold'>"+data.person+"</font> "+MWF.LP.desktop.messsage.receiveFileEditor+"“"+data.name+"”. ";
  351. var msg = {
  352. "subject": MWF.LP.desktop.messsage.fileEditorMessage,
  353. "content": content
  354. };
  355. var messageItem = layout.desktop.message.addMessage(msg, ((data.body) ? data.body.startTime : ""));
  356. var tooltipItem = layout.desktop.message.addTooltip(msg, ((data.body) ? data.body.startTime : ""));
  357. tooltipItem.contentNode.addEvent("click", function(e){
  358. layout.desktop.message.hide();
  359. layout.desktop.openApplication(e, "File", null, {
  360. "status": {
  361. "tab": "editor",
  362. "node": data.person
  363. }
  364. });
  365. });
  366. messageItem.contentNode.addEvent("click", function(e){
  367. layout.desktop.message.addUnread(-1);
  368. layout.desktop.message.hide();
  369. layout.desktop.openApplication(e, "File", null, {
  370. "status": {
  371. "tab": "editor",
  372. "node": data.person
  373. }
  374. });
  375. });
  376. },
  377. receiveFileShareMessage: function(data){
  378. var content = "<font style='color: #ea621f; font-weight: bold'>"+data.person+"</font> "+MWF.LP.desktop.messsage.receiveFileShare+"“"+data.name+"”. ";
  379. var msg = {
  380. "subject": MWF.LP.desktop.messsage.fileShareMessage,
  381. "content": content
  382. };
  383. var messageItem = layout.desktop.message.addMessage(msg, ((data.body) ? data.body.startTime : ""));
  384. var tooltipItem = layout.desktop.message.addTooltip(msg, ((data.body) ? data.body.startTime : ""));
  385. tooltipItem.contentNode.addEvent("click", function(e){
  386. layout.desktop.message.hide();
  387. layout.desktop.openApplication(e, "File", null, {
  388. "status": {
  389. "tab": "share",
  390. "node": data.person
  391. }
  392. });
  393. });
  394. messageItem.contentNode.addEvent("click", function(e){
  395. layout.desktop.message.addUnread(-1);
  396. layout.desktop.message.hide();
  397. layout.desktop.openApplication(e, "File", null, {
  398. "status": {
  399. "tab": "share",
  400. "node": data.person
  401. }
  402. });
  403. });
  404. },
  405. getMeeting: function(data, callback){
  406. //this.action = new MWF.xDesktop.Actions.RestActions("/Actions/action.json", "x_meeting_assemble_control", "x_component_Meeting");
  407. //var action = new MWF.xDesktop.Actions.RestActions("/Actions/action.json", "x_meeting_assemble_control", "x_component_Meeting");
  408. if( data.body && typeOf( data.body ) === "object" ){
  409. var data = data.body;
  410. MWF.Actions.get("x_meeting_assemble_control").getRoom(data.room, function(roomJson){
  411. data.roomName = roomJson.data.name;
  412. MWF.Actions.get("x_meeting_assemble_control").getBuilding(roomJson.data.building, function(buildingJson){
  413. data.buildingName = buildingJson.data.name;
  414. if (callback) callback(data);
  415. }.bind(this));
  416. }.bind(this));
  417. }else{
  418. MWF.Actions.get("x_meeting_assemble_control").getMeeting(data.metting, function(json){
  419. var data = json.data;
  420. MWF.Actions.get("x_meeting_assemble_control").getRoom(data.room, function(roomJson){
  421. data.roomName = roomJson.data.name;
  422. MWF.Actions.get("x_meeting_assemble_control").getBuilding(roomJson.data.building, function(buildingJson){
  423. data.buildingName = buildingJson.data.name;
  424. if (callback) callback(data);
  425. }.bind(this));
  426. }.bind(this));
  427. }.bind(this));
  428. }
  429. },
  430. receiveMeetingInviteMessage: function(data){
  431. debugger;
  432. this.getMeeting(data, function(meeting){
  433. var content = MWF.LP.desktop.messsage.meetingInvite;
  434. content = content.replace(/{person}/g, MWF.name.cn(meeting.applicant));
  435. var date = Date.parse(meeting.startTime).format("%Y-%m-%d- %H:%M");
  436. content = content.replace(/{date}/g, date);
  437. content = content.replace(/{subject}/g, meeting.subject);
  438. content = content.replace(/{addr}/g, meeting.roomName+"("+meeting.buildingName+")");
  439. var msg = {
  440. "subject": MWF.LP.desktop.messsage.meetingInviteMessage,
  441. "content": content
  442. };
  443. var messageItem = layout.desktop.message.addMessage(msg, ((data.body) ? data.body.startTime : ""));
  444. var tooltipItem = layout.desktop.message.addTooltip(msg, ((data.body) ? data.body.startTime : ""));
  445. tooltipItem.contentNode.addEvent("click", function(e){
  446. layout.desktop.message.hide();
  447. layout.desktop.openApplication(e, "Meeting", null);
  448. });
  449. messageItem.contentNode.addEvent("click", function(e){
  450. layout.desktop.message.addUnread(-1);
  451. layout.desktop.message.hide();
  452. layout.desktop.openApplication(e, "Meeting", null);
  453. });
  454. }.bind(this));
  455. },
  456. receiveMeetingCancelMessage: function(data){
  457. debugger;
  458. this.getMeeting(data, function(meeting){
  459. var content = MWF.LP.desktop.messsage.meetingCancel;
  460. content = content.replace(/{person}/g, MWF.name.cn(meeting.applicant));
  461. var date = Date.parse(meeting.startTime).format("%Y-%m-%d- %H:%M");
  462. content = content.replace(/{date}/g, date);
  463. content = content.replace(/{subject}/g, meeting.subject);
  464. content = content.replace(/{addr}/g, meeting.roomName+"("+meeting.buildingName+")");
  465. var msg = {
  466. "subject": MWF.LP.desktop.messsage.meetingCancelMessage,
  467. "content": content
  468. };
  469. var messageItem = layout.desktop.message.addMessage(msg, ((data.body) ? data.body.startTime : ""));
  470. var tooltipItem = layout.desktop.message.addTooltip(msg, ((data.body) ? data.body.startTime : ""));
  471. tooltipItem.contentNode.addEvent("click", function(e){
  472. layout.desktop.message.hide();
  473. layout.desktop.openApplication(e, "Meeting", null);
  474. });
  475. messageItem.contentNode.addEvent("click", function(e){
  476. layout.desktop.message.addUnread(-1);
  477. layout.desktop.message.hide();
  478. layout.desktop.openApplication(e, "Meeting", null);
  479. });
  480. }.bind(this));
  481. },
  482. receiveMeetingAcceptMessage: function(data){
  483. debugger;
  484. this.getMeeting(data, function(meeting){
  485. var content = MWF.LP.desktop.messsage.meetingAccept;
  486. //content = content.replace(/{person}/g, MWF.name.cn(meeting.applicant));
  487. content = content.replace(/{person}/g, MWF.name.cn(data.person));
  488. var date = Date.parse(meeting.startTime).format("%Y-%m-%d- %H:%M");
  489. content = content.replace(/{date}/g, date);
  490. content = content.replace(/{subject}/g, meeting.subject);
  491. content = content.replace(/{addr}/g, meeting.roomName+"("+meeting.buildingName+")");
  492. var msg = {
  493. "subject": MWF.LP.desktop.messsage.meetingAcceptMessage,
  494. "content": content
  495. };
  496. var messageItem = layout.desktop.message.addMessage(msg, ((data.body) ? data.body.startTime : ""));
  497. var tooltipItem = layout.desktop.message.addTooltip(msg, ((data.body) ? data.body.startTime : ""));
  498. tooltipItem.contentNode.addEvent("click", function(e){
  499. layout.desktop.message.hide();
  500. layout.desktop.openApplication(e, "Meeting", null);
  501. });
  502. messageItem.contentNode.addEvent("click", function(e){
  503. layout.desktop.message.addUnread(-1);
  504. layout.desktop.message.hide();
  505. layout.desktop.openApplication(e, "Meeting", null);
  506. });
  507. }.bind(this));
  508. },
  509. receiveMeetingRejectMessage: function(data){
  510. debugger;
  511. this.getMeeting(data, function(meeting){
  512. var content = MWF.LP.desktop.messsage.meetingReject;
  513. //content = content.replace(/{person}/g, MWF.name.cn(meeting.applicant));
  514. content = content.replace(/{person}/g, MWF.name.cn(data.person));
  515. var date = Date.parse(meeting.startTime).format("%Y-%m-%d- %H:%M");
  516. content = content.replace(/{date}/g, date);
  517. content = content.replace(/{subject}/g, meeting.subject);
  518. content = content.replace(/{addr}/g, meeting.roomName+"("+meeting.buildingName+")");
  519. var msg = {
  520. "subject": MWF.LP.desktop.messsage.meetingRejectMessage,
  521. "content": content
  522. };
  523. var messageItem = layout.desktop.message.addMessage(msg, ((data.body) ? data.body.startTime : ""));
  524. var tooltipItem = layout.desktop.message.addTooltip(msg, ((data.body) ? data.body.startTime : ""));
  525. tooltipItem.contentNode.addEvent("click", function(e){
  526. layout.desktop.message.hide();
  527. layout.desktop.openApplication(e, "Meeting", null);
  528. });
  529. messageItem.contentNode.addEvent("click", function(e){
  530. layout.desktop.message.addUnread(-1);
  531. layout.desktop.message.hide();
  532. layout.desktop.openApplication(e, "Meeting", null);
  533. });
  534. }.bind(this));
  535. },
  536. receiveAttendanceAppealInviteMessage : function(data){
  537. var content = MWF.LP.desktop.messsage.attendanceAppealInvite;
  538. content = content.replace(/{subject}/g, data.subject);
  539. var msg = {
  540. "subject": MWF.LP.desktop.messsage.attendanceAppealInviteMessage,
  541. "content": content
  542. };
  543. var messageItem = layout.desktop.message.addMessage(msg);
  544. var tooltipItem = layout.desktop.message.addTooltip(msg);
  545. tooltipItem.contentNode.addEvent("click", function(e){
  546. layout.desktop.message.hide();
  547. layout.desktop.openApplication(e, "Attendance", {"curNaviId":"13"});
  548. });
  549. messageItem.contentNode.addEvent("click", function(e){
  550. layout.desktop.message.addUnread(-1);
  551. layout.desktop.message.hide();
  552. layout.desktop.openApplication(e, "Attendance", {"curNaviId":"13"});
  553. });
  554. },
  555. receiveAttendanceAppealAcceptMessage : function(data){
  556. var content = MWF.LP.desktop.messsage.attendanceAppealAccept;
  557. content = content.replace(/{subject}/g, data.subject);
  558. var msg = {
  559. "subject": MWF.LP.desktop.messsage.attendanceAppealAcceptMessage,
  560. "content": content
  561. };
  562. var messageItem = layout.desktop.message.addMessage(msg);
  563. var tooltipItem = layout.desktop.message.addTooltip(msg);
  564. tooltipItem.contentNode.addEvent("click", function(e){
  565. layout.desktop.message.hide();
  566. layout.desktop.openApplication(e, "Attendance", {"curNaviId":"12"});
  567. });
  568. messageItem.contentNode.addEvent("click", function(e){
  569. layout.desktop.message.addUnread(-1);
  570. layout.desktop.message.hide();
  571. layout.desktop.openApplication(e, "Attendance", {"curNaviId":"12"});
  572. });
  573. },
  574. receiveAttendanceAppealRejectMessage : function(data){
  575. var content = MWF.LP.desktop.messsage.attendanceAppealReject;
  576. content = content.replace(/{subject}/g, data.subject);
  577. var msg = {
  578. "subject": MWF.LP.desktop.messsage.attendanceAppealRejectMessage,
  579. "content": content
  580. };
  581. var messageItem = layout.desktop.message.addMessage(msg);
  582. var tooltipItem = layout.desktop.message.addTooltip(msg);
  583. tooltipItem.contentNode.addEvent("click", function(e){
  584. layout.desktop.message.hide();
  585. layout.desktop.openApplication(e, "Attendance", {"curNaviId":"12"});
  586. });
  587. messageItem.contentNode.addEvent("click", function(e){
  588. layout.desktop.message.addUnread(-1);
  589. layout.desktop.message.hide();
  590. layout.desktop.openApplication(e, "Attendance", {"curNaviId":"12"});
  591. });
  592. },
  593. receiveCalendarAlarmMessage: function(data){
  594. debugger;
  595. var content = MWF.LP.desktop.messsage.canlendarAlarm;
  596. content = content.replace(/{title}/g, data.title);
  597. var msg = {
  598. "subject": MWF.LP.desktop.messsage.canlendarAlarmMessage,
  599. "content": content
  600. };
  601. var messageItem = layout.desktop.message.addMessage(msg);
  602. var tooltipItem = layout.desktop.message.addTooltip(msg);
  603. tooltipItem.contentNode.addEvent("click", function(e){
  604. layout.desktop.message.hide();
  605. if ( layout.desktop.apps && layout.desktop.apps["Calendar"] ) {
  606. if( layout.desktop.apps["Calendar"].openEvent ){
  607. layout.desktop.apps["Calendar"].setCurrent();
  608. layout.desktop.apps["Calendar"].openEvent( data.body.id );
  609. }else if(layout.desktop.apps["Calendar"].options){
  610. layout.desktop.apps["Calendar"].options.eventId = data.body.id;
  611. layout.desktop.apps["Calendar"].setCurrent();
  612. }else{
  613. layout.desktop.openApplication(e, "Calendar", {"eventId": data.body.id });
  614. }
  615. }else{
  616. layout.desktop.openApplication(e, "Calendar", {"eventId": data.body.id });
  617. }
  618. });
  619. messageItem.contentNode.addEvent("click", function(e){
  620. layout.desktop.message.addUnread(-1);
  621. layout.desktop.message.hide();
  622. if ( layout.desktop.apps && layout.desktop.apps["Calendar"] ) {
  623. if( layout.desktop.apps["Calendar"].openEvent ){
  624. layout.desktop.apps["Calendar"].setCurrent();
  625. layout.desktop.apps["Calendar"].openEvent( data.body.id );
  626. }else if(layout.desktop.apps["Calendar"].options){
  627. layout.desktop.apps["Calendar"].options.eventId = data.body.id;
  628. layout.desktop.apps["Calendar"].setCurrent();
  629. }else{
  630. layout.desktop.openApplication(e, "Calendar", {"eventId": data.body.id });
  631. }
  632. }else{
  633. layout.desktop.openApplication(e, "Calendar", {"eventId": data.body.id });
  634. }
  635. });
  636. },
  637. receiveTeamWorkMessage: function(data){
  638. debugger;
  639. var task = data.body;
  640. //var content = MWF.LP.desktop.messsage.receiveTask+"《"+task.title+"》, "+MWF.LP.desktop.messsage.activity+": <font style='color: #ea621f'>"+(task.activityName || "")+"</font>";
  641. var content = data.title;
  642. //content += "<br/><font style='color: #333; font-weight: bold'>"+MWF.LP.desktop.messsage.teamwork.creatorPerson+": </font><font style='color: #ea621f'>"+task.creatorPerson+"</font>; "+
  643. // "<font style='color: #333; font-weight: bold'>"+MWF.LP.desktop.messsage.teamwork.executor+": </font><font style='color: #ea621f'>"+task.executor+"</font>";
  644. var msg = {
  645. "subject": task.name,
  646. "content": content
  647. };
  648. var messageItem = layout.desktop.message.addMessage(msg);
  649. var tooltipItem = layout.desktop.message.addTooltip(msg);
  650. tooltipItem.contentNode.addEvent("click", function(e){
  651. layout.desktop.message.hide();
  652. var options = {"taskId": task.id, "projectId": task.project};
  653. layout.desktop.openApplication(e, "TeamWork.Task", options);
  654. }.bind(this));
  655. messageItem.contentNode.addEvent("click", function(e){
  656. layout.desktop.message.addUnread(-1);
  657. layout.desktop.message.hide();
  658. var options = {"taskId": task.id, "projectId": task.project};
  659. layout.desktop.openApplication(e, "TeamWork.Task", options);
  660. }.bind(this));
  661. },
  662. });