@aochuang/client-sdk 1.0.363 → 1.0.364

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 (168) hide show
  1. package/components/index.js +1 -6
  2. package/components/layout/layout.vue +4 -1
  3. package/components/session-select/session-select-item.vue +9 -8
  4. package/components/wechat-chat-control/image/image.vue +8 -13
  5. package/components/wechat-chat-control/url/url-miniprogram.vue +5 -1
  6. package/components/wework-chat-control/channel-live/channel-live.vue +2 -7
  7. package/components/wework-chat-control/company-card/company-card.vue +1 -1
  8. package/components/wework-chat-control/custom-expression/custom-expression.vue +1 -2
  9. package/components/wework-chat-control/file-url/file-url.vue +16 -34
  10. package/components/wework-chat-control/image/image.vue +2 -137
  11. package/components/wework-chat-control/index.js +7 -15
  12. package/components/wework-chat-control/location/location.vue +3 -3
  13. package/components/wework-chat-control/red-envelopes/red-envelopes.vue +2 -3
  14. package/components/wework-chat-control/text/text.vue +144 -24
  15. package/components/wework-chat-control/url/url-miniprogram.vue +7 -6
  16. package/components/wework-chat-control/url/url.vue +2 -26
  17. package/components/wework-chat-control/util.js +17 -26
  18. package/components/wework-chat-control/video/video.vue +2 -10
  19. package/components/wework-chat-control/voice/voice.vue +2 -9
  20. package/components/wework-chat-panel/chat-panel-controls/company-card/company-card.vue +35 -0
  21. package/components/wework-chat-panel/chat-panel-controls/expression/expression.vue +36 -0
  22. package/components/wework-chat-panel/chat-panel-controls/file-url/file-url.vue +35 -0
  23. package/components/wework-chat-panel/chat-panel-controls/image/image.vue +36 -0
  24. package/components/wework-chat-panel/chat-panel-controls/index.js +35 -0
  25. package/components/wework-chat-panel/chat-panel-controls/jx-sys-text/jx-sys-text.vue +28 -0
  26. package/components/wework-chat-panel/chat-panel-controls/link/link.vue +35 -0
  27. package/components/wework-chat-panel/chat-panel-controls/location/location.vue +35 -0
  28. package/components/wework-chat-panel/chat-panel-controls/text/text.vue +43 -0
  29. package/components/wework-chat-panel/chat-panel-controls/unkonw/unkonw.vue +39 -0
  30. package/components/wework-chat-panel/chat-panel-controls/video/video.vue +37 -0
  31. package/components/wework-chat-panel/chat-panel-controls/voice/voice.vue +35 -0
  32. package/components/wework-chat-panel/chat-panel-item.vue +25 -56
  33. package/components/wework-chat-panel/chat-panel.vue +13 -96
  34. package/package.json +3 -10
  35. package/services/client-chat/client-chat-wechat/client-chat-session.js +196 -92
  36. package/services/client-chat/client-chat-wechat/client-chat.js +20 -33
  37. package/services/client-chat/client-chat-wework/client-chat-account.js +1 -84
  38. package/services/client-chat/client-chat-wework/client-chat-concats.js +17 -81
  39. package/services/client-chat/client-chat-wework/client-chat-message.js +5 -45
  40. package/services/client-chat/client-chat-wework/client-chat-session.js +4 -59
  41. package/services/client-chat/client-chat-wework/client-chat-socket.js +1 -13
  42. package/services/client-chat/client-chat-wework/client-chat.js +11 -320
  43. package/services/client-chat/client-chat-wework/utils.js +5 -5
  44. package/uni-common/account-portray/account-portray.vue +51 -0
  45. package/uni-common/account-select/account-select-item.vue +172 -0
  46. package/uni-common/account-select/account-select.vue +252 -0
  47. package/uni-common/all-friend-avatar/all-friend-avatar.vue +49 -0
  48. package/uni-common/friend-avatar/default.svg +1 -0
  49. package/uni-common/friend-avatar/friend-avatar.vue +27 -0
  50. package/uni-common/friend-avatar/index.js +3 -0
  51. package/uni-common/friend-loader/friend-loader.vue +53 -0
  52. package/uni-common/friend-portray/friend-portray.vue +56 -0
  53. package/uni-common/group-avatar/default.svg +1 -0
  54. package/uni-common/group-avatar/group-avatar.vue +18 -0
  55. package/uni-common/group-avatar/index.js +3 -0
  56. package/uni-common/room-avatar/default.svg +6 -0
  57. package/uni-common/room-avatar/index.js +3 -0
  58. package/uni-common/room-avatar/room-avatar.vue +27 -0
  59. package/uni-common/room-loader/room-loader.vue +53 -0
  60. package/uni-common/room-portray/room-portray.vue +56 -0
  61. package/uni-components/chat-control/calling/calling.vue +91 -0
  62. package/uni-components/chat-control/calling/phone-fill.svg +1 -0
  63. package/uni-components/chat-control/calling/vidicon-fill.svg +1 -0
  64. package/uni-components/chat-control/channel-video/channel-video.vue +89 -0
  65. package/uni-components/chat-control/channel-video-card/channel-video-card.vue +105 -0
  66. package/uni-components/chat-control/channel-video-live/channel-video-live.vue +92 -0
  67. package/uni-components/chat-control/chat-control-config-item/chat-control-config-item.vue +20 -0
  68. package/uni-components/chat-control/chat-control-config-item/index.js +3 -0
  69. package/uni-components/chat-control/chat-control-config-msg/chat-control-config-msg-app.vue +25 -0
  70. package/uni-components/chat-control/chat-control-config-msg/chat-control-config-msg-h5.vue +21 -0
  71. package/{components/wework-chat-control/wework-chat-control-config.vue → uni-components/chat-control/chat-control-config.vue} +13 -16
  72. package/uni-components/chat-control/chat-control.vue +218 -0
  73. package/uni-components/chat-control/company-card/company-card.vue +123 -0
  74. package/uni-components/chat-control/const.js +28 -0
  75. package/uni-components/chat-control/expression/expression.vue +41 -0
  76. package/uni-components/chat-control/image/image.vue +68 -0
  77. package/uni-components/chat-control/index.js +89 -0
  78. package/uni-components/chat-control/location/location.vue +110 -0
  79. package/uni-components/chat-control/member-change/member-change.vue +32 -0
  80. package/uni-components/chat-control/quote-message/quote-message.vue +216 -0
  81. package/uni-components/chat-control/real-time-position/real-time-position.vue +62 -0
  82. package/uni-components/chat-control/redpacket/red-envelope.svg +1 -0
  83. package/uni-components/chat-control/redpacket/redpacket.vue +75 -0
  84. package/uni-components/chat-control/share-card/share-card.vue +101 -0
  85. package/uni-components/chat-control/system/system.vue +69 -0
  86. package/uni-components/chat-control/system-batch-message/system-batch-message.vue +30 -0
  87. package/uni-components/chat-control/system-text/system-text.vue +32 -0
  88. package/uni-components/chat-control/text/text.vue +67 -0
  89. package/uni-components/chat-control/text-with-at/text-with-at.vue +51 -0
  90. package/uni-components/chat-control/transfer/red-transfer.svg +1 -0
  91. package/uni-components/chat-control/transfer/transfer.vue +80 -0
  92. package/uni-components/chat-control/unkonw/unkonw.vue +37 -0
  93. package/uni-components/chat-control/url/icons/file-excel-line.svg +1 -0
  94. package/uni-components/chat-control/url/icons/file-info-line.svg +1 -0
  95. package/uni-components/chat-control/url/icons/file-music-line.svg +1 -0
  96. package/uni-components/chat-control/url/icons/file-pdf-line.svg +1 -0
  97. package/uni-components/chat-control/url/icons/file-ppt-line.svg +1 -0
  98. package/uni-components/chat-control/url/icons/file-settings-line.svg +1 -0
  99. package/uni-components/chat-control/url/icons/file-text-line.svg +1 -0
  100. package/uni-components/chat-control/url/icons/file-unknow-line.svg +1 -0
  101. package/uni-components/chat-control/url/icons/file-word-line.svg +1 -0
  102. package/uni-components/chat-control/url/icons/file-zip-line.svg +1 -0
  103. package/uni-components/chat-control/url/icons/index.js +24 -0
  104. package/uni-components/chat-control/url/miniprogram.svg +1 -0
  105. package/uni-components/chat-control/url/url-miniprogram.vue +116 -0
  106. package/uni-components/chat-control/url/url.vue +306 -0
  107. package/uni-components/chat-control/url-new/icons/file-excel-line.svg +1 -0
  108. package/uni-components/chat-control/url-new/icons/file-info-line.svg +1 -0
  109. package/uni-components/chat-control/url-new/icons/file-music-line.svg +1 -0
  110. package/uni-components/chat-control/url-new/icons/file-pdf-line.svg +1 -0
  111. package/uni-components/chat-control/url-new/icons/file-ppt-line.svg +1 -0
  112. package/uni-components/chat-control/url-new/icons/file-settings-line.svg +1 -0
  113. package/uni-components/chat-control/url-new/icons/file-text-line.svg +1 -0
  114. package/uni-components/chat-control/url-new/icons/file-unknow-line.svg +1 -0
  115. package/uni-components/chat-control/url-new/icons/file-word-line.svg +1 -0
  116. package/uni-components/chat-control/url-new/icons/file-zip-line.svg +1 -0
  117. package/uni-components/chat-control/url-new/icons/index.js +24 -0
  118. package/uni-components/chat-control/url-new/url-new.vue +110 -0
  119. package/uni-components/chat-control/utils.js +12 -0
  120. package/uni-components/chat-control/video/video.vue +156 -0
  121. package/uni-components/chat-control/voice/voice.vue +166 -0
  122. package/uni-components/chat-editor/chat-editor-chartlet/chat-editor-chartlet-collect.vue +84 -0
  123. package/uni-components/chat-editor/chat-editor-chartlet/chat-editor-chartlet-system.vue +28 -0
  124. package/uni-components/chat-editor/chat-editor-chartlet/chat-editor-chartlet.vue +85 -0
  125. package/uni-components/chat-editor/chat-editor-func/chat-editor-func.vue +157 -0
  126. package/uni-components/chat-editor/chat-editor-func-at/chat-editor-func-at-panel.vue +158 -0
  127. package/uni-components/chat-editor/chat-editor-func-at/chat-editor-func-at.vue +61 -0
  128. package/uni-components/chat-editor/chat-editor-func-button/chat-editor-func-button.vue +58 -0
  129. package/uni-components/chat-editor/chat-editor-func-file/chat-editor-func-file.vue +54 -0
  130. package/uni-components/chat-editor/chat-editor-func-image/chat-editor-func-image.vue +42 -0
  131. package/uni-components/chat-editor/chat-editor-func-video/chat-editor-func-video.vue +42 -0
  132. package/uni-components/chat-editor/chat-editor-func-voice/chat-editor-func-voice.vue +25 -0
  133. package/uni-components/chat-editor/chat-editor-message-send/chat-editor-message-send.vue +158 -0
  134. package/uni-components/chat-editor/chat-editor-quote/chat-editor-quote.vue +75 -0
  135. package/uni-components/chat-editor/chat-editor.vue +257 -0
  136. package/uni-components/chat-editor/index.js +10 -0
  137. package/uni-components/chat-editor/util.js +65 -0
  138. package/uni-components/chat-panel/chat-panel-chats-box.vue +238 -0
  139. package/uni-components/chat-panel/chat-panel-chats-forward/chat-panel-chats-forward.vue +273 -0
  140. package/uni-components/chat-panel/chat-panel-chats-item.vue +578 -0
  141. package/uni-components/chat-panel/chat-panel-chats-status/chat-panel-chats-status.vue +71 -0
  142. package/uni-components/chat-panel/chat-panel-chats.vue +368 -0
  143. package/uni-components/chat-panel/chat-panel.vue +227 -0
  144. package/uni-components/contacts-group-select/contacts-group-select-item.vue +85 -0
  145. package/uni-components/contacts-group-select/contacts-group-select-panel.vue +119 -0
  146. package/uni-components/contacts-group-select/contacts-group-select.vue +150 -0
  147. package/common/.DS_Store +0 -0
  148. package/components/.DS_Store +0 -0
  149. package/components/wechat-chat-control/.DS_Store +0 -0
  150. package/components/wechat-chat-control/transfer/.DS_Store +0 -0
  151. package/components/wechat-chat-control/url/.DS_Store +0 -0
  152. package/components/wechat-chat-control/voice/.DS_Store +0 -0
  153. package/components/wework-chat-control/channel-card/channel-card.vue +0 -144
  154. package/components/wework-chat-control/link/.DS_Store +0 -0
  155. package/components/wework-chat-control/merge-message/merge-message-panel.vue +0 -63
  156. package/components/wework-chat-control/merge-message/merge-message.vue +0 -84
  157. package/components/wework-chat-control/merge-message/util.js +0 -59
  158. package/components/wework-chat-control/metting/enterprise-wechat.png +0 -0
  159. package/components/wework-chat-control/metting/meeting-video.svg +0 -4
  160. package/components/wework-chat-control/metting/metting.vue +0 -181
  161. package/components/wework-chat-control/text/text-default.vue +0 -99
  162. package/components/wework-chat-control/text/text-quote.vue +0 -105
  163. package/components/wework-chat-control/url/url-channel-live.vue +0 -53
  164. package/components/wework-chat-control/video/.DS_Store +0 -0
  165. package/components/wework-chat-control/wework-chat-control-config-item.vue +0 -24
  166. package/components/wework-chat-control/wework-chat-control-config-msg.vue +0 -25
  167. package/components/wework-chat-panel/chat-panel-chat-status/chat-panel-chat-status.vue +0 -73
  168. package/services/.DS_Store +0 -0
@@ -0,0 +1,119 @@
1
+ <template>
2
+ <view class="bi-contacts-group-select-panel">
3
+ <view class="bi-contacts-group-select-panel__head">
4
+ <view class="bi-contacts-group-select-panel__head-left">
5
+ <uv-button size="small" @click="handleCancelClick">取消</uv-button>
6
+ </view>
7
+ <view class="bi-contacts-group-select-panel__head-center"></view>
8
+ <view class="bi-contacts-group-select-panel__head-right">
9
+ <uv-button size="small" type="primary" @click="handleConfirmClick">确定</uv-button>
10
+ </view>
11
+ </view>
12
+ <view class="bi-contacts-group-select-panel__body">
13
+ <view class="bi-contacts-group-select-panel__group" v-if="friendGroupData && friendGroupData.length">
14
+ <view class="bi-contacts-group-select-panel__group-head">
15
+ <view class="bi-contacts-group-select-panel__group-title">好友分组</view>
16
+ </view>
17
+ <view class="bi-contacts-group-select-panel__group-body">
18
+ <contacts-group-select-item
19
+ class="bi-contacts-group-select-panel__group-item"
20
+ @click="handleFriendGroupClick(group)"
21
+ v-for="group in friendGroupData"
22
+ type="friend"
23
+ :key="group.id"
24
+ :data="group"
25
+ :selected="group.id === inputValue"
26
+ >
27
+ </contacts-group-select-item>
28
+ </view>
29
+ </view>
30
+ <view class="bi-contacts-group-select-panel__group" v-if="roomGroupData && roomGroupData.length">
31
+ <view class="bi-contacts-group-select-panel__group-head">
32
+ <view class="bi-contacts-group-select-panel__group-title">群聊分组</view>
33
+ </view>
34
+ <view class="bi-contacts-group-select-panel__group-body">
35
+ <contacts-group-select-item
36
+ class="bi-contacts-group-select-panel__group-item"
37
+ @click="handleRoomGroupClick(group)"
38
+ v-for="group in roomGroupData"
39
+ type="room"
40
+ :key="group.id"
41
+ :data="group"
42
+ :selected="group.id === inputValue"
43
+ >
44
+ </contacts-group-select-item>
45
+ </view>
46
+ </view>
47
+ <view class="bi-contacts-group-select-panel__safe"></view>
48
+ </view>
49
+ </view>
50
+ </template>
51
+
52
+ <script>
53
+ import ContactsGroupSelectItem from './contacts-group-select-item.vue'
54
+
55
+ export default {
56
+ name: 'BiContactsGroupSelectPanel',
57
+ components: {
58
+ ContactsGroupSelectItem
59
+ },
60
+ props: {
61
+ value: {
62
+ type: String
63
+ },
64
+ friendGroupData: {
65
+ type: Array
66
+ },
67
+ roomGroupData: {
68
+ type: Array
69
+ }
70
+ },
71
+ data () {
72
+ return {
73
+ inputValue: this.value
74
+ }
75
+ },
76
+ methods: {
77
+ handleCancelClick () {
78
+ this.$emit('cancel')
79
+ },
80
+ handleConfirmClick () {
81
+ this.$emit('confirm', this.inputValue)
82
+ },
83
+ handleFriendGroupClick (item) {
84
+ this.inputValue = item.id
85
+ },
86
+ handleRoomGroupClick (item) {
87
+ this.inputValue = item.id
88
+ }
89
+ }
90
+ }
91
+ </script>
92
+
93
+ <style lang="less">
94
+ .bi-contacts-group-select-panel__head{
95
+ display: flex;
96
+ flex-direction: row;
97
+ align-items: center;
98
+ justify-content: space-between;
99
+ padding: 8px 12px;
100
+ border-bottom: 1px solid #eee;
101
+ }
102
+ .bi-contacts-group-select-panel__body{
103
+ max-height: 70vh;
104
+ overflow: auto;
105
+ padding: 6px 0;
106
+ }
107
+ .bi-contacts-group-select-panel__group-head {
108
+ height: 32px;
109
+ line-height: 32px;
110
+ padding: 0 12px;
111
+ }
112
+ .bi-contacts-group-select-panel__group-title {
113
+ color: #999;
114
+ }
115
+ .bi-contacts-group-select-panel__safe{
116
+ padding-bottom: calc(constant(safe-area-inset-bottom)); /* window-bottom + 适配 iPhoneX */
117
+ padding-bottom: calc(env(safe-area-inset-bottom));
118
+ }
119
+ </style>
@@ -0,0 +1,150 @@
1
+ <template>
2
+ <view class="bi-account-select">
3
+ <view class="bi-account-select__handle" @click="handleHandleClick">
4
+ <template v-if="loading">
5
+ <uv-loading-icon class="bi-account-select__loading" size="18" text="数据加载中..."></uv-loading-icon>
6
+ </template>
7
+ <template v-else>
8
+ <template v-if="value">
9
+ <view class="bi-account-select__value">
10
+ {{ currentGroup ? currentGroup.groupName : value }}
11
+ </view>
12
+ </template>
13
+ <template v-else>
14
+ <view class="bi-account-select__placeholder">
15
+ 请选择分组
16
+ </view>
17
+ </template>
18
+ </template>
19
+ </view>
20
+ <uv-popup
21
+ ref="popup"
22
+ mode="bottom"
23
+ @change="handlePopupChange"
24
+ >
25
+ <contacts-group-select-panel
26
+ :value="value"
27
+ :friend-group-data="friendGroupData"
28
+ :room-group-data="roomGroupData"
29
+ @cancel="handleCancelClick"
30
+ @confirm="handleConfirmClick"
31
+ ></contacts-group-select-panel>
32
+ </uv-popup>
33
+ </view>
34
+ </template>
35
+
36
+ <script>
37
+ import ContactsGroupSelectPanel from './contacts-group-select-panel.vue'
38
+
39
+ export default {
40
+ name: 'BiContactsGroupSelect',
41
+ components: {
42
+ ContactsGroupSelectPanel
43
+ },
44
+ props: {
45
+ value: {
46
+ type: String
47
+ },
48
+ type: {
49
+ type: String,
50
+ validator (value) {
51
+ return ['room', 'friend'].includes(value)
52
+ }
53
+ }
54
+ },
55
+ data () {
56
+ return {
57
+ loading: false,
58
+ friendGroupData: [],
59
+ roomGroupData: []
60
+ }
61
+ },
62
+ computed: {
63
+ currentGroup () {
64
+ if (!this.value) {
65
+ return
66
+ }
67
+ let group = this.friendGroupData.find(v => v.id === this.value)
68
+ if (!group) {
69
+ group = this.roomGroupData.find(v => v.id === this.value)
70
+ }
71
+ return group
72
+ }
73
+ },
74
+ created () {
75
+ this.loadData()
76
+ },
77
+ methods: {
78
+ loadData () {
79
+ this.loading = true
80
+ if (this.type === 'friend') {
81
+ return Promise.all([
82
+ this.$clientChat.contacts.loadFriendGroupData()
83
+ ]).then(rs => {
84
+ this.friendGroupData = rs[0].data
85
+ }).finally(() => {
86
+ this.loading = false
87
+ })
88
+ } else if (this.type === 'room') {
89
+ return Promise.all([
90
+ this.$clientChat.contacts.loadRoomGroupData()
91
+ ]).then(rs => {
92
+ this.roomGroupData = rs[0].data
93
+ }).finally(() => {
94
+ this.loading = false
95
+ })
96
+ }
97
+ },
98
+ handleCancelClick () {
99
+ this.$refs.popup.close()
100
+ },
101
+ handleConfirmClick (value) {
102
+ this.$emit('input', value)
103
+ this.$refs.popup.close()
104
+ },
105
+ handlePopupChange ({ show }) {
106
+ this.showPopup = show
107
+ if (show) {
108
+ uni.hideTabBar()
109
+ } else {
110
+ uni.showTabBar()
111
+ }
112
+ },
113
+ handleHandleClick () {
114
+ this.$refs.popup.open()
115
+ }
116
+ }
117
+ }
118
+ </script>
119
+
120
+ <style lang="less">
121
+ .bi-account-select__handle {
122
+ position: relative;
123
+ padding-right: 18px;
124
+ padding-top: 1px;
125
+ padding-bottom: 1px;
126
+ height: 32px;
127
+ line-height: 32px;
128
+ display: inline-block;
129
+ &:after {
130
+ content: '';
131
+ width: 6px;
132
+ height: 6px;
133
+ border: 1px solid #ccc;
134
+ border-left: 0;
135
+ border-top: 0;
136
+ transform: rotate(45deg) translateY(-50%);
137
+ position: absolute;
138
+ right: 6px;
139
+ top: 50%;
140
+ margin-top: -3px;
141
+ }
142
+ }
143
+ .bi-account-select__loading{
144
+ vertical-align: top;
145
+ margin-top: 7px;
146
+ }
147
+ .bi-account-select__placeholder{
148
+ color: #999;
149
+ }
150
+ </style>
package/common/.DS_Store DELETED
Binary file
Binary file
@@ -1,144 +0,0 @@
1
- <template>
2
- <div class="sdk-chat-control-channel-card" :class="['sdk-chat-control-channel-card--' + type]">
3
- <template v-if="type === 'default' || type === 'thumb'">
4
- <div class="sdk-chat-control-channel-card__main">
5
- <div class="sdk-chat-control-channel-card__avatar">
6
- <sdk-avatar :src="avatar" :radius="false" size="medium"></sdk-avatar>
7
- </div>
8
- <div class="sdk-chat-control-channel-card__fields">
9
- <div class="sdk-chat-control-channel-card__title">{{name}}</div>
10
- <div class="sdk-chat-control-channel-card__summary">{{description}}</div>
11
- </div>
12
- </div>
13
- <div class="sdk-chat-control-channel-card__foot">
14
- <span class="sdk-chat-control-channel-card__category">视频号名片</span>
15
- </div>
16
- </template>
17
- <template v-else-if="type === 'quote'">
18
- <div class="sdk-chat-control-channel-card__icon"></div>
19
- <div class="sdk-chat-control-channel-card__title">{{name}}</div>
20
- <div class="sdk-chat-control-channel-card__avatar">
21
- <sdk-avatar :src="avatar" :radius="false" size="medium"></sdk-avatar>
22
- </div>
23
- </template>
24
- </div>
25
- </template>
26
- <script>
27
- import { parse } from '../../../utils/json'
28
- import SdkAvatar from '../../../common/avatar'
29
- import { formatOssPath } from '@aochuang/common/utils/oss'
30
-
31
- export default {
32
- name: 'SdkChatControlChannelCard',
33
- components: {
34
- SdkAvatar
35
- },
36
- props: {
37
- id: {
38
- type: String
39
- },
40
- content: {
41
- type: [String, Object]
42
- },
43
- type: {
44
- type: String,
45
- default: 'default',
46
- validator (value) {
47
- return ['quote', 'default', 'thumb'].includes(value)
48
- }
49
- },
50
- updateChatBoxProp: {
51
- type: Function
52
- }
53
- },
54
- computed: {
55
- nextContent () {
56
- return parse(this.content) || {}
57
- },
58
- description () {
59
- return this.nextContent.desc || ''
60
- },
61
- name () {
62
- return (this.nextContent.title || '').replace(/^\[视频号名片\]\s*/, '')
63
- },
64
- avatar () {
65
- return formatOssPath(this.nextContent.imageUrl)
66
- },
67
- url () {
68
- return this.nextContent.url
69
- }
70
- },
71
- created () {
72
- if (this.url && this.updateChatBoxProp) {
73
- this.updateChatBoxProp('href', this.url)
74
- }
75
- }
76
- }
77
- </script>
78
- <style lang="less">
79
- .sdk-chat-control-channel-card--default,
80
- .sdk-chat-control-channel-card--thumb{
81
- width: 248px;
82
- max-width: 100%;
83
- line-height: 1.5em;
84
- .sdk-chat-control-channel-card__main{
85
- display: flex;
86
- flex-direction: row;
87
- padding: 10px;
88
- }
89
- .sdk-chat-control-channel-card__fields{
90
- flex: 1;
91
- min-width: 0;
92
- padding-left: 10px;
93
- }
94
- .sdk-chat-control-channel-card__title{
95
- font-size: 14px;
96
- overflow: hidden;
97
- text-overflow: ellipsis;
98
- white-space: nowrap;
99
- }
100
- .sdk-chat-control-channel-card__summary{
101
- color: #888;
102
- font-size: 12px;
103
- overflow: hidden;
104
- text-overflow: ellipsis;
105
- white-space: nowrap;
106
- margin-top: 6px;
107
- }
108
- .sdk-chat-control-channel-card__foot{
109
- border-top: 1px solid #eee;
110
- height: 24px;
111
- line-height: 24px;
112
- padding: 0 10px;
113
- box-sizing: content-box;
114
- }
115
- .sdk-chat-control-channel-card__category{
116
- color: #999;
117
- font-size: 12px;
118
- }
119
- }
120
- .sdk-chat-control-channel-card--thumb{
121
- border: 1px solid #eee;
122
- background-color: #fff;
123
- border-radius: 4px;
124
- }
125
- .sdk-chat-control-channel-card--quote {
126
- display: flex;
127
- flex-direction: row;
128
- .sdk-chat-control-channel-card__icon {
129
- display: inline-block;
130
- width: 18px;
131
- height: 18px;
132
- margin-right: 4px;
133
- min-width: 18px;
134
- vertical-align: top;
135
- margin-top: 2px;
136
- color: #999;
137
- background: url('../company-card/quote-icon.svg') no-repeat 50% 50%;
138
- background-size: cover;
139
- }
140
- .sdk-chat-control-channel-card__title{
141
- margin-right: 6px;
142
- }
143
- }
144
- </style>
@@ -1,63 +0,0 @@
1
- <template>
2
- <ui-dialog v-model="innerVisible" :title="title" size="small" :close-on-click-modal="true">
3
- <div class="sdk-wework-chat-control-merge-message__dialog">
4
- <div v-for="(message, index) in detailMessages" :key="index" class="sdk-wework-chat-control-merge-message__detail-item">
5
- <img v-if="message.avatar" class="sdk-wework-chat-control-merge-message__avatar" :src="message.avatar" alt="">
6
- <div v-else class="sdk-wework-chat-control-merge-message__avatar sdk-wework-chat-control-merge-message__avatar--empty">{{ message.sender.slice(0, 1) }}</div>
7
- <div class="sdk-wework-chat-control-merge-message__detail-main">
8
- <div class="sdk-wework-chat-control-merge-message__detail-head">
9
- <span class="sdk-wework-chat-control-merge-message__detail-sender">{{ message.sender }}</span>
10
- <span v-if="message.corpName" class="sdk-wework-chat-control-merge-message__detail-corp">@{{ message.corpName }}</span>
11
- <span class="sdk-wework-chat-control-merge-message__detail-time">{{ message.time }}</span>
12
- </div>
13
- <ui-image v-if="message.image" :src="message.image" width="160px" height="160px" fit="cover" :previewable="true"></ui-image>
14
- <div v-else class="sdk-wework-chat-control-merge-message__detail-content">{{ message.detail }}</div>
15
- </div>
16
- </div>
17
- <div v-if="!detailMessages.length" class="sdk-wework-chat-control-merge-message__dialog-empty">暂无聊天记录</div>
18
- </div>
19
- </ui-dialog>
20
- </template>
21
-
22
- <script>
23
- import { Dialog as UiDialog, Image as UiImage } from '@aochuang/common/components'
24
- import { parse } from '../../../utils/json'
25
- import { normalizeMergeMessage } from './util'
26
-
27
- export default {
28
- name: 'SdkWeworkChatControlMergeMessagePanel',
29
- components: { UiDialog, UiImage },
30
- props: {
31
- value: { type: Boolean, default: false },
32
- title: { type: String, default: '聊天记录' },
33
- messages: { type: [Array, String, Object], default: () => [] }
34
- },
35
- computed: {
36
- innerVisible: {
37
- get () { return this.value },
38
- set (value) { this.$emit('input', value) }
39
- },
40
- detailMessages () {
41
- let messages = this.messages
42
- if (typeof messages === 'string') messages = parse(messages)
43
- if (!Array.isArray(messages)) return []
44
- return messages.map(message => normalizeMergeMessage(message || {}))
45
- }
46
- }
47
- }
48
- </script>
49
-
50
- <style lang="less">
51
- .sdk-wework-chat-control-merge-message__dialog { max-height: 560px; overflow-y: auto; padding: 0 24px 24px; }
52
- .sdk-wework-chat-control-merge-message__detail-item { display: flex; padding: 12px 0; border-bottom: 1px solid #eee; }
53
- .sdk-wework-chat-control-merge-message__detail-item:last-child { border-bottom: 0; }
54
- .sdk-wework-chat-control-merge-message__avatar { flex: none; width: 36px; height: 36px; margin-right: 10px; border-radius: 5px; object-fit: cover; }
55
- .sdk-wework-chat-control-merge-message__avatar--empty { background: #eee; color: #888; font-size: 16px; line-height: 36px; text-align: center; }
56
- .sdk-wework-chat-control-merge-message__detail-main { flex: 1; min-width: 0; }
57
- .sdk-wework-chat-control-merge-message__detail-head { display: flex; align-items: baseline; min-height: 20px; line-height: 20px; }
58
- .sdk-wework-chat-control-merge-message__detail-sender { color: #8b8e98; font-size: 13px; }
59
- .sdk-wework-chat-control-merge-message__detail-corp { color: #f18b32; font-size: 12px; }
60
- .sdk-wework-chat-control-merge-message__detail-time { margin-left: auto; padding-left: 12px; color: #9699a3; font-size: 12px; white-space: nowrap; }
61
- .sdk-wework-chat-control-merge-message__detail-content { padding-top: 4px; color: #222; font-size: 14px; line-height: 22px; white-space: pre-wrap; word-break: break-word; }
62
- .sdk-wework-chat-control-merge-message__dialog-empty { padding: 24px; color: #999; text-align: center; }
63
- </style>
@@ -1,84 +0,0 @@
1
- <template>
2
- <div class="sdk-wework-chat-control-merge-message" :class="'sdk-wework-chat-control-merge-message--' + type">
3
- <template v-if="type === 'quote'">
4
- [聊天记录]{{ title }}
5
- </template>
6
- <template v-else>
7
- <div class="sdk-wework-chat-control-merge-message__card" @click="openDetail">
8
- <div class="sdk-wework-chat-control-merge-message__title">{{ title }}</div>
9
- <div v-if="messages.length" class="sdk-wework-chat-control-merge-message__list">
10
- <div v-for="(message, index) in messages" :key="index" class="sdk-wework-chat-control-merge-message__item">
11
- <span class="sdk-wework-chat-control-merge-message__sender">{{ message.sender }}</span>
12
- <span class="sdk-wework-chat-control-merge-message__separator">:</span>
13
- <span class="sdk-wework-chat-control-merge-message__summary">{{ message.summary }}</span>
14
- </div>
15
- </div>
16
- <div v-else class="sdk-wework-chat-control-merge-message__empty">暂无聊天记录</div>
17
- <div class="sdk-wework-chat-control-merge-message__foot">聊天记录</div>
18
- </div>
19
- </template>
20
- <merge-message-panel v-model="dialogVisible" :title="title" :messages="data.messages"></merge-message-panel>
21
- </div>
22
- </template>
23
-
24
- <script>
25
- import { parse } from '../../../utils/json'
26
- import MergeMessagePanel from './merge-message-panel.vue'
27
- import { getMessageSummary } from './util'
28
-
29
- export default {
30
- name: 'SdkWeworkChatControlMergeMessage',
31
- components: { MergeMessagePanel },
32
- props: {
33
- id: { type: String },
34
- content: { type: [String, Object] },
35
- type: {
36
- type: String,
37
- default: 'default',
38
- validator (value) {
39
- return ['quote', 'default', 'thumb'].includes(value)
40
- }
41
- }
42
- },
43
- data () {
44
- return { dialogVisible: false }
45
- },
46
- computed: {
47
- data () {
48
- const value = parse(this.content)
49
- return value && typeof value === 'object' ? value : {}
50
- },
51
- title () {
52
- return this.data.title || '聊天记录'
53
- },
54
- messages () {
55
- if (!Array.isArray(this.data.messages)) return []
56
- return this.data.messages.map(message => ({
57
- sender: message && (message.senderName || message.name || message.sender || '未知联系人'),
58
- summary: getMessageSummary(message || {})
59
- }))
60
- }
61
- },
62
- methods: {
63
- openDetail () {
64
- if (this.type !== 'quote') this.dialogVisible = true
65
- }
66
- }
67
- }
68
- </script>
69
-
70
- <style lang="less">
71
- .sdk-wework-chat-control-merge-message { display: inline-block; max-width: 100%; color: #222; }
72
- .sdk-wework-chat-control-merge-message__card { width: 248px; max-width: 100%; overflow: hidden; border-radius: 6px; background: #f1f1f3; }
73
- .sdk-wework-chat-control-merge-message__title { padding: 11px 12px 6px; overflow: hidden; font-size: 14px; font-weight: 500; line-height: 20px; text-overflow: ellipsis; white-space: nowrap; }
74
- .sdk-wework-chat-control-merge-message__list { padding: 0 12px 7px; }
75
- .sdk-wework-chat-control-merge-message__item { display: flex; min-width: 0; color: #96969b; font-size: 12px; line-height: 18px; }
76
- .sdk-wework-chat-control-merge-message__sender, .sdk-wework-chat-control-merge-message__separator { flex: none; }
77
- .sdk-wework-chat-control-merge-message__sender { max-width: 74px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
78
- .sdk-wework-chat-control-merge-message__summary { min-width: 0; overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; word-break: break-all; }
79
- .sdk-wework-chat-control-merge-message__empty { padding: 0 12px 9px; color: #96969b; font-size: 12px; line-height: 18px; }
80
- .sdk-wework-chat-control-merge-message__foot { height: 27px; padding: 0 12px; border-top: 1px solid rgba(0, 0, 0, .08); color: #999; font-size: 12px; line-height: 27px; }
81
- .sdk-wework-chat-control-merge-message__card { cursor: pointer; }
82
- .sdk-wework-chat-control-merge-message--thumb { width: 100%; .sdk-wework-chat-control-merge-message__card { width: 100%; } }
83
- .sdk-wework-chat-control-merge-message--quote { color: #888; font-size: 12px; }
84
- </style>
@@ -1,59 +0,0 @@
1
- import { formatOssPath } from '@aochuang/common/utils/oss'
2
- import { parse } from '../../../utils/json'
3
- import { MESSAGE_TYPE } from '../util'
4
-
5
- export const TYPE_LABELS = {
6
- [MESSAGE_TYPE.IMAGE]: '[图片]', [MESSAGE_TYPE.VOICE]: '[语音]', [MESSAGE_TYPE.VIDEO]: '[视频]',
7
- [MESSAGE_TYPE.URLFile]: '[文件]', [MESSAGE_TYPE.URL]: '[链接]', [MESSAGE_TYPE.URLNew]: '[文件]',
8
- [MESSAGE_TYPE.CUSTOM_EXPRESSION]: '[表情]', [MESSAGE_TYPE.LOCATION]: '[位置]',
9
- [MESSAGE_TYPE.CALLING]: '[语音通话]', [MESSAGE_TYPE.RED_ENVELOPES]: '[红包]',
10
- [MESSAGE_TYPE.SHARE_CARD]: '[名片]', [MESSAGE_TYPE.CHANNEL_VIDEO]: '[视频号]',
11
- [MESSAGE_TYPE.CHANNEL_VIDEO_LIVE]: '[视频号直播]', [MESSAGE_TYPE.MEETING]: '[会议]'
12
- }
13
-
14
- export const MERGED_TYPE_LABELS = {
15
- 3: '[图片]', 4: '[语音]', 5: '[视频]', 6: '[文件]', 7: '[位置]', 8: '[链接]',
16
- 9: '[名片]', 10: '[表情]', 11: '[语音通话]', 12: '[视频通话]'
17
- }
18
-
19
- export function parseMessageContent (content) {
20
- const parsed = parse(content)
21
- if (parsed && typeof parsed === 'object') {
22
- const value = parsed.text || parsed.content || parsed.desc || ''
23
- return typeof value === 'string' || typeof value === 'number' ? String(value) : ''
24
- }
25
- return parsed == null ? '' : String(parsed)
26
- }
27
-
28
- export function getMessageSummary (message) {
29
- const type = Number(message && message.contentType)
30
- const contentText = parseMessageContent(message && message.content)
31
- if (type === 0 || type === 1 || type === 2) return contentText || '[文本]'
32
- return MERGED_TYPE_LABELS[type] || TYPE_LABELS[type] || contentText || '[未知消息]'
33
- }
34
-
35
- export function formatMessageTime (timestamp) {
36
- const date = new Date(timestamp)
37
- if (Number.isNaN(date.getTime())) return ''
38
- const pad = value => String(value).padStart(2, '0')
39
- return `${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}日 ${pad(date.getHours())}:${pad(date.getMinutes())}`
40
- }
41
-
42
- export function normalizeMergeMessage (message) {
43
- const item = message || {}
44
- const content = parse(item.content)
45
- const contentObject = content && typeof content === 'object' ? content : {}
46
- const type = Number(item.contentType)
47
- const rawTime = item.time || item.sendTime || item.timestamp
48
- let timestamp = Number(rawTime)
49
- if (timestamp && timestamp < 100000000000) timestamp *= 1000
50
- const image = contentObject.imageUrl || contentObject.thumbUrl || contentObject.picUrl || contentObject.resPath
51
- return {
52
- sender: item.senderName || item.name || item.sender || '未知联系人',
53
- corpName: item.corpName || item.corp || '',
54
- avatar: item.avatarUrl || item.senderAvatarUrl || item.avatar || '',
55
- time: timestamp ? formatMessageTime(timestamp) : '',
56
- image: (type === 3 || type === MESSAGE_TYPE.IMAGE) && image ? formatOssPath(image) : '',
57
- detail: getMessageSummary(item)
58
- }
59
- }
@@ -1,4 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
3
- <path d="M725.333333 392.533333 947.754667 236.8a21.333333 21.333333 0 0 1 33.578666 17.493333v515.413334a21.333333 21.333333 0 0 1-33.578666 17.493333L725.333333 631.466667V810.666667a42.666667 42.666667 0 0 1-42.666666 42.666666H85.333333a42.666667 42.666667 0 0 1-42.666666-42.666666V213.333333a42.666667 42.666667 0 0 1 42.666666-42.666666h597.333334a42.666667 42.666667 0 0 1 42.666666 42.666666v179.2z" fill="#fff"/>
4
- </svg>