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 个修改的文件
包含
102 行增加
和
146 行删除
+102
-146
vipTools.vue
src/views/components/quickSendGame/vipTools.vue
+1
-2
Info.vue
src/views/userInfo/components/Info.vue
+101
-144
没有找到文件。
src/views/components/quickSendGame/vipTools.vue
浏览文件 @
6cc46e07
...
...
@@ -19,8 +19,7 @@
</div>
<div
class=
"rowFlex columnCenter spaceBetween gameCodeTitle"
@
click=
"showGameCode = !showGameCode"
>
<p
class=
"rowFlex columnCenter spaceBetween"
>
<img
src=
"@/assets/icon/svg/gift.svg"
alt=
"gift"
style=
"width: 16px;height: 16px;margin-right: 5px;margin-top: -2px;"
>
<svg-icon
icon-class=
"gift"
style=
"font-size:20px;margin-right: 5px;margin-top: -2px;"
></svg-icon>
<span
class=
"giftCode"
>
礼包码
</span>
</p>
<i
:class=
"showGameCode ? 'el-icon-arrow-right' : 'el-icon-arrow-down'"
></i>
...
...
src/views/userInfo/components/Info.vue
浏览文件 @
6cc46e07
<
template
>
<div
class=
"info-tab-content"
>
<div
class=
"userDetailsPanel columnFlex"
>
<div
class=
"userDetailsPanel columnFlex"
>
<div
class=
"content"
v-loading=
"viewLoading"
>
<div
v-if=
"chatUserDetails.is_phishing_account==
1"
class=
"warnText"
>
<div
v-if=
"chatUserDetails.is_phishing_account ==
1"
class=
"warnText"
>
<p>
高风险玩家,请立即通知组长!!!!
</p>
<p>
①千万不能推转游!!不要发送违禁词汇!!不要发送礼包和告知任何礼包信息!!
</p>
<p>
②不能以任何形式推送APP/网页链接,也不可承认有APP/网页端口!!
</p>
</div>
<div
v-if=
"change_appraisal"
class=
"warnText"
>
<div
v-if=
"change_appraisal"
class=
"warnText"
>
<p>
钓鱼号 禁止转端通知组长!
</p>
</div>
<div
v-else-if=
"gameUserInfo.exp_ip"
class=
"warnText"
>
<div
v-else-if=
"gameUserInfo.exp_ip"
class=
"warnText"
>
<p>
高风险用户,禁止转端 !!!
</p>
</div>
<div
class=
"cser_info"
>
...
...
@@ -28,50 +20,40 @@
<!--
添加客服状态显示及按钮
-->
<
div
class
=
"cser_status"
>
<
div
class
=
"status-actions"
>
<
el
-
button
type
=
"danger"
v
-
if
=
"clientStatus !== 'offline'"
style
=
"margin-left: 0px;"
size
=
"mini"
@
click
=
"logout"
>
下线
<
/el-button
>
<
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
-
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
-
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
>
<
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
>
<
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
>
<
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"
>
<
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
>
<
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"
>
<
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
>
...
...
@@ -85,11 +67,7 @@
<
div
class
=
"item rowFlex columnCenter"
>
<
div
class
=
"rowFlex columnCenter"
>
<
span
class
=
"label"
style
=
"min-width: 45px;"
>
备注
:
<
/span
>
<
p
v
-
if
=
"!showInputRemark"
class
=
"text"
style
=
"max-width: 170px;"
>
<
p
v
-
if
=
"!showInputRemark"
class
=
"text"
style
=
"max-width: 170px;"
>
{{
chatUserDetails
.
remark
&&
chatUserDetails
.
remark
!=
""
?
chatUserDetails
.
remark
...
...
@@ -97,16 +75,9 @@
}}
<
/p
>
<
/div
>
<
el
-
input
v
-
if
=
"showInputRemark"
v
-
model
=
"showInputRemarkValue"
class
=
"showInputRemarkInput"
type
=
"textarea"
@
change
=
"handleInputRemark"
@
blur
=
"showInputRemark = false"
><
/el-input
>
<
i
class
=
"el-icon-edit icon"
style
=
"font-size: 14px"
@
click
=
"editRemark"
><
/i
>
<
el
-
input
v
-
if
=
"showInputRemark"
v
-
model
=
"showInputRemarkValue"
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
>
...
...
@@ -138,59 +109,35 @@
<
/div
>
<
/div> --
>
<!--
游戏业务的账号信息
-->
<
gameDetails
v
-
if
=
"gameUserInfo.username && !viewLoading"
:
chat
-
user
-
details
=
"chatUserDetails"
:
game
-
user
-
info
=
"gameUserInfo"
@
changeAppraisal
=
"changeAppraisal"
/>
<
gameDetails
v
-
if
=
"gameUserInfo.username && !viewLoading"
:
chat
-
user
-
details
=
"chatUserDetails"
:
game
-
user
-
info
=
"gameUserInfo"
@
changeAppraisal
=
"changeAppraisal"
/>
<!--
游戏标签
-->
<
div
class
=
"item rowFlex columnCenter spaceBetween tagsLost"
>
<
div
class
=
"item rowFlex columnCenter spaceBetween tagsLost"
>
<
div
class
=
"rowFlex"
>
<
span
class
=
"label"
>
关联标签
:
<
/span
>
<
div
v
-
if
=
"
<
div
v
-
if
=
"
chatUserDetails.tag_group &&
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"
:
key
=
"indexs"
>
{{
items
.
name
}}
<
/el-tag
>
<!--
如果有多个标签组,显示
+
n
-->
<
el
-
popover
v
-
if
=
"chatUserDetails.tag_group.length > 1"
placement
=
"top"
trigger
=
"hover"
popper
-
class
=
"tag-popover"
>
<
el
-
popover
v
-
if
=
"chatUserDetails.tag_group.length > 1"
placement
=
"top"
trigger
=
"hover"
popper
-
class
=
"tag-popover"
>
<
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
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
>
<
span
slot
=
"reference"
class
=
"tag-more"
>+
{{
chatUserDetails
.
tag_group
.
length
-
1
}}
<
/span
>
<
span
slot
=
"reference"
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
>
<
i
class
=
"el-icon-edit icon"
style
=
"font-size: 14px;margin-right: 10px;"
@
click
=
"editTags"
><
/i
>
<
/div
>
<!--
共享信息
-->
<
shareInfo
:
chat
-
user
-
details
=
"chatUserDetails"
/>
...
...
@@ -198,35 +145,26 @@
<
/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
v
-
if
=
"showTag"
:
show
.
sync
=
"showTag"
:
checkbox
=
"true"
:
check
-
list
=
"chatUserDetails.tag_group || []"
@
submit
=
"selectTags"
/>
<
selectTag
v
-
if
=
"showTag"
:
show
.
sync
=
"showTag"
:
checkbox
=
"true"
:
check
-
list
=
"chatUserDetails.tag_group || []"
@
submit
=
"selectTags"
/>
<
/div
>
<
/template
>
<
script
>
import
{
mapState
,
mapMutations
,
mapActions
}
from
'vuex'
import
gameDetails
from
'./gameInfo/gameUserInfo.vue'
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
watchMember
from
'@/mixins/watchMember'
import
{
autoResetPassword
,
bindUserSelfAdd
}
from
'@/api/game'
import
{
memberBindCser
,
editUser
,
zyouUnBind
}
from
'@/api/works'
import
selectTag
from
'@/components/selectTag.vue'
import
{
getClientStatus
,
remarkSessionIntelTag
,
finishRest
,
client_session_rest
,
checkSingleAgree
,
checkUserPermit
,
sendComment
,
logout
}
from
'@/api/user.js'
import
{
sendChatMessage
}
from
'@/utils/index.js'
import
{
getToken
,
removeToken
}
from
'@/utils/auth'
export
default
{
import
{
autoResetPassword
,
bindUserSelfAdd
}
from
'@/api/game'
import
{
memberBindCser
,
editUser
,
zyouUnBind
}
from
'@/api/works'
import
selectTag
from
'@/components/selectTag.vue'
import
{
getClientStatus
,
remarkSessionIntelTag
,
finishRest
,
client_session_rest
,
checkSingleAgree
,
checkUserPermit
,
sendComment
,
logout
}
from
'@/api/user.js'
import
{
sendChatMessage
}
from
'@/utils/index.js'
import
{
getToken
,
removeToken
}
from
'@/utils/auth'
import
Cookies
from
'js-cookie'
export
default
{
name
:
'info'
,
components
:
{
gameDetails
,
...
...
@@ -246,13 +184,13 @@ import { getToken,removeToken } from '@/utils/auth'
// 备注相关
showInputRemark
:
false
,
showInputRemarkValue
:
''
,
change_appraisal
:
false
,
change_appraisal
:
false
,
// 自定义列相关
showInput
:
false
,
showInputValue
:
''
,
inputIndex
:
-
1
,
changePhone
:
false
,
showTag
:
false
,
changePhone
:
false
,
showTag
:
false
,
// 新增状态数据
agreeStatus
:
''
,
// 用户是否同意聊天内容存档:Agreen同意 Disagree不同意
hasPermit
:
false
,
// 客服号是否开启会话内容存档权限
...
...
@@ -265,7 +203,7 @@ import { getToken,removeToken } from '@/utils/auth'
'bindGameUserList'
,
'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
()
{
const
statusMap
=
{
...
...
@@ -285,7 +223,7 @@ import { getToken,removeToken } from '@/utils/auth'
// 初始化企业微信SDK
this
.
initializeWecom
()
// 获取客服状态和相关信息
if
(
this
.
cser_id
&&
this
.
token
)
{
if
(
this
.
cser_id
&&
this
.
token
)
{
this
.
getInitialData
()
}
}
,
...
...
@@ -303,8 +241,8 @@ import { getToken,removeToken } from '@/utils/auth'
console
.
error
(
'❌ 企业微信 SDK 初始化失败:'
,
error
)
}
}
,
logout
(){
if
(
this
.
client_online_status
===
'rest'
)
{
logout
()
{
if
(
this
.
client_online_status
===
'rest'
)
{
this
.
$message
({
type
:
'error'
,
message
:
'当前客服号处于休息状态,不能下线'
...
...
@@ -324,24 +262,26 @@ import { getToken,removeToken } from '@/utils/auth'
}
)
}
)
}
,
async
userLogout
(){
async
userLogout
()
{
const
data
=
{
userid
:
this
.
userid
,
}
const
res
=
await
logout
(
data
)
if
(
res
.
status_code
===
1
)
{
if
(
res
.
status_code
===
1
)
{
this
.
$message
({
type
:
'success'
,
message
:
'下线成功'
}
)
removeToken
()
window
.
location
.
href
=
window
.
location
.
origin
+
'/company_app/index.html?corp_id='
+
this
.
corp_id
}
else
{
Cookies
.
clear
()
window
.
location
.
href
=
window
.
location
.
origin
+
'/company_app/index.html?corp_id='
+
this
.
corp_id
}
else
{
this
.
$message
({
type
:
'error'
,
message
:
'下线失败'
}
)
}
}
,
// 获取初始数据
...
...
@@ -350,9 +290,9 @@ import { getToken,removeToken } from '@/utils/auth'
// 1. 获取客服休息状态
const
statusRes
=
await
getClientStatus
()
if
(
statusRes
.
status_code
===
1
)
{
if
(
statusRes
.
data
.
client_online_status
===
'offline'
)
{
if
(
statusRes
.
data
.
client_online_status
===
'offline'
)
{
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
)
}
...
...
@@ -514,7 +454,7 @@ import { getToken,removeToken } from '@/utils/auth'
if
(
res
.
status_code
==
1
)
{
this
.
$message
.
success
(
res
.
msg
)
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
)
}
}
)
...
...
@@ -639,40 +579,46 @@ import { getToken,removeToken } from '@/utils/auth'
this
.
editUserInfo
(
params
)
}
,
}
}
<
/script
>
}
<
/script
>
<
style
lang
=
"scss"
scoped
>
.
info
-
tab
-
content
{
.
info
-
tab
-
content
{
width
:
100
%
;
height
:
100
%
;
background
:
#
fff
;
}
.
userDetailsPanel
{
width
:
100
%
;
height
:
100
%
;
background
-
color
:
#
fff
;
border
-
radius
:
4
px
;
overflow
:
hidden
;
.
warnText
{
width
:
100
%
;
height
:
auto
;
.
warnText
{
width
:
100
%
;
height
:
auto
;
font
-
weight
:
600
;
font
-
size
:
18
px
;
p
{
p
{
color
:
#
F56C6C
;
line
-
height
:
25
px
;
}
}
.
cser_name
{
.
cser_name
{
font
-
size
:
14
px
;
margin
-
bottom
:
10
px
;
}
.
cser_status
{
display
:
flex
;
align
-
items
:
center
;
justify
-
content
:
space
-
between
;
margin
-
bottom
:
10
px
;
font
-
size
:
14
px
;
.
status
-
actions
{
display
:
flex
;
gap
:
10
px
;
...
...
@@ -685,28 +631,33 @@ import { getToken,removeToken } from '@/utils/auth'
background
-
color
:
#
f8f8f8
;
border
-
radius
:
4
px
;
font
-
size
:
14
px
;
p
{
margin
:
5
px
0
;
color
:
#
F56C6C
;
font
-
weight
:
600
;
}
}
.
detailsTitle
{
height
:
50
px
;
padding
:
0
20
px
;
border
-
bottom
:
1
px
solid
#
eee
;
p
{
font
-
size
:
16
px
;
font
-
weight
:
600
;
}
}
.
warnText
{
width
:
100
%
;
height
:
auto
;
.
warnText
{
width
:
100
%
;
height
:
auto
;
font
-
weight
:
600
;
font
-
size
:
18
px
;
margin
-
bottom
:
10
px
;
p
{
p
{
color
:
#
F56C6C
;
line
-
height
:
25
px
;
}
...
...
@@ -717,6 +668,7 @@ import { getToken,removeToken } from '@/utils/auth'
height
:
100
%
;
overflow
-
y
:
auto
;
overflow
-
x
:
hidden
;
.
item
{
margin
-
bottom
:
15
px
;
position
:
relative
;
...
...
@@ -740,10 +692,11 @@ import { getToken,removeToken } from '@/utils/auth'
}
.
noBind
{
color
:
#
3491
FA
;
color
:
#
3491
FA
;
cursor
:
pointer
;
margin
-
right
:
10
px
;
}
.
icon
{
cursor
:
pointer
;
margin
-
left
:
10
px
;
...
...
@@ -753,8 +706,10 @@ import { getToken,removeToken } from '@/utils/auth'
.
tags
{
max
-
width
:
200
px
;
.
tagsItem
{
margin
-
bottom
:
5
px
;
.
tag
{
background
-
color
:
#
f5f5f5
;
color
:
#
666
;
...
...
@@ -767,6 +722,7 @@ import { getToken,removeToken } from '@/utils/auth'
}
}
}
.
item
:
hover
.
icon
{
display
:
block
;
}
...
...
@@ -843,6 +799,7 @@ import { getToken,removeToken } from '@/utils/auth'
margin
-
bottom
:
8
px
;
padding
-
bottom
:
8
px
;
border
-
bottom
:
1
px
dashed
#
eee
;
&
:
last
-
child
{
margin
-
bottom
:
0
;
padding
-
bottom
:
0
;
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论