Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
company_app
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
毛细亚
company_app
Commits
6cc46e07
提交
6cc46e07
authored
9月 01, 2025
作者:
毛细亚
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
清除 cookie
上级
e5a50223
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
293 行增加
和
337 行删除
+293
-337
vipTools.vue
src/views/components/quickSendGame/vipTools.vue
+1
-2
Info.vue
src/views/userInfo/components/Info.vue
+292
-335
没有找到文件。
src/views/components/quickSendGame/vipTools.vue
浏览文件 @
6cc46e07
...
@@ -19,8 +19,7 @@
...
@@ -19,8 +19,7 @@
</div>
</div>
<div
class=
"rowFlex columnCenter spaceBetween gameCodeTitle"
@
click=
"showGameCode = !showGameCode"
>
<div
class=
"rowFlex columnCenter spaceBetween gameCodeTitle"
@
click=
"showGameCode = !showGameCode"
>
<p
class=
"rowFlex columnCenter spaceBetween"
>
<p
class=
"rowFlex columnCenter spaceBetween"
>
<img
src=
"@/assets/icon/svg/gift.svg"
alt=
"gift"
<svg-icon
icon-class=
"gift"
style=
"font-size:20px;margin-right: 5px;margin-top: -2px;"
></svg-icon>
style=
"width: 16px;height: 16px;margin-right: 5px;margin-top: -2px;"
>
<span
class=
"giftCode"
>
礼包码
</span>
<span
class=
"giftCode"
>
礼包码
</span>
</p>
</p>
<i
:class=
"showGameCode ? 'el-icon-arrow-right' : 'el-icon-arrow-down'"
></i>
<i
:class=
"showGameCode ? 'el-icon-arrow-right' : 'el-icon-arrow-down'"
></i>
...
...
src/views/userInfo/components/Info.vue
浏览文件 @
6cc46e07
<
template
>
<
template
>
<div
class=
"info-tab-content"
>
<div
class=
"info-tab-content"
>
<div
<div
class=
"userDetailsPanel columnFlex"
>
class=
"userDetailsPanel columnFlex"
<div
class=
"content"
v-loading=
"viewLoading"
>
>
<div
v-if=
"chatUserDetails.is_phishing_account == 1"
class=
"warnText"
>
<div
class=
"content"
v-loading=
"viewLoading"
>
<p>
高风险玩家,请立即通知组长!!!!
</p>
<div
v-if=
"chatUserDetails.is_phishing_account==1"
class=
"warnText"
>
<p>
①千万不能推转游!!不要发送违禁词汇!!不要发送礼包和告知任何礼包信息!!
</p>
<p>
高风险玩家,请立即通知组长!!!!
</p>
<p>
②不能以任何形式推送APP/网页链接,也不可承认有APP/网页端口!!
</p>
<p>
①千万不能推转游!!不要发送违禁词汇!!不要发送礼包和告知任何礼包信息!!
</p>
<p>
②不能以任何形式推送APP/网页链接,也不可承认有APP/网页端口!!
</p>
</div>
<div
v-if=
"change_appraisal"
class=
"warnText"
>
<p>
钓鱼号 禁止转端通知组长!
</p>
</div>
<div
v-else-if=
"gameUserInfo.exp_ip"
class=
"warnText"
>
<p>
高风险用户,禁止转端 !!!
</p>
</div>
<div
class=
"cser_info"
>
<div
class=
"cser_name"
>
<span>
当前客服:
{{
`${cser_name
}
(${clientStatusText
}
)`
}}
<
/span
>
</div>
</div>
<!--
添加客服状态显示及按钮
-->
<div
v-if=
"change_appraisal"
class=
"warnText"
>
<
div
class
=
"cser_status"
>
<p>
钓鱼号 禁止转端通知组长!
</p>
<
div
class
=
"status-actions"
>
<
el
-
button
type
=
"danger"
v
-
if
=
"clientStatus !== 'offline'"
style
=
"margin-left: 0px;"
size
=
"mini"
@
click
=
"logout"
>
下线
<
/el-button
>
<!--
休息中状态显示结束休息按钮
-->
<
el
-
button
v
-
if
=
"clientStatus === 'rest'"
type
=
"primary"
size
=
"mini"
@
click
=
"handleFinishRest"
>
结束休息
<
/el-button
>
<!--
在线状态显示开始休息按钮
-->
<
el
-
tooltip
v
-
if
=
"clientStatus === 'online'"
content
=
"午休或者临时有事可点击休息"
placement
=
"top"
>
<
el
-
button
type
=
"warning"
size
=
"mini"
@
click
=
"handleStartRest"
>
开始休息
<
/el-button
>
<
/el-tooltip
>
<!--
发送评价按钮
-->
<
el
-
button
type
=
"primary"
style
=
"margin-left: 0px;"
size
=
"mini"
@
click
=
"handleSendComment"
>
发送评价
<
/el-button
>
<
/div
>
</div>
</div>
<
/div
>
<div
v-else-if=
"gameUserInfo.exp_ip"
class=
"warnText"
>
<!--
会话内容存档状态
-->
<p>
高风险用户,禁止转端 !!!
</p>
<
div
class
=
"archive-status"
v
-
if
=
"agreeStatus!=='Agree' || !hasPermit"
>
</div>
<
p
v
-
if
=
"agreeStatus!=='Agree'"
>
当前微信用户未开启会话内容存档
<
/p
>
<div
class=
"cser_info"
>
<
p
v
-
if
=
"!hasPermit"
>
当前客服号未授权开启会话内容存档
<
/p
>
<div
class=
"cser_name"
>
<
/div
>
<span>
当前客服:
{{
`${cser_name
}
(${clientStatusText
}
)`
}}
<
/span
>
<
div
class
=
"item rowFlex"
>
<!--
公共的信息
-->
<
el
-
image
fit
=
"fill"
draggable
=
"false"
style
=
"-webkit-user-drag: none"
:
src
=
"chatUserDetails.avatar"
class
=
"tableImage"
><
/el-image
>
<
div
class
=
"columnFlex"
>
<
div
class
=
"rowFlex"
style
=
"margin-bottom: 3px"
>
<
p
class
=
"text"
style
=
"font-weight: 600"
>
{{
chatUserDetails
.
name
}}
<
/p
>
<
span
v
-
if
=
"chatUserDetails.add_way_text"
style
=
"color: #09b159; margin-left: 10px"
>
@{{
chatUserDetails
.
add_way_text
}}
<
/span
>
<
/div
>
<
/div
>
<!--
游戏模块特有
-->
<!--
添加客服状态显示及按钮
-->
<
div
<
div
class
=
"cser_status"
>
v
-
if
=
"accountSelect && accountSelect !== ''"
<
div
class
=
"status-actions"
>
style
=
"margin-top: 3px"
<
el
-
button
type
=
"danger"
v
-
if
=
"clientStatus !== 'offline'"
style
=
"margin-left: 0px;"
size
=
"mini"
>
@
click
=
"logout"
>
下线
<
/el-button
>
<
el
-
button
-
group
>
<!--
休息中状态显示结束休息按钮
-->
<
el
-
button
size
=
"mini"
@
click
=
"zyouUnBindConfirm"
>
解绑
<
/el-button
>
<
el
-
button
v
-
if
=
"clientStatus === 'rest'"
type
=
"primary"
size
=
"mini"
<!--
<
el
-
button
size
=
"mini"
@
click
=
"autoResetPassword"
>
修改密码
<
/el-button
>
@
click
=
"handleFinishRest"
>
结束休息
<
/el-button
>
<!--
在线状态显示开始休息按钮
-->
<
el
-
tooltip
v
-
if
=
"clientStatus === 'online'"
content
=
"午休或者临时有事可点击休息"
placement
=
"top"
>
<
el
-
button
type
=
"warning"
size
=
"mini"
@
click
=
"handleStartRest"
>
开始休息
<
/el-button
>
<
/el-tooltip
>
<!--
发送评价按钮
-->
<
el
-
button
type
=
"primary"
style
=
"margin-left: 0px;"
size
=
"mini"
@
click
=
"handleSendComment"
>
发送评价
<
/el-button
>
<
/div
>
<
/div
>
<
/div
>
<!--
会话内容存档状态
-->
<
div
class
=
"archive-status"
v
-
if
=
"agreeStatus !== 'Agree' || !hasPermit"
>
<
p
v
-
if
=
"agreeStatus !== 'Agree'"
>
当前微信用户未开启会话内容存档
<
/p
>
<
p
v
-
if
=
"!hasPermit"
>
当前客服号未授权开启会话内容存档
<
/p
>
<
/div
>
<
div
class
=
"item rowFlex"
>
<!--
公共的信息
-->
<
el
-
image
fit
=
"fill"
draggable
=
"false"
style
=
"-webkit-user-drag: none"
:
src
=
"chatUserDetails.avatar"
class
=
"tableImage"
><
/el-image
>
<
div
class
=
"columnFlex"
>
<
div
class
=
"rowFlex"
style
=
"margin-bottom: 3px"
>
<
p
class
=
"text"
style
=
"font-weight: 600"
>
{{
chatUserDetails
.
name
}}
<
/p
>
<
span
v
-
if
=
"chatUserDetails.add_way_text"
style
=
"color: #09b159; margin-left: 10px"
>
@{{
chatUserDetails
.
add_way_text
}}
<
/span
>
<
/div
>
<!--
游戏模块特有
-->
<
div
v
-
if
=
"accountSelect && accountSelect !== ''"
style
=
"margin-top: 3px"
>
<
el
-
button
-
group
>
<
el
-
button
size
=
"mini"
@
click
=
"zyouUnBindConfirm"
>
解绑
<
/el-button
>
<!--
<
el
-
button
size
=
"mini"
@
click
=
"autoResetPassword"
>
修改密码
<
/el-button
>
<
el
-
button
size
=
"mini"
@
click
=
"changePhoneClick"
>
修改手机号
<
/el-button> --
>
<
el
-
button
size
=
"mini"
@
click
=
"changePhoneClick"
>
修改手机号
<
/el-button> --
>
<
el
-
button
v
-
if
=
"!chatUserDetails.bind_cser"
size
=
"mini"
@
click
=
"relationKfh"
>
关联客服
<
/el-button
>
<
el
-
button
v
-
if
=
"!chatUserDetails.bind_cser"
size
=
"mini"
@
click
=
"relationKfh"
>
关联客服
<
/el-button
>
<
el
-
button
size
=
"mini"
v
-
if
=
"false"
@
click
=
"errorHandle"
>
误操作
<
/el-button
>
<
el
-
button
size
=
"mini"
v
-
if
=
"false"
@
click
=
"errorHandle"
>
误操作
<
/el-button
>
<
/el-button-group
>
<
/el-button-group
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
div
class
=
"item rowFlex columnCenter"
>
<
div
class
=
"item
rowFlex columnCenter"
>
<
div
class
=
"
rowFlex columnCenter"
>
<
div
class
=
"rowFlex columnCenter"
>
<
span
class
=
"label"
style
=
"min-width: 45px;"
>
备注
:
<
/span
>
<
span
class
=
"label"
style
=
"min-width: 45px;"
>
备注
:
<
/span
>
<
p
v
-
if
=
"!showInputRemark"
class
=
"text"
style
=
"max-width: 170px;"
>
<
p
{{
v
-
if
=
"!showInputRemark
"
chatUserDetails
.
remark
&&
chatUserDetails
.
remark
!=
"
"
class
=
"text"
?
chatUserDetails
.
remark
style
=
"max-width: 170px;"
:
chatUserDetails
.
name
>
}}
{{
<
/p
>
chatUserDetails
.
remark
&&
chatUserDetails
.
remark
!=
""
<
/div
>
?
chatUserDetails
.
remark
<
el
-
input
v
-
if
=
"showInputRemark"
v
-
model
=
"showInputRemarkValue"
class
=
"showInputRemarkInput"
type
=
"textarea"
:
chatUserDetails
.
name
@
change
=
"handleInputRemark"
@
blur
=
"showInputRemark = false"
><
/el-input
>
}}
<
i
class
=
"el-icon-edit icon"
style
=
"font-size: 14px"
@
click
=
"editRemark"
><
/i
>
<
/p
>
<
/div
>
<
/div
>
<
el
-
input
<
div
>
v
-
if
=
"showInputRemark"
<!--
自定义列
-->
v
-
model
=
"showInputRemarkValue"
<!--
<
div
v
-
if
=
"false"
>
class
=
"showInputRemarkInput"
type
=
"textarea"
@
change
=
"handleInputRemark"
@
blur
=
"showInputRemark = false"
><
/el-input
>
<
i
class
=
"el-icon-edit icon"
style
=
"font-size: 14px"
@
click
=
"editRemark"
><
/i
>
<
/div
>
<
div
>
<!--
自定义列
-->
<!--
<
div
v
-
if
=
"false"
>
<
div
<
div
v
-
for
=
"(item, index) in chatUserDetails.self_defined_columns"
v
-
for
=
"(item, index) in chatUserDetails.self_defined_columns"
:
key
=
"index"
:
key
=
"index"
...
@@ -137,162 +108,129 @@
...
@@ -137,162 +108,129 @@
@
click
=
"inputShow(item, index)"
><
/i
>
@
click
=
"inputShow(item, index)"
><
/i
>
<
/div
>
<
/div
>
<
/div> --
>
<
/div> --
>
<!--
游戏业务的账号信息
-->
<!--
游戏业务的账号信息
-->
<
gameDetails
<
gameDetails
v
-
if
=
"gameUserInfo.username && !viewLoading"
:
chat
-
user
-
details
=
"chatUserDetails"
v
-
if
=
"gameUserInfo.username && !viewLoading"
:
game
-
user
-
info
=
"gameUserInfo"
@
changeAppraisal
=
"changeAppraisal"
/>
:
chat
-
user
-
details
=
"chatUserDetails"
:
game
-
user
-
info
=
"gameUserInfo"
<!--
游戏标签
-->
@
changeAppraisal
=
"changeAppraisal"
<
div
class
=
"item rowFlex columnCenter spaceBetween tagsLost"
>
/>
<
div
class
=
"rowFlex"
>
<
span
class
=
"label"
>
关联标签
:
<
/span
>
<!--
游戏标签
-->
<
div
v
-
if
=
"
<
div
class
=
"item rowFlex columnCenter spaceBetween tagsLost"
>
<
div
class
=
"rowFlex"
>
<
span
class
=
"label"
>
关联标签
:
<
/span
>
<
div
v
-
if
=
"
chatUserDetails.tag_group &&
chatUserDetails.tag_group &&
chatUserDetails.tag_group.length > 0
chatUserDetails.tag_group.length > 0
"
"
>
>
<!--
第一个标签组的所有标签
-->
<!--
第一个标签组的所有标签
-->
<
el
-
tag
v
-
for
=
"(items, indexs) in chatUserDetails.tag_group[0].tag"
:
key
=
"indexs"
>
{{
items
.
name
<
el
-
tag
}}
<
/el-tag
>
v
-
for
=
"(items, indexs) in chatUserDetails.tag_group[0].tag"
<!--
如果有多个标签组,显示
+
n
-->
:
key
=
"indexs"
<
el
-
popover
v
-
if
=
"chatUserDetails.tag_group.length > 1"
placement
=
"top"
trigger
=
"hover"
>
{{
items
.
name
}}
<
/el-tag
>
popper
-
class
=
"tag-popover"
>
<!--
如果有多个标签组,显示
+
n
-->
<
div
class
=
"groups-popover-content"
style
=
"max-height: 600px;overflow-y: auto;"
>
<
el
-
popover
<
div
v
-
for
=
"(group, groupIndex) in chatUserDetails.tag_group.slice(1)"
:
key
=
"groupIndex"
v
-
if
=
"chatUserDetails.tag_group.length > 1"
class
=
"group-item"
>
placement
=
"top"
<
el
-
tag
v
-
for
=
"(tagItem, tagIndex) in group.tag"
:
key
=
"tagIndex"
style
=
"margin-right: 10px;"
>
{{
trigger
=
"hover"
tagItem
.
name
}}
<
/el-tag
>
popper
-
class
=
"tag-popover"
<
/div
>
>
<
div
class
=
"groups-popover-content"
style
=
"max-height: 600px;overflow-y: auto;"
>
<
div
v
-
for
=
"(group, groupIndex) in chatUserDetails.tag_group.slice(1)"
:
key
=
"groupIndex"
class
=
"group-item"
>
<
el
-
tag
v
-
for
=
"(tagItem, tagIndex) in group.tag"
:
key
=
"tagIndex"
style
=
"margin-right: 10px;"
>
{{
tagItem
.
name
}}
<
/el-tag
>
<
/div
>
<
/div
>
<
/div
>
<
span
slot
=
"reference"
class
=
"tag-more"
>+
{{
chatUserDetails
.
tag_group
.
length
-
1
}}
<
/span
>
<
span
<
/el-popover
>
slot
=
"reference"
<
/div
>
class
=
"tag-more"
>+
{{
chatUserDetails
.
tag_group
.
length
-
1
}}
<
/span
>
<
/el-popover
>
<
/div
>
<
/div
>
<
i
class
=
"el-icon-edit icon"
style
=
"font-size: 14px;margin-right: 10px;"
@
click
=
"editTags"
><
/i
>
<
/div
>
<
/div
>
<
i
class
=
"el-icon-edit icon"
style
=
"font-size: 14px;margin-right: 10px;"
<
!--
共享信息
-->
@
click
=
"editTags"
><
/i
>
<
shareInfo
:
chat
-
user
-
details
=
"chatUserDetails"
/
>
<
/div
>
<
/div
>
<!--
共享信息
-->
<
shareInfo
:
chat
-
user
-
details
=
"chatUserDetails"
/>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<!--
修改手机号
-->
<!--
修改手机号
-->
<
changePhone
:
show
.
sync
=
"changePhone"
:
phone
.
sync
=
"gameUserInfo.mobile"
title
=
"修改手机号"
width
=
"350px"
/>
<
changePhone
:
show
.
sync
=
"changePhone"
:
phone
.
sync
=
"gameUserInfo.mobile"
title
=
"修改手机号"
width
=
"350px"
/>
<!--
修改标签
-->
<!--
修改标签
-->
<
selectTag
<
selectTag
v
-
if
=
"showTag"
:
show
.
sync
=
"showTag"
:
checkbox
=
"true"
:
check
-
list
=
"chatUserDetails.tag_group || []"
v
-
if
=
"showTag"
@
submit
=
"selectTags"
/>
:
show
.
sync
=
"showTag"
<
/div
>
:
checkbox
=
"true"
<
/template
>
:
check
-
list
=
"chatUserDetails.tag_group || []"
<
script
>
@
submit
=
"selectTags"
import
{
mapState
,
mapMutations
,
mapActions
}
from
'vuex'
/>
import
gameDetails
from
'./gameInfo/gameUserInfo.vue'
<
/div
>
import
shareInfo
from
'./shareInfo.vue'
<
/template
>
<
script
>
import
{
mapState
,
mapMutations
,
mapActions
}
from
'vuex'
import
gameDetails
from
'./gameInfo/gameUserInfo.vue'
import
shareInfo
from
'./shareInfo.vue'
import
changePhone
from
'./changePhone.vue'
import
changePhone
from
'./changePhone.vue'
import
watchMember
from
'@/mixins/watchMember'
import
watchMember
from
'@/mixins/watchMember'
import
{
autoResetPassword
,
bindUserSelfAdd
}
from
'@/api/game'
import
{
autoResetPassword
,
bindUserSelfAdd
}
from
'@/api/game'
import
{
memberBindCser
,
editUser
,
zyouUnBind
}
from
'@/api/works'
import
{
memberBindCser
,
editUser
,
zyouUnBind
}
from
'@/api/works'
import
selectTag
from
'@/components/selectTag.vue'
import
selectTag
from
'@/components/selectTag.vue'
import
{
getClientStatus
,
remarkSessionIntelTag
,
finishRest
,
client_session_rest
,
checkSingleAgree
,
checkUserPermit
,
sendComment
,
logout
}
from
'@/api/user.js'
import
{
getClientStatus
,
remarkSessionIntelTag
,
finishRest
,
client_session_rest
,
checkSingleAgree
,
checkUserPermit
,
sendComment
,
logout
}
from
'@/api/user.js'
import
{
sendChatMessage
}
from
'@/utils/index.js'
import
{
sendChatMessage
}
from
'@/utils/index.js'
import
{
getToken
,
removeToken
}
from
'@/utils/auth'
import
{
getToken
,
removeToken
}
from
'@/utils/auth'
export
default
{
import
Cookies
from
'js-cookie'
name
:
'info'
,
export
default
{
components
:
{
name
:
'info'
,
gameDetails
,
components
:
{
gameDetails
,
changePhone
,
changePhone
,
shareInfo
,
shareInfo
,
selectTag
selectTag
}
,
}
,
props
:
{
props
:
{
// 用户详情
// 用户详情
chatUserDetails
:
{
chatUserDetails
:
{
type
:
Object
,
type
:
Object
,
default
:
()
=>
({
}
)
default
:
()
=>
({
}
)
}
,
}
,
}
,
}
,
data
()
{
data
()
{
return
{
return
{
// 备注相关
// 备注相关
showInputRemark
:
false
,
showInputRemark
:
false
,
showInputRemarkValue
:
''
,
showInputRemarkValue
:
''
,
change_appraisal
:
false
,
change_appraisal
:
false
,
// 自定义列相关
// 自定义列相关
showInput
:
false
,
showInput
:
false
,
showInputValue
:
''
,
showInputValue
:
''
,
inputIndex
:
-
1
,
inputIndex
:
-
1
,
changePhone
:
false
,
changePhone
:
false
,
showTag
:
false
,
showTag
:
false
,
// 新增状态数据
// 新增状态数据
agreeStatus
:
''
,
// 用户是否同意聊天内容存档:Agreen同意 Disagree不同意
agreeStatus
:
''
,
// 用户是否同意聊天内容存档:Agreen同意 Disagree不同意
hasPermit
:
false
,
// 客服号是否开启会话内容存档权限
hasPermit
:
false
,
// 客服号是否开启会话内容存档权限
}
}
}
,
}
,
computed
:
{
computed
:
{
...
mapState
(
'game'
,
[
...
mapState
(
'game'
,
[
'accountSelect'
,
'accountSelect'
,
'gameUserInfo'
,
'gameUserInfo'
,
'bindGameUserList'
,
'bindGameUserList'
,
'viewLoading'
'viewLoading'
]),
]),
...
mapState
(
'user'
,
[
'cser_info'
,
'cser_id'
,
'cser_name'
,
'corp_id'
,
'external_userid'
,
'userid'
,
'client_online_status'
,
'token'
]),
...
mapState
(
'user'
,
[
'cser_info'
,
'cser_id'
,
'cser_name'
,
'corp_id'
,
'external_userid'
,
'userid'
,
'client_online_status'
,
'token'
]),
// 客服状态文本
// 客服状态文本
clientStatusText
()
{
clientStatusText
()
{
const
statusMap
=
{
const
statusMap
=
{
'online'
:
'在线'
,
'online'
:
'在线'
,
'offline'
:
'离线'
,
'offline'
:
'离线'
,
'rest'
:
'休息中'
'rest'
:
'休息中'
}
}
return
statusMap
[
this
.
client_online_status
]
||
'未知'
return
statusMap
[
this
.
client_online_status
]
||
'未知'
}
,
}
,
// 客服休息状态:online上线 offline下线 rest休息中
// 客服休息状态:online上线 offline下线 rest休息中
clientStatus
()
{
clientStatus
()
{
return
this
.
client_online_status
return
this
.
client_online_status
}
,
}
,
}
,
}
,
mixins
:
[
watchMember
],
mixins
:
[
watchMember
],
mounted
()
{
mounted
()
{
// 初始化企业微信SDK
// 初始化企业微信SDK
this
.
initializeWecom
()
this
.
initializeWecom
()
// 获取客服状态和相关信息
// 获取客服状态和相关信息
if
(
this
.
cser_id
&&
this
.
token
)
{
if
(
this
.
cser_id
&&
this
.
token
)
{
this
.
getInitialData
()
this
.
getInitialData
()
}
}
}
,
}
,
methods
:
{
methods
:
{
...
mapMutations
(
'game'
,
[
'set_accountSelect'
]),
...
mapMutations
(
'game'
,
[
'set_accountSelect'
]),
...
mapActions
(
'user'
,
[
'initWecom'
]),
...
mapActions
(
'user'
,
[
'initWecom'
]),
// 初始化企业微信SDK
// 初始化企业微信SDK
async
initializeWecom
()
{
async
initializeWecom
()
{
try
{
try
{
...
@@ -303,8 +241,8 @@ import { getToken,removeToken } from '@/utils/auth'
...
@@ -303,8 +241,8 @@ import { getToken,removeToken } from '@/utils/auth'
console
.
error
(
'❌ 企业微信 SDK 初始化失败:'
,
error
)
console
.
error
(
'❌ 企业微信 SDK 初始化失败:'
,
error
)
}
}
}
,
}
,
logout
(){
logout
()
{
if
(
this
.
client_online_status
===
'rest'
)
{
if
(
this
.
client_online_status
===
'rest'
)
{
this
.
$message
({
this
.
$message
({
type
:
'error'
,
type
:
'error'
,
message
:
'当前客服号处于休息状态,不能下线'
message
:
'当前客服号处于休息状态,不能下线'
...
@@ -318,58 +256,60 @@ import { getToken,removeToken } from '@/utils/auth'
...
@@ -318,58 +256,60 @@ import { getToken,removeToken } from '@/utils/auth'
}
).
then
(()
=>
{
}
).
then
(()
=>
{
this
.
userLogout
()
this
.
userLogout
()
}
).
catch
(()
=>
{
}
).
catch
(()
=>
{
this
.
$message
({
this
.
$message
({
type
:
'info'
,
type
:
'info'
,
message
:
'已取消'
message
:
'已取消'
}
)
}
)
}
)
}
)
}
,
}
,
async
userLogout
(){
async
userLogout
()
{
const
data
=
{
const
data
=
{
userid
:
this
.
userid
,
userid
:
this
.
userid
,
}
}
const
res
=
await
logout
(
data
)
const
res
=
await
logout
(
data
)
if
(
res
.
status_code
===
1
)
{
if
(
res
.
status_code
===
1
)
{
this
.
$message
({
this
.
$message
({
type
:
'success'
,
type
:
'success'
,
message
:
'下线成功'
message
:
'下线成功'
}
)
}
)
removeToken
()
removeToken
()
window
.
location
.
href
=
window
.
location
.
origin
+
'/company_app/index.html?corp_id='
+
this
.
corp_id
Cookies
.
clear
()
}
else
{
window
.
location
.
href
=
window
.
location
.
origin
+
'/company_app/index.html?corp_id='
+
this
.
corp_id
}
else
{
this
.
$message
({
this
.
$message
({
type
:
'error'
,
type
:
'error'
,
message
:
'下线失败'
message
:
'下线失败'
}
)
}
)
}
}
}
,
}
,
// 获取初始数据
// 获取初始数据
async
getInitialData
()
{
async
getInitialData
()
{
try
{
try
{
// 1. 获取客服休息状态
// 1. 获取客服休息状态
const
statusRes
=
await
getClientStatus
()
const
statusRes
=
await
getClientStatus
()
if
(
statusRes
.
status_code
===
1
)
{
if
(
statusRes
.
status_code
===
1
)
{
if
(
statusRes
.
data
.
client_online_status
===
'offline'
)
{
if
(
statusRes
.
data
.
client_online_status
===
'offline'
)
{
removeToken
()
removeToken
()
window
.
location
.
href
=
window
.
location
.
origin
+
'/company_app/index.html?corp_id='
+
this
.
corp_id
window
.
location
.
href
=
window
.
location
.
origin
+
'/company_app/index.html?corp_id='
+
this
.
corp_id
}
}
this
.
$store
.
commit
(
'user/set_client_online_status'
,
statusRes
.
data
.
client_online_status
)
this
.
$store
.
commit
(
'user/set_client_online_status'
,
statusRes
.
data
.
client_online_status
)
}
}
// 2. 同步智能标签
// 2. 同步智能标签
this
.
syncIntelligentTags
()
this
.
syncIntelligentTags
()
// 3. 检查用户是否同意聊天内容存档
// 3. 检查用户是否同意聊天内容存档
this
.
checkAgreeStatus
()
this
.
checkAgreeStatus
()
// 4. 检查客服号是否开启会话内容存档
// 4. 检查客服号是否开启会话内容存档
this
.
checkPermitStatus
()
this
.
checkPermitStatus
()
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
error
(
'获取初始数据失败:'
,
error
)
console
.
error
(
'获取初始数据失败:'
,
error
)
}
}
}
,
}
,
// 同步智能标签
// 同步智能标签
async
syncIntelligentTags
()
{
async
syncIntelligentTags
()
{
try
{
try
{
...
@@ -383,7 +323,7 @@ import { getToken,removeToken } from '@/utils/auth'
...
@@ -383,7 +323,7 @@ import { getToken,removeToken } from '@/utils/auth'
console
.
error
(
'智能标签同步失败:'
,
error
)
console
.
error
(
'智能标签同步失败:'
,
error
)
}
}
}
,
}
,
// 检查用户是否同意聊天内容存档
// 检查用户是否同意聊天内容存档
async
checkAgreeStatus
()
{
async
checkAgreeStatus
()
{
try
{
try
{
...
@@ -398,7 +338,7 @@ import { getToken,removeToken } from '@/utils/auth'
...
@@ -398,7 +338,7 @@ import { getToken,removeToken } from '@/utils/auth'
console
.
error
(
'检查用户同意状态失败:'
,
error
)
console
.
error
(
'检查用户同意状态失败:'
,
error
)
}
}
}
,
}
,
// 检查客服号是否开启会话内容存档
// 检查客服号是否开启会话内容存档
async
checkPermitStatus
()
{
async
checkPermitStatus
()
{
try
{
try
{
...
@@ -412,7 +352,7 @@ import { getToken,removeToken } from '@/utils/auth'
...
@@ -412,7 +352,7 @@ import { getToken,removeToken } from '@/utils/auth'
console
.
error
(
'检查客服权限失败:'
,
error
)
console
.
error
(
'检查客服权限失败:'
,
error
)
}
}
}
,
}
,
// 开始休息
// 开始休息
async
handleStartRest
()
{
async
handleStartRest
()
{
try
{
try
{
...
@@ -428,7 +368,7 @@ import { getToken,removeToken } from '@/utils/auth'
...
@@ -428,7 +368,7 @@ import { getToken,removeToken } from '@/utils/auth'
this
.
$message
.
error
(
'开始休息失败'
)
this
.
$message
.
error
(
'开始休息失败'
)
}
}
}
,
}
,
// 结束休息
// 结束休息
async
handleFinishRest
()
{
async
handleFinishRest
()
{
try
{
try
{
...
@@ -444,7 +384,7 @@ import { getToken,removeToken } from '@/utils/auth'
...
@@ -444,7 +384,7 @@ import { getToken,removeToken } from '@/utils/auth'
this
.
$message
.
error
(
'结束休息失败'
)
this
.
$message
.
error
(
'结束休息失败'
)
}
}
}
,
}
,
// 发送评价
// 发送评价
async
handleSendComment
()
{
async
handleSendComment
()
{
try
{
try
{
...
@@ -453,7 +393,7 @@ import { getToken,removeToken } from '@/utils/auth'
...
@@ -453,7 +393,7 @@ import { getToken,removeToken } from '@/utils/auth'
external_userid
:
this
.
external_userid
,
external_userid
:
this
.
external_userid
,
userid
:
this
.
userid
userid
:
this
.
userid
}
)
}
)
if
(
res
.
status_code
===
1
&&
res
.
data
.
news
)
{
if
(
res
.
status_code
===
1
&&
res
.
data
.
news
)
{
// 使用企业微信JSSDK发送评价
// 使用企业微信JSSDK发送评价
const
result
=
await
sendChatMessage
(
res
.
data
.
news
,
'link'
)
const
result
=
await
sendChatMessage
(
res
.
data
.
news
,
'link'
)
...
@@ -470,12 +410,12 @@ import { getToken,removeToken } from '@/utils/auth'
...
@@ -470,12 +410,12 @@ import { getToken,removeToken } from '@/utils/auth'
this
.
$message
.
error
(
'发送评价失败'
)
this
.
$message
.
error
(
'发送评价失败'
)
}
}
}
,
}
,
memberChange
()
{
memberChange
()
{
this
.
requestBindUser
()
this
.
requestBindUser
()
}
,
}
,
// 解绑确认
// 解绑确认
zyouUnBindConfirm
()
{
zyouUnBindConfirm
()
{
this
.
$confirm
(
'确定要解绑当前账号么?'
,
'确认提示'
,
{
this
.
$confirm
(
'确定要解绑当前账号么?'
,
'确认提示'
,
{
confirmButtonText
:
'确定'
,
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
cancelButtonText
:
'取消'
,
...
@@ -514,12 +454,12 @@ import { getToken,removeToken } from '@/utils/auth'
...
@@ -514,12 +454,12 @@ import { getToken,removeToken } from '@/utils/auth'
if
(
res
.
status_code
==
1
)
{
if
(
res
.
status_code
==
1
)
{
this
.
$message
.
success
(
res
.
msg
)
this
.
$message
.
success
(
res
.
msg
)
const
index
=
this
.
bindGameUserList
.
findIndex
(
item
=>
item
.
member_id
==
this
.
accountSelect
)
const
index
=
this
.
bindGameUserList
.
findIndex
(
item
=>
item
.
member_id
==
this
.
accountSelect
)
this
.
bindGameUserList
.
splice
(
index
,
1
)
this
.
bindGameUserList
.
splice
(
index
,
1
)
this
.
set_accountSelect
(
this
.
bindGameUserList
[
0
].
member_id
)
this
.
set_accountSelect
(
this
.
bindGameUserList
[
0
].
member_id
)
}
}
}
)
}
)
}
,
}
,
// 修改密码 之前是客服手动设置密码 现在改成系统自动设置密码
// 修改密码 之前是客服手动设置密码 现在改成系统自动设置密码
autoResetPassword
()
{
autoResetPassword
()
{
this
.
$confirm
(
'确认重置密码吗?密码重置后玩家将无法登录,请谨慎操作!'
,
'重置密码'
,
{
this
.
$confirm
(
'确认重置密码吗?密码重置后玩家将无法登录,请谨慎操作!'
,
'重置密码'
,
{
confirmButtonText
:
'确定'
,
confirmButtonText
:
'确定'
,
...
@@ -542,12 +482,12 @@ import { getToken,removeToken } from '@/utils/auth'
...
@@ -542,12 +482,12 @@ import { getToken,removeToken } from '@/utils/auth'
}
)
}
)
}
)
}
)
}
,
}
,
// 修改手机号
// 修改手机号
changePhoneClick
()
{
changePhoneClick
()
{
this
.
changePhone
=
true
this
.
changePhone
=
true
}
,
}
,
// 关联客服
// 关联客服
relationKfh
()
{
relationKfh
()
{
const
username
=
this
.
bindGameUserList
.
find
(
const
username
=
this
.
bindGameUserList
.
find
(
(
item
)
=>
item
.
value
==
this
.
accountSelect
(
item
)
=>
item
.
value
==
this
.
accountSelect
)
)
...
@@ -564,20 +504,20 @@ import { getToken,removeToken } from '@/utils/auth'
...
@@ -564,20 +504,20 @@ import { getToken,removeToken } from '@/utils/auth'
}
}
}
)
}
)
}
,
}
,
// 误操作处理
// 误操作处理
errorHandle
()
{
errorHandle
()
{
this
.
$emit
(
'error-handle'
)
this
.
$emit
(
'error-handle'
)
}
,
}
,
// 编辑备注
// 编辑备注
editRemark
()
{
editRemark
()
{
this
.
showInputRemark
=
true
this
.
showInputRemark
=
true
this
.
showInputRemarkValue
=
this
.
chatUserDetails
.
remark
||
this
.
chatUserDetails
.
name
this
.
showInputRemarkValue
=
this
.
chatUserDetails
.
remark
||
this
.
chatUserDetails
.
name
this
.
$nextTick
(()
=>
{
this
.
$nextTick
(()
=>
{
// document.querySelector('.showInputRemarkInput input').focus()
// document.querySelector('.showInputRemarkInput input').focus()
}
)
}
)
}
,
}
,
// 处理备注输入
// 处理备注输入
handleInputRemark
(
val
)
{
handleInputRemark
(
val
)
{
this
.
showInputRemark
=
false
this
.
showInputRemark
=
false
this
.
chatUserDetails
.
remark
=
this
.
showInputRemarkValue
this
.
chatUserDetails
.
remark
=
this
.
showInputRemarkValue
const
data
=
{
const
data
=
{
...
@@ -599,33 +539,33 @@ import { getToken,removeToken } from '@/utils/auth'
...
@@ -599,33 +539,33 @@ import { getToken,removeToken } from '@/utils/auth'
}
}
}
)
}
)
}
,
}
,
// 显示自定义列输入
// 显示自定义列输入
inputShow
(
item
,
index
)
{
inputShow
(
item
,
index
)
{
this
.
showInput
=
true
this
.
showInput
=
true
this
.
inputIndex
=
index
this
.
inputIndex
=
index
this
.
showInputValue
=
item
.
value
this
.
showInputValue
=
item
.
value
this
.
$nextTick
(()
=>
{
this
.
$nextTick
(()
=>
{
document
.
querySelectorAll
(
'input'
)[
0
].
focus
()
document
.
querySelectorAll
(
'input'
)[
0
].
focus
()
}
)
}
)
}
,
}
,
// 处理自定义列输入
// 处理自定义列输入
handleInput
(
item
,
index
)
{
handleInput
(
item
,
index
)
{
this
.
$emit
(
'update-custom-column'
,
{
this
.
$emit
(
'update-custom-column'
,
{
item
,
item
,
index
,
index
,
value
:
this
.
showInputValue
value
:
this
.
showInputValue
}
)
}
)
this
.
showInput
=
false
this
.
showInput
=
false
}
,
}
,
// 编辑标签
// 编辑标签
editTags
()
{
editTags
()
{
this
.
showTag
=
true
this
.
showTag
=
true
}
,
}
,
// 处理评估变更
// 处理评估变更
changeAppraisal
(
val
)
{
changeAppraisal
(
val
)
{
this
.
change_appraisal
=
val
this
.
change_appraisal
=
val
}
,
}
,
// 选择的标签
// 选择的标签
selectTags
(
data
,
is_tag_sync
)
{
selectTags
(
data
,
is_tag_sync
)
{
this
.
chatUserDetails
.
tag_group
=
data
this
.
chatUserDetails
.
tag_group
=
data
const
params
=
{
const
params
=
{
...
@@ -638,75 +578,86 @@ import { getToken,removeToken } from '@/utils/auth'
...
@@ -638,75 +578,86 @@ import { getToken,removeToken } from '@/utils/auth'
}
}
this
.
editUserInfo
(
params
)
this
.
editUserInfo
(
params
)
}
,
}
,
}
}
}
}
<
/script
>
<
/script
>
<
style
lang
=
"scss"
scoped
>
<
style
lang
=
"scss"
scoped
>
.
info
-
tab
-
content
{
.
info
-
tab
-
content
{
width
:
100
%
;
width
:
100
%
;
height
:
100
%
;
height
:
100
%
;
background
:
#
fff
;
background
:
#
fff
;
}
}
.
userDetailsPanel
{
.
userDetailsPanel
{
width
:
100
%
;
width
:
100
%
;
height
:
100
%
;
height
:
100
%
;
background
-
color
:
#
fff
;
background
-
color
:
#
fff
;
border
-
radius
:
4
px
;
border
-
radius
:
4
px
;
overflow
:
hidden
;
overflow
:
hidden
;
.
warnText
{
width
:
100
%
;
.
warnText
{
height
:
auto
;
width
:
100
%
;
height
:
auto
;
font
-
weight
:
600
;
font
-
weight
:
600
;
font
-
size
:
18
px
;
font
-
size
:
18
px
;
p
{
p
{
color
:
#
F56C6C
;
color
:
#
F56C6C
;
line
-
height
:
25
px
;
line
-
height
:
25
px
;
}
}
}
}
.
cser_name
{
.
cser_name
{
font
-
size
:
14
px
;
font
-
size
:
14
px
;
margin
-
bottom
:
10
px
;
margin
-
bottom
:
10
px
;
}
}
.
cser_status
{
.
cser_status
{
display
:
flex
;
display
:
flex
;
align
-
items
:
center
;
align
-
items
:
center
;
justify
-
content
:
space
-
between
;
justify
-
content
:
space
-
between
;
margin
-
bottom
:
10
px
;
margin
-
bottom
:
10
px
;
font
-
size
:
14
px
;
font
-
size
:
14
px
;
.
status
-
actions
{
.
status
-
actions
{
display
:
flex
;
display
:
flex
;
gap
:
10
px
;
gap
:
10
px
;
}
}
}
}
.
archive
-
status
{
.
archive
-
status
{
margin
-
bottom
:
15
px
;
margin
-
bottom
:
15
px
;
padding
:
8
px
;
padding
:
8
px
;
background
-
color
:
#
f8f8f8
;
background
-
color
:
#
f8f8f8
;
border
-
radius
:
4
px
;
border
-
radius
:
4
px
;
font
-
size
:
14
px
;
font
-
size
:
14
px
;
p
{
p
{
margin
:
5
px
0
;
margin
:
5
px
0
;
color
:
#
F56C6C
;
color
:
#
F56C6C
;
font
-
weight
:
600
;
font
-
weight
:
600
;
}
}
}
}
.
detailsTitle
{
.
detailsTitle
{
height
:
50
px
;
height
:
50
px
;
padding
:
0
20
px
;
padding
:
0
20
px
;
border
-
bottom
:
1
px
solid
#
eee
;
border
-
bottom
:
1
px
solid
#
eee
;
p
{
p
{
font
-
size
:
16
px
;
font
-
size
:
16
px
;
font
-
weight
:
600
;
font
-
weight
:
600
;
}
}
}
}
.
warnText
{
width
:
100
%
;
.
warnText
{
height
:
auto
;
width
:
100
%
;
height
:
auto
;
font
-
weight
:
600
;
font
-
weight
:
600
;
font
-
size
:
18
px
;
font
-
size
:
18
px
;
margin
-
bottom
:
10
px
;
margin
-
bottom
:
10
px
;
p
{
p
{
color
:
#
F56C6C
;
color
:
#
F56C6C
;
line
-
height
:
25
px
;
line
-
height
:
25
px
;
}
}
...
@@ -717,6 +668,7 @@ import { getToken,removeToken } from '@/utils/auth'
...
@@ -717,6 +668,7 @@ import { getToken,removeToken } from '@/utils/auth'
height
:
100
%
;
height
:
100
%
;
overflow
-
y
:
auto
;
overflow
-
y
:
auto
;
overflow
-
x
:
hidden
;
overflow
-
x
:
hidden
;
.
item
{
.
item
{
margin
-
bottom
:
15
px
;
margin
-
bottom
:
15
px
;
position
:
relative
;
position
:
relative
;
...
@@ -740,10 +692,11 @@ import { getToken,removeToken } from '@/utils/auth'
...
@@ -740,10 +692,11 @@ import { getToken,removeToken } from '@/utils/auth'
}
}
.
noBind
{
.
noBind
{
color
:
#
3491
FA
;
color
:
#
3491
FA
;
cursor
:
pointer
;
cursor
:
pointer
;
margin
-
right
:
10
px
;
margin
-
right
:
10
px
;
}
}
.
icon
{
.
icon
{
cursor
:
pointer
;
cursor
:
pointer
;
margin
-
left
:
10
px
;
margin
-
left
:
10
px
;
...
@@ -753,8 +706,10 @@ import { getToken,removeToken } from '@/utils/auth'
...
@@ -753,8 +706,10 @@ import { getToken,removeToken } from '@/utils/auth'
.
tags
{
.
tags
{
max
-
width
:
200
px
;
max
-
width
:
200
px
;
.
tagsItem
{
.
tagsItem
{
margin
-
bottom
:
5
px
;
margin
-
bottom
:
5
px
;
.
tag
{
.
tag
{
background
-
color
:
#
f5f5f5
;
background
-
color
:
#
f5f5f5
;
color
:
#
666
;
color
:
#
666
;
...
@@ -767,6 +722,7 @@ import { getToken,removeToken } from '@/utils/auth'
...
@@ -767,6 +722,7 @@ import { getToken,removeToken } from '@/utils/auth'
}
}
}
}
}
}
.
item
:
hover
.
icon
{
.
item
:
hover
.
icon
{
display
:
block
;
display
:
block
;
}
}
...
@@ -820,7 +776,7 @@ import { getToken,removeToken } from '@/utils/auth'
...
@@ -820,7 +776,7 @@ import { getToken,removeToken } from '@/utils/auth'
display
:
flex
;
display
:
flex
;
flex
-
wrap
:
wrap
;
flex
-
wrap
:
wrap
;
max
-
width
:
200
px
;
max
-
width
:
200
px
;
.
tag
-
item
{
.
tag
-
item
{
background
-
color
:
#
f5f5f5
;
background
-
color
:
#
f5f5f5
;
color
:
#
666
;
color
:
#
666
;
...
@@ -836,19 +792,20 @@ import { getToken,removeToken } from '@/utils/auth'
...
@@ -836,19 +792,20 @@ import { getToken,removeToken } from '@/utils/auth'
display
:
flex
;
display
:
flex
;
flex
-
direction
:
column
;
flex
-
direction
:
column
;
max
-
width
:
300
px
;
max
-
width
:
300
px
;
.
group
-
item
{
.
group
-
item
{
display
:
flex
;
display
:
flex
;
flex
-
wrap
:
wrap
;
flex
-
wrap
:
wrap
;
margin
-
bottom
:
8
px
;
margin
-
bottom
:
8
px
;
padding
-
bottom
:
8
px
;
padding
-
bottom
:
8
px
;
border
-
bottom
:
1
px
dashed
#
eee
;
border
-
bottom
:
1
px
dashed
#
eee
;
&
:
last
-
child
{
&
:
last
-
child
{
margin
-
bottom
:
0
;
margin
-
bottom
:
0
;
padding
-
bottom
:
0
;
padding
-
bottom
:
0
;
border
-
bottom
:
none
;
border
-
bottom
:
none
;
}
}
.
tag
-
item
{
.
tag
-
item
{
background
-
color
:
#
f5f5f5
;
background
-
color
:
#
f5f5f5
;
color
:
#
666
;
color
:
#
666
;
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论