Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
company_app
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
毛细亚
company_app
Commits
e9099ce1
提交
e9099ce1
authored
6月 06, 2025
作者:
毛细亚
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
同步代码
上级
00afd8bc
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
1136 行增加
和
1198 行删除
+1136
-1198
sendGame.vue
src/views/components/quickSendGame/sendGame.vue
+1136
-1198
没有找到文件。
src/views/components/quickSendGame/sendGame.vue
浏览文件 @
e9099ce1
<
template
>
<
template
>
<div
class=
"sendGameContent"
>
<div
class=
"sendGameContent"
>
<div
<div
v-if=
"!disabled && bindGameUserList.length > 0"
class=
"btnRelease"
>
v-if=
"!disabled && bindGameUserList.length > 0"
<div
class=
"btntab"
>
class=
"btnRelease"
<el-radio-group
border
v-model=
"activeName"
class=
"radio-group"
>
>
<el-radio-button
border
label=
"1"
@
click
.
native=
"activeName = '1'"
>
转端
</el-radio-button>
<div
class=
"btntab"
>
<el-radio-button
border
label=
"3"
@
click
.
native=
"recallTabChange"
>
召回
</el-radio-button>
<div
<el-radio-button
border
label=
"2"
@
click
.
native=
"requestRegGameList"
>
转游
</el-radio-button>
class=
"btn rowFlex allCenter"
</el-radio-group>
:class=
"activeName == '1' ? 'btnActive' : ''"
</div>
:type=
"activeName == '1' ? 'primary' : ''"
<div
v-loading=
"contentLoading"
class=
"gameList"
>
@
click=
"activeName = '1'"
<!-- 转端 -->
>
<el-collapse
v-if=
"activeName == '1' && conversionGameList.length > 0"
:disabled=
"disabled"
转端
@
change=
"conversionChangeOld"
>
</div>
<el-collapse-item
v-for=
"(item, index) in conversionGameList"
:key=
"index"
:title=
"item.game_text"
<div
:name=
"item.game_type"
>
class=
"btn rowFlex allCenter"
<div
v-if=
"item.children && item.children.length > 0"
>
:class=
"activeName == '3' ? 'btnActive' : ''"
<div
v-for=
"(items, indexs) in item.children"
:key=
"indexs"
:type=
"activeName == '3' ? 'primary' : ''"
class=
"gameListItem rowFlex columnCenter spaceBetween"
>
@
click=
"recallTabChange"
<p>
{{
items
.
game_name
+
'/'
+
items
.
game_id
}}
</p>
>
<el-popover
placement=
"top"
width=
"160"
trigger=
"hover"
>
召回
<div>
<p
class=
"sendLink"
@
click=
"sendLink(items, item.game_type)"
>
仅发送链接
</p>
<p
class=
"sendLink"
@
click=
"sendPassword(items, item.game_type)"
>
仅发送账号密码
</p>
<p
class=
"sendLink"
@
click=
"sendMessage(items, item.game_type)"
>
发送链接和账号密码
</p>
<p
class=
"sendLink"
@
click=
"sendDownLoadPage(items, item.game_type, index)"
>
发送落地页
</p>
</div>
<el-button
slot=
"reference"
size=
"mini"
:disabled=
"accountSelect == ''"
>
发送
</el-button>
</el-popover>
</div>
</div>
</div>
<div
<div
v-else-if=
"gameLoding"
class=
"channelLoading rowFlex allCenter"
>
class=
"btn rowFlex allCenter"
<i
class=
"el-icon-loading"
></i>
:class=
"activeName == '2' ? 'btnActive' : ''"
<el-button
type=
"text"
>
加载中
</el-button>
:type=
"activeName == '2' ? 'primary' : ''"
@
click=
"requestRegGameList"
>
转游
</div>
</div>
</div>
<div
v-else
class=
"rowFlex allCenter"
>
暂无游戏
</div>
<div
</el-collapse-item>
v-loading=
"contentLoading"
</el-collapse>
class=
"gameList"
<!-- 召回 -->
>
<div
v-else-if=
"activeName == '3' && recallGameList.length > 0"
class=
"collapseContent"
>
<!-- 转端 -->
<!-- v-if="chatUser.task_type && chatUser.task_type == 7"-->
<el-collapse
<el-button
v-if=
'false'
type=
"primary"
style=
"margin-left:50px;"
:loading=
"sendLoading"
v-if=
"activeName == '1' && conversionGameList.length > 0"
@
click=
"sendTaskChannel"
>
根据任务一键发送链接
</el-button>
:disabled=
"disabled"
<el-collapse
:disabled=
"disabled"
@
change=
"recallChange"
>
@
change=
"conversionChangeOld"
<el-collapse-item
v-for=
"(item, index) in recallGameList"
:key=
"index"
:title=
"item.game_text"
>
:name=
"item.game_type"
>
<el-collapse-item
<div
v-if=
"item.children && item.children.length > 0"
>
v-for=
"(item,index) in conversionGameList"
<div
v-for=
"(items, indexs) in item.children"
:key=
"indexs"
:key=
"index"
class=
"gameListItem rowFlex columnCenter spaceBetween"
>
:title=
"item.game_text"
<p>
{{
items
.
game_name
+
'/'
+
items
.
game_id
}}
</p>
:name=
"item.game_type"
<el-button
slot=
"reference"
size=
"mini"
:disabled=
"accountSelect == ''"
>
@
click=
"sendChannel(items)"
>
发送
</el-button>
<div
v-if=
"item.children && item.children.length > 0"
>
<div
v-for=
"(items, indexs) in item.children"
:key=
"indexs"
class=
"gameListItem rowFlex columnCenter spaceBetween"
>
<p>
{{
items
.
game_name
+
'/'
+
items
.
game_id
}}
</p>
<el-popover
placement=
"top"
width=
"160"
trigger=
"hover"
>
<div>
<p
class=
"sendLink"
@
click=
"sendLink(items,item.game_type)"
>
仅发送链接
</p>
<p
class=
"sendLink"
@
click=
"sendPassword(items,item.game_type)"
>
仅发送账号密码
</p>
<p
class=
"sendLink"
@
click=
"sendMessage(items,item.game_type)"
>
发送链接和账号密码
</p>
<p
class=
"sendLink"
@
click=
"sendDownLoadPage(items,item.game_type,index)"
>
发送落地页
</p>
</div>
<el-button
slot=
"reference"
size=
"mini"
:disabled=
"accountSelect == ''"
>
发送
</el-button>
</el-popover>
</div>
</div>
<div
v-else-if=
"gameLoding"
class=
"channelLoading rowFlex allCenter"
>
<i
class=
"el-icon-loading"
></i>
<el-button
type=
"text"
>
加载中
</el-button>
</div>
</div>
<div
v-else
class=
"rowFlex allCenter"
>
暂无游戏
</div>
</el-collapse-item>
</el-collapse>
<!-- 召回 -->
<div
v-else-if=
"activeName == '3' && recallGameList.length > 0"
class=
"collapseContent"
>
<!-- v-if="chatUser.task_type && chatUser.task_type == 7"-->
<el-button
v-if=
'false'
type=
"primary"
style=
"margin-left:50px;"
:loading=
"sendLoading"
@
click=
"sendTaskChannel"
>
根据任务一键发送链接
</el-button>
<el-collapse
:disabled=
"disabled"
@
change=
"recallChange"
>
<el-collapse-item
v-for=
"(item,index) in recallGameList"
:key=
"index"
:title=
"item.game_text"
:name=
"item.game_type"
>
<div
v-if=
"item.children && item.children.length > 0"
>
<div
v-for=
"(items, indexs) in item.children"
:key=
"indexs"
class=
"gameListItem rowFlex columnCenter spaceBetween"
>
<p>
{{
items
.
game_name
+
'/'
+
items
.
game_id
}}
</p>
<el-button
slot=
"reference"
size=
"mini"
:disabled=
"accountSelect == ''"
@
click=
"sendChannel(items)"
>
发送
</el-button>
</div>
</div>
<div
v-else-if=
"gameLoding"
class=
"channelLoading rowFlex allCenter"
>
<i
class=
"el-icon-loading"
></i>
<el-button
type=
"text"
>
加载中
</el-button>
</div>
<div
v-else
class=
"rowFlex allCenter"
>
暂无游戏
</div>
</el-collapse-item>
<!-- 新建渠道链接 -->
</el-collapse>
<div
class=
"createChannel rowFlex allCenter"
>
<span
class=
"label"
>
找不到对应游戏的链接点此
</span>
<el-button
type=
"text"
size=
"medium"
@
click=
"showCreateChannel=true"
>
新建渠道链接
</el-button>
</div>
</div>
</div>
<div
v-else-if=
"gameLoding"
class=
"channelLoading rowFlex allCenter"
>
<!--
<i
class=
"el-icon-loading"
></i>
<el-button
type=
"text"
>
加载中
</el-button>
</div>
<div
v-else
class=
"rowFlex allCenter"
>
暂无游戏
</div>
</el-collapse-item>
<!-- 新建渠道链接 -->
</el-collapse>
<div
class=
"createChannel rowFlex allCenter"
>
<span
class=
"label"
>
找不到对应游戏的链接点此
</span>
<el-button
type=
"text"
size=
"medium"
@
click=
"showCreateChannel = true"
>
新建渠道链接
</el-button>
</div>
</div>
<!--
转游
转游
1.转游 h5 游戏走之前的逻辑发送链接和账号密码
1.转游 h5 游戏走之前的逻辑发送链接和账号密码
2.小游戏 发送的时候 先判断有没有模版的配置消息 如果没有 走之前的逻辑 如果有 获取掌游的背景图和二位那 合成新的图片 发送合成的图片
2.小游戏 发送的时候 先判断有没有模版的配置消息 如果没有 走之前的逻辑 如果有 获取掌游的背景图和二位那 合成新的图片 发送合成的图片
3.安卓或者 IOS 点击发送的时候 先判断是否有配置落地页 如果没有 走之前的发送逻辑 如果有 加入到发送的暂存列表中 加入时 需要判断和列表中已有的游戏是否时同一个项目和主游戏下 如果不是 提示错误 如果是 加入到暂存列表中 获取当前游戏下的渠道 选择渠道信息 发送给掌游后端 安卓或者 IOS 游戏 只能选择一个单选
3.安卓或者 IOS 点击发送的时候 先判断是否有配置落地页 如果没有 走之前的发送逻辑 如果有 加入到发送的暂存列表中 加入时 需要判断和列表中已有的游戏是否时同一个项目和主游戏下 如果不是 提示错误 如果是 加入到暂存列表中 获取当前游戏下的渠道 选择渠道信息 发送给掌游后端 安卓或者 IOS 游戏 只能选择一个单选
-->
-->
<div
v-else-if=
"activeName == '2'"
>
<div
v-else-if=
"activeName == '2'"
>
<el-collapse
<el-collapse
:disabled=
"disabled"
>
:disabled=
"disabled"
<el-input
v-model=
"filterGameText"
placeholder=
"请输入游戏名 按回车搜索"
style=
"margin-top: 10px"
>
@
keydown
.
enter
.
native=
"changeGameText"
@
blur=
"changeGameText"
>
<el-input
<i
slot=
"prefix"
class=
"el-input__icon el-icon-search"
></i>
v-model=
"filterGameText"
</el-input>
placeholder=
"请输入游戏名 按回车搜索"
<el-collapse-item
v-for=
"(item, index) in regGameList"
:key=
"index"
:title=
"item.label"
>
style=
"margin-top: 10px"
<div
v-if=
"regGameList.length > 0"
>
@
keydown
.
enter
.
native=
"changeGameText"
<div
v-for=
"(items, indexs) in item.children"
:key=
"indexs"
@
blur=
"changeGameText"
class=
"gameListItem rowFlex columnCenter spaceBetween"
>
>
<p>
{{
items
.
label
+
"/"
+
items
.
id
}}
</p>
<i
<!--game_type: 1 微信小游戏 2 H5 游戏 3 安卓游戏 4 IOS 游戏 5 抖音小游戏 -->
slot=
"prefix"
<!-- 微信小游戏 安卓游戏 IOS游戏 处理逻辑 -->
class=
"el-input__icon el-icon-search"
<el-popover
v-if=
"items.game_type == 1 || items.game_type == 3 || items.game_type == 4"
></i>
placement=
"top"
trigger=
"click"
>
</el-input>
<p
class=
"sendLink"
@
click=
"sendChannelGame(items, item)"
>
<el-collapse-item
发送链接/渠道二维码
v-for=
"(item, index) in regGameList"
</p>
:key=
"index"
<p
class=
"sendLink"
@
click=
"handleGameType(items, item, item.game_type, index)"
>
:title=
"item.label"
发送落地页
>
</p>
<div
v-if=
"regGameList.length > 0"
>
<div
<el-button
slot=
"reference"
size=
"mini"
:disabled=
"accountSelect == ''"
>
发送
</el-button>
v-for=
"(items, indexs) in item.children"
</el-popover>
:key=
"indexs"
<el-button
v-else
size=
"mini"
:disabled=
"accountSelect == ''"
class=
"gameListItem rowFlex columnCenter spaceBetween"
@
click=
"noH5AndroidIOSGame(items, item)"
>
发送
</el-button>
>
</div>
<p>
{{
items
.
label
+
"/"
+
items
.
id
}}
</p>
</div>
<!--game_type: 1 微信小游戏 2 H5 游戏 3 安卓游戏 4 IOS 游戏 5 抖音小游戏 -->
<!--
<div
<!-- 微信小游戏 安卓游戏 IOS游戏 处理逻辑 -->
<el-popover
v-if=
"items.game_type == 1 || items.game_type == 3 || items.game_type == 4 "
placement=
"top"
trigger=
"click"
>
<p
class=
"sendLink"
@
click=
"sendChannelGame(items,item)"
>
发送链接/渠道二维码
</p>
<p
class=
"sendLink"
@
click=
"handleGameType(items,item,item.game_type,index)"
>
发送落地页
</p>
<el-button
slot=
"reference"
size=
"mini"
:disabled=
"accountSelect == ''"
>
发送
</el-button>
</el-popover>
<el-button
v-else
size=
"mini"
:disabled=
"accountSelect == ''"
@
click=
"noH5AndroidIOSGame(items,item)"
>
发送
</el-button>
</div>
</div>
<!--
<div
class=
"channelLoading rowFlex allCenter"
class=
"channelLoading rowFlex allCenter"
v-else-if=
"gameLoding && false"
v-else-if=
"gameLoding && false"
>
>
<i
class=
"el-icon-loading"
></i>
<i
class=
"el-icon-loading"
></i>
<el-button
type=
"text"
>
加载中
</el-button>
<el-button
type=
"text"
>
加载中
</el-button>
</div>
-->
</div>
-->
<div
<div
v-else
class=
"rowFlex allCenter"
>
暂无游戏
</div>
v-else
class=
"rowFlex allCenter"
</el-collapse-item>
>
暂无游戏
</div>
</el-collapse>
<div
class=
"createChannel rowFlex allCenter"
>
</el-collapse-item>
<span
class=
"label"
>
找不到对应游戏的链接点此
</span>
</el-collapse>
<el-button
type=
"text"
size=
"medium"
@
click=
"showCreateChannel = true"
>
新建渠道链接
</el-button>
<div
class=
"createChannel rowFlex allCenter"
>
<span
class=
"label"
>
找不到对应游戏的链接点此
</span>
<el-button
type=
"text"
size=
"medium"
@
click=
"showCreateChannel=true"
>
新建渠道链接
</el-button>
</div>
</div>
</div>
</div>
</div>
</div>
<div
v-else
>
</div>
<p>
暂未绑定关联账号,请先去绑定账号
</p>
</div>
<!-- 新建渠道链接 -->
<createChannel
v-if=
"showCreateChannel"
:type=
"activeName"
:show=
"showCreateChannel"
:game-user-info=
"gameUserInfo"
@
close=
"showCreateChannel = false"
/>
<sendPage
v-if=
"showSendPage"
:show
.
sync=
"showSendPage"
:game-list=
"conversionGameList"
@
confirm=
"startSendPage"
/>
<!-- 小游戏转游判断 -->
<SendTransWxGame
v-if=
"showWxGameDrawer"
:show
.
sync=
"showWxGameDrawer"
:game-list=
"selectedWxGameList"
:chat-user-info=
"chatUserInfo"
@
close=
"SendTransWxGameClose"
@
confirm=
"handleWxGameConfirm"
/>
<SendTransAppGame
v-if=
"showAppGameDrawer"
:show
.
sync=
"showAppGameDrawer"
:game-list=
"selectedAppGameList"
:chat-user-info=
"chatUserInfo"
@
close=
"SendTransAppGameClose"
@
confirm=
"handleAppGameConfirm"
/>
<!-- 选择发送渠道 -->
<selectChannel
v-if=
"showLayer"
:show
.
sync=
"showLayer"
:chat-user=
"chatUserInfo"
:channel-info-list=
"channelInfoList"
/>
<!-- 如果选择发送的渠道链接只有一个 直接发送 -->
<sendSelectChannel
:show
.
sync=
"showSendChannel"
:chat-user=
"chatUserInfo"
:channel-info-list=
"channelInfoList"
/>
</div>
</div>
</
template
>
<div
v-else
>
<
script
>
<p>
暂未绑定关联账号,请先去绑定账号
</p>
import
{
mapState
,
mapMutations
,
mapActions
}
from
'vuex'
</div>
import
{
<!-- 新建渠道链接 -->
memberExtensionGameList
,
<createChannel
v-if=
"showCreateChannel"
:type=
"activeName"
:show=
"showCreateChannel"
:game-user-info=
"gameUserInfo"
passwardEncryption
,
@
close=
"showCreateChannel = false"
/>
channelList
,
<sendPage
v-if=
"showSendPage"
:show
.
sync=
"showSendPage"
:game-list=
"conversionGameList"
@
confirm=
"startSendPage"
/>
selectSearch
,
<!-- 小游戏转游判断 -->
getTransferRecallGameList
,
<SendTransWxGame
v-if=
"showWxGameDrawer"
:show
.
sync=
"showWxGameDrawer"
:game-list=
"selectedWxGameList"
getGameConfig
,
:chat-user-info=
"chatUserInfo"
@
close=
"SendTransWxGameClose"
@
confirm=
"handleWxGameConfirm"
/>
quickRecallChannelLink
,
<SendTransAppGame
v-if=
"showAppGameDrawer"
:show
.
sync=
"showAppGameDrawer"
:game-list=
"selectedAppGameList"
recallChannelSeq
,
:chat-user-info=
"chatUserInfo"
@
close=
"SendTransAppGameClose"
@
confirm=
"handleAppGameConfirm"
/>
getLandingPageMemberLink
,
<!-- 选择发送渠道 -->
getLandingPageConfig
,
<selectChannel
v-if=
"showLayer"
:show
.
sync=
"showLayer"
:chat-user=
"chatUserInfo"
getMemberTransStatus
:channel-info-list=
"channelInfoList"
/>
}
from
'@/api/game'
<!-- 如果选择发送的渠道链接只有一个 直接发送 -->
import
{
getRecentSendLog
,
markTransScene
,
getZqCserGroup
,
getZqCserWxBelong
,
getMediaId
,
send_log_add
}
from
'@/api/works'
<sendSelectChannel
:show
.
sync=
"showSendChannel"
:chat-user=
"chatUserInfo"
:channel-info-list=
"channelInfoList"
/>
import
{
companyviewConfig
}
from
'@/api/user'
</div>
import
{
throttle
,
throttleStart
,
sendChatMessage
}
from
'@/utils/index'
</
template
>
import
createChannel
from
'./sendGame/createChannel'
<
script
>
import
sendPage
from
'./sendGame/SendTransPage.vue'
import
{
mapState
,
mapMutations
,
mapActions
}
from
'vuex'
import
SendTransWxGame
from
'./sendGame/SendTransWxGame.vue'
import
{
import
SendTransAppGame
from
'./sendGame/SendTransAppGame.vue'
memberExtensionGameList
,
import
selectChannel
from
'./sendGame/selectChannel.vue'
passwardEncryption
,
import
sendSelectChannel
from
'./sendGame/sendSelectChannel.vue'
channelList
,
import
gameLogMixin
from
'@/mixins/gameLogMixin'
selectSearch
,
getTransferRecallGameList
,
export
default
{
getGameConfig
,
mixins
:
[
gameLogMixin
],
quickRecallChannelLink
,
components
:
{
recallChannelSeq
,
createChannel
,
getLandingPageMemberLink
,
sendPage
,
getLandingPageConfig
,
SendTransWxGame
,
getMemberTransStatus
SendTransAppGame
,
}
from
'@/api/game'
selectChannel
,
import
{
getRecentSendLog
,
markTransScene
,
getZqCserGroup
,
getZqCserWxBelong
,
getMediaId
,
send_log_add
}
from
'@/api/works'
sendSelectChannel
import
{
companyviewConfig
}
from
'@/api/user'
},
import
{
throttle
,
throttleStart
,
sendChatMessage
}
from
'@/utils/index'
data
()
{
import
createChannel
from
'./sendGame/createChannel'
return
{
import
sendPage
from
'./sendGame/SendTransPage.vue'
disabled
:
true
,
import
SendTransWxGame
from
'./sendGame/SendTransWxGame.vue'
showLayer
:
false
,
import
SendTransAppGame
from
'./sendGame/SendTransAppGame.vue'
showSendPage
:
false
,
import
selectChannel
from
'./sendGame/selectChannel.vue'
contentLoading
:
false
,
import
sendSelectChannel
from
'./sendGame/sendSelectChannel.vue'
gameLoding
:
false
,
import
gameLogMixin
from
'@/mixins/gameLogMixin'
isReqeustData
:
false
,
recallGameList
:
[],
// 召回游戏列表
export
default
{
conversionGameList
:
[],
// 转端游戏列表
mixins
:
[
gameLogMixin
],
weixin_blongs_id
:
[],
components
:
{
regGameList
:
[],
createChannel
,
allRegGameList
:
[],
sendPage
,
filterGameText
:
''
,
SendTransWxGame
,
channelselectList
:
[],
SendTransAppGame
,
webForm
:
{
selectChannel
,
channel_id
:
''
sendSelectChannel
},
},
sendLoading
:
false
,
data
()
{
belongList
:
[],
// 项目列表
return
{
activeName
:
'1'
,
// 转端 1 转游 2 召回 3
disabled
:
true
,
sendType
:
''
,
// 1 进发送链接 2 仅发送账号密码 3 发送链接和账号密码
showLayer
:
false
,
showCreateChannel
:
false
,
showSendPage
:
false
,
showImageComposer
:
false
,
contentLoading
:
false
,
showWxGameDrawer
:
false
,
gameLoding
:
false
,
showAppGameDrawer
:
false
,
isReqeustData
:
false
,
selectedWxGameList
:
[],
// 微信小程序的选择的游戏
recallGameList
:
[],
// 召回游戏列表
selectedAppGameList
:
[],
// 安卓或者 Ios 选择的游戏
conversionGameList
:
[],
// 转端游戏列表
sendGameInfoSave
:
{},
weixin_blongs_id
:
[],
imageInfo
:
{},
regGameList
:
[],
showLayer
:
false
,
allRegGameList
:
[],
showSendChannel
:
false
,
filterGameText
:
''
,
channelInfoList
:{},
channelselectList
:
[],
transMemberStatus
:
true
webForm
:
{
}
channel_id
:
''
},
mounted
()
{
this
.
initDisable
()
this
.
sendGameInfo
()
},
computed
:
{
...
mapState
(
'game'
,
[
'accountSelect'
,
'bindGameUserList'
,
'chatUserInfo'
,
'gameUserInfo'
,
'send_game_log'
]),
...
mapState
(
'user'
,
[
'userInfo'
,
'corp_id'
])
},
// props: [ 'chatUserInfo', 'chatUser'],
watch
:
{
accountSelect
(
newVal
,
oldVal
)
{
// 切换 w 账号的时候清空 conversionGameList 数据
this
.
conversionGameList
=
[]
this
.
getMemberTransStatus
()
if
(
newVal
&&
newVal
!==
''
&&
this
.
bindGameUserList
.
length
>
0
)
{
this
.
disabled
=
false
}
else
{
this
.
disabled
=
true
}
},
},
activeName
(
newVal
,
oldVal
)
{
sendLoading
:
false
,
if
(
newVal
)
{
belongList
:
[],
// 项目列表
activeName
:
'1'
,
// 转端 1 转游 2 召回 3
}
sendType
:
''
,
// 1 进发送链接 2 仅发送账号密码 3 发送链接和账号密码
showCreateChannel
:
false
,
showImageComposer
:
false
,
showWxGameDrawer
:
false
,
showAppGameDrawer
:
false
,
selectedWxGameList
:
[],
// 微信小程序的选择的游戏
selectedAppGameList
:
[],
// 安卓或者 Ios 选择的游戏
sendGameInfoSave
:
{},
imageInfo
:
{},
showLayer
:
false
,
showSendChannel
:
false
,
channelInfoList
:
{},
transMemberStatus
:
true
}
},
mounted
()
{
this
.
initDisable
()
this
.
sendGameInfo
()
},
computed
:
{
...
mapState
(
'game'
,
[
'accountSelect'
,
'bindGameUserList'
,
'chatUserInfo'
,
'gameUserInfo'
,
'send_game_log'
]),
...
mapState
(
'user'
,
[
'userInfo'
,
'corp_id'
])
},
// props: [ 'chatUserInfo', 'chatUser'],
watch
:
{
accountSelect
(
newVal
,
oldVal
)
{
// 切换 w 账号的时候清空 conversionGameList 数据
this
.
conversionGameList
=
[]
this
.
getMemberTransStatus
()
if
(
newVal
&&
newVal
!==
''
&&
this
.
bindGameUserList
.
length
>
0
)
{
this
.
disabled
=
false
}
else
{
this
.
disabled
=
true
}
}
},
},
methods
:
{
activeName
(
newVal
,
oldVal
)
{
...
mapMutations
(
'game'
,
[
'set_send_game_log'
]),
if
(
newVal
)
{
initDisable
(){
// 切换 w 账号的时候清空 conversionGameList 数据
}
this
.
conversionGameList
=
[]
}
this
.
getMemberTransStatus
()
},
if
(
this
.
accountSelect
&&
this
.
accountSelect
!==
''
&&
this
.
bindGameUserList
.
length
>
0
)
{
methods
:
{
...
mapMutations
(
'game'
,
[
'set_send_game_log'
]),
initDisable
()
{
// 切换 w 账号的时候清空 conversionGameList 数据
this
.
conversionGameList
=
[]
this
.
getMemberTransStatus
()
if
(
this
.
accountSelect
&&
this
.
accountSelect
!==
''
&&
this
.
bindGameUserList
.
length
>
0
)
{
this
.
disabled
=
false
this
.
disabled
=
false
}
else
{
}
else
{
this
.
disabled
=
true
this
.
disabled
=
true
}
}
},
},
channelInfo
(
info
)
{
channelInfo
(
info
)
{
this
.
channelInfoList
=
info
this
.
channelInfoList
=
info
...
@@ -422,899 +263,996 @@
...
@@ -422,899 +263,996 @@
this
.
showLayer
=
true
this
.
showLayer
=
true
}
}
},
},
requestConfig
()
{
requestConfig
()
{
return
new
Promise
((
resolve
,
reject
)
=>
{
return
new
Promise
((
resolve
,
reject
)
=>
{
companyviewConfig
({
corp_id
:
this
.
corp_id
}).
then
((
res
)
=>
{
companyviewConfig
({
corp_id
:
this
.
corp_id
}).
then
((
res
)
=>
{
this
.
weixin_blongs_id
=
res
.
data
.
weixin_blongs_id
this
.
weixin_blongs_id
=
res
.
data
.
weixin_blongs_id
resolve
()
resolve
()
})
})
})
},
})
// 请求当前 W 账号是否符合转端条件 如果不符合 提示 当前w账号不满足转端要求,请联系组长处理
},
async
getMemberTransStatus
()
{
// 请求当前 W 账号是否符合转端条件 如果不符合 提示 当前w账号不满足转端要求,请联系组长处理
if
(
this
.
accountSelect
&&
this
.
accountSelect
!==
''
)
{
async
getMemberTransStatus
()
{
const
res
=
await
getMemberTransStatus
({
member_id
:
this
.
accountSelect
})
if
(
this
.
accountSelect
&&
this
.
accountSelect
!==
''
)
{
if
(
res
.
status_code
==
1
)
{
const
res
=
await
getMemberTransStatus
({
member_id
:
this
.
accountSelect
})
this
.
transMemberStatus
=
res
.
data
.
data
.
allow_trans
||
false
}
}
else
{
this
.
transMemberStatus
=
false
}
},
recallTabChange
()
{
this
.
activeName
=
'3'
this
.
sendGameRecallList
()
},
async
requestGameSendLog
()
{
this
.
filterGameText
=
''
const
res
=
await
getRecentSendLog
()
if
(
res
.
status_code
==
1
)
{
if
(
res
.
status_code
==
1
)
{
if
(
res
.
status_code
==
1
&&
res
.
data
.
length
>
0
)
{
this
.
transMemberStatus
=
res
.
data
.
data
.
allow_trans
||
false
res
.
data
.
map
((
item
)
=>
{
item
.
label
=
item
.
game_name
item
.
id
=
item
.
game_id
})
}
this
.
regGameList
.
unshift
({
label
:
'最近发送'
,
children
:
res
.
data
})
}
}
},
}
else
{
async
sendGameInfo
()
{
this
.
transMemberStatus
=
false
this
.
activeName
=
'1'
}
this
.
conversionGameList
=
[]
},
this
.
recallGameList
=
[]
recallTabChange
()
{
this
.
getMemberTransStatus
()
this
.
activeName
=
'3'
await
this
.
requestConfig
()
this
.
sendGameRecallList
()
this
.
sendGameList
()
},
},
async
requestGameSendLog
()
{
requestRegGameList
()
{
this
.
filterGameText
=
''
this
.
activeName
=
'2'
const
res
=
await
getRecentSendLog
()
if
(
this
.
gameUserInfo
.
main_game_id
||
this
.
gameUserInfo
.
main_game_id
==
0
)
{
if
(
res
.
status_code
==
1
)
{
this
.
contentLoading
=
true
if
(
res
.
status_code
==
1
&&
res
.
data
.
length
>
0
)
{
const
data
=
{
res
.
data
.
map
((
item
)
=>
{
type
:
'gameListWithType'
,
item
.
label
=
item
.
game_name
value
:
''
,
item
.
id
=
item
.
game_id
use_type
:
2
,
game_id
:
this
.
gameUserInfo
.
main_game_id
,
use_user_id
:
this
.
userInfo
.
id
,
weixin_blongs_id
:
this
.
weixin_blongs_id
}
selectSearch
(
data
).
then
((
res
)
=>
{
this
.
contentLoading
=
false
if
(
res
.
status_code
==
1
)
{
// 暂时隐藏快手小游戏
const
ksGameIndex
=
res
.
data
.
data
.
findIndex
(
item
=>
item
.
label
===
'快手小游戏'
)
if
(
ksGameIndex
!==
-
1
)
{
res
.
data
.
data
.
splice
(
ksGameIndex
,
1
)
}
this
.
regGameList
=
res
.
data
.
data
this
.
allRegGameList
=
this
.
regGameList
}
this
.
requestGameSendLog
()
setTimeout
(()
=>
{
this
.
contentLoading
=
false
},
2000
)
})
}
else
{
}
},
onConfirm
()
{
},
// 召回发送渠道
sendChannel
(
items
,
type
)
{
items
.
type
=
3
type
?
this
.
sendType
=
type
:
''
this
.
channelList
(
items
)
},
// 转游发送渠道
sendChannelGame
(
items
,
item
,
type
)
{
console
.
log
(
items
,
'items'
,
item
)
type
?
this
.
sendType
=
type
:
''
const
gameInfo
=
this
.
$clone
(
items
)
gameInfo
.
type
=
2
this
.
channelList
(
gameInfo
)
},
changeGameText
()
{
console
.
log
(
this
.
filterGameText
)
if
(
this
.
filterGameText
.
trim
()
===
''
)
{
this
.
regGameList
=
this
.
allRegGameList
}
else
{
const
list
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
allRegGameList
))
list
.
map
((
item
,
index
)
=>
{
item
.
children
=
item
.
children
.
filter
(
(
items
)
=>
items
.
label
.
indexOf
(
this
.
filterGameText
)
!==
-
1
)
})
})
this
.
regGameList
=
list
}
}
},
this
.
regGameList
.
unshift
({
// 获取渠道列表
label
:
'最近发送'
,
channelList
(
items
)
{
children
:
res
.
data
console
.
log
(
items
,
'items'
)
})
}
},
async
sendGameInfo
()
{
this
.
activeName
=
'1'
this
.
conversionGameList
=
[]
this
.
recallGameList
=
[]
this
.
getMemberTransStatus
()
await
this
.
requestConfig
()
this
.
sendGameList
()
},
requestRegGameList
()
{
this
.
activeName
=
'2'
if
(
this
.
gameUserInfo
.
main_game_id
||
this
.
gameUserInfo
.
main_game_id
==
0
)
{
this
.
contentLoading
=
true
const
data
=
{
const
data
=
{
game_id
:
items
.
game_id
||
items
.
id
,
type
:
'gameListWithType'
,
page_size
:
200
,
value
:
''
,
page
:
1
,
use_type
:
2
,
zq_user_id
:
this
.
userInfo
.
id
,
game_id
:
this
.
gameUserInfo
.
main_game_id
,
weixin_blongs_id
:
items
.
weixin_blongs_id
?
[
items
.
weixin_blongs_id
]
:
this
.
weixin_blongs_id
,
use_user_id
:
this
.
userInfo
.
id
,
request_system
:
'company_wx'
,
weixin_blongs_id
:
this
.
weixin_blongs_id
member_id
:
this
.
accountSelect
,
use_type
:
this
.
activeName
}
}
channelList
(
data
).
then
((
res
)
=>
{
selectSearch
(
data
).
then
((
res
)
=>
{
if
(
res
?.
data
?.
data
?.
data
?.
length
>
0
)
{
// 只有一个的时候自动发送渠道链接
this
.
$emit
(
'channelInfo'
,
{
game_id
:
items
.
game_id
,
use_type
:
this
.
activeName
,
sendType
:
this
.
sendType
,
channelList
:
res
.
data
.
data
.
data
})
this
.
sendGameLog
(
items
)
}
else
{
this
.
$message
.
warning
(
'请到掌游创建运营渠道'
)
}
})
},
showSendGameLayer
()
{
this
.
showLayer
=
true
},
async
sendGameList
()
{
if
(
this
.
conversionGameList
.
length
==
0
)
{
this
.
contentLoading
=
true
// 获取召回转端的游戏列表 user_type: 1 转端 3 召回
const
res
=
await
getGameConfig
({
use_type
:
1
})
this
.
contentLoading
=
false
this
.
contentLoading
=
false
if
(
res
.
status_code
===
1
&&
res
.
data
.
data
.
length
>
0
)
{
if
(
res
.
status_code
==
1
)
{
const
ksGameIndex
=
res
.
data
.
data
.
findIndex
(
item
=>
item
.
game_type
==
6
)
// 暂时隐藏快手小游戏
if
(
ksGameIndex
!=
-
1
)
{
const
ksGameIndex
=
res
.
data
.
data
.
findIndex
(
item
=>
item
.
label
===
'快手小游戏'
)
if
(
ksGameIndex
!==
-
1
)
{
res
.
data
.
data
.
splice
(
ksGameIndex
,
1
)
res
.
data
.
data
.
splice
(
ksGameIndex
,
1
)
this
.
conversionGameList
=
res
.
data
.
data
}
else
{
this
.
conversionGameList
=
res
.
data
.
data
}
}
this
.
regGameList
=
res
.
data
.
data
this
.
allRegGameList
=
this
.
regGameList
}
}
this
.
requestGameSendLog
()
setTimeout
(()
=>
{
setTimeout
(()
=>
{
this
.
contentLoading
=
false
this
.
contentLoading
=
false
},
2000
)
},
2000
)
}
})
},
}
else
{
async
conversionChangeOld
(
value
)
{
console
.
log
(
'请求数据'
,
this
.
conversionGameList
)
}
if
(
this
.
isReqeustData
)
{
},
return
onConfirm
()
{
},
}
// 召回发送渠道
try
{
sendChannel
(
items
,
type
)
{
this
.
isReqeustData
=
true
items
.
type
=
3
this
.
gameLoding
=
true
type
?
this
.
sendType
=
type
:
''
// 使用 Promise.all 并发请求游戏列表数据
this
.
channelList
(
items
)
const
promiseList
=
this
.
conversionGameList
.
map
(
async
(
item
,
index
)
=>
{
},
// 如果已有子项数据则跳过
// 转游发送渠道
if
(
this
.
conversionGameList
[
index
].
children
?.
length
>
0
)
{
sendChannelGame
(
items
,
item
,
type
)
{
return
console
.
log
(
items
,
'items'
,
item
)
}
type
?
this
.
sendType
=
type
:
''
try
{
const
gameInfo
=
this
.
$clone
(
items
)
const
params
=
{
gameInfo
.
type
=
2
member_id
:
this
.
accountSelect
,
this
.
channelList
(
gameInfo
)
type
:
item
.
game_type
},
}
changeGameText
()
{
const
reslist
=
await
memberExtensionGameList
(
params
)
console
.
log
(
this
.
filterGameText
)
if
(
reslist
.
status_code
===
1
)
{
if
(
this
.
filterGameText
.
trim
()
===
''
)
{
// 使用解构赋值简化数据设置
this
.
regGameList
=
this
.
allRegGameList
const
updates
=
{
}
else
{
children
:
reslist
.
data
?.
length
>
0
?
reslist
.
data
:
[],
const
list
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
allRegGameList
))
send_trans_page_id
:
''
,
// 转端要发送的游戏 ID
list
.
map
((
item
,
index
)
=>
{
isReqeustData
:
true
item
.
children
=
item
.
children
.
filter
(
}
(
items
)
=>
items
.
label
.
indexOf
(
this
.
filterGameText
)
!==
-
1
)
Object
.
entries
(
updates
).
forEach
(([
key
,
value
])
=>
{
})
this
.
$set
(
this
.
conversionGameList
[
index
],
key
,
value
)
this
.
regGameList
=
list
})
}
}
},
}
catch
(
error
)
{
// 获取渠道列表
console
.
error
(
`Failed to fetch game list for index
${
index
}
:`
,
error
)
channelList
(
items
)
{
// 设置空数组作为默认值
console
.
log
(
items
,
'items'
)
this
.
$set
(
this
.
conversionGameList
[
index
],
'children'
,
[])
const
data
=
{
}
game_id
:
items
.
game_id
||
items
.
id
,
})
page_size
:
200
,
page
:
1
,
await
Promise
.
all
(
promiseList
)
zq_user_id
:
this
.
userInfo
.
id
,
this
.
handleConversionGameList
()
weixin_blongs_id
:
items
.
weixin_blongs_id
?
[
items
.
weixin_blongs_id
]
:
this
.
weixin_blongs_id
,
}
catch
(
error
)
{
request_system
:
'company_wx'
,
console
.
error
(
'Failed to fetch conversion game lists:'
,
error
)
member_id
:
this
.
accountSelect
,
}
finally
{
use_type
:
this
.
activeName
this
.
gameLoding
=
false
}
this
.
isReqeustData
=
false
channelList
(
data
).
then
((
res
)
=>
{
}
if
(
res
?.
data
?.
data
?.
data
?.
length
>
0
)
{
},
// 只有一个的时候自动发送渠道链接
// 处理转端数据 之前王鑫和冯渊说要隐藏破日开天游戏 至于什么时候放开 没说
this
.
$emit
(
'channelInfo'
,
{
handleConversionGameList
()
{
game_id
:
items
.
game_id
,
if
(
this
.
conversionGameList
.
length
>
0
)
{
use_type
:
this
.
activeName
,
this
.
conversionGameList
.
forEach
((
item
,
index
)
=>
{
sendType
:
this
.
sendType
,
// 隐藏安卓游戏 安卓游戏 game_type: 3
channelList
:
res
.
data
.
data
.
data
if
(
item
.
game_type
===
3
&&
item
.
children
&&
item
.
children
.
length
>
0
)
{
// 过滤掉 game_name 为"破日开天"的数据
const
filteredChildren
=
item
.
children
.
filter
(
child
=>
{
return
child
.
game_name
!==
'破日开天'
&&
child
.
game_name
!==
'英雄霸业'
})
this
.
$set
(
this
.
conversionGameList
[
index
],
'children'
,
filteredChildren
)
}
// 隐藏 IOS 游戏 雄霸天下 有两个包 1 个是 691 一个是 819 王鑫说 暂时先隐藏 691 的功能
if
(
item
.
game_type
===
4
&&
item
.
children
&&
item
.
children
.
length
>
0
)
{
const
filteredChildren
=
item
.
children
.
filter
(
child
=>
{
return
Number
(
child
.
game_id
)
!==
691
})
this
.
$set
(
this
.
conversionGameList
[
index
],
'children'
,
filteredChildren
)
}
})
})
console
.
log
(
this
.
conversionGameList
,
'conversionGameList'
)
this
.
sendGameLog
(
items
)
}
else
{
this
.
$message
.
warning
(
'请到掌游创建运营渠道'
)
}
}
},
})
// 转端展开
},
async
conversionChange
(
value
)
{
showSendGameLayer
()
{
if
(
value
&&
value
.
length
>
0
)
{
this
.
showLayer
=
true
const
gameType
=
value
[
value
.
length
-
1
]
},
const
gameIndex
=
this
.
conversionGameList
.
findIndex
(
item
=>
item
.
game_type
===
gameType
)
async
sendGameList
()
{
if
(
!
this
.
conversionGameList
[
gameIndex
].
children
||
this
.
conversionGameList
[
gameIndex
].
children
.
length
==
0
)
{
if
(
this
.
conversionGameList
.
length
==
0
)
{
this
.
gameLoding
=
true
this
.
contentLoading
=
true
const
params
=
{
// 获取召回转端的游戏列表 user_type: 1 转端 3 召回
page_size
:
200
,
const
res
=
await
getGameConfig
({
use_type
:
1
})
page
:
1
,
this
.
contentLoading
=
false
zq_user_id
:
this
.
userInfo
.
id
,
if
(
res
.
status_code
===
1
&&
res
.
data
.
data
.
length
>
0
)
{
weixin_blongs_id
:
this
.
weixin_blongs_id
,
const
ksGameIndex
=
res
.
data
.
data
.
findIndex
(
item
=>
item
.
game_type
==
6
)
use_type
:
1
,
if
(
ksGameIndex
!=
-
1
)
{
member_id
:
this
.
accountSelect
,
res
.
data
.
data
.
splice
(
ksGameIndex
,
1
)
type
:
this
.
conversionGameList
[
gameIndex
].
game_type
this
.
conversionGameList
=
res
.
data
.
data
}
const
reslist
=
await
getTransferRecallGameList
(
params
)
this
.
gameLoding
=
false
if
(
reslist
.
status_code
===
1
&&
reslist
.
data
.
data
.
length
>
0
)
{
this
.
$set
(
this
.
conversionGameList
[
gameIndex
],
'children'
,
reslist
.
data
.
data
)
}
else
{
this
.
$set
(
this
.
conversionGameList
[
gameIndex
],
'children'
,
[])
}
setTimeout
(()
=>
{
this
.
gameLoding
=
false
},
2000
)
}
else
{
}
else
{
this
.
conversionGameList
=
res
.
data
.
data
}
}
}
}
},
setTimeout
(()
=>
{
// 召回的游戏列表
async
sendGameRecallList
()
{
if
(
this
.
recallGameList
.
length
==
0
)
{
this
.
contentLoading
=
true
const
res
=
await
getGameConfig
({
use_type
:
3
})
this
.
contentLoading
=
false
this
.
contentLoading
=
false
if
(
res
.
status_code
===
1
&&
res
.
data
.
data
.
length
>
0
)
{
},
2000
)
const
ksGameIndex
=
res
.
data
.
data
.
findIndex
(
item
=>
item
.
game_type
==
6
)
}
if
(
ksGameIndex
!==
-
1
)
{
},
res
.
data
.
data
.
splice
(
ksGameIndex
,
1
)
async
conversionChangeOld
(
value
)
{
this
.
recallGameList
=
res
.
data
.
data
console
.
log
(
'请求数据'
,
this
.
conversionGameList
)
}
else
{
if
(
this
.
isReqeustData
)
{
this
.
recallGameList
=
res
.
data
.
data
return
}
}
try
{
this
.
isReqeustData
=
true
this
.
gameLoding
=
true
// 使用 Promise.all 并发请求游戏列表数据
const
promiseList
=
this
.
conversionGameList
.
map
(
async
(
item
,
index
)
=>
{
// 如果已有子项数据则跳过
if
(
this
.
conversionGameList
[
index
].
children
?.
length
>
0
)
{
return
}
}
setTimeout
(()
=>
{
try
{
this
.
contentLoading
=
false
},
2000
)
}
},
// 召回展开
async
recallChange
(
value
)
{
if
(
value
&&
value
.
length
>
0
)
{
const
gameType
=
value
[
value
.
length
-
1
]
const
gameIndex
=
this
.
recallGameList
.
findIndex
(
item
=>
item
.
game_type
===
gameType
)
if
(
!
this
.
recallGameList
[
gameIndex
].
children
||
this
.
recallGameList
[
gameIndex
].
children
.
length
==
0
)
{
this
.
gameLoding
=
true
const
params
=
{
const
params
=
{
// type: 2,
page_size
:
200
,
page
:
1
,
zq_user_id
:
this
.
userInfo
.
id
,
weixin_blongs_id
:
this
.
weixin_blongs_id
,
use_type
:
3
,
member_id
:
this
.
accountSelect
,
member_id
:
this
.
accountSelect
,
type
:
this
.
recallGameList
[
gameIndex
]
.
game_type
type
:
item
.
game_type
}
}
const
reslist
=
await
getTransferRecallGameList
(
params
)
const
reslist
=
await
memberExtensionGameList
(
params
)
this
.
gameLoding
=
false
if
(
reslist
.
status_code
===
1
)
{
if
(
reslist
.
status_code
===
1
&&
reslist
.
data
.
data
.
length
>
0
)
{
// 使用解构赋值简化数据设置
this
.
$set
(
this
.
recallGameList
[
gameIndex
],
'children'
,
reslist
.
data
.
data
)
const
updates
=
{
}
else
{
children
:
reslist
.
data
?.
length
>
0
?
reslist
.
data
:
[],
this
.
$set
(
this
.
recallGameList
[
gameIndex
],
'children'
,
[])
send_trans_page_id
:
''
,
// 转端要发送的游戏 ID
isReqeustData
:
true
}
Object
.
entries
(
updates
).
forEach
(([
key
,
value
])
=>
{
this
.
$set
(
this
.
conversionGameList
[
index
],
key
,
value
)
})
}
}
setTimeout
(()
=>
{
}
catch
(
error
)
{
this
.
gameLoding
=
false
console
.
error
(
`Failed to fetch game list for index
${
index
}
:`
,
error
)
},
2000
)
// 设置空数组作为默认值
}
else
{
this
.
$set
(
this
.
conversionGameList
[
index
],
'children'
,
[])
console
.
log
(
'之前请求过了'
)
}
}
}
})
},
showPopover
()
{
await
Promise
.
all
(
promiseList
)
this
.
showCreateChannel
=
false
this
.
handleConversionGameList
()
}
catch
(
error
)
{
console
.
error
(
'Failed to fetch conversion game lists:'
,
error
)
}
finally
{
this
.
gameLoding
=
false
this
.
isReqeustData
=
false
this
.
isReqeustData
=
false
},
}
handlePopover
()
{
},
this
.
showCreateChannel
=
false
// 处理转端数据 之前王鑫和冯渊说要隐藏破日开天游戏 至于什么时候放开 没说
},
handleConversionGameList
()
{
handleAccount
()
{
if
(
this
.
conversionGameList
.
length
>
0
)
{
if
(
this
.
bindGameUserList
.
length
>
0
)
{
this
.
conversionGameList
.
forEach
((
item
,
index
)
=>
{
const
account
=
this
.
bindGameUserList
.
find
(
// 隐藏安卓游戏 安卓游戏 game_type: 3
(
item
)
=>
item
.
member_id
==
this
.
accountSelect
if
(
item
.
game_type
===
3
&&
item
.
children
&&
item
.
children
.
length
>
0
)
{
)
// 过滤掉 game_name 为"破日开天"的数据
if
(
account
)
{
const
filteredChildren
=
item
.
children
.
filter
(
child
=>
{
return
true
return
child
.
game_name
!==
'破日开天'
&&
child
.
game_name
!==
'英雄霸业'
})
this
.
$set
(
this
.
conversionGameList
[
index
],
'children'
,
filteredChildren
)
}
// 隐藏 IOS 游戏 雄霸天下 有两个包 1 个是 691 一个是 819 王鑫说 暂时先隐藏 691 的功能
if
(
item
.
game_type
===
4
&&
item
.
children
&&
item
.
children
.
length
>
0
)
{
const
filteredChildren
=
item
.
children
.
filter
(
child
=>
{
return
Number
(
child
.
game_id
)
!==
691
})
this
.
$set
(
this
.
conversionGameList
[
index
],
'children'
,
filteredChildren
)
}
})
console
.
log
(
this
.
conversionGameList
,
'conversionGameList'
)
}
},
// 转端展开
async
conversionChange
(
value
)
{
if
(
value
&&
value
.
length
>
0
)
{
const
gameType
=
value
[
value
.
length
-
1
]
const
gameIndex
=
this
.
conversionGameList
.
findIndex
(
item
=>
item
.
game_type
===
gameType
)
if
(
!
this
.
conversionGameList
[
gameIndex
].
children
||
this
.
conversionGameList
[
gameIndex
].
children
.
length
==
0
)
{
this
.
gameLoding
=
true
const
params
=
{
page_size
:
200
,
page
:
1
,
zq_user_id
:
this
.
userInfo
.
id
,
weixin_blongs_id
:
this
.
weixin_blongs_id
,
use_type
:
1
,
member_id
:
this
.
accountSelect
,
type
:
this
.
conversionGameList
[
gameIndex
].
game_type
}
const
reslist
=
await
getTransferRecallGameList
(
params
)
this
.
gameLoding
=
false
if
(
reslist
.
status_code
===
1
&&
reslist
.
data
.
data
.
length
>
0
)
{
this
.
$set
(
this
.
conversionGameList
[
gameIndex
],
'children'
,
reslist
.
data
.
data
)
}
else
{
}
else
{
return
false
this
.
$set
(
this
.
conversionGameList
[
gameIndex
],
'children'
,
[])
}
}
setTimeout
(()
=>
{
this
.
gameLoding
=
false
},
2000
)
}
else
{
}
else
{
return
false
}
},
sendLink
:
throttle
(
function
(
item
,
type
)
{
if
(
!
this
.
transMemberStatus
)
{
this
.
$message
.
warning
(
'当前w账号不满足转端要求,请联系组长处理'
)
return
}
}
console
.
log
(
item
,
'转端发送仅发送链接'
)
}
const
result
=
this
.
handleAccount
()
},
if
(
!
result
)
{
// 召回的游戏列表
this
.
$message
.
warning
(
'请稍后再试'
)
async
sendGameRecallList
()
{
return
false
if
(
this
.
recallGameList
.
length
==
0
)
{
this
.
contentLoading
=
true
const
res
=
await
getGameConfig
({
use_type
:
3
})
this
.
contentLoading
=
false
if
(
res
.
status_code
===
1
&&
res
.
data
.
data
.
length
>
0
)
{
const
ksGameIndex
=
res
.
data
.
data
.
findIndex
(
item
=>
item
.
game_type
==
6
)
if
(
ksGameIndex
!==
-
1
)
{
res
.
data
.
data
.
splice
(
ksGameIndex
,
1
)
this
.
recallGameList
=
res
.
data
.
data
}
else
{
this
.
recallGameList
=
res
.
data
.
data
}
}
}
let
str
=
''
setTimeout
(()
=>
{
if
(
type
==
2
)
{
this
.
contentLoading
=
false
str
=
'网页游戏链接:'
},
2000
)
}
else
if
(
type
==
3
)
{
}
str
=
'安卓游戏链接:'
},
}
else
if
(
type
==
4
)
{
// 召回展开
str
=
'IOS游戏链接:'
async
recallChange
(
value
)
{
if
(
value
&&
value
.
length
>
0
)
{
const
gameType
=
value
[
value
.
length
-
1
]
const
gameIndex
=
this
.
recallGameList
.
findIndex
(
item
=>
item
.
game_type
===
gameType
)
if
(
!
this
.
recallGameList
[
gameIndex
].
children
||
this
.
recallGameList
[
gameIndex
].
children
.
length
==
0
)
{
this
.
gameLoding
=
true
const
params
=
{
// type: 2,
page_size
:
200
,
page
:
1
,
zq_user_id
:
this
.
userInfo
.
id
,
weixin_blongs_id
:
this
.
weixin_blongs_id
,
use_type
:
3
,
member_id
:
this
.
accountSelect
,
type
:
this
.
recallGameList
[
gameIndex
].
game_type
}
const
reslist
=
await
getTransferRecallGameList
(
params
)
this
.
gameLoding
=
false
if
(
reslist
.
status_code
===
1
&&
reslist
.
data
.
data
.
length
>
0
)
{
this
.
$set
(
this
.
recallGameList
[
gameIndex
],
'children'
,
reslist
.
data
.
data
)
}
else
{
this
.
$set
(
this
.
recallGameList
[
gameIndex
],
'children'
,
[])
}
setTimeout
(()
=>
{
this
.
gameLoding
=
false
},
2000
)
}
else
{
}
else
{
console
.
log
(
'之前请求过了'
)
}
}
// const list = [
}
// { msgtype: 'text', text: { content: `${str}${item.url}` }}
},
// ]
showPopover
()
{
this
.
sendChatMessage
(
`
${
str
}${
item
.
url
}
`
,
'text'
)
this
.
showCreateChannel
=
false
this
.
markTransScene
(
type
)
this
.
isReqeustData
=
false
item
.
type
=
1
},
this
.
sendGameLog
(
item
)
handlePopover
()
{
},
500
),
this
.
showCreateChannel
=
false
sendPassword
:
throttle
(
function
(
item
,
type
)
{
},
if
(
!
this
.
transMemberStatus
)
{
handleAccount
()
{
this
.
$message
.
warning
(
'当前w账号不满足转端要求,请联系组长处理'
)
if
(
this
.
bindGameUserList
.
length
>
0
)
{
return
const
account
=
this
.
bindGameUserList
.
find
(
}
(
item
)
=>
item
.
member_id
==
this
.
accountSelect
console
.
log
(
item
,
'转端仅发送账号密码'
)
)
const
result
=
this
.
handleAccount
()
if
(
account
)
{
if
(
!
result
)
{
return
true
this
.
$message
.
warning
(
'请稍后再试'
)
return
false
}
const
username
=
this
.
bindGameUserList
.
find
(
(
items
)
=>
items
.
member_id
==
this
.
accountSelect
).
username
passwardEncryption
({
member_id
:
this
.
accountSelect
})
.
then
((
res
)
=>
{
// const list = [
// {
// msgtype: 'text',
// text: { content: `账号:${username} \n密码:${res.data.encryptPassword}`, key: res.data.key, iv: res.data.iv }
// }
// ]
// this.set_sendSkillMessage(list)
this
.
sendChatMessage
(
`账号:
${
username
}
\n密码:
${
res
.
data
.
encryptPassword
}
`
,
'text'
)
this
.
markTransScene
(
type
)
this
.
sendGameLog
(
item
)
})
.
catch
((
err
)
=>
{
const
list
=
[
{
msgtype
:
'text'
,
text
:
{
content
:
`账号:
${
username
}
`
}}
]
// this.set_sendSkillMessage(list)
this
.
sendChatMessage
(
`账号:
${
username
}
`
,
'text'
)
item
.
type
=
1
this
.
sendGameLog
(
item
)
console
.
log
(
err
)
})
},
500
),
sendMessage
:
throttle
(
function
(
item
,
type
)
{
if
(
!
this
.
transMemberStatus
)
{
this
.
$message
.
warning
(
'当前w账号不满足转端要求,请联系组长处理'
)
return
}
const
result
=
this
.
handleAccount
()
if
(
!
result
)
{
this
.
$message
.
warning
(
'请稍后再试'
)
return
false
}
let
str
=
''
if
(
type
==
2
)
{
str
=
'网页游戏链接:'
}
else
if
(
type
==
3
)
{
str
=
'安卓游戏链接:'
}
else
if
(
type
==
4
)
{
str
=
'IOS游戏链接:'
}
else
{
}
else
{
return
false
}
}
const
username
=
this
.
bindGameUserList
.
find
(
}
else
{
(
items
)
=>
items
.
member_id
==
this
.
accountSelect
return
false
).
username
}
passwardEncryption
({
member_id
:
this
.
accountSelect
})
},
.
then
((
res
)
=>
{
sendLink
:
throttle
(
function
(
item
,
type
)
{
const
list
=
[
if
(
!
this
.
transMemberStatus
)
{
{
this
.
$message
.
warning
(
'当前w账号不满足转端要求,请联系组长处理'
)
msgtype
:
'text'
,
return
text
:
{
}
content
:
`
${
str
}${
item
.
url
}
\n账号:
${
username
}
\n密码:
${
res
.
data
.
encryptPassword
}
`
,
console
.
log
(
item
,
'转端发送仅发送链接'
)
key
:
res
.
data
.
key
,
iv
:
res
.
data
.
iv
const
result
=
this
.
handleAccount
()
}
if
(
!
result
)
{
}
this
.
$message
.
warning
(
'请稍后再试'
)
]
return
false
// this.set_sendSkillMessage(list)
}
this
.
sendChatMessage
(
`
${
str
}${
item
.
url
}
\n账号:
${
username
}
\n密码:
${
res
.
data
.
encryptPassword
}
`
,
'text'
)
let
str
=
''
this
.
markTransScene
(
type
)
if
(
type
==
2
)
{
item
.
type
=
1
str
=
'网页游戏链接:'
this
.
sendGameLog
(
item
)
}
else
if
(
type
==
3
)
{
})
str
=
'安卓游戏链接:'
.
catch
((
err
)
=>
{
}
else
if
(
type
==
4
)
{
const
list
=
[
str
=
'IOS游戏链接:'
{
}
else
{
msgtype
:
'text'
,
}
text
:
{
content
:
`
${
str
}${
item
.
url
}
\n账号:
${
username
}
`
}
// const list = [
// { msgtype: 'text', text: { content: `${str}${item.url}` }}
// ]
this
.
sendChatMessage
(
`
${
str
}${
item
.
url
}
`
,
'text'
)
this
.
markTransScene
(
type
)
item
.
type
=
1
this
.
sendGameLog
(
item
)
},
500
),
sendPassword
:
throttle
(
function
(
item
,
type
)
{
if
(
!
this
.
transMemberStatus
)
{
this
.
$message
.
warning
(
'当前w账号不满足转端要求,请联系组长处理'
)
return
}
console
.
log
(
item
,
'转端仅发送账号密码'
)
const
result
=
this
.
handleAccount
()
if
(
!
result
)
{
this
.
$message
.
warning
(
'请稍后再试'
)
return
false
}
const
username
=
this
.
bindGameUserList
.
find
(
(
items
)
=>
items
.
member_id
==
this
.
accountSelect
).
username
passwardEncryption
({
member_id
:
this
.
accountSelect
})
.
then
((
res
)
=>
{
// const list = [
// {
// msgtype: 'text',
// text: { content: `账号:${username} \n密码:${res.data.encryptPassword}`, key: res.data.key, iv: res.data.iv }
// }
// ]
// this.set_sendSkillMessage(list)
this
.
sendChatMessage
(
`账号:
${
username
}
\n密码:
${
res
.
data
.
encryptPassword
}
`
,
'text'
)
this
.
markTransScene
(
type
)
this
.
sendGameLog
(
item
)
})
.
catch
((
err
)
=>
{
const
list
=
[
{
msgtype
:
'text'
,
text
:
{
content
:
`账号:
${
username
}
`
}
}
]
// this.set_sendSkillMessage(list)
this
.
sendChatMessage
(
`账号:
${
username
}
`
,
'text'
)
item
.
type
=
1
this
.
sendGameLog
(
item
)
console
.
log
(
err
)
})
},
500
),
sendMessage
:
throttle
(
function
(
item
,
type
)
{
if
(
!
this
.
transMemberStatus
)
{
this
.
$message
.
warning
(
'当前w账号不满足转端要求,请联系组长处理'
)
return
}
const
result
=
this
.
handleAccount
()
if
(
!
result
)
{
this
.
$message
.
warning
(
'请稍后再试'
)
return
false
}
let
str
=
''
if
(
type
==
2
)
{
str
=
'网页游戏链接:'
}
else
if
(
type
==
3
)
{
str
=
'安卓游戏链接:'
}
else
if
(
type
==
4
)
{
str
=
'IOS游戏链接:'
}
else
{
}
const
username
=
this
.
bindGameUserList
.
find
(
(
items
)
=>
items
.
member_id
==
this
.
accountSelect
).
username
passwardEncryption
({
member_id
:
this
.
accountSelect
})
.
then
((
res
)
=>
{
const
list
=
[
{
msgtype
:
'text'
,
text
:
{
content
:
`
${
str
}${
item
.
url
}
\n账号:
${
username
}
\n密码:
${
res
.
data
.
encryptPassword
}
`
,
key
:
res
.
data
.
key
,
iv
:
res
.
data
.
iv
}
}
]
}
// this.set_sendSkillMessage(list)
]
this
.
sendChatMessage
(
`
${
str
}${
item
.
url
}
\n账号:
${
username
}
`
,
'text'
)
// this.set_sendSkillMessage(list)
this
.
sendGameLog
(
item
)
this
.
sendChatMessage
(
`
${
str
}${
item
.
url
}
\n账号:
${
username
}
\n密码:
${
res
.
data
.
encryptPassword
}
`
,
'text'
)
console
.
log
(
err
)
this
.
markTransScene
(
type
)
})
item
.
type
=
1
},
500
),
this
.
sendGameLog
(
item
)
// 发送游戏落地页
})
startSendPage
(
value
)
{
.
catch
((
err
)
=>
{
console
.
log
(
value
,
'value'
)
const
list
=
[
// this.set_sendSkillMessage(list)
{
this
.
getMediaId
(
value
,
'image'
)
msgtype
:
'text'
,
},
text
:
{
content
:
`
${
str
}${
item
.
url
}
\n账号:
${
username
}
`
}
// 转端发送落地页面
}
sendDownLoadPage
:
throttleStart
(
function
(
items
,
type
,
index
)
{
]
if
(
!
this
.
transMemberStatus
)
{
// this.set_sendSkillMessage(list)
this
.
$message
.
warning
(
'当前w账号不满足转端要求,请联系组长处理'
)
this
.
sendChatMessage
(
`
${
str
}${
item
.
url
}
\n账号:
${
username
}
`
,
'text'
)
return
this
.
sendGameLog
(
item
)
console
.
log
(
err
)
})
},
500
),
// 发送游戏落地页
startSendPage
(
value
)
{
console
.
log
(
value
,
'value'
)
// this.set_sendSkillMessage(list)
this
.
getMediaId
(
value
,
'image'
)
},
// 转端发送落地页面
sendDownLoadPage
:
throttleStart
(
function
(
items
,
type
,
index
)
{
if
(
!
this
.
transMemberStatus
)
{
this
.
$message
.
warning
(
'当前w账号不满足转端要求,请联系组长处理'
)
return
}
this
.
$set
(
this
.
conversionGameList
[
index
],
'send_trans_page_id'
,
items
.
game_id
)
this
.
showSendPage
=
true
},
500
),
// 转端标记
async
markTransScene
(
type
)
{
const
data
=
{
external_userid
:
this
.
chatUserInfo
.
external_userid
,
trans_scene
:
type
}
const
res
=
await
markTransScene
(
data
)
if
(
res
.
status_code
==
1
)
{
console
.
log
(
'标记转端成功'
)
if
(
this
.
chatUserInfo
.
trans_scene
&&
this
.
chatUserInfo
.
trans_scene
!==
''
&&
this
.
chatUserInfo
.
trans_scene
!=
type
)
{
this
.
chatUserInfo
.
trans_scene
=
type
}
}
this
.
$set
(
this
.
conversionGameList
[
index
],
'send_trans_page_id'
,
items
.
game_id
)
}
this
.
showSendPage
=
true
},
},
500
),
getZqCserWxBelong
()
{
// 转端标记
return
new
Promise
(
async
(
resolve
,
reject
)
=>
{
async
markTransScene
(
type
)
{
const
data
=
{
const
data
=
{
external_userid
:
this
.
chatUserInfo
.
external_userid
,
zq_user_id
:
Number
(
this
.
userInfo
.
id
)
trans_scene
:
type
}
}
const
res
=
await
markTransScene
(
data
)
const
res
=
await
getZqCserWxBelong
(
data
)
if
(
res
.
status_code
==
1
)
{
if
(
res
.
status_code
===
1
&&
res
.
data
.
data
)
{
console
.
log
(
'标记转端成功'
)
this
.
belongList
=
res
.
data
.
data
.
map
(
item
=>
{
if
(
this
.
chatUserInfo
.
trans_scene
&&
this
.
chatUserInfo
.
trans_scene
!==
''
&&
this
.
chatUserInfo
.
trans_scene
!=
type
)
{
return
{
this
.
chatUserInfo
.
trans_scene
=
type
value
:
item
.
value
,
}
label
:
item
.
label
&&
item
.
label
.
split
(
'-'
)[
0
]
?
item
.
label
.
split
(
'-'
)[
0
]
:
''
}
},
getZqCserWxBelong
()
{
return
new
Promise
(
async
(
resolve
,
reject
)
=>
{
const
data
=
{
zq_user_id
:
Number
(
this
.
userInfo
.
id
)
}
const
res
=
await
getZqCserWxBelong
(
data
)
if
(
res
.
status_code
===
1
&&
res
.
data
.
data
)
{
this
.
belongList
=
res
.
data
.
data
.
map
(
item
=>
{
return
{
value
:
item
.
value
,
label
:
item
.
label
&&
item
.
label
.
split
(
'-'
)[
0
]
?
item
.
label
.
split
(
'-'
)[
0
]
:
''
}
})
resolve
(
this
.
belongList
)
}
else
{
this
.
$message
.
warning
(
'暂无绑定项目,请先绑定项目'
)
reject
(
null
)
}
})
},
// 一键发送任务链接
async
sendTaskChannel
()
{
let
groupItem
=
{}
let
belonsList
=
{}
const
group
=
await
getZqCserGroup
({
zq_user_id
:
Number
(
this
.
userInfo
.
id
)
})
belonsList
=
await
this
.
getZqCserWxBelong
()
if
(
group
.
status_code
==
1
&&
group
.
data
.
data
.
length
>
0
&&
belonsList
&&
belonsList
.
length
>
0
)
{
groupItem
=
group
.
data
.
data
[
0
]
const
group_name_list
=
groupItem
.
label
.
split
(
'-'
)
const
data
=
{
blongs_name
:
belonsList
[
0
].
label
,
member_id
:
this
.
accountSelect
,
use_user_id
:
this
.
userInfo
.
id
,
use_user_name
:
this
.
userInfo
.
username
,
group_id
:
groupItem
.
value
,
group_name
:
group_name_list
[
group_name_list
.
length
-
1
],
game_type
:
this
.
chatUserInfo
.
trans_scene
||
''
}
this
.
sendLoading
=
true
try
{
setTimeout
(()
=>
{
this
.
sendLoading
=
false
},
3000
)
const
res
=
await
quickRecallChannelLink
(
data
)
this
.
sendLoading
=
false
if
(
res
.
status_code
==
1
)
{
this
.
sendGameInfoSave
=
res
.
data
.
data
this
.
handleSendType
(
res
.
data
.
data
)
this
.
$message
.
success
(
res
.
msg
)
}
}
}
catch
(
error
)
{
})
this
.
$message
.
error
(
'获取召回链接失败,请重新再试'
)
resolve
(
this
.
belongList
)
this
.
sendLoading
=
false
}
}
else
{
}
else
{
this
.
$message
.
error
(
'获取分组失败,请到掌权添加分组
'
)
this
.
$message
.
warning
(
'暂无绑定项目,请先绑定项目
'
)
re
turn
re
ject
(
null
)
}
}
},
})
/**
},
* 发送游戏日志
* @param {Object} item 游戏信息
* 1.send_log_add方法是发送游戏日志的接口
* 2.set_send_game_log 是储存在vuex中的需要发送的时候调用的 信息 也就是 send_log_add 中需要的信息
* 3.每次调用 sendGameLog 方法 或者 set_send_game_log方法 的时候都需要记录 send_game_log 的信息 然后 监听 send_game_log 变量的变化 然后调用 send_log_add 方法
* 4.你需要 查看 ./sendGame/*.vue 所有的 vue 文件 查看是否文件中有 sendGameLog 方法 如果有 你需要帮我自动完成日志的记录功能 需要的步骤如下
* 5.你需要 在 vuex 中 引入 send_game_log 变量 然后 监听 send_game_log 如果 新值存在 那么就调用 send_log_add
* 6.请你仔细查看 ./sendGame/*.vue 的所有 vue 文件 帮我 自动完成 send_log_add 的日志收集功能 如果需要特殊处理 的地方你需要仔细查看逻辑 并且 自动处理
* 7.你可以封装成一个 minix 或者你有更好的处理逻辑 来完成 发送游戏日志的收集工作
* 8.总结:每次调用 set_send_game_log 方法的时候 是在 vuex 中记录 需要发送的日志信息 你要监听 send_game_log 变量的变化 然后调用 send_log_add 方法 完成日志的收集工作 你需要帮我选一个最佳的方案来完成这个功能 尽量保证不出问题
*/
handleSendType
(
data
)
{
// 一键发送任务链接
console
.
log
(
data
,
'获取一键发送的信息'
)
async
sendTaskChannel
()
{
// 转端发送优先逻辑 不需要了 现在发送当前会话框选中的账号对应的注册游戏
let
groupItem
=
{}
data
?.
game_data
?.
game_type
?
this
.
chatUserInfo
.
trans_scene
=
data
.
game_data
.
game_type
:
''
let
belonsList
=
{}
if
(
this
.
chatUserInfo
.
trans_scene
&&
this
.
chatUserInfo
.
trans_scene
!=
1
)
{
const
group
=
await
getZqCserGroup
({
zq_user_id
:
Number
(
this
.
userInfo
.
id
)
})
this
.
sendCreateChannel
(
data
.
game_data
,
data
.
game_data
.
game_type
)
belonsList
=
await
this
.
getZqCserWxBelong
()
}
else
{
if
(
group
.
status_code
==
1
&&
group
.
data
.
data
.
length
>
0
&&
belonsList
&&
belonsList
.
length
>
0
)
{
// 没有转端标记过,发送小程序链接 判断标题和封面是否存在 存在发小程序卡片 不存在发二维码
groupItem
=
group
.
data
.
data
[
0
]
if
(
data
.
share_data
.
share_title
&&
data
.
share_data
.
share_img
)
{
const
group_name_list
=
groupItem
.
label
.
split
(
'-'
)
const
miniprogramInfo
=
const
data
=
{
{
blongs_name
:
belonsList
[
0
].
label
,
appid
:
data
.
share_data
.
app_id
,
rawid
:
data
.
share_data
.
raw_id
,
channle_id
:
data
.
share_data
.
channel_key
,
channle_name
:
data
.
share_data
.
channel_name
,
title
:
data
.
share_data
.
share_title
,
platform
:
27
,
page
:
data
.
share_data
.
page
,
imgUrl
:
data
.
share_data
.
share_img
}
// this.set_sendSkillMessage(list)
this
.
sendChatMessage
(
miniprogramInfo
,
'miniprogram'
)
const
game_data
=
this
.
$clone
(
data
.
game_data
)
game_data
.
type
=
3
console
.
log
(
game_data
,
'data----------'
)
this
.
sendGameLog
(
game_data
)
}
else
{
// this.set_sendSkillMessage(list)
this
.
getMediaId
(
data
.
game_data
.
game_url
,
'image'
)
this
.
sendGameLog
(
data
.
game_data
)
}
}
this
.
recallChannelSeq
(
data
)
},
// 召回染色
async
recallChannelSeq
(
data
)
{
const
param
=
{
game_id
:
data
.
game_data
.
game_id
,
member_id
:
this
.
accountSelect
,
member_id
:
this
.
accountSelect
,
key
:
data
.
game_data
.
channel_key
||
data
.
share_data
.
channel_key
use_user_id
:
this
.
userInfo
.
id
,
}
use_user_name
:
this
.
userInfo
.
username
,
const
res
=
await
recallChannelSeq
(
param
)
group_id
:
groupItem
.
value
,
},
group_name
:
group_name_list
[
group_name_list
.
length
-
1
],
sendCreateChannel
:
throttle
(
function
(
item
,
type
)
{
game_type
:
this
.
chatUserInfo
.
trans_scene
||
''
const
result
=
this
.
handleAccount
()
if
(
!
result
)
{
this
.
$message
.
warning
(
'请稍后再试'
)
return
false
}
}
this
.
sendLoading
=
true
let
str
=
''
if
(
type
==
2
)
{
str
=
'网页游戏链接:'
}
else
if
(
type
==
3
)
{
str
=
'安卓游戏链接:'
}
else
if
(
type
==
4
)
{
str
=
'IOS游戏链接:'
}
else
{
}
const
username
=
this
.
bindGameUserList
.
find
(
(
items
)
=>
items
.
member_id
==
this
.
accountSelect
).
username
passwardEncryption
({
member_id
:
this
.
accountSelect
})
.
then
((
res
)
=>
{
const
list
=
[
{
msgtype
:
'text'
,
// 一键发送渠道任务相关的参数
taskInfo
:
{
task_id
:
this
.
chatUser
.
task_id
,
game_id
:
item
.
game_id
,
member_id
:
this
.
accountSelect
,
channel_key
:
item
.
channel_key
},
text
:
{
content
:
`
${
str
}${
item
.
game_url
}
\n账号:
${
username
}
\n密码:
${
res
.
data
.
encryptPassword
}
`
,
key
:
res
.
data
.
key
,
iv
:
res
.
data
.
iv
}
}
]
// 这里需要特殊处理,因为有taskInfo参数
// this.set_sendSkillMessage(list)
this
.
sendChatMessage
(
`
${
str
}${
item
.
game_url
}
\n账号:
${
username
}
\n密码:
${
res
.
data
.
encryptPassword
}
`
,
'text'
)
item
.
type
=
3
this
.
sendGameLog
(
item
)
})
},
500
),
async
getLandingPageConfig
(
items
,
item
)
{
try
{
try
{
const
params
=
{
setTimeout
(()
=>
{
main_game_id
:
items
.
main_game_id
,
this
.
sendLoading
=
false
weixin_blongs_id
:
items
.
weixin_blongs_id
,
},
3000
)
type
:
items
.
game_type
==
1
?
2
:
items
.
game_type
==
3
||
items
.
game_type
==
4
?
1
:
''
const
res
=
await
quickRecallChannelLink
(
data
)
}
this
.
sendLoading
=
false
const
res
=
await
getLandingPageConfig
(
params
)
if
(
res
.
status_code
==
1
)
{
if
(
res
.
status_code
===
1
&&
res
.
data
)
{
this
.
sendGameInfoSave
=
res
.
data
.
data
return
{
this
.
handleSendType
(
res
.
data
.
data
)
data
:
res
.
data
,
this
.
$message
.
success
(
res
.
msg
)
game_type
:
items
.
game_type
}
}
else
{
return
null
}
}
}
catch
(
error
)
{
}
catch
(
error
)
{
this
.
$message
.
error
(
'获取召回链接失败,请重新再试'
)
this
.
sendLoading
=
false
}
}
},
}
else
{
// 处理微信小程序游戏
this
.
$message
.
error
(
'获取分组失败,请到掌权添加分组'
)
handleWechatMiniGame
(
items
,
item
,
index
)
{
return
try
{
}
this
.
selectedWxGameList
=
[]
},
// 直接替换微信小游戏列表(单选)
/**
this
.
selectedWxGameList
=
[
item
]
* 发送游戏日志
this
.
selectedWxGameList
[
0
].
send_trans_game_id
=
items
.
id
* @param {Object} item 游戏信息
this
.
selectedWxGameList
[
0
].
send_trans_game_info
=
items
* 1.send_log_add方法是发送游戏日志的接口
this
.
showWxGameDrawer
=
true
* 2.set_send_game_log 是储存在vuex中的需要发送的时候调用的 信息 也就是 send_log_add 中需要的信息
return
true
* 3.每次调用 sendGameLog 方法 或者 set_send_game_log方法 的时候都需要记录 send_game_log 的信息 然后 监听 send_game_log 变量的变化 然后调用 send_log_add 方法
}
catch
(
error
)
{
* 4.你需要 查看 ./sendGame/*.vue 所有的 vue 文件 查看是否文件中有 sendGameLog 方法 如果有 你需要帮我自动完成日志的记录功能 需要的步骤如下
console
.
error
(
'处理微信小游戏失败:'
,
error
)
* 5.你需要 在 vuex 中 引入 send_game_log 变量 然后 监听 send_game_log 如果 新值存在 那么就调用 send_log_add
return
false
* 6.请你仔细查看 ./sendGame/*.vue 的所有 vue 文件 帮我 自动完成 send_log_add 的日志收集功能 如果需要特殊处理 的地方你需要仔细查看逻辑 并且 自动处理
}
* 7.你可以封装成一个 minix 或者你有更好的处理逻辑 来完成 发送游戏日志的收集工作
},
* 8.总结:每次调用 set_send_game_log 方法的时候 是在 vuex 中记录 需要发送的日志信息 你要监听 send_game_log 变量的变化 然后调用 send_log_add 方法 完成日志的收集工作 你需要帮我选一个最佳的方案来完成这个功能 尽量保证不出问题
// 过滤游戏列表的公共方法
*/
filterGameList
(
sourceGame
,
targetList
)
{
if
(
!
sourceGame
||
!
targetList
?.
length
)
return
[]
handleSendType
(
data
)
{
console
.
log
(
data
,
'获取一键发送的信息'
)
return
targetList
.
filter
(
game
=>
// 转端发送优先逻辑 不需要了 现在发送当前会话框选中的账号对应的注册游戏
game
.
weixin_blongs_id
===
sourceGame
.
weixin_blongs_id
&&
data
?.
game_data
?.
game_type
?
this
.
chatUserInfo
.
trans_scene
=
data
.
game_data
.
game_type
:
''
game
.
main_game_id
===
sourceGame
.
main_game_id
if
(
this
.
chatUserInfo
.
trans_scene
&&
this
.
chatUserInfo
.
trans_scene
!=
1
)
{
)
this
.
sendCreateChannel
(
data
.
game_data
,
data
.
game_data
.
game_type
)
},
}
else
{
handleAndroidList
(
items
,
item
)
{
// 没有转端标记过,发送小程序链接 判断标题和封面是否存在 存在发小程序卡片 不存在发二维码
const
androidGameList
=
this
.
regGameList
.
find
(
item
=>
item
.
label
.
includes
(
'安卓'
))
if
(
data
.
share_data
.
share_title
&&
data
.
share_data
.
share_img
)
{
if
(
androidGameList
&&
androidGameList
.
children
&&
androidGameList
.
children
.
length
>
0
)
{
const
miniprogramInfo
=
androidGameList
.
children
=
this
.
filterGameList
(
items
,
androidGameList
.
children
)
{
appid
:
data
.
share_data
.
app_id
,
rawid
:
data
.
share_data
.
raw_id
,
channle_id
:
data
.
share_data
.
channel_key
,
channle_name
:
data
.
share_data
.
channel_name
,
title
:
data
.
share_data
.
share_title
,
platform
:
27
,
page
:
data
.
share_data
.
page
,
imgUrl
:
data
.
share_data
.
share_img
}
// this.set_sendSkillMessage(list)
this
.
sendChatMessage
(
miniprogramInfo
,
'miniprogram'
)
const
game_data
=
this
.
$clone
(
data
.
game_data
)
game_data
.
type
=
3
console
.
log
(
game_data
,
'data----------'
)
this
.
sendGameLog
(
game_data
)
}
else
{
}
else
{
androidGameList
.
children
=
[]
// this.set_sendSkillMessage(list)
this
.
getMediaId
(
data
.
game_data
.
game_url
,
'image'
)
this
.
sendGameLog
(
data
.
game_data
)
}
}
androidGameList
.
game_type
=
3
}
if
(
items
.
game_type
==
3
)
{
this
.
recallChannelSeq
(
data
)
androidGameList
.
android_game_id
=
items
.
id
},
androidGameList
.
android_game_info
=
items
// 召回染色
async
recallChannelSeq
(
data
)
{
const
param
=
{
game_id
:
data
.
game_data
.
game_id
,
member_id
:
this
.
accountSelect
,
key
:
data
.
game_data
.
channel_key
||
data
.
share_data
.
channel_key
}
const
res
=
await
recallChannelSeq
(
param
)
},
sendCreateChannel
:
throttle
(
function
(
item
,
type
)
{
const
result
=
this
.
handleAccount
()
if
(
!
result
)
{
this
.
$message
.
warning
(
'请稍后再试'
)
return
false
}
let
str
=
''
if
(
type
==
2
)
{
str
=
'网页游戏链接:'
}
else
if
(
type
==
3
)
{
str
=
'安卓游戏链接:'
}
else
if
(
type
==
4
)
{
str
=
'IOS游戏链接:'
}
else
{
}
const
username
=
this
.
bindGameUserList
.
find
(
(
items
)
=>
items
.
member_id
==
this
.
accountSelect
).
username
passwardEncryption
({
member_id
:
this
.
accountSelect
})
.
then
((
res
)
=>
{
const
list
=
[
{
msgtype
:
'text'
,
// 一键发送渠道任务相关的参数
taskInfo
:
{
task_id
:
this
.
chatUser
.
task_id
,
game_id
:
item
.
game_id
,
member_id
:
this
.
accountSelect
,
channel_key
:
item
.
channel_key
},
text
:
{
content
:
`
${
str
}${
item
.
game_url
}
\n账号:
${
username
}
\n密码:
${
res
.
data
.
encryptPassword
}
`
,
key
:
res
.
data
.
key
,
iv
:
res
.
data
.
iv
}
}
]
// 这里需要特殊处理,因为有taskInfo参数
// this.set_sendSkillMessage(list)
this
.
sendChatMessage
(
`
${
str
}${
item
.
game_url
}
\n账号:
${
username
}
\n密码:
${
res
.
data
.
encryptPassword
}
`
,
'text'
)
item
.
type
=
3
this
.
sendGameLog
(
item
)
})
},
500
),
async
getLandingPageConfig
(
items
,
item
)
{
try
{
const
params
=
{
main_game_id
:
items
.
main_game_id
,
weixin_blongs_id
:
items
.
weixin_blongs_id
,
type
:
items
.
game_type
==
1
?
2
:
items
.
game_type
==
3
||
items
.
game_type
==
4
?
1
:
''
}
}
return
androidGameList
const
res
=
await
getLandingPageConfig
(
params
)
},
if
(
res
.
status_code
===
1
&&
res
.
data
)
{
handleIosList
(
items
,
item
)
{
return
{
const
IOSGameList
=
this
.
regGameList
.
find
(
item
=>
item
.
label
.
includes
(
'IOS'
||
'ios'
))
data
:
res
.
data
,
IOSGameList
.
game_type
=
4
game_type
:
items
.
game_type
if
(
IOSGameList
&&
IOSGameList
.
children
&&
IOSGameList
.
children
.
length
>
0
)
{
}
IOSGameList
.
children
=
this
.
filterGameList
(
items
,
IOSGameList
.
children
)
}
else
{
}
else
{
IOSGameList
.
children
=
[]
return
null
}
if
(
items
.
game_type
==
4
)
{
IOSGameList
.
ios_game_id
=
items
.
id
IOSGameList
.
ios_game_info
=
items
}
}
return
IOSGameList
}
catch
(
error
)
{
},
// 处理安卓 IOS 游戏
}
handleAppGameList
(
items
,
item
,
index
)
{
},
this
.
showAppGameDrawer
=
true
// 处理微信小程序游戏
const
androidGameList
=
this
.
handleAndroidList
(
items
,
item
)
handleWechatMiniGame
(
items
,
item
,
index
)
{
const
IOSGameList
=
this
.
handleIosList
(
items
,
item
)
try
{
androidGameList
?
this
.
selectedAppGameList
.
push
(
androidGameList
)
:
''
this
.
selectedWxGameList
=
[]
IOSGameList
?
this
.
selectedAppGameList
.
push
(
IOSGameList
)
:
''
// 直接替换微信小游戏列表(单选)
console
.
log
(
this
.
selectedAppGameList
,
'selectedAppGameList'
)
this
.
selectedWxGameList
=
[
item
]
},
this
.
selectedWxGameList
[
0
].
send_trans_game_id
=
items
.
id
// 主方法
this
.
selectedWxGameList
[
0
].
send_trans_game_info
=
items
async
handleGameType
(
items
,
item
,
type
,
index
)
{
this
.
showWxGameDrawer
=
true
if
((
items
.
game_type
==
1
||
items
.
game_type
==
3
||
items
.
game_type
==
4
)
&&
items
.
main_game_id
&&
items
.
weixin_blongs_id
)
{
return
true
const
result
=
await
this
.
getLandingPageConfig
(
items
,
item
)
}
catch
(
error
)
{
if
(
result
&&
result
.
data
?.
data
?.
tag
)
{
console
.
error
(
'处理微信小游戏失败:'
,
error
)
if
(
items
.
game_type
==
1
)
{
return
false
// 处理微信小程序游戏
}
this
.
handleWechatMiniGame
(
items
,
item
,
index
)
},
}
else
{
// 过滤游戏列表的公共方法
// 处理安卓/iOS游戏
filterGameList
(
sourceGame
,
targetList
)
{
this
.
handleAppGameList
(
items
,
item
,
index
)
if
(
!
sourceGame
||
!
targetList
?.
length
)
return
[]
}
return
targetList
.
filter
(
game
=>
game
.
weixin_blongs_id
===
sourceGame
.
weixin_blongs_id
&&
game
.
main_game_id
===
sourceGame
.
main_game_id
)
},
handleAndroidList
(
items
,
item
)
{
const
androidGameList
=
this
.
regGameList
.
find
(
item
=>
item
.
label
.
includes
(
'安卓'
))
if
(
androidGameList
&&
androidGameList
.
children
&&
androidGameList
.
children
.
length
>
0
)
{
androidGameList
.
children
=
this
.
filterGameList
(
items
,
androidGameList
.
children
)
}
else
{
androidGameList
.
children
=
[]
}
androidGameList
.
game_type
=
3
if
(
items
.
game_type
==
3
)
{
androidGameList
.
android_game_id
=
items
.
id
androidGameList
.
android_game_info
=
items
}
return
androidGameList
},
handleIosList
(
items
,
item
)
{
const
IOSGameList
=
this
.
regGameList
.
find
(
item
=>
item
.
label
.
includes
(
'IOS'
||
'ios'
))
IOSGameList
.
game_type
=
4
if
(
IOSGameList
&&
IOSGameList
.
children
&&
IOSGameList
.
children
.
length
>
0
)
{
IOSGameList
.
children
=
this
.
filterGameList
(
items
,
IOSGameList
.
children
)
}
else
{
IOSGameList
.
children
=
[]
}
if
(
items
.
game_type
==
4
)
{
IOSGameList
.
ios_game_id
=
items
.
id
IOSGameList
.
ios_game_info
=
items
}
return
IOSGameList
},
// 处理安卓 IOS 游戏
handleAppGameList
(
items
,
item
,
index
)
{
this
.
showAppGameDrawer
=
true
const
androidGameList
=
this
.
handleAndroidList
(
items
,
item
)
const
IOSGameList
=
this
.
handleIosList
(
items
,
item
)
androidGameList
?
this
.
selectedAppGameList
.
push
(
androidGameList
)
:
''
IOSGameList
?
this
.
selectedAppGameList
.
push
(
IOSGameList
)
:
''
console
.
log
(
this
.
selectedAppGameList
,
'selectedAppGameList'
)
},
// 主方法
async
handleGameType
(
items
,
item
,
type
,
index
)
{
if
((
items
.
game_type
==
1
||
items
.
game_type
==
3
||
items
.
game_type
==
4
)
&&
items
.
main_game_id
&&
items
.
weixin_blongs_id
)
{
const
result
=
await
this
.
getLandingPageConfig
(
items
,
item
)
if
(
result
&&
result
.
data
?.
data
?.
tag
)
{
if
(
items
.
game_type
==
1
)
{
// 处理微信小程序游戏
this
.
handleWechatMiniGame
(
items
,
item
,
index
)
}
else
{
}
else
{
this
.
sendChannelGame
(
items
,
item
)
// 处理安卓/iOS游戏
this
.
handleAppGameList
(
items
,
item
,
index
)
}
}
}
else
{
}
else
{
this
.
sendChannelGame
(
items
,
item
)
this
.
sendChannelGame
(
items
,
item
)
}
}
},
}
else
{
// 不是小游戏 安卓 IOS 游戏处理
noH5AndroidIOSGame
(
items
,
item
)
{
this
.
sendChannelGame
(
items
,
item
)
this
.
sendChannelGame
(
items
,
item
)
},
}
// 小游戏游戏确认
},
async
handleWxGameConfirm
(
value
)
{
// 不是小游戏 安卓 IOS 游戏处理
console
.
log
(
value
,
'value'
)
noH5AndroidIOSGame
(
items
,
item
)
{
// const list = [
this
.
sendChannelGame
(
items
,
item
)
// {
},
// msgtype: 'image',
// 小游戏游戏确认
// image: {
async
handleWxGameConfirm
(
value
)
{
// picurl: value
console
.
log
(
value
,
'value'
)
// }
// const list = [
// }
// {
// ]
// msgtype: 'image',
// this.set_sendSkillMessage(list)
// image: {
this
.
getMediaId
(
value
,
'image'
)
// picurl: value
},
// }
SendTransAppGameClose
()
{
// }
this
.
selectedAppGameList
=
[]
// ]
},
// this.set_sendSkillMessage(list)
SendTransWxGameClose
()
{
this
.
getMediaId
(
value
,
'image'
)
this
.
selectedWxGameList
=
[]
},
},
SendTransAppGameClose
()
{
// 安卓或者 IOS 游戏处理
this
.
selectedAppGameList
=
[]
handleAppGameConfirm
(
data
)
{
},
this
.
selectedAppGameList
=
[]
SendTransWxGameClose
()
{
// const list = [
this
.
selectedWxGameList
=
[]
// {
},
// msgtype: 'text',
// 安卓或者 IOS 游戏处理
// text: {
handleAppGameConfirm
(
data
)
{
// content: `游戏地址:${data.landing_page_url} \n账号:${data.username} \n密码:${data.password}`
this
.
selectedAppGameList
=
[]
// }
// const list = [
// }
// {
// ]
// msgtype: 'text',
// this.set_sendSkillMessage(list)
// text: {
this
.
sendChatMessage
(
`游戏地址:
${
data
.
landing_page_url
}
\n账号:
${
data
.
username
}
\n密码:
${
data
.
password
}
`
,
'text'
)
// content: `游戏地址:${data.landing_page_url} \n账号:${data.username} \n密码:${data.password}`
},
// }
// }
// ]
// this.set_sendSkillMessage(list)
this
.
sendChatMessage
(
`游戏地址:
${
data
.
landing_page_url
}
\n账号:
${
data
.
username
}
\n密码:
${
data
.
password
}
`
,
'text'
)
},
async
getMediaId
(
picurl
){
async
getMediaId
(
picurl
)
{
// 发送图片作为链接消息
// 发送图片作为链接消息
if
(
picurl
)
{
if
(
picurl
)
{
this
.
sendChatMessage
(
picurl
,
'image'
)
this
.
sendChatMessage
(
picurl
,
'image'
)
}
else
{
}
else
{
// 如果没有图片URL,提示用户
// 如果没有图片URL,提示用户
this
.
$message
.
error
(
'图片链接不存在,无法发送'
)
this
.
$message
.
error
(
'图片链接不存在,无法发送'
)
}
}
},
},
}
}
}
</
script
>
}
<
style
lang=
"scss"
scoped
>
</
script
>
.sendGameContent
{
<
style
lang=
"scss"
scoped
>
width
:
100%
;
.sendGameContent
{
height
:
100%
;
width
:
100%
;
overflow
:
auto
;
height
:
100%
;
overflow
:
auto
;
.createChannel
{
.createChannel
{
font-size
:
14px
;
font-size
:
14px
;
margin-top
:
16px
;
padding
:
0
16px
;
.label
{
.label
{
color
:
#878787
;
color
:
#878787
;
font-size
:
12px
;
font-size
:
12px
;
margin-right
:
5px
;
margin-right
:
5px
;
}
}
}
}
.channelLoading
{
.channelLoading
{
color
:
#00bf8a
;
color
:
#00bf8a
;
font-size
:
16px
;
font-size
:
16px
;
text-align
:
center
;
text-align
:
center
;
padding
:
20px
;
}
}
.btnRelease
{
.btnRelease
{
position
:
relative
;
background
:
#fff
;
padding-top
:
40px
;
//
::v-deep
.el-collapse-item__header
{
.btntab
{
//
border-bottom
:
none
;
width
:
100%
;
//
background
:
#f7f8fa
;
//
}
}
.btntab
{
width
:
100%
;
display
:
flex
;
height
:
36px
;
position
:
absolute
;
left
:
0
;
top
:
0
;
.btn
{
flex
:
1
;
display
:
flex
;
display
:
flex
;
cursor
:
pointer
;
height
:
44px
;
}
margin
:
12px
16px
;
.btnActive
{
width
:
calc
(
100%
-
32px
);
background
:
#00bf8a
;
.radio-group
{
color
:
#fff
;
width
:
100%
;
}
}
::v-deep
.el-radio-group
{
.gameList
{
width
:
100%
;
width
:
100%
;
display
:
flex
;
::v-deep
.el-tabs__item
{
}
width
:
70px
;
::v-deep
.el-radio-button
{
flex
:
1
;
height
:
44px
;
&__inner
{
width
:
100%
;
height
:
100%
;
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
font-size
:
14px
;
font-weight
:
500
;
border-color
:
#f0f0f0
;
}
}
}
}
}
.gameListItem
{
.gameList
{
width
:
100%
;
width
:
100%
;
height
:
40px
;
background
:
#fff
;
background
:
#f7f8fa
;
padding
:
0
10px
;
::v-deep
.el-collapse
{
p
{
border
:
none
;
font-size
:
14px
;
font-family
:
PingFangSC-Regular
,
PingFang
SC
;
.el-collapse-item
{
font-weight
:
400
;
border
:
none
;
color
:
#333333
;
margin-bottom
:
1px
;
&__header
{
height
:
52px
;
line-height
:
52px
;
background
:
#fff
;
border
:
none
;
border-bottom
:
1px
solid
#f0f0f0
;
padding
:
0
16px
;
font-size
:
16px
;
font-weight
:
500
;
color
:
#333
;
.el-collapse-item__arrow
{
color
:
#999
;
font-size
:
14px
;
}
}
&
__wrap
{
border
:
none
;
background
:
#fafafa
;
}
&
__content
{
padding
:
0
;
background
:
#fafafa
;
}
}
}
.gameListItem
{
width
:
100%
;
height
:
52px
;
background
:
#fff
;
padding
:
0
16px
;
border-bottom
:
1px
solid
#f0f0f0
;
display
:
flex
;
align-items
:
center
;
justify-content
:
space-between
;
&:last-child
{
border-bottom
:
none
;
}
p
{
font-size
:
14px
;
color
:
#333
;
margin
:
0
;
flex
:
1
;
}
::v-deep
.el-button
{
background
:
#1890ff
;
border-color
:
#1890ff
;
color
:
#fff
;
font-size
:
14px
;
height
:
32px
;
padding
:
0
16px
;
border-radius
:
4px
;
&:hover
{
background
:
#40a9ff
;
border-color
:
#40a9ff
;
}
&
:disabled
{
background
:
#f5f5f5
;
border-color
:
#d9d9d9
;
color
:
#bfbfbf
;
}
}
::v-deep
.el-popover__reference
{
.el-button
{
background
:
#1890ff
;
border-color
:
#1890ff
;
color
:
#fff
;
&:hover
{
background
:
#40a9ff
;
border-color
:
#40a9ff
;
}
}
}
}
.collapseContent
{
background
:
#fff
;
}
//
搜索框样式
::v-deep
.el-input
{
margin
:
16px
;
width
:
calc
(
100%
-
32px
);
.el-input__inner
{
border-radius
:
6px
;
border
:
1px
solid
#d9d9d9
;
height
:
40px
;
font-size
:
14px
;
&:focus
{
border-color
:
#1890ff
;
}
}
.el-input__prefix
{
left
:
12px
;
}
}
}
.icon
{
//
暂无游戏状态
.rowFlex.allCenter
{
padding
:
40px
0
;
color
:
#999
;
font-size
:
14px
;
font-size
:
14px
;
cursor
:
pointer
;
}
}
}
}
::v-deep
.el-collapse
{
border-top
:
none
;
border-bottom
:
none
;
}
::v-deep
.el-collapse-item__header
{
border-bottom
:
none
;
}
::v-deep
.el-collapse-item__wrap
{
border-bottom
:
none
;
}
::v-deep
.el-collapse
{
border-top
:
none
;
border-bottom
:
none
;
}
::v-deep
.el-collapse-item
{
border-radius
:
4px
;
background
:
#f7f8fa
;
}
::v-deep
.el-collapse-item__content
{
padding
:
5px
;
}
::v-deep
.el-collapse-item__wrap
{
border-bottom
:
none
;
}
}
}
}
}
</
style
>
</
style
>
<
style
>
<
style
>
.sendLink
{
.sendLink
{
width
:
150px
;
width
:
150px
;
height
:
25px
;
height
:
25px
;
cursor
:
pointer
;
cursor
:
pointer
;
}
}
.sendLink
:hover
{
color
:
#00bf8a
;
.sendLink
:hover
{
}
</
style
>
color
:
#00bf8a
;
}
\ No newline at end of file
</
style
>
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论