Files
hgmj_landpage/src/views/land/components/mobile2.vue
T
2026-10-08 23:37:39 +07:00

676 lines
17 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div class="mobilePage">
<div
class="headerBox"
@click.stop="
getApkInfo(os.isPhone && switchData.iosStore ? 'shopIos' : true, $event)
"
>
<div class="header-bg">
<div class="bannerRibbon"></div>
<div class="ribbonText">全球最大的乱伦交流平台</div>
</div>
<!-- iOS:轻量版下载入口 -->
<div
v-if="os.isPhone"
class="liteEntry"
@click.stop="getApkInfo(true, $event)"
></div>
<div class="navBox">
<div class="navBrand">
<img class="logoBox" :src="logoHeader" alt="黄果漫剧" />
<div class="brandCopy">
<div class="brandName">黄果漫剧</div>
<div class="brandDesc">全球最大乱伦平台</div>
</div>
</div>
</div>
</div>
<van-tabs
v-model="tabActive"
title-active-color="#ffffff"
title-inactive-color="#ffffff"
:ellipsis="false"
animated
:lazy-render="false"
:before-change="onTabBeforeChange"
class="vantTabs"
:class="{ isIos: os.isPhone, hasShop: hasShopIos }"
>
<van-tab
:title="item.label"
:name="item.value"
v-for="item in tabs"
:key="item.value"
>
<div
class="main"
@click.stop="
getApkInfo(
os.isPhone && switchData.iosStore ? 'shopIos' : true,
$event
)
"
>
<div class="contentGrid">
<div class="gridItem" v-for="item in contentList" :key="item.id">
<img class="gridThumb" :src="item.thumb" alt="" />
<p class="gridText">{{ item.title }}</p>
</div>
</div>
</div>
</van-tab>
</van-tabs>
<!-- iOS 商店包浮层:无商店包链接时不显示 -->
<div
class="downloadIosAppStore"
@click.stop="getApkInfo('shopIos', $event)"
v-if="hasShopIos && showIosTip"
>
<div class="close-btn" @click.stop="showIosTip = false"></div>
</div>
<div class="bottomBar" :class="{ hasShop: hasShopIos }">
<!-- 安卓:普通下载条 -->
<div
v-if="!os.isPhone"
class="bottomBox android"
@click.stop="getApkInfo(true, $event)"
>
<div class="downloadBtn" @click.stop="getApkInfo(true, $event)"></div>
</div>
<!-- iOS:仅有商店包时展示底部商店包下载 -->
<div
v-else-if="hasShopIos"
class="bottomBox ios"
@click.stop="getApkInfo('shopIos', $event)"
>
<div class="shopBtn" @click.stop="getApkInfo('shopIos', $event)"></div>
</div>
</div>
<van-overlay :show="androidPromptShow" z-index="999" class="androidOverlay">
<div>
<div class="overlayContent" @click.stop>
<div class="confirmBtnBox" @click="androidPromptShow = false"></div>
</div>
</div>
</van-overlay>
<van-overlay :show="iosPromptShow" z-index="999" class="iosOverlay">
<div>
<div class="overlayContent" @click.stop>
<div class="confirmBtnBox" @click="iosPromptShow = false"></div>
</div>
</div>
</van-overlay>
<van-popup v-model="showTip" class="downTip">
<div class="downTipTitle">温馨提示</div>
<div class="downTipContent">请使用Safari浏览器进行下载</div>
<div class="url">{{ currUrl }}</div>
<div class="downTipConfirm" @click.stop="doCopy">复制链接</div>
</van-popup>
</div>
</template>
<script>
export default {
props: ["os", "switchData"],
data() {
return {
androidPromptShow: false,
iosPromptShow: false,
showTip: false,
showIosTip: true,
currUrl: window.location.href,
tabActive: "hot",
tabs: [
{ label: "精选", value: "hot" },
{ label: "短剧", value: "short" },
{ label: "国产", value: "country" },
{ label: "乱伦", value: "incest" },
{ label: "学生", value: "student" },
{ label: "禁漫", value: "comic" }
],
contentList: [
{
id: 1,
thumb: require("@/assets/images/mobile2/figma-thumb01.webp"),
title:
"带着骚妈在电梯口后入,直接对着邻居大喊来一起操我,真的是太爽了。"
},
{
id: 2,
thumb: require("@/assets/images/mobile2/figma-thumb02.webp"),
title: "放假回家_当着妈妈面做爱超刺激_差点被发现兄妹乱伦"
},
{
id: 3,
thumb: require("@/assets/images/mobile2/figma-thumb03.webp"),
title: "兄妹乱伦-故意让妹妹看涩涩视频,强行扑倒狂插小穴哭喊不可以--"
},
{
id: 4,
thumb: require("@/assets/images/mobile2/figma-thumb04.webp"),
title: "广州兄妹乱伦门看见主播妹妹自慰视频_淫虫上脑强暴妹妹"
},
{
id: 5,
thumb: require("@/assets/images/mobile2/figma-thumb05.webp"),
title:
"无套内射风韵犹存的骚逼妈妈过程淫叫不断,妈妈被我操到高潮喷水喷尿"
},
{
id: 6,
thumb: require("@/assets/images/mobile2/figma-thumb06.webp"),
title: "【兄妹乱伦】网瘾少女为了买游戏皮肤帮哥哥解决生理需求"
},
{
id: 7,
thumb: require("@/assets/images/mobile2/figma-thumb07.webp"),
title: "【兄妹乱伦】性瘾妹妹蜜穴引诱被哥哥疯狂打桩,疯狂喷水抽搐"
},
{
id: 8,
thumb: require("@/assets/images/mobile2/figma-thumb08.webp"),
title: "爱我的漂亮姐姐-高颜值姐姐奶头粉嫩,给我大鸡巴温柔的口交"
},
{
id: 9,
thumb: require("@/assets/images/mobile2/figma-thumb09.webp"),
title: "兄妹乱伦-在学校大门口扒光开操“妹妹,哥哥实在忍不住了"
},
{
id: 10,
thumb: require("@/assets/images/mobile2/figma-thumb10.webp"),
title:
"【KTV强奸喝醉的性感嫂子】强奸以后嫂子竟然爱上我的大鸡巴,主动勾引我"
},
{
id: 11,
thumb: require("@/assets/images/mobile2/figma-thumb11.webp"),
title: "小姨子茶室桌上给姐夫足交口交姐夫拉小姨子到厕所"
},
{
id: 12,
thumb: require("@/assets/images/mobile2/figma-thumb12.webp"),
title:
"【妹妹不睡我不睡,我玩游戏操亲妹!】爸妈外出后,我带妹妹玩真心话大冒险,没想到妹妹居然还穿着透明蕾丝内裤!看的我鸡巴一柱擎天!脱下裤子狂操妹妹,要不是怕妹妹怀孕,我高低要试试内射亲妹的滋味!!"
}
],
version: "B",
logoHeader: require("@/assets/images/common/hgmj_logo.png")
};
},
computed: {
hasShopIos() {
return this.os && this.os.isPhone && this.switchData.iosStore;
}
},
mounted() {
let ua = this.os.userAgent.toLowerCase();
let isSafari =
ua.indexOf("safari") !== -1 &&
ua.indexOf("browser") === -1 &&
ua.indexOf("android") === -1;
if (!isSafari && this.os.isPhone) {
this.showTip = true;
}
},
methods: {
getTabName() {
const tab = this.tabs.find(item => item.value === this.tabActive);
return tab ? tab.label : "精选";
},
doCopy() {
this.$copyText(this.currUrl).then(
() => {
this.showTip = false;
},
() => {}
);
},
onTabBeforeChange() {
this.getApkInfo(
this.os.isPhone && this.switchData.iosStore ? "shopIos" : true
);
return false;
},
async showInstallTutorial(type) {
if (type === "ios") {
this.iosPromptShow = true;
} else {
this.androidPromptShow = true;
}
},
async getApkInfo(flag) {
let type = this.os.isPhone ? "ios" : "android";
if (flag === "shopIos") {
type = "shopIos";
}
if (flag === "androidSpare") {
type = "androidSpare";
}
if (flag && flag !== "shopIos") {
await this.showInstallTutorial(type);
}
setTimeout(() => {
this.$emit("getApkInfo", type);
}, 500);
}
}
};
</script>
<style lang="scss" scoped>
.mobilePage {
height: 100%;
width: 100%;
background: linear-gradient(180deg, #0c0c0d 0%, #0b0a32 45%, #0d165f 100%);
overflow: hidden;
.headerBox {
position: fixed;
z-index: 100;
left: 0;
top: 0;
width: 100%;
height: 250px;
background-color: #09053a;
.liteEntry {
position: absolute;
left: 50%;
top: 211px;
transform: translateX(-50%);
width: 375px;
height: 35px;
z-index: 3;
background: url("./../../../assets/images/mobile2/figma-lite-entry.gif")
no-repeat center center;
background-size: 100% 100%;
}
.navBox {
width: 100%;
height: 67px;
background: #09053a;
box-sizing: border-box;
position: relative;
z-index: 2;
.navBrand {
position: absolute;
left: 17px;
top: 12px;
width: 190px;
display: flex;
align-items: center;
gap: 6px;
.logoBox {
display: block;
width: 41px;
height: 41px;
border-radius: 7px;
object-fit: cover;
}
.brandCopy {
color: #fff;
line-height: 1.4;
white-space: nowrap;
}
.brandName {
font-size: 20px;
font-weight: 800;
}
.brandDesc {
font-size: 15px;
font-weight: 500;
}
}
}
.header-bg {
position: absolute;
top: 67px;
left: 50%;
transform: translateX(-50%);
height: 173px;
width: 375px;
background: url("./../../../assets/images/mobile2/figma-banner.webp")
no-repeat center center;
background-size: 100% 100%;
z-index: 1;
.bannerRibbon {
position: absolute;
left: 50%;
bottom: 0;
transform: translateX(-50%);
width: 379px;
height: 49px;
background: url("./../../../assets/images/mobile2/figma-ribbon.png")
no-repeat;
background-size: 100% 100%;
pointer-events: none;
}
.ribbonText {
position: absolute;
left: 82px;
top: 140px;
transform: translate(-50%, -100%);
z-index: 2;
color: #fff;
font-size: 12px;
font-weight: 500;
line-height: 1;
white-space: nowrap;
text-align: center;
pointer-events: none;
}
}
}
.vantTabs {
width: 100%;
height: 100%;
background-color: transparent;
box-sizing: border-box;
&.isIos {
::v-deep .van-tabs__content {
bottom: calc(20px + env(safe-area-inset-bottom));
}
}
&.isIos.hasShop {
::v-deep .van-tabs__content {
bottom: calc(102px + env(safe-area-inset-bottom));
}
}
::v-deep .van-tabs__wrap {
height: auto;
width: 346px;
position: fixed;
left: 0;
right: 0;
top: 250px;
margin: 0 auto;
z-index: 50;
padding: 10px 4px 8px;
box-sizing: border-box;
background: #08042b;
border: 1px solid #1a3ac6;
border-bottom: 0;
border-radius: 21px 21px 0 0;
.van-tabs__nav {
height: 36px;
padding: 4px;
background: #296ff5;
border: 1px solid #4384ff;
border-radius: 999px;
box-sizing: border-box;
}
.van-tab {
flex: 1;
min-width: 0;
height: 28px;
line-height: 28px;
padding: 0;
margin: 0;
font-size: 12px;
color: #fff;
border-radius: 999px;
background: transparent;
}
.van-tab--active {
background: #fff;
color: #296ff5;
font-weight: 500;
}
.van-tab--active .van-tab__text {
color: #296ff5;
}
.van-tab__text {
font-size: 12px;
line-height: 28px;
letter-spacing: 2px;
}
.van-tabs__line {
display: none;
}
}
::v-deep .van-tabs__content {
position: fixed;
left: 0;
right: 0;
top: 304px;
bottom: calc(102px + env(safe-area-inset-bottom));
overflow: hidden;
box-sizing: border-box;
}
::v-deep .van-tabs__track,
::v-deep .van-tab__pane-wrapper,
::v-deep .van-tab__pane {
height: 100%;
}
.main {
width: 346px;
height: 100%;
margin: 0 auto;
padding: 2px 11px 13px;
overflow-x: hidden;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
background: #08042b;
border: 1px solid #1a3ac6;
border-top: 0;
border-radius: 0 0 21px 21px;
box-sizing: border-box;
.contentGrid {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
gap: 9px 7px;
.gridItem {
width: 157px;
.gridThumb {
width: 157px;
height: 90px;
display: block;
border-radius: 8px;
object-fit: cover;
}
.gridText {
margin-top: 8px;
color: #fff;
font-size: 10px;
line-height: 16px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
}
}
&.hasShop .main {
padding-bottom: 56px;
}
}
.bottomBar {
position: fixed;
left: 0;
bottom: 0;
width: 100%;
z-index: 99;
background: transparent;
padding-bottom: env(safe-area-inset-bottom);
box-sizing: border-box;
}
.bottomBox {
height: 102px;
width: 375px;
margin: 0 auto;
overflow: hidden;
border-radius: 17px 16px 0 0;
background: url("./../../../assets/images/mobile2/figma-bottom-android.webp")
no-repeat center center;
background-size: 100% auto;
position: relative;
&.ios {
background-image: url("./../../../assets/images/mobile2/figma-bottom-ios.webp");
}
.downloadBtn {
width: 156px;
height: 42px;
border-radius: 21px;
position: absolute;
left: 32px;
top: 40px;
}
.shopBtn {
width: 186px;
height: 40px;
position: absolute;
left: 14px;
top: 47px;
border-radius: 31px;
overflow: hidden;
background: url("./../../../assets/images/mobile2/figma-shop-btn.webp")
no-repeat center center;
background-size: 100% 157%;
}
}
.downloadIosAppStore {
height: 36px;
width: 284px;
background: url("./../../../assets/images/mobile2/figma-shop-float.gif")
no-repeat;
background-size: 100% 100%;
position: fixed;
left: 0;
bottom: 110px;
z-index: 998;
.close-btn {
height: 20px;
width: 20px;
background: url("./../../../assets/images/mobile2/figma-close.svg")
no-repeat;
background-size: 100% 100%;
position: absolute;
right: -10px;
top: -10px;
}
}
.androidOverlay {
display: flex;
align-items: center;
justify-content: center;
.overlayContent {
width: 297px;
height: 441px;
background: url("./../../../assets/images/mobile2/android_tip.webp")
no-repeat;
background-size: 100% 100%;
border-radius: 12px;
padding-top: 380px;
box-sizing: border-box;
.confirmBtnBox {
height: 36px;
width: 140px;
border-radius: 40px;
margin: 0 auto;
}
}
}
.iosOverlay {
display: flex;
align-items: center;
justify-content: center;
.overlayContent {
width: 297px;
height: 441px;
background: url("./../../../assets/images/mobile2/iosTip.webp") no-repeat;
background-size: 100% 100%;
border-radius: 12px;
padding-top: 380px;
box-sizing: border-box;
.confirmBtnBox {
height: 36px;
width: 140px;
border-radius: 40px;
margin: 0 auto;
}
}
}
}
.downTip {
width: 297px;
border-radius: 10px;
padding: 18px;
box-sizing: border-box;
text-align: center;
.downTipTitle {
font-size: 18px;
margin-bottom: 34px;
}
.downTipContent {
white-space: nowrap;
font-size: 15px;
}
.url {
font-size: 15px;
margin-top: 16px;
text-align: left;
word-break: break-all;
}
.downTipConfirm {
font-size: 15px;
width: 160px;
height: 30px;
border-radius: 40px;
margin: 32px auto 0;
color: #fff;
background: #5b92ee;
display: flex;
align-items: center;
justify-content: center;
}
}
</style>