This commit is contained in:
谢宇宁
2026-10-09 18:18:35 +07:00
parent cc37cc173a
commit a80543e329
28 changed files with 165 additions and 401 deletions
+2
View File
@@ -7,3 +7,5 @@ VITE_PARAMETER_ENCRYPTION = 0 # 是否开启参数加密 0关闭 1开
VITE_BASE_URL= ["https://hgmjapi.mfcg.me"]
# VITE_BASE_URL= ["https://d2z5kdxehdlq36.cloudfront.net", "https://ajhsapp.com", "https://d27qym7qkxaiyj.cloudfront.net"]
# VITE_BASE_URL= ["https://d2z5kdxehdlq36.cloudfront.net", "https://ajhsapp.com", "https://d27qym7qkxaiyj.cloudfront.net"] # api选线域名,这里必须为数组
VITE_ADV_API_URL = http://139.162.47.194:8089 # 导航站广告接口地址
VITE_ADV_APP_ID = 11 # 导航站广告接口 appId
+4 -1
View File
@@ -4,4 +4,7 @@ VITE_BUILD_SOURCEMAP = false # 是否在打包时生成 sourcemap
VITE_BUILD_DROP_CONSOLE = true # 是否在打包时删除 console 代码
VITE_BUILD_VCONSOLE = false # 是否开启调试工具 vconsole
VITE_PARAMETER_ENCRYPTION = 1 # 是否开启参数加密 0关闭 1开启
VITE_BASE_URL= ["https://ju3w5.com", "https://d5rh4pelm4rfc.cloudfront.net", "https://d2g55f11bbjlme.cloudfront.net"] # api选线域名,这里必须为数组
VITE_BASE_URL= ["https://hgmjapi.mfcg.me"] # api选线域名,这里必须为数组
# VITE_BASE_URL= ["https://ju3w5.com", "https://d5rh4pelm4rfc.cloudfront.net", "https://d2g55f11bbjlme.cloudfront.net"] # 旧配置:前后两个域名已无法解析,中间一个未确认是否为黄果后端
VITE_ADV_API_URL = http://139.162.47.194:8089 # 导航站广告接口地址
VITE_ADV_APP_ID = 11 # 导航站广告接口 appId
+3 -1
View File
@@ -5,4 +5,6 @@ VITE_BUILD_DROP_CONSOLE = true # 是否在打包时删除 console 代码
VITE_BUILD_VCONSOLE = false # 是否开启调试工具 vconsole
VITE_PARAMETER_ENCRYPTION = 0 # 是否开启参数加密 0关闭 1开启
VITE_BASE_URL= ["https://dhpht.cestalt.com"] # api选线域名,这里必须为数组
# VITE_BASE_URL= ["https://d2z5kdxehdlq36.cloudfront.net", "https://ajhsapp.com", "https://d27qym7qkxaiyj.cloudfront.net"] # api选线域名,这里必须为数组
# VITE_BASE_URL= ["https://d2z5kdxehdlq36.cloudfront.net", "https://ajhsapp.com", "https://d27qym7qkxaiyj.cloudfront.net"] # api选线域名,这里必须为数组
VITE_ADV_API_URL = http://139.162.47.194:8089 # 导航站广告接口地址
VITE_ADV_APP_ID = 11 # 导航站广告接口 appId
+2 -2
View File
@@ -3,10 +3,10 @@
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<link rel="icon" type="image/png" href="/favicon.png?v=2" />
<meta name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, viewport-fit=cover" />
<title></title>
<title>黄果导航站</title>
</head>
<style>
@media (min-width: 768px) {
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

-4
View File
@@ -1,4 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="26" height="27" viewBox="0 0 26 27" fill="none">
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.62329 4.51526C4.32117 5.72764 3.24502 7.75455 2.79756 10.9472C1.93558 17.0976 3.04801 20.2357 4.44057 21.8761C5.83946 23.5239 7.76532 23.9575 9.26147 24.1317C12.2815 24.4833 13.8175 23.4783 15.4659 22.3999C15.9229 22.101 16.3885 21.7964 16.8967 21.5135C17.6917 21.071 18.4426 20.7255 19.0744 20.4427C19.1769 20.3968 19.2746 20.3533 19.3678 20.3117C19.8764 20.085 20.2499 19.9185 20.5323 19.7608C21.9856 18.9496 22.9041 17.5812 23.0864 15.7869C23.2712 13.9678 22.7003 11.6264 20.9581 8.98853C18.3431 5.44972 14.053 2.95806 10.3563 2.85132C8.54469 2.79902 6.91254 3.31487 5.62329 4.51526ZM10.4291 0.383029C15.0674 0.51695 20.0298 3.53147 22.9933 7.55934L23.0113 7.5837L23.028 7.6089C25.0033 10.589 25.8269 13.4984 25.5693 16.034C25.3086 18.6002 23.9421 20.6926 21.7584 21.9116C21.3681 22.1295 20.8686 22.3517 20.3687 22.5741C20.2799 22.6136 20.1912 22.653 20.103 22.6925C19.4878 22.9679 18.8172 23.2776 18.1202 23.6657C17.7982 23.8449 17.4523 24.0752 17.0719 24.3284C15.371 25.4606 12.9815 27.0511 8.96991 26.5841C7.29529 26.3892 4.55821 25.8538 2.52982 23.4644C0.495108 21.0675 -0.584088 17.1 0.325769 10.608C0.826168 7.03756 2.07971 4.42402 3.91324 2.71686C5.75965 0.997696 8.06911 0.314888 10.4291 0.383029Z" fill="white"/>
<path d="M15.84 14.8719C15.84 17.8502 13.4257 20.2646 10.4474 20.2646C7.46907 20.2646 5.05469 17.8502 5.05469 14.8719C5.05469 11.8936 7.46907 9.47925 10.4474 9.47925C13.4257 9.47925 15.84 11.8936 15.84 14.8719Z" fill="#FFC303"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

+2 -57
View File
@@ -1,19 +1,5 @@
<template>
<div class="mobileBottom">
<div class="contactInfo">
<div class="address" @click="jumpPage('/releaseAddress')">地址發布</div>
<div class="contactBox">
<lazyImg
class="contactItem"
:src="item.officialImg"
v-for="(item, index) in contactInfo"
:key="index"
@click="openPage(OFFICIAL_TG_URL)"
/>
<!-- <lazyImg class="contactItem" :src="'cf230705/image/95/29p/5i/39/92cf6fd5189cedaf2e0756b98520b7cd.gif'" />
<lazyImg class="contactItem" :src="'cf230705/image/95/29p/5i/39/92cf6fd5189cedaf2e0756b98520b7cd.gif'" /> -->
</div>
</div>
<div class="gridAdvBox" @touchstart.stop @touchmove.stop @touchend.stop>
<lazyImg class="gridAdv" :src="i.cover" v-for="i in state.advList" :key="i.id" @click="openAdv(i)" />
</div>
@@ -29,12 +15,12 @@
</div>
</template>
<script lang="ts" setup>
import { reactive, computed } from 'vue';
import { reactive } from 'vue';
import { useRouter } from 'vue-router';
import { useConfigStore } from '@/stores/config';
import { getAdItem } from '@/utils/getConfig';
import { AdType } from '@/enums/app';
import { jumpAdv, OFFICIAL_TG_URL } from '@/utils/index';
import { jumpAdv } from '@/utils/index';
const router = useRouter();
const configStore = useConfigStore();
const state = reactive({
@@ -55,52 +41,11 @@ const openPage = (url: string) => {
const openAdv = (item: any) => {
jumpAdv(item);
};
const contactInfo = computed(() => {
return configStore.contactInfo;
// return route.query.tid ? homeStore.homeData[0];
});
</script>
<style lang="scss" scoped>
.mobileBottom {
margin-top: 24px;
.contactInfo {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 0 9px;
margin: 0 16px 17.5px;
border-bottom: 0.5px solid #2d2f34;
// margin-bottom: 17.5px;
.address {
display: flex;
width: 72px;
padding: 6.178px 11.699px;
justify-content: center;
align-items: center;
border-radius: 3.089px;
border: 1px solid #fff;
color: #fff;
font-family: 'PingFang SC';
font-size: 11px;
font-style: normal;
font-weight: 500;
line-height: normal;
}
.contactBox {
display: flex;
align-items: center;
.contactItem {
width: 30px;
height: 30px;
margin-left: 20px;
// :deep(img) {
// object-fit: fill !important;
// }
}
}
}
.gridAdvBox {
display: flex;
align-items: center;
+18 -3
View File
@@ -1,6 +1,9 @@
<template>
<div class="advTopOpt">
<SvgIcon name="logo" class="logo" @click="jumpPage('/home')" />
<div class="logoBox" @click="jumpPage('/home')">
<img class="logo" src="@/assets/images/logo.png" />
<span class="siteName">黄果导航站</span>
</div>
<div class="optGroup">
<SvgIcon name="business" class="business" @click="jumpPage('/mobileBusiness')" />
<div class="official" @click="jumpPage('/mobileConnectInfo')">联系官方</div>
@@ -28,8 +31,20 @@ const jumpPage = (path: string) => {
align-items: center;
gap: 16px;
}
.logo {
width: 25.6px;
.logoBox {
display: flex;
align-items: center;
.logo {
width: 28px;
height: 28px;
border-radius: 7px;
margin-right: 8px;
}
.siteName {
color: #fff;
font-size: 16px;
font-weight: 600;
}
}
.business {
width: 28px;
+2 -42
View File
@@ -2,13 +2,6 @@
<div class="footer-wrap">
<div class="footer">
<div class="box1">
<div class="left" @click="jumpPage('/publishingAddress')">地址发布</div>
<div class="flex-vcenter">
<DecryptImg class="img" v-for="(item, index) in contactInfo" :key="index" :src="item.officialImg" @click="openPage(OFFICIAL_TG_URL)"/>
</div>
</div>
<div class="line"></div>
<div class="img-list">
<DecryptImg v-for="(item, index) in getAdItem(11)" class="img" :src="item.cover" @click="jumpAdv(item)" :key="index"/>
</div>
@@ -26,9 +19,8 @@
</template>
<script setup lang="ts">
import { getAdItem } from '@/utils/getConfig'
import { jumpAdv, OFFICIAL_TG_URL } from '@/utils/index';
import { jumpAdv } from '@/utils/index';
import { useRouter } from 'vue-router';
import { computed } from 'vue';
import { useConfigStore } from '@/stores/config';
const router = useRouter();
@@ -37,9 +29,6 @@ const jumpPage = (path: string) => {
};
const configStore = useConfigStore();
const contactInfo = computed(() => {
return configStore.contactInfo;
});
const openPage = (url: string) => {
window.open(url);
};
@@ -55,39 +44,10 @@ const openPage = (url: string) => {
.footer {
width: 1156px;
padding-top: 10px;
padding-top: 40px;
margin: auto;
}
.box1 {
@include flexBetween;
.left {
width: 87px;
height: 36px;
border-radius: 4px;
border: 1px solid rgba(255, 255, 255, 0.6);
color: #fff;
font-size: 12px;
font-weight: 500;
@include flexCenter;
cursor: pointer;
}
.img {
width: 30px;
height: 30px;
margin-left: 20px;
cursor: pointer;
}
}
.line {
width: 100%;
height: 1px;
background: #333;
margin-top: 24px;
margin-bottom: 35px;
}
.img-list {
display: flex;
flex-wrap: wrap;
+26 -25
View File
@@ -10,31 +10,32 @@ import 'virtual:svg-icons-register';
import svgIcon from '@/components/SvgIcon/index.vue';
import { Lazyload } from 'vant';
import qrcodeVue from 'qrcode.vue';
import * as devtoolsDetector from 'devtools-detector';
const getQuueryVariable = (val: string) => {
const query = window.location.search.substring(1);
const vars = query.split('&');
for (let i = 0; i < vars.length; i++) {
const pair = vars[i].split('=');
if (pair[0] == val) {
return pair[1];
}
}
return false;
};
if (getQuueryVariable('devTest')) {
sessionStorage.setItem('devTest', JSON.stringify(getQuueryVariable('devTest')));
}
const devTest = getQuueryVariable('devTest') || sessionStorage.getItem('devTest');
devtoolsDetector.addListener((isOpen) => {
if (isOpen) {
window.location.replace('https://www.baidu.com');
}
});
if (!devTest && process.env.NODE_ENV == 'production') {
devtoolsDetector.launch();
}
// 防调试:检测到打开开发者工具就跳转百度,暂时关闭
// import * as devtoolsDetector from 'devtools-detector';
//
// const getQuueryVariable = (val: string) => {
// const query = window.location.search.substring(1);
// const vars = query.split('&');
// for (let i = 0; i < vars.length; i++) {
// const pair = vars[i].split('=');
// if (pair[0] == val) {
// return pair[1];
// }
// }
// return false;
// };
// if (getQuueryVariable('devTest')) {
// sessionStorage.setItem('devTest', JSON.stringify(getQuueryVariable('devTest')));
// }
// const devTest = getQuueryVariable('devTest') || sessionStorage.getItem('devTest');
// devtoolsDetector.addListener((isOpen) => {
// if (isOpen) {
// window.location.replace('https://www.baidu.com');
// }
// });
// if (!devTest && process.env.NODE_ENV == 'production') {
// devtoolsDetector.launch();
// }
const app = createApp(App);
app.use(store);
+1 -9
View File
@@ -39,14 +39,6 @@ const routes: RouteRecordRaw[] = [
// title: '分类列表',
// },
// },
{
path: '/releaseAddress',
name: 'releaseAddress',
component: () => import('@/views/mobile/releaseAddress/index.vue'),
meta: {
title: '发布地址',
},
},
{
path: '/mobileBusiness',
name: 'mobileBusiness',
@@ -64,7 +56,7 @@ const router = createRouter({
router.beforeEach((to, from, next) => {
const home = document.querySelector('#home');
home && home.scrollTo(0, 0);
document.title = '蛋黄派-' + to.meta.title;
document.title = '黄果导航站';
const token = localStorage.getItem('token');
if (token || to.path === '/home') {
next();
-9
View File
@@ -2,7 +2,6 @@ import { RouteRecordRaw } from 'vue-router';
import Home from '@/views/pc/home/index.vue'
import Contact from '@/views/pc/contact/index.vue'
import Privacy from '@/views/pc/privacy/index.vue'
import PublishingAddress from '@/views/pc/publishingAddress/index.vue'
import Business from '@/views/pc/business/index.vue'
// pc端路由
@@ -39,14 +38,6 @@ const pcRouter: RouteRecordRaw[] = [
title: "隐私"
},
},
{
path: '/publishingAddress',
name: 'publishingAddress',
component: PublishingAddress,
meta: {
title: "发布地址"
},
},
];
export default pcRouter;
+26
View File
@@ -0,0 +1,26 @@
import axios from 'axios';
export interface AdvertiseItem {
id: number;
title: string;
coverImg: string;
locId: number; // 广告位置ID
jumpType: number;
link: string;
sort: number;
}
/**
* 导航站广告接口,独立于主 API(不走 request 的选线、加密和返回码处理)
*/
export default class AdvApi {
/**
* @description 获取导航站全部广告位的广告
*/
static async getAdvertiseList(): Promise<AdvertiseItem[]> {
const res = await axios.post(`${process.env.VITE_ADV_API_URL}/api/stat/advitise/v2/get`, {
appId: Number(process.env.VITE_ADV_APP_ID),
});
return res.data?.advertiseList || [];
}
}
+32 -7
View File
@@ -1,5 +1,6 @@
import { AdType } from '@/enums/app';
import { useConfigStore } from '@/stores/config';
import AdvApi from '@/service/adv';
/**
* 获取广告
@@ -21,26 +22,50 @@ export function getAdItem(type: AdType): Types.App.AdsInfoListItem[] {
return advList;
}
// 首页主题,对应后台广告位配置(位置ID -> 名称)
// 首页主题,对应导航站后台广告位配置(位置ID -> 名称)
const HOME_AD_SECTIONS = [
{ position: 1, name: '热门应用' },
{ position: 2, name: '推荐' },
{ position: 3, name: '全部应用' },
];
export interface HomeAdItem {
id: number;
title: string;
cover: string;
link: string;
}
export interface HomeAdSection {
position: number;
name: string;
list: Types.App.AdsInfoListItem[];
list: HomeAdItem[];
}
let homeAdSectionsPromise: Promise<HomeAdSection[]> | null = null;
/**
* 获取首页主题及对应广告,没有配置广告的主题不返回
* 获取首页主题及对应广告,没有配置广告的主题不返回;只请求一次,失败后下次调用会重试
*/
export function getHomeAdSections(): HomeAdSection[] {
return HOME_AD_SECTIONS.map((section) => ({ ...section, list: getAdItem(section.position) })).filter(
(section) => section.list.length,
);
export function getHomeAdSections(): Promise<HomeAdSection[]> {
if (!homeAdSectionsPromise) {
homeAdSectionsPromise = AdvApi.getAdvertiseList()
.then((advertiseList) =>
HOME_AD_SECTIONS.map((section) => ({
...section,
list: advertiseList
.filter((item) => item.locId === section.position)
.sort((a, b) => a.sort - b.sort)
.map((item) => ({ id: item.id, title: item.title, cover: item.coverImg, link: item.link })),
})).filter((section) => section.list.length),
)
.catch((error) => {
console.error('获取首页广告失败', error);
homeAdSectionsPromise = null;
return [];
});
}
return homeAdSectionsPromise;
}
/**
+11 -3
View File
@@ -5,7 +5,7 @@
<div class="topicTitle">{{ section.name }}</div>
</div>
<div class="advIconList">
<div class="advIconItem" v-for="adv in section.list" :key="adv.id" @click="jumpAdv(adv)">
<div class="advIconItem" v-for="adv in section.list" :key="adv.id" @click="openAdv(adv)">
<lazyImg class="advIcon" :src="adv.cover" />
<div class="advName">{{ adv.title }}</div>
</div>
@@ -15,10 +15,18 @@
</template>
<script lang="ts" setup>
import { getHomeAdSections } from '@/utils/getConfig';
import { ref } from 'vue';
import { getHomeAdSections, HomeAdItem, HomeAdSection } from '@/utils/getConfig';
import { jumpAdv } from '@/utils/index';
const advSections = getHomeAdSections();
const advSections = ref<HomeAdSection[]>([]);
getHomeAdSections().then((list) => {
advSections.value = list;
});
// 导航站广告只跳转,不走旧接口的点击上报
const openAdv = (adv: HomeAdItem) => {
jumpAdv({ link: adv.link });
};
</script>
<style scoped lang="scss">
+3 -2
View File
@@ -99,10 +99,11 @@ init();
flex-direction: column;
}
.logo {
width: 130px;
width: 84px;
height: 84px;
background: url('../../assets/images/mobile/logo.png') no-repeat;
background: url('../../assets/images/logo.png') no-repeat;
background-size: 100% 100%;
border-radius: 20px;
margin-bottom: 25px;
}
.tipTitle {
-82
View File
@@ -1,82 +0,0 @@
<template>
<div class="releaseAddress overflow-y-auto">
<MobileHeader class="header" />
<div class="contentBox">
<div class="subTitle">备用地址</div>
<div class="urlItem" v-for="(item, index) in urlList" :key="index">
<div class="urlTitle">{{ item.desc }}: </div>
<div class="url" @click="openPage(item.url)">{{ item.url }}</div>
</div>
</div>
<MobileBottom />
</div>
</template>
<script lang="ts"></script>
<script lang="ts" setup>
import { reactive, computed } from 'vue';
import { useConfigStore } from '@/stores/config';
const configStore = useConfigStore();
const state = reactive({});
const urlList: any = computed(() => {
return configStore.sourceInfo.Download;
});
const openPage = (url: string) => {
window.open(url);
};
</script>
<style scoped lang="scss">
.releaseAddress {
height: 100vh;
.header {
position: sticky;
top: 0;
z-index: 11;
}
.contentBox {
padding: 31px 16px 200px;
.subTitle {
color: #fff;
font-family: 'PingFang SC';
font-size: 20px;
font-style: normal;
font-weight: 600;
line-height: 41px; /* 205% */
padding-bottom: 7px;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
margin-bottom: 60px;
}
.urlItem {
display: flex;
align-items: center;
margin-bottom: 56px;
.urlTitle {
color: #fff;
text-align: center;
font-family: 'PingFang SC';
font-size: 14px;
font-style: normal;
font-weight: 600;
line-height: 10.047px; /* 71.761% */
}
.url {
color: var(--Style, #ffcd3f);
font-family: 'PingFang SC';
font-size: 14px;
font-style: normal;
font-weight: 600;
line-height: 10.047px;
text-decoration-line: underline;
text-decoration-style: solid;
text-decoration-skip-ink: auto;
text-decoration-thickness: auto;
text-underline-offset: auto;
text-underline-position: from-font;
}
}
.urlItem:last-child {
margin-bottom: 0;
}
}
}
</style>
+11 -3
View File
@@ -3,7 +3,7 @@
<div class="thematic" v-for="section in advSections" :key="section.position">
<div class="title">{{ section.name }}</div>
<div class="adv-icon-list">
<div class="adv-icon-item" v-for="adv in section.list" :key="adv.id" @click="jumpAdv(adv)">
<div class="adv-icon-item" v-for="adv in section.list" :key="adv.id" @click="openAdv(adv)">
<DecryptImg class="adv-icon" :src="adv.cover" />
<div class="adv-name">{{ adv.title }}</div>
</div>
@@ -12,9 +12,17 @@
</div>
</template>
<script setup lang="ts">
import { getHomeAdSections } from '@/utils/getConfig';
import { ref } from 'vue';
import { getHomeAdSections, HomeAdItem, HomeAdSection } from '@/utils/getConfig';
import { jumpAdv } from '@/utils/index';
const advSections = getHomeAdSections();
const advSections = ref<HomeAdSection[]>([]);
getHomeAdSections().then((list) => {
advSections.value = list;
});
// 导航站广告只跳转,不走旧接口的点击上报
const openAdv = (adv: HomeAdItem) => {
jumpAdv({ link: adv.link });
};
</script>
<style lang="scss" scoped>
@media (min-width: 768px) {
+20 -6
View File
@@ -3,7 +3,10 @@
<div class="header-wrap-box">
<div class="header-wrap">
<div class="flex-vcenter left-wrap">
<img @click="jumpPage('/home')" class="logo" src="@/assets/images/pc/logo.png" />
<div class="logo-box" @click="jumpPage('/home')">
<img class="logo" src="@/assets/images/logo.png" />
<span class="site-name">黄果导航站</span>
</div>
</div>
<div class="right-list">
<div class="item" @click="jumpPage('/business')">
@@ -25,7 +28,6 @@
<script setup lang="ts">
import { computed } from 'vue'
import { getAdItem } from '@/utils/getConfig'
import Mask from './mask.vue';
import { useRouter } from 'vue-router';
import { useGlobalStore } from '@/stores/global';
@@ -71,12 +73,24 @@ const jumpPage = (path: string) => {
min-width: 900px;
margin-right: 3vw;
}
.logo {
width: 100px;
height: 32px;
.logo-box {
display: flex;
align-items: center;
cursor: pointer;
.logo {
width: 40px;
height: 40px;
border-radius: 10px;
margin-right: 12px;
}
.site-name {
color: #fff;
font-size: 22px;
font-weight: 600;
white-space: nowrap;
}
}
.logo:hover {
.logo-box:hover {
transform: scale(1.02);
}
.right-list {
-92
View File
@@ -1,92 +0,0 @@
<template>
<div class="mask-pop" v-if="showMask">
<div class="mask"></div>
<div class="content">
<img class="logo" src="@/assets/images/pc/logo1.png" />
<div class="title">欢迎</div>
<div class="line"></div>
<div class="text">🔞 您欲觀看的頁面包含成人內容 🔞</div>
<div class="text">本站內容均遵守本國法律規定若您是未成年者,請選擇離開。 滿 18 歲。</div>
<div class="text">請点击确认进入。</div>
<div class="btn" @click="close">确认进入</div>
</div>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
const showMask = ref(true)
const emit = defineEmits(['closeMaskPop'])
showMask.value = !sessionStorage.getItem('maskPop')
const close = () => {
showMask.value = false
sessionStorage.setItem('maskPop', 'true');
emit('closeMaskPop')
}
</script>
<style lang="scss" scoped>
@media (min-width: 768px) {
.mask-pop {
width: 100vw;
height: 100vh;
position: fixed;
top: 0;
left: 0;
z-index: 1000;
.mask {
width: 100vw;
height: 100vh;
position: absolute;
top: 0;
left: 0;
opacity: 0.6;
background: linear-gradient(180deg, rgba(0, 0, 0, 0.00) 0%, #000 47.31%);
backdrop-filter: blur(250px);
}
.content {
position: absolute;
top: 40%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
.logo {
width: 237.057px;
height: 153.492px;
flex-shrink: 0;
}
.title {
color: #FFF;
font-size: 30px;
font-weight: 600;
margin-top: 54px;
}
.line {
width: 213px;
height: 1px;
opacity: 0.1;
background: #FFF;
margin: 10px auto;
}
.text {
color: #FFF;
text-align: center;
font-size: 14px;
font-weight: 400;
line-height: 28px;
}
.btn {
width: 118px;
height: 50px;
text-align: center;
line-height: 50px;
border-radius: 10px;
background: #FFC400;
box-shadow: 0px -3px 8px 0px rgba(249, 255, 139, 0.60) inset, 0px 0px 8px 0px rgba(255, 196, 0, 0.50);
margin: 22px auto 0;
color: #482F28;
font-size: 18px;
cursor: pointer;
}
}
}
}
</style>
-53
View File
@@ -1,53 +0,0 @@
<template>
<div class="publishingAddress">
<div class="title">备用地址</div>
<div class="wrap">
<div class="list" v-for="(item, index) in urlList" :key="index">
<span class="name">{{ item.desc }} :</span>
<span class="link" @click="openPage(item.url)">{{ item.url }}</span>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { reactive, computed } from 'vue';
import { useConfigStore } from '@/stores/config';
const configStore = useConfigStore();
const state = reactive({});
const urlList: any = computed(() => {
return configStore.sourceInfo.Download;
});
const openPage = (url: string) => {
window.open(url);
};
</script>
<style lang="scss" scoped>
@media (min-width: 768px) {
.publishingAddress {
color: #fff;
width: 1104px;
margin: 112px auto 0;
padding-bottom: 70px;
.title {
color: #FFF;
font-size: 20px;
font-weight: 600;
line-height: 41px;
padding-bottom: 60px;
}
.wrap {
flex-wrap: wrap;
font-size: 18px;
.list {
margin-bottom: 30px;
}
.link {
color: #FFCD3F;
cursor: pointer;
text-decoration: underline;
}
}
}
}
</style>
+2
View File
@@ -6,6 +6,8 @@ interface ImportMetaEnv {
readonly VITE_BUILD_DROP_CONSOLE: string;
readonly VITE_BASE_URL: string;
readonly VITE_PARAMETER_ENCRYPTION: string;
readonly VITE_ADV_API_URL: string;
readonly VITE_ADV_APP_ID: string;
}
interface ImportMeta {