WebSocket.js 26 KB

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