github.com/jincm/wesharechain@v0.0.0-20210122032815-1537409ce26a/app/html/message/message_friends.html (about)

     1  <!doctype html>
     2  <html>
     3  <head>
     4  <meta charset="UTF-8">
     5  <meta name="copyright" content="www.apicloud.com" />
     6  <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0"/>
     7  <title>好友消息</title>
     8  <link rel="stylesheet" type="text/css" href="../../css/app_common.css" />
     9  <link rel="stylesheet" type="text/css" href="../../css/api.css" />
    10  <link rel="stylesheet" type="text/css" href="../../css/idangerous.swiper.css">
    11  <style type="text/css">
    12  	.unread {
    13  		display: inline-block;
    14  		background: #15b5e9;
    15  		color: #fff;
    16  		font-size: 10px;
    17  		padding: 0 3px;
    18  		border-radius: 10px;
    19  		-webkit-border-radius: 10px;
    20  	}
    21  </style>
    22  </head>
    23  
    24  <body>
    25  
    26  
    27  <!--D:\srccode\zuohaoshi\client\demo\wangyimusic20141207\html\third_frame\frame0301.html-->
    28  
    29  <div class="sectionTitle mt20" id="data_div"></div>
    30  
    31  <script id="mytpl" type="text/x-dot-template">
    32  {{ if(it && it.length > 0){ }}
    33  	{{ for(var i=0;i<it.length;i++){ }}	
    34  
    35  		<div class="egret-flex-item"  tapmode="fmbtnhover" onclick="openMessageDetail('{{=it[i].id}}','{{=it[i].name}}')">
    36  			<div class="egret-flex-item-logo">
    37  				<img src="../../image/test/frame0103cover07.jpg" alt="" class="">
    38  			</div>
    39  			<div class="egret-flex-item-shelf">
    40  				{{ if(it[i].name){ }}
    41  				<div class="egret-flex-item-shelf01">{{=it[i].id}} phone:{{=it[i].name}}</div>
    42  				{{ }else{ }}
    43  				<div class="egret-flex-item-shelf01">无名</div>
    44  				{{ } }}
    45  				
    46  				{{ if(it[i].content){ }}
    47  				<div class="egret-flex-item-shelf02"><span class="egret-flex-item-redclassify">好人</span>{{=it[i].content}}</div>
    48  				{{ }else{ }}
    49  				<div class="egret-flex-item-shelf02"><span class="egret-flex-item-redclassify">好人</span>抬头看天,低头看地,平头看人!</div>
    50  				{{ } }}
    51  			</div>
    52  		</div>
    53  		
    54  	{{ } }}
    55  	
    56  {{ }else{ }}
    57  	<li>没有数据</li>
    58  {{ } }}
    59  </script>
    60  
    61  <script type="text/javascript" src="../../script/api.js"></script>
    62  <script type="text/javascript" src="../../script/idangerous.swiper.js"></script>
    63  <script type="text/javascript" src="../../script/doT.min.js" charset="utf-8"></script>
    64  <script type="text/javascript" src="../../script/app.js"></script>
    65  <script type="text/javascript" src="../../script/socket.io.js"></script>
    66  <!--<script type="text/javascript" src="widget://script/socket.io.js"></script> -->
    67  
    68  <script type="text/javascript" charset="utf-8">
    69  </script>
    70  
    71  <script type="text/javascript">
    72  
    73  isFirst = false;
    74  	
    75  function openMessageDetail(user_id, user_name) {
    76  	// 获取目标ID
    77  	var targetId = user_id; //$(this).attr("data-targetId");
    78  	// 获取目标名称
    79  	var targetName = user_name; //$(this).attr("data-targetName");
    80  	
    81  	// 清除未读数
    82  	//rong_clearMessagesUnreadStatus(conversationType, targetId);
    83  	// 打开会话页面
    84      api.openWin({
    85          name: "chat_win",
    86          url: "chat_win.html",
    87          pageParam: {conversationType: "chat", targetId : targetId, targetName : targetName}
    88      });
    89      
    90      console.log("open message detail:" + user_id + " name: " + user_name);
    91  	//alert("应该跳转到Message页面  id " + user_id);
    92  	
    93  	/*
    94  	var socket = new WebSocket('ws://123.56.159.76:3000');
    95  	socket.onopen = function(event){
    96  		socket.send('I am the client and I\'m listening!');
    97  		alert("websocket is good");
    98  	}
    99  	socket.onmessage = function(event){
   100  		console.log('Client received a message',event);
   101  	}
   102  	socket.onclose = function(event){
   103  		console.log('Client notified socket has closed',event);
   104  	}
   105  	//socket.close()
   106  	console.log("websocket is " + socket);*/
   107  
   108  	
   109  	//alert("websocket is good2");
   110  	
   111  	/*winName = grouptype + "_" + type + "_detail"
   112  	winUrl = winName + "_win.html"
   113      api.openWin({
   114          name: winName,
   115          url: winUrl,
   116          pageParam: {dataId: did}
   117      });*/
   118  }
   119  
   120  var headerPos;
   121  
   122  window.onload = function() {
   123  }
   124  
   125  // 初始化并连接监听
   126  function websocket_init() {
   127  	user_id = $api.getStorage("user_id");
   128  	
   129  	this.socket = io.connect('ws://123.56.159.76:3000');
   130  	this.socket.emit('login', {userid:user_id, username:'jincm111'});
   131  	
   132  	
   133  	//连接后,server会将对应的信息立即发送过来
   134  	this.socket.on("msg_server", function(msg, fn) {
   135  		fn('rcv_ok');
   136  		//io.emit('rcv_ok', { my: 'data' });
   137  		console.log(JSON.stringify(msg));
   138  		// 4.1 广播接收到消息了(消息可能包含多条?)
   139  		_sendEvent("receivedMsg", msg);
   140  		// 判断是否首次获取,避免重复插入
   141  		if (!isFirst) {
   142  			// 发送者ID
   143  			var senderUserId = msg.senderUserId;
   144  			// 判断是否是单聊
   145  			if (msg.conversationType == "PRIVATE") {
   146  				senderUserId = msg.senderUserId;
   147  			}
   148  			// 判断是否是群聊
   149  			else if (msg.conversationType == "GROUP") {
   150  				senderUserId = msg.targetId;
   151  			}
   152  			//将新的消息数据保存到本地,然后每个消息页面重新加载即可;
   153  			//save msgs 
   154  			//showMsgList();
   155  		}
   156  		if (!isFirst) {
   157  			// 状态栏提醒
   158  			api.notification({
   159  				vibrate : [300, 500],
   160  				sound : 'default',
   161  				light : false,
   162  				notify : {
   163  					title : '您有新消息',
   164  					content : msg.content != undefined ? msg.content : "",
   165  					updateCurrent : false,
   166  					extra : JSON.stringify(msg)
   167  				}
   168  			}, function(ret, err) {
   169  			});
   170  		}		
   171  	});
   172  	
   173  	/*this.socket.on('send_ok', function(data) {
   174  		console.log("msg send " + data);
   175  		// 广播消息,发送成功
   176  		_sendEvent("sendMsgSuccess", data);		
   177  	});*/
   178  	
   179  	this.socket.on('disconnect', function () {
   180      	//io.emit('user disconnected');
   181    	});
   182  }
   183  
   184  /*
   185  // 退出登录
   186  function websocket_logout(ret) {
   187  	websocket_disconnect();
   188  }
   189  // 断开连接
   190  function websocket_disconnect() {
   191  	websocket.disconnect(false);
   192  }*/
   193  
   194  // 统一发送消息接口
   195  // @msgType:消息类型,文字,图片,语言,地图,天气
   196  // @conversationType:会话类型,单聊(PRIVATE),讨论组(DISCUSSION),群组(GROUP),聊天室(CHATROOM),客服(CUSTOMER_SERVICE),(SYSTEM)
   197  // @targetId:接受方ID,可以是用户 Id、讨论组 Id、群组 Id 或聊天室 Id
   198  // @content:发送内容
   199  // @extra:用户自定义数据,一般extra是用户+token组装的json字符串
   200  //function websocket_sendMsg(msgType, conversationType, senderId, targetId, content, extra)
   201  function websocket_sendMsg(msg) {
   202  	switch(msg.msgType) {
   203  		// 发送文字消息(目前仅支持文字,图片声音视频后续支持)
   204  		case "TxtMsg":
   205  			// 存储当前发送信息到本地
   206  			//$api.setStorage((ret.result.message.messageId).toString(), ret);
   207  			// 广播消息,发送准备中			
   208  			//extra = JSON.stringify({'username':'jincm','bb':'cc'});
   209  			
   210  			//var msg = {'content':{'text':content,'extra':extra}, 'objectName':"RC:TxtMsg","messageId":targetId};
   211  			msg.msgId = _uuid();
   212  			
   213  			console.log("msg is :" + JSON.stringify(msg));
   214  			
   215  			//var sendmsg = {'value':msg};
   216  			_sendEvent("sendMsgPrepare", msg);
   217  			this.socket.emit("msg_client", msg , function (result) {
   218  				console.log("msg client result is " + result);
   219  				// 广播消息,发送成功
   220  				_sendEvent("sendMsgSuccess", msg);	
   221  			});
   222  
   223  			
   224  			// 设置发送会话
   225  			//sendMsgSuccessEnd($api.getStorage((ret.result.message.messageId).toString()));
   226  					
   227  			/*websocket.sendTextMessage({
   228  				conversationType : conversationType,
   229  				targetId : targetId,
   230  				text : content,
   231  				extra : extra
   232  			}, function(ret, err) {
   233  				if (ret.status == 'prepare') {
   234  					// 存储当前发送信息
   235  					$api.setStorage((ret.result.message.messageId).toString(), ret);
   236  					// 广播消息,发送准备中
   237  					_sendEvent("sendMsgPrepare", ret.result.message);
   238  				} else if (ret.status == 'success') {
   239  					// 广播消息,发送成功
   240  					_sendEvent("sendMsgSuccess", ret.result.message);
   241  					// 设置发送会话
   242  					sendMsgSuccessEnd($api.getStorage((ret.result.message.messageId).toString()));
   243  				} else if (ret.status == 'error') {
   244  					// 广播消息,发送失败
   245  					_sendEvent("sendMsgError", {
   246  						errcode : err.code,
   247  						messageId : ret.result.message.messageId
   248  					});
   249  				}
   250  			});*/
   251  			break;
   252  		// 发送语音
   253  		case "VcMsg":
   254  			websocket.sendVoiceMessage({
   255  				conversationType : conversationType,
   256  				targetId : targetId,
   257  				voicePath : content,
   258  				duration : $api.strToJson(extra).duration,
   259  				extra : extra
   260  			}, function(ret, err) {
   261  				if (ret.status == 'prepare') {
   262  					// 存储当前发送信息
   263  					$api.setStorage((ret.result.message.messageId).toString(), ret);
   264  					// 广播消息,发送准备中
   265  					_sendEvent("sendMsgPrepare", ret.result.message);
   266  				} else if (ret.status == 'success') {
   267  					// 广播消息,发送成功
   268  					_sendEvent("sendMsgSuccess", ret.result.message);
   269  					// 设置发送会话
   270  					sendMsgSuccessEnd($api.getStorage((ret.result.message.messageId).toString()));
   271  				} else if (ret.status == 'error') {
   272  					// 广播消息,发送失败
   273  					_sendEvent("sendMsgError", {
   274  						errcode : err.code,
   275  						messageId : ret.result.message.messageId
   276  					});
   277  				}
   278  			});
   279  			break;
   280  		// 发送图片
   281  		case "ImgMsg":
   282  			websocket.sendImageMessage({
   283  				conversationType : conversationType,
   284  				targetId : targetId,
   285  				imagePath : content,
   286  				extra : extra
   287  			}, function(ret, err) {
   288  				if (ret.status == 'prepare') {
   289  					// 存储当前发送信息
   290  					$api.setStorage((ret.result.message.messageId).toString(), ret);
   291  					// 广播消息,发送准备中
   292  					_sendEvent("sendMsgPrepare", ret.result.message);
   293  				} else if (ret.status == 'progress') {
   294  					// 广播消息,发送过程中
   295  					_sendEvent("sendMsgProgress", ret.result.progress);
   296  				} else if (ret.status == 'success') {
   297  					// 广播消息,发送成功
   298  					_sendEvent("sendMsgSuccess", ret.result.message);
   299  					// 设置发送会话
   300  					sendMsgSuccessEnd($api.getStorage((ret.result.message.messageId).toString()));
   301  				} else if (ret.status == 'error') {
   302  					// 广播消息,发送失败
   303  					_sendEvent("sendMsgError", {
   304  						errcode : err.code,
   305  						messageId : ret.result.message.messageId
   306  					});
   307  				}
   308  			});
   309  			break;
   310  		// 发送图文
   311  		case "richmsg":
   312  			websocket.sendRichContentMessage({
   313  				conversationType : conversationType,
   314  				targetId : targetId,
   315  				title : $api.strToJson(extra).title,
   316  				description : $api.strToJson(extra).description,
   317  				imageUrl : content,
   318  				extra : extra
   319  			}, function(ret, err) {
   320  				if (ret.status == 'prepare') {
   321  					// 存储当前发送信息
   322  					$api.setStorage((ret.result.message.messageId).toString(), ret);
   323  					// 广播消息,发送准备中
   324  					_sendEvent("sendMsgPrepare", ret.result.message);
   325  				} else if (ret.status == 'success') {
   326  					// 广播消息,发送成功
   327  					_sendEvent("sendMsgSuccess", ret.result.message);
   328  					// 设置发送会话
   329  					sendMsgSuccessEnd($api.getStorage((ret.result.message.messageId).toString()));
   330  				} else if (ret.status == 'error') {
   331  					// 广播消息,发送失败
   332  					_sendEvent("sendMsgError", {
   333  						errcode : err.code,
   334  						messageId : ret.result.message.messageId
   335  					});
   336  				}
   337  			});
   338  			break;
   339  		// 发送位置信息
   340  		case "location":
   341  			websocket.sendLocationMessage({
   342  				conversationType : conversationType,
   343  				targetId : targetId,
   344  				latitude : $api.strToJson(extra).lat,
   345  				longitude : $api.strToJson(extra).lon,
   346  				poi : $api.strToJson(extra).poi,
   347  				imagePath : content,
   348  				extra : extra
   349  			}, function(ret, err) {
   350  				if (ret.status == 'prepare') {
   351  					// 存储当前发送信息
   352  					$api.setStorage((ret.result.message.messageId).toString(), ret);
   353  					// 广播消息,发送准备中
   354  					_sendEvent("sendMsgPrepare", ret.result.message);
   355  				} else if (ret.status == 'progress') {
   356  					// 广播消息,发送过程中
   357  					_sendEvent("sendMsgProgress", ret.result.progress);
   358  				} else if (ret.status == 'success') {
   359  					// 广播消息,发送成功
   360  					_sendEvent("sendMsgSuccess", ret.result.message);
   361  					// 设置发送会话
   362  					sendMsgSuccessEnd($api.getStorage((ret.result.message.messageId).toString()));
   363  				} else if (ret.status == 'error') {
   364  					// 广播消息,发送失败
   365  					_sendEvent("sendMsgError", {
   366  						errcode : err.code,
   367  						messageId : ret.result.message.messageId
   368  					});
   369  				}
   370  			});
   371  			break;
   372  		// 发送命令消息(自定义消息)
   373  		case "cmd":
   374  			websocket.sendCommandNotificationMessage({
   375  				conversationType : conversationType,
   376  				targetId : targetId,
   377  				name : $api.strToJson(extra).name,
   378  				data : extra
   379  			}, function(ret, err) {
   380  				if (ret.status == 'prepare') {
   381  					// 存储当前发送信息
   382  					$api.setStorage((ret.result.message.messageId).toString(), ret);
   383  					// 广播消息,发送准备中
   384  					_sendEvent("sendMsgPrepare", ret.result.message);
   385  				} else if (ret.status == 'success') {
   386  					// 广播消息,发送成功
   387  					_sendEvent("sendMsgSuccess", ret.result.message);
   388  					// 设置发送会话
   389  					sendMsgSuccessEnd($api.getStorage((ret.result.message.messageId).toString()));
   390  				} else if (ret.status == 'error') {
   391  					// 广播消息,发送失败
   392  					_sendEvent("sendMsgError", {
   393  						errcode : err.code,
   394  						messageId : ret.result.message.messageId
   395  					});
   396  				}
   397  			});
   398  			break;
   399  		default:
   400  			break;
   401  	}
   402  }
   403  		
   404  // 获取会话列表
   405  function websocket_getConversationList(ret) {
   406  	showMsgList();
   407  }
   408  
   409  apiready = function  () {
   410  	console.log("come setFrameGroupIndex:win name:" + api.winName + " framename:" + api.frameName);
   411  	user_id = $api.getStorage("user_id");
   412  	
   413  	//获取数据
   414  	function showMsgList(){
   415  		isFirst = false;
   416  		//get message
   417  		//get token and userid,if token is null,redirect to login
   418  		
   419  		//token = $api.getStorage("token");
   420  		url = "/u/" + "/users/search?loc_x=116&loc_y=40"
   421  		myajax(url,'GET','', function(ret,err){
   422  			console.log("ret body = " + JSON.stringify(ret.body));
   423  			//alert(JSON.stringify(ret.body));
   424  		
   425  			if(ret){
   426  				console.log(JSON.stringify(ret.body))
   427  				//get data from server								
   428  				var obj = new Array();
   429  				
   430  				for(var i = 0; i < ret.body.users.length; i++) {
   431  					console.log(ret.body.users[i]._id);
   432  					console.log(ret.body.users[i].account);
   433  					obj.push({"id":ret.body.users[i]._id,"name":ret.body.users[i].account,"content":ret.body.users[i].account});
   434  				}
   435  				/*obj = [ {"id":"123451","name":"user1","content":"user1 is a good man"},
   436  								{"id":"123452","name":"user2","content":"user2 is a good man"},
   437  								{"id":"123453","name":"user3","content":"user3 is a good man"},
   438  								{"id":"123454","name":"user4","content":"user4 is a good man"},
   439  								{"id":"123455","name":"user5","content":"user5 is a good man"},
   440  								{"id":"123456","name":"user6","content":"user6 is a good man"},
   441  								{"id":"123457","name":"user7","content":"user7 is a good man"},
   442  								{"id":"123458","name":"user8","content":"user8 is a good man"},
   443  								{"id":"123459","name":"user9","content":"user9 is a good man"},
   444  								{"id":"123460","name":"user10","content":"user10 is a good man"},
   445  								{"id":"123461","name":"user11","content":"user11 is a good man"},
   446  								{"id":"123462","name":"user12","content":"user12 is a good man"} ];*/
   447  			
   448  			    var data_div = $api.byId('data_div');
   449  			    var tpl = $api.byId('mytpl').text;
   450  			    var tempFn = doT.template(tpl);
   451  			    data_div.innerHTML = tempFn(obj);
   452  		    }else {
   453  		    	api.alert({
   454  		        	msg:('错误码:'+err.code+';错误信息:'+err.msg+'网络状态码:'+err.statusCode)
   455  		    	});
   456  		    }
   457  		});
   458  	}
   459  	
   460  	// 结合下拉刷新
   461  	api.setRefreshHeaderInfo({
   462  	        visible: true,
   463  	        loadingImg: 'widget://image/near/refresh.png',
   464  	        bgColor: '#ccc',
   465  	        textColor: '#fff',
   466  	        textDown: '下拉刷新...',
   467  	        textUp: '松开刷新...',
   468  	        showTime: true
   469  	}, function(ret, err){
   470  	        showMsgList(); // 第一次加载
   471  	        api.refreshHeaderLoadDone();
   472  	});
   473  
   474  	// 8.0 初始化并连接
   475  	websocket_init();
   476  	// 19、自动下拉加载	
   477  	// 默认第一次打开页面就下拉加载数据
   478  	api.refreshHeaderLoading();
   479  
   480  	// 15 获取用户信息
   481  	userJson = user_id; //$api.getStorage("user_id");
   482  	// 9.0 监听是否需要发送消息
   483  	_addEventListener("sendMsgStart", function(ret) {
   484  		if (ret && ret.value) {
   485  			var msg = ret.value;
   486  			// 调用统一接口发送信息
   487  			console.log("sendMsgStart 2............");
   488  			websocket_sendMsg(msg);
   489  		}
   490  	});
   491  	
   492  	// 监听是否退出登录
   493  	_addEventListener("logOut", function(ret) {
   494  		websocket_logout();
   495  	});
   496  			
   497  }
   498  </script>
   499  </html>