Files
huangguo_landpage/src/components/mobile/IosInstallGuide.vue
T
2026-09-16 12:53:54 +07:00

404 lines
9.0 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>
<!-- Safari 轻量版安装引导:三步(Figma 63:89569 / 63:89572) -->
<div v-if="show" class="ios-guide" role="dialog" aria-label="黄果短剧轻量版安装引导">
<header class="guide-head">
<button class="nav-back" type="button" @click="emit('close')">
<img class="nav-back-ico" :src="iconBack" alt="" width="24" height="24" />
<span>返回</span>
</button>
<div class="top">
<picture class="logo">
<source type="image/webp" :srcset="logoHW" />
<img :src="logoH" alt="黄果短剧" width="79" height="28" />
</picture>
<span class="domain">hgaidj.app</span>
</div>
</header>
<div class="content">
<div class="head">
<p class="kicker">轻量版安装</p>
<h2 class="title">黄果短剧 轻量版安装引导</h2>
<p class="desc">三步完成,约 1 分钟。安装后可在桌面直接打开。</p>
</div>
<!-- STEP.1 -->
<section class="step">
<div class="step-h">
<span class="step-no">STEP.1</span>
<span class="step-name">允许下载描述文件</span>
</div>
<div class="card">
<div class="ios-alert">
<div class="alert-body">
<p>“hgaidj.app”正尝试下载配置描述文件。要允许吗?</p>
</div>
<div class="alert-btns">
<div class="alert-btn muted">忽略</div>
<div class="alert-btn brand">允许</div>
</div>
</div>
<p class="card-tip">点击「允许」,系统提示「已下载描述文件」即可进入下一步。</p>
</div>
</section>
<!-- STEP.2 -->
<section class="step">
<div class="step-h">
<span class="step-no">STEP.2</span>
<span class="step-name">安装描述文件</span>
</div>
<div class="card">
<div class="path-row">
<span class="path-text">设置</span>
<img class="ico-film" :src="iconFilm" alt="" width="12" height="12" />
<img class="ico-chevron" :src="iconChevron" alt="" width="14" height="14" />
<span class="path-brand">已下载描述文件</span>
</div>
<div class="path-row">
<span class="path-text">黄果短剧</span>
<img class="ico-film" :src="iconFilm" alt="" width="12" height="12" />
<img class="ico-chevron" :src="iconChevron" alt="" width="14" height="14" />
<span class="path-brand">安装</span>
</div>
<div class="path-row">
<span class="path-text">输入锁屏密码</span>
<img class="ico-film" :src="iconFilm" alt="" width="12" height="12" />
<img class="ico-chevron" :src="iconChevron" alt="" width="14" height="14" />
<span class="path-brand">完成</span>
</div>
<p class="card-tip">安装包报毒提醒为杀毒软件误报,可忽略继续。</p>
</div>
</section>
<!-- STEP.3 -->
<section class="step">
<div class="step-h">
<span class="step-no">STEP.3</span>
<span class="step-name">返回桌面打开</span>
</div>
<div class="card">
<p class="card-body">桌面出现「黄果短剧」图标,点击即可观看。建议同时保存账号凭证。</p>
</div>
</section>
<button class="cta" type="button" @click="emit('close')">
<img class="cta-ico" :src="iconPlay" alt="" width="16" height="16" />
<span>已安装,打开黄果短剧</span>
</button>
</div>
</div>
</template>
<script lang="ts" setup>
import logoH from '~/assets/image/hg/common/logo-h.png'
import logoHW from '~/assets/image/hg/common/logo-h.webp'
import iconFilm from '~/assets/image/hg/mobile/guide/icon-film.svg'
import iconChevron from '~/assets/image/hg/mobile/guide/icon-chevron-right.svg'
import iconPlay from '~/assets/image/hg/mobile/guide/icon-play.svg'
import iconBack from '~/assets/image/hg/mobile/guide/icon-back.svg'
defineProps<{ show: boolean }>()
const emit = defineEmits<{ close: [] }>()
</script>
<style lang="scss" scoped>
@use 'sass:math';
@function r($px) {
@return math.div($px, 50) * 1rem;
}
.ios-guide {
position: fixed;
inset: 0;
z-index: 999;
display: flex;
flex-direction: column;
background: #0b0b0d;
color: #f2f2f4;
font-family: 'PingFang SC', 'Helvetica Neue', sans-serif;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
}
.guide-head {
flex-shrink: 0;
background: #0b0b0d;
padding-top: env(safe-area-inset-top);
}
.nav-back {
display: flex;
align-items: center;
gap: r(12);
width: 100%;
padding: r(10);
box-sizing: border-box;
border: none;
background: transparent;
color: #fff;
font-family: inherit;
font-weight: 500;
font-size: r(16);
line-height: normal;
cursor: pointer;
text-align: left;
.nav-back-ico {
width: r(24);
height: r(24);
display: block;
flex-shrink: 0;
transform: scaleX(-1);
}
}
.top {
flex-shrink: 0;
display: flex;
align-items: center;
justify-content: space-between;
height: r(56);
padding: 0 r(16);
box-sizing: border-box;
.logo {
display: block;
width: r(79);
height: r(28);
img {
width: 100%;
height: 100%;
object-fit: contain;
display: block;
}
}
.domain {
font-weight: 500;
font-size: r(11);
line-height: r(15);
letter-spacing: 0.2em;
color: #6b6b74;
white-space: nowrap;
}
}
.content {
display: flex;
flex-direction: column;
align-items: stretch;
gap: r(28);
padding: r(24) r(16) calc(#{r(32)} + env(safe-area-inset-bottom));
box-sizing: border-box;
}
.head {
display: flex;
flex-direction: column;
gap: r(8);
.kicker {
margin: 0;
font-weight: 500;
font-size: r(11);
line-height: r(15);
letter-spacing: 0.2em;
color: #e9c977;
}
.title {
margin: 0;
font-weight: 600;
font-size: r(24);
line-height: r(27);
letter-spacing: -0.01em;
color: #f2f2f4;
}
.desc {
margin: 0;
font-weight: 400;
font-size: r(13);
line-height: r(18);
color: #a1a1aa;
}
}
.step {
display: flex;
flex-direction: column;
gap: r(12);
width: 100%;
}
.step-h {
display: flex;
align-items: baseline;
gap: r(10);
.step-no {
flex-shrink: 0;
font-weight: 600;
font-size: r(26);
line-height: r(32);
letter-spacing: -0.01em;
color: #ec237f;
white-space: nowrap;
}
.step-name {
flex: 1;
font-weight: 600;
font-size: r(15);
line-height: r(18);
letter-spacing: -0.01em;
color: #f2f2f4;
}
}
.card {
display: flex;
flex-direction: column;
gap: r(12);
width: 100%;
padding: r(16);
box-sizing: border-box;
background: #141417;
border: 1px solid rgba(255, 255, 255, 0.07);
border-radius: r(12);
}
.ios-alert {
width: 100%;
background: #232328;
border: 1px solid rgba(255, 255, 255, 0.12);
border-radius: r(14);
overflow: hidden;
.alert-body {
padding: r(18) r(16) r(16);
box-sizing: border-box;
p {
margin: 0;
font-weight: 500;
font-size: r(13);
line-height: r(18);
color: #f2f2f4;
text-align: center;
}
}
.alert-btns {
display: flex;
height: r(44);
border-top: 1px solid rgba(255, 255, 255, 0.07);
}
.alert-btn {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
font-size: r(13);
line-height: r(18);
white-space: nowrap;
&.muted {
font-weight: 500;
color: #a1a1aa;
}
&.brand {
font-weight: 600;
font-size: r(15);
letter-spacing: -0.01em;
color: #ec237f;
border-left: 1px solid rgba(255, 255, 255, 0.07);
}
}
}
.card-tip {
margin: 0;
font-weight: 400;
font-size: r(11);
line-height: r(15);
letter-spacing: 0.06em;
color: #6b6b74;
}
.card-body {
margin: 0;
font-weight: 400;
font-size: r(13);
line-height: r(18);
color: #a1a1aa;
}
.path-row {
display: flex;
align-items: center;
gap: r(8);
width: 100%;
.path-text {
font-weight: 500;
font-size: r(13);
line-height: r(18);
color: #f2f2f4;
white-space: nowrap;
}
.path-brand {
font-weight: 500;
font-size: r(13);
line-height: r(18);
color: #ec237f;
white-space: nowrap;
}
.ico-film {
width: r(12);
height: r(12);
display: block;
flex-shrink: 0;
}
.ico-chevron {
width: r(14);
height: r(14);
display: block;
flex-shrink: 0;
}
}
.cta {
display: flex;
align-items: center;
justify-content: center;
gap: r(6);
width: 100%;
height: r(48);
padding: 0;
border: none;
border-radius: r(24);
background: linear-gradient(172.03deg, #ff4a7b 0%, #ec237f 37.14%, #93226f 71.43%);
color: #fff;
font-weight: 600;
font-size: r(15);
line-height: r(18);
letter-spacing: -0.01em;
cursor: pointer;
.cta-ico {
width: r(16);
height: r(16);
display: block;
}
}
</style>