WebSocket.js 27 KB

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