Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
Madara
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
viitto
Madara
Commits
4669e85c
Commit
4669e85c
authored
Sep 29, 2019
by
罗超
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
no message
parent
93929c38
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
708 additions
and
696 deletions
+708
-696
index.js
src/configs/index.js
+33
-33
index.js
src/main/index.js
+11
-7
App.vue
src/renderer/App.vue
+3
-0
index.vue
src/renderer/components/index.vue
+0
-1
chateditor.vue
src/renderer/components/msssage/chateditor.vue
+1
-0
index.vue
src/renderer/components/msssage/index.vue
+3
-1
session.js
src/store/actions/session.js
+78
-78
index.js
src/store/mutations/index.js
+579
-576
No files found.
src/configs/index.js
View file @
4669e85c
let
config
=
{
sdk
:
'NIM_Web_SDK_nodejs_v5.9.1'
,
// 用户自定义的登录注册地址
loginUrl
:
'/webdemo/h5/login.html'
,
registUrl
:
'/webdemo/h5/regist.html'
,
homeUrl
:
'/webdemo/h5/index.html#/session'
,
sdk
:
'NIM_Web_SDK_nodejs_v5.9.1'
,
// 用户自定义的登录注册地址
loginUrl
:
'/webdemo/h5/login.html'
,
registUrl
:
'/webdemo/h5/regist.html'
,
homeUrl
:
'/webdemo/h5/index.html#/session'
,
// 资源路径根目录,为了方便用户部署在二级以上URL路径上
resourceUrl
:
'http://yx-web.nos.netease.com/webdoc/h5'
,
// 用户logo地址
logo
:
'http://yx-web.nos.netease.com/webdoc/h5/im/logo.png'
,
// 默认用户头像
defaultUserIcon
:
'http://yx-web.nos.netease.com/webdoc/h5/im/default-icon.png'
,
// 默认普通群头像
defaultGroupIcon
:
'http://yx-web.nos.netease.com/webdoc/h5/im/default-group.png'
,
// 默认高级群头像
defaultAdvancedIcon
:
'http://yx-web.nos.netease.com/webdoc/h5/im/default-advanced.png'
,
// 系统通知图标
noticeIcon
:
'http://yx-web.nos.netease.com/webdoc/h5/im/notice-icon.png'
,
// 我的手机图标
myPhoneIcon
:
'http://yx-web.nos.netease.com/webdoc/h5/im/my-phone.png'
,
// 本地消息显示数量,会影响性能
localMsglimit
:
36
,
useDb
:
false
// 资源路径根目录,为了方便用户部署在二级以上URL路径上
resourceUrl
:
'http://yx-web.nos.netease.com/webdoc/h5'
,
// 用户logo地址
logo
:
'http://yx-web.nos.netease.com/webdoc/h5/im/logo.png'
,
// 默认用户头像
defaultUserIcon
:
'http://yx-web.nos.netease.com/webdoc/h5/im/default-icon.png'
,
// 默认普通群头像
defaultGroupIcon
:
'http://yx-web.nos.netease.com/webdoc/h5/im/default-group.png'
,
// 默认高级群头像
defaultAdvancedIcon
:
'http://yx-web.nos.netease.com/webdoc/h5/im/default-advanced.png'
,
// 系统通知图标
noticeIcon
:
'http://yx-web.nos.netease.com/webdoc/h5/im/notice-icon.png'
,
// 我的手机图标
myPhoneIcon
:
'http://yx-web.nos.netease.com/webdoc/h5/im/my-phone.png'
,
// 本地消息显示数量,会影响性能
localMsglimit
:
36
,
useDb
:
false
}
const
env
=
'online'
let
appConfig
=
{
// 用户的appkey
// 用于在web demo中注册账号异步请求demo 服务器中使用
test
:
{
appkey
:
'b612b31e837c79c68f141aeb719d2b20'
,
postUrl
:
'https://apptest.netease.im'
},
online
:
{
appkey
:
'b612b31e837c79c68f141aeb719d2b20'
,
postUrl
:
'https://app.netease.im'
}
// 用户的appkey
// 用于在web demo中注册账号异步请求demo 服务器中使用
test
:
{
appkey
:
'b612b31e837c79c68f141aeb719d2b20'
,
postUrl
:
'https://apptest.netease.im'
},
online
:
{
appkey
:
'b612b31e837c79c68f141aeb719d2b20'
,
postUrl
:
'https://app.netease.im'
}
}
config
=
Object
.
assign
(
config
,
appConfig
[
env
])
export
default
config
export
default
config
\ No newline at end of file
src/main/index.js
View file @
4669e85c
...
...
@@ -79,6 +79,8 @@ const addnewuserUrl = process.env.NODE_ENV === 'development' ? `http://localhost
const appXmlPath = process.execPath.substring(0, process.execPath.lastIndexOf('
\\
') + 1) + '
app
.
json
'
const forwardUrl = process.env.NODE_ENV === '
development
' ? `http://localhost:9080/#/forwardMsg` : `file://${__dirname}/index.html#/forwardMsg`
if (process.env.NODE_ENV !== '
development
') {
global.__static = require('
path
').join(__dirname, '
/
static
').replace(/
\\
/g, '
\\\\
')
...
...
@@ -290,8 +292,8 @@ app.on('activate', () => {
createWindow()
}
})
ipc.on('
reconnect
',
function(event)
{
nim
=
null
ipc.on('
reconnect
',
function(event)
{
nim
=
null
initNIM(global.LOGINUSER.ImAccount, global.LOGINUSER.ImToken)
})
ipc.on('
loginSuccess
', function(event, userInfo) {
...
...
@@ -697,6 +699,7 @@ ipc.on('send-file', function(event, obj) {
custom: JSON.stringify(customMsg),
uploadprogress: function(data) {
file.progess = data.percentage
console.log(file)
event.sender.send('
sending
-
process
', file)
},
uploaderror: function() {
...
...
@@ -814,8 +817,8 @@ let getMainWinodw = function(isLoad) {
mainWindow
.
show
()
mainWindow
.
setAlwaysOnTop
(
true
)
mainWindow
.
setAlwaysOnTop
(
false
)
//mainWindow.webContents.openDevTools(true);
//getNoticeWindows()
//mainWindow.webContents.openDevTools(true);
//getNoticeWindows()
})
}
//加载隐藏窗口防止用户关闭
...
...
@@ -936,7 +939,8 @@ let getNoticeWindows = function() {
width
:
300
,
height
:
115
,
skipTaskbar
:
true
,
alwaysOnTop
:
true
alwaysOnTop
:
false
,
focusable
:
false
})
noticeWindows
.
setBounds
({
y
:
electron
.
screen
.
getPrimaryDisplay
().
workAreaSize
.
height
-
115
,
...
...
@@ -970,7 +974,7 @@ let getAddNewUserWinodes = function() {
addNewUserWinodes
.
setMenu
(
null
)
addNewUserWinodes
.
once
(
'ready-to-show'
,
()
=>
{
addNewUserWinodes
.
show
()
//addNewUserWinodes.webContents.openDevTools(true);
//addNewUserWinodes.webContents.openDevTools(true);
})
}
else
{
addNewUserWinodes
.
focus
()
...
...
@@ -1099,7 +1103,6 @@ let initNIM = function(uid, token) {
function onDisconnect(error) {
// 此时说明 SDK 处于断开状态, 开发者此时应该根据错误码提示相应的错误信息, 并且跳转到登录页面
if (error) {
switch (error.code) {
// 账号或者密码错误, 请跳转到登录页面并提示错误
...
...
@@ -1115,6 +1118,7 @@ let initNIM = function(uid, token) {
break;
}
}
console.log('
异常了
');
}
function onError(error) {
...
...
src/renderer/App.vue
View file @
4669e85c
...
...
@@ -9,6 +9,9 @@
export
default
{
name
:
"MageOffice"
,
mounted
()
{
window
.
alert
=
function
()
{
return
false
;
}
document
.
querySelector
(
'#app'
).
addEventListener
(
"dragover"
,
function
(
e
)
{
...
...
src/renderer/components/index.vue
View file @
4669e85c
...
...
@@ -195,7 +195,6 @@ export default {
},
8
*
1000
);
},
atMsg
(){
console
.
log
(
11111111111111
)
this
.
MsgBus
.
$emit
(
'send-at-name'
,
this
.
atInfo
.
atName
)
},
showCard
(
e
){
...
...
src/renderer/components/msssage/chateditor.vue
View file @
4669e85c
...
...
@@ -85,6 +85,7 @@ export default {
});
this
.
$electron
.
ipcRenderer
.
on
(
"sending-process"
,
(
event
,
file
)
=>
{
console
.
log
(
file
)
this
.
GLOBALSENDING
.
forEach
(
x
=>
{
if
((
x
.
msgId
=
file
.
msgId
))
{
x
=
file
;
...
...
src/renderer/components/msssage/index.vue
View file @
4669e85c
...
...
@@ -590,7 +590,9 @@ export default {
lastMsg
.
type
===
"notification"
&&
lastMsg
.
attach
&&
lastMsg
.
attach
.
team
&&
lastMsg
.
attach
.
team
.
custom
lastMsg
.
attach
.
team
.
custom
&&
this
.
$store
.
state
.
msgs
[
item
.
id
]
&&
this
.
$store
.
state
.
msgs
[
item
.
id
].
length
>
0
)
{
for
(
let
i
=
this
.
$store
.
state
.
msgs
[
item
.
id
].
length
-
1
;
i
>=
0
;
i
--
)
{
lastMsg
=
this
.
$store
.
state
.
msgs
[
item
.
id
][
i
]
...
...
src/store/actions/session.js
View file @
4669e85c
...
...
@@ -5,96 +5,96 @@
import
store
from
'../'
// 如果会话对象不是好友,需要更新好友名片
function
updateSessionAccount
(
sessions
)
{
let
accountsNeedSearch
=
[]
sessions
.
forEach
(
item
=>
{
if
(
item
.
scene
===
'p2p'
)
{
// 如果不存在缓存资料
if
(
!
store
.
state
.
userInfos
[
item
.
to
])
{
accountsNeedSearch
.
push
(
item
.
to
)
}
}
})
if
(
accountsNeedSearch
.
length
>
0
)
{
store
.
dispatch
(
'searchUsers'
,
{
accounts
:
accountsNeedSearch
function
updateSessionAccount
(
sessions
)
{
let
accountsNeedSearch
=
[]
sessions
.
forEach
(
item
=>
{
if
(
item
.
scene
===
'p2p'
)
{
// 如果不存在缓存资料
if
(
!
store
.
state
.
userInfos
[
item
.
to
])
{
accountsNeedSearch
.
push
(
item
.
to
)
}
}
})
}
if
(
accountsNeedSearch
.
length
>
0
)
{
store
.
dispatch
(
'searchUsers'
,
{
accounts
:
accountsNeedSearch
})
}
}
// onSessions只在初始化完成后回调
export
function
onSessions
(
sessions
)
{
updateSessionAccount
(
sessions
)
store
.
commit
(
'updateSessions'
,
sessions
)
export
function
onSessions
(
sessions
)
{
updateSessionAccount
(
sessions
)
store
.
commit
(
'updateSessions'
,
sessions
)
}
export
function
onUpdateSession
(
session
)
{
let
sessions
=
[
session
]
updateSessionAccount
(
sessions
)
store
.
commit
(
'updateSessions'
,
sessions
)
export
function
onUpdateSession
(
session
)
{
let
sessions
=
[
session
]
updateSessionAccount
(
sessions
)
store
.
commit
(
'updateSessions'
,
sessions
)
}
export
function
deleteSession
({
state
,
commit
},
sessionId
)
{
const
nim
=
state
.
nim
sessionId
=
sessionId
||
''
let
scene
=
null
let
account
=
null
if
(
/^p2p-/
.
test
(
sessionId
))
{
scene
=
'p2p'
account
=
sessionId
.
replace
(
/^p2p-/
,
''
)
}
else
if
(
/^team-/
.
test
(
sessionId
))
{
scene
=
'team'
account
=
sessionId
.
replace
(
/^team-/
,
''
)
}
if
(
account
&&
scene
)
{
nim
.
deleteSession
({
scene
,
to
:
account
,
done
:
function
deleteServerSessionDone
(
error
,
obj
)
{
if
(
error
)
{
//alert(error)
return
}
nim
.
deleteLocalSession
({
id
:
sessionId
,
done
:
function
deleteLocalSessionDone
(
error
,
obj
)
{
if
(
error
)
{
//alert(error)
return
export
function
deleteSession
({
state
,
commit
},
sessionId
)
{
const
nim
=
state
.
nim
sessionId
=
sessionId
||
''
let
scene
=
null
let
account
=
null
if
(
/^p2p-/
.
test
(
sessionId
))
{
scene
=
'p2p'
account
=
sessionId
.
replace
(
/^p2p-/
,
''
)
}
else
if
(
/^team-/
.
test
(
sessionId
))
{
scene
=
'team'
account
=
sessionId
.
replace
(
/^team-/
,
''
)
}
if
(
account
&&
scene
)
{
nim
.
deleteSession
({
scene
,
to
:
account
,
done
:
function
deleteServerSessionDone
(
error
,
obj
)
{
if
(
error
)
{
//alert(error)
return
}
nim
.
deleteLocalSession
({
id
:
sessionId
,
done
:
function
deleteLocalSessionDone
(
error
,
obj
)
{
if
(
error
)
{
//alert(error)
return
}
commit
(
'deleteSessions'
,
[
sessionId
])
}
})
}
commit
(
'deleteSessions'
,
[
sessionId
])
}
})
}
})
}
}
}
export
function
setCurrSession
({
state
,
commit
,
dispatch
},
sessionId
)
{
const
nim
=
state
.
nim
if
(
sessionId
)
{
commit
(
'updateCurrSessionId'
,
{
type
:
'init'
,
sessionId
})
if
(
nim
)
{
// 如果在聊天页面刷新,此时还没有nim实例,需要在onSessions里同步
nim
.
setCurrSession
(
sessionId
)
commit
(
'updateCurrSessionMsgs'
,
{
type
:
'init'
,
sessionId
})
// 发送已读回执
dispatch
(
'sendMsgReceipt'
)
export
function
setCurrSession
({
state
,
commit
,
dispatch
},
sessionId
)
{
const
nim
=
state
.
nim
if
(
sessionId
)
{
commit
(
'updateCurrSessionId'
,
{
type
:
'init'
,
sessionId
})
if
(
nim
)
{
// 如果在聊天页面刷新,此时还没有nim实例,需要在onSessions里同步
nim
.
setCurrSession
(
sessionId
)
commit
(
'updateCurrSessionMsgs'
,
{
type
:
'init'
,
sessionId
})
// 发送已读回执
dispatch
(
'sendMsgReceipt'
)
}
}
}
}
export
function
resetCurrSession
({
state
,
commit
})
{
const
nim
=
state
.
nim
nim
.
resetCurrSession
()
commit
(
'updateCurrSessionMsgs'
,
{
type
:
'destroy'
})
}
export
function
resetCurrSession
({
state
,
commit
})
{
const
nim
=
state
.
nim
nim
.
resetCurrSession
()
commit
(
'updateCurrSessionMsgs'
,
{
type
:
'destroy'
})
}
\ No newline at end of file
src/store/mutations/index.js
View file @
4669e85c
...
...
@@ -8,598 +8,601 @@ import config from '../../configs'
import
Vue
from
'Vue'
export
default
{
updateRefreshState
(
state
)
{
state
.
isRefresh
=
false
},
updateLoading
(
state
,
status
)
{
clearTimeout
(
state
.
loadingTimer
)
state
.
loadingTimer
=
setTimeout
(()
=>
{
state
.
isLoading
=
status
},
20
)
},
updateFullscreenImage
(
state
,
obj
)
{
obj
=
obj
||
{}
if
(
obj
.
src
&&
obj
.
type
===
'show'
)
{
state
.
fullscreenImgSrc
=
obj
.
src
state
.
isFullscreenImgShow
=
true
}
else
if
(
obj
.
type
===
'hide'
)
{
state
.
fullscreenImgSrc
=
' '
state
.
isFullscreenImgShow
=
false
}
},
updateUserUID
(
state
,
loginInfo
)
{
state
.
userUID
=
loginInfo
.
uid
state
.
sdktoken
=
loginInfo
.
sdktoken
cookie
.
setCookie
(
'uid'
,
loginInfo
.
uid
)
cookie
.
setCookie
(
'sdktoken'
,
loginInfo
.
sdktoken
)
},
updateMyInfo
(
state
,
myInfo
)
{
state
.
myInfo
=
util
.
mergeObject
(
state
.
myInfo
,
myInfo
)
},
updateUserInfo
(
state
,
users
)
{
let
userInfos
=
state
.
userInfos
users
.
forEach
(
user
=>
{
let
account
=
user
.
account
if
(
account
)
{
userInfos
[
account
]
=
util
.
mergeObject
(
userInfos
[
account
],
user
)
}
})
state
.
userInfos
=
util
.
mergeObject
(
state
.
userInfos
,
userInfos
)
},
updateFriends
(
state
,
friends
,
cutFriends
=
[])
{
const
nim
=
state
.
nim
state
.
friendslist
=
nim
.
mergeFriends
(
state
.
friendslist
,
friends
)
// state.friendslist = nim.cutFriends(state.friendslist, cutFriends)
state
.
friendslist
=
nim
.
cutFriends
(
state
.
friendslist
,
friends
.
invalid
)
},
updateRobots
(
state
,
robots
)
{
const
nim
=
state
.
nim
robots
=
robots
.
map
(
item
=>
{
if
(
item
.
avatar
)
{
item
.
originAvatar
=
item
.
avatar
item
.
avatar
=
nim
.
viewImageSync
({
url
:
item
.
avatar
,
// 必填
thumbnail
:
{
// 生成缩略图, 可选填
width
:
40
,
height
:
40
,
mode
:
'cover'
}
updateRefreshState
(
state
)
{
state
.
isRefresh
=
false
},
updateLoading
(
state
,
status
)
{
clearTimeout
(
state
.
loadingTimer
)
state
.
loadingTimer
=
setTimeout
(()
=>
{
state
.
isLoading
=
status
},
20
)
},
updateFullscreenImage
(
state
,
obj
)
{
obj
=
obj
||
{}
if
(
obj
.
src
&&
obj
.
type
===
'show'
)
{
state
.
fullscreenImgSrc
=
obj
.
src
state
.
isFullscreenImgShow
=
true
}
else
if
(
obj
.
type
===
'hide'
)
{
state
.
fullscreenImgSrc
=
' '
state
.
isFullscreenImgShow
=
false
}
},
updateUserUID
(
state
,
loginInfo
)
{
state
.
userUID
=
loginInfo
.
uid
state
.
sdktoken
=
loginInfo
.
sdktoken
cookie
.
setCookie
(
'uid'
,
loginInfo
.
uid
)
cookie
.
setCookie
(
'sdktoken'
,
loginInfo
.
sdktoken
)
},
updateMyInfo
(
state
,
myInfo
)
{
state
.
myInfo
=
util
.
mergeObject
(
state
.
myInfo
,
myInfo
)
},
updateUserInfo
(
state
,
users
)
{
let
userInfos
=
state
.
userInfos
users
.
forEach
(
user
=>
{
let
account
=
user
.
account
if
(
account
)
{
userInfos
[
account
]
=
util
.
mergeObject
(
userInfos
[
account
],
user
)
}
})
}
else
{
item
.
avatar
=
config
.
defaultUserIcon
}
return
item
})
state
.
robotslist
=
robots
state
.
robotInfos
=
Object
.
create
(
null
)
robots
.
forEach
(
robot
=>
{
state
.
robotInfos
[
robot
.
account
]
=
robot
state
.
robotInfosByNick
[
robot
.
nick
]
=
robot
})
},
updateBlacklist
(
state
,
blacks
)
{
const
nim
=
state
.
nim
state
.
blacklist
=
nim
.
cutFriends
(
state
.
blacklist
,
blacks
.
invalid
)
let
addBlacks
=
blacks
.
filter
(
item
=>
{
return
item
.
isBlack
===
true
})
let
remBlacks
=
blacks
.
filter
(
item
=>
{
return
item
.
isBlack
===
false
})
// 添加黑名单
state
.
blacklist
=
nim
.
mergeFriends
(
state
.
blacklist
,
addBlacks
)
// 解除黑名单
state
.
blacklist
=
nim
.
cutFriends
(
state
.
blacklist
,
remBlacks
)
},
updateSearchlist
(
state
,
obj
)
{
const
type
=
obj
.
type
switch
(
type
)
{
case
'user'
:
if
(
obj
.
list
.
length
!==
0
||
state
.
searchedUsers
.
length
!==
0
)
{
state
.
searchedUsers
=
obj
.
list
}
else
{
state
.
searchedUsers
=
[]
state
.
userInfos
=
util
.
mergeObject
(
state
.
userInfos
,
userInfos
)
},
updateFriends
(
state
,
friends
,
cutFriends
=
[])
{
const
nim
=
state
.
nim
state
.
friendslist
=
nim
.
mergeFriends
(
state
.
friendslist
,
friends
)
// state.friendslist = nim.cutFriends(state.friendslist, cutFriends)
state
.
friendslist
=
nim
.
cutFriends
(
state
.
friendslist
,
friends
.
invalid
)
},
updateRobots
(
state
,
robots
)
{
const
nim
=
state
.
nim
robots
=
robots
.
map
(
item
=>
{
if
(
item
.
avatar
)
{
item
.
originAvatar
=
item
.
avatar
item
.
avatar
=
nim
.
viewImageSync
({
url
:
item
.
avatar
,
// 必填
thumbnail
:
{
// 生成缩略图, 可选填
width
:
40
,
height
:
40
,
mode
:
'cover'
}
})
}
else
{
item
.
avatar
=
config
.
defaultUserIcon
}
return
item
})
state
.
robotslist
=
robots
state
.
robotInfos
=
Object
.
create
(
null
)
robots
.
forEach
(
robot
=>
{
state
.
robotInfos
[
robot
.
account
]
=
robot
state
.
robotInfosByNick
[
robot
.
nick
]
=
robot
})
},
updateBlacklist
(
state
,
blacks
)
{
const
nim
=
state
.
nim
state
.
blacklist
=
nim
.
cutFriends
(
state
.
blacklist
,
blacks
.
invalid
)
let
addBlacks
=
blacks
.
filter
(
item
=>
{
return
item
.
isBlack
===
true
})
let
remBlacks
=
blacks
.
filter
(
item
=>
{
return
item
.
isBlack
===
false
})
// 添加黑名单
state
.
blacklist
=
nim
.
mergeFriends
(
state
.
blacklist
,
addBlacks
)
// 解除黑名单
state
.
blacklist
=
nim
.
cutFriends
(
state
.
blacklist
,
remBlacks
)
},
updateSearchlist
(
state
,
obj
)
{
const
type
=
obj
.
type
switch
(
type
)
{
case
'user'
:
if
(
obj
.
list
.
length
!==
0
||
state
.
searchedUsers
.
length
!==
0
)
{
state
.
searchedUsers
=
obj
.
list
}
else
{
state
.
searchedUsers
=
[]
}
break
case
'team'
:
if
(
obj
.
list
.
length
!==
0
||
state
.
searchedTeams
.
length
!==
0
)
{
state
.
searchedTeams
=
obj
.
list
}
else
{
state
.
searchedTeams
=
[]
}
break
}
},
updateSessions
(
state
,
sessions
)
{
const
nim
=
state
.
nim
state
.
sessionlist
=
nim
.
mergeSessions
(
state
.
sessionlist
,
sessions
)
state
.
sessionlist
.
sort
((
a
,
b
)
=>
{
return
b
.
updateTime
-
a
.
updateTime
})
state
.
sessionlist
.
forEach
(
item
=>
{
state
.
sessionMap
[
item
.
id
]
=
item
})
},
deleteSessions
(
state
,
sessionIds
)
{
const
nim
=
state
.
nim
state
.
sessionlist
=
nim
.
cutSessionsByIds
(
state
.
sessionlist
,
sessionIds
)
},
addToMutelist
(
state
,
obj
)
{
const
nim
=
state
.
nim
state
.
mutelist
=
nim
.
mergeRelations
(
state
.
mutelist
,
obj
.
record
);
},
removeFromMutelist
(
state
,
obj
)
{
const
nim
=
state
.
nim
state
.
mutelist
=
nim
.
cutRelations
(
state
.
mutelist
,
obj
.
record
);
},
updateMutelist
(
state
,
mutelist
)
{
const
nim
=
state
.
nim
state
.
mutelist
=
nim
.
mergeRelations
(
state
.
mutelist
,
mutelist
)
state
.
mutelist
=
nim
.
cutRelations
(
state
.
mutelist
,
mutelist
.
invalid
)
},
updateNetError
(
state
,
status
)
{
state
.
isNetError
=
status
},
// 初始化,收到离线漫游消息时调用
updateMsgs
(
state
,
msgs
)
{
const
nim
=
state
.
nim
let
tempSessionMap
=
{}
msgs
.
forEach
(
msg
=>
{
let
sessionId
=
msg
.
sessionId
tempSessionMap
[
sessionId
]
=
true
if
(
!
state
.
msgs
[
sessionId
])
{
state
.
msgs
[
sessionId
]
=
[]
}
// sdk会做消息去重
state
.
msgs
[
sessionId
]
=
nim
.
mergeMsgs
(
state
.
msgs
[
sessionId
],
[
msg
])
// state.msgs[sessionId].push(msg)
})
store
.
commit
(
'updateMsgByIdClient'
,
msgs
)
for
(
let
sessionId
in
tempSessionMap
)
{
state
.
msgs
[
sessionId
].
sort
((
a
,
b
)
=>
{
if
(
a
.
time
===
b
.
time
)
{
// 机器人消息,回复消息时间和提问消息时间相同,提问在前,回复在后
if
(
a
.
type
===
'robot'
&&
b
.
type
===
'robot'
)
{
if
(
a
.
content
&&
a
.
content
.
msgOut
)
{
return
1
}
if
(
b
.
content
&&
b
.
content
.
msgOut
)
{
return
-
1
}
}
}
return
a
.
time
-
b
.
time
})
if
(
sessionId
===
state
.
currSessionId
)
{
store
.
commit
(
'updateCurrSessionMsgs'
,
{
type
:
'init'
})
}
}
},
// 更新追加消息,追加一条消息
putMsg
(
state
,
msg
)
{
let
sessionId
=
msg
.
sessionId
if
(
!
state
.
msgs
[
sessionId
])
{
state
.
msgs
[
sessionId
]
=
[]
}
break
case
'team'
:
if
(
obj
.
list
.
length
!==
0
||
state
.
searchedTeams
.
length
!==
0
)
{
state
.
searchedTeams
=
obj
.
list
store
.
commit
(
'updateMsgByIdClient'
,
msg
)
let
tempMsgs
=
state
.
msgs
[
sessionId
]
let
lastMsgIndex
=
tempMsgs
.
length
-
1
if
(
msg
.
isLocal
&&
lastMsgIndex
>=
0
)
{
msg
.
time
=
tempMsgs
[
lastMsgIndex
].
time
+
1
}
if
(
tempMsgs
.
length
===
0
||
msg
.
time
>=
tempMsgs
[
lastMsgIndex
].
time
)
{
tempMsgs
.
push
(
msg
)
}
else
{
state
.
searchedTeams
=
[]
for
(
let
i
=
lastMsgIndex
;
i
>=
0
;
i
--
)
{
let
currMsg
=
tempMsgs
[
i
]
if
(
msg
.
time
>=
currMsg
.
time
)
{
state
.
msgs
[
sessionId
].
splice
(
i
,
0
,
msg
)
break
}
}
}
break
}
},
updateSessions
(
state
,
sessions
)
{
const
nim
=
state
.
nim
state
.
sessionlist
=
nim
.
mergeSessions
(
state
.
sessionlist
,
sessions
)
state
.
sessionlist
.
sort
((
a
,
b
)
=>
{
return
b
.
updateTime
-
a
.
updateTime
})
state
.
sessionlist
.
forEach
(
item
=>
{
state
.
sessionMap
[
item
.
id
]
=
item
})
},
deleteSessions
(
state
,
sessionIds
)
{
const
nim
=
state
.
nim
state
.
sessionlist
=
nim
.
cutSessionsByIds
(
state
.
sessionlist
,
sessionIds
)
},
addToMutelist
(
state
,
obj
){
const
nim
=
state
.
nim
state
.
mutelist
=
nim
.
mergeRelations
(
state
.
mutelist
,
obj
.
record
);
},
removeFromMutelist
(
state
,
obj
){
const
nim
=
state
.
nim
state
.
mutelist
=
nim
.
cutRelations
(
state
.
mutelist
,
obj
.
record
);
},
updateMutelist
(
state
,
mutelist
)
{
const
nim
=
state
.
nim
state
.
mutelist
=
nim
.
mergeRelations
(
state
.
mutelist
,
mutelist
)
state
.
mutelist
=
nim
.
cutRelations
(
state
.
mutelist
,
mutelist
.
invalid
)
},
updateNetError
(
state
,
status
)
{
state
.
isNetError
=
status
},
// 初始化,收到离线漫游消息时调用
updateMsgs
(
state
,
msgs
)
{
const
nim
=
state
.
nim
let
tempSessionMap
=
{}
msgs
.
forEach
(
msg
=>
{
let
sessionId
=
msg
.
sessionId
tempSessionMap
[
sessionId
]
=
true
if
(
!
state
.
msgs
[
sessionId
])
{
state
.
msgs
[
sessionId
]
=
[]
}
// sdk会做消息去重
state
.
msgs
[
sessionId
]
=
nim
.
mergeMsgs
(
state
.
msgs
[
sessionId
],
[
msg
])
// state.msgs[sessionId].push(msg)
})
store
.
commit
(
'updateMsgByIdClient'
,
msgs
)
for
(
let
sessionId
in
tempSessionMap
)
{
state
.
msgs
[
sessionId
].
sort
((
a
,
b
)
=>
{
if
(
a
.
time
===
b
.
time
)
{
// 机器人消息,回复消息时间和提问消息时间相同,提问在前,回复在后
if
(
a
.
type
===
'robot'
&&
b
.
type
===
'robot'
)
{
if
(
a
.
content
&&
a
.
content
.
msgOut
)
{
return
1
},
// 删除消息列表消息
deleteMsg
(
state
,
msg
)
{
let
sessionId
=
msg
.
sessionId
let
tempMsgs
=
state
.
msgs
[
sessionId
]
if
(
!
tempMsgs
||
tempMsgs
.
length
===
0
)
{
return
}
let
lastMsgIndex
=
tempMsgs
.
length
-
1
for
(
let
i
=
lastMsgIndex
;
i
>=
0
;
i
--
)
{
let
currMsg
=
tempMsgs
[
i
]
if
(
msg
.
idClient
===
currMsg
.
idClient
)
{
state
.
msgs
[
sessionId
].
splice
(
i
,
1
)
break
}
if
(
b
.
content
&&
b
.
content
.
msgOut
)
{
return
-
1
}
},
// 替换消息列表消息,如消息撤回
replaceMsg
(
state
,
obj
)
{
let
{
sessionId
,
idClient
,
msg
}
=
obj
let
tempMsgs
=
state
.
msgs
[
sessionId
]
if
(
!
tempMsgs
||
tempMsgs
.
length
===
0
)
{
return
}
let
lastMsgIndex
=
tempMsgs
.
length
-
1
for
(
let
i
=
lastMsgIndex
;
i
>=
0
;
i
--
)
{
let
currMsg
=
tempMsgs
[
i
]
if
(
idClient
===
currMsg
.
idClient
)
{
state
.
msgs
[
sessionId
].
splice
(
i
,
1
,
msg
)
break
}
}
}
return
a
.
time
-
b
.
time
})
if
(
sessionId
===
state
.
currSessionId
)
{
store
.
commit
(
'updateCurrSessionMsgs'
,
{
type
:
'init'
},
// 用idClient 更新消息,目前用于消息撤回
updateMsgByIdClient
(
state
,
msgs
)
{
if
(
!
Array
.
isArray
(
msgs
))
{
msgs
=
[
msgs
]
}
let
tempTime
=
(
new
Date
()).
getTime
()
msgs
.
forEach
(
msg
=>
{
// 有idClient 且 5分钟以内的消息
if
(
msg
.
idClient
&&
(
tempTime
-
msg
.
time
<
1000
*
300
))
{
state
.
msgsMap
[
msg
.
idClient
]
=
msg
}
})
}
}
},
// 更新追加消息,追加一条消息
putMsg
(
state
,
msg
)
{
let
sessionId
=
msg
.
sessionId
if
(
!
state
.
msgs
[
sessionId
])
{
state
.
msgs
[
sessionId
]
=
[]
}
store
.
commit
(
'updateMsgByIdClient'
,
msg
)
let
tempMsgs
=
state
.
msgs
[
sessionId
]
let
lastMsgIndex
=
tempMsgs
.
length
-
1
if
(
msg
.
isLocal
&&
lastMsgIndex
>=
0
){
msg
.
time
=
tempMsgs
[
lastMsgIndex
].
time
+
1
}
if
(
tempMsgs
.
length
===
0
||
msg
.
time
>=
tempMsgs
[
lastMsgIndex
].
time
)
{
tempMsgs
.
push
(
msg
)
}
else
{
for
(
let
i
=
lastMsgIndex
;
i
>=
0
;
i
--
)
{
let
currMsg
=
tempMsgs
[
i
]
if
(
msg
.
time
>=
currMsg
.
time
)
{
state
.
msgs
[
sessionId
].
splice
(
i
,
0
,
msg
)
break
},
// 更新当前会话id,用于唯一判定是否在current session状态
updateCurrSessionId
(
state
,
obj
)
{
let
type
=
obj
.
type
||
''
if
(
type
===
'destroy'
)
{
state
.
currSessionId
=
null
}
else
if
(
type
===
'init'
)
{
if
(
obj
.
sessionId
&&
(
obj
.
sessionId
!==
state
.
currSessionId
))
{
state
.
currSessionId
=
obj
.
sessionId
}
}
}
}
},
// 删除消息列表消息
deleteMsg
(
state
,
msg
)
{
let
sessionId
=
msg
.
sessionId
let
tempMsgs
=
state
.
msgs
[
sessionId
]
if
(
!
tempMsgs
||
tempMsgs
.
length
===
0
)
{
return
}
let
lastMsgIndex
=
tempMsgs
.
length
-
1
for
(
let
i
=
lastMsgIndex
;
i
>=
0
;
i
--
)
{
let
currMsg
=
tempMsgs
[
i
]
if
(
msg
.
idClient
===
currMsg
.
idClient
)
{
state
.
msgs
[
sessionId
].
splice
(
i
,
1
)
break
}
}
},
// 替换消息列表消息,如消息撤回
replaceMsg
(
state
,
obj
)
{
let
{
sessionId
,
idClient
,
msg
}
=
obj
let
tempMsgs
=
state
.
msgs
[
sessionId
]
if
(
!
tempMsgs
||
tempMsgs
.
length
===
0
)
{
return
}
let
lastMsgIndex
=
tempMsgs
.
length
-
1
for
(
let
i
=
lastMsgIndex
;
i
>=
0
;
i
--
)
{
let
currMsg
=
tempMsgs
[
i
]
if
(
idClient
===
currMsg
.
idClient
)
{
state
.
msgs
[
sessionId
].
splice
(
i
,
1
,
msg
)
break
}
}
},
// 用idClient 更新消息,目前用于消息撤回
updateMsgByIdClient
(
state
,
msgs
)
{
if
(
!
Array
.
isArray
(
msgs
))
{
msgs
=
[
msgs
]
}
let
tempTime
=
(
new
Date
()).
getTime
()
msgs
.
forEach
(
msg
=>
{
// 有idClient 且 5分钟以内的消息
if
(
msg
.
idClient
&&
(
tempTime
-
msg
.
time
<
1000
*
300
))
{
state
.
msgsMap
[
msg
.
idClient
]
=
msg
}
})
},
// 更新当前会话id,用于唯一判定是否在current session状态
updateCurrSessionId
(
state
,
obj
)
{
let
type
=
obj
.
type
||
''
if
(
type
===
'destroy'
)
{
state
.
currSessionId
=
null
}
else
if
(
type
===
'init'
)
{
if
(
obj
.
sessionId
&&
(
obj
.
sessionId
!==
state
.
currSessionId
))
{
state
.
currSessionId
=
obj
.
sessionId
}
}
},
// 更新当前会话列表的聊天记录,包括历史消息、单聊消息等,不包括聊天室消息
// replace: 替换idClient的消息
updateCurrSessionMsgs
(
state
,
obj
)
{
let
type
=
obj
.
type
||
''
if
(
type
===
'destroy'
)
{
// 清空会话消息
state
.
currSessionMsgs
=
[]
state
.
currSessionLastMsg
=
null
store
.
commit
(
'updateCurrSessionId'
,
{
type
:
'destroy'
})
}
else
if
(
type
===
'init'
)
{
// 初始化会话消息列表
if
(
state
.
currSessionId
)
{
let
sessionId
=
state
.
currSessionId
let
currSessionMsgs
=
[].
concat
(
state
.
msgs
[
sessionId
]
||
[])
// 做消息截断
let
limit
=
config
.
localMsglimit
let
msgLen
=
currSessionMsgs
.
length
if
(
msgLen
-
limit
>
0
)
{
state
.
currSessionLastMsg
=
currSessionMsgs
[
msgLen
-
limit
]
currSessionMsgs
=
currSessionMsgs
.
slice
(
msgLen
-
limit
,
msgLen
)
}
else
if
(
msgLen
>
0
)
{
state
.
currSessionLastMsg
=
currSessionMsgs
[
0
]
}
else
{
state
.
currSessionLastMsg
=
null
},
// clearMsgs(state, obj) {
// state.msgs = []
// },
// 更新当前会话列表的聊天记录,包括历史消息、单聊消息等,不包括聊天室消息
// replace: 替换idClient的消息
updateCurrSessionMsgs
(
state
,
obj
)
{
let
type
=
obj
.
type
||
''
if
(
type
===
'destroy'
)
{
// 清空会话消息
state
.
currSessionMsgs
=
[]
state
.
currSessionLastMsg
=
null
store
.
commit
(
'updateCurrSessionId'
,
{
type
:
'destroy'
})
}
else
if
(
type
===
'init'
)
{
// 初始化会话消息列表
if
(
state
.
currSessionId
)
{
let
sessionId
=
state
.
currSessionId
let
currSessionMsgs
=
[].
concat
(
state
.
msgs
[
sessionId
]
||
[])
// 做消息截断
let
limit
=
config
.
localMsglimit
let
msgLen
=
currSessionMsgs
.
length
if
(
msgLen
-
limit
>
0
)
{
state
.
currSessionLastMsg
=
currSessionMsgs
[
msgLen
-
limit
]
currSessionMsgs
=
currSessionMsgs
.
slice
(
msgLen
-
limit
,
msgLen
)
}
else
if
(
msgLen
>
0
)
{
state
.
currSessionLastMsg
=
currSessionMsgs
[
0
]
}
else
{
state
.
currSessionLastMsg
=
null
}
state
.
currSessionMsgs
=
[]
let
lastMsgTime
=
0
currSessionMsgs
.
forEach
(
msg
=>
{
if
((
msg
.
time
-
lastMsgTime
)
>
1000
*
60
*
5
)
{
lastMsgTime
=
msg
.
time
state
.
currSessionMsgs
.
push
({
type
:
'timeTag'
,
text
:
util
.
formatDate
(
msg
.
time
,
false
)
})
}
state
.
currSessionMsgs
.
push
(
msg
)
})
store
.
dispatch
(
'checkTeamMsgReceipt'
,
state
.
currSessionMsgs
)
}
}
else
if
(
type
===
'put'
)
{
// 追加一条消息
let
newMsg
=
obj
.
msg
let
lastMsgTime
=
0
let
lenCurrMsgs
=
state
.
currSessionMsgs
.
length
if
(
lenCurrMsgs
>
0
)
{
lastMsgTime
=
state
.
currSessionMsgs
[
lenCurrMsgs
-
1
].
time
}
if
(
newMsg
)
{
if
((
newMsg
.
time
-
lastMsgTime
)
>
1000
*
60
*
5
)
{
state
.
currSessionMsgs
.
push
({
type
:
'timeTag'
,
text
:
util
.
formatDate
(
newMsg
.
time
,
false
)
})
}
state
.
currSessionMsgs
.
push
(
newMsg
)
store
.
dispatch
(
'checkTeamMsgReceipt'
,
[
newMsg
])
}
}
else
if
(
type
===
'concat'
)
{
// 一般用于历史消息拼接
let
currSessionMsgs
=
[]
let
lastMsgTime
=
0
obj
.
msgs
.
forEach
(
msg
=>
{
if
((
msg
.
time
-
lastMsgTime
)
>
1000
*
60
*
5
)
{
lastMsgTime
=
msg
.
time
currSessionMsgs
.
push
({
type
:
'timeTag'
,
text
:
util
.
formatDate
(
msg
.
time
,
false
)
})
}
currSessionMsgs
.
push
(
msg
)
})
currSessionMsgs
.
reverse
()
currSessionMsgs
.
forEach
(
msg
=>
{
state
.
currSessionMsgs
.
unshift
(
msg
)
})
if
(
obj
.
msgs
[
0
])
{
state
.
currSessionLastMsg
=
obj
.
msgs
[
0
]
}
//console.log(state.currSessionMsgs)
store
.
dispatch
(
'checkTeamMsgReceipt'
,
currSessionMsgs
)
}
else
if
(
type
===
'replace'
)
{
let
msgLen
=
state
.
currSessionMsgs
.
length
let
lastMsgIndex
=
msgLen
-
1
if
(
msgLen
>
0
)
{
for
(
let
i
=
lastMsgIndex
;
i
>=
0
;
i
--
)
{
if
(
state
.
currSessionMsgs
[
i
].
idClient
===
obj
.
idClient
)
{
state
.
currSessionMsgs
.
splice
(
i
,
1
,
obj
.
msg
)
break
}
}
}
}
state
.
currSessionMsgs
=
[]
let
lastMsgTime
=
0
currSessionMsgs
.
forEach
(
msg
=>
{
if
((
msg
.
time
-
lastMsgTime
)
>
1000
*
60
*
5
)
{
lastMsgTime
=
msg
.
time
state
.
currSessionMsgs
.
push
({
type
:
'timeTag'
,
text
:
util
.
formatDate
(
msg
.
time
,
false
)
},
updateSysMsgs
(
state
,
sysMsgs
)
{
const
nim
=
state
.
nim
if
(
!
Array
.
isArray
(
sysMsgs
))
{
sysMsgs
=
[
sysMsgs
]
}
sysMsgs
=
sysMsgs
.
map
(
msg
=>
{
msg
.
showTime
=
util
.
formatDate
(
msg
.
time
,
false
)
return
msg
})
}
state
.
currSessionMsgs
.
push
(
msg
)
// state.sysMsgs = nim.mergeSysMsgs(state.sysMsgs, sysMsgs)
state
.
sysMsgs
=
[].
concat
(
nim
.
mergeSysMsgs
(
state
.
sysMsgs
,
sysMsgs
))
Vue
.
set
(
state
,
sysMsgs
,
state
.
sysMsgs
)
},
// 更新消息的状态,如管理员批准或拒绝入群后,会收到新消息,更新入群申请的状态
updateSysMsgState
(
state
,
sysMsg
)
{
let
exitMsg
=
state
.
sysMsgs
.
find
(
msg
=>
{
return
msg
.
idServer
===
sysMsg
.
idServer
})
store
.
dispatch
(
'checkTeamMsgReceipt'
,
state
.
currSessionMsgs
)
}
}
else
if
(
type
===
'put'
)
{
// 追加一条消息
let
newMsg
=
obj
.
msg
let
lastMsgTime
=
0
let
lenCurrMsgs
=
state
.
currSessionMsgs
.
length
if
(
lenCurrMsgs
>
0
)
{
lastMsgTime
=
state
.
currSessionMsgs
[
lenCurrMsgs
-
1
].
time
}
if
(
newMsg
)
{
if
((
newMsg
.
time
-
lastMsgTime
)
>
1000
*
60
*
5
)
{
state
.
currSessionMsgs
.
push
({
type
:
'timeTag'
,
text
:
util
.
formatDate
(
newMsg
.
time
,
false
)
})
}
state
.
currSessionMsgs
.
push
(
newMsg
)
store
.
dispatch
(
'checkTeamMsgReceipt'
,
[
newMsg
])
}
}
else
if
(
type
===
'concat'
)
{
// 一般用于历史消息拼接
let
currSessionMsgs
=
[]
let
lastMsgTime
=
0
obj
.
msgs
.
forEach
(
msg
=>
{
if
((
msg
.
time
-
lastMsgTime
)
>
1000
*
60
*
5
)
{
lastMsgTime
=
msg
.
time
currSessionMsgs
.
push
({
type
:
'timeTag'
,
text
:
util
.
formatDate
(
msg
.
time
,
false
)
})
if
(
exitMsg
)
{
exitMsg
.
state
=
sysMsg
.
state
}
currSessionMsgs
.
push
(
msg
)
})
currSessionMsgs
.
reverse
()
currSessionMsgs
.
forEach
(
msg
=>
{
state
.
currSessionMsgs
.
unshift
(
msg
)
})
if
(
obj
.
msgs
[
0
])
{
state
.
currSessionLastMsg
=
obj
.
msgs
[
0
]
}
//console.log(state.currSessionMsgs)
store
.
dispatch
(
'checkTeamMsgReceipt'
,
currSessionMsgs
)
}
else
if
(
type
===
'replace'
)
{
let
msgLen
=
state
.
currSessionMsgs
.
length
let
lastMsgIndex
=
msgLen
-
1
if
(
msgLen
>
0
)
{
for
(
let
i
=
lastMsgIndex
;
i
>=
0
;
i
--
)
{
if
(
state
.
currSessionMsgs
[
i
].
idClient
===
obj
.
idClient
)
{
state
.
currSessionMsgs
.
splice
(
i
,
1
,
obj
.
msg
)
break
}
},
updateSysMsgUnread
(
state
,
obj
)
{
state
.
sysMsgUnread
=
Object
.
assign
({},
obj
)
},
updateCustomSysMsgs
(
state
,
sysMsgs
)
{
const
nim
=
state
.
nim
if
(
!
Array
.
isArray
(
sysMsgs
))
{
sysMsgs
=
[
sysMsgs
]
}
}
}
},
updateSysMsgs
(
state
,
sysMsgs
)
{
const
nim
=
state
.
nim
if
(
!
Array
.
isArray
(
sysMsgs
))
{
sysMsgs
=
[
sysMsgs
]
}
sysMsgs
=
sysMsgs
.
map
(
msg
=>
{
msg
.
showTime
=
util
.
formatDate
(
msg
.
time
,
false
)
return
msg
})
// state.sysMsgs = nim.mergeSysMsgs(state.sysMsgs, sysMsgs)
state
.
sysMsgs
=
[].
concat
(
nim
.
mergeSysMsgs
(
state
.
sysMsgs
,
sysMsgs
))
Vue
.
set
(
state
,
sysMsgs
,
state
.
sysMsgs
)
},
// 更新消息的状态,如管理员批准或拒绝入群后,会收到新消息,更新入群申请的状态
updateSysMsgState
(
state
,
sysMsg
)
{
let
exitMsg
=
state
.
sysMsgs
.
find
(
msg
=>
{
return
msg
.
idServer
===
sysMsg
.
idServer
})
if
(
exitMsg
)
{
exitMsg
.
state
=
sysMsg
.
state
}
},
updateSysMsgUnread
(
state
,
obj
)
{
state
.
sysMsgUnread
=
Object
.
assign
({},
obj
)
},
updateCustomSysMsgs
(
state
,
sysMsgs
)
{
const
nim
=
state
.
nim
if
(
!
Array
.
isArray
(
sysMsgs
))
{
sysMsgs
=
[
sysMsgs
]
}
sysMsgs
=
sysMsgs
.
map
(
msg
=>
{
msg
.
showTime
=
util
.
formatDate
(
msg
.
time
,
false
)
return
msg
})
// state.customSysMsgs = nim.mergeSysMsgs(state.customSysMsgs, sysMsgs)
state
.
customSysMsgs
=
state
.
customSysMsgs
.
concat
(
sysMsgs
)
Vue
.
set
(
state
,
sysMsgs
,
state
.
customSysMsgs
)
store
.
commit
(
'updateCustomSysMsgUnread'
,
{
type
:
'add'
,
unread
:
sysMsgs
.
length
})
},
updateCustomSysMsgUnread
(
state
,
obj
)
{
let
{
type
,
unread
}
=
obj
switch
(
type
)
{
case
'reset'
:
state
.
customSysMsgUnread
=
unread
||
0
break
case
'add'
:
state
.
customSysMsgUnread
+=
unread
break
}
},
resetSysMsgs
(
state
,
obj
)
{
let
type
=
obj
.
type
switch
(
type
)
{
case
0
:
state
.
sysMsgs
=
[]
break
case
1
:
state
.
customSysMsgs
=
[]
sysMsgs
=
sysMsgs
.
map
(
msg
=>
{
msg
.
showTime
=
util
.
formatDate
(
msg
.
time
,
false
)
return
msg
})
// state.customSysMsgs = nim.mergeSysMsgs(state.customSysMsgs, sysMsgs)
state
.
customSysMsgs
=
state
.
customSysMsgs
.
concat
(
sysMsgs
)
Vue
.
set
(
state
,
sysMsgs
,
state
.
customSysMsgs
)
store
.
commit
(
'updateCustomSysMsgUnread'
,
{
type
:
'reset'
type
:
'add'
,
unread
:
sysMsgs
.
length
})
break
}
},
deleteSysMsgs
(
state
,
obj
)
{
let
type
=
obj
.
type
let
idServer
=
obj
.
idServer
let
arr
=
type
===
0
?
state
.
sysMsgs
:
state
.
customSysMsgs
arr
=
arr
.
filter
(
msg
=>
{
return
msg
.
idServer
!==
idServer
})
Vue
.
set
(
state
,
'sysMsgs'
,
arr
)
},
setNoMoreHistoryMsgs
(
state
)
{
state
.
noMoreHistoryMsgs
=
true
},
resetNoMoreHistoryMsgs
(
state
)
{
state
.
noMoreHistoryMsgs
=
false
},
// 继续与机器人会话交互
continueRobotMsg
(
state
,
robotAccid
)
{
state
.
continueRobotAccid
=
robotAccid
},
},
updateCustomSysMsgUnread
(
state
,
obj
)
{
let
{
type
,
unread
}
=
obj
switch
(
type
)
{
case
'reset'
:
state
.
customSysMsgUnread
=
unread
||
0
break
case
'add'
:
state
.
customSysMsgUnread
+=
unread
break
}
},
resetSysMsgs
(
state
,
obj
)
{
let
type
=
obj
.
type
switch
(
type
)
{
case
0
:
state
.
sysMsgs
=
[]
break
case
1
:
state
.
customSysMsgs
=
[]
store
.
commit
(
'updateCustomSysMsgUnread'
,
{
type
:
'reset'
})
break
}
},
deleteSysMsgs
(
state
,
obj
)
{
let
type
=
obj
.
type
let
idServer
=
obj
.
idServer
let
arr
=
type
===
0
?
state
.
sysMsgs
:
state
.
customSysMsgs
arr
=
arr
.
filter
(
msg
=>
{
return
msg
.
idServer
!==
idServer
})
Vue
.
set
(
state
,
'sysMsgs'
,
arr
)
},
setNoMoreHistoryMsgs
(
state
)
{
state
.
noMoreHistoryMsgs
=
true
},
resetNoMoreHistoryMsgs
(
state
)
{
state
.
noMoreHistoryMsgs
=
false
},
// 继续与机器人会话交互
continueRobotMsg
(
state
,
robotAccid
)
{
state
.
continueRobotAccid
=
robotAccid
},
initChatroomInfos
(
state
,
obj
)
{
state
.
chatroomInfos
=
obj
},
setCurrChatroom
(
state
,
chatroomId
)
{
state
.
currChatroomId
=
chatroomId
state
.
currChatroom
=
state
.
chatroomInsts
[
chatroomId
]
state
.
currChatroomMsgs
=
[]
state
.
currChatroomInfo
=
{}
state
.
currChatroomMembers
=
[]
},
resetCurrChatroom
(
state
)
{
state
.
currChatroomId
=
null
state
.
currChatroom
=
null
state
.
currChatroomMsgs
=
[]
state
.
currChatroomInfo
=
{}
state
.
currChatroomMembers
=
[]
},
// 聊天室相关逻辑
updateChatroomInfo
(
state
,
obj
)
{
state
.
currChatroomInfo
=
Object
.
assign
(
state
.
currChatroomInfo
,
obj
)
},
updateCurrChatroomMsgs
(
state
,
obj
)
{
let
{
type
,
msgs
}
=
Object
.
assign
({},
obj
)
if
(
type
===
'put'
)
{
msgs
.
forEach
(
msg
=>
{
let
chatroomId
=
msg
.
chatroomId
if
(
chatroomId
===
state
.
currChatroomId
)
{
msgs
.
forEach
(
msg
=>
{
state
.
currChatroomMsgs
.
push
(
msg
)
})
initChatroomInfos
(
state
,
obj
)
{
state
.
chatroomInfos
=
obj
},
setCurrChatroom
(
state
,
chatroomId
)
{
state
.
currChatroomId
=
chatroomId
state
.
currChatroom
=
state
.
chatroomInsts
[
chatroomId
]
state
.
currChatroomMsgs
=
[]
state
.
currChatroomInfo
=
{}
state
.
currChatroomMembers
=
[]
},
resetCurrChatroom
(
state
)
{
state
.
currChatroomId
=
null
state
.
currChatroom
=
null
state
.
currChatroomMsgs
=
[]
state
.
currChatroomInfo
=
{}
state
.
currChatroomMembers
=
[]
},
// 聊天室相关逻辑
updateChatroomInfo
(
state
,
obj
)
{
state
.
currChatroomInfo
=
Object
.
assign
(
state
.
currChatroomInfo
,
obj
)
},
updateCurrChatroomMsgs
(
state
,
obj
)
{
let
{
type
,
msgs
}
=
Object
.
assign
({},
obj
)
if
(
type
===
'put'
)
{
msgs
.
forEach
(
msg
=>
{
let
chatroomId
=
msg
.
chatroomId
if
(
chatroomId
===
state
.
currChatroomId
)
{
msgs
.
forEach
(
msg
=>
{
state
.
currChatroomMsgs
.
push
(
msg
)
})
}
})
}
else
if
(
type
===
'concat'
)
{
// 一般用于历史消息拼接
let
currSessionMsgs
=
obj
.
msgs
currSessionMsgs
.
reverse
()
currSessionMsgs
.
forEach
(
msg
=>
{
state
.
currSessionMsgs
.
unshift
(
msg
)
})
if
(
obj
.
msgs
[
0
])
{
state
.
currSessionLastMsg
=
obj
.
msgs
[
0
]
}
}
},
getChatroomInfo
(
state
,
obj
)
{
state
.
currChatroomInfo
=
obj
},
updateChatroomMembers
(
state
,
obj
)
{
let
{
type
,
members
}
=
obj
if
(
type
===
'destroy'
)
{
state
.
currChatroomMembers
=
[]
}
else
if
(
type
===
'put'
)
{
members
.
forEach
(
member
=>
{
if
(
member
.
online
)
{
state
.
currChatroomMembers
.
push
(
member
)
}
})
}
})
}
else
if
(
type
===
'concat'
)
{
// 一般用于历史消息拼接
let
currSessionMsgs
=
obj
.
msgs
currSessionMsgs
.
reverse
()
currSessionMsgs
.
forEach
(
msg
=>
{
state
.
currSessionMsgs
.
unshift
(
msg
)
})
if
(
obj
.
msgs
[
0
])
{
state
.
currSessionLastMsg
=
obj
.
msgs
[
0
]
}
}
},
getChatroomInfo
(
state
,
obj
)
{
state
.
currChatroomInfo
=
obj
},
updateChatroomMembers
(
state
,
obj
)
{
let
{
type
,
members
}
=
obj
if
(
type
===
'destroy'
)
{
state
.
currChatroomMembers
=
[]
}
else
if
(
type
===
'put'
)
{
members
.
forEach
(
member
=>
{
if
(
member
.
online
)
{
state
.
currChatroomMembers
.
push
(
member
)
},
updateTeamList
(
state
,
teams
)
{
const
nim
=
state
.
nim
store
.
state
.
teamlist
=
nim
.
mergeTeams
(
store
.
state
.
teamlist
,
teams
)
store
.
state
.
teamlist
=
nim
.
cutTeams
(
store
.
state
.
teamlist
,
teams
.
invalid
)
},
updateTeamUserMute
(
state
,
map
)
{
store
.
state
.
teamlist
.
forEach
(
x
=>
{
if
(
map
[
x
.
teamId
]
!=
undefined
&&
map
[
x
.
teamId
]
!=
null
)
{
x
.
usermute
=
map
[
x
.
teamId
]
==
'1'
}
})
},
updateTeamMembers
(
state
,
obj
)
{
const
nim
=
state
.
nim
var
teamId
=
obj
.
teamId
var
members
=
obj
.
members
state
.
teamMembers
=
state
.
teamMembers
||
{}
state
.
teamMembers
[
teamId
]
=
nim
.
mergeTeamMembers
(
state
.
teamMembers
[
teamId
],
members
)
state
.
teamMembers
[
teamId
]
=
nim
.
cutTeamMembers
(
state
.
teamMembers
[
teamId
],
members
.
invalid
)
state
.
teamMembers
[
teamId
].
sort
((
a
,
b
)
=>
{
// 将群主和管理员排在队列前方
if
(
a
.
type
===
'owner'
||
b
.
type
===
'owner'
)
{
return
a
.
type
===
'owner'
?
-
1
:
1
}
if
(
a
.
type
===
'manager'
||
b
.
type
===
'manager'
)
{
return
a
.
type
===
'manager'
?
-
1
:
b
.
type
===
'manager'
?
1
:
0
}
return
-
1
})
state
.
teamMembers
=
Object
.
assign
({},
state
.
teamMembers
)
},
removeTeamMembersByAccounts
(
state
,
obj
)
{
var
teamId
=
obj
.
teamId
var
invalidAccounts
=
obj
.
accounts
if
(
state
.
teamMembers
[
teamId
]
===
undefined
)
return
state
.
teamMembers
[
teamId
]
=
state
.
teamMembers
[
teamId
].
filter
((
member
,
index
)
=>
{
return
invalidAccounts
.
indexOf
(
member
.
account
)
===
-
1
})
state
.
teamMembers
=
Object
.
assign
({},
state
.
teamMembers
)
},
updateTeamInfo
(
state
,
team
)
{
var
index
=
state
.
teamlist
.
findIndex
(
item
=>
{
return
item
.
teamId
===
team
.
teamId
})
if
(
index
===
-
1
)
return
for
(
const
key
in
team
)
{
if
(
key
!==
'teamId'
&&
team
.
hasOwnProperty
(
key
)
&&
team
[
key
])
{
state
.
teamlist
[
index
][
key
]
=
team
[
key
]
}
}
},
updateTeamSettingConfig
(
state
,
obj
)
{
state
.
teamSettingConfig
=
obj
},
updateSentReceipedMap
(
state
,
obj
)
{
if
(
!
obj
||
obj
.
length
<
1
)
{
return
}
var
teamId
=
obj
[
0
].
teamId
if
(
!
state
.
sentReceipedMap
[
teamId
])
{
state
.
sentReceipedMap
[
teamId
]
=
[]
}
state
.
sentReceipedMap
[
teamId
].
push
(...
obj
.
map
(
msg
=>
msg
.
idServer
))
},
updateReceiptQueryList
(
state
,
obj
)
{
if
(
state
.
currReceiptQueryTeamId
!==
obj
.
teamId
)
{
state
.
receiptQueryList
=
[]
state
.
teamMsgReads
=
[]
state
.
currReceiptQueryTeamId
=
obj
.
teamId
}
var
needQuery
=
obj
.
msgs
.
filter
(
msg
=>
msg
.
needMsgReceipt
&&
msg
.
from
===
state
.
myInfo
.
account
&&
!
state
.
receiptQueryList
.
find
(
item
=>
item
.
idServer
===
msg
.
idServer
)
)
.
map
(
msg
=>
{
return
{
teamId
:
obj
.
teamId
,
idServer
:
msg
.
idServer
}
})
if
(
needQuery
.
length
>
0
)
{
state
.
receiptQueryList
.
push
(...
needQuery
)
}
if
(
needQuery
.
length
>
0
)
{
store
.
dispatch
(
'getTeamMsgReads'
,
needQuery
)
}
},
updateTeamMsgReads
(
state
,
obj
)
{
state
.
teamMsgReads
.
push
(...
obj
.
teamMsgReceipts
)
},
updateSingleTeamMsgReads
(
state
,
obj
)
{
state
.
teamMsgReads
.
forEach
(
item
=>
{
if
(
item
.
idServer
===
obj
.
idServer
)
{
item
.
unread
=
obj
.
unread
item
.
read
=
obj
.
read
}
})
// 更新已读未读账号列表
var
unreadAccounts
=
state
.
teamMsgReadsDetail
.
unreadAccounts
var
findIndex
=
unreadAccounts
.
findIndex
(
account
=>
account
===
obj
.
account
)
if
(
findIndex
>=
0
)
{
unreadAccounts
.
splice
(
findIndex
,
1
)
state
.
teamMsgReadsDetail
.
readAccounts
.
push
(
obj
.
account
)
}
})
}
},
updateTeamList
(
state
,
teams
)
{
const
nim
=
state
.
nim
store
.
state
.
teamlist
=
nim
.
mergeTeams
(
store
.
state
.
teamlist
,
teams
)
store
.
state
.
teamlist
=
nim
.
cutTeams
(
store
.
state
.
teamlist
,
teams
.
invalid
)
},
updateTeamUserMute
(
state
,
map
)
{
store
.
state
.
teamlist
.
forEach
(
x
=>
{
if
(
map
[
x
.
teamId
]
!=
undefined
&&
map
[
x
.
teamId
]
!=
null
){
x
.
usermute
=
map
[
x
.
teamId
]
==
'1'
}
})
},
updateTeamMembers
(
state
,
obj
)
{
const
nim
=
state
.
nim
var
teamId
=
obj
.
teamId
var
members
=
obj
.
members
state
.
teamMembers
=
state
.
teamMembers
||
{}
state
.
teamMembers
[
teamId
]
=
nim
.
mergeTeamMembers
(
state
.
teamMembers
[
teamId
],
members
)
state
.
teamMembers
[
teamId
]
=
nim
.
cutTeamMembers
(
state
.
teamMembers
[
teamId
],
members
.
invalid
)
state
.
teamMembers
[
teamId
].
sort
((
a
,
b
)
=>
{
// 将群主和管理员排在队列前方
if
(
a
.
type
===
'owner'
||
b
.
type
===
'owner'
)
{
return
a
.
type
===
'owner'
?
-
1
:
1
}
if
(
a
.
type
===
'manager'
||
b
.
type
===
'manager'
)
{
return
a
.
type
===
'manager'
?
-
1
:
b
.
type
===
'manager'
?
1
:
0
}
return
-
1
})
state
.
teamMembers
=
Object
.
assign
({},
state
.
teamMembers
)
},
removeTeamMembersByAccounts
(
state
,
obj
)
{
var
teamId
=
obj
.
teamId
var
invalidAccounts
=
obj
.
accounts
if
(
state
.
teamMembers
[
teamId
]
===
undefined
)
return
state
.
teamMembers
[
teamId
]
=
state
.
teamMembers
[
teamId
].
filter
((
member
,
index
)
=>
{
return
invalidAccounts
.
indexOf
(
member
.
account
)
===-
1
})
state
.
teamMembers
=
Object
.
assign
({},
state
.
teamMembers
)
},
updateTeamInfo
(
state
,
team
)
{
var
index
=
state
.
teamlist
.
findIndex
(
item
=>
{
return
item
.
teamId
===
team
.
teamId
})
if
(
index
===
-
1
)
return
for
(
const
key
in
team
)
{
if
(
key
!==
'teamId'
&&
team
.
hasOwnProperty
(
key
)
&&
team
[
key
])
{
state
.
teamlist
[
index
][
key
]
=
team
[
key
]
}
}
},
updateTeamSettingConfig
(
state
,
obj
)
{
state
.
teamSettingConfig
=
obj
},
updateSentReceipedMap
(
state
,
obj
)
{
if
(
!
obj
||
obj
.
length
<
1
)
{
return
}
var
teamId
=
obj
[
0
].
teamId
if
(
!
state
.
sentReceipedMap
[
teamId
])
{
state
.
sentReceipedMap
[
teamId
]
=
[]
}
state
.
sentReceipedMap
[
teamId
].
push
(...
obj
.
map
(
msg
=>
msg
.
idServer
))
},
updateReceiptQueryList
(
state
,
obj
)
{
if
(
state
.
currReceiptQueryTeamId
!==
obj
.
teamId
)
{
state
.
receiptQueryList
=
[]
state
.
teamMsgReads
=
[]
state
.
currReceiptQueryTeamId
=
obj
.
teamId
}
var
needQuery
=
obj
.
msgs
.
filter
(
msg
=>
msg
.
needMsgReceipt
&&
msg
.
from
===
state
.
myInfo
.
account
&&
!
state
.
receiptQueryList
.
find
(
item
=>
item
.
idServer
===
msg
.
idServer
)
)
.
map
(
msg
=>
{
return
{
teamId
:
obj
.
teamId
,
idServer
:
msg
.
idServer
}
})
if
(
needQuery
.
length
>
0
)
{
state
.
receiptQueryList
.
push
(...
needQuery
)
}
if
(
needQuery
.
length
>
0
)
{
store
.
dispatch
(
'getTeamMsgReads'
,
needQuery
)
}
},
updateTeamMsgReads
(
state
,
obj
)
{
state
.
teamMsgReads
.
push
(...
obj
.
teamMsgReceipts
)
},
updateSingleTeamMsgReads
(
state
,
obj
)
{
state
.
teamMsgReads
.
forEach
(
item
=>
{
if
(
item
.
idServer
===
obj
.
idServer
)
{
item
.
unread
=
obj
.
unread
item
.
read
=
obj
.
read
}
})
// 更新已读未读账号列表
var
unreadAccounts
=
state
.
teamMsgReadsDetail
.
unreadAccounts
var
findIndex
=
unreadAccounts
.
findIndex
(
account
=>
account
===
obj
.
account
)
if
(
findIndex
>=
0
)
{
unreadAccounts
.
splice
(
findIndex
,
1
)
state
.
teamMsgReadsDetail
.
readAccounts
.
push
(
obj
.
account
)
}
},
initMsgReceiptDetail
(
state
,
obj
)
{
state
.
teamMsgReadsDetail
.
readAccounts
=
obj
.
readAccounts
state
.
teamMsgReadsDetail
.
unreadAccounts
=
obj
.
unreadAccounts
},
}
},
initMsgReceiptDetail
(
state
,
obj
)
{
state
.
teamMsgReadsDetail
.
readAccounts
=
obj
.
readAccounts
state
.
teamMsgReadsDetail
.
unreadAccounts
=
obj
.
unreadAccounts
},
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment