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
76c7b004
authored
Aug 04, 2021
by
杨铁龙
Browse files
Options
_('Browse Files')
Download
Plain Diff
Merge branch 'master' of
http://gitlab.corp.qinqinxiaobao.com:9880/uniplat/customer-service
parents
38e7a3b5
7d6bb058
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
108 additions
and
25 deletions
components/chat-title.vue
components/create-chat.vue
store/index.ts
store/model.ts
components/chat-title.vue
View file @
76c7b004
...
...
@@ -15,17 +15,18 @@
</
template
>
</div>
<div
class=
"title-buttons"
>
<el-button
class=
"button"
@
click=
"startReception"
round
v-if=
"!isChatMember"
>
开始接待
</el-button
>
<el-button
class=
"button"
@
click=
"
finishReception
"
round
v-if=
"isChatMember"
>
结束接待
</el-button
<el-button
class=
"button"
@
click=
"
exitChat
"
round
v-if=
"isChatMember"
>
退出会话
</el-button
>
<el-button
class=
"button"
@
click=
"
terminate"
round
>
结束
会话
</el-button
<el-button
class=
"button"
@
click=
"
finishReception"
round
v-if=
"isChatMember && operatorType > 25"
>
结束
接待
</el-button
>
<el-button
class=
"button"
@
click=
"showAddMember"
round
>
添加
成员
</el-button
>
添加
客服
</el-button
>
<i
v-if=
"close && isSingleChat"
@
click=
"close"
class=
"title-close el-icon-close"
/>
</div>
...
...
@@ -56,11 +57,8 @@ export default class ChatTitle extends Vue {
@
chatStore
.
State
(
ChatStore
.
STATE_CHAT_DIALOG_IS_SINGLE
)
private
readonly
isSingleChat
:
ChatStore
.
STATE_CHAT_DIALOG_IS_SINGLE
;
@
chatStore
.
Action
(
ChatStore
.
ACTION_TERINATE_CHAT
)
private
readonly
_terminate
!
:
ChatStore
.
ACTION_TERINATE_CHAT
;
@
chatStore
.
Action
(
ChatStore
.
ACTION_CHAT_ADD_MEMBERS
)
private
readonly
_addMember
!
:
ChatStore
.
ACTION_CHAT_ADD_MEMBERS
;
@
chatStore
.
Action
(
ChatStore
.
ACTION_CHAT_ADD_CS
)
private
readonly
_addCS
!
:
ChatStore
.
ACTION_CHAT_ADD_CS
;
@
chatStore
.
Action
(
ChatStore
.
ACTION_CHAT_START_RECEPTION
)
private
readonly
_startReception
!
:
ChatStore
.
ACTION_CHAT_START_RECEPTION
;
...
...
@@ -68,12 +66,21 @@ export default class ChatTitle extends Vue {
@
chatStore
.
Action
(
ChatStore
.
ACTION_CHAT_FINISH_RECEPTION
)
private
readonly
_finishReception
!
:
ChatStore
.
ACTION_CHAT_FINISH_RECEPTION
;
@
chatStore
.
Action
(
ChatStore
.
ACTION_CHAT_USER_EXIT
)
private
readonly
_userExitChat
!
:
ChatStore
.
ACTION_CHAT_USER_EXIT
;
@
chatStore
.
Action
(
ChatStore
.
ACTION_CHAT_CS_EXIT
)
private
readonly
_csExitChat
!
:
ChatStore
.
ACTION_CHAT_CS_EXIT
;
@
chatStore
.
State
(
ChatStore
.
STATE_CHAT_CURRENT_IS_CHAT_MEMBER
)
private
readonly
isChatMember
!
:
ChatStore
.
STATE_CHAT_CURRENT_IS_CHAT_MEMBER
;
@
chatStore
.
State
(
ChatStore
.
STATE_CHAT_CURRENT_USER_UID
)
private
readonly
operatorUid
!
:
ChatStore
.
STATE_CHAT_CURRENT_USER_UID
;
@
chatStore
.
State
(
ChatStore
.
STATE_CHAT_CURRENT_USER_TYPE
)
private
readonly
operatorType
!
:
ChatStore
.
STATE_CHAT_CURRENT_USER_TYPE
;
private
get
chatMembersId
()
{
return
this
.
chatMembers
.
map
((
k
)
=>
+
k
.
eid
);
}
...
...
@@ -87,11 +94,6 @@ export default class ChatTitle extends Vue {
@
Prop
({
type
:
Function
})
private
close
?:
()
=>
void
;
@
buttonThrottle
()
private
terminate
()
{
this
.
_terminate
();
}
private
showAddMember
()
{
this
.
visible
=
true
;
}
...
...
@@ -102,7 +104,7 @@ export default class ChatTitle extends Vue {
private
async
addMember
(
users
:
string
[],
done
:
()
=>
void
)
{
try
{
await
this
.
_add
Member
(
users
);
await
this
.
_add
CS
(
users
);
this
.
hideAddMember
();
}
catch
(
error
)
{
console
.
error
(
error
);
...
...
@@ -111,21 +113,34 @@ export default class ChatTitle extends Vue {
}
}
private
async
startReception
()
{
private
async
exitChat
()
{
try
{
await
this
.
_startReception
();
if
(
this
.
operatorType
==
'25'
)
{
await
this
.
_userExitChat
();
}
else
if
(
+
this
.
operatorType
>
25
){
await
this
.
_csExitChat
();
}
}
catch
(
error
)
{
console
.
error
(
error
);
}
}
private
async
finish
Reception
()
{
private
async
start
Reception
()
{
try
{
await
this
.
_
finish
Reception
();
await
this
.
_
start
Reception
();
}
catch
(
error
)
{
console
.
error
(
error
);
}
}
private
async
finishReception
()
{
await
this
.
$confirm
(
"确定要结束接待吗?结束接待将会终止客服会话"
,
"提示"
,
{
confirmButtonText
:
"确定"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
})
await
this
.
_finishReception
();
}
}
</
script
>
<
style
lang=
"less"
scoped
>
...
...
components/create-chat.vue
View file @
76c7b004
...
...
@@ -63,9 +63,6 @@ type User = {
type
ThenArg
<
T
>
=
T
extends
PromiseLike
<
infer
U
>
?
U
:
T
;
@
Component
({
components
:
{
avatar
}
})
export
default
class
ChatCreator
extends
Vue
{
@
chatStore
.
Action
(
ChatStore
.
ACTION_CREATE_NEW_CHAT_BY_SERVICE_MAN
)
private
readonly
_createChat
!
:
ChatStore
.
ACTION_CREATE_NEW_CHAT_BY_SERVICE_MAN
;
@
Prop
({
type
:
Array
,
default
:
()
=>
[],
...
...
store/index.ts
View file @
76c7b004
...
...
@@ -87,6 +87,7 @@ export default {
[
ChatStore
.
STATE_FUNC_SCROLL_TO_BOTTOM
]:
()
=>
true
,
[
ChatStore
.
STATE_CURRENT_CHAT_INPUTING
]:
[],
[
ChatStore
.
STATE_CURRENT_CHAT_INITING
]:
false
,
[
ChatStore
.
STATE_CHAT_CURRENT_USER_TYPE
]:
ChatStore
.
STATE_CHAT_CURRENT_USER_TYPE
,
}),
mutations
:
{
[
ChatStore
.
MUTATION_SHOW_CHAT
](
state
,
isSingle
?:
boolean
)
{
...
...
@@ -293,6 +294,9 @@ export default {
[
ChatStore
.
MUTATION_SET_CURRENT_USER_UID
]:
(
state
,
v
:
number
)
=>
{
state
[
ChatStore
.
STATE_CHAT_CURRENT_USER_UID
]
=
v
;
},
[
ChatStore
.
MUTATION_CHAT_UPDATE_USER_TYPE
]:
(
state
,
v
:
string
)
=>
{
state
[
ChatStore
.
STATE_CHAT_CURRENT_USER_TYPE
]
=
v
;
},
},
actions
:
{
async
[
ChatStore
.
ACTION_GET_MY_CHAT_LIST
]({
...
...
@@ -436,7 +440,7 @@ export default {
const
{
id
,
ImChatId
,
uniplat_version
}
=
await
sdk
()
.
model
(
params
.
modelName
)
.
chat
(
+
params
.
selectedListId
,
orgId
())
.
createChat
();
.
createChat
(
true
);
const
uniplatId
=
id
.
value
;
const
chatId
=
Number
(
ImChatId
.
value
);
const
v
=
uniplat_version
.
value
;
...
...
@@ -593,10 +597,13 @@ export default {
})
);
newChatMembers
=
newChatMembers
.
filter
(
it
=>
!
it
.
is_exited
)
if
(
newChatMembers
.
findIndex
(
it
=>
it
.
eid
===
String
(
state
[
ChatStore
.
STATE_CHAT_CURRENT_USER_UID
]))
>
-
1
)
{
const
member
=
newChatMembers
.
find
(
it
=>
it
.
eid
===
String
(
state
[
ChatStore
.
STATE_CHAT_CURRENT_USER_UID
]))
if
(
member
)
{
commit
(
ChatStore
.
MUTATION_CHAT_UPDATE_IS_MEMBER
,
true
);
commit
(
ChatStore
.
MUTATION_CHAT_UPDATE_USER_TYPE
,
member
.
type
)
}
else
{
commit
(
ChatStore
.
MUTATION_CHAT_UPDATE_IS_MEMBER
,
false
);
commit
(
ChatStore
.
MUTATION_CHAT_UPDATE_USER_TYPE
,
"0"
)
}
commit
(
ChatStore
.
MUTATION_SAVE_CURRENT_CHAT_MEMBERS
,
...
...
@@ -661,6 +668,38 @@ export default {
await
dispatch
(
ChatStore
.
ACTION_GET_CHAT_MEMBERS
);
},
async
[
ChatStore
.
ACTION_CHAT_USER_EXIT
](
{
getters
,
dispatch
}
)
{
const
currentChat
=
getters
[
ChatStore
.
GETTER_CURRENT_CURRENT_CHAT
];
if
(
currentChat
==
null
)
return
;
const
{
model_name
,
obj_id
}
=
currentChat
.
business_data
;
if
(
model_name
==
null
)
return
;
if
(
obj_id
==
null
)
return
;
await
sdk
()
.
model
(
model_name
)
.
chat
(
obj_id
,
orgId
())
.
userExitChat
();
await
new
Promise
((
resolve
)
=>
setTimeout
(
resolve
,
500
));
await
dispatch
(
ChatStore
.
ACTION_GET_CHAT_MEMBERS
);
},
async
[
ChatStore
.
ACTION_CHAT_CS_EXIT
](
{
getters
,
dispatch
}
)
{
const
currentChat
=
getters
[
ChatStore
.
GETTER_CURRENT_CURRENT_CHAT
];
if
(
currentChat
==
null
)
return
;
const
{
model_name
,
obj_id
}
=
currentChat
.
business_data
;
if
(
model_name
==
null
)
return
;
if
(
obj_id
==
null
)
return
;
await
sdk
()
.
model
(
model_name
)
.
chat
(
obj_id
,
orgId
())
.
csExitChat
();
await
new
Promise
((
resolve
)
=>
setTimeout
(
resolve
,
500
));
await
dispatch
(
ChatStore
.
ACTION_GET_CHAT_MEMBERS
);
},
async
[
ChatStore
.
ACTION_CHAT_ADD_MEMBERS
](
{
getters
,
dispatch
},
uids
:
Parameters
<
ChatStore
.
ACTION_CHAT_ADD_MEMBERS
>
[
0
]
...
...
@@ -694,6 +733,24 @@ export default {
await
new
Promise
((
resolve
)
=>
setTimeout
(
resolve
,
500
));
await
dispatch
(
ChatStore
.
ACTION_GET_CHAT_MEMBERS
);
},
async
[
ChatStore
.
ACTION_CHAT_ADD_CS
](
{
getters
,
dispatch
},
uids
:
Parameters
<
ChatStore
.
ACTION_CHAT_ADD_CS
>
[
0
]
)
{
const
currentChat
=
getters
[
ChatStore
.
GETTER_CURRENT_CURRENT_CHAT
];
console
.
log
(
currentChat
)
if
(
currentChat
==
null
)
return
;
const
{
model_name
,
obj_id
}
=
currentChat
.
business_data
;
if
(
model_name
==
null
)
return
;
if
(
obj_id
==
null
)
return
;
await
sdk
()
.
model
(
model_name
)
.
chat
(
obj_id
,
orgId
())
.
addCs
(
uids
.
map
((
id
)
=>
Number
(
id
)));
await
new
Promise
((
resolve
)
=>
setTimeout
(
resolve
,
500
));
await
dispatch
(
ChatStore
.
ACTION_GET_CHAT_MEMBERS
);
},
async
[
ChatStore
.
ACTION_CHAT_REMOVE_CS
](
{
getters
,
dispatch
},
uids
:
Parameters
<
ChatStore
.
ACTION_CHAT_REMOVE_CS
>
[
0
]
...
...
store/model.ts
View file @
76c7b004
...
...
@@ -40,6 +40,8 @@ export namespace ChatStore {
export
type
STATE_CHAT_CURRENT_IS_CHAT_MEMBER
=
boolean
export
const
STATE_CHAT_CURRENT_USER_UID
=
"用户的UiplatId"
;
export
type
STATE_CHAT_CURRENT_USER_UID
=
number
|
null
export
const
STATE_CHAT_CURRENT_USER_TYPE
=
"当前用户类型状态,25-普通用户,92-客服"
;
export
type
STATE_CHAT_CURRENT_USER_TYPE
=
string
|
null
export
const
STATE_CHAT_CURRENT_CHAT_UNIPLAT_ID
=
"当前chat的Uniplat id"
;
export
type
STATE_CHAT_CURRENT_CHAT_UNIPLAT_ID
=
string
|
null
...
...
@@ -205,6 +207,9 @@ export namespace ChatStore {
export
const
MUTATION_CHAT_UPDATE_IS_MEMBER
=
"更新是否是当前成员"
;
export
type
MUTATION_CHAT_UPDATE_IS_MEMBER
=
(
v
:
boolean
)
=>
Promise
<
void
>
export
const
MUTATION_CHAT_UPDATE_USER_TYPE
=
"更新当前用户的类型"
;
export
type
MUTATION_CHAT_UPDATE_USER_TYPE
=
(
v
:
string
)
=>
Promise
<
void
>
/* action */
export
const
ACTION_GET_MY_CHAT_LIST
=
"获取我的会话列表"
;
export
type
ACTION_GET_MY_CHAT_LIST
=
(
keyword
?:
string
)
=>
void
...
...
@@ -276,6 +281,8 @@ export namespace ChatStore {
export
type
ACTION_CHAT_ADD_MEMBERS
=
(
uids
:
string
[])
=>
Promise
<
void
>
export
const
ACTION_CHAT_REMOVE_MEMBER
=
"移除成员"
;
export
type
ACTION_CHAT_REMOVE_MEMBER
=
(
uids
:
string
[])
=>
Promise
<
void
>
export
const
ACTION_CHAT_ADD_CS
=
"添加客服"
;
export
type
ACTION_CHAT_ADD_CS
=
(
uids
:
string
[])
=>
Promise
<
void
>
export
const
ACTION_CHAT_START_RECEPTION
=
"开始接待"
;
export
type
ACTION_CHAT_START_RECEPTION
=
()
=>
Promise
<
void
>
...
...
@@ -285,6 +292,12 @@ export namespace ChatStore {
export
const
ACTION_CHAT_REMOVE_CS
=
"移除客服"
;
export
type
ACTION_CHAT_REMOVE_CS
=
(
uids
:
string
[])
=>
Promise
<
void
>
export
const
ACTION_CHAT_USER_EXIT
=
"普通用户退出"
;
export
type
ACTION_CHAT_USER_EXIT
=
()
=>
Promise
<
void
>
export
const
ACTION_CHAT_CS_EXIT
=
"客服退出"
;
export
type
ACTION_CHAT_CS_EXIT
=
()
=>
Promise
<
void
>
}
export
interface
ChatStoreState
{
...
...
@@ -307,6 +320,7 @@ export interface ChatStoreState {
[
ChatStore
.
STATE_SINGLE_CHAT
]:
ChatStore
.
STATE_SINGLE_CHAT
[
ChatStore
.
STATE_CHAT_CURRENT_IS_CHAT_MEMBER
]:
ChatStore
.
STATE_CHAT_CURRENT_IS_CHAT_MEMBER
[
ChatStore
.
STATE_CHAT_CURRENT_USER_UID
]:
ChatStore
.
STATE_CHAT_CURRENT_USER_UID
[
ChatStore
.
STATE_CHAT_CURRENT_USER_TYPE
]:
ChatStore
.
STATE_CHAT_CURRENT_USER_TYPE
}
export
const
chatStore
=
namespace
(
ChatStore
.
ns
);
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