CloudProxyPro/layouts/default.vue

128 lines
6.4 KiB
Vue
Raw Permalink Normal View History

2025-09-05 14:59:21 +08:00
<template>
<div class="min-h-screen bg-gray-50">
<nav class="bg-white shadow-lg">
<div class="max-w-7xl mx-auto px-4">
<div class="flex justify-between h-16">
<div class="flex items-center">
<NuxtLink :to="localePath('/')" class="flex items-center space-x-2">
<img src="/logo.svg" alt="CloudProxy Pro" class="h-8 w-8" />
<span class="text-xl font-bold text-blue-600">CloudProxy Pro</span>
</NuxtLink>
</div>
<div class="flex items-center space-x-8">
<NuxtLink
v-for="item in navigation"
:key="item.name"
:to="localePath(item.href)"
class="text-gray-700 hover:text-blue-600 transition-colors"
>
{{ $t(item.name) }}
</NuxtLink>
<!-- 社交图标和联系方式 -->
<div class="flex items-center space-x-4">
<a href="https://t.me/pinnovatecloud" target="_blank"
class="flex items-center space-x-2 text-blue-500 hover:text-blue-700">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
<path d="M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0a12 12 0 0 0-.056 0zm4.962 7.224c.1-.002.321.023.465.14a.506.506 0 0 1 .171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.244-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z"/>
</svg>
<span class="text-sm">@pinnovatecloud</span>
</a>
<a href="https://wa.me/19174029875" target="_blank"
class="flex items-center space-x-2 text-green-500 hover:text-green-700">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
<path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893A11.821 11.821 0 0020.885 3.488"/>
</svg>
<span class="text-sm">+1 917-402-9875</span>
</a>
</div>
<!-- 语言切换器 -->
<div class="relative">
<select
v-model="currentLocale"
@change="switchLocale"
class="border border-gray-300 rounded-md px-3 py-1 text-sm"
>
<option value="en">EN</option>
<option value="zh">中文</option>
<option value="zh-hant">繁體</option>
</select>
</div>
</div>
</div>
</div>
</nav>
<main>
<slot />
</main>
<footer class="bg-gray-900 text-white py-12">
<div class="max-w-7xl mx-auto px-4">
<div class="grid grid-cols-1 md:grid-cols-4 gap-8">
<div>
<div class="flex items-center space-x-2 mb-4">
<img src="/logo.svg" alt="CloudProxy Pro" class="h-8 w-8" />
<span class="text-xl font-bold">CloudProxy Pro</span>
</div>
2025-09-11 12:08:47 +08:00
<p class="text-gray-400">{{ $t('footer.description') }}</p>
2025-09-05 14:59:21 +08:00
</div>
<div>
<h3 class="text-lg font-semibold mb-4">{{ $t('nav.solutions') }}</h3>
<ul class="space-y-2 text-gray-400">
2025-09-11 12:08:47 +08:00
<li><a :href="localePath('/solutions')" class="hover:text-white">{{ $t('footer.solutions.ec2') }}</a></li>
<li><a :href="localePath('/solutions')" class="hover:text-white">{{ $t('footer.solutions.s3') }}</a></li>
<li><a :href="localePath('/solutions')" class="hover:text-white">{{ $t('footer.solutions.rds') }}</a></li>
2025-09-05 14:59:21 +08:00
</ul>
</div>
<div>
<h3 class="text-lg font-semibold mb-4">{{ $t('nav.pricing') }}</h3>
<ul class="space-y-2 text-gray-400">
2025-09-11 12:08:47 +08:00
<li><a :href="localePath('/pricing')" class="hover:text-white">{{ $t('footer.pricing.viewPlans') }}</a></li>
<li><a :href="localePath('/contact')" class="hover:text-white">{{ $t('footer.pricing.customQuote') }}</a></li>
2025-09-05 14:59:21 +08:00
</ul>
</div>
<div>
<h3 class="text-lg font-semibold mb-4">{{ $t('nav.contact') }}</h3>
<div class="space-y-2 text-gray-400">
<p>{{ $t('contact.telegram') }}</p>
<p>{{ $t('contact.whatsapp') }}</p>
</div>
</div>
</div>
<div class="border-t border-gray-800 mt-8 pt-8 text-center text-gray-400">
2025-09-11 12:08:47 +08:00
<p>{{ $t('footer.copyright') }}</p>
2025-09-05 14:59:21 +08:00
</div>
</div>
</footer>
</div>
</template>
<script setup>
const { locale, locales, setLocale } = useI18n()
const localePath = useLocalePath()
const currentLocale = ref(locale.value)
const navigation = [
{ name: 'nav.home', href: '/' },
{ name: 'nav.solutions', href: '/solutions' },
{ name: 'nav.pricing', href: '/pricing' },
{ name: 'nav.blog', href: '/blog' },
{ name: 'nav.contact', href: '/contact' }
]
const switchLocale = () => {
setLocale(currentLocale.value)
}
// SEO设置
useHead({
htmlAttrs: {
lang: locale
}
})
</script>