@aochuang/client-sdk 1.0.331 → 1.0.333
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/chat-editor/chat-editor.vue +9 -2
- package/components/index.js +1 -6
- package/components/wework-chat-control/file-url/file-url.vue +5 -2
- package/components/wework-chat-control/image/image.vue +2 -137
- package/components/wework-chat-control/index.js +6 -6
- package/components/wework-chat-control/text/text.vue +3 -22
- package/components/wework-chat-control/util.js +5 -11
- package/components/wework-chat-control/video/video.vue +2 -10
- package/components/wework-chat-control/voice/voice.vue +1 -1
- package/components/wework-chat-panel/chat-panel-controls/company-card/company-card.vue +35 -0
- package/components/wework-chat-panel/chat-panel-controls/expression/expression.vue +36 -0
- package/components/wework-chat-panel/chat-panel-controls/file-url/file-url.vue +35 -0
- package/components/wework-chat-panel/chat-panel-controls/image/image.vue +36 -0
- package/components/wework-chat-panel/chat-panel-controls/index.js +35 -0
- package/components/wework-chat-panel/chat-panel-controls/jx-sys-text/jx-sys-text.vue +28 -0
- package/components/wework-chat-panel/chat-panel-controls/link/link.vue +35 -0
- package/components/wework-chat-panel/chat-panel-controls/location/location.vue +35 -0
- package/components/wework-chat-panel/chat-panel-controls/text/text.vue +43 -0
- package/components/wework-chat-panel/chat-panel-controls/unkonw/unkonw.vue +39 -0
- package/components/wework-chat-panel/chat-panel-controls/video/video.vue +37 -0
- package/components/wework-chat-panel/chat-panel-controls/voice/voice.vue +35 -0
- package/components/wework-chat-panel/chat-panel-item.vue +7 -7
- package/components/wework-chat-panel/chat-panel.vue +9 -90
- package/package.json +1 -1
- package/services/client-chat/client-chat-wechat/client-chat.js +19 -2
- package/uni-components/chat-editor/chat-editor.vue +1 -1
- package/components/wework-chat-control/wework-chat-control-config-item.vue +0 -24
- package/components/wework-chat-control/wework-chat-control-config-msg.vue +0 -25
- package/components/wework-chat-control/wework-chat-control-config.vue +0 -62
|
@@ -88,6 +88,10 @@ export default {
|
|
|
88
88
|
},
|
|
89
89
|
sendMessageMethod: {
|
|
90
90
|
type: Function
|
|
91
|
+
},
|
|
92
|
+
preventSendButtonBubble: {
|
|
93
|
+
type: Boolean,
|
|
94
|
+
default: false
|
|
91
95
|
}
|
|
92
96
|
},
|
|
93
97
|
data () {
|
|
@@ -877,8 +881,11 @@ export default {
|
|
|
877
881
|
mentions: this.getMentions()
|
|
878
882
|
})
|
|
879
883
|
},
|
|
880
|
-
handleSendMessageClick () {
|
|
881
|
-
|
|
884
|
+
handleSendMessageClick (evt) {
|
|
885
|
+
if (this.preventSendButtonBubble && evt && evt.stopPropagation) {
|
|
886
|
+
evt.stopPropagation()
|
|
887
|
+
}
|
|
888
|
+
this.submit()
|
|
882
889
|
},
|
|
883
890
|
handleClick () {
|
|
884
891
|
if (this.disabled) {
|
package/components/index.js
CHANGED
|
@@ -11,7 +11,6 @@ import ChatLayout from './chat-layout'
|
|
|
11
11
|
import ChatFriendProfile from './chat-friend-profile'
|
|
12
12
|
import ChatRoomProfile from './chat-room-profile'
|
|
13
13
|
import { chatControls as WechatChatControls, WechatChatControlConfig, WechatChatControlConfigMsg, WechatChatControlConfigItem } from './wechat-chat-control'
|
|
14
|
-
import { chatControls as WeworkChatControls, WeworkChatControlConfig, WeworkChatControlConfigMsg, WeworkChatControlConfigItem } from './wework-chat-control'
|
|
15
14
|
import { MESSAGE_TYPE, formatShortMessage, formatShortSessionMessage } from './wechat-chat-control/util'
|
|
16
15
|
import { MESSAGE_TYPE as MESSAGE_TYPE_W } from './wework-chat-control/util'
|
|
17
16
|
|
|
@@ -22,10 +21,6 @@ export default {
|
|
|
22
21
|
WechatChatControlConfig,
|
|
23
22
|
WechatChatControlConfigMsg,
|
|
24
23
|
WechatChatControlConfigItem,
|
|
25
|
-
WeworkChatControls,
|
|
26
|
-
WeworkChatControlConfig,
|
|
27
|
-
WeworkChatControlConfigMsg,
|
|
28
|
-
WeworkChatControlConfigItem,
|
|
29
24
|
MESSAGE_TYPE,
|
|
30
25
|
MESSAGE_TYPE_W,
|
|
31
26
|
AccountSelect,
|
|
@@ -45,4 +40,4 @@ export default {
|
|
|
45
40
|
ChatRoomProfile,
|
|
46
41
|
WechatChatPanel,
|
|
47
42
|
WeworkChatPanel
|
|
48
|
-
}
|
|
43
|
+
}
|
|
@@ -71,10 +71,13 @@ export default {
|
|
|
71
71
|
},
|
|
72
72
|
computed: {
|
|
73
73
|
url () {
|
|
74
|
-
return this.nextContent.
|
|
74
|
+
return this.nextContent.url || this.nextContent.resUrl
|
|
75
75
|
},
|
|
76
76
|
name () {
|
|
77
|
-
|
|
77
|
+
if (!this.nextContent.title) {
|
|
78
|
+
return this.url
|
|
79
|
+
}
|
|
80
|
+
return this.nextContent.title
|
|
78
81
|
},
|
|
79
82
|
size () {
|
|
80
83
|
return this.nextContent.totalLen
|
|
@@ -1,24 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="sdk-chat-control-image" @click="handleClick">
|
|
3
3
|
<div class="sdk-chat-control-image__main" :style="{'height': innerHeight, 'max-height': innerMaxHeight + 'px'}">
|
|
4
|
-
<template v-if="
|
|
5
|
-
<div class="sdk-chat-control-image__download" :class="{'is-downloading': downloading}" @click.stop="handleDownloadClick">
|
|
6
|
-
<template v-if="downloading">
|
|
7
|
-
<div class="sdk-chat-control-image__download-icon">
|
|
8
|
-
<ui-loading size="mini"></ui-loading>
|
|
9
|
-
</div>
|
|
10
|
-
<div class="sdk-chat-control-image__download-text">下载中...</div>
|
|
11
|
-
</template>
|
|
12
|
-
<template v-else>
|
|
13
|
-
<div class="sdk-chat-control-image__download-icon">
|
|
14
|
-
<ui-icon name="download-line"></ui-icon>
|
|
15
|
-
</div>
|
|
16
|
-
<div class="sdk-chat-control-image__download-text">下载</div>
|
|
17
|
-
</template>
|
|
18
|
-
</div>
|
|
19
|
-
<div class="sdk-chat-control-image__download-placeholder"></div>
|
|
20
|
-
</template>
|
|
21
|
-
<template v-else-if="allowDefrost">
|
|
4
|
+
<template v-if="allowDefrost">
|
|
22
5
|
<template v-if="defrostMsg">
|
|
23
6
|
<div class="sdk-chat-control-image__defrost">
|
|
24
7
|
<div class="sdk-chat-control-image__defrost-icon">
|
|
@@ -93,7 +76,6 @@
|
|
|
93
76
|
</template>
|
|
94
77
|
<script>
|
|
95
78
|
import { Image as UiImage, Button as UiButton, Icon as UiIcon, Loading as UiLoading } from '@aochuang/common/components'
|
|
96
|
-
import { parse } from '../../../utils/json'
|
|
97
79
|
import { isOriginImage, getNewImageSrc} from './util'
|
|
98
80
|
|
|
99
81
|
export default {
|
|
@@ -116,17 +98,7 @@ export default {
|
|
|
116
98
|
}
|
|
117
99
|
},
|
|
118
100
|
content: {
|
|
119
|
-
type:
|
|
120
|
-
},
|
|
121
|
-
allowDownload: {
|
|
122
|
-
type: [Boolean, Function],
|
|
123
|
-
default: false
|
|
124
|
-
},
|
|
125
|
-
downloadMethod: {
|
|
126
|
-
type: Function
|
|
127
|
-
},
|
|
128
|
-
cancelDownloadMethod: {
|
|
129
|
-
type: Function
|
|
101
|
+
type: String
|
|
130
102
|
},
|
|
131
103
|
maxWidth: {
|
|
132
104
|
type: Number,
|
|
@@ -178,35 +150,12 @@ export default {
|
|
|
178
150
|
},
|
|
179
151
|
data () {
|
|
180
152
|
return {
|
|
181
|
-
downloading: false,
|
|
182
|
-
downloaded: false,
|
|
183
|
-
nextContent: null,
|
|
184
153
|
defrostMsg: null,
|
|
185
154
|
errorMsg: null
|
|
186
155
|
}
|
|
187
156
|
},
|
|
188
157
|
computed: {
|
|
189
|
-
isDownloadContent () {
|
|
190
|
-
return !!(this.nextContent && typeof this.nextContent === 'object' && !Array.isArray(this.nextContent))
|
|
191
|
-
},
|
|
192
|
-
innerAllowDownload () {
|
|
193
|
-
if (typeof this.allowDownload === 'function') {
|
|
194
|
-
return this.allowDownload({
|
|
195
|
-
content: this.nextContent
|
|
196
|
-
})
|
|
197
|
-
}
|
|
198
|
-
return this.allowDownload
|
|
199
|
-
},
|
|
200
|
-
showDownloadBox () {
|
|
201
|
-
return this.type === 'default' && this.innerAllowDownload && this.isDownloadContent && !this.nextContent.resPath && !this.downloaded
|
|
202
|
-
},
|
|
203
158
|
src () {
|
|
204
|
-
if (typeof this.nextContent === 'string') {
|
|
205
|
-
return this.nextContent
|
|
206
|
-
}
|
|
207
|
-
if (this.nextContent && typeof this.nextContent === 'object') {
|
|
208
|
-
return this.nextContent.resPath || this.nextContent.url || this.nextContent.thumbnailPath || this.nextContent.midThumbnailPath || ''
|
|
209
|
-
}
|
|
210
159
|
return this.content
|
|
211
160
|
},
|
|
212
161
|
innerWidth () {
|
|
@@ -261,9 +210,6 @@ export default {
|
|
|
261
210
|
return !!this.defrostMethod
|
|
262
211
|
}
|
|
263
212
|
},
|
|
264
|
-
created () {
|
|
265
|
-
this.syncContentState()
|
|
266
|
-
},
|
|
267
213
|
methods: {
|
|
268
214
|
handleClick () {
|
|
269
215
|
this.$emit('click')
|
|
@@ -271,39 +217,6 @@ export default {
|
|
|
271
217
|
handleImageClick () {
|
|
272
218
|
this.imageClickMethod && this.imageClickMethod()
|
|
273
219
|
},
|
|
274
|
-
handleDownloadClick () {
|
|
275
|
-
if (this.downloading) {
|
|
276
|
-
return
|
|
277
|
-
}
|
|
278
|
-
if (!this.downloadMethod) {
|
|
279
|
-
return
|
|
280
|
-
}
|
|
281
|
-
const rs = this.downloadMethod({
|
|
282
|
-
content: this.nextContent,
|
|
283
|
-
updateContentProp: (prop, value) => {
|
|
284
|
-
if (!['url'].includes(prop)) {
|
|
285
|
-
throw new Error('不支持的更新属性' + prop)
|
|
286
|
-
}
|
|
287
|
-
this.$set(this.nextContent, prop, value)
|
|
288
|
-
},
|
|
289
|
-
updateContentProps: (data) => {
|
|
290
|
-
if (!data || typeof data !== 'object' || Array.isArray(data)) {
|
|
291
|
-
throw new Error('updateContentProps只支持更新数据对象')
|
|
292
|
-
}
|
|
293
|
-
this.nextContent = data
|
|
294
|
-
}
|
|
295
|
-
})
|
|
296
|
-
if (rs && rs.finally) {
|
|
297
|
-
this.downloading = true
|
|
298
|
-
rs.then(() => {
|
|
299
|
-
this.downloaded = true
|
|
300
|
-
}).finally(() => {
|
|
301
|
-
this.downloading = false
|
|
302
|
-
})
|
|
303
|
-
} else {
|
|
304
|
-
this.downloaded = true
|
|
305
|
-
}
|
|
306
|
-
},
|
|
307
220
|
handleError () {
|
|
308
221
|
if (!this.defrostMethod) {
|
|
309
222
|
return
|
|
@@ -323,22 +236,7 @@ export default {
|
|
|
323
236
|
handleRefreshClick () {
|
|
324
237
|
this.errorMsg = null
|
|
325
238
|
this.defrostMsg = null
|
|
326
|
-
},
|
|
327
|
-
syncContentState () {
|
|
328
|
-
this.nextContent = parse(this.content)
|
|
329
|
-
this.downloaded = false
|
|
330
|
-
this.downloading = false
|
|
331
|
-
this.errorMsg = null
|
|
332
|
-
this.defrostMsg = null
|
|
333
239
|
}
|
|
334
|
-
},
|
|
335
|
-
watch: {
|
|
336
|
-
content () {
|
|
337
|
-
this.syncContentState()
|
|
338
|
-
}
|
|
339
|
-
},
|
|
340
|
-
beforeDestroy () {
|
|
341
|
-
this.cancelDownloadMethod && this.cancelDownloadMethod()
|
|
342
240
|
}
|
|
343
241
|
}
|
|
344
242
|
</script>
|
|
@@ -379,39 +277,6 @@ export default {
|
|
|
379
277
|
display: inline-block;
|
|
380
278
|
line-height: 1em;
|
|
381
279
|
vertical-align: top;
|
|
382
|
-
position: relative;
|
|
383
|
-
}
|
|
384
|
-
.sdk-chat-control-image__download{
|
|
385
|
-
position: absolute;
|
|
386
|
-
left: 0;
|
|
387
|
-
top: 0;
|
|
388
|
-
z-index: 10;
|
|
389
|
-
width: 100%;
|
|
390
|
-
height: 100%;
|
|
391
|
-
background: #000;
|
|
392
|
-
display: flex;
|
|
393
|
-
flex-direction: column;
|
|
394
|
-
align-items: center;
|
|
395
|
-
justify-content: center;
|
|
396
|
-
color: #ccc;
|
|
397
|
-
cursor: pointer;
|
|
398
|
-
&:not(.is-downloading):hover {
|
|
399
|
-
color: #fff;
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
.sdk-chat-control-image__download.is-downloading{
|
|
403
|
-
cursor: default;
|
|
404
|
-
}
|
|
405
|
-
.sdk-chat-control-image__download-icon{
|
|
406
|
-
line-height: 1;
|
|
407
|
-
margin-bottom: 6px;
|
|
408
|
-
}
|
|
409
|
-
.sdk-chat-control-image__download-text{
|
|
410
|
-
font-size: 12px;
|
|
411
|
-
}
|
|
412
|
-
.sdk-chat-control-image__download-placeholder{
|
|
413
|
-
width: 100%;
|
|
414
|
-
height: 100%;
|
|
415
280
|
}
|
|
416
281
|
.sdk-chat-control-image__hd{
|
|
417
282
|
position: absolute;
|
|
@@ -26,9 +26,9 @@ import url from './url/url.vue'
|
|
|
26
26
|
// import quoteMessage from './quote-message/quote-message.vue'
|
|
27
27
|
import empty from './empty/empty.vue'
|
|
28
28
|
import unknow from './unknow/unknow.vue'
|
|
29
|
-
import
|
|
30
|
-
import
|
|
31
|
-
import
|
|
29
|
+
// import WechatChatControlConfig from './wechat-chat-control-config.vue'
|
|
30
|
+
// import WechatChatControlConfigMsg from './wechat-chat-control-config-msg.vue'
|
|
31
|
+
// import WechatChatControlConfigItem from './wechat-chat-control-config-item.vue'
|
|
32
32
|
// import revokeMeMessage from './revoke-me-message/revoke-me-message.vue'
|
|
33
33
|
// import revokeOtherMessage from './revoke-other-message/revoke-other-message.vue'
|
|
34
34
|
// import revokeYouMessage from './revoke-you-message/revoke-you-message.vue'
|
|
@@ -100,7 +100,7 @@ export {
|
|
|
100
100
|
// revokeMeMessage,
|
|
101
101
|
// revokeOtherMessage,
|
|
102
102
|
// revokeYouMessage,
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
103
|
+
// WechatChatControlConfig,
|
|
104
|
+
// WechatChatControlConfigMsg,
|
|
105
|
+
// WechatChatControlConfigItem
|
|
106
106
|
}
|
|
@@ -31,21 +31,6 @@
|
|
|
31
31
|
import { Popover as UiPopover } from '@aochuang/common/components'
|
|
32
32
|
import { html2Escape } from '../../../utils/string'
|
|
33
33
|
|
|
34
|
-
function parseTextContent (content) {
|
|
35
|
-
if (typeof content !== 'string') {
|
|
36
|
-
return content
|
|
37
|
-
}
|
|
38
|
-
try {
|
|
39
|
-
const data = JSON.parse(content)
|
|
40
|
-
if (data && typeof data === 'object') {
|
|
41
|
-
return data
|
|
42
|
-
}
|
|
43
|
-
} catch (e) {
|
|
44
|
-
return content
|
|
45
|
-
}
|
|
46
|
-
return content
|
|
47
|
-
}
|
|
48
|
-
|
|
49
34
|
export default {
|
|
50
35
|
name: 'SdkChatControlText',
|
|
51
36
|
components: {
|
|
@@ -78,27 +63,23 @@ export default {
|
|
|
78
63
|
},
|
|
79
64
|
computed: {
|
|
80
65
|
nextContent () {
|
|
81
|
-
return
|
|
66
|
+
return this.content
|
|
82
67
|
},
|
|
83
68
|
text () {
|
|
84
|
-
if (this.nextContent && typeof this.nextContent === 'object') {
|
|
85
|
-
return this.nextContent.text || ''
|
|
86
|
-
}
|
|
87
69
|
return this.nextContent
|
|
88
70
|
},
|
|
89
71
|
html () {
|
|
90
|
-
let content = this.
|
|
72
|
+
let content = this.nextContent
|
|
91
73
|
if (this.formatter) {
|
|
92
74
|
content = this.formatter({
|
|
93
75
|
content: this.nextContent
|
|
94
76
|
})
|
|
95
77
|
} else {
|
|
96
|
-
content = html2Escape(
|
|
78
|
+
content = html2Escape(content)
|
|
97
79
|
}
|
|
98
80
|
if (!content) {
|
|
99
81
|
return ''
|
|
100
82
|
}
|
|
101
|
-
content = String(content)
|
|
102
83
|
content = content.replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, item => {
|
|
103
84
|
return `<a href="${item}" target='_blank'>${item}</a>`
|
|
104
85
|
})
|
|
@@ -3,7 +3,7 @@ export const MESSAGE_TYPE = {
|
|
|
3
3
|
TEXT_W: 1,
|
|
4
4
|
IMAGE: 14,
|
|
5
5
|
VOICE: 16,
|
|
6
|
-
VIDEO:
|
|
6
|
+
VIDEO: 23,
|
|
7
7
|
CUSTOM_EXPRESSION: 29,
|
|
8
8
|
CUSTOM_EXPRESSION_W: 104,
|
|
9
9
|
// MUSIC: 1040187441,
|
|
@@ -66,14 +66,6 @@ function toJson (data) {
|
|
|
66
66
|
return data
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
-
function getTextContent (content) {
|
|
70
|
-
const data = typeof content === 'string' ? toJson(content) : content
|
|
71
|
-
if (data && typeof data === 'object') {
|
|
72
|
-
return data.text || ''
|
|
73
|
-
}
|
|
74
|
-
return content
|
|
75
|
-
}
|
|
76
|
-
|
|
77
69
|
/**
|
|
78
70
|
* 格式化为短消息
|
|
79
71
|
*/
|
|
@@ -81,8 +73,10 @@ export function formatShortMessage (msgType, msgContent) {
|
|
|
81
73
|
let shortMessage = msgContent
|
|
82
74
|
switch (msgType) {
|
|
83
75
|
case MESSAGE_TYPE.TEXT:
|
|
76
|
+
shortMessage = msgContent
|
|
77
|
+
break
|
|
84
78
|
case MESSAGE_TYPE.TEXT_W:
|
|
85
|
-
shortMessage =
|
|
79
|
+
shortMessage = msgContent
|
|
86
80
|
break
|
|
87
81
|
case MESSAGE_TYPE.TEXT_WITH_AT:
|
|
88
82
|
let {atId, content, text} = toJson(msgContent) || {}
|
|
@@ -230,4 +224,4 @@ export function formatShortSessionMessage (session, contextFn) {
|
|
|
230
224
|
}
|
|
231
225
|
}
|
|
232
226
|
return formatShortMessage(session.lastMsgType, session.lastMsgContent)
|
|
233
|
-
}
|
|
227
|
+
}
|
|
@@ -147,9 +147,7 @@ export default {
|
|
|
147
147
|
if (typeof this.nextContent === 'string') {
|
|
148
148
|
url = this.nextContent
|
|
149
149
|
} else if (this.nextContent && typeof this.nextContent === 'object') {
|
|
150
|
-
if (this.nextContent.
|
|
151
|
-
url = this.nextContent.resPath
|
|
152
|
-
} else if (this.nextContent.videoPath) {
|
|
150
|
+
if (this.nextContent.videoPath) {
|
|
153
151
|
url = this.nextContent.videoPath
|
|
154
152
|
} else {
|
|
155
153
|
url = this.nextContent.tencentUrl
|
|
@@ -165,7 +163,7 @@ export default {
|
|
|
165
163
|
if (!this.nextContent) {
|
|
166
164
|
return
|
|
167
165
|
}
|
|
168
|
-
return this.nextContent.
|
|
166
|
+
return this.nextContent.previewImgUrl
|
|
169
167
|
},
|
|
170
168
|
innerCover () {
|
|
171
169
|
return formatOssPath(this.cover)
|
|
@@ -204,12 +202,6 @@ export default {
|
|
|
204
202
|
throw new Error('不支持的更新属性' + prop)
|
|
205
203
|
}
|
|
206
204
|
this.$set(this.nextContent, prop, value)
|
|
207
|
-
},
|
|
208
|
-
updateContentProps: (data) => {
|
|
209
|
-
if (!data || typeof data !== 'object' || Array.isArray(data)) {
|
|
210
|
-
throw new Error('updateContentProps只支持更新数据对象')
|
|
211
|
-
}
|
|
212
|
-
this.nextContent = data
|
|
213
205
|
}
|
|
214
206
|
})
|
|
215
207
|
if (rs && rs.finally) {
|
|
@@ -132,7 +132,7 @@ export default {
|
|
|
132
132
|
return parse(this.content) || {}
|
|
133
133
|
},
|
|
134
134
|
voiceSrc () {
|
|
135
|
-
let url = this.nextContent.
|
|
135
|
+
let url = this.nextContent.url || this.nextContent.resUrl
|
|
136
136
|
return url
|
|
137
137
|
},
|
|
138
138
|
nextId () {
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import SdkChatPanelBox from '../../../chat-panel/chat-panel-box'
|
|
3
|
+
import { companyCard } from '../../../wework-chat-control'
|
|
4
|
+
|
|
5
|
+
export default {
|
|
6
|
+
name: 'SdkWeworkChatPanelControlsCompanyCard',
|
|
7
|
+
functional: true,
|
|
8
|
+
props: {
|
|
9
|
+
dir: {
|
|
10
|
+
type: String
|
|
11
|
+
},
|
|
12
|
+
data: {
|
|
13
|
+
type: Object,
|
|
14
|
+
required: true
|
|
15
|
+
},
|
|
16
|
+
fetchUserMethod: {
|
|
17
|
+
type: Function
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
render (h, c) {
|
|
21
|
+
const { props } = c
|
|
22
|
+
return h(SdkChatPanelBox, {
|
|
23
|
+
props: {
|
|
24
|
+
dir: props.dir,
|
|
25
|
+
data: props.data,
|
|
26
|
+
fetchUserMethod: props.fetchUserMethod
|
|
27
|
+
}
|
|
28
|
+
}, [h(companyCard, {
|
|
29
|
+
props: {
|
|
30
|
+
data: props.data
|
|
31
|
+
}
|
|
32
|
+
})])
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
</script>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import { expression } from '../../../wework-chat-control'
|
|
3
|
+
import SdkChatPanelBox from '../../../chat-panel/chat-panel-box'
|
|
4
|
+
|
|
5
|
+
export default {
|
|
6
|
+
name: 'SdkWeworkChatPanelControlsExpression',
|
|
7
|
+
functional: true,
|
|
8
|
+
props: {
|
|
9
|
+
dir: {
|
|
10
|
+
type: String
|
|
11
|
+
},
|
|
12
|
+
data: {
|
|
13
|
+
type: Object,
|
|
14
|
+
default: () => ({})
|
|
15
|
+
},
|
|
16
|
+
fetchUserMethod: {
|
|
17
|
+
type: Function
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
render (h, c) {
|
|
21
|
+
const { props } = c
|
|
22
|
+
return h(SdkChatPanelBox, {
|
|
23
|
+
props: {
|
|
24
|
+
dir: props.dir,
|
|
25
|
+
data: props.data,
|
|
26
|
+
fetchUserMethod: props.fetchUserMethod
|
|
27
|
+
}
|
|
28
|
+
}, [h(expression, {
|
|
29
|
+
props: {
|
|
30
|
+
data: props.data
|
|
31
|
+
},
|
|
32
|
+
key: c.data.key
|
|
33
|
+
})])
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
</script>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import SdkChatPanelBox from '../../../chat-panel/chat-panel-box'
|
|
3
|
+
import { fileUrl } from '../../../wework-chat-control'
|
|
4
|
+
|
|
5
|
+
export default {
|
|
6
|
+
name: 'SdkWeworkChatPanelControlsFileUrl',
|
|
7
|
+
functional: true,
|
|
8
|
+
props: {
|
|
9
|
+
dir: {
|
|
10
|
+
type: String
|
|
11
|
+
},
|
|
12
|
+
data: {
|
|
13
|
+
type: Object,
|
|
14
|
+
required: true
|
|
15
|
+
},
|
|
16
|
+
fetchUserMethod: {
|
|
17
|
+
type: Function
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
render (h, c) {
|
|
21
|
+
const { props } = c
|
|
22
|
+
return h(SdkChatPanelBox, {
|
|
23
|
+
props: {
|
|
24
|
+
dir: props.dir,
|
|
25
|
+
data: props.data,
|
|
26
|
+
fetchUserMethod: props.fetchUserMethod
|
|
27
|
+
}
|
|
28
|
+
}, [h(fileUrl, {
|
|
29
|
+
props: {
|
|
30
|
+
content: props.data.content
|
|
31
|
+
}
|
|
32
|
+
})])
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
</script>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import { image } from '../../../wework-chat-control'
|
|
3
|
+
import SdkChatPanelBox from '../../../chat-panel/chat-panel-box'
|
|
4
|
+
|
|
5
|
+
export default {
|
|
6
|
+
name: 'SdkWeworkChatPanelControlsImage',
|
|
7
|
+
functional: true,
|
|
8
|
+
props: {
|
|
9
|
+
dir: {
|
|
10
|
+
type: String
|
|
11
|
+
},
|
|
12
|
+
data: {
|
|
13
|
+
type: Object,
|
|
14
|
+
default: () => ({})
|
|
15
|
+
},
|
|
16
|
+
fetchUserMethod: {
|
|
17
|
+
type: Function
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
render (h, c) {
|
|
21
|
+
const { props } = c
|
|
22
|
+
return h(SdkChatPanelBox, {
|
|
23
|
+
props: {
|
|
24
|
+
dir: props.dir,
|
|
25
|
+
data: props.data,
|
|
26
|
+
fetchUserMethod: props.fetchUserMethod
|
|
27
|
+
}
|
|
28
|
+
}, [h(image, {
|
|
29
|
+
props: {
|
|
30
|
+
data: props.data
|
|
31
|
+
},
|
|
32
|
+
key: c.data.key
|
|
33
|
+
})])
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
</script>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import text from './text/text.vue'
|
|
2
|
+
import link from './link/link.vue'
|
|
3
|
+
import companyCard from './company-card/company-card.vue'
|
|
4
|
+
import video from './video/video.vue'
|
|
5
|
+
import image from './image/image.vue'
|
|
6
|
+
import unkonw from './unkonw/unkonw.vue'
|
|
7
|
+
import expression from './expression/expression.vue'
|
|
8
|
+
import voice from './voice/voice.vue'
|
|
9
|
+
import jxSysText from './jx-sys-text/jx-sys-text.vue'
|
|
10
|
+
import fileUrl from './file-url/file-url.vue'
|
|
11
|
+
import location from './location/location.vue'
|
|
12
|
+
|
|
13
|
+
export default {
|
|
14
|
+
0: text,
|
|
15
|
+
2: text,
|
|
16
|
+
14: image,
|
|
17
|
+
101: image,
|
|
18
|
+
// '49': link,
|
|
19
|
+
22: video,
|
|
20
|
+
23: video,
|
|
21
|
+
103: video,
|
|
22
|
+
29: expression,
|
|
23
|
+
104: expression,
|
|
24
|
+
16: voice,
|
|
25
|
+
40: voice,
|
|
26
|
+
1011: jxSysText,
|
|
27
|
+
1022: jxSysText,
|
|
28
|
+
41: companyCard,
|
|
29
|
+
13: fileUrl,
|
|
30
|
+
15: fileUrl,
|
|
31
|
+
20: fileUrl,
|
|
32
|
+
102: fileUrl,
|
|
33
|
+
6: location,
|
|
34
|
+
unkonw
|
|
35
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import { jxSysText } from '../../../wework-chat-control'
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
name: 'SdkWeworkChatPanelControlsJxSysText',
|
|
6
|
+
functional: true,
|
|
7
|
+
props: {
|
|
8
|
+
dir: {
|
|
9
|
+
type: String
|
|
10
|
+
},
|
|
11
|
+
data: {
|
|
12
|
+
type: Object,
|
|
13
|
+
required: true
|
|
14
|
+
},
|
|
15
|
+
fetchUserMethod: {
|
|
16
|
+
type: Function
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
render (h, c) {
|
|
20
|
+
const { props } = c
|
|
21
|
+
return h(jxSysText, {
|
|
22
|
+
props: {
|
|
23
|
+
content: props.data.content
|
|
24
|
+
}
|
|
25
|
+
})
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
</script>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import SdkChatPanelBox from '../../../chat-panel/chat-panel-box'
|
|
3
|
+
import { link } from '../../../wework-chat-control'
|
|
4
|
+
|
|
5
|
+
export default {
|
|
6
|
+
name: 'SdkWeworkChatPanelControlsLink',
|
|
7
|
+
functional: true,
|
|
8
|
+
props: {
|
|
9
|
+
dir: {
|
|
10
|
+
type: String
|
|
11
|
+
},
|
|
12
|
+
data: {
|
|
13
|
+
type: Object,
|
|
14
|
+
required: true
|
|
15
|
+
},
|
|
16
|
+
fetchUserMethod: {
|
|
17
|
+
type: Function
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
render (h, c) {
|
|
21
|
+
const { props } = c
|
|
22
|
+
return h(SdkChatPanelBox, {
|
|
23
|
+
props: {
|
|
24
|
+
dir: props.dir,
|
|
25
|
+
data: props.data,
|
|
26
|
+
fetchUserMethod: props.fetchUserMethod
|
|
27
|
+
}
|
|
28
|
+
}, [h(link, {
|
|
29
|
+
props: {
|
|
30
|
+
data: props.data
|
|
31
|
+
}
|
|
32
|
+
})])
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
</script>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import SdkChatPanelBox from '../../../chat-panel/chat-panel-box'
|
|
3
|
+
import { location } from '../../../wework-chat-control'
|
|
4
|
+
|
|
5
|
+
export default {
|
|
6
|
+
name: 'SdkWeworkChatPanelControlsLocation',
|
|
7
|
+
functional: true,
|
|
8
|
+
props: {
|
|
9
|
+
dir: {
|
|
10
|
+
type: String
|
|
11
|
+
},
|
|
12
|
+
data: {
|
|
13
|
+
type: Object,
|
|
14
|
+
required: true
|
|
15
|
+
},
|
|
16
|
+
fetchUserMethod: {
|
|
17
|
+
type: Function
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
render (h, c) {
|
|
21
|
+
const { props } = c
|
|
22
|
+
return h(SdkChatPanelBox, {
|
|
23
|
+
props: {
|
|
24
|
+
dir: props.dir,
|
|
25
|
+
data: props.data,
|
|
26
|
+
fetchUserMethod: props.fetchUserMethod
|
|
27
|
+
}
|
|
28
|
+
}, [h(location, {
|
|
29
|
+
props: {
|
|
30
|
+
content: props.data.content
|
|
31
|
+
}
|
|
32
|
+
})])
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
</script>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import SdkChatPanelBox from '../../../chat-panel/chat-panel-box'
|
|
3
|
+
import { text } from '../../../wework-chat-control'
|
|
4
|
+
|
|
5
|
+
export default {
|
|
6
|
+
name: 'SdkWeworkChatPanelControlsText',
|
|
7
|
+
functional: true,
|
|
8
|
+
props: {
|
|
9
|
+
dir: {
|
|
10
|
+
type: String
|
|
11
|
+
},
|
|
12
|
+
data: {
|
|
13
|
+
type: Object,
|
|
14
|
+
required: true
|
|
15
|
+
},
|
|
16
|
+
fetchUserMethod: {
|
|
17
|
+
type: Function
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
render (h, c) {
|
|
21
|
+
const { props } = c
|
|
22
|
+
return h(SdkChatPanelBox, {
|
|
23
|
+
class: 'sdk-chat-panel-controls-text',
|
|
24
|
+
props: {
|
|
25
|
+
dir: props.dir,
|
|
26
|
+
data: props.data,
|
|
27
|
+
fetchUserMethod: props.fetchUserMethod
|
|
28
|
+
}
|
|
29
|
+
}, [h('div', {
|
|
30
|
+
class: 'sdk-chat-panel-controls-text__main'
|
|
31
|
+
}, [h(text, {
|
|
32
|
+
props: {
|
|
33
|
+
data: props.data
|
|
34
|
+
}
|
|
35
|
+
})])])
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
</script>
|
|
39
|
+
<style>
|
|
40
|
+
.sdk-chat-panel-controls-text__main{
|
|
41
|
+
padding: 10px;
|
|
42
|
+
}
|
|
43
|
+
</style>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<sdk-chat-panel-box
|
|
3
|
+
:data="data"
|
|
4
|
+
:dir="dir"
|
|
5
|
+
:fetch-user-method="fetchUserMethod"
|
|
6
|
+
>
|
|
7
|
+
<div class="sdk-wework-chat-panel-controls-unkonw__main">
|
|
8
|
+
未知消息
|
|
9
|
+
</div>
|
|
10
|
+
</sdk-chat-panel-box>
|
|
11
|
+
</template>
|
|
12
|
+
<script>
|
|
13
|
+
import SdkChatPanelBox from '../../../chat-panel/chat-panel-box'
|
|
14
|
+
|
|
15
|
+
export default {
|
|
16
|
+
name: 'SdkWeworkChatPanelControlsUnkonw',
|
|
17
|
+
components: {
|
|
18
|
+
SdkChatPanelBox
|
|
19
|
+
},
|
|
20
|
+
props: {
|
|
21
|
+
dir: {
|
|
22
|
+
type: String
|
|
23
|
+
},
|
|
24
|
+
data: {
|
|
25
|
+
type: Object,
|
|
26
|
+
required: true
|
|
27
|
+
},
|
|
28
|
+
fetchUserMethod: {
|
|
29
|
+
type: Function
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
</script>
|
|
34
|
+
<style lang="less">
|
|
35
|
+
.sdk-wework-chat-panel-controls-unkonw__main{
|
|
36
|
+
padding: 12px;
|
|
37
|
+
color: #999;
|
|
38
|
+
}
|
|
39
|
+
</style>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<sdk-chat-panel-box
|
|
3
|
+
:data="data"
|
|
4
|
+
:dir="dir"
|
|
5
|
+
:fetch-user-method="fetchUserMethod"
|
|
6
|
+
>
|
|
7
|
+
<sdk-chat-control-video
|
|
8
|
+
:data="data"
|
|
9
|
+
width="240px"
|
|
10
|
+
height="180px"
|
|
11
|
+
></sdk-chat-control-video>
|
|
12
|
+
</sdk-chat-panel-box>
|
|
13
|
+
</template>
|
|
14
|
+
<script>
|
|
15
|
+
import SdkChatPanelBox from '../../../chat-panel/chat-panel-box'
|
|
16
|
+
import { video } from '../../../wework-chat-control'
|
|
17
|
+
|
|
18
|
+
export default {
|
|
19
|
+
name: 'SdkWeworkChatPanelControlsVideo',
|
|
20
|
+
components: {
|
|
21
|
+
SdkChatPanelBox,
|
|
22
|
+
SdkChatControlVideo: video
|
|
23
|
+
},
|
|
24
|
+
props: {
|
|
25
|
+
dir: {
|
|
26
|
+
type: String
|
|
27
|
+
},
|
|
28
|
+
data: {
|
|
29
|
+
type: Object,
|
|
30
|
+
required: true
|
|
31
|
+
},
|
|
32
|
+
fetchUserMethod: {
|
|
33
|
+
type: Function
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
</script>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import SdkChatPanelBox from '../../../chat-panel/chat-panel-box'
|
|
3
|
+
import { voice } from '../../../wework-chat-control'
|
|
4
|
+
|
|
5
|
+
export default {
|
|
6
|
+
name: 'SdkWeworkChatPanelControlsVoice',
|
|
7
|
+
functional: true,
|
|
8
|
+
props: {
|
|
9
|
+
dir: {
|
|
10
|
+
type: String
|
|
11
|
+
},
|
|
12
|
+
data: {
|
|
13
|
+
type: Object,
|
|
14
|
+
required: true
|
|
15
|
+
},
|
|
16
|
+
fetchUserMethod: {
|
|
17
|
+
type: Function
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
render (h, c) {
|
|
21
|
+
const { props } = c
|
|
22
|
+
return h(SdkChatPanelBox, {
|
|
23
|
+
props: {
|
|
24
|
+
dir: props.dir,
|
|
25
|
+
data: props.data,
|
|
26
|
+
fetchUserMethod: props.fetchUserMethod
|
|
27
|
+
}
|
|
28
|
+
}, [h(voice, {
|
|
29
|
+
props: {
|
|
30
|
+
content: props.data.content
|
|
31
|
+
}
|
|
32
|
+
})])
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
</script>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
2
|
+
<wechat-chat-control-config-msg
|
|
3
3
|
:msgData="item"
|
|
4
4
|
>
|
|
5
5
|
<template slot-scope="{ configData }">
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
</template>
|
|
46
46
|
</sdk-chat-panel-box>
|
|
47
47
|
</template>
|
|
48
|
-
<template v-else-if="item.msgType
|
|
48
|
+
<template v-else-if="[22, 23, 103].includes(item.msgType)">
|
|
49
49
|
<sdk-chat-panel-box
|
|
50
50
|
:dir="dir"
|
|
51
51
|
:data="item"
|
|
@@ -526,7 +526,7 @@
|
|
|
526
526
|
</template> -->
|
|
527
527
|
</div>
|
|
528
528
|
</template>
|
|
529
|
-
</
|
|
529
|
+
</wechat-chat-control-config-msg>
|
|
530
530
|
</template>
|
|
531
531
|
<script>
|
|
532
532
|
import SdkChatPanelBox from '../chat-panel/chat-panel-box'
|
|
@@ -564,10 +564,10 @@ import {
|
|
|
564
564
|
unknow as SdkChatControlUnknow
|
|
565
565
|
} from '../wework-chat-control'
|
|
566
566
|
import { MESSAGE_TYPE } from '../wework-chat-control/util'
|
|
567
|
-
import
|
|
567
|
+
import WechatChatControlConfigMsg from '../wechat-chat-control/wechat-chat-control-config-msg.vue'
|
|
568
568
|
|
|
569
569
|
export default {
|
|
570
|
-
name: '
|
|
570
|
+
name: 'SdkWechatPanelItem',
|
|
571
571
|
components: {
|
|
572
572
|
SdkChatPanelBox,
|
|
573
573
|
SdkChatControlText,
|
|
@@ -601,7 +601,7 @@ export default {
|
|
|
601
601
|
// SdkChatControlRevokeMeMessage,
|
|
602
602
|
// SdkChatControlRevokeOtherMessage,
|
|
603
603
|
// SdkChatControlRevokeYouMessage,
|
|
604
|
-
|
|
604
|
+
WechatChatControlConfigMsg
|
|
605
605
|
},
|
|
606
606
|
props: {
|
|
607
607
|
dir: {
|
|
@@ -647,4 +647,4 @@ export default {
|
|
|
647
647
|
}
|
|
648
648
|
}
|
|
649
649
|
}
|
|
650
|
-
</script>
|
|
650
|
+
</script>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<sdk-chat-panel
|
|
3
3
|
ref="panel"
|
|
4
|
-
v-bind="props"
|
|
4
|
+
v-bind="$props"
|
|
5
5
|
:is-sender-method="handleIsSenderMethod"
|
|
6
6
|
@initloaded="handleChatsInitLoaded"
|
|
7
7
|
@chat-contextmenu="handleChatContext"
|
|
@@ -37,9 +37,6 @@
|
|
|
37
37
|
</template>
|
|
38
38
|
<template slot="main">
|
|
39
39
|
<slot name="main"></slot>
|
|
40
|
-
<template v-if="selectable">
|
|
41
|
-
<slot name="selection" :total="checkTotal"></slot>
|
|
42
|
-
</template>
|
|
43
40
|
</template>
|
|
44
41
|
</sdk-chat-panel>
|
|
45
42
|
</template>
|
|
@@ -62,8 +59,7 @@ export default {
|
|
|
62
59
|
}
|
|
63
60
|
},
|
|
64
61
|
keyField: {
|
|
65
|
-
type: String
|
|
66
|
-
default: 'id'
|
|
62
|
+
type: String
|
|
67
63
|
},
|
|
68
64
|
startDate: {
|
|
69
65
|
type: Number
|
|
@@ -92,6 +88,9 @@ export default {
|
|
|
92
88
|
type: Boolean,
|
|
93
89
|
default: true
|
|
94
90
|
},
|
|
91
|
+
renderControl: {
|
|
92
|
+
type: Function
|
|
93
|
+
},
|
|
95
94
|
fetchUserMethod: {
|
|
96
95
|
type: Function
|
|
97
96
|
},
|
|
@@ -127,33 +126,12 @@ export default {
|
|
|
127
126
|
},
|
|
128
127
|
contextChatId: {
|
|
129
128
|
type: String
|
|
130
|
-
},
|
|
131
|
-
onBeforeSelectionChange: {
|
|
132
|
-
type: Function
|
|
133
|
-
}
|
|
134
|
-
},
|
|
135
|
-
data () {
|
|
136
|
-
return {
|
|
137
|
-
checkMsgMap: {}
|
|
138
|
-
}
|
|
139
|
-
},
|
|
140
|
-
computed: {
|
|
141
|
-
props () {
|
|
142
|
-
const { config, ...nextProps } = this.$props
|
|
143
|
-
return nextProps
|
|
144
|
-
},
|
|
145
|
-
checkTotal () {
|
|
146
|
-
return Object.keys(this.checkMsgMap).length
|
|
147
|
-
}
|
|
148
|
-
},
|
|
149
|
-
watch: {
|
|
150
|
-
selectable () {
|
|
151
|
-
if (!this.selectable) {
|
|
152
|
-
this.checkMsgMap = {}
|
|
153
|
-
}
|
|
154
129
|
}
|
|
155
130
|
},
|
|
156
131
|
methods: {
|
|
132
|
+
handleRenderControl ({ item }) {
|
|
133
|
+
return ChatControls[item.msgType] || ChatControls.unkonw
|
|
134
|
+
},
|
|
157
135
|
handleIsSenderMethod ({ item }) {
|
|
158
136
|
return !!item.send
|
|
159
137
|
},
|
|
@@ -170,67 +148,8 @@ export default {
|
|
|
170
148
|
this.currentContextChat = null
|
|
171
149
|
return this.$refs.panel && this.$refs.panel.reload()
|
|
172
150
|
},
|
|
173
|
-
handleFilterSelectMessageMethod (msg) {
|
|
174
|
-
if (!this.filterSelectMessageMethod) {
|
|
175
|
-
return true
|
|
176
|
-
}
|
|
177
|
-
return this.filterSelectMessageMethod({
|
|
178
|
-
item: msg
|
|
179
|
-
})
|
|
180
|
-
},
|
|
181
|
-
handleMsgCheckboxChange (msg, value) {
|
|
182
|
-
if (value) {
|
|
183
|
-
this.selectChat(msg)
|
|
184
|
-
} else {
|
|
185
|
-
this.unselectChat(msg)
|
|
186
|
-
}
|
|
187
|
-
},
|
|
188
|
-
selectChat (chat) {
|
|
189
|
-
if (!chat) {
|
|
190
|
-
return
|
|
191
|
-
}
|
|
192
|
-
if (!this.selectable) {
|
|
193
|
-
console.warn('未开启选择')
|
|
194
|
-
return
|
|
195
|
-
}
|
|
196
|
-
if (this.onBeforeSelectionChange && this.onBeforeSelectionChange({
|
|
197
|
-
chat,
|
|
198
|
-
value: true
|
|
199
|
-
}) === false) {
|
|
200
|
-
return
|
|
201
|
-
}
|
|
202
|
-
this.$set(this.checkMsgMap, chat[this.keyField], chat)
|
|
203
|
-
},
|
|
204
|
-
unselectChat (chat) {
|
|
205
|
-
if (!chat) {
|
|
206
|
-
return
|
|
207
|
-
}
|
|
208
|
-
if (!this.selectable) {
|
|
209
|
-
console.warn('未开启选择')
|
|
210
|
-
return
|
|
211
|
-
}
|
|
212
|
-
if (this.onBeforeSelectionChange && this.onBeforeSelectionChange({
|
|
213
|
-
chat,
|
|
214
|
-
value: false
|
|
215
|
-
}) === false) {
|
|
216
|
-
return
|
|
217
|
-
}
|
|
218
|
-
this.$delete(this.checkMsgMap, chat[this.keyField])
|
|
219
|
-
},
|
|
220
|
-
unselectAllChat () {
|
|
221
|
-
return Object.keys(this.checkMsgMap).map(key => {
|
|
222
|
-
return this.unselectChat(this.checkMsgMap[key])
|
|
223
|
-
})
|
|
224
|
-
},
|
|
225
|
-
getSelectChats () {
|
|
226
|
-
return Object.keys(this.checkMsgMap).map(key => {
|
|
227
|
-
return this.checkMsgMap[key]
|
|
228
|
-
})
|
|
229
|
-
},
|
|
230
151
|
handleChatContext (item, evt) {
|
|
231
|
-
this.$emit('chat-contextmenu',
|
|
232
|
-
item
|
|
233
|
-
}, evt)
|
|
152
|
+
this.$emit('chat-contextmenu', item, evt)
|
|
234
153
|
},
|
|
235
154
|
handleChatViewContext ({ item }) {
|
|
236
155
|
this.$emit('chat-view-context', {
|
package/package.json
CHANGED
|
@@ -92,6 +92,7 @@ class ClientChat {
|
|
|
92
92
|
checkMessageSendResultMethod: null,
|
|
93
93
|
loadLossRoomMessageDataMethod: null,
|
|
94
94
|
loadLossFriendMessageDataMethod: null,
|
|
95
|
+
shouldMarkCurrentSessionReadMethod: null,
|
|
95
96
|
onOverwriteFriendInfoChange: null // 为了兼容1.0拉取会话逻辑加的,1.0暂时不支持根据taskId拉取
|
|
96
97
|
}, options)
|
|
97
98
|
if (!options.loadFriendMessageDataMethod) {
|
|
@@ -101,6 +102,7 @@ class ClientChat {
|
|
|
101
102
|
throw new Error('loadRoomMessageDataMethod不能为空')
|
|
102
103
|
}
|
|
103
104
|
this.onOverwriteFriendInfoChange = options.onOverwriteFriendInfoChange
|
|
105
|
+
this.shouldMarkCurrentSessionReadMethod = options.shouldMarkCurrentSessionReadMethod
|
|
104
106
|
this.event = new Event({
|
|
105
107
|
checkOnMethod: (name) => {
|
|
106
108
|
if (name === 'ready') {
|
|
@@ -461,7 +463,7 @@ class ClientChat {
|
|
|
461
463
|
unreadMsgCount: session.unreadMsgCount
|
|
462
464
|
}
|
|
463
465
|
if (!data.isSend) {
|
|
464
|
-
if (this.sessionManage.currentSession && this.sessionManage.currentSession.conversationId === sessionId) {
|
|
466
|
+
if (this.sessionManage.currentSession && this.sessionManage.currentSession.conversationId === sessionId && this.shouldMarkCurrentSessionRead(sessionId, data)) {
|
|
465
467
|
// 标记已读
|
|
466
468
|
this.session.setSessionRead(sessionId)
|
|
467
469
|
} else {
|
|
@@ -603,7 +605,7 @@ class ClientChat {
|
|
|
603
605
|
unreadMsgCount: session.unreadMsgCount
|
|
604
606
|
}
|
|
605
607
|
if (!data.isSend) {
|
|
606
|
-
if (this.sessionManage.currentSession && this.sessionManage.currentSession.conversationId === sessionId) {
|
|
608
|
+
if (this.sessionManage.currentSession && this.sessionManage.currentSession.conversationId === sessionId && this.shouldMarkCurrentSessionRead(sessionId, data)) {
|
|
607
609
|
// 标记已读
|
|
608
610
|
this.session.setSessionRead(sessionId)
|
|
609
611
|
} else {
|
|
@@ -1183,6 +1185,21 @@ class ClientChat {
|
|
|
1183
1185
|
this.event.off('ready')
|
|
1184
1186
|
}
|
|
1185
1187
|
|
|
1188
|
+
setShouldMarkCurrentSessionReadMethod (method) {
|
|
1189
|
+
this.shouldMarkCurrentSessionReadMethod = method
|
|
1190
|
+
}
|
|
1191
|
+
|
|
1192
|
+
shouldMarkCurrentSessionRead (sessionId, data) {
|
|
1193
|
+
if (typeof this.shouldMarkCurrentSessionReadMethod === 'function') {
|
|
1194
|
+
return this.shouldMarkCurrentSessionReadMethod({
|
|
1195
|
+
sessionId,
|
|
1196
|
+
data,
|
|
1197
|
+
currentSession: this.sessionManage.currentSession
|
|
1198
|
+
}) !== false
|
|
1199
|
+
}
|
|
1200
|
+
return true
|
|
1201
|
+
}
|
|
1202
|
+
|
|
1186
1203
|
handleAutoReadMessageSession (sessionId) {
|
|
1187
1204
|
if (!sessionId) {
|
|
1188
1205
|
return
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
export default {
|
|
3
|
-
name: 'SdkWeworkChatControlConfigItem',
|
|
4
|
-
functional: true,
|
|
5
|
-
inject: {
|
|
6
|
-
SdkWeworkChatControlConfig: {
|
|
7
|
-
default: null
|
|
8
|
-
}
|
|
9
|
-
},
|
|
10
|
-
props: {
|
|
11
|
-
/**
|
|
12
|
-
* 消息类型
|
|
13
|
-
*/
|
|
14
|
-
msgType: {
|
|
15
|
-
type: [Number, String]
|
|
16
|
-
}
|
|
17
|
-
},
|
|
18
|
-
render (h, c) {
|
|
19
|
-
return c.scopedSlots.default({
|
|
20
|
-
configData: c.injections.SdkWeworkChatControlConfig ? c.injections.SdkWeworkChatControlConfig.getControlConfig(c.props.msgType) : null
|
|
21
|
-
})
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
</script>
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
export default {
|
|
3
|
-
name: 'SdkWeworkChatControlConfigMsg',
|
|
4
|
-
functional: true,
|
|
5
|
-
inject: {
|
|
6
|
-
SdkWeworkChatControlConfig: {
|
|
7
|
-
default: null
|
|
8
|
-
}
|
|
9
|
-
},
|
|
10
|
-
props: {
|
|
11
|
-
/**
|
|
12
|
-
* 标准的企微客户端消息数据
|
|
13
|
-
*/
|
|
14
|
-
msgData: {
|
|
15
|
-
type: Object,
|
|
16
|
-
required: true
|
|
17
|
-
}
|
|
18
|
-
},
|
|
19
|
-
render (h, c) {
|
|
20
|
-
return c.scopedSlots.default({
|
|
21
|
-
configData: c.injections.SdkWeworkChatControlConfig ? c.injections.SdkWeworkChatControlConfig.getMessageConfig(c.props.msgData) : null
|
|
22
|
-
})
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
</script>
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
export default {
|
|
3
|
-
name: 'SdkWeworkChatControlConfig',
|
|
4
|
-
provide () {
|
|
5
|
-
return {
|
|
6
|
-
SdkWeworkChatControlConfig: this
|
|
7
|
-
}
|
|
8
|
-
},
|
|
9
|
-
inject: {
|
|
10
|
-
// 可以继承上级的
|
|
11
|
-
SdkWeworkChatControlConfig: {
|
|
12
|
-
default: null
|
|
13
|
-
}
|
|
14
|
-
},
|
|
15
|
-
props: {
|
|
16
|
-
/**
|
|
17
|
-
* 这个是组件级别的配置,weworkChatPanel是消息级别的配置,后面是消息级别配置覆盖组件级别的配置
|
|
18
|
-
* {
|
|
19
|
-
* 1: {
|
|
20
|
-
* formatter () {
|
|
21
|
-
* xxx
|
|
22
|
-
* }
|
|
23
|
-
* }
|
|
24
|
-
* }
|
|
25
|
-
*/
|
|
26
|
-
controlConfig: {
|
|
27
|
-
type: Object
|
|
28
|
-
},
|
|
29
|
-
/**
|
|
30
|
-
* 消息级别配置,消息级别配置会覆盖控件级别配置
|
|
31
|
-
* 主要是项目里面有几种实用场景,第一种聊天记录,第二种风控,第三种消息预览
|
|
32
|
-
*/
|
|
33
|
-
messageConfig: {
|
|
34
|
-
type: Function
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
render () {
|
|
38
|
-
return this.$slots.default
|
|
39
|
-
},
|
|
40
|
-
methods: {
|
|
41
|
-
getControlConfig (msgType) {
|
|
42
|
-
if (!this.controlConfig) {
|
|
43
|
-
return
|
|
44
|
-
}
|
|
45
|
-
return this.controlConfig[msgType]
|
|
46
|
-
},
|
|
47
|
-
getMessageConfig (msgData) {
|
|
48
|
-
const controlConfig = this.getControlConfig(msgData.msgType)
|
|
49
|
-
if (!this.messageConfig) {
|
|
50
|
-
return controlConfig
|
|
51
|
-
}
|
|
52
|
-
const messageConfig = this.messageConfig({
|
|
53
|
-
item: msgData
|
|
54
|
-
})
|
|
55
|
-
if (!messageConfig) {
|
|
56
|
-
return controlConfig
|
|
57
|
-
}
|
|
58
|
-
return Object.assign({}, controlConfig, messageConfig)
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
</script>
|