O2O--E家政服务 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

用户操作页面

用户操作页面(list.html)实现的功能就是展示所有商家的信息与服务内容。当用户选择商家时,向商家发送信息。在与服务端通信时要引用如下代码:

<script src="/socket.io/socket.io.js"></script>

页面的效果图如下图:

首先要与服务器连接,当连接成功时,发送一些信息给服务端,当收到服务端息消息时,绑定数据或者展示在页面上。

如下用户页面的js代码的功能就是连接服务器,并通知服务器该用户上线了。

var services={};
var params = getCookie(); //获取cookie中的参数
socket.on('connect',function(){
        console.log('连接成功');
        socket.send({cmd:"online",data:""});
});

获取cookie的方法如下:

function getCookie(){
    var result = {};
    var arr = document.cookie.split(";");
    arr.map(function(a){
        var cache = a.split('=');
        result[cache[0].trim()] = cache[1].trim();
    });
    return result;
}

当连接成功后,用户收到消息时,执行以下代码:

socket.on('message', function (data) {
        console.log('收到消息:'+JSON.stringify(data));
        switch (data.cmd) {
            case "rec": //收到消息在页面展示
                document.getElementById("receiveTxt").value = data.data;
                break;
            case "list":  //收到所有在线商家的消息, 然后把数据在页面进行绑定
                    console.log(data.data);
                var options = document.getElementById("selectPerson");
                document.getElementById("selectPerson").options.length=0;
                    for(var i in data.data)   {
                        var opp = new Option(data.data[i],i );
                        options.add(opp);
                    }
                    var id = document.getElementById("selectPerson").value;
                    document.getElementById("shopText").value=services[id];
                break;
            case "online": //收到刚上线的商户通知,对页面进行数据添加
                console.log(data);
                var options = document.getElementById("selectPerson");
                var opp = new Option(data.data.name,data.data.id );
                options.add(opp);
                services[data.data.id]=data.data.service;
                break;
            case "ok":
                document.getElementById("receiveTxt").value = data.data;
                break;
       }
});

以上我们收到了四个消息,分别为rec、online、list、ok,它们分别对应服务端的四个命令字相同的发送命令。即当我们收到online命令时,我们在用户页面进行商家信息添加;当收到list命令时,我们重新将商家用户进行展示。收到recok命令时,在页面展示相关信息。后面的商家用户也是一样的。

当要选择商家时,将选择的服务与自己的信息发送给商家。

function sendMessage(){
      var data=document.getElementById("sendTxt").value;
      var id = document.getElementById("selectPerson").value; // 选中值
      socket.send({cmd:"chat",data:{id:id,message:data,tel:params.tel,name:params.name_u}});
}

当我们发送chat命令时,服务端也有一个接收命令,来处理收到的数据。

列表改变事件如下:

function selectChange(){
    var id = document.getElementById("selectPerson").value;
    document.getElementById("shopText").value=services[id] ;
}

页面的html布局代码如下:

<h2>用户页</h2>
<div id="allUsers">
<table align="center" border="1"><tr><td>商户列表</td><td><select id="selectPerson"  onchange="selectChange()"></select></td></tr>
    <tr><td><lable>商家服务</lable></td><td><input type="text" id="shopText"></td></tr>
    <tr><td><lable>发送内容</lable></td><td><input type="text" id="sendTxt"></td></tr>
    <tr><td><button onclick="sendMessage()">点单</button></td><td></td></tr>
    <tr><td><lable>收到的内容</lable></td>
        <td><div>
                <textarea type="text" id="receiveTxt"></textarea>
            </div>
        </td>
    </tr>
</table>
</div>