广告位调整
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 266 KiB |
@@ -1,5 +0,0 @@
|
|||||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<circle opacity="0.9" cx="12" cy="12" r="10" fill="black"/>
|
|
||||||
<path d="M15.3936 8.60547L8.60533 15.3937" stroke="white" stroke-width="1.5" stroke-linecap="round"/>
|
|
||||||
<path d="M15.3948 15.3929L8.60661 8.60463" stroke="white" stroke-width="1.5" stroke-linecap="round"/>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 367 B |
@@ -54,10 +54,8 @@ const close = () => {
|
|||||||
background: rgba(0, 0, 0, 0.5);
|
background: rgba(0, 0, 0, 0.5);
|
||||||
backdrop-filter: blur(2px);
|
backdrop-filter: blur(2px);
|
||||||
}
|
}
|
||||||
|
// 根节点不占位:挂在 MainView 里与 TabBar 同级,撑高会顶出额外滚动;居中由 fixed 的 van-overlay 定位
|
||||||
.announcementPopup {
|
.announcementPopup {
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
position: relative;
|
|
||||||
.wrapper {
|
.wrapper {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 50%;
|
top: 50%;
|
||||||
|
|||||||
@@ -9,12 +9,12 @@
|
|||||||
<p>1.请检测您的网络是否正常,手机是否开了VPN或10分钟后再尝试访问。</p>
|
<p>1.请检测您的网络是否正常,手机是否开了VPN或10分钟后再尝试访问。</p>
|
||||||
<p>
|
<p>
|
||||||
2.前往官网地址
|
2.前往官网地址
|
||||||
<span @click="download2">91PORN01.CC</span>
|
<span @click="download2">HGAIDJ.APP</span>
|
||||||
下载最新版。
|
下载最新版。
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
官方备用:
|
官方备用:
|
||||||
<span @click="download">91PORN01.CC</span>
|
<span @click="download">HGAIDJ.APP</span>
|
||||||
</p>
|
</p>
|
||||||
<p>3.前往Telegram官方交流群</p>
|
<p>3.前往Telegram官方交流群</p>
|
||||||
<div class="footer-box">
|
<div class="footer-box">
|
||||||
@@ -30,13 +30,13 @@ import { ref } from 'vue';
|
|||||||
import { compatibleAppStoreJump } from '@/utils/index';
|
import { compatibleAppStoreJump } from '@/utils/index';
|
||||||
const isShow = ref(true);
|
const isShow = ref(true);
|
||||||
const download = () => {
|
const download = () => {
|
||||||
compatibleAppStoreJump('https://91porn01.cc');
|
compatibleAppStoreJump('https://hgaidj.app');
|
||||||
};
|
};
|
||||||
const download1 = () => {
|
const download1 = () => {
|
||||||
compatibleAppStoreJump('https://lolii.fm');
|
compatibleAppStoreJump('https://lolii.fm');
|
||||||
};
|
};
|
||||||
const download2 = () => {
|
const download2 = () => {
|
||||||
compatibleAppStoreJump('https://91porn01.cc');
|
compatibleAppStoreJump('https://hgaidj.app');
|
||||||
};
|
};
|
||||||
const toPotato = () => {
|
const toPotato = () => {
|
||||||
compatibleAppStoreJump('https://t.me/hougong9527');
|
compatibleAppStoreJump('https://t.me/hougong9527');
|
||||||
|
|||||||
@@ -1,16 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<!-- 商店包下载按钮 -->
|
|
||||||
<div class="iosAppStoreBtn" @click="download" v-if="activeLayerKey === 'shopIosLink'">
|
|
||||||
<SvgIcon name="closeIosAppStore" @click.stop="closeShopIosLink" />
|
|
||||||
</div>
|
|
||||||
<!-- 弹窗广告 -->
|
|
||||||
<HomePopupAdv v-if="activeLayerKey === 'homeAdv'" :advList="state.advList" @close="closeHomePopupAdv" />
|
|
||||||
<!-- APP公告 -->
|
|
||||||
<AnnouncementPopup
|
|
||||||
v-if="activeLayerKey === 'announcement'"
|
|
||||||
:announList="state.announList"
|
|
||||||
@close="closeAnnouncementPopup"
|
|
||||||
/>
|
|
||||||
<!-- 系统公告 -->
|
<!-- 系统公告 -->
|
||||||
<!-- <SystemAnnouncement /> -->
|
<!-- <SystemAnnouncement /> -->
|
||||||
<!-- 浮窗广告 -->
|
<!-- 浮窗广告 -->
|
||||||
@@ -29,19 +17,17 @@
|
|||||||
<!-- 首页付费分层弹窗 -->
|
<!-- 首页付费分层弹窗 -->
|
||||||
<HomepagePaymentPopup v-if="activeLayerKey === 'paymentHome'" @close="closePaymentHomePopup" />
|
<HomepagePaymentPopup v-if="activeLayerKey === 'paymentHome'" @close="closePaymentHomePopup" />
|
||||||
<!-- 轮播浮窗(不参与弹窗顺序队列) -->
|
<!-- 轮播浮窗(不参与弹窗顺序队列) -->
|
||||||
<SwipeFloat v-if="!activeLayerKey && !nineGridPopupVisible" />
|
<SwipeFloat v-if="!activeLayerKey && !launchAdPopupKey" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { computed, defineAsyncComponent, onDeactivated, reactive, ref, watch } from 'vue';
|
import { computed, defineAsyncComponent, onDeactivated, reactive, ref, watch } from 'vue';
|
||||||
import { useGlobalStore } from '@/stores/global';
|
import { useGlobalStore } from '@/stores/global';
|
||||||
import { useConfigStore } from '@/stores/config';
|
import { useConfigStore } from '@/stores/config';
|
||||||
import { AdType } from '@/enums/app';
|
|
||||||
import { getAdItem } from '@/utils/getConfig';
|
|
||||||
import { useRouter } from 'vue-router';
|
import { useRouter } from 'vue-router';
|
||||||
import { judgeTime } from '@/utils/index';
|
import { judgeTime } from '@/utils/index';
|
||||||
import { isPaymentPlayPageStatus, resolvePaymentConfigImg } from '@/utils/paymentStatusPopup';
|
import { isPaymentPlayPageStatus, resolvePaymentConfigImg } from '@/utils/paymentStatusPopup';
|
||||||
import { nineGridPopupVisible } from '@/utils/nineGridPopup';
|
import { launchAdPopupKey } from '@/utils/launchAdPopup';
|
||||||
import SwipeFloat from './swipeFloat.vue';
|
import SwipeFloat from './swipeFloat.vue';
|
||||||
|
|
||||||
const HomepagePaymentPopup = defineAsyncComponent(() => import('@/components/HomepagePaymentPopup/index.vue'));
|
const HomepagePaymentPopup = defineAsyncComponent(() => import('@/components/HomepagePaymentPopup/index.vue'));
|
||||||
@@ -54,11 +40,7 @@ const configStore = useConfigStore();
|
|||||||
const state = reactive({
|
const state = reactive({
|
||||||
tabList: <Array<Types.Home.HomeTabItem>>[],
|
tabList: <Array<Types.Home.HomeTabItem>>[],
|
||||||
tabActive: 0,
|
tabActive: 0,
|
||||||
isShowAdvPopup: !globalStore.homeAdvFirst, // 首页弹窗广告
|
|
||||||
isShowPaymentHomePopup: !globalStore.homePaymentPopupFirst, // 首页付费分层弹窗
|
isShowPaymentHomePopup: !globalStore.homePaymentPopupFirst, // 首页付费分层弹窗
|
||||||
advList: <Array<Types.App.AdsInfoListItem>>[], // 弹窗广告数据
|
|
||||||
isShowAnnouncementPopup: !globalStore.announcementFirst, // app公告
|
|
||||||
announList: <Array<Types.App.AnnounListItem>>[], //公告数据
|
|
||||||
isShowPersalePopup: !globalStore.presaleFirst, //预售弹框
|
isShowPersalePopup: !globalStore.presaleFirst, //预售弹框
|
||||||
isHasPresale: false, //是否开启预售活动
|
isHasPresale: false, //是否开启预售活动
|
||||||
isShowPayPersalePopup: !globalStore.payPresaleFirst, //支付预售尾款弹框
|
isShowPayPersalePopup: !globalStore.payPresaleFirst, //支付预售尾款弹框
|
||||||
@@ -69,19 +51,11 @@ const state = reactive({
|
|||||||
showLuckIcon: true, //是否显示抽奖图标
|
showLuckIcon: true, //是否显示抽奖图标
|
||||||
showAiIcon: false, //是否显示Ai图标
|
showAiIcon: false, //是否显示Ai图标
|
||||||
closeAiAcount: 0, // 关闭ai脱衣次数
|
closeAiAcount: 0, // 关闭ai脱衣次数
|
||||||
showShopIosLink: false,
|
|
||||||
isChangeList: false,
|
isChangeList: false,
|
||||||
homeTabActive: 1,
|
homeTabActive: 1,
|
||||||
});
|
});
|
||||||
|
|
||||||
type ModalLayerKey =
|
type ModalLayerKey = 'jointGame' | 'payPresale' | 'persale' | 'paymentHome';
|
||||||
| 'homeAdv'
|
|
||||||
| 'announcement'
|
|
||||||
| 'jointGame'
|
|
||||||
| 'payPresale'
|
|
||||||
| 'persale'
|
|
||||||
| 'shopIosLink'
|
|
||||||
| 'paymentHome';
|
|
||||||
|
|
||||||
const shouldShowPaymentHomePopup = computed(() => {
|
const shouldShowPaymentHomePopup = computed(() => {
|
||||||
if (!isPaymentPlayPageStatus(configStore.appConfig?.paymentStatusPopup)) return false;
|
if (!isPaymentPlayPageStatus(configStore.appConfig?.paymentStatusPopup)) return false;
|
||||||
@@ -91,18 +65,12 @@ const shouldShowPaymentHomePopup = computed(() => {
|
|||||||
const isModalLayerReady = (key: ModalLayerKey): boolean => {
|
const isModalLayerReady = (key: ModalLayerKey): boolean => {
|
||||||
const advancePage = configStore.appConfig.advancePage;
|
const advancePage = configStore.appConfig.advancePage;
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case 'homeAdv':
|
|
||||||
return state.isShowAdvPopup && state.advList.length > 0;
|
|
||||||
case 'announcement':
|
|
||||||
return state.isShowAnnouncementPopup && state.announList.length > 0;
|
|
||||||
case 'jointGame':
|
case 'jointGame':
|
||||||
return state.isShowGamePopup && state.isHaveGameActive;
|
return state.isShowGamePopup && state.isHaveGameActive;
|
||||||
case 'payPresale':
|
case 'payPresale':
|
||||||
return state.isShowPayPersalePopup && state.isPayPresale && !!advancePage?.popBgProc;
|
return state.isShowPayPersalePopup && state.isPayPresale && !!advancePage?.popBgProc;
|
||||||
case 'persale':
|
case 'persale':
|
||||||
return state.isShowPersalePopup && state.isHasPresale && !!advancePage?.popBgWait;
|
return state.isShowPersalePopup && state.isHasPresale && !!advancePage?.popBgWait;
|
||||||
case 'shopIosLink':
|
|
||||||
return state.showShopIosLink && !!configStore.appConfig.shopIosLink;
|
|
||||||
case 'paymentHome':
|
case 'paymentHome':
|
||||||
return state.isShowPaymentHomePopup && shouldShowPaymentHomePopup.value;
|
return state.isShowPaymentHomePopup && shouldShowPaymentHomePopup.value;
|
||||||
default:
|
default:
|
||||||
@@ -110,19 +78,17 @@ const isModalLayerReady = (key: ModalLayerKey): boolean => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// 九宫格应用广告不在这里:它挂在 MainView 跟着启动落地页弹,本队列等它关闭后再开始
|
// 广告类弹窗(九宫格/弹窗广告/APP公告)不在这里:它们挂在 MainView 跟着启动落地页弹,
|
||||||
|
// 本队列等那条链走完再开始
|
||||||
const modalLayerQueue: { key: ModalLayerKey }[] = [
|
const modalLayerQueue: { key: ModalLayerKey }[] = [
|
||||||
{ key: 'homeAdv' },
|
|
||||||
{ key: 'announcement' },
|
|
||||||
{ key: 'jointGame' },
|
{ key: 'jointGame' },
|
||||||
{ key: 'payPresale' },
|
{ key: 'payPresale' },
|
||||||
{ key: 'persale' },
|
{ key: 'persale' },
|
||||||
{ key: 'paymentHome' },
|
{ key: 'paymentHome' },
|
||||||
{ key: 'shopIosLink' },
|
|
||||||
];
|
];
|
||||||
|
|
||||||
const activeLayerKey = computed(() => {
|
const activeLayerKey = computed(() => {
|
||||||
if (nineGridPopupVisible.value) return '';
|
if (launchAdPopupKey.value) return '';
|
||||||
return modalLayerQueue.find((item) => isModalLayerReady(item.key))?.key || '';
|
return modalLayerQueue.find((item) => isModalLayerReady(item.key))?.key || '';
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -130,7 +96,7 @@ const activeLayerKey = computed(() => {
|
|||||||
const emit = defineEmits(['queue-busy']);
|
const emit = defineEmits(['queue-busy']);
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => !!activeLayerKey.value || nineGridPopupVisible.value,
|
() => !!activeLayerKey.value || !!launchAdPopupKey.value,
|
||||||
(busy) => {
|
(busy) => {
|
||||||
emit('queue-busy', busy);
|
emit('queue-busy', busy);
|
||||||
},
|
},
|
||||||
@@ -139,12 +105,6 @@ watch(
|
|||||||
|
|
||||||
/** 无配置时清掉展示标记,避免占队列位置 */
|
/** 无配置时清掉展示标记,避免占队列位置 */
|
||||||
const skipUnconfiguredLayers = () => {
|
const skipUnconfiguredLayers = () => {
|
||||||
if (state.advList.length === 0) {
|
|
||||||
state.isShowAdvPopup = false;
|
|
||||||
}
|
|
||||||
if (state.announList.length === 0) {
|
|
||||||
state.isShowAnnouncementPopup = false;
|
|
||||||
}
|
|
||||||
if (!state.isHaveGameActive) {
|
if (!state.isHaveGameActive) {
|
||||||
state.isShowGamePopup = false;
|
state.isShowGamePopup = false;
|
||||||
}
|
}
|
||||||
@@ -157,13 +117,9 @@ const skipUnconfiguredLayers = () => {
|
|||||||
state.isShowPayPersalePopup = false;
|
state.isShowPayPersalePopup = false;
|
||||||
state.isPayPresale = false;
|
state.isPayPresale = false;
|
||||||
}
|
}
|
||||||
if (!configStore.appConfig.shopIosLink) {
|
|
||||||
state.showShopIosLink = false;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const init = () => {
|
const init = () => {
|
||||||
state.showShopIosLink = localStorage.getItem('isAppStore') ? false : true;
|
|
||||||
// 预售弹框
|
// 预售弹框
|
||||||
const advancePage = configStore.appConfig.advancePage;
|
const advancePage = configStore.appConfig.advancePage;
|
||||||
let data = configStore.appConfig.advanceStatus;
|
let data = configStore.appConfig.advanceStatus;
|
||||||
@@ -185,14 +141,6 @@ const init = () => {
|
|||||||
state.isHaveGameActive = true;
|
state.isHaveGameActive = true;
|
||||||
globalStore.setJoinGameingFirst();
|
globalStore.setJoinGameingFirst();
|
||||||
}
|
}
|
||||||
state.advList = getAdItem(AdType.HOMEPOPUPADV);
|
|
||||||
if (state.advList && state.advList.length > 0) {
|
|
||||||
globalStore.setHomeAdvFirst();
|
|
||||||
}
|
|
||||||
if (configStore.appConfig.announList && configStore.appConfig.announList.length > 0) {
|
|
||||||
state.announList = JSON.parse(JSON.stringify(configStore.appConfig.announList));
|
|
||||||
globalStore.setAnnouncementFirst();
|
|
||||||
}
|
|
||||||
if (shouldShowPaymentHomePopup.value) {
|
if (shouldShowPaymentHomePopup.value) {
|
||||||
globalStore.setHomePaymentPopupFirst();
|
globalStore.setHomePaymentPopupFirst();
|
||||||
}
|
}
|
||||||
@@ -200,12 +148,6 @@ const init = () => {
|
|||||||
};
|
};
|
||||||
init();
|
init();
|
||||||
|
|
||||||
const download = () => {
|
|
||||||
window.location.href = configStore.appConfig.shopIosLink;
|
|
||||||
};
|
|
||||||
const closeShopIosLink = () => {
|
|
||||||
state.showShopIosLink = false;
|
|
||||||
};
|
|
||||||
const closePersale = (type: any) => {
|
const closePersale = (type: any) => {
|
||||||
if (!type) {
|
if (!type) {
|
||||||
router.push('/presale');
|
router.push('/presale');
|
||||||
@@ -228,12 +170,6 @@ const closeJointGameingPop = (type: any) => {
|
|||||||
state.isHaveGameActive = false;
|
state.isHaveGameActive = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
const closeHomePopupAdv = () => {
|
|
||||||
state.isShowAdvPopup = false;
|
|
||||||
};
|
|
||||||
const closeAnnouncementPopup = () => {
|
|
||||||
state.isShowAnnouncementPopup = false;
|
|
||||||
};
|
|
||||||
const closePaymentHomePopup = () => {
|
const closePaymentHomePopup = () => {
|
||||||
state.isShowPaymentHomePopup = false;
|
state.isShowPaymentHomePopup = false;
|
||||||
};
|
};
|
||||||
@@ -246,23 +182,6 @@ onDeactivated(() => {
|
|||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.iosAppStoreBtn {
|
|
||||||
height: 36px;
|
|
||||||
width: 284px;
|
|
||||||
background: url('@/assets/gif/iosAppStoreBtn.gif') no-repeat;
|
|
||||||
background-size: 100% 100%;
|
|
||||||
position: fixed;
|
|
||||||
left: 0px;
|
|
||||||
top: 443px;
|
|
||||||
z-index: 99;
|
|
||||||
> svg {
|
|
||||||
height: 16px;
|
|
||||||
width: 16px;
|
|
||||||
position: absolute;
|
|
||||||
right: -8px;
|
|
||||||
top: -8px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.persalebox {
|
.persalebox {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
bottom: 30%;
|
bottom: 30%;
|
||||||
|
|||||||
@@ -55,10 +55,8 @@ const close = () => {
|
|||||||
:deep(.van-overlay) {
|
:deep(.van-overlay) {
|
||||||
background-color: rgba(0, 0, 0, 1);
|
background-color: rgba(0, 0, 0, 1);
|
||||||
}
|
}
|
||||||
|
// 根节点不占位:挂在 MainView 里与 TabBar 同级,撑高会顶出额外滚动;居中由 fixed 的 van-overlay 定位
|
||||||
.announcementPopup {
|
.announcementPopup {
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
position: relative;
|
|
||||||
.imgWrapper {
|
.imgWrapper {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
|
|||||||
+1
-1
@@ -23,7 +23,7 @@ export enum SourceType {
|
|||||||
*/
|
*/
|
||||||
export enum AdType {
|
export enum AdType {
|
||||||
START = 1, /// 启动广告
|
START = 1, /// 启动广告
|
||||||
HOMEPOPUPADV = 46, // 首页弹窗广告 2
|
HOMEPOPUPADV = 2, // 弹窗广告(图片公告) 2
|
||||||
HOME = 4, /// 首页 110*110
|
HOME = 4, /// 首页 110*110
|
||||||
COMMUNITYCAROUSEL = 7, /// 社区广告位 110*110
|
COMMUNITYCAROUSEL = 7, /// 社区广告位 110*110
|
||||||
QualityApplication = 3, //精品应用 3 (16宫格广告)
|
QualityApplication = 3, //精品应用 3 (16宫格广告)
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
import { ref } from 'vue';
|
||||||
|
|
||||||
|
/** 启动广告弹窗链的环节:九宫格应用广告 → 弹窗广告 → APP公告 */
|
||||||
|
export type LaunchAdPopupKey = 'nineGrid' | 'homeAdv' | 'announcement';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 当前正在展示的启动广告弹窗,'' 表示整条链已走完。
|
||||||
|
* 弹窗挂在 MainView,跟着启动落地页弹(不固定在首页,默认落在短视频 tab 也会弹);
|
||||||
|
* 首页 HomeAdv 的弹窗队列须等这条链走完再开始,避免叠在一起。
|
||||||
|
*/
|
||||||
|
export const launchAdPopupKey = ref<LaunchAdPopupKey | ''>('');
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
import { ref } from 'vue';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 九宫格应用广告弹窗是否正在展示。
|
|
||||||
* 弹窗挂在 MainView,跟着启动落地页弹(默认落在短视频 tab,不依赖首页被挂载);
|
|
||||||
* 首页 HomeAdv 弹窗队列须等它关闭后再接着弹,避免叠在一起。
|
|
||||||
*/
|
|
||||||
export const nineGridPopupVisible = ref(false);
|
|
||||||
+64
-7
@@ -18,8 +18,19 @@
|
|||||||
:scene="vipContentGuideScene"
|
:scene="vipContentGuideScene"
|
||||||
@close="closeVipContentGuide"
|
@close="closeVipContentGuide"
|
||||||
/>
|
/>
|
||||||
<!-- 九宫格应用广告:启动后不管落在哪个 tab 都弹,每次启动只弹一次 -->
|
<!-- 启动广告弹窗链:九宫格 → 弹窗广告 → APP公告。
|
||||||
<NineGridPopup v-if="nineGridPopupVisible" :is-open="true" @close="nineGridPopupVisible = false" />
|
跟着启动落地页弹,不固定在首页;每次启动只弹一次,逐个关闭后再弹下一个 -->
|
||||||
|
<NineGridPopup v-if="launchAdPopupKey === 'nineGrid'" :is-open="true" @close="showNextLaunchAd" />
|
||||||
|
<HomePopupAdv
|
||||||
|
v-else-if="launchAdPopupKey === 'homeAdv'"
|
||||||
|
:advList="launchAdData.advList"
|
||||||
|
@close="showNextLaunchAd"
|
||||||
|
/>
|
||||||
|
<AnnouncementPopup
|
||||||
|
v-else-if="launchAdPopupKey === 'announcement'"
|
||||||
|
:announList="launchAdData.announList"
|
||||||
|
@close="showNextLaunchAd"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
@@ -34,19 +45,65 @@ import { computed } from 'vue';
|
|||||||
import { useRoute } from 'vue-router';
|
import { useRoute } from 'vue-router';
|
||||||
import PaymentGuidePopup from '@/components/PaymentGuidePopup/index.vue';
|
import PaymentGuidePopup from '@/components/PaymentGuidePopup/index.vue';
|
||||||
import NineGridPopup from '@/components/NineGridPopup/index.vue';
|
import NineGridPopup from '@/components/NineGridPopup/index.vue';
|
||||||
|
import HomePopupAdv from '@/components/HomePopupAdv/index.vue';
|
||||||
|
import AnnouncementPopup from '@/components/AnnouncementPopup/index.vue';
|
||||||
import { useVipContentUpdateGuideOnMainTabs } from '@/hooks/useVipContentUpdateGuideOnMainTabs';
|
import { useVipContentUpdateGuideOnMainTabs } from '@/hooks/useVipContentUpdateGuideOnMainTabs';
|
||||||
import { AdType } from '@/enums/app';
|
import { AdType } from '@/enums/app';
|
||||||
import { getAdItem } from '@/utils/getConfig';
|
import { getAdItem } from '@/utils/getConfig';
|
||||||
import { nineGridPopupVisible } from '@/utils/nineGridPopup';
|
import { launchAdPopupKey, type LaunchAdPopupKey } from '@/utils/launchAdPopup';
|
||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
const globalStore = useGlobalStore();
|
const globalStore = useGlobalStore();
|
||||||
const configStore = useConfigStore();
|
const configStore = useConfigStore();
|
||||||
|
|
||||||
if (!globalStore.nineGridFirst && (getAdItem(AdType.QualityApplication) || []).length > 0) {
|
/** 启动广告数据:链上每个弹窗各取各的配置,没配的环节直接跳过 */
|
||||||
globalStore.setNineGridFirst();
|
const launchAdData = {
|
||||||
nineGridPopupVisible.value = true;
|
nineGridList: <Array<Types.App.AdsInfoListItem>>[],
|
||||||
}
|
advList: <Array<Types.App.AdsInfoListItem>>[],
|
||||||
|
announList: <Array<Types.App.AnnounListItem>>[],
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 弹窗顺序与安卓一致:九宫格 → 弹窗广告 → APP公告。
|
||||||
|
* markShown 用 store 里的「第一次」标记(sessionStorage),保证 MainView 重新挂载也不会重弹
|
||||||
|
*/
|
||||||
|
const launchAdChain: { key: LaunchAdPopupKey; ready: () => boolean; markShown: () => void }[] = [
|
||||||
|
{
|
||||||
|
key: 'nineGrid',
|
||||||
|
ready: () => !globalStore.nineGridFirst && launchAdData.nineGridList.length > 0,
|
||||||
|
markShown: () => globalStore.setNineGridFirst(),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'homeAdv',
|
||||||
|
ready: () => !globalStore.homeAdvFirst && launchAdData.advList.length > 0,
|
||||||
|
markShown: () => globalStore.setHomeAdvFirst(),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'announcement',
|
||||||
|
ready: () => !globalStore.announcementFirst && launchAdData.announList.length > 0,
|
||||||
|
markShown: () => globalStore.setAnnouncementFirst(),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
/** 弹下一个:标记已弹再展示,关闭回调复用本方法,链走完置空 */
|
||||||
|
const showNextLaunchAd = () => {
|
||||||
|
const step = launchAdChain.find((item) => item.ready());
|
||||||
|
if (!step) {
|
||||||
|
launchAdPopupKey.value = '';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
step.markShown();
|
||||||
|
launchAdPopupKey.value = step.key;
|
||||||
|
};
|
||||||
|
|
||||||
|
const initLaunchAdChain = () => {
|
||||||
|
launchAdData.nineGridList = getAdItem(AdType.QualityApplication) || [];
|
||||||
|
launchAdData.advList = getAdItem(AdType.HOMEPOPUPADV) || [];
|
||||||
|
const announList = configStore.appConfig.announList;
|
||||||
|
launchAdData.announList = announList?.length ? JSON.parse(JSON.stringify(announList)) : [];
|
||||||
|
showNextLaunchAd();
|
||||||
|
};
|
||||||
|
initLaunchAdChain();
|
||||||
const {
|
const {
|
||||||
visible: vipContentGuideVisible,
|
visible: vipContentGuideVisible,
|
||||||
guide: vipContentGuide,
|
guide: vipContentGuide,
|
||||||
|
|||||||
+12
-34
@@ -12,7 +12,6 @@
|
|||||||
<span v-show="state.countdown > 0">{{ state.countdown }}</span>
|
<span v-show="state.countdown > 0">{{ state.countdown }}</span>
|
||||||
<div class="jump_over" v-show="state.countdown <= 0" @click="goApp">跳过</div>
|
<div class="jump_over" v-show="state.countdown <= 0" @click="goApp">跳过</div>
|
||||||
</div>
|
</div>
|
||||||
<EnterGroupPopup v-if="state.isCheckError" />
|
|
||||||
<!-- <UpgradePopup :show="state.isUpgrade" /> -->
|
<!-- <UpgradePopup :show="state.isUpgrade" /> -->
|
||||||
<div class="selectLineBox" v-if="state.loading">
|
<div class="selectLineBox" v-if="state.loading">
|
||||||
<van-loading color="#1989fa" size="30" />
|
<van-loading color="#1989fa" size="30" />
|
||||||
@@ -50,11 +49,8 @@ const state = reactive({
|
|||||||
timer: <any>null, //广告定时器
|
timer: <any>null, //广告定时器
|
||||||
checkTimer: <any>null, //检测图片是否加载成功定时器
|
checkTimer: <any>null, //检测图片是否加载成功定时器
|
||||||
checkTime: 3, //图片加载成功检测时间
|
checkTime: 3, //图片加载成功检测时间
|
||||||
isCheckError: false, //是否选线失败
|
|
||||||
checkLineErrorNum: 0, //选线失败次数
|
|
||||||
isResLock: false, // 请求结果锁
|
isResLock: false, // 请求结果锁
|
||||||
resResult: <any>[], // 响应结果
|
lineFailCount: 0, // 已失败的线路数
|
||||||
pingCheckCount: 0, // 请求的ping失败次数
|
|
||||||
loading: true, // 选线loading
|
loading: true, // 选线loading
|
||||||
isUpgrade: true, //是否升级
|
isUpgrade: true, //是否升级
|
||||||
});
|
});
|
||||||
@@ -353,30 +349,14 @@ const getConfig = async (): Promise<boolean> => {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
const pingErrorPop = (hosts: any) => {
|
/**
|
||||||
// 只有最后一条域名出错时,判断响应结果不存在true的时候,说明全部不通,即弹出选线失败
|
* @description 选线失败:同安卓,失败不做处理(不弹重试/线路异常弹窗)。
|
||||||
state.pingCheckCount++;
|
* 全部线路都不通就收起「选线中...」,启动流程停在启动页
|
||||||
if (state.pingCheckCount == hosts.length) {
|
*/
|
||||||
state.pingCheckCount = 0;
|
const onLineCheckFail = (hosts: any) => {
|
||||||
let index = state.resResult.indexOf(true);
|
state.lineFailCount++;
|
||||||
if (index == -1) {
|
if (state.lineFailCount >= hosts.length && !state.isResLock) {
|
||||||
if (state.checkLineErrorNum == 1) {
|
state.loading = false;
|
||||||
state.isCheckError = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
showDialog({
|
|
||||||
title: '温馨提示',
|
|
||||||
message: '选线失败',
|
|
||||||
confirmButtonText: '重试',
|
|
||||||
theme: 'round-button',
|
|
||||||
}).then(() => {
|
|
||||||
state.checkLineErrorNum++;
|
|
||||||
appStore.$reset();
|
|
||||||
userStore.$reset();
|
|
||||||
configStore.$reset();
|
|
||||||
init();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
/**
|
/**
|
||||||
@@ -389,8 +369,7 @@ const init = async () => {
|
|||||||
: localStorage.setItem('isAppStore', ''); // 保存是否来自商店包,用于判断是否跳转外链
|
: localStorage.setItem('isAppStore', ''); // 保存是否来自商店包,用于判断是否跳转外链
|
||||||
const baseUrls: string = process.env.VITE_BASE_URL || '[]';
|
const baseUrls: string = process.env.VITE_BASE_URL || '[]';
|
||||||
const hosts = JSON.parse(baseUrls);
|
const hosts = JSON.parse(baseUrls);
|
||||||
state.resResult = new Array(hosts.length);
|
hosts.forEach((url: any) => {
|
||||||
hosts.forEach((url: any, index: number) => {
|
|
||||||
axios({
|
axios({
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
url: url + '/api/app/ping/check',
|
url: url + '/api/app/ping/check',
|
||||||
@@ -400,17 +379,16 @@ const init = async () => {
|
|||||||
if (res.data.code == 200) {
|
if (res.data.code == 200) {
|
||||||
if (!state.isResLock) {
|
if (!state.isResLock) {
|
||||||
state.isResLock = true;
|
state.isResLock = true;
|
||||||
state.resResult[index] = true;
|
|
||||||
//选线成功
|
//选线成功
|
||||||
useConfigStore().saveBaseUrl(url);
|
useConfigStore().saveBaseUrl(url);
|
||||||
await ensureAuthAndConfig();
|
await ensureAuthAndConfig();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
pingErrorPop(hosts);
|
onLineCheckFail(hosts);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(() => {
|
.catch(() => {
|
||||||
pingErrorPop(hosts);
|
onLineCheckFail(hosts);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -52,11 +52,6 @@ const typeList = ref([
|
|||||||
content:
|
content:
|
||||||
'本平台有主要收益为广告赞助,且保证APP安全无毒,因平台主要展示内容为色情属于特殊行业,某些杀毒软件会误报毒提醒,如遇此类提醒请忽略继续使用。',
|
'本平台有主要收益为广告赞助,且保证APP安全无毒,因平台主要展示内容为色情属于特殊行业,某些杀毒软件会误报毒提醒,如遇此类提醒请忽略继续使用。',
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: '官方联系方式?',
|
|
||||||
type: 5,
|
|
||||||
content: '商务合作:https://t1t1.com <br/> 永久下载地址:91porn01.cc',
|
|
||||||
},
|
|
||||||
// {
|
// {
|
||||||
// name: '如何填写邀请码',
|
// name: '如何填写邀请码',
|
||||||
// type: 6,
|
// type: 6,
|
||||||
|
|||||||
Reference in New Issue
Block a user