@aochuang/client-sdk 1.0.333 → 1.0.334
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/index.js +6 -1
- package/components/wework-chat-control/file-url/file-url.vue +2 -5
- package/components/wework-chat-control/image/image.vue +137 -2
- package/components/wework-chat-control/index.js +6 -6
- package/components/wework-chat-control/text/text.vue +22 -3
- package/components/wework-chat-control/util.js +11 -5
- package/components/wework-chat-control/video/video.vue +10 -2
- package/components/wework-chat-control/voice/voice.vue +1 -1
- package/components/wework-chat-control/wework-chat-control-config-item.vue +24 -0
- package/components/wework-chat-control/wework-chat-control-config-msg.vue +25 -0
- package/components/wework-chat-control/wework-chat-control-config.vue +62 -0
- package/components/wework-chat-panel/chat-panel-item.vue +7 -7
- package/components/wework-chat-panel/chat-panel.vue +90 -9
- package/package.json +1 -1
- package/services/client-chat/client-chat-wework/client-chat-socket.js +3 -1
- package/services/client-chat/client-chat-wework/client-chat.js +53 -1
- package/components/wework-chat-panel/chat-panel-controls/company-card/company-card.vue +0 -35
- package/components/wework-chat-panel/chat-panel-controls/expression/expression.vue +0 -36
- package/components/wework-chat-panel/chat-panel-controls/file-url/file-url.vue +0 -35
- package/components/wework-chat-panel/chat-panel-controls/image/image.vue +0 -36
- package/components/wework-chat-panel/chat-panel-controls/index.js +0 -35
- package/components/wework-chat-panel/chat-panel-controls/jx-sys-text/jx-sys-text.vue +0 -28
- package/components/wework-chat-panel/chat-panel-controls/link/link.vue +0 -35
- package/components/wework-chat-panel/chat-panel-controls/location/location.vue +0 -35
- package/components/wework-chat-panel/chat-panel-controls/text/text.vue +0 -43
- package/components/wework-chat-panel/chat-panel-controls/unkonw/unkonw.vue +0 -39
- package/components/wework-chat-panel/chat-panel-controls/video/video.vue +0 -37
- package/components/wework-chat-panel/chat-panel-controls/voice/voice.vue +0 -35
package/components/index.js
CHANGED
|
@@ -11,6 +11,7 @@ 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'
|
|
14
15
|
import { MESSAGE_TYPE, formatShortMessage, formatShortSessionMessage } from './wechat-chat-control/util'
|
|
15
16
|
import { MESSAGE_TYPE as MESSAGE_TYPE_W } from './wework-chat-control/util'
|
|
16
17
|
|
|
@@ -21,6 +22,10 @@ export default {
|
|
|
21
22
|
WechatChatControlConfig,
|
|
22
23
|
WechatChatControlConfigMsg,
|
|
23
24
|
WechatChatControlConfigItem,
|
|
25
|
+
WeworkChatControls,
|
|
26
|
+
WeworkChatControlConfig,
|
|
27
|
+
WeworkChatControlConfigMsg,
|
|
28
|
+
WeworkChatControlConfigItem,
|
|
24
29
|
MESSAGE_TYPE,
|
|
25
30
|
MESSAGE_TYPE_W,
|
|
26
31
|
AccountSelect,
|
|
@@ -40,4 +45,4 @@ export default {
|
|
|
40
45
|
ChatRoomProfile,
|
|
41
46
|
WechatChatPanel,
|
|
42
47
|
WeworkChatPanel
|
|
43
|
-
}
|
|
48
|
+
}
|
|
@@ -71,13 +71,10 @@ export default {
|
|
|
71
71
|
},
|
|
72
72
|
computed: {
|
|
73
73
|
url () {
|
|
74
|
-
return this.nextContent.url || this.nextContent.resUrl
|
|
74
|
+
return this.nextContent.resPath || this.nextContent.url || this.nextContent.resUrl
|
|
75
75
|
},
|
|
76
76
|
name () {
|
|
77
|
-
|
|
78
|
-
return this.url
|
|
79
|
-
}
|
|
80
|
-
return this.nextContent.title
|
|
77
|
+
return this.nextContent.fileName || this.nextContent.title || this.url
|
|
81
78
|
},
|
|
82
79
|
size () {
|
|
83
80
|
return this.nextContent.totalLen
|
|
@@ -1,7 +1,24 @@
|
|
|
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="
|
|
4
|
+
<template v-if="showDownloadBox">
|
|
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">
|
|
5
22
|
<template v-if="defrostMsg">
|
|
6
23
|
<div class="sdk-chat-control-image__defrost">
|
|
7
24
|
<div class="sdk-chat-control-image__defrost-icon">
|
|
@@ -76,6 +93,7 @@
|
|
|
76
93
|
</template>
|
|
77
94
|
<script>
|
|
78
95
|
import { Image as UiImage, Button as UiButton, Icon as UiIcon, Loading as UiLoading } from '@aochuang/common/components'
|
|
96
|
+
import { parse } from '../../../utils/json'
|
|
79
97
|
import { isOriginImage, getNewImageSrc} from './util'
|
|
80
98
|
|
|
81
99
|
export default {
|
|
@@ -98,7 +116,17 @@ export default {
|
|
|
98
116
|
}
|
|
99
117
|
},
|
|
100
118
|
content: {
|
|
101
|
-
type: String
|
|
119
|
+
type: [String, Object]
|
|
120
|
+
},
|
|
121
|
+
allowDownload: {
|
|
122
|
+
type: [Boolean, Function],
|
|
123
|
+
default: false
|
|
124
|
+
},
|
|
125
|
+
downloadMethod: {
|
|
126
|
+
type: Function
|
|
127
|
+
},
|
|
128
|
+
cancelDownloadMethod: {
|
|
129
|
+
type: Function
|
|
102
130
|
},
|
|
103
131
|
maxWidth: {
|
|
104
132
|
type: Number,
|
|
@@ -150,12 +178,35 @@ export default {
|
|
|
150
178
|
},
|
|
151
179
|
data () {
|
|
152
180
|
return {
|
|
181
|
+
downloading: false,
|
|
182
|
+
downloaded: false,
|
|
183
|
+
nextContent: null,
|
|
153
184
|
defrostMsg: null,
|
|
154
185
|
errorMsg: null
|
|
155
186
|
}
|
|
156
187
|
},
|
|
157
188
|
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
|
+
},
|
|
158
203
|
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
|
+
}
|
|
159
210
|
return this.content
|
|
160
211
|
},
|
|
161
212
|
innerWidth () {
|
|
@@ -210,6 +261,9 @@ export default {
|
|
|
210
261
|
return !!this.defrostMethod
|
|
211
262
|
}
|
|
212
263
|
},
|
|
264
|
+
created () {
|
|
265
|
+
this.syncContentState()
|
|
266
|
+
},
|
|
213
267
|
methods: {
|
|
214
268
|
handleClick () {
|
|
215
269
|
this.$emit('click')
|
|
@@ -217,6 +271,39 @@ export default {
|
|
|
217
271
|
handleImageClick () {
|
|
218
272
|
this.imageClickMethod && this.imageClickMethod()
|
|
219
273
|
},
|
|
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
|
+
},
|
|
220
307
|
handleError () {
|
|
221
308
|
if (!this.defrostMethod) {
|
|
222
309
|
return
|
|
@@ -236,7 +323,22 @@ export default {
|
|
|
236
323
|
handleRefreshClick () {
|
|
237
324
|
this.errorMsg = null
|
|
238
325
|
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
|
|
239
333
|
}
|
|
334
|
+
},
|
|
335
|
+
watch: {
|
|
336
|
+
content () {
|
|
337
|
+
this.syncContentState()
|
|
338
|
+
}
|
|
339
|
+
},
|
|
340
|
+
beforeDestroy () {
|
|
341
|
+
this.cancelDownloadMethod && this.cancelDownloadMethod()
|
|
240
342
|
}
|
|
241
343
|
}
|
|
242
344
|
</script>
|
|
@@ -277,6 +379,39 @@ export default {
|
|
|
277
379
|
display: inline-block;
|
|
278
380
|
line-height: 1em;
|
|
279
381
|
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%;
|
|
280
415
|
}
|
|
281
416
|
.sdk-chat-control-image__hd{
|
|
282
417
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
import WeworkChatControlConfig from './wework-chat-control-config.vue'
|
|
30
|
+
import WeworkChatControlConfigMsg from './wework-chat-control-config-msg.vue'
|
|
31
|
+
import WeworkChatControlConfigItem from './wework-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
|
+
WeworkChatControlConfig,
|
|
104
|
+
WeworkChatControlConfigMsg,
|
|
105
|
+
WeworkChatControlConfigItem
|
|
106
106
|
}
|
|
@@ -31,6 +31,21 @@
|
|
|
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
|
+
|
|
34
49
|
export default {
|
|
35
50
|
name: 'SdkChatControlText',
|
|
36
51
|
components: {
|
|
@@ -63,23 +78,27 @@ export default {
|
|
|
63
78
|
},
|
|
64
79
|
computed: {
|
|
65
80
|
nextContent () {
|
|
66
|
-
return this.content
|
|
81
|
+
return parseTextContent(this.content)
|
|
67
82
|
},
|
|
68
83
|
text () {
|
|
84
|
+
if (this.nextContent && typeof this.nextContent === 'object') {
|
|
85
|
+
return this.nextContent.text || ''
|
|
86
|
+
}
|
|
69
87
|
return this.nextContent
|
|
70
88
|
},
|
|
71
89
|
html () {
|
|
72
|
-
let content = this.
|
|
90
|
+
let content = this.text
|
|
73
91
|
if (this.formatter) {
|
|
74
92
|
content = this.formatter({
|
|
75
93
|
content: this.nextContent
|
|
76
94
|
})
|
|
77
95
|
} else {
|
|
78
|
-
content = html2Escape(content)
|
|
96
|
+
content = html2Escape(String(content || ''))
|
|
79
97
|
}
|
|
80
98
|
if (!content) {
|
|
81
99
|
return ''
|
|
82
100
|
}
|
|
101
|
+
content = String(content)
|
|
83
102
|
content = content.replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, item => {
|
|
84
103
|
return `<a href="${item}" target='_blank'>${item}</a>`
|
|
85
104
|
})
|
|
@@ -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: 22,
|
|
7
7
|
CUSTOM_EXPRESSION: 29,
|
|
8
8
|
CUSTOM_EXPRESSION_W: 104,
|
|
9
9
|
// MUSIC: 1040187441,
|
|
@@ -66,6 +66,14 @@ 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
|
+
|
|
69
77
|
/**
|
|
70
78
|
* 格式化为短消息
|
|
71
79
|
*/
|
|
@@ -73,10 +81,8 @@ export function formatShortMessage (msgType, msgContent) {
|
|
|
73
81
|
let shortMessage = msgContent
|
|
74
82
|
switch (msgType) {
|
|
75
83
|
case MESSAGE_TYPE.TEXT:
|
|
76
|
-
shortMessage = msgContent
|
|
77
|
-
break
|
|
78
84
|
case MESSAGE_TYPE.TEXT_W:
|
|
79
|
-
shortMessage = msgContent
|
|
85
|
+
shortMessage = getTextContent(msgContent)
|
|
80
86
|
break
|
|
81
87
|
case MESSAGE_TYPE.TEXT_WITH_AT:
|
|
82
88
|
let {atId, content, text} = toJson(msgContent) || {}
|
|
@@ -224,4 +230,4 @@ export function formatShortSessionMessage (session, contextFn) {
|
|
|
224
230
|
}
|
|
225
231
|
}
|
|
226
232
|
return formatShortMessage(session.lastMsgType, session.lastMsgContent)
|
|
227
|
-
}
|
|
233
|
+
}
|
|
@@ -147,7 +147,9 @@ 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.
|
|
150
|
+
if (this.nextContent.resPath) {
|
|
151
|
+
url = this.nextContent.resPath
|
|
152
|
+
} else if (this.nextContent.videoPath) {
|
|
151
153
|
url = this.nextContent.videoPath
|
|
152
154
|
} else {
|
|
153
155
|
url = this.nextContent.tencentUrl
|
|
@@ -163,7 +165,7 @@ export default {
|
|
|
163
165
|
if (!this.nextContent) {
|
|
164
166
|
return
|
|
165
167
|
}
|
|
166
|
-
return this.nextContent.previewImgUrl
|
|
168
|
+
return this.nextContent.resCoverPath || this.nextContent.previewImgUrl
|
|
167
169
|
},
|
|
168
170
|
innerCover () {
|
|
169
171
|
return formatOssPath(this.cover)
|
|
@@ -202,6 +204,12 @@ export default {
|
|
|
202
204
|
throw new Error('不支持的更新属性' + prop)
|
|
203
205
|
}
|
|
204
206
|
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
|
|
205
213
|
}
|
|
206
214
|
})
|
|
207
215
|
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.url || this.nextContent.resUrl
|
|
135
|
+
let url = this.nextContent.voicePath || this.nextContent.url || this.nextContent.resUrl
|
|
136
136
|
return url
|
|
137
137
|
},
|
|
138
138
|
nextId () {
|
|
@@ -0,0 +1,24 @@
|
|
|
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>
|
|
@@ -0,0 +1,25 @@
|
|
|
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>
|
|
@@ -0,0 +1,62 @@
|
|
|
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>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
2
|
+
<wework-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="
|
|
48
|
+
<template v-else-if="item.msgType === MESSAGE_TYPE.VIDEO">
|
|
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
|
+
</wework-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 WeworkChatControlConfigMsg from '../wework-chat-control/wework-chat-control-config-msg.vue'
|
|
568
568
|
|
|
569
569
|
export default {
|
|
570
|
-
name: '
|
|
570
|
+
name: 'SdkWeworkPanelItem',
|
|
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
|
+
WeworkChatControlConfigMsg
|
|
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="
|
|
4
|
+
v-bind="props"
|
|
5
5
|
:is-sender-method="handleIsSenderMethod"
|
|
6
6
|
@initloaded="handleChatsInitLoaded"
|
|
7
7
|
@chat-contextmenu="handleChatContext"
|
|
@@ -37,6 +37,9 @@
|
|
|
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>
|
|
40
43
|
</template>
|
|
41
44
|
</sdk-chat-panel>
|
|
42
45
|
</template>
|
|
@@ -59,7 +62,8 @@ export default {
|
|
|
59
62
|
}
|
|
60
63
|
},
|
|
61
64
|
keyField: {
|
|
62
|
-
type: String
|
|
65
|
+
type: String,
|
|
66
|
+
default: 'id'
|
|
63
67
|
},
|
|
64
68
|
startDate: {
|
|
65
69
|
type: Number
|
|
@@ -88,9 +92,6 @@ export default {
|
|
|
88
92
|
type: Boolean,
|
|
89
93
|
default: true
|
|
90
94
|
},
|
|
91
|
-
renderControl: {
|
|
92
|
-
type: Function
|
|
93
|
-
},
|
|
94
95
|
fetchUserMethod: {
|
|
95
96
|
type: Function
|
|
96
97
|
},
|
|
@@ -126,12 +127,33 @@ export default {
|
|
|
126
127
|
},
|
|
127
128
|
contextChatId: {
|
|
128
129
|
type: String
|
|
130
|
+
},
|
|
131
|
+
onBeforeSelectionChange: {
|
|
132
|
+
type: Function
|
|
129
133
|
}
|
|
130
134
|
},
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
135
|
+
data () {
|
|
136
|
+
return {
|
|
137
|
+
checkMsgMap: {}
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
computed: {
|
|
141
|
+
props () {
|
|
142
|
+
const { config, ...nextProps } = this.$props
|
|
143
|
+
return nextProps
|
|
134
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
|
+
}
|
|
155
|
+
},
|
|
156
|
+
methods: {
|
|
135
157
|
handleIsSenderMethod ({ item }) {
|
|
136
158
|
return !!item.send
|
|
137
159
|
},
|
|
@@ -148,8 +170,67 @@ export default {
|
|
|
148
170
|
this.currentContextChat = null
|
|
149
171
|
return this.$refs.panel && this.$refs.panel.reload()
|
|
150
172
|
},
|
|
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
|
+
},
|
|
151
230
|
handleChatContext (item, evt) {
|
|
152
|
-
this.$emit('chat-contextmenu',
|
|
231
|
+
this.$emit('chat-contextmenu', {
|
|
232
|
+
item
|
|
233
|
+
}, evt)
|
|
153
234
|
},
|
|
154
235
|
handleChatViewContext ({ item }) {
|
|
155
236
|
this.$emit('chat-view-context', {
|
package/package.json
CHANGED
|
@@ -15,6 +15,7 @@ export default class ClietChatSocket {
|
|
|
15
15
|
// 执行回调事件前的方法
|
|
16
16
|
beforeFireCallback: null,
|
|
17
17
|
onCmdQwNewMessage: null,
|
|
18
|
+
onCmdQwContactInfoChanged: null,
|
|
18
19
|
onCmdSendMessageResult: null,
|
|
19
20
|
onCmdFriendInfoChanged: null,
|
|
20
21
|
onCmdDownloadVideoResult: null,
|
|
@@ -27,6 +28,7 @@ export default class ClietChatSocket {
|
|
|
27
28
|
}
|
|
28
29
|
this.socket = options.socket
|
|
29
30
|
this.socket.event.on('onCmdQwNewMessage', options.onCmdQwNewMessage)
|
|
31
|
+
this.socket.event.on('onCmdQwContactInfoChanged', options.onCmdQwContactInfoChanged)
|
|
30
32
|
this.socket.event.on('onHeartbeatCheck', ({ mergeParams }) => {
|
|
31
33
|
options.onHeartbeatCheck && options.onHeartbeatCheck({
|
|
32
34
|
mergeParams
|
|
@@ -62,4 +64,4 @@ export default class ClietChatSocket {
|
|
|
62
64
|
setUrl (url) {
|
|
63
65
|
this.socket.setUrl(url)
|
|
64
66
|
}
|
|
65
|
-
}
|
|
67
|
+
}
|
|
@@ -258,6 +258,58 @@ class ClientChat {
|
|
|
258
258
|
})
|
|
259
259
|
this.socket = new ClientChatSocket({
|
|
260
260
|
socket: options.socket,
|
|
261
|
+
onCmdQwContactInfoChanged: ({ data }) => {
|
|
262
|
+
if (!data) {
|
|
263
|
+
return
|
|
264
|
+
}
|
|
265
|
+
const contacts = Array.isArray(data.contacts)
|
|
266
|
+
? data.contacts
|
|
267
|
+
: (data.contactId ? [data] : [])
|
|
268
|
+
const removedSessionIds = {}
|
|
269
|
+
const accountUnreadCountMap = {}
|
|
270
|
+
let contactsModified = false
|
|
271
|
+
contacts.forEach(contact => {
|
|
272
|
+
if (!contact || Number(contact.changeType) !== 3 || !contact.contactId) {
|
|
273
|
+
return
|
|
274
|
+
}
|
|
275
|
+
contactsModified = true
|
|
276
|
+
this.contacts.removeFriend(contact.contactId)
|
|
277
|
+
let session = this.session.findSession(({ session }) => {
|
|
278
|
+
return String(session.type) === '0' &&
|
|
279
|
+
session.targetId === contact.contactId &&
|
|
280
|
+
(!contact.qwAccountId || session.qwAccountId === contact.qwAccountId)
|
|
281
|
+
})
|
|
282
|
+
if (!session) {
|
|
283
|
+
const sessionId = createSessionId(
|
|
284
|
+
contact.corpId || data.corpId,
|
|
285
|
+
contact.qwAccountId,
|
|
286
|
+
contact.contactId
|
|
287
|
+
)
|
|
288
|
+
session = sessionId && this.session.getSessionByLocal(sessionId)
|
|
289
|
+
}
|
|
290
|
+
if (!session || removedSessionIds[session.id]) {
|
|
291
|
+
return
|
|
292
|
+
}
|
|
293
|
+
removedSessionIds[session.id] = true
|
|
294
|
+
if (this.session.currentSession && this.session.currentSession.id === session.id) {
|
|
295
|
+
this.session.setCurrentSession(null)
|
|
296
|
+
}
|
|
297
|
+
const accountId = session.qwAccountId || contact.qwAccountId
|
|
298
|
+
if (accountId) {
|
|
299
|
+
accountUnreadCountMap[accountId] = (accountUnreadCountMap[accountId] || 0) + (session.unreadMsgCount || 0)
|
|
300
|
+
}
|
|
301
|
+
this.session.removeSession(session.id)
|
|
302
|
+
})
|
|
303
|
+
if (contactsModified) {
|
|
304
|
+
this.contacts.markModify()
|
|
305
|
+
}
|
|
306
|
+
return Promise.all(Object.keys(accountUnreadCountMap).map(accountId => {
|
|
307
|
+
const removedUnreadCount = accountUnreadCountMap[accountId]
|
|
308
|
+
return this.account.updateAccountUnreadMessageNum(accountId, ({ unreadMesasgeNum }) => {
|
|
309
|
+
return Math.max(0, unreadMesasgeNum - removedUnreadCount)
|
|
310
|
+
})
|
|
311
|
+
}))
|
|
312
|
+
},
|
|
261
313
|
// 接受新消息
|
|
262
314
|
onCmdQwNewMessage: ({ data }) => {
|
|
263
315
|
// 插入消息
|
|
@@ -328,4 +380,4 @@ class ClientChat {
|
|
|
328
380
|
}
|
|
329
381
|
}
|
|
330
382
|
|
|
331
|
-
export default ClientChat
|
|
383
|
+
export default ClientChat
|
|
@@ -1,35 +0,0 @@
|
|
|
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>
|
|
@@ -1,36 +0,0 @@
|
|
|
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>
|
|
@@ -1,35 +0,0 @@
|
|
|
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>
|
|
@@ -1,36 +0,0 @@
|
|
|
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>
|
|
@@ -1,35 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
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>
|
|
@@ -1,35 +0,0 @@
|
|
|
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>
|
|
@@ -1,35 +0,0 @@
|
|
|
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>
|
|
@@ -1,43 +0,0 @@
|
|
|
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>
|
|
@@ -1,39 +0,0 @@
|
|
|
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>
|
|
@@ -1,37 +0,0 @@
|
|
|
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>
|
|
@@ -1,35 +0,0 @@
|
|
|
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>
|