@aochuang/client-sdk 1.0.371 → 1.0.373

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.
Files changed (165) hide show
  1. package/common/.DS_Store +0 -0
  2. package/components/.DS_Store +0 -0
  3. package/components/chat-editor/chat-editor-suggestions/chat-editor-suggestions.vue +28 -2
  4. package/components/chat-editor/chat-editor.vue +62 -1
  5. package/components/index.js +6 -1
  6. package/components/session-select/session-select-item.vue +8 -9
  7. package/components/wechat-chat-control/.DS_Store +0 -0
  8. package/components/wechat-chat-control/transfer/.DS_Store +0 -0
  9. package/components/wechat-chat-control/url/.DS_Store +0 -0
  10. package/components/wechat-chat-control/voice/.DS_Store +0 -0
  11. package/components/wework-chat-control/channel-card/channel-card.vue +144 -0
  12. package/components/wework-chat-control/channel-live/channel-live.vue +7 -2
  13. package/components/wework-chat-control/company-card/company-card.vue +1 -1
  14. package/components/wework-chat-control/custom-expression/custom-expression.vue +2 -1
  15. package/components/wework-chat-control/file-url/file-url.vue +34 -16
  16. package/components/wework-chat-control/image/image.vue +137 -2
  17. package/components/wework-chat-control/index.js +15 -7
  18. package/components/wework-chat-control/link/.DS_Store +0 -0
  19. package/components/wework-chat-control/location/location.vue +3 -3
  20. package/components/wework-chat-control/merge-message/merge-message-panel.vue +63 -0
  21. package/components/wework-chat-control/merge-message/merge-message.vue +84 -0
  22. package/components/wework-chat-control/merge-message/util.js +59 -0
  23. package/components/wework-chat-control/metting/enterprise-wechat.png +0 -0
  24. package/components/wework-chat-control/metting/meeting-video.svg +4 -0
  25. package/components/wework-chat-control/metting/metting.vue +181 -0
  26. package/components/wework-chat-control/red-envelopes/red-envelopes.vue +3 -2
  27. package/components/wework-chat-control/text/text-default.vue +99 -0
  28. package/components/wework-chat-control/text/text-quote.vue +105 -0
  29. package/components/wework-chat-control/text/text.vue +24 -144
  30. package/components/wework-chat-control/url/url-channel-live.vue +53 -0
  31. package/components/wework-chat-control/url/url-miniprogram.vue +6 -7
  32. package/components/wework-chat-control/url/url.vue +26 -2
  33. package/components/wework-chat-control/util.js +26 -17
  34. package/components/wework-chat-control/video/.DS_Store +0 -0
  35. package/components/wework-chat-control/video/video.vue +10 -2
  36. package/components/wework-chat-control/voice/voice.vue +9 -2
  37. package/components/wework-chat-control/wework-chat-control-config-item.vue +24 -0
  38. package/components/wework-chat-control/wework-chat-control-config-msg.vue +25 -0
  39. package/{uni-components/chat-control/chat-control-config.vue → components/wework-chat-control/wework-chat-control-config.vue} +16 -13
  40. package/components/wework-chat-panel/chat-panel-chat-status/chat-panel-chat-status.vue +73 -0
  41. package/components/wework-chat-panel/chat-panel-item.vue +56 -25
  42. package/components/wework-chat-panel/chat-panel.vue +96 -13
  43. package/package.json +10 -3
  44. package/services/.DS_Store +0 -0
  45. package/services/client-chat/client-chat-wework/client-chat-account.js +84 -1
  46. package/services/client-chat/client-chat-wework/client-chat-concats.js +81 -17
  47. package/services/client-chat/client-chat-wework/client-chat-message.js +45 -5
  48. package/services/client-chat/client-chat-wework/client-chat-session.js +59 -4
  49. package/services/client-chat/client-chat-wework/client-chat-socket.js +13 -1
  50. package/services/client-chat/client-chat-wework/client-chat.js +320 -11
  51. package/services/client-chat/client-chat-wework/utils.js +5 -5
  52. package/components/wework-chat-panel/chat-panel-controls/company-card/company-card.vue +0 -35
  53. package/components/wework-chat-panel/chat-panel-controls/expression/expression.vue +0 -36
  54. package/components/wework-chat-panel/chat-panel-controls/file-url/file-url.vue +0 -35
  55. package/components/wework-chat-panel/chat-panel-controls/image/image.vue +0 -36
  56. package/components/wework-chat-panel/chat-panel-controls/index.js +0 -35
  57. package/components/wework-chat-panel/chat-panel-controls/jx-sys-text/jx-sys-text.vue +0 -28
  58. package/components/wework-chat-panel/chat-panel-controls/link/link.vue +0 -35
  59. package/components/wework-chat-panel/chat-panel-controls/location/location.vue +0 -35
  60. package/components/wework-chat-panel/chat-panel-controls/text/text.vue +0 -43
  61. package/components/wework-chat-panel/chat-panel-controls/unkonw/unkonw.vue +0 -39
  62. package/components/wework-chat-panel/chat-panel-controls/video/video.vue +0 -37
  63. package/components/wework-chat-panel/chat-panel-controls/voice/voice.vue +0 -35
  64. package/uni-common/account-portray/account-portray.vue +0 -51
  65. package/uni-common/account-select/account-select-item.vue +0 -172
  66. package/uni-common/account-select/account-select.vue +0 -252
  67. package/uni-common/all-friend-avatar/all-friend-avatar.vue +0 -49
  68. package/uni-common/friend-avatar/default.svg +0 -1
  69. package/uni-common/friend-avatar/friend-avatar.vue +0 -27
  70. package/uni-common/friend-avatar/index.js +0 -3
  71. package/uni-common/friend-loader/friend-loader.vue +0 -53
  72. package/uni-common/friend-portray/friend-portray.vue +0 -56
  73. package/uni-common/group-avatar/default.svg +0 -1
  74. package/uni-common/group-avatar/group-avatar.vue +0 -18
  75. package/uni-common/group-avatar/index.js +0 -3
  76. package/uni-common/room-avatar/default.svg +0 -6
  77. package/uni-common/room-avatar/index.js +0 -3
  78. package/uni-common/room-avatar/room-avatar.vue +0 -27
  79. package/uni-common/room-loader/room-loader.vue +0 -53
  80. package/uni-common/room-portray/room-portray.vue +0 -56
  81. package/uni-components/chat-control/calling/calling.vue +0 -91
  82. package/uni-components/chat-control/calling/phone-fill.svg +0 -1
  83. package/uni-components/chat-control/calling/vidicon-fill.svg +0 -1
  84. package/uni-components/chat-control/channel-video/channel-video.vue +0 -89
  85. package/uni-components/chat-control/channel-video-card/channel-video-card.vue +0 -105
  86. package/uni-components/chat-control/channel-video-live/channel-video-live.vue +0 -92
  87. package/uni-components/chat-control/chat-control-config-item/chat-control-config-item.vue +0 -20
  88. package/uni-components/chat-control/chat-control-config-item/index.js +0 -3
  89. package/uni-components/chat-control/chat-control-config-msg/chat-control-config-msg-app.vue +0 -25
  90. package/uni-components/chat-control/chat-control-config-msg/chat-control-config-msg-h5.vue +0 -21
  91. package/uni-components/chat-control/chat-control.vue +0 -218
  92. package/uni-components/chat-control/company-card/company-card.vue +0 -123
  93. package/uni-components/chat-control/const.js +0 -28
  94. package/uni-components/chat-control/expression/expression.vue +0 -41
  95. package/uni-components/chat-control/image/image.vue +0 -68
  96. package/uni-components/chat-control/index.js +0 -89
  97. package/uni-components/chat-control/location/location.vue +0 -110
  98. package/uni-components/chat-control/member-change/member-change.vue +0 -32
  99. package/uni-components/chat-control/quote-message/quote-message.vue +0 -216
  100. package/uni-components/chat-control/real-time-position/real-time-position.vue +0 -62
  101. package/uni-components/chat-control/redpacket/red-envelope.svg +0 -1
  102. package/uni-components/chat-control/redpacket/redpacket.vue +0 -75
  103. package/uni-components/chat-control/share-card/share-card.vue +0 -101
  104. package/uni-components/chat-control/system/system.vue +0 -69
  105. package/uni-components/chat-control/system-batch-message/system-batch-message.vue +0 -30
  106. package/uni-components/chat-control/system-text/system-text.vue +0 -32
  107. package/uni-components/chat-control/text/text.vue +0 -67
  108. package/uni-components/chat-control/text-with-at/text-with-at.vue +0 -51
  109. package/uni-components/chat-control/transfer/red-transfer.svg +0 -1
  110. package/uni-components/chat-control/transfer/transfer.vue +0 -80
  111. package/uni-components/chat-control/unkonw/unkonw.vue +0 -37
  112. package/uni-components/chat-control/url/icons/file-excel-line.svg +0 -1
  113. package/uni-components/chat-control/url/icons/file-info-line.svg +0 -1
  114. package/uni-components/chat-control/url/icons/file-music-line.svg +0 -1
  115. package/uni-components/chat-control/url/icons/file-pdf-line.svg +0 -1
  116. package/uni-components/chat-control/url/icons/file-ppt-line.svg +0 -1
  117. package/uni-components/chat-control/url/icons/file-settings-line.svg +0 -1
  118. package/uni-components/chat-control/url/icons/file-text-line.svg +0 -1
  119. package/uni-components/chat-control/url/icons/file-unknow-line.svg +0 -1
  120. package/uni-components/chat-control/url/icons/file-word-line.svg +0 -1
  121. package/uni-components/chat-control/url/icons/file-zip-line.svg +0 -1
  122. package/uni-components/chat-control/url/icons/index.js +0 -24
  123. package/uni-components/chat-control/url/miniprogram.svg +0 -1
  124. package/uni-components/chat-control/url/url-miniprogram.vue +0 -116
  125. package/uni-components/chat-control/url/url.vue +0 -306
  126. package/uni-components/chat-control/url-new/icons/file-excel-line.svg +0 -1
  127. package/uni-components/chat-control/url-new/icons/file-info-line.svg +0 -1
  128. package/uni-components/chat-control/url-new/icons/file-music-line.svg +0 -1
  129. package/uni-components/chat-control/url-new/icons/file-pdf-line.svg +0 -1
  130. package/uni-components/chat-control/url-new/icons/file-ppt-line.svg +0 -1
  131. package/uni-components/chat-control/url-new/icons/file-settings-line.svg +0 -1
  132. package/uni-components/chat-control/url-new/icons/file-text-line.svg +0 -1
  133. package/uni-components/chat-control/url-new/icons/file-unknow-line.svg +0 -1
  134. package/uni-components/chat-control/url-new/icons/file-word-line.svg +0 -1
  135. package/uni-components/chat-control/url-new/icons/file-zip-line.svg +0 -1
  136. package/uni-components/chat-control/url-new/icons/index.js +0 -24
  137. package/uni-components/chat-control/url-new/url-new.vue +0 -110
  138. package/uni-components/chat-control/utils.js +0 -12
  139. package/uni-components/chat-control/video/video.vue +0 -156
  140. package/uni-components/chat-control/voice/voice.vue +0 -166
  141. package/uni-components/chat-editor/chat-editor-chartlet/chat-editor-chartlet-collect.vue +0 -84
  142. package/uni-components/chat-editor/chat-editor-chartlet/chat-editor-chartlet-system.vue +0 -28
  143. package/uni-components/chat-editor/chat-editor-chartlet/chat-editor-chartlet.vue +0 -85
  144. package/uni-components/chat-editor/chat-editor-func/chat-editor-func.vue +0 -157
  145. package/uni-components/chat-editor/chat-editor-func-at/chat-editor-func-at-panel.vue +0 -158
  146. package/uni-components/chat-editor/chat-editor-func-at/chat-editor-func-at.vue +0 -61
  147. package/uni-components/chat-editor/chat-editor-func-button/chat-editor-func-button.vue +0 -58
  148. package/uni-components/chat-editor/chat-editor-func-file/chat-editor-func-file.vue +0 -54
  149. package/uni-components/chat-editor/chat-editor-func-image/chat-editor-func-image.vue +0 -42
  150. package/uni-components/chat-editor/chat-editor-func-video/chat-editor-func-video.vue +0 -42
  151. package/uni-components/chat-editor/chat-editor-func-voice/chat-editor-func-voice.vue +0 -25
  152. package/uni-components/chat-editor/chat-editor-message-send/chat-editor-message-send.vue +0 -158
  153. package/uni-components/chat-editor/chat-editor-quote/chat-editor-quote.vue +0 -75
  154. package/uni-components/chat-editor/chat-editor.vue +0 -257
  155. package/uni-components/chat-editor/index.js +0 -10
  156. package/uni-components/chat-editor/util.js +0 -65
  157. package/uni-components/chat-panel/chat-panel-chats-box.vue +0 -238
  158. package/uni-components/chat-panel/chat-panel-chats-forward/chat-panel-chats-forward.vue +0 -273
  159. package/uni-components/chat-panel/chat-panel-chats-item.vue +0 -578
  160. package/uni-components/chat-panel/chat-panel-chats-status/chat-panel-chats-status.vue +0 -71
  161. package/uni-components/chat-panel/chat-panel-chats.vue +0 -368
  162. package/uni-components/chat-panel/chat-panel.vue +0 -227
  163. package/uni-components/contacts-group-select/contacts-group-select-item.vue +0 -85
  164. package/uni-components/contacts-group-select/contacts-group-select-panel.vue +0 -119
  165. package/uni-components/contacts-group-select/contacts-group-select.vue +0 -150
@@ -0,0 +1,181 @@
1
+ <template>
2
+ <div class="sdk-chat-wework-control-metting" :class="'sdk-chat-wework-control-metting--' + type">
3
+ <template v-if="type === 'default' || type === 'thumb'">
4
+ <div class="sdk-chat-wework-control-metting__card">
5
+ <div class="sdk-chat-wework-control-metting__main">
6
+ <div class="sdk-chat-wework-control-metting__info">
7
+ <div class="sdk-chat-wework-control-metting__title">{{ title }}</div>
8
+ <div class="sdk-chat-wework-control-metting__description">{{ description }}</div>
9
+ <div class="sdk-chat-wework-control-metting__initiator" v-if="initiatorText">{{ initiatorText }}</div>
10
+ </div>
11
+ <div class="sdk-chat-wework-control-metting__video-icon">
12
+ <img src="./meeting-video.svg" alt="会议" />
13
+ </div>
14
+ </div>
15
+ <div class="sdk-chat-wework-control-metting__brand">
16
+ <img src="./enterprise-wechat.png" alt="" />
17
+ <span>企业微信</span>
18
+ </div>
19
+ </div>
20
+ </template>
21
+ <template v-else-if="type === 'quote'">
22
+ <div class="sdk-chat-wework-control-metting__quote-icon">
23
+ <img src="./meeting-video.svg" alt="会议" />
24
+ </div>
25
+ <div class="sdk-chat-wework-control-metting__quote-title">{{ title }}</div>
26
+ </template>
27
+ </div>
28
+ </template>
29
+ <script>
30
+ import { parse } from '../../../utils/json'
31
+
32
+ export default {
33
+ name: 'SdkChatControlMetting',
34
+ props: {
35
+ id: {
36
+ type: String
37
+ },
38
+ content: {
39
+ type: [String, Object]
40
+ },
41
+ initiator: {
42
+ type: String
43
+ },
44
+ updateChatBoxProp: {
45
+ type: Function
46
+ },
47
+ type: {
48
+ type: String,
49
+ default: 'default',
50
+ validator (value) {
51
+ return ['quote', 'default', 'thumb'].includes(value)
52
+ }
53
+ }
54
+ },
55
+ computed: {
56
+ nextContent () {
57
+ return parse(this.content) || {}
58
+ },
59
+ title () {
60
+ return this.nextContent.title || '企业微信会议'
61
+ },
62
+ description () {
63
+ return this.nextContent.desc || '会议已开始,请尽快入会'
64
+ },
65
+ initiatorText () {
66
+ return this.initiator ? `发起人:${this.initiator}` : ''
67
+ },
68
+ url () {
69
+ return this.nextContent.url
70
+ }
71
+ },
72
+ created () {
73
+ if (this.url && this.updateChatBoxProp) {
74
+ this.updateChatBoxProp('href', this.url)
75
+ }
76
+ }
77
+ }
78
+ </script>
79
+ <style lang="less">
80
+ .sdk-chat-wework-control-metting {
81
+ display: inline-block;
82
+ max-width: 100%;
83
+ color: #222;
84
+ }
85
+ .sdk-chat-wework-control-metting__card {
86
+ width: 248px;
87
+ max-width: 100%;
88
+ padding: 10px 10px 8px;
89
+ box-sizing: border-box;
90
+ border-radius: 6px;
91
+ background-color: #f1f1f3;
92
+ }
93
+ .sdk-chat-wework-control-metting__main {
94
+ display: flex;
95
+ align-items: center;
96
+ }
97
+ .sdk-chat-wework-control-metting__info {
98
+ flex: 1;
99
+ min-width: 0;
100
+ min-height: 64px;
101
+ }
102
+ .sdk-chat-wework-control-metting__title {
103
+ overflow: hidden;
104
+ color: #222;
105
+ font-size: 14px;
106
+ font-weight: 500;
107
+ line-height: 20px;
108
+ text-overflow: ellipsis;
109
+ white-space: nowrap;
110
+ margin-bottom: 6px;
111
+ }
112
+ .sdk-chat-wework-control-metting__description,
113
+ .sdk-chat-wework-control-metting__initiator {
114
+ overflow: hidden;
115
+ color: #8a8a8a;
116
+ font-size: 12px;
117
+ line-height: 17px;
118
+ text-overflow: ellipsis;
119
+ white-space: nowrap;
120
+ }
121
+ .sdk-chat-wework-control-metting__video-icon {
122
+ display: flex;
123
+ align-items: center;
124
+ justify-content: center;
125
+ width: 48px;
126
+ height: 48px;
127
+ min-width: 48px;
128
+ margin-left: 10px;
129
+ border-radius: 3px;
130
+ background-color: #4b91f1;
131
+ img {
132
+ width: 26px;
133
+ height: 26px;
134
+ }
135
+ }
136
+ .sdk-chat-wework-control-metting__brand {
137
+ display: flex;
138
+ align-items: center;
139
+ height: 18px;
140
+ margin-top: 6px;
141
+ color: #999;
142
+ font-size: 12px;
143
+ line-height: 18px;
144
+ img {
145
+ width: 15px;
146
+ height: 15px;
147
+ margin-right: 4px;
148
+ }
149
+ }
150
+ .sdk-chat-wework-control-metting--thumb {
151
+ width: 100%;
152
+ .sdk-chat-wework-control-metting__card {
153
+ width: 100%;
154
+ }
155
+ }
156
+ .sdk-chat-wework-control-metting--quote {
157
+ display: flex;
158
+ align-items: center;
159
+ max-width: 320px;
160
+ .sdk-chat-wework-control-metting__quote-icon {
161
+ display: flex;
162
+ align-items: center;
163
+ justify-content: center;
164
+ width: 22px;
165
+ height: 22px;
166
+ min-width: 22px;
167
+ margin-right: 6px;
168
+ border-radius: 2px;
169
+ background-color: #4b91f1;
170
+ img {
171
+ width: 14px;
172
+ height: 14px;
173
+ }
174
+ }
175
+ .sdk-chat-wework-control-metting__quote-title {
176
+ overflow: hidden;
177
+ text-overflow: ellipsis;
178
+ white-space: nowrap;
179
+ }
180
+ }
181
+ </style>
@@ -63,10 +63,10 @@ export default {
63
63
  return parse(this.content) || {}
64
64
  },
65
65
  title () {
66
- return this.nextContent.wish
66
+ return this.nextContent.content
67
67
  },
68
68
  description () {
69
- return ''
69
+ return this.nextContent.receiveText
70
70
  },
71
71
  category () {
72
72
  return '微红包'
@@ -105,6 +105,7 @@ export default {
105
105
  flex: 1;
106
106
  min-width: 0;
107
107
  line-height: 1.3em;
108
+ padding-top: 6px;
108
109
  }
109
110
  .sdk-wework-control-redpacket__title{
110
111
  line-height: 22px;
@@ -0,0 +1,99 @@
1
+ <template>
2
+ <div class="sdk-chat-wework-control-text" :class="['sdk-chat-wework-control-text--' + type]">
3
+ <div class="sdk-chat-wework-control-text__main">
4
+ <template v-if="hasScroll">
5
+ <ui-popover :value="showPopover" @input="handleShowPopoverChange">
6
+ <template slot="reference">
7
+ <div class="sdk-chat-wework-control-text__content" v-html="html" ref="popoverContent"></div>
8
+ </template>
9
+ <div class="sdk-chat-wework-control-text__popover" v-html="html" :style="{'width': popoverWidth}"></div>
10
+ </ui-popover>
11
+ </template>
12
+ <template v-else>
13
+ <div class="sdk-chat-wework-control-text__content" v-html="html" ref="content"></div>
14
+ </template>
15
+ </div>
16
+ </div>
17
+ </template>
18
+ <script>
19
+ import {Popover as UiPopover} from '@aochuang/common/components'
20
+ import {parseWechatEmoji} from '@aochuang/common/common/wechat-emoji'
21
+ import {html2Escape} from '../../../utils/string'
22
+
23
+ function parseTextContent (content) {
24
+ if (typeof content !== 'string') return content
25
+ try {
26
+ const data = JSON.parse(content)
27
+ return data && typeof data === 'object' ? data : content
28
+ } catch (e) {
29
+ return content
30
+ }
31
+ }
32
+
33
+ export default {
34
+ name: 'SdkChatControlTextDefault',
35
+ components: {UiPopover},
36
+ props: {
37
+ id: {type: String},
38
+ content: {type: [String, Object]},
39
+ type: {
40
+ type: String,
41
+ default: 'default',
42
+ validator (value) { return ['quote', 'default', 'thumb'].includes(value) }
43
+ },
44
+ formatter: {type: Function}
45
+ },
46
+ data () {
47
+ return {hasScroll: false, showPopover: false, popoverWidth: null}
48
+ },
49
+ computed: {
50
+ nextContent () { return parseTextContent(this.content) },
51
+ text () {
52
+ return this.nextContent && typeof this.nextContent === 'object' ? this.nextContent.text || '' : this.nextContent
53
+ },
54
+ html () {
55
+ let content = this.formatter ? this.formatter({content: this.nextContent}) : parseWechatEmoji(html2Escape(String(this.text || '')), false)
56
+ if (!content) return ''
57
+ content = String(content).replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, item => `<a href="${item}" target='_blank'>${item}</a>`)
58
+ return content.trim()
59
+ }
60
+ },
61
+ mounted () {
62
+ if (this.$refs.content) this.hasScroll = this.$refs.content.scrollHeight > this.$refs.content.clientHeight
63
+ },
64
+ methods: {
65
+ handleShowPopoverChange (visible) {
66
+ if (this.$refs.popoverContent && visible) this.popoverWidth = this.$refs.popoverContent.offsetWidth + 'px'
67
+ this.$nextTick(() => { this.showPopover = visible })
68
+ }
69
+ }
70
+ }
71
+ </script>
72
+ <style lang="less">
73
+ .sdk-chat-wework-control-text--default .sdk-chat-wework-control-text__main { padding: 10px; }
74
+ .sdk-chat-wework-control-text--quote .sdk-chat-wework-control-text__content {
75
+ display: -webkit-box;
76
+ -webkit-box-orient: vertical;
77
+ -webkit-line-clamp: 2;
78
+ overflow: hidden;
79
+ max-width: 420px;
80
+ }
81
+ .sdk-chat-wework-control-text--thumb {
82
+ background-color: #fff;
83
+ border: 1px solid #eee;
84
+ border-radius: 3px;
85
+ padding: 6px 10px;
86
+ }
87
+ .sdk-chat-wework-control-text--thumb .sdk-chat-wework-control-text__content {
88
+ display: -webkit-box;
89
+ -webkit-box-orient: vertical;
90
+ -webkit-line-clamp: 3;
91
+ overflow: hidden;
92
+ }
93
+ .sdk-chat-wework-control-text__main { white-space: pre-wrap; line-height: 1.5em; word-break: break-all; }
94
+ .sdk-chat-wework-control-text__main img { vertical-align: top; }
95
+ .sdk-chat-wework-control-text__main a { color: #4387ff; }
96
+ .sdk-chat-wework-control-text__main a:hover { color: #4387ff; text-decoration: underline; }
97
+ .sdk-chat-wework-control-text__popover { white-space: pre-wrap; line-height: 1.5em; word-break: break-all; padding: 10px; }
98
+ .sdk-chat-wework-control-text__popover img { vertical-align: top; }
99
+ </style>
@@ -0,0 +1,105 @@
1
+ <template>
2
+ <div class="sdk-chat-wework-control-text-quote" :class="['sdk-chat-wework-control-text-quote--' + type]">
3
+ <text-default :id="id" :content="mainContent" :type="type" :formatter="formatter"></text-default>
4
+ </div>
5
+ </template>
6
+ <script>
7
+ import {parse} from '../../../utils/json'
8
+ import {chatControls} from '../index'
9
+ import WeworkChatControlConfigMsg from '../wework-chat-control-config-msg.vue'
10
+ import TextDefault from './text-default.vue'
11
+
12
+ function parseQuoteContent (content) {
13
+ if (content && typeof content === 'object') return content
14
+ const parsed = parse(content, {})
15
+ if (!parsed || typeof parsed !== 'object' || !parsed.quote || typeof content !== 'string') return parsed
16
+ // JSON.parse converts large企微 message IDs to imprecise Numbers. Restore the
17
+ // original digit sequence before it is sent to the detail endpoint.
18
+ const match = content.match(/"messageId"\s*:\s*(?:"([^"]+)"|([0-9]+))/)
19
+ if (match) parsed.quote.messageId = match[1] || match[2]
20
+ return parsed
21
+ }
22
+
23
+ export default {
24
+ name: 'SdkChatControlTextQuote',
25
+ components: {TextDefault, WeworkChatControlConfigMsg},
26
+ props: {
27
+ id: {type: String},
28
+ content: {type: [String, Object]},
29
+ type: {type: String, default: 'default'},
30
+ formatter: {type: Function},
31
+ getQuoteMessage: {type: Function},
32
+ setChatBoxFootVnode: {type: Function}
33
+ },
34
+ data () { return {loading: false, quoteMessageData: null, errorMsg: null} },
35
+ computed: {
36
+ contentObject () {
37
+ return parseQuoteContent(this.content)
38
+ },
39
+ quoteInfo () { return this.contentObject.quote || {} },
40
+ mainContent () {
41
+ const value = Object.assign({}, this.contentObject)
42
+ delete value.quote
43
+ return JSON.stringify(value)
44
+ },
45
+ quoteText () { return this.quoteInfo.text || '引用消息' },
46
+ quoteAuthor () {
47
+ const message = this.quoteMessageData || {}
48
+ return this.quoteInfo.sendName || message.userName || message.contactName || message.roomName || this.quoteInfo.sendId || '引用消息'
49
+ },
50
+ quoteControl () {
51
+ return chatControls[this.quoteMessageData && this.quoteMessageData.msgType] || TextDefault
52
+ },
53
+ quoteFootComponent () {
54
+ return {
55
+ render: h => {
56
+ const content = [h('div', {class: 'sdk-chat-wework-control-text-quote__author'}, [this.quoteAuthor])]
57
+ if (this.loading) {
58
+ content.push(h('div', {class: 'sdk-chat-wework-control-text-quote__status'}, ['引用内容正在加载中...']))
59
+ } else if (this.quoteMessageData) {
60
+ content.push(h(WeworkChatControlConfigMsg, {
61
+ props: {msgData: this.quoteMessageData},
62
+ scopedSlots: {
63
+ default: ({configData}) => h(this.quoteControl, {
64
+ props: Object.assign({}, configData, {id: this.id + '_quote', content: this.quoteMessageData.content, type: 'quote'})
65
+ })
66
+ }
67
+ }))
68
+ } else {
69
+ content.push(h('div', {class: 'sdk-chat-wework-control-text-quote__content'}, [this.quoteText]))
70
+ if (this.errorMsg) content.push(h('div', {class: 'sdk-chat-wework-control-text-quote__status'}, [this.errorMsg]))
71
+ }
72
+ return h('div', {class: 'sdk-chat-wework-control-text-quote__box'}, content)
73
+ }
74
+ }
75
+ }
76
+ },
77
+ created () {
78
+ if (this.setChatBoxFootVnode) this.setChatBoxFootVnode(this.quoteFootComponent)
79
+ if (!this.getQuoteMessage || !this.quoteInfo.messageId || !this.quoteInfo.sendTime) {
80
+ this.errorMsg = '未找到引用消息内容,请在手机中确认'
81
+ return
82
+ }
83
+ this.loading = true
84
+ this.getQuoteMessage({
85
+ msgId: String(this.quoteInfo.messageId),
86
+ sendTime: this.quoteInfo.sendTime,
87
+ content: this.quoteInfo
88
+ }).then(data => {
89
+ this.quoteMessageData = data && data.data ? data.data : data
90
+ if (!this.quoteMessageData) this.errorMsg = '未找到引用消息内容,请在手机中确认'
91
+ if (this.setChatBoxFootVnode) this.setChatBoxFootVnode(this.quoteFootComponent)
92
+ }).catch(() => {
93
+ this.errorMsg = '未找到引用消息内容,请在手机中确认'
94
+ if (this.setChatBoxFootVnode) this.setChatBoxFootVnode(this.quoteFootComponent)
95
+ }).finally(() => { this.loading = false })
96
+ }
97
+ }
98
+ </script>
99
+ <style lang="less">
100
+ .sdk-chat-wework-control-text-quote { min-width: 0; }
101
+ .sdk-chat-wework-control-text-quote__box { margin: 10px 0 0; padding: 7px 8px; background: rgba(0, 0, 0, .06); border-radius: 3px; max-width: 420px; line-height: 1.5em; }
102
+ .sdk-chat-wework-control-text-quote__author { color: #999; word-break: break-all; }
103
+ .sdk-chat-wework-control-text-quote__content, .sdk-chat-wework-control-text-quote__status { white-space: pre-wrap; word-break: break-all; }
104
+ .sdk-chat-wework-control-text-quote__status { color: #999; font-size: 12px; }
105
+ </style>
@@ -1,157 +1,37 @@
1
1
  <template>
2
- <div
3
- class="sdk-chat-wework-control-text"
4
- :class="['sdk-chat-wework-control-text--' + type]"
5
- >
6
- <div class="sdk-chat-wework-control-text__main">
7
- <template v-if="hasScroll">
8
- <ui-popover
9
- :value="showPopover"
10
- @input="handleShowPopoverChange"
11
- >
12
- <template slot="reference">
13
- <div class="sdk-chat-wework-control-text__content"
14
- v-html="html"
15
- ref="popoverContent"
16
- ></div>
17
- </template>
18
- <div class="sdk-chat-wework-control-text__popover" v-html="html" :style="{'width': popoverWidth}"></div>
19
- </ui-popover>
20
- </template>
21
- <template v-else>
22
- <div class="sdk-chat-wework-control-text__content"
23
- v-html="html"
24
- ref="content"
25
- ></div>
26
- </template>
27
- </div>
28
- </div>
2
+ <component
3
+ :is="contentObject && contentObject.quote ? quoteComponent : defaultComponent"
4
+ v-bind="componentProps"
5
+ ></component>
29
6
  </template>
30
7
  <script>
31
- import { Popover as UiPopover } from '@aochuang/common/components'
32
- import { html2Escape } from '../../../utils/string'
8
+ import TextDefault from './text-default.vue'
9
+ import TextQuote from './text-quote.vue'
10
+
11
+ function parseContent (content) {
12
+ if (typeof content !== 'string') return content
13
+ try { return JSON.parse(content) } catch (e) { return content }
14
+ }
33
15
 
34
16
  export default {
35
17
  name: 'SdkChatControlText',
36
- components: {
37
- UiPopover
38
- },
18
+ components: {TextDefault, TextQuote},
19
+ inheritAttrs: false,
39
20
  props: {
40
- id: {
41
- type: String
42
- },
43
- content: {
44
- type: String
45
- },
46
- type: {
47
- type: String,
48
- default: 'default',
49
- validator (value) {
50
- return ['quote', 'default', 'thumb'].includes(value)
51
- }
52
- },
53
- formatter: {
54
- type: Function
55
- }
56
- },
57
- data () {
58
- return {
59
- hasScroll: false,
60
- showPopover: false,
61
- popoverWidth: null
62
- }
21
+ id: {type: String},
22
+ content: {type: [String, Object]},
23
+ type: {type: String, default: 'default'},
24
+ formatter: {type: Function},
25
+ getQuoteMessage: {type: Function},
26
+ setChatBoxFootVnode: {type: Function}
63
27
  },
64
28
  computed: {
65
- nextContent () {
66
- return this.content
67
- },
68
- text () {
69
- return this.nextContent
70
- },
71
- html () {
72
- let content = this.nextContent
73
- if (this.formatter) {
74
- content = this.formatter({
75
- content: this.nextContent
76
- })
77
- } else {
78
- content = html2Escape(content)
79
- }
80
- if (!content) {
81
- return ''
82
- }
83
- content = content.replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, item => {
84
- return `<a href="${item}" target='_blank'>${item}</a>`
85
- })
86
- return content.trim()
87
- }
88
- },
89
- mounted () {
90
- if (this.$refs.content) {
91
- this.hasScroll = this.$refs.content.scrollHeight > this.$refs.content.clientHeight
92
- }
93
- },
94
- methods: {
95
- handleShowPopoverChange (visible) {
96
- if (this.$refs.popoverContent && visible) {
97
- this.popoverWidth = this.$refs.popoverContent.offsetWidth + 'px'
98
- }
99
- this.$nextTick(() => {
100
- this.showPopover = visible
101
- })
29
+ contentObject () { return parseContent(this.content) },
30
+ defaultComponent () { return TextDefault },
31
+ quoteComponent () { return TextQuote },
32
+ componentProps () {
33
+ return Object.assign({}, this.$attrs, this.$props, {getQuoteMessage: this.getQuoteMessage})
102
34
  }
103
35
  }
104
36
  }
105
37
  </script>
106
- <style lang="less">
107
- .sdk-chat-wework-control-text--default {
108
- .sdk-chat-wework-control-text__main{
109
- padding: 10px;
110
- }
111
- }
112
- .sdk-chat-wework-control-text--quote {
113
- .sdk-chat-wework-control-text__content{
114
- display: -webkit-box;
115
- -webkit-box-orient: vertical;
116
- -webkit-line-clamp: 2; /* 限制显示3行 */
117
- overflow: hidden;
118
- max-width: 420px;
119
- }
120
- }
121
- .sdk-chat-wework-control-text--thumb {
122
- background-color: #fff;
123
- border: 1px solid #eee;
124
- border-radius: 3px;
125
- padding: 6px 10px;
126
- .sdk-chat-wework-control-text__content{
127
- display: -webkit-box;
128
- -webkit-box-orient: vertical;
129
- -webkit-line-clamp: 3; /* 限制显示3行 */
130
- overflow: hidden;
131
- }
132
- }
133
- .sdk-chat-wework-control-text__main{
134
- white-space: pre-wrap;
135
- line-height: 1.5em;
136
- word-break: break-all;
137
- img {
138
- vertical-align: top;
139
- }
140
- a {
141
- color: #4387ff;
142
- &:hover {
143
- color: #4387ff;
144
- text-decoration: underline;
145
- }
146
- }
147
- }
148
- .sdk-chat-wework-control-text__popover{
149
- white-space: pre-wrap;
150
- line-height: 1.5em;
151
- word-break: break-all;
152
- padding: 10px;
153
- img {
154
- vertical-align: top;
155
- }
156
- }
157
- </style>
@@ -0,0 +1,53 @@
1
+ <script>
2
+ import { parse } from '../../../utils/json'
3
+ import ChannelLive from '../channel-live/channel-live'
4
+
5
+ export default {
6
+ name: 'SdkWeworkControlUrlChannelLive',
7
+ props: {
8
+ id: {
9
+ type: String
10
+ },
11
+ content: {
12
+ type: [String, Object]
13
+ },
14
+ type: {
15
+ type: String,
16
+ default: 'default',
17
+ validator (value) {
18
+ return ['quote', 'default', 'thumb'].includes(value)
19
+ }
20
+ },
21
+ updateChatBoxProp: {
22
+ type: Function
23
+ }
24
+ },
25
+ computed: {
26
+ nextContent () {
27
+ return parse(this.content) || {}
28
+ },
29
+ channelLiveContent () {
30
+ return {
31
+ url: this.nextContent.url,
32
+ coverUrl: this.nextContent.imageUrl,
33
+ nickname: this.nextContent.desc,
34
+ desc: (this.nextContent.title || '').replace(/^\[视频号直播\]\s*/, '')
35
+ }
36
+ }
37
+ },
38
+ created () {
39
+ if (this.nextContent.url && this.updateChatBoxProp) {
40
+ this.updateChatBoxProp('href', this.nextContent.url)
41
+ }
42
+ },
43
+ render (h) {
44
+ return h(ChannelLive, {
45
+ props: {
46
+ id: this.id,
47
+ content: this.channelLiveContent,
48
+ type: this.type
49
+ }
50
+ })
51
+ }
52
+ }
53
+ </script>
@@ -50,7 +50,7 @@
50
50
  </div>
51
51
  </template>
52
52
  <script>
53
- import { parse, parseXml } from '../../../utils/json'
53
+ import { parse } from '../../../utils/json'
54
54
  import { formatOssPath } from '@aochuang/common/utils/oss'
55
55
 
56
56
  export default {
@@ -76,26 +76,25 @@ export default {
76
76
  return parse(this.content)
77
77
  },
78
78
  miniprogramData () {
79
- let data = null
80
79
  if (!this.nextContent) {
81
- return data
80
+ return {}
82
81
  }
83
82
  return this.nextContent
84
83
  },
85
84
  icon () {
86
- return this.miniprogramData.weappIconUrl
85
+ return formatOssPath(this.miniprogramData.iconUrl)
87
86
  },
88
87
  title () {
89
88
  return this.miniprogramData.title
90
89
  },
91
90
  url () {
92
- return this.miniprogramData.msg && this.miniprogramData.msg.appmsg ? this.miniprogramData.msg.appmsg.url : ''
91
+ return this.miniprogramData.url
93
92
  },
94
93
  desc () {
95
- return this.miniprogramData.appName
94
+ return this.miniprogramData.desc
96
95
  },
97
96
  cover () {
98
- return this.miniprogramData.thumbOssUrl
97
+ return formatOssPath(this.miniprogramData.resPath || this.miniprogramData.coverUrl)
99
98
  },
100
99
  border () {
101
100
  return !this.SdkChatPanelBox