WebSocket.js 32 KB

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