diff --git a/thrones/src/main/webapp/static/lib/forum/jForum.js b/thrones/src/main/webapp/static/lib/forum/jForum.js index 6b085e73cfa083845a1e721d2236d556b4a942fb..a3029b9d1e363740a45d4efbef844a34eb335ace 100644 --- a/thrones/src/main/webapp/static/lib/forum/jForum.js +++ b/thrones/src/main/webapp/static/lib/forum/jForum.js @@ -137,6 +137,8 @@ var jForum = (function ($) { }).trigger('initEvent'); //member jForum.member.init(); + jForum.threads.init(); + jForum.message.init(); //ajax $('[data-result="loader.jsonp"]').on('loadDataEvent', function (e) { //topic/move var _b = $(e.target); diff --git a/thrones/src/main/webapp/static/lib/forum/jForum.member.js b/thrones/src/main/webapp/static/lib/forum/jForum.member.js index abdf3f43be95b80e9af377da99f45e71a79f875a..b054ee07e43cb0b0f3ab0025413c40709f69b03d 100644 --- a/thrones/src/main/webapp/static/lib/forum/jForum.member.js +++ b/thrones/src/main/webapp/static/lib/forum/jForum.member.js @@ -48,6 +48,8 @@ jForum.member = (function ($) { setMemberVerify(data.verify); //[HMP]生成会员面板 jForum.template.drawMemberPanel(data, _mp); //怎么显示由drawMemberPanel负责 + //开始消息通知 + $('#notification').bind('initDataEvent', noticeHandler).trigger('initDataEvent'); } } }); @@ -91,6 +93,8 @@ jForum.member = (function ($) { jForum.template.drawMemberInfo(responseMsg, $('#right_member_info')); // 重新设置客户端缓存的标记 setMemberVerify(responseMsg.verify); + //开始消息通知 + $('#notification').bind('initDataEvent', noticeHandler).trigger('initDataEvent'); } return; }; @@ -117,5 +121,35 @@ jForum.member = (function ($) { var verify = Cookies.get('msa') || -1; return verify; }; + var noticeHandler = function(e){ + try{ + //$('#header_member_panel').letterSocket({"callFunctionExp": 'updateUnReadMessages', 'remote': $('#topmenu').attr('data-socket-uri')}, 30000); + var s = new jForum.socket($('#topmenu').attr('data-socket-uri'), $('#header_member_panel'), { + sendDataFun : function(jqEle){ + var data = {}; + data.id = jqEle.attr('data-ux'); + data.cmd = 1; + data.ux = jqEle.attr('data-ux'); + return data; + }, + callbackFun : updateUnReadMessages + }); + s.init('letterNotice'); + s.start(30000); + }catch(e){ console.log('letter socket file lost');} + }; + function updateUnReadMessages(sockplaindata){ + var json = $.parseJSON(sockplaindata); + if(jQuery.isEmptyObject(json)){ + return; + } + if(parseInt(json.result)>0){ + $('#notification').removeClass('d-none'); + $('#notification').html(json.result); + }else{ + $('#notification').addClass('d-none'); + } + $('#header_member_panel').attr('data-ux', getUnixStamp()); + }; return { init: init, get:getCurrentActiveMemberInfo }; })(jQuery); diff --git a/thrones/src/main/webapp/static/lib/forum/jForum.message.js b/thrones/src/main/webapp/static/lib/forum/jForum.message.js index 087229f28bd5104840bd16de40f99ca211c6a232..a0890010f7846c4773dfeeaeb7be72c3bfdab319 100644 --- a/thrones/src/main/webapp/static/lib/forum/jForum.message.js +++ b/thrones/src/main/webapp/static/lib/forum/jForum.message.js @@ -1,5 +1,7 @@ jForum.message = (function($){ function init(){ + var template = jForum.template; + var util = jForum.utils; // 收件箱内容页中的加载更多 $('.letter-more-action').on('click', function(){ var pbx = $(this).parents('.letter-item-collect'); @@ -10,21 +12,23 @@ jForum.message = (function($){ // var self = $(this); self.addClass('disabled').html('正在玩命加载'); - $.getJSON(rawdata.uri+'&p='+rawdata.page, function( data ){ - //self是否显示 - if(jQuery.isEmptyObject(data)){ - return; - } - //遍历data.result - $.each(data.result, function(index, item){ - jForum.template.drawLetterHistoryMessage(item, rawdata.ele); - }); - pbx.attr('data-page', rawdata.page).scrollTop(); - var letter = $.parseJSON(data.letter); - if(letter.more){ - self.removeClass('disabled').html('更多历史消息'); - }else{ - self.hide(); + jForum.xhr.jsonGet(rawdata.uri+'&p='+rawdata.page, { + jsonCallback : function(data){ + //self是否显示 + if(jQuery.isEmptyObject(data)){ + return; + } + //遍历data.result + $.each(data.result, function(index, item){ + template.drawLetterHistoryMessage(item, rawdata.ele); + }); + pbx.attr('data-page', rawdata.page).scrollTop(); + var letter = $.parseJSON(data.letter); + if(letter.more){ + self.removeClass('disabled').html('更多历史消息'); + }else{ + self.hide(); + } } }); }); @@ -32,29 +36,28 @@ jForum.message = (function($){ $('.send-message-action').on('click', function(e){ var self = $(this); var callFun = self.attr('data-function') || 'drawMessageItem'; - var requestParam = parseQueryJson(self.attr('data-query')); + var requestParam = util.parseQueryJson(self.attr('data-query')); requestParam.content = self.parents('form').find('.form-control').val(); - if(isBlank(requestParam.content)){ + if(util.isBlank(requestParam.content)){ self.parents('form').find('.form-control').focus(); return false; } self.addClass('disabled'); - $.ajax({ - url: self.attr('data-handler'), - dataType: 'json', - method: 'POST', - data: requestParam - }).done(function (response) { - window[callFun].call(this, response, self); - }).fail(function(jqXHR, textStatus, errorThrown){ - if(textStatus === 'error'){ - var err = $.parseJSON(jqXHR.responseText); - if(err.level && err.level ==='err'){ - return errorMessage(err.message); + jForum.xhr.jsonPost(self.attr('data-handler'), { + data : requestParam, + jsonCallback : function(response){ + template[callFun].call(this, response, self); + }, + failCallback : function(jqXHR, textStatus, errorThrown){ + if(textStatus === 'error'){ + var err = $.parseJSON(jqXHR.responseText); + if(err.level && err.level ==='err'){ + return util.errorMessage(err.message); + } } + util.errorMessage('当前操作因错误而异外中止'); } - errorMessage('当前操作因错误而异外中止'); }); return false; }); @@ -62,24 +65,27 @@ jForum.message = (function($){ $('body').on('click', '#suggest-btn', function(e){ var self = $('#suggest-uid'); var p = self.parents('.form-group'); - if(isBlank(self.val())){ + if(util.isBlank(self.val())){ self.attr('placeholder', '输入收件人的UID').focus(); return; } self.attr("disabled","disabled"); - $.getJSON(self.attr('data-handler'), 'value='+self.val(), function( data ){ - if(data.level ==='acc'){ - uidDetectionHandler(data.message, p); - }else{ - $('input[name=snames]').val(''); - self.addClass('is-invalid').removeAttr("disabled").focus(); + jForum.xhr.jsonGet(self.attr('data-handler'), { + data : {'value' : self.val()}, + jsonCallback : function(data){ + if(data.level ==='acc'){ + uidDetectionHandler(data.message, p); + }else{ + $('input[name=snames]').val(''); + self.addClass('is-invalid').removeAttr("disabled").focus(); + } } }); }); //会员主页的发送消息|话题会员弹出层的消息[NW] $('body').on('click', '.message-transmit', function(e){ //在线吗 - var cam = getCurrentActiveMemberInfo(); + var cam = jForum.member.get(); if(jQuery.isEmptyObject(cam) || parseInt(cam.id) < 1){ return errorMessage('暂不支持游客发送消息'); } @@ -95,28 +101,24 @@ jForum.message = (function($){ btnClass: 'btn-blue', action: function () { var content = this.$content.find('textarea[name=content]').val(); - if(isBlank(content)){ + if(util.isBlank(content)){ this.$content.find('textarea[name=content]').focus(); return false; } var requestParam={}; - requestParam.content=content; - - $.ajax({ - url: requestURI, - dataType: 'json', - method: 'POST', - data: requestParam - }).done(function (response) { - transmitMessageResult(response); - }).fail(function(jqXHR, textStatus, errorThrown){ - if(textStatus === 'error'){ - var err = $.parseJSON(jqXHR.responseText); - if(err.level && err.level ==='err'){ - return errorMessage(err.message); + requestParam.content=content; + jForum.xhr.jsonPost(requestURI, { + data : requestParam, + jsonCallback : transmitMessageResult, + failCallback : function(jqXHR, textStatus, errorThrown){ + if(textStatus === 'error'){ + var err = $.parseJSON(jqXHR.responseText); + if(err.level && err.level ==='err'){ + return util.errorMessage(err.message); + } } + util.errorMessage('当前操作因错误而异外中止'); } - errorMessage('当前操作因错误而异外中止'); }); } } @@ -137,5 +139,17 @@ jForum.message = (function($){ jqEle.find('input[name=uid]').removeAttr("disabled").removeClass('is-invalid'); $('#suggest-uid').parents('form').find('input[name=snames]').val(nickname); }; + //私信的响应 + function transmitMessageResult(json){ + if(jQuery.isEmptyObject(json)){ + jForum.utils.errorMessage("操作因异常而中止"); + return; + } + if(parseInt(json.id)>0){ + jForum.utils.tipDialog({"message":"发送成功", "level":"acc", "refresh" : false}); + return; + } + jForum.utils.errorMessage("消息发送失败"); + }; return { init: init }; })(jQuery); \ No newline at end of file diff --git a/thrones/src/main/webapp/static/lib/forum/jForum.pagination.js b/thrones/src/main/webapp/static/lib/forum/jForum.pagination.js index 8d54d0f921666671bbe68b83c03aa9964547dc1e..ed822b2a91b9b2057f29f10d32d1297eec4cd15f 100644 --- a/thrones/src/main/webapp/static/lib/forum/jForum.pagination.js +++ b/thrones/src/main/webapp/static/lib/forum/jForum.pagination.js @@ -76,7 +76,7 @@ jForum.pagination = (function ($) { _curIns.config.ajaxComplete(xhr, textStatus); } //记入历史 - //recordHistory(page, pageSize); + recordHistory(page, postData.pageSize); console.log('[pagination] ajax is complete'); }; $.ajax(formatAjaxParams); diff --git a/thrones/src/main/webapp/static/lib/forum/jForum.socket.js b/thrones/src/main/webapp/static/lib/forum/jForum.socket.js index 19dcf1a6c6a3761193f14e38723480ebbbe8e960..27c99fba056a3efa07e5b92cfd6b90ffc4a12a1c 100644 --- a/thrones/src/main/webapp/static/lib/forum/jForum.socket.js +++ b/thrones/src/main/webapp/static/lib/forum/jForum.socket.js @@ -1,3 +1,44 @@ -jForum.socket = (function () { - -})(); \ No newline at end of file +jForum.socket = (function ($) { + class ForumSocket { + constructor(reqUri, jqEle, option) { + this.sock = new SockJS(reqUri); + this.requestDataFun = option.sendDataFun || null; + this.messageCallback = option.callbackFun || null; + this.jqEle = jqEle; + } + init(name){ + var t = name || '20201005'; + this.sock.onopen = function() { + console.log(t+' Socket opened!'); + }; + + this.sock.onmessage = function(e) { + if ($.isFunction(this.messageCallback)){ + this.messageCallback(e.data); + } + }; + + this.sock.onclose = function() { + console.log(t+' Socket close'); + }; + this.sock.onerror = function(e) { + console.log(t+' Socket has Error: '+e); + }; + } + _send(){ + if (!$.isFunction(this.requestDataFun)){ + return; + } + var jsonData = this.requestDataFun(this.jqEle); + var t = JSON.stringify(jsonData); + this.sock.send(t); //消息数量, + } + start(loopUnit){ + var _curIns = this; + setInterval(function(){ + _curIns._send(); + }, loopUnit); //毫秒 + } + } + return ForumSocket; +})(jQuery); \ No newline at end of file diff --git a/thrones/src/main/webapp/static/lib/forum/jForum.template.js b/thrones/src/main/webapp/static/lib/forum/jForum.template.js index 089d08eecc5f72062f02e541c687c04a8d86d10a..65ac63f283105db309a6da286a67c6dfa579b471 100644 --- a/thrones/src/main/webapp/static/lib/forum/jForum.template.js +++ b/thrones/src/main/webapp/static/lib/forum/jForum.template.js @@ -774,6 +774,53 @@ jForum.template = (function ($) { }); jqEle.popover('show'); }; + //快速回复的异步回调函数 + tmp.quickReplyFillPosts = function(json){ + var T='' + +'
' + +' {authorNames} @u{author} » ' + +' {date}' + +'
' + +' ' + +' ' + +'