1
1
<template >
2
- <div class =" chat-wrap " >
2
+ <div class =" cl-chat__wrap " >
3
3
<!-- 聊天窗口 -->
4
4
<cl-dialog :visible.sync =" visible" v-bind =" conf" >
5
- <div class =" chat-box " >
5
+ <div class =" cl-chat " >
6
6
<!-- 会话区域 -->
7
- <div class =" chat-box__session " >
8
- <div class =" chat-box__session -search" >
7
+ <div class =" cl-chat__session " >
8
+ <div class =" cl-chat__session -search" >
9
9
<el-input
10
10
v-model =" session.keyWord"
11
11
placeholder =" 搜索"
18
18
</div >
19
19
20
20
<!-- 会话列表 -->
21
- <ul class =" chat-box__session -list scroller1" >
21
+ <ul class =" cl-chat__session -list scroller1" v-if = " sessionList.length > 0 " >
22
22
<li
23
- class =" chat-box__session -item"
23
+ class =" cl-chat__session -item"
24
24
v-for =" (item, index) in sessionList"
25
25
:key =" index"
26
26
:class =" {
47
47
</div >
48
48
</li >
49
49
</ul >
50
+
51
+ <!-- 空态 -->
52
+ <div class =" cl-chat__session-empty" v-else >
53
+ 没有搜索到内容...
54
+ </div >
50
55
</div >
51
56
52
57
<!-- 会话详情 -->
53
- <div class =" chat-box__detail " >
58
+ <div class =" cl-chat__detail " >
54
59
<template v-if =" session .current " >
55
60
<div
56
- class =" chat-box__detail -container scroller1"
61
+ class =" cl-chat__detail -container scroller1"
57
62
ref =" scroller"
58
63
v-loading =" message.loading"
59
64
>
60
65
<!-- 加载更多 -->
61
- <div class =" chat-box__detail -more" v-if =" message.list.length > 0" >
66
+ <div class =" cl-chat__detail -more" v-if =" message.list.length > 0" >
62
67
<el-button
63
68
round
64
69
size =" mini"
72
77
<message :list =" message.list" />
73
78
</div >
74
79
75
- <div class =" chat-box__detail -footer" >
80
+ <div class =" cl-chat__detail -footer" >
76
81
<!-- 工具栏 -->
77
- <div class =" chat-box__opbar " >
82
+ <div class =" cl-chat__opbar " >
78
83
<ul >
79
84
<!-- 表情 -->
80
85
<li >
93
98
</el-popover >
94
99
</li >
95
100
<!-- 图片上传 -->
96
- <li >
101
+ <li hidden >
97
102
<cl-upload
98
103
accept =" image/*"
99
104
list-type
103
108
</cl-upload >
104
109
</li >
105
110
<!-- 视频上传 -->
106
- <li >
111
+ <li hidden >
107
112
<cl-upload
108
113
accept =" video/*"
109
114
list-type
126
131
</div >
127
132
128
133
<!-- 输入框,发送按钮 -->
129
- <div class =" chat-box__input " >
134
+ <div class =" cl-chat__input " >
130
135
<el-input
131
136
v-model =" message.value"
132
137
placeholder =" 请描述您想咨询的问题"
158
163
159
164
<script >
160
165
import dayjs from " dayjs" ;
161
- import io from " socket.io-client" ;
162
- import { isString , debounce } from " cl-admin/utils" ;
163
166
import { mapGetters } from " vuex" ;
167
+ import { isString , debounce } from " cl-admin/utils" ;
168
+ import io from " socket.io-client" ;
164
169
import { socketUrl } from " @/config/env" ;
165
170
import Emoji from " ./emoji" ;
166
171
import Message from " ./message" ;
@@ -180,14 +185,16 @@ export default {
180
185
data () {
181
186
return {
182
187
visible: false ,
188
+ socket: null ,
183
189
conf: {
184
190
title: " 聊天对话框" ,
191
+ height: " 650px" ,
192
+ width: " 1000px" ,
185
193
props: {
186
194
modal: true ,
187
- " custom-class " : " chat-box__wrap " ,
195
+ customClass : " cl-chat__dialog " ,
188
196
" append-to-body" : true ,
189
- " close-on-click-modal" : false ,
190
- width: " 1000px"
197
+ " close-on-click-modal" : false
191
198
}
192
199
},
193
200
message: {
@@ -212,8 +219,7 @@ export default {
212
219
},
213
220
emoji: {
214
221
visible: false
215
- },
216
- socket: null
222
+ }
217
223
};
218
224
},
219
225
@@ -233,28 +239,26 @@ export default {
233
239
}
234
240
},
235
241
236
- mounted () {
237
- this .socket = io (` ${ socketUrl} ?isAdmin=true&token=${ this .token } ` );
238
-
239
- this .socket .on (" connect" , () => {
240
- console .log (" socket connect" );
241
- });
242
-
243
- this .socket .on (" admin" , msg => {
244
- this .onMessage (msg);
245
- });
246
-
247
- this .socket .on (" error" , err => {
248
- console .log (err);
249
- });
250
-
251
- this .socket .on (" disconnect" , () => {
252
- console .log (" disconnect connect" );
253
- });
242
+ created () {
243
+ // this.socket = io(`${socketUrl}?isAdmin=true&token=${this.token}`);
244
+ // this.socket.on("connect", () => {
245
+ // console.log("socket connect");
246
+ // });
247
+ // this.socket.on("admin", msg => {
248
+ // this.onMessage(msg);
249
+ // });
250
+ // this.socket.on("error", err => {
251
+ // console.log(err);
252
+ // });
253
+ // this.socket.on("disconnect", () => {
254
+ // console.log("disconnect connect");
255
+ // });
254
256
},
255
257
256
258
destroyed () {
257
- this .socket .close ();
259
+ if (this .socket ) {
260
+ this .socket .close ();
261
+ }
258
262
},
259
263
260
264
methods: {
@@ -342,7 +346,7 @@ export default {
342
346
order: " updateTime" ,
343
347
sort: " desc"
344
348
})
345
- .then (async res => {
349
+ .then (res => {
346
350
this .session .list = res .list ;
347
351
this .session .pagination = res .pagination ;
348
352
@@ -411,7 +415,10 @@ export default {
411
415
scrollToBottom: debounce (function () {
412
416
this .$nextTick (() => {
413
417
if (this .$refs [" scroller" ]) {
414
- this .$refs [" scroller" ].scrollTo (0 , 999999 );
418
+ this .$refs [" scroller" ].scrollTo ({
419
+ top: 99999 ,
420
+ behavior: " smooth"
421
+ });
415
422
}
416
423
});
417
424
}, 300 ),
@@ -580,12 +587,14 @@ export default {
580
587
content
581
588
});
582
589
583
- this .socket .emit (` user@${ userId} ` , {
584
- contentType,
585
- type: 0 ,
586
- content: JSON .stringify (content),
587
- sessionId: id
588
- });
590
+ if (this .socket ) {
591
+ this .socket .emit (` user@${ userId} ` , {
592
+ contentType,
593
+ type: 0 ,
594
+ content: JSON .stringify (content),
595
+ sessionId: id
596
+ });
597
+ }
589
598
},
590
599
591
600
/**
@@ -642,22 +651,22 @@ export default {
642
651
</script >
643
652
644
653
<style lang="scss">
645
- .chat-box__wrap {
646
- height : 650px ;
647
- min-width : 1000px ;
654
+ .cl-chat__dialog {
648
655
margin-bottom : 0 !important ;
656
+ min-width : 1000px ;
649
657
650
658
.el-dialog__body {
651
- height : calc (100% - 46px );
652
659
padding : 0 ;
660
+ }
653
661
662
+ & .is-fullscreen {
654
663
.cl-dialog__container {
655
- height : 100 % ;
664
+ height : calc ( 100 vh - 46 px ) !important ;
656
665
}
657
666
}
658
667
}
659
668
660
- .chat-box {
669
+ .cl-chat {
661
670
display : flex ;
662
671
height : 100% ;
663
672
background-color : #f7f7f7 ;
@@ -673,7 +682,7 @@ export default {
673
682
padding : 10px ;
674
683
}
675
684
676
- ul {
685
+ & -list {
677
686
height : calc (100% - 52px );
678
687
overflow : auto ;
679
688
@@ -684,14 +693,12 @@ export default {
684
693
border-left : 5px solid #fff ;
685
694
686
695
.avatar {
687
- height : 40px ;
688
- width : 40px ;
689
696
margin-right : 12px ;
690
697
691
698
img {
692
699
display : block ;
693
- height : 100 % ;
694
- width : 100 % ;
700
+ height : 40 px ;
701
+ width : 40 px ;
695
702
border-radius : 3px ;
696
703
background-color : #eee ;
697
704
}
@@ -741,6 +748,11 @@ export default {
741
748
}
742
749
}
743
750
}
751
+
752
+ & -empty {
753
+ text-align : center ;
754
+ margin-top : 10px ;
755
+ }
744
756
}
745
757
746
758
& __detail {
@@ -779,6 +791,7 @@ export default {
779
791
780
792
& __opbar {
781
793
margin-bottom : 5px ;
794
+
782
795
ul {
783
796
display : flex ;
784
797
li {
0 commit comments