website/.vitepress/theme/components/CustomHome.vue

447 lines
20 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<script setup>
import { useData } from 'vitepress'
import { ref } from 'vue'
import {t, routerPath} from '../locale'
const { lang, isDark } = useData()
const subDate = ref('month')
const price = ref({
month: {
oldPrice: '15',
price: '10',
discount: '6.6'
},
year: {
oldPrice: '180',
price: '100',
discount: '5.5'
}
})
</script>
<template>
<div class="custom-home">
<section>
<div class="mx-auto w-full lg:px-24 max-w-7xl md:px-12 items-center px-8 py-24">
<div>
<div class="text-center max-w-4xl mx-auto">
<div class="sm:flex sm:justify-center">
<a
v-motion
:initial="{ opacity: 0, y: 100 }"
:enter="{ opacity: 1, y: 0, scale: 1 }"
:delay="0"
:duration="400"
:href="routerPath(lang, '/docs/notice')"
class="h-34px font-semibold text-primary rounded-full px-5 text-sm leading-6 border-2 border-solid border-primary flex-center duration-200 no-underline!"
uno-hover="bg-primary text-[var(--vp-c-neutral-inverse)]!"
>
<icon-custom-islenote class="text-16px mr-6px" />
<span class="block lg:inline"> {{t(lang, 'notice')}} <span aria-hidden="true"></span> </span>
</a>
</div>
<h1
v-motion
:initial="{ opacity: 0, y: 100 }"
:enter="{ opacity: 1, y: 0, scale: 1 }"
:delay="50"
:duration="400"
class="text-4xl! tracking-tight font-medium text-primary md:text-5xl font-display mt-12"
>
{{ t(lang, 'desc') }}
</h1>
<div
v-motion
:initial="{ opacity: 0, y: 100 }"
:enter="{ opacity: 1, y: 0, scale: 1 }"
:delay="100"
:duration="400"
class="text-[var(--vp-c-text-3)] lg:text-xl max-w-2xl mt-4 mx-auto text-base"
>
{{ t(lang, 'desc.secondary') }}
</div>
</div>
<div class="flex justify-center gap-3 mt-10 mb-5 flex-col sm:flex-row">
<a
v-motion
:initial="{ opacity: 0, y: 100 }"
:enter="{ opacity: 1, y: 0, scale: 1 }"
:delay="200"
:duration="400"
target="_blank"
class="items-center justify-center h-12 font-medium rounded-xl inline-flex duration-200 lg:w-auto px-6 py-3 text-center text-[var(--vp-c-text-1)]! w-full border-2 border-solid border-[var(--vp-c-gray-soft)] no-underline!"
uno-hover="text-primary! border-primary"
href="https://v.islenote.com/register"
>
{{ t(lang, 'register') }}
</a>
<a
v-motion
:initial="{ opacity: 0, y: 100 }"
:enter="{ opacity: 1, y: 0, scale: 1 }"
:delay="300"
:duration="400"
class="items-center justify-center h-12 font-medium rounded-xl inline-flex bg-primary border-solid border-2 border-primary duration-200 lg:w-auto px-6 py-3 text-center text-[var(--vp-c-neutral-inverse)]! w-full no-underline!"
uno-hover="bg-transparent border-primary text-primary!"
:href="routerPath(lang, '/docs/guide')"
>
{{ t(lang, 'guide') }}
</a>
</div>
<div class="sm:flex sm:justify-center">
<a
v-motion
:initial="{ opacity: 0, y: 100 }"
:enter="{ opacity: 1, y: 0, scale: 1 }"
:delay="400"
:duration="400"
href="https://v.islenote.com"
target="_blank"
class="h-34px font-semibold text-primary rounded-full px-5 text-sm leading-6 flex-center duration-200 no-underline!"
uno-hover="underline!"
>
<span class="block lg:inline">{{ t(lang, 'account') }} {{ t(lang, 'login') }}<span aria-hidden="true"></span> </span>
</a>
</div>
<div
v-motion
:initial="{ opacity: 0, y: 100 }"
:enter="{ opacity: 1, y: 0, scale: 1 }"
:delay="500"
:duration="400"
class="mt-20 mb-10"
v-if="isDark"
>
<img src="/img/site/home_dark.png" class="rounded-2 shadow-[var(--vp-c-shadow)]"lt="">
</div>
<div
v-motion
:initial="{ opacity: 0, y: 100 }"
:enter="{ opacity: 1, y: 0, scale: 1 }"
:delay="500"
:duration="400"
class="mt-20 mb-10"
v-if="!isDark"
>
<img src="/img/site/home_light.png" class="rounded-2 shadow-[var(--vp-c-shadow)]"lt="">
</div>
<div
v-motion
:initial="{ opacity: 0, y: 100 }"
:enter="{ opacity: 1, y: 0, scale: 1 }"
:delay="500"
:duration="400"
id="features"
class="my-40"
>
<div class="sm:flex sm:flex-col sm:align-center">
<h1 class="text-4xl font-700 text-center">{{ t(lang, 'features') }}</h1>
<div
class="text-[var(--vp-c-text-3)] mt-4 text-base text-center"
>
{{ t(lang, 'features.desc') }}
</div>
<a
class="h-34px font-semibold text-primary rounded-full px-5 mt-4 text-sm leading-6 flex-center duration-200 no-underline!"
uno-hover="underline!"
:href="routerPath(lang, '/docs/guide')"
>
{{ t(lang, 'features.more') }}->
</a>
</div>
<div class="lg:gap-x-8 lg:grid-cols-3 max-w-4xl mt-14 mx-auto sm:gap-x-6 sm:gap-y-12 sm:grid sm:grid-cols-2 sm:space-y-0 space-y-6 text-center text-sm items-start">
<div class="text-[var(--vp-c-text-3)]">
<strong class="text-[var(--vp-c-text-2)]">
{{t(lang, 'features.faster')}}
</strong>
{{t(lang, 'features.faster.desc')}}
</div>
<div class="text-[var(--vp-c-text-3)]">
<strong class="text-[var(--vp-c-text-2)]">
{{t(lang, 'features.style')}}
</strong>
{{t(lang, 'features.style.desc')}}
</div>
<div class="text-[var(--vp-c-text-3)]">
<strong class="text-[var(--vp-c-text-2)]">
{{t(lang, 'features.review')}}
</strong>
{{t(lang, 'features.review.desc')}}
</div>
<div class="text-[var(--vp-c-text-3)]">
<strong class="text-[var(--vp-c-text-2)]">
{{t(lang, 'features.extend')}}
</strong>
{{t(lang, 'features.extend.desc')}}
</div>
<div class="text-[var(--vp-c-text-3)]">
<strong class="text-[var(--vp-c-text-2)]">
{{t(lang, 'features.privacy')}}
</strong>
{{t(lang, 'features.privacy.desc')}}
</div>
<div class="text-[var(--vp-c-text-3)]">
<strong class="text-[var(--vp-c-text-2)]">
{{t(lang, 'features.unlimited')}}
</strong>
{{t(lang, 'features.unlimited.desc')}}
</div>
</div>
</div>
<div
v-motion
:initial="{ opacity: 0, y: 100 }"
:enter="{ opacity: 1, y: 0, scale: 1 }"
:delay="600"
:duration="400"
id="subscribe"
class="my-40"
>
<div class="sm:flex sm:flex-col sm:align-center">
<h1
class="text-4xl font-700 text-center"
>
{{ t(lang, 'subscribe') }}
</h1>
<div
class="text-[var(--vp-c-text-3)] mt-4 text-base text-center"
>
{{ t(lang, 'subscribe.desc') }}
</div>
<a
class="h-34px font-semibold text-primary rounded-full px-5 mt-4 text-sm leading-6 flex-center duration-200 no-underline!"
uno-hover="underline!"
:href="routerPath(lang, '/docs/setting/subscribe')"
>
{{ t(lang, 'subscribe.more') }}->
</a>
</div>
<div class="w-auto font-medium flex-center mt-12">
<div class="h-12 bg-[var(--vp-c-gray-soft)] rounded-xl box-border">
<div
class="w-auto h-full inline-flex justify-center items-center cursor-pointer rounded-xl duration-200 px-5 text-14px box-border"
:class="{'bg-primary text-[var(--vp-c-neutral-inverse)]': subDate == 'month'}"
@click="subDate = 'month'"
>
{{ t(lang, 'subscribe.monthly') }}
</div>
<div
class="w-auto h-full inline-flex justify-center items-center cursor-pointer rounded-xl duration-200 px-5 text-14px box-border"
:class="{'bg-primary text-[var(--vp-c-neutral-inverse)]': subDate == 'year'}"
@click="subDate = 'year'"
>
{{ t(lang, 'subscribe.yearly') }}
</div>
</div>
</div>
<div class="w-full grid grid-cols-2 lt-sm:grid-cols-1 gap-6 mt-12">
<div class="w-full flex justify-end lt-sm:justify-center">
<div
class="w-full text-sm flex flex-col justify-between flex-1 flex-shrink-0 max-w-xs p-6 border border-solid border-[var(--vp-c-divider)] rounded-xl box-border"
>
<div class="w-full leading-6 font-700">{{ t(lang, 'subscribe.pu') }}</div>
<div class="h-full flex-1">
<div class="mt-4">{{t(lang, 'subscribe.free.desc')}}1</div>
<div class="mt-4">{{t(lang, 'subscribe.free.desc')}}2</div>
<div class="mt-4">{{t(lang, 'subscribe.free.desc')}}3</div>
<div class="mt-4">{{t(lang, 'subscribe.free.desc')}}4</div>
<div class="mt-4">{{t(lang, 'subscribe.free.desc')}}5</div>
</div>
<div class="w-full flex flex-col mt-8">
<div class="">
<span class="text-xl font-extrabold white">{{t(lang, 'subscribe.free')}}</span>
<span class="text-base font-medium ml-1">¥/{{ subDate == 'year' ? t(lang, 'subscribe.year') : t(lang, 'subscribe.month') }}</span>
</div>
<a
class="mt-4 items-center justify-center h-12 font-medium rounded-xl inline-flex duration-200 lg:w-auto px-6 py-3 text-center text-[var(--vp-c-text-1)]! w-full border-2 border-solid border-[var(--vp-c-gray-soft)] no-underline! cursor-pointer"
uno-hover="text-primary! border-primary"
target="_blank"
href="https://v.islenote.com/register"
>
{{ t(lang, 'register') }}
</a>
<a
href="https://v.islenote.com"
target="_blank"
class="h-34px font-semibold text-primary rounded-full px-5 text-sm leading-6 flex-center duration-200 no-underline!"
uno-hover="underline!"
>
<span class="block lg:inline">{{ t(lang, 'account') }} {{ t(lang, 'login') }}<span aria-hidden="true">→</span> </span>
</a>
</div>
</div>
</div>
<div class="w-full flex justify-start lt-sm:justify-center">
<div
class="w-full text-sm flex flex-col justify-between flex-1 flex-shrink-0 max-w-xs p-6 border border-solid border-[var(--vp-c-divider)] rounded-xl box-border"
>
<div class="w-full leading-6">
<span class="font-700">{{ t(lang, 'subscribe.su') }}</span>
<span class="ml-4px font-400">
· {{ t(lang, 'subscribe.su.desc1') }}{{ price[subDate].discount
}}{{ t(lang, 'subscribe.su.desc2') }}
</span>
</div>
<div class="h-full flex-1">
<div class="mt-4">{{t(lang, 'subscribe.sub.desc')}}1</div>
<div class="mt-4">{{t(lang, 'subscribe.sub.desc')}}2</div>
<div class="mt-4">{{t(lang, 'subscribe.sub.desc')}}3</div>
<div class="mt-4">{{t(lang, 'subscribe.sub.desc')}}4</div>
<div class="mt-4">{{t(lang, 'subscribe.sub.desc')}}5</div>
</div>
<div class="w-full flex flex-col mt-8">
<div class="">
<span class="text-xl line-through">{{ price[subDate].oldPrice }}</span>
<span class="text-xl font-extrabold ml-4px text-primary"
>{{ price[subDate].price }}
</span>
<span class="text-base font-medium ml-1">¥/{{ subDate == 'year' ? t(lang, 'subscribe.year') : t(lang, 'subscribe.month') }}</span>
</div>
<a
class="mt-4 items-center justify-center h-12 font-medium rounded-xl inline-flex duration-200 lg:w-auto px-6 py-3 text-center text-[var(--vp-c-text-1)]! w-full border-2 border-solid border-[var(--vp-c-gray-soft)] no-underline! cursor-pointer"
uno-hover="text-primary! border-primary"
target="_blank"
href="https://v.islenote.com/register"
>
{{ t(lang, 'register') }}
</a>
<a
href="https://v.islenote.com"
target="_blank"
class="h-34px font-semibold text-primary rounded-full px-5 text-sm leading-6 flex-center duration-200 no-underline!"
uno-hover="underline!"
>
<span class="block lg:inline">{{ t(lang, 'account') }} {{ t(lang, 'login') }}<span aria-hidden="true">→</span> </span>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="">
<div
class="mx-auto w-full lg:px-24 max-w-7xl md:px-12 items-center px-8 py-24"
>
<div class="sm:flex sm:flex-col sm:align-center">
<h1
class="text-4xl font-700 text-center"
>
{{t(lang, 'feedback')}}
</h1>
<div
class="text-[var(--vp-c-text-3)] mt-4 text-base text-center"
>
{{ t(lang, 'feedback.desc') }}
</div>
<a
class="h-34px font-semibold text-primary rounded-full px-5 mt-4 text-sm leading-6 flex-center duration-200 no-underline!"
uno-hover="underline!"
:href="routerPath(lang, '/docs/setting/feedback')"
>
{{ t(lang, 'feedback.more') }}->
</a>
</div>
<ul
class="mt-12! grid grid-cols-1 gap-16 lg:gap-8 md:gap-12 sm:grid-cols-2 lg:grid-cols-3"
>
<li class="list-none">
<div class="h-full flex flex-col justify-between">
<div>
<div class="flex gap-x-1">
<icon-material-symbols-family-star class="text-16px text-[var(--vp-c-indigo-1)]" />
<icon-material-symbols-family-star class="text-16px text-[var(--vp-c-indigo-1)]" />
<icon-material-symbols-family-star class="text-16px text-[var(--vp-c-indigo-1)]" />
<icon-material-symbols-family-star class="text-16px text-[var(--vp-c-indigo-1)]" />
<icon-material-symbols-family-star class="text-16px text-[var(--vp-c-indigo-1)]" />
</div>
<p class="lg:text-sm text-[var(--vp-c-text-3)] mt-4">“在线笔记我一直担心用户隐私,希望可以让用户更有能力并能更好地控制个人数据。”</p>
</div>
<footer class="flex justify-between items-center mt-6">
<p class="lg:text-sm text-[var(--vp-c-text-2)] font-display">用户·A</p>
<div class="w-22px h-22px rounded-2 bg-[var(--vp-c-text-1)] flex-center">
<icon-custom-sefen class="text-18px text-[var(--vp-c-neutral-inverse)]" />
</div>
</footer>
</div>
</li>
<li class="list-none">
<div class="h-full flex flex-col justify-between">
<div>
<div class="flex gap-x-1">
<icon-material-symbols-family-star class="text-16px text-[var(--vp-c-indigo-1)]" />
<icon-material-symbols-family-star class="text-16px text-[var(--vp-c-indigo-1)]" />
<icon-material-symbols-family-star class="text-16px text-[var(--vp-c-indigo-1)]" />
<icon-material-symbols-family-star class="text-16px text-[var(--vp-c-indigo-1)]" />
<icon-material-symbols-family-star class="text-16px text-[var(--vp-c-indigo-1)]" />
</div>
<p class="lg:text-sm text-[var(--vp-c-text-3)] mt-4">“反馈了一个需求点,很快就被官方实现了,看得出来你们很注重用户体验以及反馈,哈哈哈”</p>
</div>
<footer class="flex justify-between items-center mt-6">
<p class="lg:text-sm text-[var(--vp-c-text-2)] font-display">用户·D</p>
<div class="w-22px h-22px rounded-2 bg-[var(--vp-c-text-1)] flex-center">
<icon-custom-sefen class="text-18px text-[var(--vp-c-neutral-inverse)]" />
</div>
</footer>
</div>
</li>
<li class="list-none">
<div class="h-full flex flex-col justify-between">
<div>
<div class="flex gap-x-1">
<icon-material-symbols-family-star class="text-16px text-[var(--vp-c-indigo-1)]" />
<icon-material-symbols-family-star class="text-16px text-[var(--vp-c-indigo-1)]" />
<icon-material-symbols-family-star class="text-16px text-[var(--vp-c-indigo-1)]" />
<icon-material-symbols-family-star class="text-16px text-[var(--vp-c-indigo-1)]" />
<icon-material-symbols-family-star class="text-16px text-[var(--vp-c-indigo-1)]" />
</div>
<p class="lg:text-sm text-[var(--vp-c-text-3)] mt-4">“项目成功交付了比预想中的要更好很用心nice希望有机会可以继续合作。”</p>
</div>
<footer class="flex justify-between items-center mt-6">
<p class="lg:text-sm text-[var(--vp-c-text-2)] font-display">客户·R</p>
<div class="w-22px h-22px rounded-2 bg-[var(--vp-c-text-1)] flex-center">
<icon-custom-sefen class="text-18px text-[var(--vp-c-neutral-inverse)]" />
</div>
</footer>
</div>
</li>
</ul>
</div>
</section>
</div>
</template>
<style scoped>
.custom-home{
width: 100%;
}
@media screen and (min-width: 640px) and (max-width: 960px) {
.custom-home-banner__top-image{
width: 280px;
}
}
@media screen and (max-width: 640px) {
.custom-home-banner__top-image{
width: 200px;
}
}
</style>