news.vue 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. <template>
  2. <!-- 聊天消息 -->
  3. <view class="back">
  4. <view class="input u-flex">
  5. <u-icon name="search" color="rgba(153, 153, 153, 1)" size="40"></u-icon>
  6. <input type="text" :placeholder="i18n.Searchchat" style="width: 600rpx;margin-left: 16rpx;" />
  7. </view>
  8. <!-- 客服 -->
  9. <view class="" v-for="(item,idx) in list" :key="idx">
  10. <view v-if="user_no !='13523652365' && item.conversationId == '13523652365'" class="kefu u-flex"
  11. @click="tokefu">
  12. <image src="/pageA/static/images/kefu.png" style="width: 88rpx;height: 88rpx;" mode=""></image>
  13. <view class="u-row-between"
  14. style="height: 88rpx;display: flex;flex-direction: column;margin-left: 20rpx;width: 85%;">
  15. <view class="u-flex u-row-between">
  16. <view class="name">{{i18n.customerService}}</view>
  17. <view class="time">
  18. {{new Date(item.lastMessage.time).getFullYear()}}-{{new Date(item.lastMessage.time).getMonth() + 1}}-{{new Date(item.lastMessage.time).getDate()}}
  19. {{new Date(item.lastMessage.time).toTimeString().substr(0, 8)}}
  20. </view>
  21. </view>
  22. <view class="u-flex u-row-between">
  23. <text v-if="item.lastMessage.msg" class="news">{{item.lastMessage.msg}}</text>
  24. <text v-if="item.lastMessage.type == 'img'" class="news">{{i18n.picture}}</text>
  25. <text v-if="item.lastMessage.type == 'audio'" class="news">{{i18n.voiceMessage}}</text>
  26. <u-badge :type="type" max="99" :value="item.unReadCount"></u-badge>
  27. </view>
  28. </view>
  29. </view>
  30. </view>
  31. <view class="box ">
  32. <view style="margin-bottom: 26rpx;" v-for="(item,idx) in list" :key="idx" @click="chat(item)">
  33. <!-- <u-swipe-action>
  34. <u-swipe-action-item :options="options1" @click.stop="dele">
  35. <view class="">
  36. <view class=""> -->
  37. <view class="u-flex " v-if="item.conversationId != '13523652365'">
  38. <image v-if="item.lastMessage.ext.user.easemob_username == user_no"
  39. :src="item.lastMessage.ext.user_other.image || item.lastMessage.ext.user_other.avatar"
  40. style="width: 88rpx;height: 88rpx;" mode="">
  41. <image v-else :src="item.lastMessage.ext.user.avatar" style="width: 88rpx;height: 88rpx;"
  42. mode="">
  43. </image>
  44. <view class="u-row-between"
  45. style="display: flex;flex-direction: column;margin-left: 20rpx;width: 85%;">
  46. <view class="u-flex u-row-between">
  47. <view class="name" v-if="item.lastMessage.ext.user.easemob_username == user_no">
  48. {{ item.lastMessage.ext.user_other.merchant_name ||item.lastMessage.ext.user_other.nickname || item.lastMessage.ext.user_other.member.easemob_nickname}}
  49. </view>
  50. <view class="name" v-else>
  51. {{ item.lastMessage.ext.user.nickname}}
  52. </view>
  53. <!-- <view class="name">{{item.lastMessage.ext.user}}</view> -->
  54. <view class="time">
  55. {{new Date(item.lastMessage.time).getFullYear()}}-{{new Date(item.lastMessage.time).getMonth() + 1}}-{{new Date(item.lastMessage.time).getDate()}}
  56. {{new Date(item.lastMessage.time).toTimeString().substr(0, 8)}}
  57. </view>
  58. </view>
  59. <view class="u-flex u-row-between"
  60. style="border-bottom: 2rpx solid #eae7e7;padding-bottom: 26rpx;margin-top: 10rpx;">
  61. <text v-if="item.lastMessage.msg" class="news">{{item.lastMessage.msg}}</text>
  62. <text v-if="item.lastMessage.type == 'img'" class="news">{{i18n.picture}}</text>
  63. <text v-if="item.lastMessage.type == 'audio'" class="news">{{i18n.voiceMessage}}</text>
  64. <u-badge :type="type" max="99" :value="item.unReadCount"></u-badge>
  65. </view>
  66. </view>
  67. </view>
  68. <!-- </view>
  69. </view>
  70. </u-swipe-action-item>
  71. </u-swipe-action> -->
  72. </view>
  73. <!-- <view style="margin-bottom: 26rpx;" v-for="(item,idx) in list" :key="idx" @click="chat(item)">
  74. <view class="u-flex " v-if="item.conversationId != '13523652365'">
  75. <image :src=" item.lastMessage.ext.user_other.avatar" style="width: 88rpx;height: 88rpx;" mode="">
  76. </image>
  77. <view class="u-row-between"
  78. style="display: flex;flex-direction: column;margin-left: 20rpx;width: 85%;">
  79. <view class="u-flex u-row-between">
  80. <view class="name" v-if="item.lastMessage.from == user_no">
  81. {{ item.lastMessage.ext.user_other.merchant_name ||item.lastMessage.ext.user_other.nickname}}
  82. </view>
  83. <view class="name" v-else>
  84. {{ item.lastMessage.ext.user.nickname}}
  85. </view>
  86. <view class="time">
  87. {{new Date(item.lastMessage.time).getFullYear()}}-{{new Date(item.lastMessage.time).getMonth() + 1}}-{{new Date(item.lastMessage.time).getDate()}}
  88. {{new Date(item.lastMessage.time).toTimeString().substr(0, 8)}}
  89. </view>
  90. </view>
  91. <view class="u-flex u-row-between"
  92. style="border-bottom: 2rpx solid #979797;padding-bottom: 26rpx;margin-top: 10rpx;">
  93. <text v-if="item.lastMessage.msg" class="news">{{item.lastMessage.msg}}</text>
  94. <text v-if="item.lastMessage.type == 'img'" class="news">图片</text>
  95. <u-badge :type="type" max="99" :value="item.unReadCount"></u-badge>
  96. </view>
  97. </view>
  98. </view>
  99. </view> -->
  100. </view>
  101. </view>
  102. </template>
  103. <script>
  104. import {
  105. conn,
  106. } from '@/utils/WebIM';
  107. export default {
  108. data() {
  109. return {
  110. type: "error",
  111. value: 1,
  112. list: [],
  113. user_no: '',
  114. options1: [{
  115. text: '删除',
  116. style: {
  117. backgroundColor: 'red',
  118. }
  119. }]
  120. };
  121. },
  122. onLoad() {
  123. this.user_no = uni.getStorageSync('user_no')
  124. // this.getlist()
  125. },
  126. onShow() {
  127. this.getlist()
  128. },
  129. computed: {
  130. i18n() {
  131. return this.$t('index')
  132. }
  133. },
  134. methods: {
  135. dele() {
  136. let options = {
  137. // 会话 ID:单聊为对方的用户 ID,群聊为群组 ID。
  138. channel: "channel",
  139. // 会话类型:(默认) `singleChat`:单聊;`groupChat`:群聊。
  140. chatType: "singleChat",
  141. // 删除会话时是否同时删除服务端漫游消息。
  142. deleteRoam: true,
  143. };
  144. conn
  145. .deleteConversation(options)
  146. .then((res) => {
  147. console.log(res);
  148. })
  149. .catch((e) => {
  150. // 删除失败。
  151. });
  152. },
  153. getlist() {
  154. conn.getServerConversations({
  155. pageSize: 50,
  156. cursor: ''
  157. }).then((res) => {
  158. console.log(res);
  159. this.list = res.data.conversations
  160. })
  161. },
  162. tokefu() {
  163. uni.navigateTo({
  164. url: '/pageA/service/service'
  165. })
  166. },
  167. chat(item) {
  168. if (item.lastMessage.ext.user.easemob_username == this.user_no) {
  169. uni.navigateTo({
  170. url: '/pageA/chat/chat?user_other_no=' + item.conversationId + '&user_other=' +
  171. encodeURIComponent(JSON
  172. .stringify(item.lastMessage.ext.user_other))
  173. })
  174. } else {
  175. uni.navigateTo({
  176. url: '/pageA/chat/chat?user_other_no=' + item.conversationId + '&user_other=' +
  177. encodeURIComponent(
  178. JSON.stringify(item.lastMessage.ext.user))
  179. })
  180. }
  181. }
  182. }
  183. }
  184. </script>
  185. <style lang="scss">
  186. .back {
  187. width: 750rpx;
  188. // height: 1624rpx;
  189. background: #F4F4F4;
  190. padding: 20rpx 24rpx;
  191. box-sizing: border-box;
  192. .input {
  193. width: 702rpx;
  194. height: 72rpx;
  195. background: #FFFFFF;
  196. border-radius: 36rpx;
  197. padding: 0 24rpx;
  198. box-sizing: border-box;
  199. }
  200. .kefu {
  201. width: 702rpx;
  202. height: 156rpx;
  203. background: #FFFFFF;
  204. border-radius: 16rpx;
  205. padding: 36rpx 24rpx 32rpx;
  206. box-sizing: border-box;
  207. margin-top: 24rpx;
  208. }
  209. .name {
  210. font-family: PingFangSC, PingFang SC;
  211. font-weight: 400;
  212. font-size: 32rpx;
  213. color: #222222;
  214. line-height: 44rpx;
  215. text-align: left;
  216. font-style: normal;
  217. }
  218. .time {
  219. font-family: SFPro, SFPro;
  220. font-weight: 400;
  221. font-size: 20rpx;
  222. color: #666666;
  223. line-height: 24rpx;
  224. text-align: left;
  225. font-style: normal;
  226. }
  227. .news {
  228. font-family: PingFangSC, PingFang SC;
  229. font-weight: 400;
  230. font-size: 24rpx;
  231. color: #666666;
  232. line-height: 34rpx;
  233. text-align: left;
  234. font-style: normal;
  235. }
  236. .box {
  237. width: 702rpx;
  238. min-height: 1156rpx;
  239. background: #FFFFFF;
  240. border-radius: 16rpx;
  241. padding: 40rpx 24rpx 20rpx;
  242. box-sizing: border-box;
  243. margin-top: 20rpx;
  244. }
  245. }
  246. </style>