提交 e9099ce1 作者: 毛细亚

同步代码

上级 00afd8bc
<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('暂无绑定项目,请先绑定项目')
return reject(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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论