chat.js 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. // pages/chat/chat.js
  2. const {
  3. getUserInfoList,
  4. getChattingRecord,
  5. getGoodsInfo,
  6. setWsConnect,
  7. getUserInfo
  8. } = require('../../API/appraise');
  9. const {
  10. formatTime
  11. } = require('../../utils/util')
  12. import messageMap from '../../utils/util'
  13. var socketMsgQueue = {
  14. from: wx.getStorageSync('uid'),
  15. to: '',
  16. msgType: 1,
  17. time: '',
  18. content: ''
  19. }
  20. var getUserInfoListOption = {
  21. data: {
  22. id: []
  23. }
  24. }
  25. var getChattingRecordOption = {
  26. uid: wx.getStorageSync('uid'),
  27. target: ''
  28. }
  29. var getGoodsInfoOption = {
  30. id: '',
  31. uid: '',
  32. date: ''
  33. }
  34. var getChattingRecordOption = {
  35. uid: '',
  36. target: ''
  37. }
  38. var setWsConnectOption = {
  39. uid: wx.getStorageSync('uid')
  40. }
  41. Page({
  42. /**
  43. * 页面的初始数据
  44. */
  45. data: {
  46. toUid: '',
  47. goodsId: '',
  48. goods: {
  49. pic: '',
  50. name: '',
  51. price: 0,
  52. },
  53. //登录用户的信息
  54. login: {
  55. id: wx.getStorageSync('uid')
  56. },
  57. chatList: [
  58. // {
  59. // from: '7385700531999608832',
  60. // to: '7384540497554968576',
  61. // nickname:'daisy',
  62. // avatar: 'http://192.168.31.30:8084/pics/1698753512AiD8PaNrvqsDb1493fda534929a5b5d05f80a8cf3d16.jpg',
  63. // message: '你好',
  64. // type: 'text',
  65. // time: '11-8 20:52'
  66. // },
  67. // {
  68. // to: '7385700531999608832',
  69. // from: '7384540497554968576',
  70. // nickname:'无情的敲代码机器人',
  71. // avatar: 'http://192.168.31.30:8084/pics/1699175056BvtgC8vv8gSzd85dedb14362dc3a251c6c85705ec495.jpg',
  72. // message: '你好',
  73. // type: 'text',
  74. // time: '11-8 20:52'
  75. // }
  76. ]
  77. },
  78. /**
  79. * 生命周期函数--监听页面加载
  80. */
  81. onLoad(options) {
  82. //获取商品信息
  83. this.data.toUid = options.toUid;
  84. this.data.goodsId = options.goodsId;
  85. this.data.goods.pic = options.pic;
  86. getChattingRecordOption.target = this.data.toUid;
  87. let time = new Date().getTime();
  88. getGoodsInfoOption = {
  89. id: this.data.goodsId,
  90. uid: wx.getStorageSync('uid'),
  91. date: time
  92. }
  93. let targetId = '';
  94. getGoodsInfo(getGoodsInfoOption).then((res) => {
  95. // console.log(res);
  96. const good = res.data.data;
  97. if (good.Pic == null) {
  98. good.Pic = this.data.goods.pic
  99. }
  100. this.setData({
  101. goods: {
  102. name: good.Title,
  103. price: good.Price,
  104. pic: good.Pic
  105. }
  106. })
  107. }).catch((err) => {
  108. console.log(err);
  109. })
  110. //获取对方用户信息
  111. getUserInfoListOption.data.id = [this.data.toUid];
  112. getUserInfoList(getUserInfoListOption).then((res) => {
  113. console.log(res);
  114. const {
  115. users
  116. } = res.data.data;
  117. targetId = users[0].uid;
  118. getChattingRecordOption.target = targetId;
  119. wx.setStorageSync('anotherNickName', users[0].name);
  120. wx.setStorageSync('anotherAvatar', users[0].avatar);
  121. }).catch((err) => {
  122. console.log(err);
  123. })
  124. //获取用户本人信息
  125. getUserInfo().then((res) => {
  126. console.log(res);
  127. let data = res.data.data;
  128. wx.setStorageSync('avatar', data.avatar);
  129. wx.setStorageSync('nickname', data.name);
  130. }).catch((err) => {
  131. console.log(err);
  132. })
  133. //获取聊天记录
  134. getChattingRecordOption.uid = wx.getStorageSync('uid');
  135. console.log(getChattingRecordOption);
  136. getChattingRecord(getChattingRecordOption).then((res) => {
  137. let data = res.data.data;
  138. console.log(data);
  139. data.sort(sortBy('time', 1));
  140. let chatList1 = [];
  141. for (let i = 0; i < data.length; i++) {
  142. let message = {};
  143. message['from'] = data[i].from;
  144. message['to'] = data[i].to;
  145. message['message'] = data[i].content;
  146. message['type'] = data[i].msgType == 1 ? 'text' : 'pic';
  147. message['time'] = formatTime(data[i].time);
  148. if (data[i].from === wx.getStorageSync('uid')) {
  149. message['nickname'] = wx.getStorageSync('nickname');
  150. message['avatar'] = wx.getStorageSync('avatar');
  151. } else {
  152. message['nickname'] = wx.getStorageSync('anotherNickName');
  153. message['avatar'] = wx.getStorageSync('anotherAvatar');
  154. }
  155. console.log(message);
  156. chatList1.push(message);
  157. console.log(chatList1);
  158. }
  159. this.setData({
  160. chatList: chatList1,
  161. })
  162. }).catch((err) => {
  163. console.log(err);
  164. })
  165. function sortBy(attr, rev) {
  166. if (rev == undefined) {
  167. rev = 1
  168. } else {
  169. (rev) ? 1: -1;
  170. }
  171. return function (a, b) {
  172. a = a[attr];
  173. b = b[attr];
  174. if (a < b) {
  175. return rev * -1
  176. }
  177. if (a > b) {
  178. return rev * 1
  179. }
  180. return 0;
  181. }
  182. }
  183. //建立ws连接
  184. setWsConnect(setWsConnectOption).then((res) => {
  185. console.log(res);
  186. })
  187. // 监听服务器的数据返回
  188. wx.onSocketMessage((result) => {
  189. console.log("服务器的数据返回", result);
  190. const res = JSON.parse(result.data);
  191. if (res.msgType == 1) {
  192. //获取当前时间
  193. let date = new Date();
  194. console.log(date);
  195. //处理数据
  196. if (res.from == this.data.toUid) {
  197. let msg = {
  198. from: res.from,
  199. to: res.to,
  200. message: res.content,
  201. type: 'text',
  202. time: formatTime(date),
  203. nickname: wx.getStorageSync('anotherNiakName'),
  204. avatar: wx.getStorageSync('anotherAvatar')
  205. }
  206. console.log(msg);
  207. this.setData({
  208. chatList: list.concat(msg)
  209. }, () => {
  210. that.scrollToBottom();
  211. that.setData({
  212. content: ''
  213. })
  214. })
  215. }
  216. }
  217. })
  218. this.scrollToBottom();
  219. },
  220. /**
  221. * 生命周期函数--监听页面初次渲染完成
  222. */
  223. onReady() {
  224. },
  225. /**
  226. * 生命周期函数--监听页面显示
  227. */
  228. onShow() {
  229. },
  230. /**
  231. * 生命周期函数--监听页面隐藏
  232. */
  233. onHide() {
  234. },
  235. /**
  236. * 生命周期函数--监听页面卸载
  237. */
  238. onUnload() {
  239. wx.closeSocket();
  240. console.log('websocket 已关闭!');
  241. },
  242. /**
  243. * 页面相关事件处理函数--监听用户下拉动作
  244. */
  245. onPullDownRefresh() {
  246. },
  247. /**
  248. * 页面上拉触底事件的处理函数
  249. */
  250. onReachBottom() {
  251. },
  252. /**
  253. * 用户点击右上角分享
  254. */
  255. onShareAppMessage() {
  256. },
  257. // 输入监听
  258. inputClick(e) {
  259. this.setData({
  260. content: e.detail.value
  261. })
  262. },
  263. // 发送监听
  264. sendClick() {
  265. let that = this;
  266. let list = this.data.chatList;
  267. // 获取当前时间
  268. let date = new Date();
  269. let month = date.getMonth() + 1;
  270. let day = date.getDate();
  271. let hour = date.getHours();
  272. let minu = date.getMinutes();
  273. let now1 = month < 10 ? '0' + month : month;
  274. let now2 = day < 10 ? '0' + day : day;
  275. // 组装数据
  276. let msg = {
  277. from: wx.getStorageSync('uid'),
  278. to: this.data.toUid,
  279. nickname: wx.getStorageSync('nickName'),
  280. avatar: wx.getStorageSync('avatarUrl'),
  281. message: this.data.content,
  282. type: 'text',
  283. time: now1 + '-' + now2 + ' ' + hour + ':' + minu
  284. }
  285. console.log(msg);
  286. this.setData({
  287. chatList: list.concat(msg)
  288. }, () => {
  289. that.scrollToBottom();
  290. that.setData({
  291. content: ''
  292. })
  293. })
  294. let socketMsg = socketMsgQueue;
  295. socketMsg.msgType = 1;
  296. socketMsg.content = this.data.content;
  297. socketMsg.to = this.data.toUid;
  298. console.log(this.data.toUid);
  299. let time = new Date().getTime();
  300. console.log(time);
  301. socketMsg.time = time;
  302. console.log(socketMsg);
  303. wx.sendSocketMessage({
  304. data: JSON.stringify(socketMsg),
  305. })
  306. },
  307. // 滑动到最底部
  308. scrollToBottom() {
  309. setTimeout(() => {
  310. wx.pageScrollTo({
  311. scrollTop: 200000,
  312. duration: 3
  313. });
  314. }, 600)
  315. },
  316. })