UNPKG

lixin-web

Version:

vue and bootstrap

1,183 lines (1,147 loc) 39.4 kB
var WebQQ = function() { var qqHtml = '<div class="webqq-mini-window noselect default-cursor hidden-xs"><div class="head-portrait">'+ '</div>'+ '<div class="status">'+ '<i class="imonline"></i>我的在线'+ '</div>'+ '<div class="msg">'+ '<i>0</i>'+ '</div>'+ '</div>'+ '<div class="webqq-main-window">'+ '<div class="top-action-bar">'+ '<a class="btn btn-close" title="关闭"></a>'+ '</div>'+ '<div class="my-profile">'+ '<div class="head-portrait">'+ '</div>'+ '<div class="infos">'+ '<div class="name">潇洒哥~</div>'+ '<div class="sign">编辑个性签名</div>'+ '</div>'+ '</div>'+ '<div class="search-all">'+ '<input type="text" placeholder="搜索:联系人" />'+ '</div>'+ '<div class="chats">'+ '<div class="tabs">'+ '<a data-href="last" class="last">'+ '<span class="arrow"></span>'+ '</a>'+ '<a data-href="contacts" class="contacts">'+ '<span class="arrow"></span>'+ '</a>'+ '<a data-href="group" class="group">'+ '<span class="arrow"></span>'+ '</a>'+ '</div>'+ '<div class="panels">'+ '<div class="item-panel last">'+ '<div class="scroller" data-height="264">'+ '<div class="tips">暂时没有会话</div>'+ '</div>'+ '</div>'+ '<div class="item-panel contacts">'+ '<div class="scroller" data-height="264">'+ '<div class="tips">您没有任何好友</div>'+ '</div>'+ '</div>'+ '<div class="item-panel group">'+ '<div class="scroller" data-height="264">'+ '<div class="tips">您没有加入任何群组</div>'+ '</div>'+ '</div>'+ '</div>'+ '</div>'+ '</div>'+ '<div class="webqq-chat-window draggable">'+ '<div class="dragarea"></div>'+ '<div class="top-action-bar">'+ '<a class="btn btn-close" title="关闭"></a>'+ '</div>'+ '<div class="my-profile">'+ '<div class="head-portrait">'+ '</div>'+ '<div class="infos">'+ '<div class="name"></div>'+ '<div class="sign"></div>'+ '</div>'+ '</div>'+ '<div class="chats">'+ '<div class="tips">'+ '<div class="msg info">对方“离线或隐身”,可能无法立即回复。</div>'+ '<a class="close"></a>'+ '</div>'+ '<div class="msg-list">'+ '<div class="scroller" data-height="280">'+ '</div>'+ '</div>'+ '<div class="facelist">'+ '<div class="wrapper">'+ '<div class="scroller" data-height="192" data-always-visible="1"></div>'+ '</div>'+ '</div>'+ '<div class="toolbar">'+ '<a class="tools face" title="表情"></a>'+ '<a class="tools shakes" title="抖动"></a>'+ '<a class="tools picture" title="发送图片"></a>'+ '<a class="tools screenshot" title="截图"></a>'+ '<a class="tools clean" title="清除聊天记录"></a>'+ '<a class="tools history">聊天记录</a>'+ '</div>'+ '<div class="send-msg">'+ '<div class="textarea">'+ '<div class="scroller" data-height="72">'+ '<div class="content" contenteditable="true" _moz_resizing="false"></div>'+ '</div>'+ '</div>'+ '<div class="actions">'+ '<a class="btn close">关闭(C)</a>'+ '<a class="btn send">发送(S)</a>'+ '</div>'+ '</div>'+ '</div>'+ '<div class="sidebar"></div>'+ '</div>'+ '<div class="webqq-plan-window">'+ '<div class="header">'+ '<div class="header_box">'+ '<i><img src="/plugins/custom/webqq/img/header_text.png"></i>'+ '<span>高水准的彩票计划方案,尽在其中!</span>'+ '</div>'+ '<div class="top-action-bar">'+ '<a class="btn btn-close" title="关闭"></a>'+ '</div>'+ '<div class="header_select">'+ '<ul>'+ '<li class="li_padding">彩种选择</li>'+ '<li><select data-select="lotterySelect"><</select></li>'+ '<li class="li_padding left_50">玩法选择</li>'+ '<li>'+ '<select data-select="lotteryMethodSelect">'+ '<option value="">所有玩法</option>'+ '</select>'+ '</li>'+ '</ul>'+ '</div>'+ '</div>'+ '<div class="box_div">'+ '<div class="f_left">'+ '</div>'+ '<div class="f_right">'+ '</div>'+ '</div>'; $('body').append(qqHtml); var ProjectPath = '/plugins/custom/webqq/'; // 项目路径 var AvatarPath = '/img/avatar/'; // 头像路径 var MainWindow = $('.webqq-main-window'); var ChatWindow = $('.webqq-chat-window'); var MiniWindow = $('.webqq-mini-window'); var PlanWindow = $('.webqq-plan-window'); /** * 数据接口 */ var DataHandle = { scoket: { }, ajax: { last: { url: '' // 最近联系人接口 }, contacts: { url: '/api/chat/get-contact-group', // 联系人接口 interval: 60*1000 // 拉取数据间隔 }, //groupUrl: '', // 讨论群组接口 profile: { url: '', // 个人信息接口 interval: 60*1000 // 拉取数据间隔 }, sendMsg: { url: '/api/chat/send-message', // 发送消息接口 }, loadMsg: { url: '/api/chat/get-message', // 加载信息接口 interval: 10*1000 // 拉取数据间隔 }, setMsgRead:{ url: '/api/chat/deal-receive-message', // 发送消息接口 }, historyUrl: '', // 历史记录接口 post: function(url, data, success, error) { $.ajax({ type : 'post', url : url, data : data, timeout: 10000, dataType : 'json', success : function(data) { if(data.error){ if(data.error == 0) { if($.isFunction(success)) success(data); } if(data.error == 1 || data.error == 2) { if($.isFunction(error)) error(data); } }else{ if($.isFunction(success)) success(data); } }, error : function() { if($.isFunction(error)) error(); } }); } }, method: 'ajax' }; /** * 声音 */ var Sound = function() { var sounds = { audio: ProjectPath + 'res/sound/audio.wav', global: ProjectPath + 'res/sound/global.wav', msg: ProjectPath + 'res/sound/msg.wav', shake: ProjectPath + 'res/sound/shake.wav', system: ProjectPath + 'res/sound/system.wav', tweet: ProjectPath + 'res/sound/tweet.wav' }; // 播放声音 var play = function(name) { $('audio#WebQQ').remove(); var audio = $('<audio id="WebQQ" autoplay="autoplay">'); audio.attr('src', sounds[name]); $('body').append(audio); }; return { play: play }; }(); /** * 表情 */ var Face = function() { var faceList = ['惊讶', '撇嘴', '色', '发呆', '得意', '大哭', '害羞', '闭嘴', '睡觉', '伤心', '尴尬', '发怒', '调皮', '贱笑', '微笑', '难过', '酷', '大嘴眨眼', '抓狂', '呕吐', '偷笑', '可爱', '白眼', '傲慢', '饥饿', '好困', '惊恐', '流汗', '憨笑', '大兵', '奋斗', '咒骂', '疑问', '安静', '晕', '很抓狂', '衰', '骷髅', '欠打', '再见', '企鹅','发抖','爱情','欢乐','睁大眼','企鹅妹纸','猪头','猫头','马头','抱抱','金钱','灯泡','酒杯','蛋糕','闪电','炸弹','匕首','足球','音符','大便','咖啡','米饭','药','玫瑰','弯玫瑰','唇印','爱心','心碎了','桌椅','礼物','电话','时钟','短信','电视机','太阳','月亮','赞','不赞','握手','胜利','两只东西','美女','光头帅哥','小帅哥','帅哥企鹅','飞吻','尖叫','红酒','可乐','西瓜','下雨','晴天','雪人','五角星','又一美女','又一帅哥','逗逼汗','鄙视汗','挖鼻孔','鼓掌','糗大了','坏笑','左哼哼','右哼哼','哈欠','鄙视','委屈','要哭了','阴笑','亲亲','惊吓','可怜','菜刀','啤酒','篮球','乒乓球','动嘴唇','七星瓢虫','握拳']; var decode = function(str) { for (var i = 0; i < faceList.length; i++) { if('[' + faceList[i] + ']' == str) { return i; } } return -1; } var encode = function(idx) { if(idx >= 0 && idx <= faceList.length - 1) { return '[' + faceList[idx] + ']'; } return ''; } return { encode: encode, decode: decode }; }(); /** * 聊天 */ var Chat = function() { var ChatUser, Users = [], Logs = [],wState = 0; // 窗口特效 var initWindowEffect = function() { ChatWindow.find('.top-action-bar .btn-close').click(function() { wState = 0; ChatWindow.hide(); }); }; var getChatUser = function(){ return ChatUser; }; // 看看有没有该用户的聊天记录 var getLogsIndex = function(id) { for (var i = 0; i < Logs.length; i++) { if(Logs[i].id == id) return i; } return -1; }; // 增加聊天记录 var addLogs = function(id, logs) { var idx = getLogsIndex(id); if(idx == -1) { Logs.push({ id: id, logs: logs }); } else { for (var i = 0; i < logs.length; i++) { Logs[idx].logs.push(logs[i]); } } }; // 清除聊天记录 var cleanLogs = function(id) { var idx = getLogsIndex(id); if(idx != -1) { Logs[getLogsIndex(id)].logs = []; } }; // 加载聊天记录 var loadLogs = function(id, callback) { if(DataHandle.method == 'ajax') { var data = {status: 0, id: id}; DataHandle.ajax.post(DataHandle.ajax.loadMsg.url, data, function(data) { if($.isFunction(callback)) callback(data.data); }, function(data) { //alert('加载聊天记录失败!'); }); } }; // 判断是否存在该用户 var hasUser = function(id) { for (var i = 0; i < Users.length; i++) { if(Users[i].id == id) return true; } return false; }; // 设置个人信息 var setProfile = function(data) { var profile = ChatWindow.find('.my-profile'); var chats = ChatWindow.find('.chats'); if(data.online) { profile.removeClass('offline').addClass('online'); chats.find('.tips').hide().empty(); } else { profile.removeClass('online').addClass('offline'); chats.find('.tips').show().html('<div class="msg info">对方“离线或隐身”,可能无法立即回复。</div><a class="close"></a>'); chats.find('.tips .close').click(function() { $(this).parent().hide(); }); } profile.find('.head-portrait').html('<img src="' + AvatarPath + data.face + '.jpg">'); profile.find('.infos .name').html(data.nickname); profile.find('.infos .sign').html(data.sign); }; // 显示聊天记录 var lastDate, lastMins; var setMessage = function(data, reload) { var msglist = ChatWindow.find('.chats .msg-list .scroller'); var msgIds = []; if(reload) { msglist.empty(); msglist.append('<div class="clear"></div>'); } if(data && data.length > 0) { $.each(data, function(idx, thisMessage) { msgIds.push(thisMessage.id); var time = thisMessage.time; var thisDate = moment(time).format('YYYY-MM-DD'); var thisTime = moment(time).format('HH:mm:ss'); var thisMins = moment(time).format('HH:mm'); var isDate = false, isMins = false; if(!lastDate || lastDate != thisDate) { lastDate = thisDate; isDate = true; } if(!lastMins || lastMins != thisMins) { lastMins = thisMins; isMins = true; } if(isDate || (isDate && isMins)) { msglist.append('<div class="item-time">' + moment(time).format('YYYY-MM-DD HH:mm:ss') + '</div>'); } else if (isMins) { msglist.append('<div class="item-time">' + thisTime + '</div>'); } var content = thisMessage.message; var testFace = Face.decode(content); if(testFace != -1) { content = '<img src="' + ProjectPath + 'res/face/' + testFace + '.gif">'; } var message = '<div class="item-msg ' + (thisMessage.type == 0 ? 'friend' : 'user') + '">'+ '<div class="img">'+ '<img src="' + AvatarPath + (thisMessage.type == 0 ? ChatUser.face : Main.User.face) + '.jpg">'+ '</div>'+ '<div class="message">'+ '<div class="msg"><i class="nor"></i>' + content + '</div>'+ '</div>'+ '</div>'; msglist.append(message); }); msglist.slimScroll({ scrollTo: msglist[0].scrollHeight }); setMessageRead(msgIds.join(',')); } }; // 显示用户信息 var setUp = function(logs, data) { ChatUser = data; // 设置当前聊天的用户 setProfile(data); wState = 1; ChatWindow.show(); setMessage(logs, true); clearShakeUser(data.id); }; // 添加聊天对象 var add = function(data) { // 如果是同一个聊天对象,直接显示就可以了 if(!hasUser(data.id)) { Users.push(data); Logs.push({ id: data.id, logs: [] }); loadLogs(data.id, function(logs) { addLogs(data.id, logs); setUp(logs, data); }); } else { loadLogs(data.id, function(logs) { addLogs(data.id, logs); setUp(Logs[getLogsIndex(data.id)].logs, data); }); } }; // 发送消息 var sendMessage = function(message, callback) { if(DataHandle.method == 'ajax') { var data = {id: ChatUser.id, message: message}; DataHandle.ajax.post(DataHandle.ajax.sendMsg.url, data, function(data) { if($.isFunction(callback)) callback(); }, function(data) { alert('发送聊天信息失败!'); }); } }; //将消息设置成已读 var setMessageRead = function(messageIds){ if(DataHandle.method == 'ajax') { var data = {messageIds: messageIds}; DataHandle.ajax.post(DataHandle.ajax.setMsgRead.url, data, function(data) { }); } }; // 初始化表情 var initFace = function() { var facelist = ChatWindow.find('.facelist .scroller'); for (var i = 0; i <= 118; i++) { facelist.append('<a class="face" data-id="' + i + '"><img src="' + ProjectPath + 'res/face/' + i + '.gif"></a>'); } facelist.find('.face').click(function() { var id = $(this).attr('data-id'); var message = Face.encode(id); console.log('mess:'+message) sendMessage(message, function() { var time = moment().format('YYYY-MM-DD HH:mm:ss'); var msg = { 'type': 1, 'message': '<img class="face" src="' + ProjectPath + 'res/face/' + id + '.gif">', 'time': time }; setMessage([msg], false); addLogs(ChatUser.id, [msg]); }); ChatWindow.find('.facelist').toggle(); }); }; // 初始化工具栏 var initToolbar = function() { initFace(); var toolbar = ChatWindow.find('.toolbar'); toolbar.find('.face').click(function() { ChatWindow.find('.facelist').toggle(); }); toolbar.find('.shakes').click(function() { Sound.play('shake'); ChatWindow.addClass('shake shake-constant shake-hard'); setTimeout(function() { ChatWindow.removeClass('shake shake-constant shake-hard'); }, 500); }); toolbar.find('.clean').click(function() { cleanLogs(ChatUser.id); setMessage([], true); }); }; // 初始化按钮 var initSendMsg = function() { this.document.designMode = 'off'; var send = ChatWindow.find('.send-msg'); var content = send.find('.textarea .content'); // 发送 var doSend = function() { // 替换掉末尾的<br> var message = content.html(); var sendData = content.text().replace(/<br\s*\/?>$/g, '').replace(/\r\n\g\s/g, ''); if(sendData == ''){ content.empty(); // 清空输入框 return; } sendMessage(sendData, function() { var time = moment().format('YYYY-MM-DD HH:mm:ss'); var msg = { 'type': 1, 'message': message, 'time': time }; setMessage([msg], false); content.empty(); // 清空输入框 addLogs(ChatUser.id, [msg]); }); }; // 回车发送 content.keyup(function(e) { if(e.keyCode == 13) { doSend(); } }); // 发送 send.find('.actions .send').click(function() { doSend(); }); // 关闭 send.find('.actions .close').click(function() { wState = 0; ChatWindow.hide(); }); }; var setShakeUser = function(id) { var chats = MainWindow.find('.chats'); var contacts = chats.find('.panels .item-panel.contacts'); var targetUser = contacts.find('.item-contact[data-id="' + id + '"]'); var targetItem = targetUser.parents('.g-item'); targetUser.find('.img').addClass('shake shake-qq'); targetItem.find('.g-infos span').addClass('shake shake-qq-opacity'); } var clearShakeUser = function(id) { var chats = MainWindow.find('.chats'); var contacts = chats.find('.panels .item-panel.contacts'); var targetUser = contacts.find('.item-contact[data-id="' + id + '"]'); var targetItem = targetUser.parents('.g-item'); targetUser.find('.img').removeClass('shake shake-qq'); if(targetItem.find('.img.shake.shake-qq').length == 0) { targetItem.find('.g-infos span').removeClass('shake shake-qq-opacity'); } } // 接受消息 var receive = function(msg) { if(wState == 0) { setShakeUser(msg.fromId); MiniWindow.find('.head-portrait').addClass('shake shake-qq'); } if(wState == 1) { if(msg.fromId == ChatUser.id) { setMessage([msg], false); } else { setShakeUser(msg.fromId); } } addLogs(msg.fromUser, [msg]); }; // 初始化 var init = function() { initWindowEffect(); initToolbar(); initSendMsg(); }; return { init: init, add: add, receive:receive, clearShakeUser:clearShakeUser }; }(); var Plan = function(){ var planUrl = { listUrl:'/api/chat/get-lottery-plan-list', lotteryListUrl:'/api/game-lottery/static-info', methodListUrl:'/api/game-lottery/static-method', dealMessageUrl:'/api/chat/deal-chat-lottery-plan-message', getPlanDetailUrl:'/api/chat/get-chat-lottery-plan-detail' }; var initWindowEffect = function() { PlanWindow.find('.top-action-bar .btn-close').click(function() { PlanWindow.hide(); }); PlanWindow.find('[data-select="lotterySelect"]').change(function(){ var type = $(this).find("option:selected").attr('data-data'); var lotteryId = $(this).val(); getMethodList(type); getPlanList({lotteryId:lotteryId}); }); PlanWindow.find('[data-select="lotteryMethodSelect"]').change(function(){ var methodName = $(this).val(); var lotteryId = PlanWindow.find('[data-select="lotterySelect"]').val(); var planName = PlanWindow.find('.box_div .f_left .activation').attr('data-data'); var data = { lotteryId: lotteryId, planName: planName, methodName: methodName }; getPlanList(data); }); }; var initWindowPlanEvent = function(){ PlanWindow.find('.box_div .f_left li').click(function(){ var planName = $(this).attr('data-data'); var lotteryId = PlanWindow.find('[data-select="lotterySelect"]').val(); var methodName = PlanWindow.find('[data-select="lotteryMethodSelect"]').val(); var data = { lotteryId: lotteryId, planName: planName, methodName: methodName }; getPlanList(data); }); }; var show = function(data){ PlanWindow.show(); getLotteryList(data); getPlanList(data); dealMessage(-data.lotteryId); Chat.clearShakeUser(-data.lotteryId); }; var getLotteryList = function(param){ DataHandle.ajax.post(planUrl.lotteryListUrl, {}, function(data) { var lotterySelect = PlanWindow.find('[data-select="lotterySelect"]'); var selectLotteryType = 0; var optionHtml = ''; $.each(data,function(index,thislottery){ if(param.lotteryId == thislottery.id){ optionHtml += '<option value="' + thislottery.id + '" data-data="' + thislottery.type +'" selected="selected">' + thislottery.showName + '</option>'; selectLotteryType = thislottery.type; }else{ optionHtml += '<option value="' + thislottery.id + '" data-data="' + thislottery.type +'">' + thislottery.showName + '</option>'; } }); lotterySelect.html(optionHtml); getMethodList(selectLotteryType); }); }; var getMethodList = function(type){ DataHandle.ajax.post(planUrl.methodListUrl, {type:type}, function(data) { var lotteryMethodSelect = PlanWindow.find('[data-select="lotteryMethodSelect"]'); var optionHtml = '<option value="" >所有玩法</option>'; $.each(data,function(index,thislotteryMethod){ optionHtml += '<option value="' + thislotteryMethod.methodName +'">' + thislotteryMethod.group + '_' + thislotteryMethod.name + '</option>'; }); lotteryMethodSelect.html(optionHtml); }); }; var buildTbody = function(thisPlan) { var tr = $('<tr>'); tr.append('<td>' + thisPlan.planName + '</td>'); tr.append('<td class="w_12"></td>'); tr.append('<td>' + thisPlan.lotteryShowName + '</td>'); tr.append('<td class="w_12"></td>'); tr.append('<td>' + thisPlan.issue + '</td>'); tr.append('<td class="w_12"></td>'); tr.append('<td>' + thisPlan.methodNameShowName + '</td>'); tr.append('<td class="w_12"></td>'); tr.append('<td title="'+thisPlan.code+'"><span class="tab-wid">' + thisPlan.code + '</span></td>'); tr.append('<td class="w_30"></td>'); tr.append('<td colspan="2"><span class="Betting" data-command="bet">投注</span></td>'); tr.append('<td class="w_12"></td>'); tr.append('<td><span class="Betting" data-command="detail">详情</span></td>'); return tr; } var getPlanList = function(postData){ DataHandle.ajax.post(planUrl.listUrl, postData, function(data) { //左侧面板 var leftDiv = PlanWindow.find('.box_div .f_left'); var planNameList = data.data.planNameList; var liHtml = '<ul data-data=""><li>最新15个计划</li>'; $.each(planNameList,function(index, thisPlanName){ liHtml += '<li data-data="'+thisPlanName + '"><span>' + thisPlanName + '</span></li>'; }); liHtml += '</ul>'; leftDiv.html(liHtml); if(postData.planName){ leftDiv.find('[data-data="'+postData.planName+'"]').addClass('activation'); }else { leftDiv.find('li').eq(0).addClass('activation'); } //详细内容 var rightDiv = PlanWindow.find('.box_div .f_right'); var planList = data.data.planList; rightDiv.html('<table></table>'); $.each(planList,function(index, thisPlan){ var tr = buildTbody(thisPlan); rightDiv.find('table').append(tr); tr.find('[data-command="bet"]').click(function() { var lottery = thisPlan.lotteryShortName; var method = thisPlan.methodName; var content = thisPlan.code; var betStr = '[{"lottery":"'+lottery+'","issue":"","method":"'+method+'","content":"'+content +'","model":"yuan","multiple":1,"code":'+AppData.getLotteryAccount().code +',"compress":false}]'; betDialog(betStr,thisPlan); }); tr.find('[data-command="detail"]').click(function() { getPlanDetail(thisPlan.id); }); }); initWindowPlanEvent(); }); }; var betDialog = function(betStr,thisPlan){ var betObj = eval(betStr)[0]; betObj.point = 10; betObj.total=111; betObj.method=thisPlan.lotteryShowName+'-'+thisPlan.methodNameShowName; var betData = LotteryMain.bList(); betData.length=0; betData.push(eval(betStr)[0]); var $html = $('<div ><table data-injection="CaiPiaoJiHua"></table></div>') initGouCaiChe($html); $html.find('table').bootstrapTable('append', betObj); BootstrapDialog.show({ cssClass:'CaiPiaoJiHuaDialog', title: '<i class="icon lock"></i>确认投注信息', message: $html, height:500, buttons: [{ label: '立即投注', action: function(dialog) { $('[data-command="submit"]').click(); dialog.close(); } }, Will.cancelButton] }); } var getPlanDetail = function(id){ DataHandle.ajax.post(planUrl.getPlanDetailUrl, {id:id}, function(data) { //详细内容 var rightDiv = PlanWindow.find('.box_div .f_right'); var tableHtml = '<div class="detail"><table>'; tableHtml += '<tr><td class="text-right w_100">彩票种类:</td>'; tableHtml += '<td class="text-left">' + data.data.lotteryShowName + '</td></tr>'; tableHtml += '<tr><td class="text-right w_100">玩法:</td>'; tableHtml += '<td class="text-left" >' + data.data.methodNameShowName + '</td></tr>'; tableHtml += '<tr><td class="text-right w_100">计划名称:</td>'; tableHtml += '<td class="text-left">' + data.data.planName + '</td></tr>'; tableHtml += '<tr><td class="text-right w_100">期号:</td>'; tableHtml += '<td class="text-left">' + data.data.issue + '</td></tr>'; tableHtml += '<tr><td class="text-right w_100" style="height:150px;">内容:</td>'; tableHtml += '<td class="text-left">' + data.data.code + '</td></tr>'; tableHtml += '<tr class="text-center"><td colspan="2"><span class="btn" data-command="bet" style="width:100px;">投注</span><span class="btn" data-command="back" style="width:100px;">返回</span></td>'; tableHtml += '</tr>'; tableHtml += '</table></div>'; rightDiv.html(tableHtml); rightDiv.find('[data-command="bet"]').click(function() { //todo var lottery = data.data.lotteryShortName; var method = data.data.methodName; var content = data.data.code; var betStr = '[{"lottery":"'+lottery+'","issue":"","method":"'+method+'","content":"'+content +'","model":"yuan","multiple":1,"code":'+AppData.getLotteryAccount().code +',"compress":false}]'; // alert(betStr); betDialog(betStr,data.data); }); rightDiv.find('[data-command="back"]').click(function() { var planName = PlanWindow.find('.box_div .f_left .activation').attr('data-data'); var lotteryId = PlanWindow.find('[data-select="lotterySelect"]').val(); var methodName = PlanWindow.find('[data-select="lotteryMethodSelect"]').val(); var data = { lotteryId: lotteryId, planName: planName, methodName: methodName }; getPlanList(data); }); }); }; var dealMessage = function(fromId){ DataHandle.ajax.post(planUrl.dealMessageUrl, {fromId:fromId}, function(data) { }); }; var init = function() { initWindowEffect(); }; return { init: init, show: show }; }(); /** * 主要界面 */ var Main = function() { var User, Contacts = [], Groups = []; User = { "id": AppData.getMainAccount().id, "nickname": AppData.getMainAccount().nickname, "face": AppData.getInfo()? AppData.getInfo().avatar : "1", "sign": "", "online": true }; // 获取联系人数据 var getContacts = function(id) { for (var i = 0; i < Contacts.length; i++) { if(Contacts[i].id == id) { return Contacts[i]; } } return; }; // 窗口效果 var initWindowEffect = function() { MainWindow.find('.top-action-bar .btn-close').click(function() { MainWindow.hide(); MiniWindow.find('.head-portrait').removeClass('shake shake-qq'); Mini.clear(); Mini.show(); }); /*MainWindow.find('.top-action-bar .btn-min').click(function() { var target = MainWindow; var left = parseInt(target.css('left')), top = parseInt(target.css('top')); target.stop().animate({height: 30}, 100, 'easeOutCubic'); });*/ }; // 聊天选项卡特效 var initChatTabsEffect = function() { var chats = MainWindow.find('.chats'); var tabs = chats.find('.tabs > a'); var panels = chats.find('.panels'); tabs.each(function(idx, val) { $(this).click(function() { if(!$(this).hasClass('selected')) { tabs.removeClass('selected'); $(this).addClass('selected'); panels.stop().animate({marginLeft: -idx * 280}, 200, 'easeInOutQuint'); } }); }); tabs.eq(1).trigger('click'); }; // 联系人特效 var initContactsEffect = function() { var chats = MainWindow.find('.chats'); var contacts = chats.find('.panels .item-panel.contacts'); contacts.find('.g-item').each(function() { var gItem = $(this); gItem.find('.g-infos').click(function() { var animateTo = 0; if(gItem.find('.u-list').is(':hidden')) { animateTo = 90; } $(this).find('i.arrow').rotate({animateTo: animateTo, duration: 200}); gItem.find('.u-list').toggle(); }); }); contacts.find('.u-list .item-contact').click(function() { if(!$(this).hasClass('selected')) { contacts.find('.u-list .item-contact.selected').removeClass('selected'); $(this).addClass('selected'); } }); }; // 设置最近联系人 var setLastData = function(data) { var thisPanel = MainWindow.find('.chats .panels .item-panel.last .scroller'); if(data && data.length > 0) { thisPanel.empty(); $.each(data, function(idx, thisContact) { var innerHtml = '<a data-id="' + thisContact.id + '" class="item-chat">'+ '<div class="img shake shake-qq">'+ '<img src="' + AvatarPath + thisContact.face + '.jpg">'+ '</div>'+ '<div class="infos">'+ '<div class="name">' + thisContact.nickname + '</div>'+ '<div class="msg">' + thisContact.msg + '</div>'+ '</div>'+ '</a>'; thisPanel.append(innerHtml); }); // bind action thisPanel.find('.item-chat').dblclick(function() { Chat.add(getContacts($(this).attr('data-id'))); }); } else { thisPanel.html('<div class="tips">暂时没有会话</div>'); } }; // 设置联系人 var setContactsData = function(data) { var thisPanel = MainWindow.find('.chats .panels .item-panel.contacts .scroller'); if(data && data.length > 0) { thisPanel.empty(); thisPanel.append('<div class="clear h2"></div>'); $.each(data, function(idx, thisGroup) { var group = $( '<div class="g-item">'+ '<a class="g-infos">'+ '<i class="arrow"></i>'+ '<span>' + thisGroup.name + ' <span class="status">' + thisGroup.online + '/' + thisGroup.total + '</span></span>'+ '</a>'+ '<div class="u-list"></div>'+ '</div>' ); if(thisGroup.friends && thisGroup.friends.length > 0) { $.each(thisGroup.friends, function(jdx, thisContact) { Contacts.push(thisContact); // 保存到内存中 var contact = '<a data-id="' + thisContact.id + '" class="item-contact ' + (thisContact.online ? 'online' : 'offline') + '">'+ '<div class="img">'+ '<img src="' + AvatarPath + thisContact.face + '.jpg">'+ '</div>'+ '<div class="infos">'+ '<div class="name">' + thisContact.nickname + (thisContact.online ? '' : ' [离线]') + '</div>'+ '<div class="msg" title="' + thisContact.sign + '">' + thisContact.sign + '</div>'+ '</div>'+ '</a>'; group.find('.u-list').append(contact); }); } thisPanel.append(group); }); thisPanel.append('<div class="clear h2"></div>'); // bind action thisPanel.find('.u-list .item-contact').dblclick(function() { var contactId = $(this).attr('data-id'); if(contactId == 0){ var href = '/game-service.html?username=' + AppData.getMainAccount().username; $(this).attr('href', href).attr('target', new Date().getTime()); }else if(contactId < 0){ Plan.show({lotteryId: -contactId}); }else{ Chat.add(getContacts(contactId)); $('a.history').attr('data-id',$(this).attr('data-id')); } }); // 重新渲染特效 initContactsEffect(); } else { thisPanel.html('<div class="tips">您没有任何好友</div>'); } }; // 加载最近联系人数据 var loadLast = function() { if(DataHandle.method == 'ajax') { DataHandle.ajax.post(DataHandle.ajax.last.url, {}, function(data) { setLastData(data.data); }, function(data) { //alert('加载联系人失败,你可能未登录!'); }); } }; // 加载联系人数据 var loadContacts = function() { if(DataHandle.method == 'ajax') { DataHandle.ajax.post(DataHandle.ajax.contacts.url, {}, function(data) { setContactsData(data.data); }, function(data) { //alert('请求失败!'); }); } }; // 加载消息 var loadMessage = function(data) { if(DataHandle.method == 'ajax') { DataHandle.ajax.post(DataHandle.ajax.loadMsg.url, data, function(backData) { Mini.msg(backData.data.length); $.each(backData.data, function(jdx, thisMessage) { Chat.receive(thisMessage); }); }, function(data) { //alert('请求失败!'); }); } }; // 加载未读消息 var loadUnread = function(data) { loadMessage({status:0}); }; // 初始化 var init = function() { //MainWindow.hide(); if(!User.face){ User.face = "0"; } MainWindow.find('.my-profile .head-portrait').html('<img src="' + AvatarPath +User.face+'.jpg">'); MiniWindow.find('.head-portrait').html('<img src="' + AvatarPath +User.face+'.jpg">'); MainWindow.find('.infos .name').html(User.nickname); MainWindow.find('.infos .sign').html(''); initWindowEffect(); initChatTabsEffect(); /*loadLast(); if(DataHandle.method == 'ajax') { setInterval(loadLast, DataHandle.ajax.last.interval); };*/ loadContacts(); if(DataHandle.method == 'ajax') { setInterval(loadContacts, DataHandle.ajax.contacts.interval); setInterval(loadUnread, DataHandle.ajax.loadMsg.interval); }; }; return { init: init, loadLast: loadLast, loadContacts: loadContacts, loadUnread: loadUnread, User: User }; }(); /** * 最小化窗口 */ var Mini = function() { var count = 0, state = 1; var show = function() { state = 1; MiniWindow.show(); } var hide = function() { state = 0; MiniWindow.hide(); } var init = function() { MiniWindow.click(function() { hide(); clear(); MainWindow.show(); }); } var msg = function(amount) { count = amount; if(count == 0){ return; } if(state == 1) { MiniWindow.find('.msg > i').html(count); MiniWindow.find('.msg').show(); } } var clear = function() { count = 0; MiniWindow.find('.msg > i').html(count); MiniWindow.find('.msg').hide(); } return { init: init, show: show, hide: hide, msg: msg, clear: clear }; }(); /** * 滚动 */ var initScroll = function() { $('.scroller').each(function () { if ($(this).attr("data-initialized")) { return; // exit } var height; if ($(this).attr("data-height")) { height = $(this).attr("data-height"); } else { height = $(this).css('height'); } $(this).slimScroll({ allowPageScroll: false, // allow page scroll when the element scroll is ended size: '6px', borderRadius: '2px', railBorderRadius: '2px', color: ($(this).attr("data-handle-color") ? $(this).attr("data-handle-color") : '#bbb'), wrapperClass: ($(this).attr("data-wrapper-class") ? $(this).attr("data-wrapper-class") : 'slimScrollDiv'), railColor: ($(this).attr("data-rail-color") ? $(this).attr("data-rail-color") : '#eaeaea'), position: 'right', height: height, alwaysVisible: ($(this).attr("data-always-visible") == "1" ? true : false), railVisible: ($(this).attr("data-rail-visible") == "1" ? true : false), disableFadeOut: true }); $(this).attr("data-initialized", "1"); }); }; /** * 拖动 */ var initDrag = function() { $('.draggable').each(function() { var target = $(this); target.find('.dragarea').mousedown(function(a) { var left = parseInt(target.css('left')), top = parseInt(target.css('top')); var tWidth = target.width(), tHeight = target.height(); var mLeft = parseInt(target.css('margin-left')), mTop = parseInt(target.css('margin-top')); var wWidth = $(window).width(), wHeight = $(window).height(); var aX = a.pageX, aY = a.pageY; $(document).bind('mousemove', function(b) { var bX = b.pageX, bY = b.pageY; var newLeft = left + bX - aX, newTop = top + bY - aY; if(newLeft + mLeft <= 0) newLeft = -mLeft; if(newTop + mTop <= 0) newTop = -mTop; if(newLeft + mLeft >= wWidth - tWidth) newLeft = wWidth - tWidth - mLeft; if(newTop + mTop >= wHeight - tHeight) newTop = wHeight - tHeight - mTop; target.css({left: newLeft, top: newTop}); }).bind('mouseup', function(b) { $(document).unbind('mousemove').unbind('mouseup'); }); }); }); }; //搜索联系人(下级) var Contactssearch = function(){ var inputpeoplename = $('.webqq-main-window').find('.search-all input').val(); var peoplename = $('.webqq-main-window .g-item').eq(2).find('.u-list a .name'); var findname = 0; for(var i=0;i<peoplename.length;i++){ var name = peoplename.eq(i).html().split(' ')[0]; if(inputpeoplename == name){ peoplename.eq(i).dblclick(); findname = 1; return; } } if(findname !== 1){ Will.warning('未找到该联系人'); } } $('.webqq-main-window').keydown(function(e) { if(e.keyCode == 13) { Contactssearch() } }) //聊天记录 var historymessage = function(id,sDate,eDate){ Will.ajax({},'/api/chat/get-history-message?fromId='+id+'&sDate='+sDate+'&eDate='+eDate+'',function(data){ for(i=data.length-1;i>=0;i--){ var message = data[i].message; var time = moment(data[i].time).format("YYYY-MM-DD"); var $html = $('<div class="history"><div class="item-time">'+time+'</div><div class="item-msg user">\ <div class="img"><img src=""></div>\ <div class="message">\ <div class="msg"><i class="nor"></i>'+message+'<div>\ </div>\ </div></div>'); if(data[i].fromId==id){ $html.find('.item-msg').removeClass('user'); $html.find('.item-msg').addClass('friend'); $html.find('.img img').attr('src',$('.webqq-chat-window .my-profile .head-portrait img').attr('src')); }else{ $html.find('.img img').attr('src',$('.webqq-main-window .my-profile .head-portrait img').attr('src')); } $('.msg-list .scroller').prepend($html) } }) } $('.webqq-chat-window .chats .history').click(function(){ var eDate = moment().add(1, 'days').format("YYYY-MM-DD"); var sDate = moment().subtract(7, 'days').format("YYYY-MM-DD"); $('.msg-list .scroller .history').remove(); var id = $('a.history').attr('data-id'); historymessage(id,sDate,eDate); }) /** * 初始化方法 */ var init = function() { Main.init(); Chat.init(); Mini.init(); Plan.init(); initScroll(); initDrag(); }; return { init: init }; }();