提交 674bfd26 作者: 毛细亚

Merge branch 'zyou_release' into cbl_6.9.1

...@@ -1395,4 +1395,32 @@ export function marketingRoleGradeUrl(data) { ...@@ -1395,4 +1395,32 @@ export function marketingRoleGradeUrl(data) {
reject(error) reject(error)
}) })
}) })
} }
\ No newline at end of file // 获取角色最近登录记录
export function getRecentRoleLoginLog(data) {
return new Promise((resolve, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/role/getRecentRoleLoginLog',
params: data
}).then((res) => {
resolve(res)
}).catch((error) => {
reject(error)
})
})
}
// 获取角色最近登录记录
export function getClonePackageLink(data) {
return new Promise((resolve, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/member/getClonePackageLink',
params: data
}).then((res) => {
resolve(res)
}).catch((error) => {
reject(error)
})
})
}
...@@ -140,6 +140,22 @@ ...@@ -140,6 +140,22 @@
<p class="sendLink" @click="handleGameType(items, item, item.game_type, index)"> <p class="sendLink" @click="handleGameType(items, item, item.game_type, index)">
发送落地页 发送落地页
</p> </p>
<div v-if="items.game_type == 1">
<!-- 发送 H5 安卓分身包 -->
<p
class="sendLink"
@click="sendH5CloneGame(items,'android')"
>
发送H5-安卓分身包
</p>
<!-- 发送 H5 IOS 分身包 -->
<p
class="sendLink"
@click="sendH5CloneGame(items,'ios')"
>
发送H5-IOS分身包
</p>
</div>
<el-button slot="reference" size="mini" :disabled="accountSelect == ''">发送</el-button> <el-button slot="reference" size="mini" :disabled="accountSelect == ''">发送</el-button>
</el-popover> </el-popover>
<el-button v-else size="mini" :disabled="accountSelect == ''" <el-button v-else size="mini" :disabled="accountSelect == ''"
...@@ -195,6 +211,7 @@ import { ...@@ -195,6 +211,7 @@ import {
quickRecallChannelLink, quickRecallChannelLink,
recallChannelSeq, recallChannelSeq,
getLandingPageMemberLink, getLandingPageMemberLink,
getClonePackageLink,
getLandingPageConfig, getLandingPageConfig,
getMemberTransStatus getMemberTransStatus
} from '@/api/game' } from '@/api/game'
...@@ -208,7 +225,7 @@ import SendTransAppGame from './sendGame/SendTransAppGame.vue' ...@@ -208,7 +225,7 @@ import SendTransAppGame from './sendGame/SendTransAppGame.vue'
import selectChannel from './sendGame/selectChannel.vue' import selectChannel from './sendGame/selectChannel.vue'
import sendSelectChannel from './sendGame/sendSelectChannel.vue' import sendSelectChannel from './sendGame/sendSelectChannel.vue'
import gameLogMixin from '@/mixins/gameLogMixin' import gameLogMixin from '@/mixins/gameLogMixin'
import { sendChatMessage } from '@/utils/index'
export default { export default {
name: 'sendGame', name: 'sendGame',
mixins: [gameLogMixin], mixins: [gameLogMixin],
...@@ -303,6 +320,27 @@ export default { ...@@ -303,6 +320,27 @@ export default {
this.showLayer = true this.showLayer = true
} }
}, },
async sendH5CloneGame(items, type) {
const res = await getClonePackageLink({ mini_game_id: items.main_game_id })
if (res.status_code == 1 ) {
if(type == 'android' && !res?.data?.data?.android_download_url){
this.$message.warning('安卓分身包链接不存在')
return
}else if(type == 'ios' && !res?.data?.data?.ios_download_url){
this.$message.warning('IOS分身包链接不存在')
return
}
let srt = ''
if(type == 'android'){
srt = '安卓分身包链接: '+res.data.data.android_download_url
}else{
srt = 'IOS分身包链接: '+res.data.data.ios_download_url
}
sendChatMessage(srt,'text')
}else{
this.$message.warning(res.msg)
}
},
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) => {
......
<!--
* @Author: maoxiya 937667504@qq.com
* @Date: 2025-09-22 18:18:27
* @LastEditors: maoxiya 937667504@qq.com
* @LastEditTime: 2025-09-22 19:20:09
* @FilePath: /company_wx_frontend/src/views/works/component/gameInfo/lastLogin.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<template>
<div class="lastLogin">
<el-popover placement="top" trigger="click" title="最近登录">
<div class="lastLoginContent" v-if="loginInfo.game_id">
<div class="lastLoginContentItem rowFlex columnCenter">
<div class="lastLoginContentItemTitle" style="color: #999;margin-right: 10px;">马甲包:</div>
<div class="lastLoginContentItemContent">{{ `${loginInfo.game_name} - ${loginInfo.game_id}` }}</div>
</div>
<div class="lastLoginContentItem rowFlex columnCenter">
<div class="lastLoginContentItemTitle" style="color: #999;margin-right: 10px;">角色名:</div>
<div class="lastLoginContentItemContent">{{ loginInfo.role_name || '-' }}</div>
</div>
<div class="lastLoginContentItem rowFlex columnCenter">
<div class="lastLoginContentItemTitle" style="color: #999;margin-right: 10px;">登录时间:</div>
<div class="lastLoginContentItemContent">{{ loginInfo.login_time || '-' }}</div>
</div>
</div>
<div v-else>
暂无最近登录
</div>
<el-button slot="reference" @click="lastLogin" type="text">近期登录</el-button>
</el-popover>
</div>
</template>
<script>
import { getRecentRoleLoginLog } from '@/api/game';
import { mapState } from 'vuex';
export default {
name: 'LastLogin',
data() {
return {
loginInfo: {}
}
},
computed: {
...mapState('game', ['accountSelect'])
},
methods: {
async lastLogin() {
try {
const res = await getRecentRoleLoginLog({ member_id: this.accountSelect })
if(res.status_code == 1 && res?.data?.data){
this.loginInfo = res.data.data
}else{
this.loginInfo = {}
this.$message.error(res.msg)
}
} catch (error) {
console.log(error)
}
}
}
}
</script>
<style scoped lang="scss">
.lastLogin{
.lastLoginContent{
.lastLoginContentItemTitle{
color: #999;
font-size: 14px;
font-weight: 400;
margin-right: 10px;
}
.lastLoginContentItemContent{
font-size: 14px;
font-weight: 500;
color: #333333;
}
}
}
</style>
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
<div class="item rowFlex columnCenter spaceBetween"> <div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex"> <div class="rowFlex">
<span class="label" style="min-width:40px;">账号:</span> <span class="label" style="min-width:40px;">账号:</span>
<p class="text">{{ gameUserInfo.username }} <span v-if="gameUserInfo.account_type==2" class="account_type">(内) 勿回,找组长!!!</span></p> <p class="text">{{ gameUserInfo.username }} <span v-if="gameUserInfo.account_type==2" class="account_type">(内) 勿回,找组长!!!</span> <LastLogin/> </p>
</div> </div>
</div> </div>
<!-- 营销面板 --> <!-- 营销面板 -->
...@@ -304,11 +304,13 @@ import MarketingPanel from './MarketingPanel.vue'; ...@@ -304,11 +304,13 @@ import MarketingPanel from './MarketingPanel.vue';
import moment from 'moment'; import moment from 'moment';
import ZyouTag from './ZyouTag.vue'; import ZyouTag from './ZyouTag.vue';
import { debounce } from '@/utils'; import { debounce } from '@/utils';
import LastLogin from '@/views/components/quickSendGame/sendGame/lastLogin.vue';
export default { export default {
name: 'gameUserInfo', name: 'gameUserInfo',
components: { components: {
ZyouTag, ZyouTag,
MarketingPanel, MarketingPanel,
LastLogin,
}, },
props: ['gameUserInfo', 'chatUserDetails'], props: ['gameUserInfo', 'chatUserDetails'],
data() { data() {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论