Commit 7cc9176d4aab97e371e58cd353961810b2c428c4

Authored by yangzhi
1 parent e50342dd

猝死的边缘疯狂试探

Showing 254 changed files with 5261 additions and 2595 deletions

Too many changes.

To preserve performance only 100 of 254 files are displayed.

uniapp-wuduhuajiao/App.vue
... ... @@ -20,6 +20,7 @@
20 20 /*#endif*/
21 21 import config from '@/common/config/config.js'
22 22 import service from '@/service/service.js'
  23 + import API from '@/apis/index.js'
23 24 export default {
24 25 onLaunch() {
25 26 // 检测客户端更新
... ... @@ -70,6 +71,13 @@
70 71 methods: {
71 72 handleOnMessage(msg) {
72 73 let user = this.$store.state.user;
  74 + if(msg.method == 'initMessage'){
  75 + // this.setTabBarBadge(msg.unreadMessageCount);
  76 + }
  77 + if(msg.messageType == 'messageRead' || msg.messageType == 'text'){
  78 + getApp().globalData.updateUnReadMessageCount();
  79 + }
  80 +
73 81 if (msg.messageType == 'joinRoom' && msg.intToUserId == user.id && user.user_type.length) {
74 82 console.log('joinRoom', msg);
75 83 uni.showModal({
... ... @@ -160,18 +168,34 @@
160 168 });
161 169 uni.$on('closeSocket', () => {
162 170 this.globalData.socketTask.close();
163   - })
  171 + });
164 172 uni.$on('openSocket', () => {
165 173 this.globalData.socketTask.onMessage((msg) => {
166 174 console.log('openSocket.onMessage', msg);
167   -
168 175 });
169   - })
  176 + });
  177 + this.globalData.updateUnReadMessageCount();
170 178 },
171 179 },
172 180 globalData: {
173 181 typeNum: 1,
174   - socketTask: {}
  182 + socketTask: {},
  183 + updateUnReadMessageCount(){
  184 + API.message.getUserUnReadMessageCount().then(res=>{
  185 + console.log('getUserUnReadMessageCount',res);
  186 + let badgeNum = res.data;
  187 + if(badgeNum>0){
  188 + uni.setTabBarBadge({
  189 + index: 1,
  190 + text: badgeNum > 99 ? '99+' : badgeNum.toString()
  191 + });
  192 + }else{
  193 + uni.removeTabBarBadge({
  194 + index: 1,
  195 + });
  196 + }
  197 + })
  198 + }
175 199 }
176 200 };
177 201 </script>
... ...
uniapp-wuduhuajiao/apis/modules/message.js
... ... @@ -28,6 +28,10 @@ export default {
28 28 getMessageList(sendUserId,receviveUserId){
29 29 return request.get(`/message/getMessageList/${sendUserId}/${receviveUserId}`)
30 30 },
  31 + //未读消息条数
  32 + getUserUnReadMessageCount(){
  33 + return request.get(`/message/userUnReadMessageCount`);
  34 + },
31 35  
32 36  
33 37 }
34 38 \ No newline at end of file
... ...
uniapp-wuduhuajiao/common/config/config.js
... ... @@ -12,6 +12,7 @@
12 12 * @ 相关文档 https://doc.fastadmin.net/wanlshop/265.html
13 13 */
14 14 export default {
  15 + baseurl_chaoge:'https://huajiao.t1j2.com',
15 16 appurl_chaoge: 'https://huajiao.t1j2.com/api',
16 17 socketurl: 'wss://huajiao.t1j2.com/api/message/websocket', //如果是ws:// 地址为ws://你服务器IP:7272 如 ws://123.4.56.78:7272,使用wss 后面不需要添加 :7272 端口
17 18 cdnurl: 'http://app.xn--43vp3ce98aj8m.com',
... ...
uniapp-wuduhuajiao/pages/chat/chat.vue
... ... @@ -6,25 +6,34 @@
6 6 <view class="content-box-loading" v-if="!loading">
7 7 <u-loading mode="flower"></u-loading>
8 8 </view>
  9 + <view class="invite-btn" @click="handleInviteServieUser">
  10 + 邀请客服参与
  11 + </view>
9 12 <view class="message" v-for="(item, index) in messageList" :key="index" :id="`msg-${item.id}`">
10 13 <view class="message-item " :class="item.isItMe ? 'right' : 'left'">
11 14 <image class="img" :src="item.fromUserHeadImg">
12 15 </image>
13 16 <text class="username">{{item.roleName}}</text>
14   - <text class="read-status" :style="{color:item.state?'#999':'#333'}" v-if="item.userId == myMd5Id">{{ item.state?'已读':'未读' }}</text>
  17 + <text class="read-status" :style="{color:item.state?'#999':'#333'}"
  18 + v-if="item.userId == myMd5Id">{{ item.state?'已读':'未读' }}</text>
15 19 <!-- contentType = 1 文本 -->
16   - <view class="content" v-if="item.contentType == 'text'">{{ item.content }}</view>
  20 + <view class="content" v-if="item.contentType == 'text'">
  21 + <block v-for="(msg,index) in item.content">
  22 + <text v-if="msg.type == 'text'">{{ msg.content }}</text>
  23 + <image v-if="msg.type == 'emjio'" :src="msg.content" style="width:50rpx;height:50rpx"></image>
  24 + </block>
  25 + </view>
17 26 <!-- contentType = 2 语音 -->
18 27 <view class="content contentType2" :class="[{ 'content-type-right': item.isItMe }]"
19   - v-if="item.contentType == 2" @tap="handleAudio(item)" hover-class="contentType2-hover-class"
20   - :style="{width:`${130+(item.contentDuration*2)}rpx`}">
  28 + v-if="item.contentType == 'voice'" @tap="handleAudio(item)" hover-class="contentType2-hover-class"
  29 + :style="{width:`${130+(item.length*2)}rpx`}">
21 30 <view class="voice_icon" :class="[
22 31 { voice_icon_right: item.isItMe },
23 32 { voice_icon_left: !item.isItMe },
24 33 { voice_icon_right_an: item.anmitionPlay && item.isItMe },
25 34 { voice_icon_left_an: item.anmitionPlay && !item.isItMe }
26 35 ]"></view>
27   - <view class="">{{ item.contentDuration }}''</view>
  36 + <view class="">{{ item.content.length }}''</view>
28 37 </view>
29 38 <!-- contentType = 3 图片 -->
30 39 <view class="content contentType3" v-if="item.contentType == 3" @tap="viewImg([item.content])">
... ... @@ -43,6 +52,8 @@
43 52 <image v-if="chatType === 'keyboard'" class="icon_img" :src="require('@/static/keyboard.png')"
44 53 @click="switchChatType('voice')"></image>
45 54 <!-- #endif -->
  55 + <image class="icon_img" :src="require('@/static/face.png')"
  56 + @click="switchFun('emj')"></image>
46 57 <view class="input-box-flex-grow">
47 58 <input v-if="chatType === 'voice'" type="text" class="content" id="input" v-model="formData.content"
48 59 :hold-keyboard="true" :confirm-type="'send'" :confirm-hold="true"
... ... @@ -54,15 +65,11 @@
54 65 {{ voiceTitle }}
55 66 </view>
56 67 </view>
57   -
58 68 <!-- 功能性按钮 -->
59   - <image class=" icon_btn_add" :src="require('@/static/add.png')" @tap="switchFun"></image>
  69 + <!-- <image class=" icon_btn_add" :src="require('@/static/add.png')" @tap="switchFun"></image> -->
60 70  
61   - <!-- #ifdef H5 -->
62   - <button class="btn" type="primary" size="mini" @touchend.prevent="sendMsg(null)">发送</button>
63   - <!-- #endif -->
  71 + <button class="btn" type="primary" size="mini" @touchend.prevent="sendMsg(null)" v-if="showEmoji">发送</button>
64 72 </view>
65   -
66 73 <view class="fun-box" :class="{'show-fun-box':showFunBtn}">
67 74 <u-grid :col="4" hover-class="contentType2-hover-class" :border="false" @click="clickGrid">
68 75 <u-grid-item v-for="(item, index) in funList" :index="index" :key="index" bg-color="#eaeaea">
... ... @@ -71,6 +78,15 @@
71 78 </u-grid-item>
72 79 </u-grid>
73 80 </view>
  81 + <view class="popup-layer u-border-top" @touchmove.stop.prevent="discard" v-show="showEmoji">
  82 + <swiper class="emoji-swiper" indicator-dots="true" duration="150" >
  83 + <swiper-item v-for="(page,pid) in emojiTree" :key="pid">
  84 + <view v-for="(em,eid) in page" :key="eid" @click="addEmoji(em)" class="emoji-item">
  85 + <image mode="widthFix" :src="getEmojiUrl(em.url)" class="emoji-item-img"></image>
  86 + </view>
  87 + </swiper-item>
  88 + </swiper>
  89 + </view>
74 90  
75 91 </view>
76 92  
... ... @@ -94,9 +110,12 @@
94 110 import {
95 111 mapState
96 112 } from 'vuex';
  113 + import emojiMixin from '@/pages/chat/emojiMixin.js'
97 114 import service from '@/service/service.js'
  115 + import config from '@/common/config/config.js';
98 116 let socketTask = getApp().globalData.socketTask;
99 117 export default {
  118 + mixins:[emojiMixin],
100 119 data() {
101 120 return {
102 121 intId: 0,
... ... @@ -175,6 +194,19 @@
175 194 ...mapState(['user', 'statistics', 'common']),
176 195 },
177 196 methods: {
  197 + handleInviteServieUser(){
  198 + let that=this;
  199 + uni.showModal({
  200 + content:'是否确认跳转到多人聊天?',
  201 + success({confirm}) {
  202 + if(confirm){
  203 + uni.redirectTo({
  204 + url:`/pages/meeting/meeting?userid=${that.intId}&username=${that.fromUserInfo.fromUserName}`
  205 + })
  206 + }
  207 + }
  208 + })
  209 + },
178 210 addMessage(data) {
179 211 this.messageList.push(data);
180 212 },
... ... @@ -186,30 +218,40 @@
186 218 return;
187 219 }
188 220 this.API.message.getMessageList(this.md5Id, this.myMd5Id).then(res => {
189   - console.log('getMessageList',res)
  221 + console.log('getMessageList', res)
190 222 this.messageList = res.data.list.map(t => {
191 223 t.isItMe = t.sendUserId == this.myMd5Id;
192 224 if (t.sendUserId == this.md5Id) {
193 225 t.fromUserHeadImg = this.fromUserInfo.fromUserHeadImg ||
194 226 '/static/head/head1.png'
195   - t.roleName = this.fromUserInfo.user_type && this.fromUserInfo.user_type.includes(1)?'供方':'需方';
  227 + t.roleName = this.fromUserInfo.user_type && this.fromUserInfo.user_type
  228 + .includes(1) ? '供方' : '需方';
196 229 } else {
197 230 t.fromUserHeadImg = this.user.avatar || '/static/head/head2.png';
198   - t.roleName = this.user.user_type && this.user.user_type.includes(1)?'供方':'需方';
  231 + t.roleName = this.user.user_type && this.user.user_type.includes(1) ? '供方' :
  232 + '需方';
199 233 }
200 234 t.userId = t.sendUserId;
  235 + if(t.contentType == 'text'){
  236 + t.content = this.replaceEmoji(t.content)
  237 + }
  238 + if(t.contentType == 'voice'){
  239 + t.content = JSON.parse(t.content)
  240 + }
201 241 return t;
202 242 });
203 243 this.updateReadMessage();
204 244 })
205 245 },
206   - updateReadMessage(){
  246 + updateReadMessage() {
  247 + let params = JSON.stringify({
  248 + method: 'UpdateReadMessage',
  249 + formUserId: this.md5Id,
  250 + token: service.getTokenChaoge()
  251 + });
  252 + console.log('updateReadMessage', params);
207 253 socketTask.send({
208   - data: JSON.stringify({
209   - method: 'UpdateReadMessage',
210   - fromUserId: this.md5Id,
211   - token: service.getTokenChaoge()
212   - }),
  254 + data: params,
213 255 success() {
214 256 console.log('UpdateReadMessage success');
215 257 }
... ... @@ -244,12 +286,18 @@
244 286 switchChatType(type) {
245 287 this.chatType = type;
246 288 this.showFunBtn = false;
  289 + this.showEmoji = false;
247 290 },
248 291 //切换功能性按钮
249   - switchFun() {
250   - this.chatType = 'keyboard'
251   - this.showFunBtn = !this.showFunBtn;
252   - uni.hideKeyboard()
  292 + switchFun(type) {
  293 + // this.showFunBtn = !this.showFunBtn;
  294 +
  295 + console.log('switchFun',type);
  296 + if(type == 'emj'){
  297 + this.chatType = 'voice';
  298 + uni.hideKeyboard();
  299 + this.showEmoji = true;
  300 + }
253 301 },
254 302 //发送消息
255 303 sendMsg(data) {
... ... @@ -264,10 +312,9 @@
264 312 if (data) {
265 313 if (data.contentType == 'voice') {
266 314 //说明是发送语音
267   - params.content = data.content;
  315 + params.messageContent = data.messageContent;
  316 + params.length = data.length;
268 317 params.messageType = 'voice';
269   - params.contentDuration = data.contentDuration;
270   - params.anmitionPlay = false;
271 318 } else if (data.contentType == 'image') {
272 319 //发送图片
273 320 params.content = data.content;
... ... @@ -277,7 +324,7 @@
277 324 //验证输入框书否为空字符传
278 325 return;
279 326 }
280   - console.log(params);
  327 + console.log(JSON.stringify(params));
281 328 socketTask.send({
282 329 data: JSON.stringify(params),
283 330 success(res) {
... ... @@ -316,6 +363,7 @@
316 363 if (this.showFunBtn) {
317 364 this.showFunBtn = false;
318 365 }
  366 + this.showEmoji = false;
319 367  
320 368 // #ifdef MP-WEIXIN
321 369 if (params.contentType == 1) {
... ... @@ -331,6 +379,7 @@
331 379 //用户触摸屏幕的时候隐藏键盘
332 380 touchstart() {
333 381 uni.hideKeyboard();
  382 + this.showEmoji = false;
334 383 },
335 384 // userid 用户id
336 385 linkToBusinessCard(userId) {
... ... @@ -399,6 +448,7 @@
399 448 tempFilePath,
400 449 duration
401 450 }) {
  451 + let that=this;
402 452 let contentDuration;
403 453 // #ifdef MP-WEIXIN
404 454 this.voiceTime = 0;
... ... @@ -425,21 +475,36 @@
425 475 // #endif
426 476  
427 477 this.recording = false;
428   - const params = {
429   - contentType: 'voice',
430   - content: tempFilePath,
431   - contentDuration: Math.ceil(contentDuration)
432   - };
433   - this.canSend && this.sendMsg(params);
  478 +
  479 + console.log('tempFilePath',tempFilePath);
  480 + uni.uploadFile({
  481 + url:config.appurl_chaoge+'/file/Uploader/chat_voice',
  482 + filePath:tempFilePath,
  483 + name: 'file',
  484 + success(res){
  485 + console.log('uploadfile ',res);
  486 + let data = JSON.parse(res.data);
  487 + if(data.data && data.data.url){
  488 + const params = {
  489 + contentType: 'voice',
  490 + length:contentDuration || 1,
  491 + messageContent:data.data.url,
  492 + };
  493 + that.canSend && that.sendMsg(params);
  494 + }
  495 + }
  496 + });
  497 +
434 498 },
435 499 //控制播放还是暂停音频文件
436 500 handleAudio(item) {
  501 + console.log('handleAudio',item);
437 502 this.AudioExam = item;
438 503 this.Audio.paused ? this.playAudio(item) : this.stopAudio(item);
439 504 },
440 505 //播放音频
441 506 playAudio(item) {
442   - this.Audio.src = item.content;
  507 + this.Audio.src = config.baseurl_chaoge+item.content.path;
443 508 this.Audio.hasBeenSentId = item.hasBeenSentId;
444 509 this.Audio.play();
445 510 item.anmitionPlay = true;
... ... @@ -471,6 +536,7 @@
471 536 sizeType: ['compressed'],
472 537 success: res => {
473 538 this.showFunBtn = false;
  539 + this.showEmoji = false;
474 540 for (let i = 0; i < res.tempFilePaths.length; i++) {
475 541 const params = {
476 542 contentType: 'image',
... ... @@ -520,7 +586,7 @@
520 586 userid,
521 587 username
522 588 } = info;
523   -
  589 +
524 590 this.API.message.getUserInfo(this.user.id).then(res => {
525 591 this.myMd5Id = res.data.user.userId;
526 592 })
... ... @@ -567,30 +633,37 @@
567 633  
568 634 //socket
569 635 uni.$on('socketMessage', (data) => {
570   - console.log('socketMessage',data);
  636 + console.log('socketMessage', data);
571 637 this.updateReadMessage();
572 638 if (data.messageType == 'text') {
573 639 let message = {
574   - isItMe:data.UserId == this.myMd5Id,
575   - content:data.toMessage,
576   - contentType:'text',
577   - userId:data.UserId
  640 + isItMe: data.UserId == this.myMd5Id,
  641 + content: data.toMessage,
  642 + contentType: 'text',
  643 + userId: data.UserId
578 644 };
579 645 if (data.UserId == this.md5Id) {
580 646 //别人
581 647 message.fromUserHeadImg = this.fromUserInfo.fromUserHeadImg ||
582 648 '/static/head/head1.png'
583   - message.roleName = this.fromUserInfo.user_type && this.fromUserInfo.user_type.includes(1)?'供方':'需方';
  649 + message.roleName = this.fromUserInfo.user_type && this.fromUserInfo.user_type.includes(1) ?
  650 + '供方' : '需方';
584 651 } else {
585 652 //我
586 653 message.fromUserHeadImg = this.user.avatar || '/static/head/head2.png';
587   - message.roleName = this.user.user_type && this.user.user_type.includes(1)?'供方':'需方';
  654 + message.roleName = this.user.user_type && this.user.user_type.includes(1) ? '供方' : '需方';
  655 + }
  656 + if(message.contentType == 'text'){
  657 + message.content = this.replaceEmoji(message.content)
  658 + }
  659 + if(message.contentType == 'voice'){
  660 + message.content = JSON.parse(message.content)
588 661 }
589 662 this.addMessage(message);
590 663 }
591   - if(data.messageType == 'messageRead'){
592   - if(data.userId == this.md5Id){
593   - this.messageList = this.messageList.map(t=>{
  664 + if (data.messageType == 'messageRead') {
  665 + if (data.userId == this.md5Id) {
  666 + this.messageList = this.messageList.map(t => {
594 667 t.state = 1;
595 668 return t;
596 669 });
... ... @@ -623,6 +696,7 @@
623 696 // #endif
624 697 } else {
625 698 this.showFunBtn = false;
  699 + this.showEmoji = false;
626 700 }
627 701 });
628 702 }
... ...
uniapp-wuduhuajiao/pages/chat/emoji/100.gif 0 → 100644

1.72 KB

uniapp-wuduhuajiao/pages/chat/emoji/101.gif 0 → 100644

1.5 KB

uniapp-wuduhuajiao/pages/chat/emoji/102.gif 0 → 100644

1.71 KB

uniapp-wuduhuajiao/pages/chat/emoji/103.gif 0 → 100644

1.72 KB

uniapp-wuduhuajiao/pages/chat/emoji/104.gif 0 → 100644

1.89 KB

uniapp-wuduhuajiao/pages/chat/emoji/105.gif 0 → 100644

1.78 KB

uniapp-wuduhuajiao/pages/chat/emoji/106.gif 0 → 100644

3.41 KB

uniapp-wuduhuajiao/pages/chat/emoji/107.gif 0 → 100644

3.76 KB

uniapp-wuduhuajiao/pages/chat/emoji/108.gif 0 → 100644

4.55 KB

uniapp-wuduhuajiao/pages/chat/emoji/109.gif 0 → 100644

3.07 KB

uniapp-wuduhuajiao/pages/chat/emoji/110.gif 0 → 100644

3.52 KB

uniapp-wuduhuajiao/pages/chat/emoji/111.gif 0 → 100644

7.67 KB

uniapp-wuduhuajiao/pages/chat/emoji/112.gif 0 → 100644

2.15 KB

uniapp-wuduhuajiao/pages/chat/emoji/113.gif 0 → 100644

1.6 KB

uniapp-wuduhuajiao/pages/chat/emoji/114.gif 0 → 100644

3.73 KB

uniapp-wuduhuajiao/pages/chat/emoji/115.gif 0 → 100644

1.48 KB

uniapp-wuduhuajiao/pages/chat/emoji/116.gif 0 → 100644

1.33 KB

uniapp-wuduhuajiao/pages/chat/emoji/117.gif 0 → 100644

2.9 KB

uniapp-wuduhuajiao/pages/chat/emoji/118.gif 0 → 100644

7.33 KB

uniapp-wuduhuajiao/pages/chat/emoji/119.gif 0 → 100644

7.34 KB

uniapp-wuduhuajiao/pages/chat/emoji/120.gif 0 → 100644

1.68 KB

uniapp-wuduhuajiao/pages/chat/emoji/121.gif 0 → 100644

1.78 KB

uniapp-wuduhuajiao/pages/chat/emoji/122.gif 0 → 100644

2.87 KB

uniapp-wuduhuajiao/pages/chat/emoji/123.gif 0 → 100644

1.86 KB

uniapp-wuduhuajiao/pages/chat/emoji/124.gif 0 → 100644

2.16 KB

uniapp-wuduhuajiao/pages/chat/emoji/125.gif 0 → 100644

2.33 KB

uniapp-wuduhuajiao/pages/chat/emoji/126.gif 0 → 100644

3.89 KB

uniapp-wuduhuajiao/pages/chat/emoji/127.gif 0 → 100644

2.45 KB

uniapp-wuduhuajiao/pages/chat/emoji/128.gif 0 → 100644

3.17 KB

uniapp-wuduhuajiao/pages/chat/emoji/129.gif 0 → 100644

5 KB

uniapp-wuduhuajiao/pages/chat/emoji/130.gif 0 → 100644

1.65 KB

uniapp-wuduhuajiao/pages/chat/emoji/131.gif 0 → 100644

5.38 KB

uniapp-wuduhuajiao/pages/chat/emoji/132.gif 0 → 100644

6.6 KB

uniapp-wuduhuajiao/pages/chat/emoji/133.gif 0 → 100644

4.1 KB

uniapp-wuduhuajiao/pages/chat/emoji/134.gif 0 → 100644

2.05 KB

uniapp-wuduhuajiao/pages/chat/emoji/135.gif 0 → 100644

11.7 KB

uniapp-wuduhuajiao/pages/chat/emoji/136.gif 0 → 100644

1.36 KB

uniapp-wuduhuajiao/pages/chat/emoji/137.gif 0 → 100644

1.16 KB

uniapp-wuduhuajiao/pages/chat/emoji/138.gif 0 → 100644

1.6 KB

uniapp-wuduhuajiao/pages/chat/emoji/139.gif 0 → 100644

1.67 KB

uniapp-wuduhuajiao/pages/chat/emoji/140.gif 0 → 100644

9.64 KB

uniapp-wuduhuajiao/pages/chat/emoji/141.gif 0 → 100644

3.23 KB

uniapp-wuduhuajiao/pages/chat/emoji/142.gif 0 → 100644

12 KB

uniapp-wuduhuajiao/pages/chat/emoji/143.gif 0 → 100644

4 KB

uniapp-wuduhuajiao/pages/chat/emoji/144.gif 0 → 100644

1.49 KB

uniapp-wuduhuajiao/pages/chat/emoji/145.gif 0 → 100644

4.21 KB

uniapp-wuduhuajiao/pages/chat/emoji/146.gif 0 → 100644

4.63 KB

uniapp-wuduhuajiao/pages/chat/emoji/147.gif 0 → 100644

3.59 KB

uniapp-wuduhuajiao/pages/chat/emoji/148.gif 0 → 100644

1.64 KB

uniapp-wuduhuajiao/pages/chat/emoji/149.gif 0 → 100644

5.85 KB

uniapp-wuduhuajiao/pages/chat/emoji/150.gif 0 → 100644

2.96 KB

uniapp-wuduhuajiao/pages/chat/emoji/151.gif 0 → 100644

3.6 KB

uniapp-wuduhuajiao/pages/chat/emoji/152.gif 0 → 100644

1.45 KB

uniapp-wuduhuajiao/pages/chat/emoji/153.gif 0 → 100644

1.97 KB

uniapp-wuduhuajiao/pages/chat/emoji/154.gif 0 → 100644

2.24 KB

uniapp-wuduhuajiao/pages/chat/emoji/155.gif 0 → 100644

2.35 KB

uniapp-wuduhuajiao/pages/chat/emoji/156.gif 0 → 100644

1.14 KB

uniapp-wuduhuajiao/pages/chat/emoji/157.gif 0 → 100644

4.74 KB

uniapp-wuduhuajiao/pages/chat/emoji/158.gif 0 → 100644

2.5 KB

uniapp-wuduhuajiao/pages/chat/emoji/159.gif 0 → 100644

1.5 KB

uniapp-wuduhuajiao/pages/chat/emoji/160.gif 0 → 100644

2.53 KB

uniapp-wuduhuajiao/pages/chat/emoji/161.gif 0 → 100644

1.1 KB

uniapp-wuduhuajiao/pages/chat/emoji/162.gif 0 → 100644

1.18 KB

uniapp-wuduhuajiao/pages/chat/emoji/163.gif 0 → 100644

971 Bytes

uniapp-wuduhuajiao/pages/chat/emoji/164.gif 0 → 100644

988 Bytes

uniapp-wuduhuajiao/pages/chat/emoji/165.gif 0 → 100644

1.33 KB

uniapp-wuduhuajiao/pages/chat/emoji/166.gif 0 → 100644

1.1 KB

uniapp-wuduhuajiao/pages/chat/emoji/167.gif 0 → 100644

2.47 KB

uniapp-wuduhuajiao/pages/chat/emoji/168.gif 0 → 100644

4.28 KB

uniapp-wuduhuajiao/pages/chat/emoji/169.gif 0 → 100644

979 Bytes

uniapp-wuduhuajiao/pages/chat/emoji/170.gif 0 → 100644

1.1 KB

uniapp-wuduhuajiao/pages/chat/emoji/171.gif 0 → 100644

991 Bytes

uniapp-wuduhuajiao/pages/chat/emoji/172.gif 0 → 100644

3.55 KB

uniapp-wuduhuajiao/pages/chat/emoji/173.gif 0 → 100644

2.14 KB

uniapp-wuduhuajiao/pages/chat/emoji/174.gif 0 → 100644

2.33 KB

uniapp-wuduhuajiao/pages/chat/emoji/175.gif 0 → 100644

1.18 KB

uniapp-wuduhuajiao/pages/chat/emoji/176.gif 0 → 100644

1.15 KB

uniapp-wuduhuajiao/pages/chat/emoji/177.gif 0 → 100644

1.12 KB

uniapp-wuduhuajiao/pages/chat/emoji/178.gif 0 → 100644

1.51 KB

uniapp-wuduhuajiao/pages/chat/emoji/179.gif 0 → 100644

1.47 KB

uniapp-wuduhuajiao/pages/chat/emoji/180.gif 0 → 100644

1.5 KB

uniapp-wuduhuajiao/pages/chat/emoji/181.gif 0 → 100644

1.55 KB

uniapp-wuduhuajiao/pages/chat/emoji/182.gif 0 → 100644

1.51 KB

uniapp-wuduhuajiao/pages/chat/emoji/183.gif 0 → 100644

1.55 KB

uniapp-wuduhuajiao/pages/chat/emoji/184.gif 0 → 100644

3.27 KB

uniapp-wuduhuajiao/pages/chat/emoji/185.gif 0 → 100644

1.54 KB

uniapp-wuduhuajiao/pages/chat/emoji/186.gif 0 → 100644

1.48 KB

uniapp-wuduhuajiao/pages/chat/emoji/187.gif 0 → 100644

1.5 KB

uniapp-wuduhuajiao/pages/chat/emoji/188.gif 0 → 100644

2.05 KB

uniapp-wuduhuajiao/pages/chat/emoji/189.gif 0 → 100644

2.34 KB

uniapp-wuduhuajiao/pages/chat/emoji/190.gif 0 → 100644

2.4 KB

uniapp-wuduhuajiao/pages/chat/emoji/191.gif 0 → 100644

1.02 KB

uniapp-wuduhuajiao/pages/chat/emoji/192.gif 0 → 100644

1.34 KB

uniapp-wuduhuajiao/pages/chat/emoji/193.gif 0 → 100644

1.08 KB

uniapp-wuduhuajiao/pages/chat/emoji/194.gif 0 → 100644

3.49 KB

uniapp-wuduhuajiao/pages/chat/emoji/195.gif 0 → 100644

2.94 KB