Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
foreign
/
customer-service
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
6711c5df
authored
Jan 13, 2022
by
董文博
Browse files
Options
_('Browse Files')
Download
Plain Diff
Merge branch 'master' of
http://gitlab.corp.qinqinxiaobao.com:9880/uniplat/customer-service
parents
d6f6f97f
64c2972a
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
136 additions
and
135 deletions
components/chat-room.vue
components/image-preview.vue
database/index.ts
model/index.ts
service/monitor.ts
store/index.ts
store/model.ts
xim/index.ts
xim/xim.ts
components/chat-room.vue
View file @
6711c5df
...
...
@@ -56,15 +56,9 @@
@
chatStore
.
State
(
ChatStore
.
STATE_CHAT_CURRENT_CHAT_ID
)
private
readonly
chatId
!
:
ChatStore
.
STATE_CHAT_CURRENT_CHAT_ID
;
@
chatStore
.
Mutation
(
ChatStore
.
MUTATION_CLEAR_CURRENT_CHAT_MEMBERS
)
private
readonly
clearChatMembers
!
:
ChatStore
.
MUTATION_CLEAR_CURRENT_CHAT_MEMBERS
;
@
chatStore
.
State
(
ChatStore
.
STATE_CURRENT_CHAT_INPUTING
)
private
readonly
currentInputPeople
!
:
ChatStore
.
STATE_CURRENT_CHAT_INPUTING
;
@
chatStore
.
State
(
ChatStore
.
STATE_CHAT_CURRENT_CHAT_UNIPLAT_ID
)
private
readonly
currentChatUniplatId
!
:
ChatStore
.
STATE_CHAT_CURRENT_CHAT_UNIPLAT_ID
;
@
chatStore
.
State
(
ChatStore
.
STATE_CHAT_CURRENT_IS_CHAT_MEMBER
)
private
readonly
isChatMember
!
:
ChatStore
.
STATE_CHAT_CURRENT_IS_CHAT_MEMBER
;
...
...
@@ -82,12 +76,6 @@
@
Provide
()
showReadSummary
=
true
;
@
Watch
(
"currentChatUniplatId"
)
private
whenCurrentChatIdChanged
(
newValue
:
string
,
oldValue
:
string
)
{
if
(
Number
(
oldValue
)
===
Number
(
newValue
))
return
;
this
.
clearChatMembers
();
}
private
get
getCurrentInputingPeople
()
{
return
this
.
currentInputPeople
.
map
(()
=>
""
/* this.userInfo[k].name */
)
...
...
@@ -174,6 +162,7 @@
),
300
);
this
.
$emit
(
"send"
);
}
}
</
script
>
...
...
@@ -184,7 +173,7 @@
width
:
46px
;
height
:
20px
;
line-height
:
20px
;
background
:
#22bd7a
;
background
-color
:
#22bd7a
;
font-size
:
13px
;
border-radius
:
2px
;
color
:
#ffffff
;
...
...
components/image-preview.vue
View file @
6711c5df
...
...
@@ -8,7 +8,7 @@
width=
"90%"
>
<div
class=
"d-flex flex-column"
>
<div
class=
"d-flex justify-content-center"
>
<div
class=
"d-flex justify-content-center
align-items-start
"
>
<img
v-if=
"file"
:src=
"file.url"
/>
<i
class=
"el-icon-close"
@
click=
"close"
></i>
</div>
...
...
database/index.ts
View file @
6711c5df
...
...
@@ -63,17 +63,17 @@ class ChatCacheDatabaseController {
}
resolve
();
};
r
.
onsuccess
=
(
e
)
=>
{
r
.
onsuccess
=
e
=>
{
this
.
db
=
(
e
.
target
as
any
).
result
;
console
.
log
(
`index database init comepleted`
);
setupDb
();
};
r
.
onupgradeneeded
=
(
e
)
=>
{
r
.
onupgradeneeded
=
e
=>
{
this
.
db
=
(
e
.
target
as
any
).
result
;
console
.
log
(
`upgrade database comepleted`
);
setupDb
();
};
r
.
onerror
=
(
e
)
=>
{
r
.
onerror
=
e
=>
{
console
.
log
(
`index database init failed,
${
e
}
`
);
this
.
setupError
=
true
;
reject
();
...
...
@@ -88,7 +88,7 @@ class ChatCacheDatabaseController {
const
k
=
this
.
buildChatMessageKey
(
chat
);
const
t
=
this
.
messageDatabases
.
get
(
k
);
if
(
!
t
)
{
return
new
Promise
<
void
>
(
(
resolve
)
=>
{
return
new
Promise
<
void
>
(
resolve
=>
{
if
(
this
.
uid
&&
indexedDB
)
{
const
r
=
indexedDB
.
open
(
k
,
this
.
msgVersion
);
// eslint-disable-next-line @typescript-eslint/no-this-alias
...
...
@@ -102,17 +102,17 @@ class ChatCacheDatabaseController {
}
setTimeout
(()
=>
resolve
(),
200
);
};
r
.
onsuccess
=
function
(
e
)
{
r
.
onsuccess
=
function
(
e
)
{
const
db
=
(
e
.
target
as
any
).
result
;
that
.
messageDatabases
.
set
(
k
,
db
);
setupDb
();
};
r
.
onupgradeneeded
=
function
(
e
)
{
r
.
onupgradeneeded
=
function
(
e
)
{
const
db
=
(
e
.
target
as
any
).
result
;
that
.
messageDatabases
.
set
(
k
,
db
);
setupDb
();
};
r
.
onerror
=
function
(
e
)
{
r
.
onerror
=
function
(
e
)
{
console
.
log
(
`chat message index database init failed,
${
e
}
`
);
...
...
@@ -163,11 +163,11 @@ class ChatCacheDatabaseController {
}
public
updateChat
(
p
:
ChatStore
.
ChatUpdateParameter
)
{
return
new
Promise
<
void
>
(
(
resolve
)
=>
{
return
new
Promise
<
void
>
(
resolve
=>
{
if
(
this
.
db
)
{
const
store
=
this
.
buildStore
(
this
.
chatListKey
);
const
t
=
store
.
get
(
p
.
chat
);
t
.
onsuccess
=
(
r
)
=>
{
t
.
onsuccess
=
r
=>
{
const
chat
=
(
r
.
target
as
any
).
result
as
Chat
;
if
(
chat
)
{
chat
.
eid
=
p
.
eid
as
string
;
...
...
@@ -191,11 +191,11 @@ class ChatCacheDatabaseController {
}
public
updateChat4UnreadCount
(
chat
:
number
,
unread
:
number
)
{
return
new
Promise
<
void
>
(
(
resolve
)
=>
{
return
new
Promise
<
void
>
(
resolve
=>
{
if
(
this
.
db
)
{
const
store
=
this
.
buildStore
(
this
.
chatListKey
);
const
t
=
store
.
get
(
chat
);
t
.
onsuccess
=
(
r
)
=>
{
t
.
onsuccess
=
r
=>
{
const
chat
=
(
r
.
target
as
any
).
result
as
Chat
;
if
(
chat
)
{
chat
.
unread_msg_count
=
unread
;
...
...
@@ -214,11 +214,11 @@ class ChatCacheDatabaseController {
}
public
setRead
(
chat
:
number
)
{
return
new
Promise
<
void
>
(
(
resolve
)
=>
{
return
new
Promise
<
void
>
(
resolve
=>
{
if
(
this
.
db
)
{
const
store
=
this
.
buildStore
(
this
.
chatListKey
);
const
t
=
store
.
get
(
chat
);
t
.
onsuccess
=
(
r
)
=>
{
t
.
onsuccess
=
r
=>
{
const
chat
=
(
r
.
target
as
any
).
result
as
Chat
;
if
(
chat
)
{
chat
.
unread_msg_count
=
0
;
...
...
@@ -253,7 +253,7 @@ class ChatCacheDatabaseController {
allRead
?:
boolean
;
}
)
{
return
new
Promise
<
void
>
(
(
resolve
)
=>
{
return
new
Promise
<
void
>
(
resolve
=>
{
if
(
this
.
db
)
{
const
store
=
this
.
buildChatMessageStore
(
chat
);
if
(
option
.
end
&&
option
.
end
>
option
.
start
)
{
...
...
@@ -267,7 +267,7 @@ class ChatCacheDatabaseController {
};
for
(
let
i
=
option
.
start
;
i
<=
option
.
end
;
i
++
)
{
const
r
=
store
.
get
(
i
);
r
.
onsuccess
=
(
m
)
=>
{
r
.
onsuccess
=
m
=>
{
const
p
=
(
m
.
target
as
any
).
result
as
Message
;
if
(
p
)
{
if
(
option
.
allRead
)
{
...
...
@@ -284,7 +284,7 @@ class ChatCacheDatabaseController {
}
}
else
{
const
r
=
store
.
get
(
option
.
start
);
r
.
onsuccess
=
(
m
)
=>
{
r
.
onsuccess
=
m
=>
{
const
p
=
(
m
.
target
as
any
).
result
as
Message
;
if
(
p
)
{
if
(
option
.
allRead
)
{
...
...
@@ -306,7 +306,7 @@ class ChatCacheDatabaseController {
}
public
removeChatFromList
(
chat
:
number
)
{
return
new
Promise
<
void
>
(
(
resolve
)
=>
{
return
new
Promise
<
void
>
(
resolve
=>
{
if
(
this
.
db
)
{
const
store
=
this
.
buildStore
(
this
.
chatListKey
);
const
t
=
store
.
delete
(
chat
);
...
...
@@ -319,27 +319,27 @@ class ChatCacheDatabaseController {
}
public
getChatList
()
{
return
new
Promise
<
Chat
[]
>
(
(
resolve
)
=>
{
return
new
Promise
<
Chat
[]
>
(
resolve
=>
{
if
(
!
this
.
db
)
{
return
resolve
([]);
}
const
store
=
this
.
buildStore
(
this
.
chatListKey
);
const
r
=
store
.
getAll
();
r
.
onsuccess
=
(
o
)
=>
resolve
((
o
.
target
as
any
).
result
);
r
.
onsuccess
=
o
=>
resolve
((
o
.
target
as
any
).
result
);
r
.
onerror
=
()
=>
resolve
([]);
});
}
public
getChatByCode
(
code
:
string
)
{
return
new
Promise
<
Chat
|
null
>
(
(
resolve
)
=>
{
return
new
Promise
<
Chat
|
null
>
(
resolve
=>
{
if
(
!
this
.
db
)
{
return
resolve
(
null
);
}
const
store
=
this
.
buildStore
(
this
.
chatListKey
);
const
r
=
store
.
getAll
();
r
.
onsuccess
=
(
o
)
=>
{
r
.
onsuccess
=
o
=>
{
const
items
=
(
o
.
target
as
any
).
result
as
Chat
[];
resolve
(
items
.
find
(
(
i
)
=>
i
.
biz_type_code
===
code
)
as
Chat
);
resolve
(
items
.
find
(
i
=>
i
.
biz_type_code
===
code
)
as
Chat
);
};
r
.
onerror
=
()
=>
resolve
(
null
);
});
...
...
@@ -364,21 +364,21 @@ class ChatCacheDatabaseController {
}
public
getChatMessages
(
chat
:
number
)
{
return
new
Promise
<
Message
[]
>
(
(
resolve
)
=>
{
return
new
Promise
<
Message
[]
>
(
resolve
=>
{
if
(
!
this
.
db
)
{
return
resolve
([]);
}
this
.
setupChatMessageDatabase
(
chat
).
finally
(()
=>
{
const
store
=
this
.
buildChatMessageStore
(
chat
);
const
r
=
store
.
getAll
();
r
.
onsuccess
=
(
o
)
=>
resolve
((
o
.
target
as
any
).
result
);
r
.
onsuccess
=
o
=>
resolve
((
o
.
target
as
any
).
result
);
r
.
onerror
=
()
=>
resolve
([]);
});
});
}
public
appendMessages
(
chat
:
number
,
items
:
Message
[])
{
return
new
Promise
<
void
>
(
(
resolve
)
=>
{
return
new
Promise
<
void
>
(
resolve
=>
{
if
(
!
this
.
db
||
!
items
||
!
items
.
length
)
{
return
resolve
();
}
...
...
@@ -413,7 +413,7 @@ class ChatCacheDatabaseController {
public
mergeChatList
(
source1
:
Chat
[],
source2
:
Chat
[])
{
for
(
const
item
of
source2
)
{
const
t
=
source1
.
find
(
(
i
)
=>
i
.
id
===
item
.
id
);
const
t
=
source1
.
find
(
i
=>
i
.
id
===
item
.
id
);
if
(
t
)
{
item
.
unread_msg_count
=
Math
.
max
(
item
.
unread_msg_count
,
...
...
@@ -445,14 +445,14 @@ class ChatCacheDatabaseController {
msg
:
number
,
status
:
MessageHandled
)
{
return
new
Promise
<
void
>
(
(
resolve
)
=>
{
return
new
Promise
<
void
>
(
resolve
=>
{
if
(
!
this
.
db
)
{
return
resolve
();
}
this
.
setupChatMessageDatabase
(
chat
).
finally
(()
=>
{
const
store
=
this
.
buildChatMessageStore
(
chat
);
const
r
=
store
.
get
(
msg
);
r
.
onsuccess
=
(
o
)
=>
{
r
.
onsuccess
=
o
=>
{
const
p
=
(
o
.
target
as
any
).
result
as
Message
;
p
.
handled
=
status
;
const
u
=
store
.
put
(
p
);
...
...
model/index.ts
View file @
6711c5df
...
...
@@ -82,6 +82,11 @@ export interface ChatOption {
message
?:
ChatMessageController
;
avatar
?:
string
;
/**
* 禁用IndexDb
*/
disabledIndexDb
?:
boolean
;
}
export
interface
ChatMessageController
{
...
...
service/monitor.ts
View file @
6711c5df
import
Axios
,
{
AxiosResponse
}
from
"axios"
;
import
Axios
,
{
AxiosResponse
,
AxiosAdapter
}
from
"axios"
;
import
{
UniplatSdk
}
from
"uniplat-sdk"
;
import
{
ImEnvironment
}
from
"../model"
;
...
...
@@ -26,6 +26,7 @@ export interface SdkMonitorOption {
userAgent
?:
boolean
;
envir
:
ImEnvironment
;
product
:
Product
;
call
?:
(
r
:
any
)
=>
void
;
}
class
WebMonitor
{
...
...
@@ -33,6 +34,7 @@ class WebMonitor {
private
envir
=
ImEnvironment
.
Dev
;
private
product
=
Product
.
Default
;
private
readonly
url
=
"https://pre-hrs-monitor.hrs100.com"
;
private
adapter
:
AxiosAdapter
|
undefined
;
public
updateKey
(
key
:
string
)
{
this
.
key
=
key
;
...
...
@@ -42,6 +44,7 @@ class WebMonitor {
private
buildHeaders
()
{
return
{
headers
:
{
authorization
:
"cdd0a34e-f537-4e5b-808e-2ba06af21845"
},
adapter
:
this
.
adapter
,
};
}
...
...
@@ -85,11 +88,17 @@ class WebMonitor {
);
}
public
useSdk
(
sdk
:
UniplatSdk
,
options
:
SdkMonitorOption
)
{
public
useSdk
(
sdk
:
UniplatSdk
,
options
:
SdkMonitorOption
,
adapter
?:
AxiosAdapter
)
{
this
.
envir
=
options
.
envir
;
this
.
product
=
options
.
product
;
this
.
adapter
=
adapter
;
sdk
.
events
.
addUniversalErrorResponseCallback
(
(
r
:
AxiosResponse
<
any
>
)
=>
{
options
.
call
&&
options
.
call
(
r
);
if
(
this
.
enable
())
{
const
msg
:
string
[]
=
[];
msg
.
push
(
...
...
@@ -111,12 +120,14 @@ class WebMonitor {
if
(
r
.
config
&&
r
.
config
.
data
)
{
const
form
=
r
.
config
.
data
as
FormData
;
if
(
form
.
getAll
)
{
const
p
=
form
.
getAll
(
'parameters'
);
const
p
=
form
.
getAll
(
"parameters"
);
for
(
const
item
of
p
)
{
msg
.
push
(
`Payload:
${
item
}
`
);
}
}
else
{
msg
.
push
(
`Payload:
${
JSON
.
stringify
(
r
.
config
.
data
)}
`
);
msg
.
push
(
`Payload:
${
JSON
.
stringify
(
r
.
config
.
data
)}
`
);
}
}
...
...
store/index.ts
View file @
6711c5df
...
...
@@ -56,8 +56,8 @@ async function preCacheImgs(msgs?: any[]) {
}
await
Promise
.
all
(
msgs
.
filter
(
(
i
)
=>
i
.
id
>
0
)
.
map
(
(
k
)
=>
{
.
filter
(
i
=>
i
.
id
>
0
)
.
map
(
k
=>
{
return
new
Promise
((
resolve
:
(
p
:
void
)
=>
void
)
=>
{
if
(
k
.
type
===
"image"
)
{
const
msg
=
JSON
.
parse
(
k
.
msg
);
...
...
@@ -108,14 +108,16 @@ const chatType = "group";
const
allowedChatTypes
=
[
chatType
,
"notify"
];
export
const
filterActiveChats
=
(
items
:
RawChatItem
[])
=>
{
return
items
.
filter
(
(
i
)
=>
return
items
.
filter
(
i
=>
!
i
.
is_finish
&&
!
i
.
is_exited
&&
!
i
.
is_remove
&&
!
i
.
is_deleted
&&
allowedChatTypes
.
includes
(
i
.
type
)
);
)
.
sort
((
x
,
y
)
=>
y
.
last_msg_ts
-
x
.
last_msg_ts
);
};
export
function
getLastMessageId
(
msgs
:
Message
[]
|
any
)
{
...
...
@@ -226,15 +228,15 @@ export default {
// 移除撤回的消息
const
newItems
=
data
||
[];
const
hasWithdraw
=
newItems
.
find
(
(
i
)
=>
i
.
type
===
MessageType
.
Withdraw
i
=>
i
.
type
===
MessageType
.
Withdraw
);
const
withdraw
=
hasWithdraw
?
newItems
.
filter
(
(
i
)
=>
i
.
type
===
MessageType
.
Withdraw
)
.
map
(
(
i
)
=>
+
i
.
msg
)
.
filter
(
i
=>
i
.
type
===
MessageType
.
Withdraw
)
.
map
(
i
=>
+
i
.
msg
)
:
[];
const
filterout
=
withdraw
.
length
?
newItems
.
filter
(
(
i
)
=>
!
withdraw
.
includes
(
i
.
id
))
?
newItems
.
filter
(
i
=>
!
withdraw
.
includes
(
i
.
id
))
:
newItems
;
state
[
ChatStore
.
STATE_CHAT_MSG_HISTORY
]
=
Object
.
freeze
(
combineMessages
(
old
,
filterout
,
chatid
)
...
...
@@ -243,10 +245,11 @@ export default {
},
[
ChatStore
.
MUTATION_SAVE_MYSELF_ID
](
state
)
{
if
(
!
state
[
ChatStore
.
STATE_CHAT_MY_ID
])
{
Chat
.
getToken
().
then
(
(
token
)
=>
{
Chat
.
getToken
().
then
(
token
=>
{
if
(
token
)
{
const
eid
=
decodeJwt
<
{
user_id
:
string
;
sub
:
string
}
>
(
token
);
const
eid
=
decodeJwt
<
{
user_id
:
string
;
sub
:
string
}
>
(
token
);
state
[
ChatStore
.
STATE_CHAT_MY_ID
]
=
String
(
eid
.
user_id
);
state
[
ChatStore
.
STATE_CHAT_MY_UID
]
=
eid
.
sub
;
}
...
...
@@ -351,7 +354,7 @@ export default {
ChatStore
.
STATE_CHAT_SENDING_MESSAGES
]
as
ChatStore
.
STATE_CHAT_SENDING_MESSAGE
[];
if
(
current
)
{
const
target
=
current
.
find
(
(
i
)
=>
i
.
id
===
payload
);
const
target
=
current
.
find
(
i
=>
i
.
id
===
payload
);
if
(
target
)
{
const
index
=
current
.
indexOf
(
target
);
current
.
splice
(
index
,
1
);
...
...
@@ -366,7 +369,7 @@ export default {
ChatStore
.
STATE_CHAT_SENDING_MESSAGES
]
as
ChatStore
.
STATE_CHAT_SENDING_MESSAGE
[];
if
(
current
)
{
const
target
=
current
.
find
(
(
i
)
=>
i
.
id
===
payload
);
const
target
=
current
.
find
(
i
=>
i
.
id
===
payload
);
if
(
target
)
{
target
.
status
=
-
1
;
}
...
...
@@ -374,11 +377,13 @@ export default {
state
[
ChatStore
.
STATE_CHAT_SENDING_MESSAGES
]
=
[...
current
];
}
},
[
ChatStore
.
MUTATION_SAVE_CURRENT_CHAT_INPUTING
]:
(
function
()
{
[
ChatStore
.
MUTATION_SAVE_CURRENT_CHAT_INPUTING
]:
(
function
()
{
const
setTimeoutId
:
{
[
key
:
string
]:
number
}
=
{};
return
(
state
:
ChatStoreState
,
payload
:
Parameters
<
ChatStore
.
MUTATION_SAVE_CURRENT_CHAT_INPUTING
>
[
0
]
payload
:
Parameters
<
ChatStore
.
MUTATION_SAVE_CURRENT_CHAT_INPUTING
>
[
0
]
)
=>
{
const
chatId
=
state
[
ChatStore
.
STATE_CHAT_CURRENT_CHAT_ID
];
if
(
!
chatId
)
return
;
...
...
@@ -397,13 +402,13 @@ export default {
);
};
})(),
[
ChatStore
.
MUTATION_CLEAR_CURRENT_CHAT_INPUTING
]:
(
state
)
=>
{
[
ChatStore
.
MUTATION_CLEAR_CURRENT_CHAT_INPUTING
]:
state
=>
{
state
[
ChatStore
.
STATE_CURRENT_CHAT_INPUTING
]
=
[];
},
[
ChatStore
.
MUTATION_INITING_CHAT
]:
(
state
)
=>
{
[
ChatStore
.
MUTATION_INITING_CHAT
]:
state
=>
{
state
[
ChatStore
.
STATE_CURRENT_CHAT_INITING
]
=
true
;
},
[
ChatStore
.
MUTATION_INITING_CHAT_DONE
]:
(
state
)
=>
{
[
ChatStore
.
MUTATION_INITING_CHAT_DONE
]:
state
=>
{
state
[
ChatStore
.
STATE_CURRENT_CHAT_INITING
]
=
false
;
},
[
ChatStore
.
MUTATION_CHAT_UPDATE_IS_MEMBER
]:
(
state
,
v
:
boolean
)
=>
{
...
...
@@ -426,16 +431,16 @@ export default {
const
chatId
=
state
[
ChatStore
.
STATE_CHAT_CURRENT_CHAT_ID
];
if
(
!
chatId
)
return
;
state
[
ChatStore
.
STATE_CHAT_MSG_HISTORY
]
=
old
.
filter
(
(
i
)
=>
!
ids
.
includes
(
i
.
id
)
i
=>
!
ids
.
includes
(
i
.
id
)
);
},
},
actions
:
{
async
[
ChatStore
.
ACTION_GET_MY_CHAT_LIST
]({
commit
,
dispatch
})
{
async
[
ChatStore
.
ACTION_GET_MY_CHAT_LIST
]({
commit
,
dispatch
,
state
})
{
commit
(
ChatStore
.
MUTATION_SAVE_MYSELF_ID
);
if
(
loadingChatList
)
{
return
new
Promise
<
ChatType
[]
>
(
(
resolve
)
=>
return
new
Promise
<
ChatType
[]
>
(
resolve
=>
cachedLoadingChatListAction
.
push
(
resolve
)
);
}
...
...
@@ -446,14 +451,14 @@ export default {
new
Promise
<
ChatType
[]
>
((
resolve
,
reject
)
=>
{
Chat
.
onReady
(()
=>
{
xim
.
fetchChatList
()
.
then
(
(
data
)
=>
{
.
then
(
data
=>
{
if
(
!
data
)
{
return
resolve
([]);
}
const
chatList
=
filterActiveChats
(
data
.
args
[
0
]
as
RawChatItem
[]
);
const
items
=
chatList
.
map
(
(
chat
)
=>
const
items
=
chatList
.
map
(
chat
=>
buildChatItem
(
chat
)
);
dbController
.
saveChatList
(
items
);
...
...
@@ -463,46 +468,29 @@ export default {
);
dispatch
(
ChatStore
.
ACTION_REBUILD_UNREAD_MESSAGE_COUNT
).
finally
(
resolve
);
);
resolve
(
items
);
})
.
catch
(
reject
);
});
}).
finally
(()
=>
(
loadingChatList
=
false
));
return
await
execute
().
then
(
(
d
)
=>
clearAction
(
d
));
return
await
execute
().
then
(
d
=>
clearAction
(
d
));
},
async
[
ChatStore
.
ACTION_FORCE_RELOAD_CHAT_LIST
]({
commit
})
{
return
new
Promise
<
ChatType
[]
>
((
resolve
)
=>
{
Chat
.
onReady
(()
=>
{
xim
.
fetchChatList
().
then
((
data
)
=>
{
if
(
!
data
)
{
return
resolve
([]);
}
const
chatList
=
filterActiveChats
(
data
.
args
[
0
]
as
RawChatItem
[]
);
const
items
=
chatList
.
map
((
chat
)
=>
buildChatItem
(
chat
)
);
dbController
.
saveChatList
(
items
);
commit
(
ChatStore
.
MUTATION_SAVE_CHAT_LIST
,
items
);
resolve
(
items
);
});
});
});
},
async
[
ChatStore
.
ACTION_REBUILD_UNREAD_MESSAGE_COUNT
]({
state
})
{
let
items
=
await
dbController
.
getChatList
();
[
ChatStore
.
ACTION_REBUILD_UNREAD_MESSAGE_COUNT
]({
state
})
{
const
items
=
state
[
ChatStore
.
STATE_MY_CHAT_ROOM_LIST
];
if
(
items
)
{
let
sum
=
0
;
items
.
forEach
((
i
)
=>
(
sum
+=
i
.
unread_msg_count
));
items
.
forEach
(
i
=>
(
sum
+=
i
.
unread_msg_count
));
state
[
ChatStore
.
STATE_CURRENT_UNREAD_MESSAGE_COUNT
]
=
sum
;
}
},
async
[
ChatStore
.
ACTION_UPDATE_CHAT_UNREAD_MESSAGE_COUNT
](
{
dispatch
,
state
},
p
:
{
chat
:
number
;
unread
:
number
}
)
{
const
list
=
state
[
ChatStore
.
STATE_MY_CHAT_ROOM_LIST
]
as
ChatType
[];
const
t
=
list
.
find
(
(
i
)
=>
i
.
id
===
p
.
chat
);
const
t
=
list
.
find
(
i
=>
i
.
id
===
p
.
chat
);
t
&&
(
t
.
unread_msg_count
=
p
.
unread
);
return
dbController
.
updateChat4UnreadCount
(
p
.
chat
,
p
.
unread
)
...
...
@@ -556,7 +544,9 @@ export default {
},
async
[
ChatStore
.
ACTION_GET_CHAT_MESSAGES_BEFORE_SPECIFIC_ID
](
{
state
,
commit
,
getters
},
msgId
:
Parameters
<
ChatStore
.
ACTION_GET_CHAT_MESSAGES_BEFORE_SPECIFIC_ID
>
[
0
]
msgId
:
Parameters
<
ChatStore
.
ACTION_GET_CHAT_MESSAGES_BEFORE_SPECIFIC_ID
>
[
0
]
)
{
const
chatId
=
state
[
ChatStore
.
STATE_CHAT_CURRENT_CHAT_ID
];
if
(
!
chatId
)
return
;
...
...
@@ -581,7 +571,9 @@ export default {
},
async
[
ChatStore
.
ACTION_GET_CHAT_MESSAGES_AFTER_SPECIFIC_ID
](
{
state
,
commit
,
getters
},
msgId
:
Parameters
<
ChatStore
.
ACTION_GET_CHAT_MESSAGES_AFTER_SPECIFIC_ID
>
[
0
]
msgId
:
Parameters
<
ChatStore
.
ACTION_GET_CHAT_MESSAGES_AFTER_SPECIFIC_ID
>
[
0
]
)
{
const
chatId
=
state
[
ChatStore
.
STATE_CHAT_CURRENT_CHAT_ID
];
if
(
!
chatId
)
return
;
...
...
@@ -654,7 +646,9 @@ export default {
},
async
[
ChatStore
.
ACTION_CREATE_NEW_CHAT_BY_SERVICE_MAN
](
{
commit
,
dispatch
},
params
:
Parameters
<
ChatStore
.
ACTION_CREATE_NEW_CHAT_BY_SERVICE_MAN
>
[
0
]
params
:
Parameters
<
ChatStore
.
ACTION_CREATE_NEW_CHAT_BY_SERVICE_MAN
>
[
0
]
)
{
const
{
imChatId
,
catalog
}
=
await
Chat
.
getSdk
()
.
model
(
params
.
modelName
)
...
...
@@ -710,9 +704,9 @@ export default {
const
scroll
=
()
=>
state
[
ChatStore
.
STATE_FUNC_ON_NEW_MSG
](
e
);
if
(
e
.
chat_id
===
chatId
)
{
dispatch
(
ChatStore
.
ACTION_GET_FRESH_MESSAGE
).
finally
(
()
=>
scroll
()
);
dispatch
(
ChatStore
.
ACTION_GET_FRESH_MESSAGE
)
.
finally
(()
=>
scroll
())
;
}
else
{
scroll
();
}
...
...
@@ -730,7 +724,7 @@ export default {
xim
.
on
(
"msg"
,
onNewMsg
);
return
;
}
const
onMsgRead
:
ChatNotifyListener
=
async
(
e
)
=>
{
const
onMsgRead
:
ChatNotifyListener
=
async
e
=>
{
if
(
chatId
!==
e
.
chat_id
)
return
;
const
msgs
=
state
[
ChatStore
.
STATE_CHAT_MSG_HISTORY
];
if
(
msgs
==
null
)
return
;
...
...
@@ -762,10 +756,10 @@ export default {
commit
(
ChatStore
.
MUTATION_CLEAR_CHAT_MSG_HISTORY
);
commit
(
ChatStore
.
MUTATION_PUSH_CHAT_MSG_HISTORY
,
msgs
.
map
(
(
msg
)
=>
{
msgs
.
map
(
msg
=>
{
msg
=
{
...
msg
};
const
newMsg
=
freshMsgs
.
find
(
(
freshMsg
)
=>
freshMsg
.
id
===
msg
.
id
freshMsg
=>
freshMsg
.
id
===
msg
.
id
);
if
(
newMsg
!=
null
)
{
msg
.
read_count
=
newMsg
.
read_count
;
...
...
@@ -774,7 +768,7 @@ export default {
})
);
};
const
onInputing
:
ChatNotifyListener
=
(
e
)
=>
{
const
onInputing
:
ChatNotifyListener
=
e
=>
{
commit
(
ChatStore
.
MUTATION_SAVE_CURRENT_CHAT_INPUTING
,
e
);
};
removeRegisterChatEvents
.
push
(()
=>
{
...
...
@@ -793,10 +787,8 @@ export default {
if
(
!
chatId
)
{
return
;
}
const
chatList
=
state
[
ChatStore
.
STATE_MY_CHAT_ROOM_LIST
]
as
ChatType
[];
let
wantedChatRoom
=
chatList
.
find
((
k
)
=>
k
.
chat_id
===
chatId
);
const
chatList
=
state
[
ChatStore
.
STATE_MY_CHAT_ROOM_LIST
];
let
wantedChatRoom
=
chatList
.
find
(
k
=>
k
.
chat_id
===
chatId
);
if
(
!
wantedChatRoom
)
{
const
data
=
await
xim
.
fetchChat
(
chatId
);
...
...
@@ -825,7 +817,7 @@ export default {
wantedChatRoom
.
obj_id
,
wantedChatRoom
.
detail_name
)
.
then
(
(
info
)
=>
{
.
then
(
info
=>
{
commit
(
ChatStore
.
MUTATION_SAVE_CURRENT_CHAT_VERSION
,
info
.
uniplat_version
...
...
@@ -834,12 +826,12 @@ export default {
ChatStore
.
MUTATION_SAVE_CURRENT_CHAT_UNIPLAT_ID
,
info
.
uniplatId
);
dispatch
(
ChatStore
.
ACTION_GET_CHAT_MEMBERS
);
})
.
catch
(
console
.
error
);
commit
(
ChatStore
.
MUTATION_INITING_CHAT
);
removeRegisterChatEvents
.
forEach
(
(
k
)
=>
k
());
removeRegisterChatEvents
.
forEach
(
k
=>
k
());
removeRegisterChatEvents
=
[];
await
dispatch
(
ChatStore
.
ACTION_GET_CHAT_MEMBERS
);
try
{
await
Promise
.
all
([
dispatch
(
ChatStore
.
ACTION_REGISTER_EVENT
),
...
...
@@ -877,8 +869,10 @@ export default {
if
(
!
getChatMembersResult
)
return
;
const
chatMembers
=
getChatMembersResult
.
args
[
0
]
as
ChatMember
[];
const
all
=
await
Promise
.
all
(
chatMembers
.
map
(
async
(
member
)
=>
{
let
result
:
NonNullable
<
ChatStore
.
STATE_CURRENT_CHAT_MEMBERS
>
[
number
];
chatMembers
.
map
(
async
member
=>
{
let
result
:
NonNullable
<
ChatStore
.
STATE_CURRENT_CHAT_MEMBERS
>
[
number
];
try
{
const
data
=
await
ChatUserInfoService
.
getUserInfo
(
member
.
eid
...
...
@@ -896,9 +890,9 @@ export default {
})
);
(
<
any
>
state
)[
ChatStore
.
STATE_ALL_HISTORY_CHAT_MEMBERS
]
=
all
;
const
newChatMembers
=
all
.
filter
(
(
it
)
=>
!
it
.
is_exited
);
const
newChatMembers
=
all
.
filter
(
it
=>
!
it
.
is_exited
);
const
member
=
newChatMembers
.
find
(
(
it
)
=>
it
=>
it
.
eid
===
String
(
state
[
ChatStore
.
STATE_CHAT_CURRENT_USER_UID
])
);
...
...
@@ -912,8 +906,8 @@ export default {
commit
(
ChatStore
.
MUTATION_SAVE_CURRENT_CHAT_MEMBERS
,
unique
(
newChatMembers
,
function
(
item
,
all
)
{
return
all
.
findIndex
(
(
k
)
=>
k
.
eid
===
item
.
eid
);
unique
(
newChatMembers
,
function
(
item
,
all
)
{
return
all
.
findIndex
(
k
=>
k
.
eid
===
item
.
eid
);
})
);
},
...
...
@@ -1039,7 +1033,7 @@ export default {
return
await
Chat
.
getSdk
()
.
model
(
currentChat
.
model_name
)
.
chat
(
currentChat
.
obj_id
,
orgId
())
.
addMember
(
uids
.
map
(
(
id
)
=>
+
id
))
.
addMember
(
uids
.
map
(
id
=>
+
id
))
.
finally
(()
=>
dispatch
(
ChatStore
.
ACTION_GET_CHAT_MEMBERS
));
},
async
[
ChatStore
.
ACTION_CHAT_REMOVE_MEMBER
](
...
...
@@ -1059,7 +1053,7 @@ export default {
return
await
Chat
.
getSdk
()
.
model
(
currentChat
.
model_name
)
.
chat
(
currentChat
.
obj_id
,
currentChat
.
org_id
)
.
removeMember
(
uids
.
map
(
(
id
)
=>
+
id
))
.
removeMember
(
uids
.
map
(
id
=>
+
id
))
.
finally
(()
=>
dispatch
(
ChatStore
.
ACTION_GET_CHAT_MEMBERS
));
},
async
[
ChatStore
.
ACTION_CHAT_ADD_CS
](
...
...
@@ -1079,7 +1073,7 @@ export default {
return
await
Chat
.
getSdk
()
.
model
(
currentChat
.
model_name
)
.
chat
(
currentChat
.
obj_id
,
orgId
())
.
addCs
(
uids
.
map
(
(
id
)
=>
Number
(
id
)))
.
addCs
(
uids
.
map
(
id
=>
Number
(
id
)))
.
finally
(()
=>
dispatch
(
ChatStore
.
ACTION_GET_CHAT_MEMBERS
));
},
async
[
ChatStore
.
ACTION_CHAT_REMOVE_CS
](
...
...
@@ -1099,7 +1093,7 @@ export default {
return
await
Chat
.
getSdk
()
.
model
(
currentChat
.
model_name
)
.
chat
(
currentChat
.
obj_id
,
orgId
())
.
removeCs
(
uids
.
map
(
(
id
)
=>
Number
(
id
)))
.
removeCs
(
uids
.
map
(
id
=>
Number
(
id
)))
.
finally
(()
=>
dispatch
(
ChatStore
.
ACTION_GET_CHAT_MEMBERS
));
},
[
ChatStore
.
ACTION_SET_HANDLED
](
...
...
@@ -1111,7 +1105,7 @@ export default {
)
{
const
msgs
=
state
[
ChatStore
.
STATE_CHAT_MSG_HISTORY
];
if
(
msgs
)
{
const
t
=
msgs
.
find
(
(
i
)
=>
i
.
id
===
p
.
id
);
const
t
=
msgs
.
find
(
i
=>
i
.
id
===
p
.
id
);
if
(
t
)
{
t
.
handled
=
p
.
value
;
const
chatId
=
state
[
ChatStore
.
STATE_CHAT_CURRENT_CHAT_ID
];
...
...
@@ -1139,7 +1133,7 @@ export default {
return
new
Promise
<
{
id
:
string
;
name
:
string
}
>
(
(
resolve
,
reject
)
=>
ChatUserInfoService
.
getUserInfo
(
id
)
.
then
(
(
d
)
=>
{
.
then
(
d
=>
{
Vue
.
set
(
state
[
ChatStore
.
STATE_CHAT_USERNAME
],
id
,
...
...
@@ -1164,7 +1158,7 @@ export default {
if
(
items
)
{
if
(
option
.
end
&&
option
.
end
>
option
.
start
)
{
for
(
let
i
=
option
.
start
;
i
<=
option
.
end
;
i
++
)
{
const
p
=
items
.
find
(
(
m
)
=>
m
.
id
===
i
);
const
p
=
items
.
find
(
m
=>
m
.
id
===
i
);
if
(
p
)
{
p
.
read_count
=
option
.
all
?
p
.
total_read_count
...
...
@@ -1174,7 +1168,7 @@ export default {
}
}
}
else
{
const
p
=
items
.
find
(
(
i
)
=>
i
.
id
===
option
.
start
);
const
p
=
items
.
find
(
i
=>
i
.
id
===
option
.
start
);
if
(
p
)
{
p
.
read_count
=
option
.
all
?
p
.
total_read_count
...
...
@@ -1204,7 +1198,7 @@ export default {
},
[
ChatStore
.
GETTER_CURRENT_CHAT_PRESENT_MEMBERS
](
state
)
{
return
(
state
[
ChatStore
.
STATE_CURRENT_CHAT_MEMBERS
]
??
[]).
filter
(
(
member
)
=>
!
member
.
is_exited
member
=>
!
member
.
is_exited
);
},
[
ChatStore
.
STATE_CURRENT_CHAT_TITLE
](
state
)
{
...
...
@@ -1220,7 +1214,7 @@ export default {
return
singleChat
;
}
const
chatList
=
state
[
ChatStore
.
STATE_MY_CHAT_ROOM_LIST
];
return
chatList
.
find
(
(
chat
)
=>
chat
.
chat_id
===
chatId
);
return
chatList
.
find
(
chat
=>
chat
.
chat_id
===
chatId
);
},
},
}
as
Module
<
ChatStoreState
,
RootStoreState
>
;
store/model.ts
View file @
6711c5df
...
...
@@ -252,9 +252,6 @@ export namespace ChatStore {
keyword
?:
string
)
=>
Promise
<
ChatType
[]
>
;
export
const
ACTION_FORCE_RELOAD_CHAT_LIST
=
"重新获取我的会话列表"
;
export
type
ACTION_FORCE_RELOAD_CHAT_LIST
=
()
=>
Promise
<
ChatType
[]
>
;
export
const
ACTION_REBUILD_UNREAD_MESSAGE_COUNT
=
"重新计算未读消息数"
;
export
type
ACTION_REBUILD_UNREAD_MESSAGE_COUNT
=
()
=>
void
;
...
...
xim/index.ts
View file @
6711c5df
...
...
@@ -58,7 +58,12 @@ class Chat {
option
.
message
&&
(
this
.
messageController
=
option
.
message
);
option
.
avatar
!==
undefined
&&
(
this
.
defaultAvatar
=
option
.
avatar
);
await
this
.
setupIndexDb
(
option
.
orgId
());
if
(
!
option
.
disabledIndexDb
){
await
this
.
setupIndexDb
(
option
.
orgId
()).
catch
(
err
=>
{
// 必须catch error不然小程序不会向后运行
console
.
error
(
"setupIndexDb Error"
)
});
}
this
.
token
=
async
()
=>
option
.
sdk
().
global
.
jwtToken
;
tokenManager
.
save
(
this
.
token
);
...
...
@@ -151,7 +156,7 @@ class Chat {
.
finally
(()
=>
{
this
.
registerXimEvent
();
if
(
xim
.
isConnected
())
{
resolve
(
);
setTimeout
(
resolve
,
200
);
}
else
{
reject
(
new
Error
(
`xim is not connected`
));
}
...
...
xim/xim.ts
View file @
6711c5df
...
...
@@ -8,7 +8,7 @@ import { Message, NotifyMessage } from "./models/chat";
import
chat
from
"./index"
;
import
{
STATUS
}
from
"xchat-client/dist/xchat"
;
wampDebug
(
tru
e
);
wampDebug
(
fals
e
);
const
DefaultMsgPageSize
=
20
;
...
...
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