447 lines
20 KiB
Vue
447 lines
20 KiB
Vue
<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> |