@aochuang/client-sdk 1.0.378 → 1.0.379-wework

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 (167) 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 +4 -40
  4. package/components/chat-editor/chat-editor.vue +5 -75
  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/location/location.vue +3 -3
  9. package/components/wechat-chat-control/transfer/.DS_Store +0 -0
  10. package/components/wechat-chat-control/url/.DS_Store +0 -0
  11. package/components/wechat-chat-control/voice/.DS_Store +0 -0
  12. package/components/wework-chat-control/channel-card/channel-card.vue +144 -0
  13. package/components/wework-chat-control/channel-live/channel-live.vue +7 -2
  14. package/components/wework-chat-control/company-card/company-card.vue +1 -1
  15. package/components/wework-chat-control/custom-expression/custom-expression.vue +2 -1
  16. package/components/wework-chat-control/file-url/file-url.vue +34 -16
  17. package/components/wework-chat-control/image/image.vue +137 -2
  18. package/components/wework-chat-control/index.js +15 -7
  19. package/components/wework-chat-control/link/.DS_Store +0 -0
  20. package/components/wework-chat-control/location/location.vue +3 -3
  21. package/components/wework-chat-control/merge-message/merge-message-panel.vue +63 -0
  22. package/components/wework-chat-control/merge-message/merge-message.vue +84 -0
  23. package/components/wework-chat-control/merge-message/util.js +59 -0
  24. package/components/wework-chat-control/metting/enterprise-wechat.png +0 -0
  25. package/components/wework-chat-control/metting/meeting-video.svg +4 -0
  26. package/components/wework-chat-control/metting/metting.vue +181 -0
  27. package/components/wework-chat-control/red-envelopes/red-envelopes.vue +3 -2
  28. package/components/wework-chat-control/text/text-default.vue +99 -0
  29. package/components/wework-chat-control/text/text-quote.vue +138 -0
  30. package/components/wework-chat-control/text/text.vue +27 -143
  31. package/components/wework-chat-control/url/url-channel-live.vue +53 -0
  32. package/components/wework-chat-control/url/url-miniprogram.vue +6 -7
  33. package/components/wework-chat-control/url/url.vue +26 -2
  34. package/components/wework-chat-control/util.js +26 -17
  35. package/components/wework-chat-control/video/.DS_Store +0 -0
  36. package/components/wework-chat-control/video/video.vue +10 -2
  37. package/components/wework-chat-control/voice/voice.vue +9 -2
  38. package/components/wework-chat-control/wework-chat-control-config-item.vue +24 -0
  39. package/components/wework-chat-control/wework-chat-control-config-msg.vue +25 -0
  40. package/{uni-components/chat-control/chat-control-config.vue → components/wework-chat-control/wework-chat-control-config.vue} +16 -13
  41. package/components/wework-chat-panel/chat-panel-chat-status/chat-panel-chat-status.vue +73 -0
  42. package/components/wework-chat-panel/chat-panel-item.vue +56 -25
  43. package/components/wework-chat-panel/chat-panel.vue +96 -13
  44. package/package.json +10 -3
  45. package/services/.DS_Store +0 -0
  46. package/services/client-chat/client-chat-wework/client-chat-account.js +84 -1
  47. package/services/client-chat/client-chat-wework/client-chat-concats.js +81 -17
  48. package/services/client-chat/client-chat-wework/client-chat-message.js +121 -11
  49. package/services/client-chat/client-chat-wework/client-chat-session.js +271 -191
  50. package/services/client-chat/client-chat-wework/client-chat-socket.js +13 -1
  51. package/services/client-chat/client-chat-wework/client-chat.js +404 -84
  52. package/services/client-chat/client-chat-wework/utils.js +5 -5
  53. package/services/socket/socket.js +14 -4
  54. package/components/wework-chat-panel/chat-panel-controls/company-card/company-card.vue +0 -35
  55. package/components/wework-chat-panel/chat-panel-controls/expression/expression.vue +0 -36
  56. package/components/wework-chat-panel/chat-panel-controls/file-url/file-url.vue +0 -35
  57. package/components/wework-chat-panel/chat-panel-controls/image/image.vue +0 -36
  58. package/components/wework-chat-panel/chat-panel-controls/index.js +0 -35
  59. package/components/wework-chat-panel/chat-panel-controls/jx-sys-text/jx-sys-text.vue +0 -28
  60. package/components/wework-chat-panel/chat-panel-controls/link/link.vue +0 -35
  61. package/components/wework-chat-panel/chat-panel-controls/location/location.vue +0 -35
  62. package/components/wework-chat-panel/chat-panel-controls/text/text.vue +0 -43
  63. package/components/wework-chat-panel/chat-panel-controls/unkonw/unkonw.vue +0 -39
  64. package/components/wework-chat-panel/chat-panel-controls/video/video.vue +0 -37
  65. package/components/wework-chat-panel/chat-panel-controls/voice/voice.vue +0 -35
  66. package/uni-common/account-portray/account-portray.vue +0 -51
  67. package/uni-common/account-select/account-select-item.vue +0 -172
  68. package/uni-common/account-select/account-select.vue +0 -252
  69. package/uni-common/all-friend-avatar/all-friend-avatar.vue +0 -49
  70. package/uni-common/friend-avatar/default.svg +0 -1
  71. package/uni-common/friend-avatar/friend-avatar.vue +0 -27
  72. package/uni-common/friend-avatar/index.js +0 -3
  73. package/uni-common/friend-loader/friend-loader.vue +0 -53
  74. package/uni-common/friend-portray/friend-portray.vue +0 -56
  75. package/uni-common/group-avatar/default.svg +0 -1
  76. package/uni-common/group-avatar/group-avatar.vue +0 -18
  77. package/uni-common/group-avatar/index.js +0 -3
  78. package/uni-common/room-avatar/default.svg +0 -6
  79. package/uni-common/room-avatar/index.js +0 -3
  80. package/uni-common/room-avatar/room-avatar.vue +0 -27
  81. package/uni-common/room-loader/room-loader.vue +0 -53
  82. package/uni-common/room-portray/room-portray.vue +0 -56
  83. package/uni-components/chat-control/calling/calling.vue +0 -91
  84. package/uni-components/chat-control/calling/phone-fill.svg +0 -1
  85. package/uni-components/chat-control/calling/vidicon-fill.svg +0 -1
  86. package/uni-components/chat-control/channel-video/channel-video.vue +0 -89
  87. package/uni-components/chat-control/channel-video-card/channel-video-card.vue +0 -105
  88. package/uni-components/chat-control/channel-video-live/channel-video-live.vue +0 -92
  89. package/uni-components/chat-control/chat-control-config-item/chat-control-config-item.vue +0 -20
  90. package/uni-components/chat-control/chat-control-config-item/index.js +0 -3
  91. package/uni-components/chat-control/chat-control-config-msg/chat-control-config-msg-app.vue +0 -25
  92. package/uni-components/chat-control/chat-control-config-msg/chat-control-config-msg-h5.vue +0 -21
  93. package/uni-components/chat-control/chat-control.vue +0 -218
  94. package/uni-components/chat-control/company-card/company-card.vue +0 -123
  95. package/uni-components/chat-control/const.js +0 -28
  96. package/uni-components/chat-control/expression/expression.vue +0 -41
  97. package/uni-components/chat-control/image/image.vue +0 -68
  98. package/uni-components/chat-control/index.js +0 -89
  99. package/uni-components/chat-control/location/location.vue +0 -110
  100. package/uni-components/chat-control/member-change/member-change.vue +0 -32
  101. package/uni-components/chat-control/quote-message/quote-message.vue +0 -216
  102. package/uni-components/chat-control/real-time-position/real-time-position.vue +0 -62
  103. package/uni-components/chat-control/redpacket/red-envelope.svg +0 -1
  104. package/uni-components/chat-control/redpacket/redpacket.vue +0 -75
  105. package/uni-components/chat-control/share-card/share-card.vue +0 -101
  106. package/uni-components/chat-control/system/system.vue +0 -69
  107. package/uni-components/chat-control/system-batch-message/system-batch-message.vue +0 -30
  108. package/uni-components/chat-control/system-text/system-text.vue +0 -32
  109. package/uni-components/chat-control/text/text.vue +0 -67
  110. package/uni-components/chat-control/text-with-at/text-with-at.vue +0 -51
  111. package/uni-components/chat-control/transfer/red-transfer.svg +0 -1
  112. package/uni-components/chat-control/transfer/transfer.vue +0 -80
  113. package/uni-components/chat-control/unkonw/unkonw.vue +0 -37
  114. package/uni-components/chat-control/url/icons/file-excel-line.svg +0 -1
  115. package/uni-components/chat-control/url/icons/file-info-line.svg +0 -1
  116. package/uni-components/chat-control/url/icons/file-music-line.svg +0 -1
  117. package/uni-components/chat-control/url/icons/file-pdf-line.svg +0 -1
  118. package/uni-components/chat-control/url/icons/file-ppt-line.svg +0 -1
  119. package/uni-components/chat-control/url/icons/file-settings-line.svg +0 -1
  120. package/uni-components/chat-control/url/icons/file-text-line.svg +0 -1
  121. package/uni-components/chat-control/url/icons/file-unknow-line.svg +0 -1
  122. package/uni-components/chat-control/url/icons/file-word-line.svg +0 -1
  123. package/uni-components/chat-control/url/icons/file-zip-line.svg +0 -1
  124. package/uni-components/chat-control/url/icons/index.js +0 -24
  125. package/uni-components/chat-control/url/miniprogram.svg +0 -1
  126. package/uni-components/chat-control/url/url-miniprogram.vue +0 -116
  127. package/uni-components/chat-control/url/url.vue +0 -306
  128. package/uni-components/chat-control/url-new/icons/file-excel-line.svg +0 -1
  129. package/uni-components/chat-control/url-new/icons/file-info-line.svg +0 -1
  130. package/uni-components/chat-control/url-new/icons/file-music-line.svg +0 -1
  131. package/uni-components/chat-control/url-new/icons/file-pdf-line.svg +0 -1
  132. package/uni-components/chat-control/url-new/icons/file-ppt-line.svg +0 -1
  133. package/uni-components/chat-control/url-new/icons/file-settings-line.svg +0 -1
  134. package/uni-components/chat-control/url-new/icons/file-text-line.svg +0 -1
  135. package/uni-components/chat-control/url-new/icons/file-unknow-line.svg +0 -1
  136. package/uni-components/chat-control/url-new/icons/file-word-line.svg +0 -1
  137. package/uni-components/chat-control/url-new/icons/file-zip-line.svg +0 -1
  138. package/uni-components/chat-control/url-new/icons/index.js +0 -24
  139. package/uni-components/chat-control/url-new/url-new.vue +0 -110
  140. package/uni-components/chat-control/utils.js +0 -12
  141. package/uni-components/chat-control/video/video.vue +0 -156
  142. package/uni-components/chat-control/voice/voice.vue +0 -166
  143. package/uni-components/chat-editor/chat-editor-chartlet/chat-editor-chartlet-collect.vue +0 -84
  144. package/uni-components/chat-editor/chat-editor-chartlet/chat-editor-chartlet-system.vue +0 -28
  145. package/uni-components/chat-editor/chat-editor-chartlet/chat-editor-chartlet.vue +0 -85
  146. package/uni-components/chat-editor/chat-editor-func/chat-editor-func.vue +0 -157
  147. package/uni-components/chat-editor/chat-editor-func-at/chat-editor-func-at-panel.vue +0 -158
  148. package/uni-components/chat-editor/chat-editor-func-at/chat-editor-func-at.vue +0 -61
  149. package/uni-components/chat-editor/chat-editor-func-button/chat-editor-func-button.vue +0 -58
  150. package/uni-components/chat-editor/chat-editor-func-file/chat-editor-func-file.vue +0 -54
  151. package/uni-components/chat-editor/chat-editor-func-image/chat-editor-func-image.vue +0 -42
  152. package/uni-components/chat-editor/chat-editor-func-video/chat-editor-func-video.vue +0 -42
  153. package/uni-components/chat-editor/chat-editor-func-voice/chat-editor-func-voice.vue +0 -25
  154. package/uni-components/chat-editor/chat-editor-message-send/chat-editor-message-send.vue +0 -158
  155. package/uni-components/chat-editor/chat-editor-quote/chat-editor-quote.vue +0 -75
  156. package/uni-components/chat-editor/chat-editor.vue +0 -257
  157. package/uni-components/chat-editor/index.js +0 -10
  158. package/uni-components/chat-editor/util.js +0 -65
  159. package/uni-components/chat-panel/chat-panel-chats-box.vue +0 -238
  160. package/uni-components/chat-panel/chat-panel-chats-forward/chat-panel-chats-forward.vue +0 -273
  161. package/uni-components/chat-panel/chat-panel-chats-item.vue +0 -578
  162. package/uni-components/chat-panel/chat-panel-chats-status/chat-panel-chats-status.vue +0 -71
  163. package/uni-components/chat-panel/chat-panel-chats.vue +0 -368
  164. package/uni-components/chat-panel/chat-panel.vue +0 -227
  165. package/uni-components/contacts-group-select/contacts-group-select-item.vue +0 -85
  166. package/uni-components/contacts-group-select/contacts-group-select-panel.vue +0 -119
  167. package/uni-components/contacts-group-select/contacts-group-select.vue +0 -150
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <sdk-chat-panel
3
3
  ref="panel"
4
- v-bind="$props"
4
+ v-bind="props"
5
5
  :is-sender-method="handleIsSenderMethod"
6
6
  @initloaded="handleChatsInitLoaded"
7
7
  @chat-contextmenu="handleChatContext"
@@ -17,12 +17,12 @@
17
17
  :fetch-user-method="fetchUserMethod"
18
18
  :config="config"
19
19
  >
20
- <!-- <template slot="chat-append" slot-scope="{ item, updateProp }">
20
+ <template slot="chat-append" slot-scope="{ item, updateProp }">
21
21
  <chat-panel-chat-status
22
22
  :data="item"
23
23
  :update-chat-box-prop="updateProp"
24
24
  ></chat-panel-chat-status>
25
- </template> -->
25
+ </template>
26
26
  <template slot="chat-prefix" slot-scope="{ item }">
27
27
  <template v-if="selectable && handleFilterSelectMessageMethod(item)">
28
28
  <div class="sdk-wechat-chat-panel__checkbox">
@@ -37,18 +37,23 @@
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>
43
46
  <script>
44
47
  import SdkChatPanel from '../chat-panel'
45
48
  import ChatPanelItem from './chat-panel-item.vue'
49
+ import ChatPanelChatStatus from './chat-panel-chat-status/chat-panel-chat-status.vue'
46
50
 
47
51
  export default {
48
52
  name: 'SdkWeworkChatPanel',
49
53
  components: {
50
54
  SdkChatPanel,
51
- ChatPanelItem
55
+ ChatPanelItem,
56
+ ChatPanelChatStatus
52
57
  },
53
58
  props: {
54
59
  mode: {
@@ -59,7 +64,8 @@ export default {
59
64
  }
60
65
  },
61
66
  keyField: {
62
- type: String
67
+ type: String,
68
+ default: 'id'
63
69
  },
64
70
  startDate: {
65
71
  type: Number
@@ -88,9 +94,6 @@ export default {
88
94
  type: Boolean,
89
95
  default: true
90
96
  },
91
- renderControl: {
92
- type: Function
93
- },
94
97
  fetchUserMethod: {
95
98
  type: Function
96
99
  },
@@ -126,14 +129,35 @@ export default {
126
129
  },
127
130
  contextChatId: {
128
131
  type: String
132
+ },
133
+ onBeforeSelectionChange: {
134
+ type: Function
129
135
  }
130
136
  },
131
- methods: {
132
- handleRenderControl ({ item }) {
133
- return ChatControls[item.msgType] || ChatControls.unkonw
137
+ data () {
138
+ return {
139
+ checkMsgMap: {}
140
+ }
141
+ },
142
+ computed: {
143
+ props () {
144
+ const { config, ...nextProps } = this.$props
145
+ return nextProps
134
146
  },
147
+ checkTotal () {
148
+ return Object.keys(this.checkMsgMap).length
149
+ }
150
+ },
151
+ watch: {
152
+ selectable () {
153
+ if (!this.selectable) {
154
+ this.checkMsgMap = {}
155
+ }
156
+ }
157
+ },
158
+ methods: {
135
159
  handleIsSenderMethod ({ item }) {
136
- return !!item.send
160
+ return !!item.isSend
137
161
  },
138
162
  handleChatsInitLoaded () {
139
163
  this.$emit('initloaded')
@@ -148,8 +172,67 @@ export default {
148
172
  this.currentContextChat = null
149
173
  return this.$refs.panel && this.$refs.panel.reload()
150
174
  },
175
+ handleFilterSelectMessageMethod (msg) {
176
+ if (!this.filterSelectMessageMethod) {
177
+ return true
178
+ }
179
+ return this.filterSelectMessageMethod({
180
+ item: msg
181
+ })
182
+ },
183
+ handleMsgCheckboxChange (msg, value) {
184
+ if (value) {
185
+ this.selectChat(msg)
186
+ } else {
187
+ this.unselectChat(msg)
188
+ }
189
+ },
190
+ selectChat (chat) {
191
+ if (!chat) {
192
+ return
193
+ }
194
+ if (!this.selectable) {
195
+ console.warn('未开启选择')
196
+ return
197
+ }
198
+ if (this.onBeforeSelectionChange && this.onBeforeSelectionChange({
199
+ chat,
200
+ value: true
201
+ }) === false) {
202
+ return
203
+ }
204
+ this.$set(this.checkMsgMap, chat[this.keyField], chat)
205
+ },
206
+ unselectChat (chat) {
207
+ if (!chat) {
208
+ return
209
+ }
210
+ if (!this.selectable) {
211
+ console.warn('未开启选择')
212
+ return
213
+ }
214
+ if (this.onBeforeSelectionChange && this.onBeforeSelectionChange({
215
+ chat,
216
+ value: false
217
+ }) === false) {
218
+ return
219
+ }
220
+ this.$delete(this.checkMsgMap, chat[this.keyField])
221
+ },
222
+ unselectAllChat () {
223
+ return Object.keys(this.checkMsgMap).map(key => {
224
+ return this.unselectChat(this.checkMsgMap[key])
225
+ })
226
+ },
227
+ getSelectChats () {
228
+ return Object.keys(this.checkMsgMap).map(key => {
229
+ return this.checkMsgMap[key]
230
+ })
231
+ },
151
232
  handleChatContext (item, evt) {
152
- this.$emit('chat-contextmenu', item, evt)
233
+ this.$emit('chat-contextmenu', {
234
+ item
235
+ }, evt)
153
236
  },
154
237
  handleChatViewContext ({ item }) {
155
238
  this.$emit('chat-view-context', {
package/package.json CHANGED
@@ -1,9 +1,16 @@
1
1
  {
2
2
  "name": "@aochuang/client-sdk",
3
- "version": "1.0.378",
3
+ "version": "1.0.379-wework",
4
4
  "description": "",
5
- "scripts": {
6
- "test": "echo \"Error: no test specified\" && exit 1"
5
+ "files": [
6
+ "common",
7
+ "components",
8
+ "services",
9
+ "utils",
10
+ "dist"
11
+ ],
12
+ "exports": {
13
+ ".": "./components/index.js"
7
14
  },
8
15
  "repository": {
9
16
  "type": "git",
Binary file
@@ -5,14 +5,20 @@ export default class ClientChatAccount {
5
5
  data = Vue.observable({
6
6
  accountData: [],
7
7
  accountUnreadMessageNumData: [],
8
+ accountGreetingUnreadMsgCountData: {},
8
9
  currentAccount: null
9
10
  })
10
11
 
11
12
  loadAccountDataMethod = null
12
13
 
13
14
  getAccountUnreadMessageNumMethod = null
15
+
16
+ getAccountGreetingUnreadMsgCountMethod = null
14
17
 
15
18
  accountMap = {}
19
+
20
+ // 好友请求数量请求合并,key为账号id列表
21
+ greetingUnreadRequestMap = {}
16
22
 
17
23
  constructor (options) {
18
24
  options = Object.assign({
@@ -21,11 +27,13 @@ export default class ClientChatAccount {
21
27
  getAccountUnreadMessageNumMethod: null,
22
28
  updateAccountMessageReadMethod: null,
23
29
  deleteAccountSessionMethod: null,
30
+ getAccountGreetingUnreadMsgCountMethod: null,
24
31
  onCurrentAccountChange: null,
25
32
  onAccountAdded: null,
26
33
  onAccountRemoved: null,
27
34
  onUnreadMessageNumChange: null,
28
- onDeleteAccountSession: null
35
+ onDeleteAccountSession: null,
36
+ onAccountLoaded: null
29
37
  }, options)
30
38
  if (!options.loadAccountDataMethod) {
31
39
  throw new Error('缺少loadAccountDataMethod配置')
@@ -38,10 +46,12 @@ export default class ClientChatAccount {
38
46
  this.getAccountUnreadMessageNumMethod = options.getAccountUnreadMessageNumMethod
39
47
  this.updateAccountMessageReadMethod = options.updateAccountMessageReadMethod
40
48
  this.deleteAccountSessionMethod = options.deleteAccountSessionMethod
49
+ this.getAccountGreetingUnreadMsgCountMethod = options.getAccountGreetingUnreadMsgCountMethod
41
50
  this.onAccountAdded = options.onAccountAdded
42
51
  this.onAccountRemoved = options.onAccountRemoved,
43
52
  this.onUnreadMessageNumChange = options.onUnreadMessageNumChange
44
53
  this.onDeleteAccountSession = options.onDeleteAccountSession
54
+ this.onAccountLoaded = options.onAccountLoaded
45
55
  }
46
56
 
47
57
  get accountData () {
@@ -55,6 +65,10 @@ export default class ClientChatAccount {
55
65
  get currentAccount () {
56
66
  return this.data.currentAccount
57
67
  }
68
+
69
+ get accountGreetingUnreadMsgCountData () {
70
+ return this.data.accountGreetingUnreadMsgCountData
71
+ }
58
72
 
59
73
  setCurrentAccount (accountId) {
60
74
  let account = null
@@ -282,6 +296,9 @@ export default class ClientChatAccount {
282
296
  this._cacheLoadPromise = this.loadAccountDataMethod()
283
297
  this._cacheLoadPromise.then(rs => {
284
298
  this.setAccountData(rs.data)
299
+ this.onAccountLoaded && this.onAccountLoaded({
300
+ data: rs.data
301
+ })
285
302
  })
286
303
  this.cancelConnectRequest = () => {
287
304
  this._cacheLoadPromise.abort()
@@ -298,9 +315,75 @@ export default class ClientChatAccount {
298
315
  return this.loadData()
299
316
  }
300
317
 
318
+ /**
319
+ * 设置指定企微账号的待处理好友请求数量,并重算all
320
+ */
321
+ setAccountGreetingUnreadMsgCount (params) {
322
+ if (!params || !params.qwAccountId) {
323
+ throw new Error('缺少必须参数')
324
+ }
325
+ Vue.set(this.data.accountGreetingUnreadMsgCountData, params.qwAccountId, params.count || 0)
326
+ this.updateAllAccountGreetingUnreadMsgCount()
327
+ }
328
+
329
+ updateAllAccountGreetingUnreadMsgCount () {
330
+ const allCount = Object.keys(this.data.accountGreetingUnreadMsgCountData).reduce((rs, key) => {
331
+ return key === 'all' ? rs : rs + (this.data.accountGreetingUnreadMsgCountData[key] || 0)
332
+ }, 0)
333
+ Vue.set(this.data.accountGreetingUnreadMsgCountData, 'all', allCount)
334
+ }
335
+
336
+ /**
337
+ * 获取待处理好友请求数量
338
+ * qwAccountIds不传则刷新所有账号;后端数量为0的账号不返回,所以先置0再覆盖
339
+ */
340
+ getAccountGreetingUnreadMsgCount (params) {
341
+ if (!this.getAccountGreetingUnreadMsgCountMethod) {
342
+ return Promise.reject(new Error('getAccountGreetingUnreadMsgCountMethod未定义'))
343
+ }
344
+ let qwAccountIds = (params || {}).qwAccountIds
345
+ if (qwAccountIds && !Array.isArray(qwAccountIds)) {
346
+ qwAccountIds = [qwAccountIds]
347
+ }
348
+ qwAccountIds = (qwAccountIds || []).filter((id, index, data) => id && data.indexOf(id) === index).map(String)
349
+ const isAll = !qwAccountIds.length
350
+ const requestKey = isAll ? 'all' : qwAccountIds.slice().sort().join(',')
351
+ if (this.greetingUnreadRequestMap[requestKey]) {
352
+ return this.greetingUnreadRequestMap[requestKey]
353
+ }
354
+ const request = this.getAccountGreetingUnreadMsgCountMethod({
355
+ qwAccountIds: isAll ? undefined : qwAccountIds
356
+ }).then(rs => {
357
+ const targetIds = isAll ? Object.keys(this.accountMap) : qwAccountIds
358
+ targetIds.forEach(id => {
359
+ Vue.set(this.data.accountGreetingUnreadMsgCountData, id, 0)
360
+ })
361
+ ;((rs && rs.data) || []).forEach(item => {
362
+ if (item && item.qwAccountId) {
363
+ Vue.set(this.data.accountGreetingUnreadMsgCountData, String(item.qwAccountId), item.count || 0)
364
+ }
365
+ })
366
+ this.updateAllAccountGreetingUnreadMsgCount()
367
+ return this.data.accountGreetingUnreadMsgCountData
368
+ }).finally(() => {
369
+ delete this.greetingUnreadRequestMap[requestKey]
370
+ })
371
+ this.greetingUnreadRequestMap[requestKey] = request
372
+ return request
373
+ }
374
+
375
+ /**
376
+ * 刷新所有账号的待处理好友请求数量
377
+ */
378
+ refreshAllAccountGreetingUnreadMsgCount () {
379
+ return this.getAccountGreetingUnreadMsgCount()
380
+ }
381
+
301
382
  reset () {
302
383
  this.data.accountData = []
303
384
  this.data.accountUnreadMessageNumData = []
385
+ this.data.accountGreetingUnreadMsgCountData = {}
386
+ this.greetingUnreadRequestMap = {}
304
387
  if (this.cancelConnectRequest) {
305
388
  this.cancelConnectRequest()
306
389
  }
@@ -126,11 +126,7 @@ export default class ClientChatContacts {
126
126
  */
127
127
  roomBindMemberMap: {},
128
128
 
129
- /**
130
- * 标记通讯录是否修改了
131
- * 如果修改了,比如接收到了分配好友的会话时,一定通讯录变了,变了的时候界面需要根据这个状态刷新通讯录
132
- */
133
- isModify: false
129
+ modifiedAccountMap: {}
134
130
  })
135
131
 
136
132
  friendMap = {}
@@ -237,10 +233,6 @@ export default class ClientChatContacts {
237
233
  return this.data.roomGroupData
238
234
  }
239
235
 
240
- get isModify () {
241
- return this.data.isModify
242
- }
243
-
244
236
  setRoomGroup (data) {
245
237
  this.data.roomGroupData = []
246
238
  if (data && data.length) {
@@ -491,10 +483,10 @@ export default class ClientChatContacts {
491
483
  }
492
484
  }
493
485
  const qwAccountId = this.roomMap[id].qwAccountId
494
- if (qwAccountId && this.data.accountBindFriendMap[qwAccountId] && this.data.accountBindFriendMap[qwAccountId][groupId]) {
495
- const bindIndex = this.data.accountBindFriendMap[qwAccountId][groupId].indexOf(this.roomMap[id])
486
+ if (qwAccountId && this.data.accountBindRoomMap[qwAccountId] && this.data.accountBindRoomMap[qwAccountId][groupId]) {
487
+ const bindIndex = this.data.accountBindRoomMap[qwAccountId][groupId].indexOf(this.roomMap[id])
496
488
  if (bindIndex >= 0) {
497
- this.data.accountBindFriendMap[qwAccountId][groupId].splice(bindIndex, 1)
489
+ this.data.accountBindRoomMap[qwAccountId][groupId].splice(bindIndex, 1)
498
490
  }
499
491
  }
500
492
  })
@@ -628,6 +620,37 @@ export default class ClientChatContacts {
628
620
  return rs
629
621
  })
630
622
  }
623
+
624
+ /**
625
+ * 强制从服务端刷新好友资料,绕过本地缓存。
626
+ */
627
+ refreshFriend (friendId) {
628
+ if (!friendId) {
629
+ return Promise.reject('缺少好友id')
630
+ }
631
+ if (!this.getContactsFriendMethod) {
632
+ return Promise.reject(new Error('getContactsFriendMethod未定义'))
633
+ }
634
+ return this.getContactsFriendMethod({
635
+ id: friendId
636
+ }).then(rs => {
637
+ if (!rs || !rs.data) {
638
+ return Promise.reject('未找到好友' + friendId)
639
+ }
640
+ if (this.friendMap[friendId]) {
641
+ const nextKeys = Object.keys(rs.data)
642
+ Object.keys(this.friendMap[friendId]).forEach(key => {
643
+ if (!nextKeys.includes(key)) {
644
+ Vue.delete(this.friendMap[friendId], key)
645
+ }
646
+ })
647
+ this.updateFriend(friendId, rs.data)
648
+ } else {
649
+ this.addFriend(rs.data)
650
+ }
651
+ return rs
652
+ })
653
+ }
631
654
 
632
655
  setRoomMemberData (roomId, data) {
633
656
  if (!roomId) {
@@ -738,12 +761,52 @@ export default class ClientChatContacts {
738
761
  })
739
762
  }
740
763
 
741
- markModify () {
742
- this.data.isModify = true
764
+ refreshRoom (id) {
765
+ if (!id) {
766
+ return Promise.reject('缺少群id')
767
+ }
768
+ if (!this.getContactsRoomMethod) {
769
+ return Promise.reject(new Error('getContactsRoomMethod未定义'))
770
+ }
771
+ return this.getContactsRoomMethod({
772
+ id
773
+ }).then(rs => {
774
+ if (!rs || !rs.data) {
775
+ return Promise.reject('未找到群' + id)
776
+ }
777
+ const localRoom = this.roomMap[id]
778
+ if (localRoom) {
779
+ this.removeRoom(id)
780
+ const nextKeys = Object.keys(rs.data)
781
+ Object.keys(localRoom).forEach(key => {
782
+ if (!nextKeys.includes(key)) {
783
+ Vue.delete(localRoom, key)
784
+ }
785
+ })
786
+ Object.keys(rs.data).forEach(key => {
787
+ Vue.set(localRoom, key, rs.data[key])
788
+ })
789
+ }
790
+ this.addRoom(localRoom || rs.data)
791
+ return rs
792
+ })
793
+ }
794
+
795
+ isModify (qwAccountId) {
796
+ return !!(qwAccountId && this.data.modifiedAccountMap[qwAccountId])
797
+ }
798
+
799
+ markModify (qwAccountIds) {
800
+ const ids = Array.isArray(qwAccountIds) ? qwAccountIds : [qwAccountIds]
801
+ ids.filter(Boolean).forEach(id => {
802
+ Vue.set(this.data.modifiedAccountMap, id, true)
803
+ })
743
804
  }
744
805
 
745
- unmarkModify () {
746
- this.data.isModify = false
806
+ unmarkModify (qwAccountId) {
807
+ if (qwAccountId) {
808
+ Vue.delete(this.data.modifiedAccountMap, qwAccountId)
809
+ }
747
810
  }
748
811
 
749
812
  reset () {
@@ -758,6 +821,7 @@ export default class ClientChatContacts {
758
821
  this.data.groupBindRoomMap = {}
759
822
  this.data.accountBindFriendMap = {}
760
823
  this.data.accountBindRoomMap = {}
824
+ this.data.modifiedAccountMap = {}
761
825
  this._cacheFriendGroupCountMap = null
762
826
  this._cacheRoomGroupCountMap = null
763
827
  if (this.cancelConnectRequest) {
@@ -769,4 +833,4 @@ export default class ClientChatContacts {
769
833
  this.cancelRefreshRequest = null
770
834
  }
771
835
  }
772
- }
836
+ }