您的当前位置:首页正文

整理一下1.2迭代中留言处的逻辑

来源:花图问答

通过三次的迭代,留言功能慢慢进化,从最开始的只能管理员留言到发标者可以回复,再到两种角色都可以删除自己的留言或者回复,随之功能逻辑也慢慢复杂起来。前两次迭代比较简单,第三次说需求的时候预想可能会有些麻烦,果不其然还是有些复杂的(因为我的逻辑思维比较慢)。然而,留言的存在时间并不长,在1.3的迭代中,就被砍掉了,还真是来也匆匆,去也匆匆,所以更要留下它的足迹了。

功能点有:

如果我是工程商:
1、我给客户留言了,并且未被标记已删除留言,那么我可以删除我的留言

如果我是发布招标者:
2、我可以回复工程商给我留的言,并且我可以删除我自己的回复(如果我已经回复过,则不能再回复第二次)(如果接口里返回的数据中)

Paste_Image.png

删除和回复的功能比较好做,对于我来说有难点的地方是逻辑判断该在什么时候下显示回复和删除按钮

实现:

1、工程商给客户留言了之后,是否显示删除按钮
//判断留言后面是否应该显示删除按钮
 = (that.userId ==  &&  == 0) ? "show" : "hide";
2、发标者给工程商回复时,后面是否显示删除按钮
//判断回复后面是否应该显示删除按钮
if((that.userId ==  &&  == 0)) {
      = "show";
}else {
      = "hide";
}

原理同1

3、当工程商给发标者留言后,在发标者查看标书时,显示回复按钮
var can_reply = false;

    // 先给true,如果后续遍历“回复”时发现已经有我回复过,那就再改为false
    can_reply = true;

    for(var 
        var child = 

        // 如果是我的标,且我已回复过,那就不能再回复了
        if(is_my_demand && that.userId == 
            can_reply = false;
        }

        if(!is_my_demand){
            can_reply = false;
        }
    }
}else{
    // 当前登录用户就是发标的人,那就可以回复
    if(is_my_demand){
        can_reply = true;
    } else {
        can_reply = false;
    }
}

 = (can_reply ? "show" : "hide");

开始我觉得回复按钮实现起来应该比删除容易,没想到恰恰回复这里比较不好处理。

4、回复时的几种角色判断
//判断回复时的四种角色,authorType 为 1:客户;100:工程商;150:客户代表;200:万屏汇官方(平台代表)
switch(parseInt(child.authorType))
{
case 1:
    child.authorName = '客户回复';
    break;
case 100:
    child.authorName = '客户回复';
    break;
case 150:
    child.authorName = '客户代表回复';
    break;
case 200:
    child.authorName = '万屏汇官方回复';
    break;
}
5、是否显示回复或删除的完整代码
CON.prototype.rebuildJson = function(json){
    var that=this;

    // 这个标是我发布的吗?(发标人和当前登录用户id相同,则是我的)
    var is_my_demand = (this.userId == this.demanderId);

    for(var 

        //给名片传值-user_id
         = 

        //判断留言后面是否应该显示删除按钮
         = (that.userId ==  &&  == 0) ? "show" : "hide";

        //设置被删除后的占位文字的颜色
         =  == 1 ? "aDel" : "";
       

        var can_reply = false;
        
            // 先给true,如果后续遍历“回复”时发现已经有我回复过,那就再改为false
            can_reply = true;

            for(var 
                var child = 

                // 如果是我的标,且我已回复过,那就不能再回复了
                if(is_my_demand && that.userId == 
                    can_reply = false;
                }

                if(!is_my_demand){
                    can_reply = false;
                }

                //判断回复后面是否应该显示删除按钮
                if((that.userId ==  &&  == 0)) {
                     = "show";
                }else {
                     = "hide";
                }

                //设置被删除后的回复占位文字的颜色
                 =  == 1 ? "aDel" : "";

                //判断回复时的四种角色,authorType 为 1:客户;100:工程商;150:客户代表;200:万屏汇官方(平台代表)
                switch(parseInt(child.authorType))
                {
                case 1:
                    child.authorName = '客户回复';
                    break;
                case 100:
                    child.authorName = '客户回复';
                    break;
                case 150:
                    child.authorName = '客户代表回复';
                    break;
                case 200:
                    child.authorName = '万屏汇官方回复';
                    break;
                }
            }
        }else{
            // 当前登录用户就是发标的人,那就可以回复
            if(is_my_demand){
                can_reply = true;
            } else {
                can_reply = false;
            }
        }

         = (can_reply ? "show" : "hide");
    }
}
总结

一开始我的出发点是循环遍历json,再循环遍历html元素,以控制回复和删除按钮的隐藏或显示。其实并不需要这样,运用mustache就可以解决,不遍历html

回复的逻辑,总绕晕了,也是因为变量的true/false和隐藏/显示是反着,不利于理清