ZuRun

ZuRun VIP2

110飞吻 2017-1-7 加入 来自安徽 合肥

(这个人懒得留下签名)

ZuRun 最近的回答

  • 2017-9-10 22:12:10laydate 第一次点击input不弹出中回答:

    @Soulmate 多谢,疏忽了
  • 2017-9-4 10:52:52ajax加载的页面中 table如何自动化渲染?中回答:

    @Dick 不知道是不是因为页面是ajax获取然后appen到div中导致js先执行了,后来改成方法渲染了
  • 2017-9-4 10:51:18ajax加载的页面中 table如何自动化渲染?中回答:

    @00000 这样是方法级渲染,我这样也是可以的,但是自动化渲染就是不行,和官网的例子一个字不差的拷贝的
  • 2017-8-22 1:12:24LayIm会同步更新LayUi 2.0吗?中回答:

    过几天layim会更新的,现在的layim还是1.0.9的
  • 2017-8-18 16:23:21LayIM 3.0 有bug的话在此统一反馈中回答:

    1、主窗体和多个聊天窗口时左侧能显示未读数量
    2、多个用户发送消息时,下方提示窗口不是显示最后一条消息的用户
    3、最好能提供消息已读的回执
    4、聊天窗口能支持粘贴图片
    5、登录的时候,推送多条未读消息的话,会出现提示声音重复的问题,最好能半秒中之内多条消息的话,只响一次提示音

    最近发现的问题和感觉不方便的地方[嘻嘻]
  • 2017-8-17 22:48:18layim,大家快进来帮下忙中回答:

    js代码可以参考下,目前功能还不全
    enableLayIM()

    /**启用layim*/
    function enableLayIM(){
    var chat_type="friend"//最顶层聊天窗口的type和id
    var chat_id="0"//聊天对象,群id或者用户id

    layui.use('layim', function(layim){

    layim.config({
    init: {
    url: path+'/layim_init.action' //接口地址(返回的数据格式见下文)
    ,type: 'get' //默认get,一般可不填
    ,data: {} //额外参数
    }
    ,chatLog: layui.cache.dir + 'css/modules/layim/html/chatLog.html'//查看更多聊天记录
    // ,find: layui.cache.dir + 'css/modules/layim/html/find.html' //发现页面地址,若不开启,剔除该项即可
    ,members: {url:path+'/layim_getGroupMembers.action',data:{}}
    ,copyright:true
    ,notice:true//是否开启桌面消息提醒,即在浏览器之外的提醒
    ,min:true
    // ,isfriend:false
    })

    /**监听发送消息*/
    layim.on('sendMessage', function(res){
    var mine = res.mine; //包含我发送的消息及我的信息
    var to = res.to; //对方的信息
    // console.log(res)
    socket.send(JSON.stringify({code:to.type=='group'?102:101,data:
    {
    id:to.id
    ,content:mine.content
    ,username:mine.username
    ,avatar:mine.avatar
    ,name:to.name
    }
    }));
    })
    /**监听聊天窗口的切换*/
    layim.on('chatChange', function(obj){
    // console.log(obj);
    var id=obj.data.id
    var type=obj.data.type
    var cid=obj.data.cid
    var name=obj.data.name
    //记录置顶聊天窗口
    chat_type=type;
    chat_id=id;
    //标记已读
    updateReadStatus(type,id,cid,name)
    });
    /**监听修改签名*/
    layim.on('sign', function(value){
    socket.send(JSON.stringify({code:301,sign:value}));
    });


    // var socket = new WebSocket('ws://localhost:8080/layimWebSocket');
    var socket = new WebSocket('wss://xxxxxxx/layimWebSocket');

    //连接成功时触发
    socket.onopen = function(){
    // socket.send('XXX连接成功');
    console.log('websocket连接成功')
    setInterval(function () {
    keepalive()
    }, 20000);

    };

    //监听收到的消息
    socket.onmessage = function(res){
    //res为接受到的值,如 {"emit": "messageName", "data": {}}
    //emit即为发出的事件名,用于区分不同的消息
    // console.log(res)
    var json = JSON.parse(res.data);
    var errcode=json.errcode;
    if(errcode!=0){
    layer.msg(json.errmsg)
    return;
    }
    var data=json.data;//实际数据
    var code=json.code;//用于区分不同的消息
    switch (code){
    case 101:{
    //普通消息
    layim.getMessage(data)
    //判断是否正在聊天,是则标记已读
    is_chat(data)
    break;
    }
    case 102:{
    //接受群消息
    var id=data.id;
    layim.getMessage(data)
    //判断是否正在聊天,是则标记已读
    is_chat(data)
    myImStorage.updateGroupLastMsgId(id,data.cid)
    break;
    }

    }

    };

    /**发送心跳包*/
    function keepalive(){
    socket.send(JSON.stringify({code:100}));
    }

    /**判断当前接受的消息是不是整在聊天,如果正在聊天,则实时数据记录为已读*/
    function is_chat(data){
    //判断是否有聊天窗口
    var chat_display=$('.layui-layim-chat').css('display');
    //窗口最顶层
    if(chat_display=='block'){
    //代表当前消息和窗口一直,需要标记为已读
    if(data.type==chat_type&&data.id==chat_id){
    updateReadStatus(data.type,data.id,data.cid,data.username)
    }
    }
    }
    /**设置已读状态*/
    function updateReadStatus(type,id,cid,name){
    //id:聊天对象 cid:消息id name:聊天对象名、群名
    var json={type:type,id:id,cid:cid,name:name}
    if(type=="group"){
    json.cid=myImStorage.getGroupLastMsgId(id)
    }
    if(json.id==0){return}
    var jsonr={code:121,data:json}
    socket.send(JSON.stringify(jsonr))
    }



    /**记录layim的缓存信息 layim.mine*/
    var myImStorage=new function() {
    var key = 'layim.mine';
    var storage = window.localStorage;
    if (!window.localStorage) {
    alert("浏览器不支持localstorage");
    return false;
    }

    //获取我的im缓存
    function get() {
    var val = storage.getItem(key)
    if (val == undefined) {
    var json = {groups: [], friends: []}
    set(json)
    return json;
    }
    return JSON.parse(val)
    }

    //设置我的im缓存
    function set(json) {
    storage.setItem(key, JSON.stringify(json))
    }


    //更新群消息的最后记录
    function updateGroupLastMsgId(groupid, msgid) {
    var json = get()
    var groups = json.groups
    var hasGroup = false;//是否包含此group
    $.each(json.groups, function (index, group) {
    if (group.groupid == groupid) {
    hasGroup = true;
    group.lastMsgId = msgid;
    }
    })
    if (!hasGroup) {
    var group = {groupid: groupid, lastMsgId: msgid}
    groups.push(group)
    }
    set(json);
    }
    //获取群消息的最后记录
    function getGroupLastMsgId(groupid){
    var json = get()
    var groups = json.groups
    var msgid=0;
    $.each(json.groups, function (index, group) {
    if (group.groupid == groupid) {
    msgid=group.lastMsgId;
    return false
    }
    })
    //如果为0,则表示本地没有记录
    return msgid;
    }


    return {
    updateGroupLastMsgId: updateGroupLastMsgId
    ,getGroupLastMsgId:getGroupLastMsgId
    };

    }


    });


    }
  • 2017-8-17 22:46:20layim,大家快进来帮下忙中回答:

    今天刚解决判断消息是否读取,说下思路:

    1、根据聊天窗口的切换事件,有切换就讲此窗口的最后一条记录发送给服务器,小此消息id的全部已读
    2、当窗口是打开的时候:
    $('.layui-layim-chat').css('display')来获取聊天窗口是否正在显示状态,为block则说明是聊天状态
    此时,每次接受的消息,都要判断是否是当前聊天窗口,如果是,发送id到服务器,标记已读。

    我测试了几次,目前没发现问题
  • 2017-8-16 16:12:32java程序猿 实例秀一波我做的layim中回答:

    请问web端直接用的websocket吗,有使用socket.io吗
  • 2017-5-29 15:17:38layedit怎么清空?中回答:

    @ityangzi 没找到其他方法,我是把index值放在data-index中了,获取也是比较方便的
  • 2017-5-29 0:14:30layedit怎么清空?中回答:

    和给layedit赋值一样操作的
    1、先给原始标签赋值为空:$('#'+id).val('')
    2、重新初始化:layedit.build(id);
  • 2017-5-28 12:34:34layedit上传图片没有反应中回答:

    终于找到原因了,因为我在这个editor外面有一个form标签,我加了onsubmit="return false;",所以提交都被返回false了,所以图片都提交不了,好坑啊
  • 2017-5-24 0:8:37用layui做管理后台的请进中回答:

    我碰到过这个问题,应该是两个radio的name一样,form.render后,就有一个失效了
  • 2017-5-24 0:6:38用layui做管理后台的请进中回答:

    在radio外面要加一个layui-form的class
  • 2017-3-31 21:56:32强烈建议闲心升级layer兼容bootstrap这种pc和移动端的框架中回答:

    layer弹窗自己改下适应手机吧,发给我的给你参考下:

    .layui-layer {
    max-width: 100%;
    max-height: 100%;
    }


    .layui-layer-page .layui-layer-content {
    height: calc(100% - 43px) !important;
    }
  • 2017-2-7 16:52:20laypage怎么调用事件?中回答:

    @Layui_初学者 我的分页是用在表格分页的,我插入数据比较多的时候,页数会增加,那我应该怎样刷新laypage的页数呢