WebSocket.js 27 KB

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