chat-list.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. // pages/chat-list/chat-list.js
  2. import ImApi from './../../apis/im'
  3. import { fotmatDate } from './../../utils/date'
  4. /**
  5. * 会话列表页面
  6. */
  7. Page({
  8. /**
  9. * 页面的初始数据
  10. */
  11. data: {
  12. conversations: []
  13. },
  14. /**
  15. * 生命周期函数--监听页面加载
  16. */
  17. onLoad(options) {
  18. },
  19. toChat(e) {
  20. let app = getApp()
  21. getApp().autoSubcrebe && getApp().autoSubcrebe()
  22. let item = e.currentTarget.dataset.item;
  23. app.globalData.unViewMsg = app.globalData.unViewMsg - item.unReadNum
  24. console.log(item.unread, app.globalData.unViewMsg, e)
  25. delete item.latestMsg;
  26. delete item.unread;
  27. delete item.content;
  28. const { conversations } = this.data
  29. const i = conversations.find(i => i.id === item.id)
  30. i.unread = 0
  31. this.setData({
  32. conversations
  33. })
  34. wx.navigateTo({
  35. url: `../chat/chat?toId=${item.id}&toName=${item.name}`
  36. });
  37. },
  38. /**
  39. * 生命周期函数--监听页面显示
  40. */
  41. async onShow() {
  42. await getApp().getContact()
  43. this.setData({
  44. conversations: getApp().globalData.conversations
  45. })
  46. this.listener = (msg) => {
  47. wx.nextTick(() => {
  48. this.setData({
  49. conversations: getApp().globalData.conversations
  50. })
  51. })
  52. }
  53. getApp().getIMHandler().setOnReceiveMessageListener({
  54. listener: this.listener
  55. });
  56. },
  57. onHide () {
  58. getApp().getIMHandler().removeOnReceiveMessageListener({
  59. listener: this.listener
  60. })
  61. },
  62. async getNewMessage (msg) {
  63. const { conversations } = this.data
  64. let item = conversations.find(item => item.id === msg.fromId)
  65. if (item) {
  66. item.latestMsgContent = msg.content
  67. item.unread ? item.unread++ : item.unread = 1
  68. this.setData({
  69. conversations: this.dealConversations(conversations)
  70. })
  71. } else {
  72. await getApp().getContact()
  73. this.setData({
  74. conversations: getApp().globalData.conversations
  75. })
  76. }
  77. },
  78. getContact () {
  79. ImApi.getContacts().then(res => {
  80. const friends = res.data.friends
  81. const { conversations } = this.data
  82. this.setData({
  83. conversations: this.dealConversations(friends.map(item => {
  84. const con = conversations.find(con => con.id === item.id)
  85. if (con) {
  86. item = Object.assign(con, item)
  87. }
  88. item.latestMsgTime = f
  89. return item
  90. }))
  91. })
  92. })
  93. },
  94. dealConversations (conversations) {
  95. return conversations.map(item => {
  96. let content = item.latestMsgContent
  97. try {
  98. let parseContent = JSON.parse(content)
  99. if (parseContent.house_name) {
  100. content = `【语音云带看】${JSON.parse(content).house_name}`
  101. } else if (parseContent.duration) {
  102. content = '【语音】'
  103. } else if (parseContent.content) {
  104. content = '【图片】'
  105. }
  106. } catch (err) {
  107. }
  108. item.latestMsgContent = content
  109. return item
  110. }).sort((a,b) => new Date(b.latestMsgTime) - new Date(a.latestMsgTime))
  111. },
  112. getConversationsItem(item) {
  113. let {latestMsg, ...msg} = item;
  114. return Object.assign(msg, JSON.parse(latestMsg));
  115. }
  116. });