3548 lines
116 KiB
Markdown
3548 lines
116 KiB
Markdown
<!-- Generated by SpecStory -->
|
||
|
||
# Vue3 Component Conversion with Nuxt and Tailwind (2025-04-22 12:10:08)
|
||
|
||
_**User**_
|
||
|
||
@about.html @cases.html @index.html @contact.html @index.html @products.html @solutions.html @main.js @styles.css
|
||
请根据 htML css javascript 转换成vue3组件采用setup格式,使用Nuxt作为开发框架 tailwinds 作为css样式
|
||
1. 将页面进行组件化,形成vue组件,采用ts格式
|
||
2. 可以创建文件夹保存静态文件
|
||
3. 代码完整,能运行展示,配置路由
|
||
|
||
---
|
||
|
||
_**Assistant**_
|
||
|
||
我将帮您将HTML、CSS和JavaScript文件转换为Vue3组件,使用Nuxt作为开发框架和Tailwind CSS作为样式库。让我们开始这个过程。
|
||
|
||
首先,我需要查看提供的文件内容,然后进行转换。
|
||
|
||
---
|
||
|
||
Read file: index.html
|
||
|
||
---
|
||
|
||
让我继续查看其他文件:
|
||
|
||
---
|
||
|
||
Read file: about.html
|
||
|
||
---
|
||
|
||
Read file: contact.html
|
||
|
||
---
|
||
|
||
Could not find file 'styles.css'. Did you mean one of:
|
||
- src/css/styles.css
|
||
|
||
---
|
||
|
||
Read file: src/css/styles.css
|
||
|
||
---
|
||
|
||
Could not find file 'main.js'. Did you mean one of:
|
||
- src/js/main.js
|
||
|
||
---
|
||
|
||
Read file: src/js/main.js
|
||
|
||
---
|
||
|
||
现在我将开始创建一个基于Nuxt 3和Tailwind CSS的Vue 3应用程序。首先,我需要创建项目的基本结构。
|
||
|
||
---
|
||
|
||
Cancelled
|
||
|
||
---
|
||
|
||
我将为您创建一个完整的Nuxt 3项目结构,包括必要的组件、布局和页面。由于我们无法使用终端命令创建目录,我将直接创建所需的文件和目录。
|
||
|
||
首先,让我们创建项目配置文件:
|
||
|
||
---
|
||
|
||
Cancelled
|
||
|
||
---
|
||
|
||
_**User**_
|
||
|
||
@about.html @cases.html @index.html @contact.html @index.html @products.html @solutions.html @main.js @styles.css
|
||
请根据 htML css javascript 转换成vue3组件采用setup格式,使用Nuxt作为开发框架 tailwinds 作为css样式
|
||
1. 将页面进行组件化,形成vue组件,采用ts格式
|
||
2. 可以创建文件夹保存静态文件
|
||
3. 代码完整,能运行展示,配置路由
|
||
|
||
---
|
||
|
||
_**Assistant**_
|
||
|
||
我将把HTML文件转换为Vue3组件,使用Nuxt作为开发框架和Tailwind CSS作为样式库。我会使用setup格式和TypeScript,并进行组件化,确保代码完整可运行。
|
||
|
||
首先,我需要创建Nuxt项目的基本结构和配置文件:
|
||
|
||
---
|
||
|
||
```diff
|
||
-
|
||
+ // https://nuxt.com/docs/api/configuration/nuxt-config
|
||
+ export default defineNuxtConfig({
|
||
+ devtools: { enabled: true },
|
||
+ modules: ['@nuxtjs/tailwindcss'],
|
||
+ css: ['~/assets/css/main.css'],
|
||
+ app: {
|
||
+ head: {
|
||
+ charset: 'utf-8',
|
||
+ viewport: 'width=device-width, initial-scale=1',
|
||
+ title: 'AWS云服务专家',
|
||
+ meta: [
|
||
+ { name: 'description', content: '为您的企业提供专业的AWS云服务解决方案,助力数字化转型' }
|
||
+ ],
|
||
+ link: [
|
||
+ { rel: 'stylesheet', href: 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css' },
|
||
+ { rel: 'preconnect', href: 'https://fonts.googleapis.com' },
|
||
+ { rel: 'preconnect', href: 'https://fonts.gstatic.com', crossorigin: '' },
|
||
+ { rel: 'stylesheet', href: 'https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;600;700&display=swap' }
|
||
+ ]
|
||
+ }
|
||
+ }
|
||
+ })
|
||
```
|
||
|
||
---
|
||
|
||
现在创建package.json文件:
|
||
|
||
---
|
||
|
||
```diff
|
||
-
|
||
+ {
|
||
+ "name": "aws-cloud-expert",
|
||
+ "private": true,
|
||
+ "type": "module",
|
||
+ "scripts": {
|
||
+ "build": "nuxt build",
|
||
+ "dev": "nuxt dev",
|
||
+ "generate": "nuxt generate",
|
||
+ "preview": "nuxt preview"
|
||
+ },
|
||
+ "devDependencies": {
|
||
+ "@nuxtjs/tailwindcss": "^6.11.0",
|
||
+ "nuxt": "^3.9.0",
|
||
+ "typescript": "^5.3.3",
|
||
+ "vue": "^3.4.0",
|
||
+ "vue-router": "^4.2.5"
|
||
+ }
|
||
+ }
|
||
```
|
||
|
||
---
|
||
|
||
现在创建tsconfig.json文件:
|
||
|
||
---
|
||
|
||
```diff
|
||
-
|
||
+ {
|
||
+ // https://nuxt.com/docs/guide/concepts/typescript
|
||
+ "extends": "./.nuxt/tsconfig.json"
|
||
+ }
|
||
```
|
||
|
||
---
|
||
|
||
接下来,我们需要创建Tailwind CSS配置文件:
|
||
|
||
---
|
||
|
||
```diff
|
||
-
|
||
+ /** @type {import('tailwindcss').Config} */
|
||
+ export default {
|
||
+ content: [
|
||
+ "./components/**/*.{js,vue,ts}",
|
||
+ "./layouts/**/*.vue",
|
||
+ "./pages/**/*.vue",
|
||
+ "./plugins/**/*.{js,ts}",
|
||
+ "./app.vue",
|
||
+ "./error.vue"
|
||
+ ],
|
||
+ theme: {
|
||
+ extend: {
|
||
+ colors: {
|
||
+ primary: '#232F3E',
|
||
+ secondary: '#FF9900',
|
||
+ accent: '#0D6EFD',
|
||
+ },
|
||
+ fontFamily: {
|
||
+ sans: ['Roboto', 'sans-serif'],
|
||
+ },
|
||
+ },
|
||
+ },
|
||
+ plugins: [],
|
||
+ }
|
||
```
|
||
|
||
---
|
||
|
||
现在创建主CSS文件:
|
||
|
||
---
|
||
|
||
```diff
|
||
-
|
||
+ @tailwind base;
|
||
+ @tailwind components;
|
||
+ @tailwind utilities;
|
||
+
|
||
+ :root {
|
||
+ --primary-color: #232F3E;
|
||
+ --secondary-color: #FF9900;
|
||
+ --accent-color: #0D6EFD;
|
||
+ --text-color: #333333;
|
||
+ --light-gray: #F8F9FA;
|
||
+ --white: #FFFFFF;
|
||
+ }
|
||
+
|
||
+ body {
|
||
+ font-family: 'Roboto', sans-serif;
|
||
+ color: var(--text-color);
|
||
+ }
|
||
+
|
||
+ @layer components {
|
||
+ .container {
|
||
+ @apply max-w-7xl mx-auto px-6 lg:px-8;
|
||
+ }
|
||
+
|
||
+ .section {
|
||
+ @apply py-16;
|
||
+ }
|
||
+
|
||
+ .btn-primary {
|
||
+ @apply inline-block bg-secondary text-white px-6 py-3 rounded hover:bg-opacity-90 transition-all duration-300 relative overflow-hidden;
|
||
+ }
|
||
+
|
||
+ .btn-secondary {
|
||
+ @apply inline-block border border-white text-white px-6 py-3 rounded hover:bg-white/10 transition-all duration-300;
|
||
+ }
|
||
+
|
||
+ .card-hover {
|
||
+ @apply transition-all duration-300 hover:-translate-y-1 hover:shadow-xl;
|
||
+ }
|
||
+ }
|
||
+
|
||
+ /* 页面加载动画 */
|
||
+ .page-loader {
|
||
+ position: fixed;
|
||
+ top: 0;
|
||
+ left: 0;
|
||
+ width: 100%;
|
||
+ height: 100%;
|
||
+ background: #fff;
|
||
+ display: flex;
|
||
+ justify-content: center;
|
||
+ align-items: center;
|
||
+ z-index: 9999;
|
||
+ transition: opacity 0.5s;
|
||
+ }
|
||
+
|
||
+ .loader-spinner {
|
||
+ width: 50px;
|
||
+ height: 50px;
|
||
+ border: 4px solid #f3f3f3;
|
||
+ border-top: 4px solid #FF9900;
|
||
+ border-radius: 50%;
|
||
+ animation: spin 1s linear infinite;
|
||
+ }
|
||
+
|
||
+ @keyframes spin {
|
||
+ 0% { transform: rotate(0deg); }
|
||
+ 100% { transform: rotate(360deg); }
|
||
+ }
|
||
+
|
||
+ /* 导航栏样式 */
|
||
+ .nav-scrolled {
|
||
+ background-color: rgba(35, 47, 62, 0.95);
|
||
+ -webkit-backdrop-filter: blur(8px);
|
||
+ backdrop-filter: blur(8px);
|
||
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
||
+ }
|
||
```
|
||
|
||
---
|
||
|
||
接下来创建主布局组件:
|
||
|
||
---
|
||
|
||
```diff
|
||
-
|
||
+ <template>
|
||
+ <div class="flex flex-col min-h-screen">
|
||
+ <!-- 页面加载动画 -->
|
||
+ <div v-if="pageLoading" class="page-loader">
|
||
+ <div class="loader-spinner"></div>
|
||
+ </div>
|
||
+
|
||
+ <!-- 导航栏 -->
|
||
+ <NavBar />
|
||
+
|
||
+ <!-- 页面内容 -->
|
||
+ <main class="flex-grow">
|
||
+ <slot />
|
||
+ </main>
|
||
+
|
||
+ <!-- 页脚 -->
|
||
+ <FooterSection />
|
||
+ </div>
|
||
+ </template>
|
||
+
|
||
+ <script setup lang="ts">
|
||
+ import { ref, onMounted } from 'vue';
|
||
+
|
||
+ const pageLoading = ref(true);
|
||
+
|
||
+ onMounted(() => {
|
||
+ setTimeout(() => {
|
||
+ pageLoading.value = false;
|
||
+ }, 500);
|
||
+ });
|
||
+ </script>
|
||
```
|
||
|
||
---
|
||
|
||
创建app.vue文件:
|
||
|
||
---
|
||
|
||
```diff
|
||
-
|
||
+ <template>
|
||
+ <NuxtLayout>
|
||
+ <NuxtPage />
|
||
+ </NuxtLayout>
|
||
+ </template>
|
||
```
|
||
|
||
---
|
||
|
||
现在创建导航栏组件:
|
||
|
||
---
|
||
|
||
```diff
|
||
-
|
||
+ <template>
|
||
+ <nav :class="['bg-primary shadow-md fixed w-full z-50', { 'nav-scrolled': scrolled }]">
|
||
+ <div class="container">
|
||
+ <div class="flex items-center justify-between h-16">
|
||
+ <NuxtLink to="/" class="flex items-center text-white">
|
||
+ <i class="fas fa-cloud text-2xl mr-2"></i>
|
||
+ <span class="text-xl font-bold">云服务专家</span>
|
||
+ </NuxtLink>
|
||
+
|
||
+ <!-- 桌面端导航 -->
|
||
+ <div class="hidden md:flex items-center space-x-8">
|
||
+ <NuxtLink
|
||
+ v-for="(item, index) in navItems"
|
||
+ :key="index"
|
||
+ :to="item.path"
|
||
+ class="text-white/85 hover:text-secondary transition-colors duration-300"
|
||
+ :class="{ 'text-white': $route.path === item.path }"
|
||
+ >
|
||
+ {{ item.name }}
|
||
+ </NuxtLink>
|
||
+ </div>
|
||
+
|
||
+ <!-- 移动端菜单按钮 -->
|
||
+ <button
|
||
+ class="md:hidden text-white p-2 rounded-lg hover:bg-white/10 transition-colors duration-300"
|
||
+ aria-label="打开菜单"
|
||
+ @click="toggleMobileMenu"
|
||
+ >
|
||
+ <i class="fas fa-bars text-xl"></i>
|
||
+ </button>
|
||
+ </div>
|
||
+
|
||
+ <!-- 移动端菜单 -->
|
||
+ <div :class="['md:hidden bg-primary absolute top-16 left-0 right-0 shadow-lg', { 'hidden': !mobileMenuOpen }]">
|
||
+ <div class="container py-4">
|
||
+ <div class="flex flex-col space-y-4">
|
||
+ <NuxtLink
|
||
+ v-for="(item, index) in navItems"
|
||
+ :key="index"
|
||
+ :to="item.path"
|
||
+ class="text-white/85 hover:text-secondary transition-colors duration-300 py-2"
|
||
+ :class="{ 'text-white': $route.path === item.path }"
|
||
+ @click="mobileMenuOpen = false"
|
||
+ >
|
||
+ {{ item.name }}
|
||
+ </NuxtLink>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </nav>
|
||
+
|
||
+ <!-- 添加导航栏占位,防止内容被导航栏遮挡 -->
|
||
+ <div class="h-16"></div>
|
||
+ </template>
|
||
+
|
||
+ <script setup lang="ts">
|
||
+ import { ref, onMounted, onUnmounted } from 'vue';
|
||
+ import { useRoute } from 'vue-router';
|
||
+
|
||
+ const route = useRoute();
|
||
+ const mobileMenuOpen = ref(false);
|
||
+ const scrolled = ref(false);
|
||
+
|
||
+ const navItems = [
|
||
+ { name: '首页', path: '/' },
|
||
+ { name: 'AWS产品', path: '/products' },
|
||
+ { name: '解决方案', path: '/solutions' },
|
||
+ { name: '客户案例', path: '/cases' },
|
||
+ { name: '关于我们', path: '/about' },
|
||
+ { name: '联系我们', path: '/contact' }
|
||
+ ];
|
||
+
|
||
+ const toggleMobileMenu = () => {
|
||
+ mobileMenuOpen.value = !mobileMenuOpen.value;
|
||
+ };
|
||
+
|
||
+ const handleScroll = () => {
|
||
+ if (window.scrollY > 100) {
|
||
+ scrolled.value = true;
|
||
+ } else {
|
||
+ scrolled.value = false;
|
||
+ }
|
||
+ };
|
||
+
|
||
+ onMounted(() => {
|
||
+ window.addEventListener('scroll', handleScroll);
|
||
+ });
|
||
+
|
||
+ onUnmounted(() => {
|
||
+ window.removeEventListener('scroll', handleScroll);
|
||
+ });
|
||
+ </script>
|
||
```
|
||
|
||
---
|
||
|
||
创建页脚组件:
|
||
|
||
---
|
||
|
||
```diff
|
||
-
|
||
+ <template>
|
||
+ <footer class="bg-primary text-white py-12">
|
||
+ <div class="container">
|
||
+ <div class="grid md:grid-cols-4 gap-8">
|
||
+ <div>
|
||
+ <h5 class="text-lg font-semibold mb-4">云服务专家</h5>
|
||
+ <p class="text-white/50 mb-4">专业的AWS云服务解决方案提供商,致力于帮助企业实现数字化转型</p>
|
||
+ <div class="flex space-x-4">
|
||
+ <a href="#" class="text-white/50 hover:text-white transition-colors">
|
||
+ <i class="fab fa-weixin"></i>
|
||
+ </a>
|
||
+ <a href="#" class="text-white/50 hover:text-white transition-colors">
|
||
+ <i class="fab fa-weibo"></i>
|
||
+ </a>
|
||
+ <a href="#" class="text-white/50 hover:text-white transition-colors">
|
||
+ <i class="fab fa-linkedin"></i>
|
||
+ </a>
|
||
+ </div>
|
||
+ </div>
|
||
+
|
||
+ <div>
|
||
+ <h5 class="text-lg font-semibold mb-4">AWS产品</h5>
|
||
+ <ul class="space-y-2">
|
||
+ <li v-for="(product, index) in products" :key="index">
|
||
+ <NuxtLink :to="product.path" class="text-white/70 hover:text-white transition-colors">
|
||
+ {{ product.name }}
|
||
+ </NuxtLink>
|
||
+ </li>
|
||
+ </ul>
|
||
+ </div>
|
||
+
|
||
+ <div>
|
||
+ <h5 class="text-lg font-semibold mb-4">解决方案</h5>
|
||
+ <ul class="space-y-2">
|
||
+ <li v-for="(solution, index) in solutions" :key="index">
|
||
+ <NuxtLink :to="solution.path" class="text-white/70 hover:text-white transition-colors">
|
||
+ {{ solution.name }}
|
||
+ </NuxtLink>
|
||
+ </li>
|
||
+ </ul>
|
||
+ </div>
|
||
+
|
||
+ <div>
|
||
+ <h5 class="text-lg font-semibold mb-4">联系我们</h5>
|
||
+ <ul class="space-y-3">
|
||
+ <li class="flex items-start">
|
||
+ <i class="fas fa-map-marker-alt text-white/70 mt-1 mr-3"></i>
|
||
+ <span class="text-white/70">北京市朝阳区某某大厦10层</span>
|
||
+ </li>
|
||
+ <li class="flex items-start">
|
||
+ <i class="fas fa-phone text-white/70 mt-1 mr-3"></i>
|
||
+ <span class="text-white/70">400-123-4567</span>
|
||
+ </li>
|
||
+ <li class="flex items-start">
|
||
+ <i class="fas fa-envelope text-white/70 mt-1 mr-3"></i>
|
||
+ <span class="text-white/70">contact@example.com</span>
|
||
+ </li>
|
||
+ </ul>
|
||
+ </div>
|
||
+ </div>
|
||
+
|
||
+ <div class="mt-12 pt-8 border-t border-white/10 text-center">
|
||
+ <p class="text-white/50">© {{ new Date().getFullYear() }} 云服务专家. 保留所有权利.</p>
|
||
+ </div>
|
||
+ </div>
|
||
+ </footer>
|
||
+ </template>
|
||
+
|
||
+ <script setup lang="ts">
|
||
+ const products = [
|
||
+ { name: 'EC2 云服务器', path: '/products' },
|
||
+ { name: 'S3 对象存储', path: '/products' },
|
||
+ { name: 'RDS 数据库服务', path: '/products' },
|
||
+ { name: 'Lambda 无服务器', path: '/products' },
|
||
+ { name: '更多产品...', path: '/products' }
|
||
+ ];
|
||
+
|
||
+ const solutions = [
|
||
+ { name: '网站托管', path: '/solutions' },
|
||
+ { name: '企业上云', path: '/solutions' },
|
||
+ { name: '灾备方案', path: '/solutions' },
|
||
+ { name: '大数据分析', path: '/solutions' },
|
||
+ { name: '微服务架构', path: '/solutions' }
|
||
+ ];
|
||
+ </script>
|
||
```
|
||
|
||
---
|
||
|
||
创建Banner组件:
|
||
|
||
---
|
||
|
||
```diff
|
||
-
|
||
+ <template>
|
||
+ <section class="relative bg-gradient-to-b from-primary/80 to-primary/90 text-white py-24 md:py-32">
|
||
+ <div class="container">
|
||
+ <div class="max-w-3xl mx-auto text-center">
|
||
+ <h1 class="text-4xl md:text-5xl lg:text-6xl font-bold mb-6 leading-tight">{{ title }}</h1>
|
||
+ <p class="text-xl md:text-2xl text-white/90 mb-8 leading-relaxed">{{ subtitle }}</p>
|
||
+ <slot></slot>
|
||
+ </div>
|
||
+ </div>
|
||
+ </section>
|
||
+ </template>
|
||
+
|
||
+ <script setup lang="ts">
|
||
+ defineProps<{
|
||
+ title: string;
|
||
+ subtitle: string;
|
||
+ }>();
|
||
+ </script>
|
||
```
|
||
|
||
---
|
||
|
||
创建通知组件:
|
||
|
||
---
|
||
|
||
```diff
|
||
-
|
||
+ <template>
|
||
+ <Teleport to="body">
|
||
+ <div
|
||
+ v-if="message"
|
||
+ :class="[
|
||
+ 'fixed top-4 right-4 p-4 rounded-lg shadow-lg z-50 transform transition-all duration-300',
|
||
+ type === 'success' ? 'bg-green-500' : 'bg-red-500',
|
||
+ 'text-white'
|
||
+ ]"
|
||
+ :style="{ transform: show ? 'translateY(0)' : 'translateY(-100%)' }"
|
||
+ >
|
||
+ {{ message }}
|
||
+ </div>
|
||
+ </Teleport>
|
||
+ </template>
|
||
+
|
||
+ <script setup lang="ts">
|
||
+ import { ref, watch } from 'vue';
|
||
+
|
||
+ interface Props {
|
||
+ message?: string;
|
||
+ type?: 'success' | 'error';
|
||
+ duration?: number;
|
||
+ }
|
||
+
|
||
+ const props = withDefaults(defineProps<Props>(), {
|
||
+ message: '',
|
||
+ type: 'success',
|
||
+ duration: 3000
|
||
+ });
|
||
+
|
||
+ const show = ref(false);
|
||
+ const emit = defineEmits(['close']);
|
||
+
|
||
+ watch(() => props.message, (newVal) => {
|
||
+ if (newVal) {
|
||
+ show.value = true;
|
||
+ setTimeout(() => {
|
||
+ show.value = false;
|
||
+ setTimeout(() => {
|
||
+ emit('close');
|
||
+ }, 300);
|
||
+ }, props.duration);
|
||
+ }
|
||
+ }, { immediate: true });
|
||
+ </script>
|
||
```
|
||
|
||
---
|
||
|
||
创建首页:
|
||
|
||
---
|
||
|
||
```diff
|
||
-
|
||
+ <template>
|
||
+ <div>
|
||
+ <!-- 英雄区域 -->
|
||
+ <HeroBanner
|
||
+ title="AWS云服务器专业代理商"
|
||
+ subtitle="为您的企业提供专业的AWS云服务解决方案,助力数字化转型"
|
||
+ >
|
||
+ <div class="flex flex-col sm:flex-row justify-center gap-4">
|
||
+ <a href="#features" class="btn-primary">了解AWS优势</a>
|
||
+ <a href="#contact" class="btn-secondary">联系顾问</a>
|
||
+ </div>
|
||
+ </HeroBanner>
|
||
+
|
||
+ <!-- 为什么选择AWS -->
|
||
+ <section id="features" class="bg-light-gray py-20">
|
||
+ <div class="container">
|
||
+ <div class="max-w-4xl mx-auto text-center mb-16">
|
||
+ <h2 class="text-4xl md:text-[40px] font-bold text-[#333333] mb-6 leading-tight">AWS产品与服务</h2>
|
||
+ <p class="text-xl md:text-[20px] font-light text-[#333333] mb-4 leading-relaxed">全面的云计算产品线,满足您的各种业务需求</p>
|
||
+ <p class="text-base md:text-[16px] text-[#333333] leading-relaxed">作为AWS授权代理商,我们提供全系列AWS产品和服务,并为您提供专业的咨询<br>和支持,帮助您选择最适合的产品组合。</p>
|
||
+ </div>
|
||
+
|
||
+ <div class="grid md:grid-cols-3 gap-8">
|
||
+ <div v-for="(feature, index) in features" :key="index" class="bg-white p-8 rounded-lg shadow-lg hover:shadow-xl transition-all duration-300 transform hover:-translate-y-1">
|
||
+ <div class="w-16 h-16 bg-secondary/10 rounded-full flex items-center justify-center mb-6">
|
||
+ <i :class="['text-secondary text-2xl', feature.icon]"></i>
|
||
+ </div>
|
||
+ <h3 class="text-xl font-semibold mb-4">{{ feature.title }}</h3>
|
||
+ <p class="text-gray-600 leading-relaxed">{{ feature.description }}</p>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </section>
|
||
+
|
||
+ <!-- 服务优势 -->
|
||
+ <section class="py-20 bg-gray-50">
|
||
+ <div class="container">
|
||
+ <div class="max-w-4xl mx-auto text-center mb-16">
|
||
+ <h2 class="text-4xl font-bold text-[#333333] mb-4">我们的服务优势</h2>
|
||
+ <p class="text-xl text-gray-600 leading-relaxed">作为AWS授权合作伙伴,我们提供全方位的专业服务</p>
|
||
+ </div>
|
||
+
|
||
+ <div class="grid md:grid-cols-2 gap-8">
|
||
+ <div v-for="(service, index) in services" :key="index" class="bg-white p-8 rounded-lg shadow-lg hover:shadow-xl transition-all duration-300 transform hover:-translate-y-1">
|
||
+ <div class="flex items-start">
|
||
+ <div class="w-12 h-12 bg-accent/10 rounded-full flex items-center justify-center mr-4">
|
||
+ <i :class="['text-accent text-xl', service.icon]"></i>
|
||
+ </div>
|
||
+ <div>
|
||
+ <h3 class="text-xl font-semibold mb-3">{{ service.title }}</h3>
|
||
+ <p class="text-gray-600 leading-relaxed">{{ service.description }}</p>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </section>
|
||
+
|
||
+ <!-- 核心产品 -->
|
||
+ <section class="py-20">
|
||
+ <div class="container">
|
||
+ <div class="max-w-4xl mx-auto text-center mb-16">
|
||
+ <h2 class="text-4xl font-bold text-[#333333] mb-4">AWS核心产品服务</h2>
|
||
+ <p class="text-xl text-gray-600 leading-relaxed">全面的云服务产品线,满足各种业务需求</p>
|
||
+ </div>
|
||
+
|
||
+ <div class="grid md:grid-cols-3 gap-8">
|
||
+ <div v-for="(product, index) in products" :key="index" class="bg-white rounded-lg shadow-lg overflow-hidden hover:shadow-xl transition-all duration-300 transform hover:-translate-y-1">
|
||
+ <div class="h-48 bg-gradient-to-br from-secondary/20 to-secondary/10 flex items-center justify-center">
|
||
+ <i :class="['text-6xl text-secondary', product.icon]"></i>
|
||
+ </div>
|
||
+ <div class="p-8">
|
||
+ <h3 class="text-2xl font-semibold mb-4">{{ product.title }}</h3>
|
||
+ <p class="text-gray-600 leading-relaxed mb-6">{{ product.description }}</p>
|
||
+ <NuxtLink to="/products" class="inline-flex items-center text-secondary hover:text-secondary/90">
|
||
+ 了解详情
|
||
+ <i class="fas fa-arrow-right ml-2"></i>
|
||
+ </NuxtLink>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+
|
||
+ <div class="text-center mt-12">
|
||
+ <NuxtLink to="/products" class="inline-flex items-center text-secondary hover:text-secondary/90 text-lg">
|
||
+ 查看全部AWS产品
|
||
+ <i class="fas fa-arrow-right ml-2"></i>
|
||
+ </NuxtLink>
|
||
+ </div>
|
||
+ </div>
|
||
+ </section>
|
||
+
|
||
+ <!-- 客户案例 -->
|
||
+ <section class="py-16 bg-gray-50">
|
||
+ <div class="container">
|
||
+ <h2 class="text-3xl font-medium text-center mb-4">成功客户案例</h2>
|
||
+ <p class="text-xl text-center text-gray-600 mb-12">看看其他企业如何利用AWS云服务提升业务价值</p>
|
||
+
|
||
+ <div class="grid md:grid-cols-2 gap-8">
|
||
+ <div v-for="(case_item, index) in cases" :key="index" class="bg-white rounded-lg shadow-md overflow-hidden">
|
||
+ <div class="h-48 bg-gray-200"></div>
|
||
+ <div class="p-6">
|
||
+ <h3 class="text-2xl font-semibold mb-2">{{ case_item.title }}</h3>
|
||
+ <p class="text-gray-600 mb-4">{{ case_item.description }}</p>
|
||
+ <NuxtLink to="/cases" class="inline-block text-secondary hover:text-secondary/90">阅读详情</NuxtLink>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </section>
|
||
+ </div>
|
||
+ </template>
|
||
+
|
||
+ <script setup lang="ts">
|
||
+ // AWS特性数据
|
||
+ const features = [
|
||
+ {
|
||
+ icon: 'fas fa-shield-alt',
|
||
+ title: '安全可靠',
|
||
+ description: 'AWS提供业界领先的安全服务,包括加密、防火墙和身份验证,保障您的数据安全'
|
||
+ },
|
||
+ {
|
||
+ icon: 'fas fa-bolt',
|
||
+ title: '高性能',
|
||
+ description: '全球数据中心网络,低延迟高带宽,确保您的应用程序高效运行'
|
||
+ },
|
||
+ {
|
||
+ icon: 'fas fa-dollar-sign',
|
||
+ title: '成本优化',
|
||
+ description: '按需付费模式,无需前期投资,降低IT运营成本'
|
||
+ }
|
||
+ ];
|
||
+
|
||
+ // 服务优势数据
|
||
+ const services = [
|
||
+ {
|
||
+ icon: 'fas fa-check-circle',
|
||
+ title: '官方授权',
|
||
+ description: '我们是AWS官方授权的合作伙伴,可提供正规授权和发票'
|
||
+ },
|
||
+ {
|
||
+ icon: 'fas fa-percentage',
|
||
+ title: '价格优势',
|
||
+ description: '相比直接采购,我们能提供更具竞争力的价格和灵活的付款方式'
|
||
+ },
|
||
+ {
|
||
+ icon: 'fas fa-headset',
|
||
+ title: '技术支持',
|
||
+ description: '专业的技术团队提供咨询、部署和运维服务,解决您的技术难题'
|
||
+ },
|
||
+ {
|
||
+ icon: 'fas fa-graduation-cap',
|
||
+ title: '培训服务',
|
||
+ description: '为您的团队提供专业的AWS技术培训,提升技术能力'
|
||
+ }
|
||
+ ];
|
||
+
|
||
+ // 核心产品数据
|
||
+ const products = [
|
||
+ {
|
||
+ icon: 'fas fa-server',
|
||
+ title: 'EC2 云服务器',
|
||
+ description: '可扩展的计算能力,适用于各种工作负载,从小型网站到企业级应用'
|
||
+ },
|
||
+ {
|
||
+ icon: 'fas fa-database',
|
||
+ title: 'S3 对象存储',
|
||
+ description: '安全、可靠的对象存储服务,适用于备份、归档和数据湖等场景'
|
||
+ },
|
||
+ {
|
||
+ icon: 'fas fa-network-wired',
|
||
+ title: 'RDS 关系型数据库',
|
||
+ description: '易于部署和管理的关系型数据库服务,支持多种主流数据库引擎'
|
||
+ }
|
||
+ ];
|
||
+
|
||
+ // 客户案例数据
|
||
+ const cases = [
|
||
+ {
|
||
+ title: '某金融科技公司',
|
||
+ description: '通过迁移到AWS云服务,该公司将应用响应时间缩短了40%,并节省了30%的IT运营成本'
|
||
+ },
|
||
+ {
|
||
+ title: '某电商平台',
|
||
+ description: '利用AWS弹性伸缩服务,轻松应对销售高峰期流量,提高了用户体验和订单转化率'
|
||
+ }
|
||
+ ];
|
||
+ </script>
|
||
```
|
||
|
||
---
|
||
|
||
创建关于我们页面:
|
||
|
||
---
|
||
|
||
```diff
|
||
-
|
||
+
|
||
```
|
||
|
||
---
|
||
|
||
```diff
|
||
-
|
||
+ <template>
|
||
+ <div>
|
||
+ <!-- 页面标题 -->
|
||
+ <HeroBanner
|
||
+ title="关于我们"
|
||
+ subtitle="专业的AWS云服务解决方案提供商,助力企业数字化转型"
|
||
+ />
|
||
+
|
||
+ <!-- 公司简介 -->
|
||
+ <section class="section">
|
||
+ <div class="container">
|
||
+ <div class="grid md:grid-cols-2 gap-12 items-center">
|
||
+ <div>
|
||
+ <h2 class="text-4xl font-bold text-[#333333] mb-8 mt-6">公司简介</h2>
|
||
+ <p class="text-gray-600 mb-4 text-lg leading-relaxed">云服务专家成立于2018年,是AWS授权的云服务解决方案提供商。我们致力于为企业提供专业的云计算咨询、迁移、运维和优化服务。</p>
|
||
+ <p class="text-gray-600 mb-8 text-lg leading-relaxed">作为AWS高级合作伙伴,我们拥有丰富的云服务实施经验和专业的技术团队,已成功帮助数百家企业完成云上转型。</p>
|
||
+ <ul class="space-y-4">
|
||
+ <li v-for="(achievement, index) in achievements" :key="index" class="flex items-center text-lg">
|
||
+ <i class="fas fa-check-circle text-green-500 mr-3"></i>
|
||
+ <span class="text-gray-700">{{ achievement }}</span>
|
||
+ </li>
|
||
+ </ul>
|
||
+ </div>
|
||
+ <div class="bg-gradient-to-br from-secondary/20 to-secondary/10 h-80 rounded-lg flex items-center justify-center">
|
||
+ <i class="fas fa-building text-8xl text-secondary"></i>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </section>
|
||
+
|
||
+ <!-- 我们的优势 -->
|
||
+ <section class="section bg-gray-50">
|
||
+ <div class="container">
|
||
+ <div class="max-w-4xl mx-auto text-center mb-16">
|
||
+ <h2 class="text-4xl font-bold text-[#333333] mb-4 mt-6">我们的优势</h2>
|
||
+ <p class="text-xl text-gray-600 leading-relaxed">专业技术团队,丰富项目经验</p>
|
||
+ </div>
|
||
+ <div class="grid md:grid-cols-4 gap-8">
|
||
+ <div v-for="(advantage, index) in advantages" :key="index" class="bg-white p-8 rounded-lg shadow-lg hover:shadow-xl transition-all duration-300 transform hover:-translate-y-1 text-center">
|
||
+ <div class="w-20 h-20 bg-gradient-to-br from-secondary/20 to-secondary/10 rounded-full flex items-center justify-center mx-auto mb-6">
|
||
+ <i :class="['text-secondary text-3xl', advantage.icon]"></i>
|
||
+ </div>
|
||
+ <h3 class="text-xl font-semibold mb-4">{{ advantage.title }}</h3>
|
||
+ <p class="text-gray-600 leading-relaxed">{{ advantage.description }}</p>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </section>
|
||
+
|
||
+ <!-- 企业文化 -->
|
||
+ <section class="section">
|
||
+ <div class="container">
|
||
+ <div class="max-w-4xl mx-auto text-center mb-16">
|
||
+ <h2 class="text-4xl font-bold text-[#333333] mb-4 mt-6">企业文化</h2>
|
||
+ <p class="text-xl text-gray-600 leading-relaxed">以客户为中心,追求卓越服务</p>
|
||
+ </div>
|
||
+ <div class="grid md:grid-cols-3 gap-8">
|
||
+ <div v-for="(culture, index) in cultures" :key="index" class="bg-white p-8 rounded-lg shadow-lg hover:shadow-xl transition-all duration-300 transform hover:-translate-y-1">
|
||
+ <div class="w-20 h-20 bg-gradient-to-br from-secondary/20 to-secondary/10 rounded-full flex items-center justify-center mx-auto mb-6">
|
||
+ <i :class="['text-secondary text-3xl', culture.icon]"></i>
|
||
+ </div>
|
||
+ <h3 class="text-xl font-semibold mb-4 text-center">{{ culture.title }}</h3>
|
||
+ <p class="text-gray-600 leading-relaxed text-center">{{ culture.description }}</p>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </section>
|
||
+
|
||
+ <!-- 发展历程 -->
|
||
+ <section class="section bg-gray-50">
|
||
+ <div class="container">
|
||
+ <div class="max-w-4xl mx-auto text-center mb-16">
|
||
+ <h2 class="text-4xl font-bold text-[#333333] mb-4 mt-6">发展历程</h2>
|
||
+ <p class="text-xl text-gray-600 leading-relaxed">见证我们的成长与进步</p>
|
||
+ </div>
|
||
+ <div class="space-y-8">
|
||
+ <div v-for="(history, index) in historyItems" :key="index" class="flex flex-col md:flex-row items-center gap-8">
|
||
+ <div class="w-full md:w-1/4 text-right">
|
||
+ <h3 class="text-2xl font-semibold text-secondary">{{ history.year }}</h3>
|
||
+ </div>
|
||
+ <div class="w-px h-16 bg-secondary hidden md:block"></div>
|
||
+ <div class="w-full md:w-3/4">
|
||
+ <p class="text-gray-600 text-lg leading-relaxed">{{ history.description }}</p>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </section>
|
||
+
|
||
+ <!-- 联系我们 -->
|
||
+ <section class="section bg-primary text-white">
|
||
+ <div class="container text-center">
|
||
+ <h2 class="text-4xl font-bold mb-6">想了解更多关于我们?</h2>
|
||
+ <p class="text-xl mb-8 max-w-2xl mx-auto leading-relaxed">欢迎联系我们,了解更多公司信息和服务详情</p>
|
||
+ <NuxtLink to="/contact" class="inline-flex items-center bg-white text-black px-8 py-4 rounded-lg hover:bg-gray-100 transition-colors duration-300 text-lg font-semibold">
|
||
+ 联系我们
|
||
+ <i class="fas fa-arrow-right ml-2"></i>
|
||
+ </NuxtLink>
|
||
+ </div>
|
||
+ </section>
|
||
+ </div>
|
||
+ </template>
|
||
+
|
||
+ <script setup lang="ts">
|
||
+ // 公司成就
|
||
+ const achievements = [
|
||
+ 'AWS高级合作伙伴认证',
|
||
+ '100+成功案例',
|
||
+ '50+AWS认证工程师'
|
||
+ ];
|
||
+
|
||
+ // 优势数据
|
||
+ const advantages = [
|
||
+ {
|
||
+ icon: 'fas fa-award',
|
||
+ title: '专业认证',
|
||
+ description: 'AWS官方认证的高级合作伙伴,拥有多项专业认证'
|
||
+ },
|
||
+ {
|
||
+ icon: 'fas fa-users',
|
||
+ title: '专业团队',
|
||
+ description: '50+位AWS认证工程师,平均5年以上云服务经验'
|
||
+ },
|
||
+ {
|
||
+ icon: 'fas fa-tools',
|
||
+ title: '技术实力',
|
||
+ description: '掌握AWS全线产品,具备丰富的实施和运维经验'
|
||
+ },
|
||
+ {
|
||
+ icon: 'fas fa-headset',
|
||
+ title: '服务保障',
|
||
+ description: '7x24小时技术支持,确保客户业务稳定运行'
|
||
+ }
|
||
+ ];
|
||
+
|
||
+ // 企业文化
|
||
+ const cultures = [
|
||
+ {
|
||
+ icon: 'fas fa-bullseye',
|
||
+ title: '企业使命',
|
||
+ description: '助力企业数字化转型,提供专业可靠的云计算服务'
|
||
+ },
|
||
+ {
|
||
+ icon: 'fas fa-eye',
|
||
+ title: '企业愿景',
|
||
+ description: '成为中国最值得信赖的云服务解决方案提供商'
|
||
+ },
|
||
+ {
|
||
+ icon: 'fas fa-heart',
|
||
+ title: '核心价值观',
|
||
+ description: '专业、创新、诚信、共赢'
|
||
+ }
|
||
+ ];
|
||
+
|
||
+ // 发展历程
|
||
+ const historyItems = [
|
||
+ {
|
||
+ year: '2023年',
|
||
+ description: '成为AWS高级合作伙伴,服务客户数量突破500家'
|
||
+ },
|
||
+ {
|
||
+ year: '2021年',
|
||
+ description: '获得AWS标准合作伙伴认证,团队规模扩大到50人'
|
||
+ },
|
||
+ {
|
||
+ year: '2018年',
|
||
+ description: '公司成立,开始提供AWS云服务解决方案'
|
||
+ }
|
||
+ ];
|
||
+ </script>
|
||
```
|
||
|
||
---
|
||
|
||
创建联系我们页面:
|
||
|
||
---
|
||
|
||
```diff
|
||
-
|
||
+ <template>
|
||
+ <div>
|
||
+ <!-- 页面标题 -->
|
||
+ <HeroBanner
|
||
+ title="联系我们"
|
||
+ subtitle="随时欢迎您的咨询,我们将为您提供专业的云服务解决方案"
|
||
+ />
|
||
+
|
||
+ <!-- 联系方式 -->
|
||
+ <section class="section">
|
||
+ <div class="container">
|
||
+ <div class="grid md:grid-cols-3 gap-8 mb-16">
|
||
+ <div v-for="(contact, index) in contactMethods" :key="index" class="bg-white p-8 rounded-lg shadow-lg hover:shadow-xl transition-all duration-300 transform hover:-translate-y-1">
|
||
+ <div class="w-20 h-20 bg-gradient-to-br from-secondary/20 to-secondary/10 rounded-full flex items-center justify-center mx-auto mb-6">
|
||
+ <i :class="['text-secondary text-3xl', contact.icon]"></i>
|
||
+ </div>
|
||
+ <h3 class="text-2xl font-semibold mb-4 text-center">{{ contact.title }}</h3>
|
||
+ <p class="text-gray-600 mb-2 text-center">{{ contact.subtitle }}</p>
|
||
+ <p class="text-2xl font-semibold text-secondary text-center">{{ contact.content }}</p>
|
||
+ <div v-if="contact.type === 'wechat'" class="w-32 h-32 bg-gradient-to-br from-secondary/20 to-secondary/10 rounded-lg mx-auto flex items-center justify-center mt-4">
|
||
+ <i class="fas fa-qrcode text-6xl text-secondary"></i>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+
|
||
+ <div class="grid md:grid-cols-2 gap-12">
|
||
+ <!-- 联系表单 -->
|
||
+ <div class="bg-white p-8 rounded-lg shadow-lg">
|
||
+ <h2 class="text-3xl font-bold mb-8 text-center">在线咨询</h2>
|
||
+ <form @submit.prevent="submitForm" class="space-y-6">
|
||
+ <div class="grid md:grid-cols-2 gap-6">
|
||
+ <div>
|
||
+ <label class="block text-sm font-medium text-gray-700 mb-2" for="name">
|
||
+ 姓名 <span class="text-red-500">*</span>
|
||
+ </label>
|
||
+ <input
|
||
+ type="text"
|
||
+ id="name"
|
||
+ v-model="form.name"
|
||
+ required
|
||
+ class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-secondary focus:border-transparent transition-colors duration-300"
|
||
+ >
|
||
+ </div>
|
||
+ <div>
|
||
+ <label class="block text-sm font-medium text-gray-700 mb-2" for="company">
|
||
+ 公司名称 <span class="text-red-500">*</span>
|
||
+ </label>
|
||
+ <input
|
||
+ type="text"
|
||
+ id="company"
|
||
+ v-model="form.company"
|
||
+ required
|
||
+ class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-secondary focus:border-transparent transition-colors duration-300"
|
||
+ >
|
||
+ </div>
|
||
+ </div>
|
||
+ <div class="grid md:grid-cols-2 gap-6">
|
||
+ <div>
|
||
+ <label class="block text-sm font-medium text-gray-700 mb-2" for="email">
|
||
+ 邮箱 <span class="text-red-500">*</span>
|
||
+ </label>
|
||
+ <input
|
||
+ type="email"
|
||
+ id="email"
|
||
+ v-model="form.email"
|
||
+ required
|
||
+ class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-secondary focus:border-transparent transition-colors duration-300"
|
||
+ >
|
||
+ </div>
|
||
+ <div>
|
||
+ <label class="block text-sm font-medium text-gray-700 mb-2" for="phone">
|
||
+ 电话 <span class="text-red-500">*</span>
|
||
+ </label>
|
||
+ <input
|
||
+ type="tel"
|
||
+ id="phone"
|
||
+ v-model="form.phone"
|
||
+ required
|
||
+ class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-secondary focus:border-transparent transition-colors duration-300"
|
||
+ >
|
||
+ </div>
|
||
+ </div>
|
||
+ <div>
|
||
+ <label class="block text-sm font-medium text-gray-700 mb-2" for="service">
|
||
+ 咨询服务 <span class="text-red-500">*</span>
|
||
+ </label>
|
||
+ <select
|
||
+ id="service"
|
||
+ v-model="form.service"
|
||
+ required
|
||
+ class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-secondary focus:border-transparent transition-colors duration-300"
|
||
+ >
|
||
+ <option value="">请选择咨询服务</option>
|
||
+ <option v-for="(service, index) in services" :key="index" :value="service.value">
|
||
+ {{ service.label }}
|
||
+ </option>
|
||
+ </select>
|
||
+ </div>
|
||
+ <div>
|
||
+ <label class="block text-sm font-medium text-gray-700 mb-2" for="message">
|
||
+ 咨询内容 <span class="text-red-500">*</span>
|
||
+ </label>
|
||
+ <textarea
|
||
+ id="message"
|
||
+ v-model="form.message"
|
||
+ rows="4"
|
||
+ required
|
||
+ class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-secondary focus:border-transparent transition-colors duration-300"
|
||
+ ></textarea>
|
||
+ </div>
|
||
+ <button
|
||
+ type="submit"
|
||
+ :disabled="submitting"
|
||
+ :class="['w-full py-4 px-6 rounded-lg text-white text-lg font-semibold',
|
||
+ submitting ? 'bg-gray-400' : 'bg-secondary hover:bg-secondary/90 transition-colors duration-300']"
|
||
+ >
|
||
+ <span v-if="submitting">
|
||
+ <i class="fas fa-spinner fa-spin mr-2"></i>提交中...
|
||
+ </span>
|
||
+ <span v-else>提交咨询</span>
|
||
+ </button>
|
||
+ </form>
|
||
+ </div>
|
||
+
|
||
+ <!-- 公司地址 -->
|
||
+ <div>
|
||
+ <div class="bg-white p-8 rounded-lg shadow-lg mb-8">
|
||
+ <h2 class="text-3xl font-bold mb-8 text-center">公司地址</h2>
|
||
+ <div class="space-y-6">
|
||
+ <div v-for="(info, index) in companyInfo" :key="index" class="flex items-start">
|
||
+ <div class="w-12 h-12 bg-gradient-to-br from-secondary/20 to-secondary/10 rounded-full flex items-center justify-center mr-4">
|
||
+ <i :class="['text-secondary text-xl', info.icon]"></i>
|
||
+ </div>
|
||
+ <div>
|
||
+ <h4 class="text-xl font-semibold mb-2">{{ info.title }}</h4>
|
||
+ <p class="text-gray-600">{{ info.content }}</p>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ <!-- 地图 -->
|
||
+ <div class="w-full h-96 rounded-lg shadow-lg overflow-hidden bg-gray-200 flex items-center justify-center">
|
||
+ <i class="fas fa-map-marked-alt text-6xl text-gray-400"></i>
|
||
+ <span class="ml-4 text-gray-500">地图加载位置</span>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </section>
|
||
+
|
||
+ <!-- 常见问题 -->
|
||
+ <section class="section bg-gray-50">
|
||
+ <div class="container">
|
||
+ <h2 class="text-4xl font-bold text-center mb-6">常见问题</h2>
|
||
+ <p class="text-xl text-center text-gray-600 mb-12">解答您最关心的问题</p>
|
||
+ <div class="grid md:grid-cols-2 gap-8">
|
||
+ <div v-for="(faq, index) in faqs" :key="index" class="bg-white p-8 rounded-lg shadow-lg hover:shadow-xl transition-all duration-300 transform hover:-translate-y-1">
|
||
+ <h3 class="text-2xl font-semibold mb-4">{{ faq.question }}</h3>
|
||
+ <p class="text-gray-600 leading-relaxed">{{ faq.answer }}</p>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </section>
|
||
+
|
||
+ <!-- 通知组件 -->
|
||
+ <NotificationToast
|
||
+ :message="notification.message"
|
||
+ :type="notification.type"
|
||
+ @close="notification.message = ''"
|
||
+ />
|
||
+ </div>
|
||
+ </template>
|
||
+
|
||
+ <script setup lang="ts">
|
||
+ import { ref, reactive } from 'vue';
|
||
+
|
||
+ // 联系方式数据
|
||
+ const contactMethods = [
|
||
+ {
|
||
+ icon: 'fas fa-phone',
|
||
+ title: '电话咨询',
|
||
+ subtitle: '周一至周日 9:00-21:00',
|
||
+ content: '400-123-4567',
|
||
+ type: 'phone'
|
||
+ },
|
||
+ {
|
||
+ icon: 'fas fa-envelope',
|
||
+ title: '邮件咨询',
|
||
+ subtitle: '7*24小时邮件支持',
|
||
+ content: 'contact@example.com',
|
||
+ type: 'email'
|
||
+ },
|
||
+ {
|
||
+ icon: 'fab fa-weixin',
|
||
+ title: '微信咨询',
|
||
+ subtitle: '扫描下方二维码',
|
||
+ content: '',
|
||
+ type: 'wechat'
|
||
+ }
|
||
+ ];
|
||
+
|
||
+ // 公司信息
|
||
+ const companyInfo = [
|
||
+ {
|
||
+ icon: 'fas fa-map-marker-alt',
|
||
+ title: '北京总部',
|
||
+ content: '北京市朝阳区某某大厦10层'
|
||
+ },
|
||
+ {
|
||
+ icon: 'fas fa-subway',
|
||
+ title: '交通方式',
|
||
+ content: '地铁6号线某某站A出口步行5分钟'
|
||
+ },
|
||
+ {
|
||
+ icon: 'far fa-clock',
|
||
+ title: '办公时间',
|
||
+ content: '周一至周五: 9:00-18:00'
|
||
+ }
|
||
+ ];
|
||
+
|
||
+ // 服务选项
|
||
+ const services = [
|
||
+ { value: 'cloud', label: '云服务咨询' },
|
||
+ { value: 'migration', label: '上云迁移' },
|
||
+ { value: 'solution', label: '解决方案咨询' },
|
||
+ { value: 'price', label: '价格咨询' },
|
||
+ { value: 'other', label: '其他' }
|
||
+ ];
|
||
+
|
||
+ // 常见问题
|
||
+ const faqs = [
|
||
+ {
|
||
+ question: '如何开始使用AWS云服务?',
|
||
+ answer: '您可以通过我们的咨询服务,获取专业的AWS云服务解决方案建议。我们的团队将根据您的具体需求,为您提供最适合的云服务方案。'
|
||
+ },
|
||
+ {
|
||
+ question: '如何获取技术支持?',
|
||
+ answer: '我们提供7*24小时技术支持服务,您可以通过电话、邮件或在线咨询等方式联系我们的技术支持团队。'
|
||
+ },
|
||
+ {
|
||
+ question: '如何计算使用成本?',
|
||
+ answer: '我们提供详细的成本评估服务,可以根据您的具体使用场景和需求,为您提供准确的成本预估和优化建议。'
|
||
+ },
|
||
+ {
|
||
+ question: '如何申请试用服务?',
|
||
+ answer: '您可以通过在线咨询或直接联系我们的销售团队,申请AWS云服务的试用。我们将为您提供专业的试用方案和技术支持。'
|
||
+ }
|
||
+ ];
|
||
+
|
||
+ // 表单数据
|
||
+ const form = reactive({
|
||
+ name: '',
|
||
+ company: '',
|
||
+ email: '',
|
||
+ phone: '',
|
||
+ service: '',
|
||
+ message: ''
|
||
+ });
|
||
+
|
||
+ const submitting = ref(false);
|
||
+ const notification = reactive({
|
||
+ message: '',
|
||
+ type: 'success'
|
||
+ });
|
||
+
|
||
+ // 提交表单方法
|
||
+ const submitForm = async () => {
|
||
+ submitting.value = true;
|
||
+
|
||
+ try {
|
||
+ // 模拟API请求
|
||
+ await new Promise(resolve => setTimeout(resolve, 1500));
|
||
+
|
||
+ // 显示成功消息
|
||
+ notification.message = '提交成功!我们会尽快与您联系。';
|
||
+ notification.type = 'success';
|
||
+
|
||
+ // 重置表单
|
||
+ Object.keys(form).forEach(key => {
|
||
+ form[key as keyof typeof form] = '';
|
||
+ });
|
||
+ } catch (error) {
|
||
+ // 显示错误消息
|
||
+ notification.message = '抱歉,提交失败,请稍后重试。';
|
||
+ notification.type = 'error';
|
||
+ } finally {
|
||
+ submitting.value = false;
|
||
+ }
|
||
+ };
|
||
+ </script>
|
||
```
|
||
|
||
---
|
||
|
||
创建其他必要的页面文件:
|
||
|
||
---
|
||
|
||
```diff
|
||
-
|
||
+ <template>
|
||
+ <div>
|
||
+ <!-- 页面标题 -->
|
||
+ <HeroBanner
|
||
+ title="AWS产品"
|
||
+ subtitle="全面的云计算产品线,满足您的各种业务需求"
|
||
+ />
|
||
+
|
||
+ <!-- 产品分类 -->
|
||
+ <section class="section">
|
||
+ <div class="container">
|
||
+ <div class="max-w-4xl mx-auto text-center mb-16">
|
||
+ <h2 class="text-4xl font-bold text-[#333333] mb-4">AWS全线产品</h2>
|
||
+ <p class="text-xl text-gray-600 leading-relaxed">覆盖计算、存储、数据库、网络、安全等多个领域</p>
|
||
+ </div>
|
||
+
|
||
+ <div class="grid md:grid-cols-3 gap-8">
|
||
+ <div v-for="(category, index) in productCategories" :key="index" class="bg-white p-8 rounded-lg shadow-lg hover:shadow-xl transition-all duration-300 transform hover:-translate-y-1">
|
||
+ <div class="w-16 h-16 bg-secondary/10 rounded-full flex items-center justify-center mb-6">
|
||
+ <i :class="['text-secondary text-2xl', category.icon]"></i>
|
||
+ </div>
|
||
+ <h3 class="text-xl font-semibold mb-4">{{ category.name }}</h3>
|
||
+ <p class="text-gray-600 leading-relaxed mb-6">{{ category.description }}</p>
|
||
+ <a href="#product-list" class="inline-flex items-center text-secondary hover:text-secondary/90">
|
||
+ 查看产品
|
||
+ <i class="fas fa-arrow-right ml-2"></i>
|
||
+ </a>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </section>
|
||
+
|
||
+ <!-- 产品列表 -->
|
||
+ <section id="product-list" class="py-20 bg-gray-50">
|
||
+ <div class="container">
|
||
+ <div class="max-w-4xl mx-auto text-center mb-16">
|
||
+ <h2 class="text-4xl font-bold text-[#333333] mb-4">热门产品服务</h2>
|
||
+ <p class="text-xl text-gray-600 leading-relaxed">AWS核心产品详细介绍</p>
|
||
+ </div>
|
||
+
|
||
+ <div class="space-y-12">
|
||
+ <div v-for="(product, index) in products" :key="index" class="bg-white rounded-lg shadow-lg overflow-hidden">
|
||
+ <div class="grid md:grid-cols-3">
|
||
+ <div class="bg-gradient-to-br from-secondary/20 to-secondary/10 flex items-center justify-center p-8">
|
||
+ <i :class="['text-8xl text-secondary', product.icon]"></i>
|
||
+ </div>
|
||
+ <div class="md:col-span-2 p-8">
|
||
+ <h3 class="text-2xl font-semibold mb-4">{{ product.name }}</h3>
|
||
+ <p class="text-gray-600 leading-relaxed mb-6">{{ product.description }}</p>
|
||
+ <div class="mb-6">
|
||
+ <h4 class="text-lg font-semibold mb-2">产品优势</h4>
|
||
+ <ul class="space-y-2">
|
||
+ <li v-for="(feature, idx) in product.features" :key="idx" class="flex items-start">
|
||
+ <i class="fas fa-check-circle text-green-500 mt-1 mr-2"></i>
|
||
+ <span class="text-gray-600">{{ feature }}</span>
|
||
+ </li>
|
||
+ </ul>
|
||
+ </div>
|
||
+ <div class="flex justify-between items-center">
|
||
+ <a href="#contact" class="btn-primary">咨询详情</a>
|
||
+ <span class="text-gray-500">价格: {{ product.pricing }}</span>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </section>
|
||
+
|
||
+ <!-- 服务优势 -->
|
||
+ <section class="py-20">
|
||
+ <div class="container">
|
||
+ <div class="max-w-4xl mx-auto text-center mb-16">
|
||
+ <h2 class="text-4xl font-bold text-[#333333] mb-4">我们的优势</h2>
|
||
+ <p class="text-xl text-gray-600 leading-relaxed">作为AWS授权合作伙伴,我们提供专业的AWS产品咨询和部署服务</p>
|
||
+ </div>
|
||
+
|
||
+ <div class="grid md:grid-cols-4 gap-8">
|
||
+ <div v-for="(advantage, index) in advantages" :key="index" class="bg-white p-8 rounded-lg shadow-lg hover:shadow-xl transition-all duration-300 transform hover:-translate-y-1 text-center">
|
||
+ <div class="w-16 h-16 bg-accent/10 rounded-full flex items-center justify-center mx-auto mb-6">
|
||
+ <i :class="['text-accent text-2xl', advantage.icon]"></i>
|
||
+ </div>
|
||
+ <h3 class="text-xl font-semibold mb-4">{{ advantage.title }}</h3>
|
||
+ <p class="text-gray-600 leading-relaxed">{{ advantage.description }}</p>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </section>
|
||
+
|
||
+ <!-- 联系我们 -->
|
||
+ <section id="contact" class="py-16 bg-primary text-white">
|
||
+ <div class="container text-center">
|
||
+ <h2 class="text-4xl font-bold mb-6">想了解更多产品信息?</h2>
|
||
+ <p class="text-xl mb-8 max-w-2xl mx-auto leading-relaxed">我们的AWS产品专家将为您提供详细的产品介绍和价格咨询</p>
|
||
+ <NuxtLink to="/contact" class="inline-flex items-center bg-white text-black px-8 py-4 rounded-lg hover:bg-gray-100 transition-colors duration-300 text-lg font-semibold">
|
||
+ 联系产品顾问
|
||
+ <i class="fas fa-arrow-right ml-2"></i>
|
||
+ </NuxtLink>
|
||
+ </div>
|
||
+ </section>
|
||
+ </div>
|
||
+ </template>
|
||
+
|
||
+ <script setup lang="ts">
|
||
+ // 产品分类
|
||
+ const productCategories = [
|
||
+ {
|
||
+ icon: 'fas fa-server',
|
||
+ name: '计算服务',
|
||
+ description: '包括EC2、Lambda等,提供灵活的计算能力'
|
||
+ },
|
||
+ {
|
||
+ icon: 'fas fa-database',
|
||
+ name: '存储服务',
|
||
+ description: '包括S3、EBS等,提供可靠的数据存储解决方案'
|
||
+ },
|
||
+ {
|
||
+ icon: 'fas fa-sitemap',
|
||
+ name: '网络服务',
|
||
+ description: '包括VPC、Route 53等,提供安全灵活的网络管理'
|
||
+ },
|
||
+ {
|
||
+ icon: 'fas fa-shield-alt',
|
||
+ name: '安全与身份',
|
||
+ description: '包括IAM、GuardDuty等,提供全面的安全防护'
|
||
+ },
|
||
+ {
|
||
+ icon: 'fas fa-chart-line',
|
||
+ name: '监控与管理',
|
||
+ description: '包括CloudWatch、Systems Manager等,提供全面的监控和管理工具'
|
||
+ },
|
||
+ {
|
||
+ icon: 'fas fa-robot',
|
||
+ name: '人工智能',
|
||
+ description: '包括SageMaker、Rekognition等,提供先进的AI服务'
|
||
+ }
|
||
+ ];
|
||
+
|
||
+ // 产品列表
|
||
+ const products = [
|
||
+ {
|
||
+ icon: 'fas fa-server',
|
||
+ name: 'Amazon EC2',
|
||
+ description: 'Amazon Elastic Compute Cloud (EC2) 是一种提供可扩展计算能力的网络服务,专为云端计算设计。使用 EC2 可消除前期硬件投资,因此您能够更快地开发和部署应用程序。',
|
||
+ features: [
|
||
+ '灵活选择实例类型,适应不同应用场景',
|
||
+ '按秒计费,降低运营成本',
|
||
+ '自动扩展,应对业务峰值',
|
||
+ '高可用性和可靠性保障'
|
||
+ ],
|
||
+ pricing: '按需付费,起价低至¥0.1/小时'
|
||
+ },
|
||
+ {
|
||
+ icon: 'fas fa-database',
|
||
+ name: 'Amazon S3',
|
||
+ description: 'Amazon Simple Storage Service (S3) 是一种对象存储服务,提供行业领先的可扩展性、数据可用性、安全性和性能。这意味着任何规模的企业都可以存储和保护任意数量的数据。',
|
||
+ features: [
|
||
+ '无限容量扩展,适合任何规模的数据存储',
|
||
+ '99.999999999% 的数据持久性',
|
||
+ '多种存储类别,优化成本',
|
||
+ '强大的访问控制和加密功能'
|
||
+ ],
|
||
+ pricing: '按存储量和请求数付费,起价低至¥0.2/GB/月'
|
||
+ },
|
||
+ {
|
||
+ icon: 'fas fa-table',
|
||
+ name: 'Amazon RDS',
|
||
+ description: 'Amazon Relational Database Service (RDS) 使在云中设置、操作和扩展关系数据库变得简单。它提供经济高效且可调整容量的容量,同时自动执行耗时的管理任务。',
|
||
+ features: [
|
||
+ '支持多种数据库引擎:MySQL、PostgreSQL、Oracle等',
|
||
+ '自动备份和恢复功能',
|
||
+ '高可用性主备部署',
|
||
+ '自动软件更新和维护'
|
||
+ ],
|
||
+ pricing: '按实例类型计费,起价低至¥0.5/小时'
|
||
+ }
|
||
+ ];
|
||
+
|
||
+ // 服务优势
|
||
+ const advantages = [
|
||
+ {
|
||
+ icon: 'fas fa-tachometer-alt',
|
||
+ title: '快速部署',
|
||
+ description: '专业的团队帮助您快速部署AWS产品,缩短上线时间'
|
||
+ },
|
||
+ {
|
||
+ icon: 'fas fa-hand-holding-usd',
|
||
+ title: '成本优化',
|
||
+ description: '根据业务需求,为您定制最优成本方案,避免资源浪费'
|
||
+ },
|
||
+ {
|
||
+ icon: 'fas fa-lock',
|
||
+ title: '安全保障',
|
||
+ description: '提供全面的安全评估和最佳实践,保障业务安全'
|
||
+ },
|
||
+ {
|
||
+ icon: 'fas fa-headset',
|
||
+ title: '专业支持',
|
||
+ description: '7*24小时技术支持,解决您使用过程中的各种问题'
|
||
+ }
|
||
+ ];
|
||
+ </script>
|
||
```
|
||
|
||
---
|
||
|
||
创建解决方案页面:
|
||
|
||
---
|
||
|
||
```diff
|
||
-
|
||
+
|
||
```
|
||
|
||
---
|
||
|
||
```diff
|
||
-
|
||
+ <template>
|
||
+ <div>
|
||
+ <!-- 页面标题 -->
|
||
+ <HeroBanner
|
||
+ title="解决方案"
|
||
+ subtitle="针对不同行业和业务场景的专业AWS云服务解决方案"
|
||
+ />
|
||
+
|
||
+ <!-- 解决方案分类 -->
|
||
+ <section class="py-20">
|
||
+ <div class="container">
|
||
+ <div class="max-w-4xl mx-auto text-center mb-16">
|
||
+ <h2 class="text-4xl font-bold text-[#333333] mb-4">AWS云解决方案</h2>
|
||
+ <p class="text-xl text-gray-600 leading-relaxed">基于AWS云服务,为不同行业提供专业解决方案</p>
|
||
+ </div>
|
||
+
|
||
+ <div class="grid md:grid-cols-3 gap-8">
|
||
+ <div v-for="(category, index) in solutionCategories" :key="index" class="bg-white p-8 rounded-lg shadow-lg hover:shadow-xl transition-all duration-300 transform hover:-translate-y-1 text-center">
|
||
+ <div class="w-20 h-20 bg-gradient-to-br from-secondary/20 to-secondary/10 rounded-full flex items-center justify-center mx-auto mb-6">
|
||
+ <i :class="['text-secondary text-3xl', category.icon]"></i>
|
||
+ </div>
|
||
+ <h3 class="text-xl font-semibold mb-4">{{ category.title }}</h3>
|
||
+ <p class="text-gray-600 leading-relaxed mb-6">{{ category.description }}</p>
|
||
+ <a :href="'#' + category.id" class="inline-flex items-center text-secondary hover:text-secondary/90">
|
||
+ 查看详情
|
||
+ <i class="fas fa-arrow-right ml-2"></i>
|
||
+ </a>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </section>
|
||
+
|
||
+ <!-- 解决方案详情 -->
|
||
+ <div class="space-y-16">
|
||
+ <section v-for="(solution, index) in solutions" :key="index" :id="solution.id" class="py-20" :class="index % 2 === 0 ? 'bg-gray-50' : 'bg-white'">
|
||
+ <div class="container">
|
||
+ <div class="grid md:grid-cols-2 gap-12 items-center">
|
||
+ <div :class="index % 2 === 1 ? 'md:order-1' : ''">
|
||
+ <div class="bg-gradient-to-br from-secondary/20 to-secondary/10 h-80 rounded-lg flex items-center justify-center">
|
||
+ <i :class="['text-8xl text-secondary', solution.icon]"></i>
|
||
+ </div>
|
||
+ </div>
|
||
+ <div>
|
||
+ <h2 class="text-4xl font-bold text-[#333333] mb-6">{{ solution.title }}</h2>
|
||
+ <p class="text-gray-600 leading-relaxed mb-6">{{ solution.description }}</p>
|
||
+ <div class="mb-8">
|
||
+ <h4 class="text-lg font-semibold mb-4">解决方案优势</h4>
|
||
+ <ul class="space-y-3">
|
||
+ <li v-for="(benefit, idx) in solution.benefits" :key="idx" class="flex items-start">
|
||
+ <i class="fas fa-check-circle text-green-500 mt-1 mr-3"></i>
|
||
+ <span class="text-gray-600">{{ benefit }}</span>
|
||
+ </li>
|
||
+ </ul>
|
||
+ </div>
|
||
+ <div class="mb-8">
|
||
+ <h4 class="text-lg font-semibold mb-4">适用行业</h4>
|
||
+ <div class="flex flex-wrap gap-2">
|
||
+ <span v-for="(industry, idx) in solution.industries" :key="idx" class="px-3 py-1 bg-gray-100 text-gray-700 rounded-full text-sm">
|
||
+ {{ industry }}
|
||
+ </span>
|
||
+ </div>
|
||
+ </div>
|
||
+ <a href="#contact" class="btn-primary">咨询方案</a>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </section>
|
||
+ </div>
|
||
+
|
||
+ <!-- 实施流程 -->
|
||
+ <section class="py-20 bg-gray-50">
|
||
+ <div class="container">
|
||
+ <div class="max-w-4xl mx-auto text-center mb-16">
|
||
+ <h2 class="text-4xl font-bold text-[#333333] mb-4">解决方案实施流程</h2>
|
||
+ <p class="text-xl text-gray-600 leading-relaxed">专业、高效的项目实施流程,确保方案平稳落地</p>
|
||
+ </div>
|
||
+
|
||
+ <div class="relative">
|
||
+ <!-- 流程连接线 -->
|
||
+ <div class="absolute left-1/2 top-8 bottom-8 w-1 bg-secondary/20 -translate-x-1/2 hidden md:block"></div>
|
||
+
|
||
+ <div class="space-y-12">
|
||
+ <div v-for="(step, index) in implementationSteps" :key="index" class="flex flex-col md:flex-row md:items-center relative">
|
||
+ <!-- 步骤编号 -->
|
||
+ <div class="md:absolute md:left-1/2 md:-translate-x-1/2 z-10 w-12 h-12 bg-white rounded-full border-4 border-secondary flex items-center justify-center font-bold text-secondary mb-4 md:mb-0 mx-auto md:mx-0">
|
||
+ {{ index + 1 }}
|
||
+ </div>
|
||
+
|
||
+ <!-- 步骤内容 -->
|
||
+ <div :class="[
|
||
+ 'bg-white p-6 rounded-lg shadow-md w-full md:w-5/12',
|
||
+ index % 2 === 0 ? 'md:mr-auto' : 'md:ml-auto'
|
||
+ ]">
|
||
+ <h3 class="text-xl font-semibold mb-2">{{ step.title }}</h3>
|
||
+ <p class="text-gray-600">{{ step.description }}</p>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </section>
|
||
+
|
||
+ <!-- 客户案例展示 -->
|
||
+ <section class="py-20">
|
||
+ <div class="container">
|
||
+ <div class="max-w-4xl mx-auto text-center mb-16">
|
||
+ <h2 class="text-4xl font-bold text-[#333333] mb-4">客户成功案例</h2>
|
||
+ <p class="text-xl text-gray-600 leading-relaxed">我们的解决方案已成功应用于众多行业</p>
|
||
+ </div>
|
||
+
|
||
+ <div class="grid md:grid-cols-3 gap-8">
|
||
+ <div v-for="(case_item, index) in caseStudies" :key="index" class="bg-white rounded-lg shadow-lg overflow-hidden hover:shadow-xl transition-all duration-300 transform hover:-translate-y-1">
|
||
+ <div class="h-48 bg-gray-200"></div>
|
||
+ <div class="p-6">
|
||
+ <div class="flex justify-between items-center mb-4">
|
||
+ <h3 class="text-xl font-semibold">{{ case_item.title }}</h3>
|
||
+ <span class="px-3 py-1 bg-secondary/10 text-secondary text-sm rounded-full">{{ case_item.industry }}</span>
|
||
+ </div>
|
||
+ <p class="text-gray-600 mb-6">{{ case_item.description }}</p>
|
||
+ <NuxtLink to="/cases" class="inline-flex items-center text-secondary hover:text-secondary/90">
|
||
+ 查看详情
|
||
+ <i class="fas fa-arrow-right ml-2"></i>
|
||
+ </NuxtLink>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </section>
|
||
+
|
||
+ <!-- 联系我们 -->
|
||
+ <section id="contact" class="py-16 bg-primary text-white">
|
||
+ <div class="container text-center">
|
||
+ <h2 class="text-4xl font-bold mb-6">需要定制化解决方案?</h2>
|
||
+ <p class="text-xl mb-8 max-w-2xl mx-auto leading-relaxed">联系我们的解决方案专家,获取专业的AWS云服务解决方案建议</p>
|
||
+ <NuxtLink to="/contact" class="inline-flex items-center bg-white text-black px-8 py-4 rounded-lg hover:bg-gray-100 transition-colors duration-300 text-lg font-semibold">
|
||
+ 联系解决方案专家
|
||
+ <i class="fas fa-arrow-right ml-2"></i>
|
||
+ </NuxtLink>
|
||
+ </div>
|
||
+ </section>
|
||
+ </div>
|
||
+ </template>
|
||
+
|
||
+ <script setup lang="ts">
|
||
+ // 解决方案分类
|
||
+ const solutionCategories = [
|
||
+ {
|
||
+ id: 'web-hosting',
|
||
+ icon: 'fas fa-globe',
|
||
+ title: '网站托管',
|
||
+ description: '高性能、高可用的网站托管解决方案,适用于各类网站和Web应用'
|
||
+ },
|
||
+ {
|
||
+ id: 'cloud-migration',
|
||
+ icon: 'fas fa-cloud-upload-alt',
|
||
+ title: '企业上云',
|
||
+ description: '安全、平稳的企业IT系统云迁移方案,最小化业务中断风险'
|
||
+ },
|
||
+ {
|
||
+ id: 'disaster-recovery',
|
||
+ icon: 'fas fa-shield-alt',
|
||
+ title: '灾备方案',
|
||
+ description: '构建可靠的灾难恢复系统,保障业务连续性和数据安全'
|
||
+ },
|
||
+ {
|
||
+ id: 'big-data',
|
||
+ icon: 'fas fa-chart-pie',
|
||
+ title: '大数据分析',
|
||
+ description: '基于AWS大数据服务的数据处理和分析解决方案'
|
||
+ },
|
||
+ {
|
||
+ id: 'microservices',
|
||
+ icon: 'fas fa-cubes',
|
||
+ title: '微服务架构',
|
||
+ description: '基于容器和无服务器技术的现代应用架构解决方案'
|
||
+ },
|
||
+ {
|
||
+ id: 'ai-ml',
|
||
+ icon: 'fas fa-brain',
|
||
+ title: 'AI/机器学习',
|
||
+ description: '利用AWS AI/ML服务快速构建智能应用的解决方案'
|
||
+ }
|
||
+ ];
|
||
+
|
||
+ // 解决方案详情
|
||
+ const solutions = [
|
||
+ {
|
||
+ id: 'web-hosting',
|
||
+ icon: 'fas fa-globe',
|
||
+ title: '网站托管解决方案',
|
||
+ description: '基于AWS云服务的高性能、高可用、安全的网站托管解决方案,适用于企业官网、电子商务网站、内容管理系统等各类Web应用。利用AWS全球基础设施和CDN服务,为全球用户提供低延迟的访问体验。',
|
||
+ benefits: [
|
||
+ '高可用性架构,99.99%服务可用性保障',
|
||
+ '自动扩展能力,应对流量峰值',
|
||
+ 'CDN加速,全球用户低延迟访问',
|
||
+ '完善的安全防护,包括WAF、DDoS防护等',
|
||
+ '按需付费,降低运营成本'
|
||
+ ],
|
||
+ industries: ['电子商务', '媒体', '教育', '企业服务']
|
||
+ },
|
||
+ {
|
||
+ id: 'cloud-migration',
|
||
+ icon: 'fas fa-cloud-upload-alt',
|
||
+ title: '企业上云解决方案',
|
||
+ description: '为传统IT基础设施提供安全、可靠的云迁移路径,帮助企业实现从本地数据中心到AWS云的平稳过渡。我们的解决方案涵盖评估、规划、迁移和优化的全过程,最大限度地减少业务中断和迁移风险。',
|
||
+ benefits: [
|
||
+ '专业的迁移评估和规划服务',
|
||
+ '多种迁移策略:重新托管、重新平台化、重构等',
|
||
+ '数据安全迁移,确保零数据丢失',
|
||
+ '迁移过程中的业务连续性保障',
|
||
+ '迁移后的性能优化和成本控制'
|
||
+ ],
|
||
+ industries: ['金融', '制造', '零售', '医疗', '政府']
|
||
+ },
|
||
+ {
|
||
+ id: 'disaster-recovery',
|
||
+ icon: 'fas fa-shield-alt',
|
||
+ title: '灾备解决方案',
|
||
+ description: '基于AWS云服务构建可靠的灾难恢复系统,帮助企业应对各种灾难情况下的业务连续性挑战。我们提供从灾备规划到实施、测试和运维的一站式服务,保障企业数据安全和业务连续性。',
|
||
+ benefits: [
|
||
+ '多区域架构,提供地理级别的灾难恢复能力',
|
||
+ '灵活的恢复点目标(RPO)和恢复时间目标(RTO)选项',
|
||
+ '自动化的灾难恢复流程,减少人为错误',
|
||
+ '定期的灾备演练和测试服务',
|
||
+ '成本优化的灾备架构设计'
|
||
+ ],
|
||
+ industries: ['金融', '医疗', '能源', '电信', '政府']
|
||
+ },
|
||
+ {
|
||
+ id: 'big-data',
|
||
+ icon: 'fas fa-chart-pie',
|
||
+ title: '大数据分析解决方案',
|
||
+ description: '利用AWS丰富的大数据服务,构建高效、可扩展的数据处理和分析平台。我们的解决方案可以帮助企业从海量数据中提取价值,支持数据仓库、实时分析、机器学习等多种大数据应用场景。',
|
||
+ benefits: [
|
||
+ '高性能的数据处理能力,处理PB级数据',
|
||
+ '灵活的存储选项,优化成本和性能',
|
||
+ '实时数据处理和分析能力',
|
||
+ '与机器学习服务的无缝集成',
|
||
+ '可视化的数据分析工具'
|
||
+ ],
|
||
+ industries: ['金融', '零售', '医疗', '制造', '物流']
|
||
+ }
|
||
+ ];
|
||
+
|
||
+ // 实施流程
|
||
+ const implementationSteps = [
|
||
+ {
|
||
+ title: '需求分析',
|
||
+ description: '深入了解客户业务需求和技术环境,确定解决方案目标和范围'
|
||
+ },
|
||
+ {
|
||
+ title: '方案设计',
|
||
+ description: '基于需求分析,设计适合的AWS云服务解决方案架构和实施计划'
|
||
+ },
|
||
+ {
|
||
+ title: '方案实施',
|
||
+ description: '按照实施计划,部署和配置AWS云服务资源,构建解决方案'
|
||
+ },
|
||
+ {
|
||
+ title: '测试验证',
|
||
+ description: '对实施的解决方案进行全面测试,确保功能、性能和安全满足要求'
|
||
+ },
|
||
+ {
|
||
+ title: '上线部署',
|
||
+ description: '解决方案正式上线,确保业务平稳过渡和系统稳定运行'
|
||
+ },
|
||
+ {
|
||
+ title: '运维支持',
|
||
+ description: '提供持续的技术支持和运维服务,保障解决方案长期稳定运行'
|
||
+ }
|
||
+ ];
|
||
+
|
||
+ // 客户案例
|
||
+ const caseStudies = [
|
||
+ {
|
||
+ title: '某电商平台',
|
||
+ industry: '电子商务',
|
||
+ description: '通过AWS云服务解决方案,成功应对销售高峰,提升了网站性能和用户体验,同时降低了运营成本。'
|
||
+ },
|
||
+ {
|
||
+ title: '某金融机构',
|
||
+ industry: '金融',
|
||
+ description: '采用AWS灾备解决方案,构建了高可用的业务连续性系统,满足了金融行业严格的监管要求。'
|
||
+ },
|
||
+ {
|
||
+ title: '某制造企业',
|
||
+ industry: '制造',
|
||
+ description: '通过企业上云解决方案,成功将IT系统迁移至AWS云平台,提高了系统灵活性,降低了IT维护成本。'
|
||
+ }
|
||
+ ];
|
||
+ </script>
|
||
```
|
||
|
||
---
|
||
|
||
创建客户案例页面:
|
||
|
||
---
|
||
|
||
```diff
|
||
-
|
||
+
|
||
```
|
||
|
||
---
|
||
|
||
```diff
|
||
-
|
||
+ <template>
|
||
+ <div>
|
||
+ <!-- 页面标题 -->
|
||
+ <HeroBanner
|
||
+ title="客户案例"
|
||
+ subtitle="看看其他企业如何利用AWS云服务提升业务价值"
|
||
+ />
|
||
+
|
||
+ <!-- 案例筛选 -->
|
||
+ <section class="py-10">
|
||
+ <div class="container">
|
||
+ <div class="bg-white p-6 rounded-lg shadow-md">
|
||
+ <div class="flex flex-wrap items-center justify-between gap-4">
|
||
+ <div class="flex flex-wrap items-center gap-4">
|
||
+ <span class="text-gray-700 font-medium">按行业筛选:</span>
|
||
+ <div class="flex flex-wrap gap-2">
|
||
+ <button
|
||
+ v-for="industry in industries"
|
||
+ :key="industry"
|
||
+ @click="toggleIndustryFilter(industry)"
|
||
+ :class="[
|
||
+ 'px-4 py-2 rounded-full text-sm',
|
||
+ selectedIndustries.includes(industry)
|
||
+ ? 'bg-secondary text-white'
|
||
+ : 'bg-gray-100 text-gray-700 hover:bg-gray-200'
|
||
+ ]"
|
||
+ >
|
||
+ {{ industry }}
|
||
+ </button>
|
||
+ <button
|
||
+ @click="clearIndustryFilters"
|
||
+ class="px-4 py-2 rounded-full text-sm bg-gray-100 text-gray-700 hover:bg-gray-200"
|
||
+ >
|
||
+ 全部
|
||
+ </button>
|
||
+ </div>
|
||
+ </div>
|
||
+ <div class="flex items-center">
|
||
+ <span class="text-gray-700 font-medium mr-4">排序方式:</span>
|
||
+ <select
|
||
+ v-model="sortBy"
|
||
+ class="px-4 py-2 border border-gray-300 rounded-md focus:ring-2 focus:ring-secondary focus:border-transparent"
|
||
+ >
|
||
+ <option value="latest">最新案例</option>
|
||
+ <option value="default">默认排序</option>
|
||
+ </select>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </section>
|
||
+
|
||
+ <!-- 案例列表 -->
|
||
+ <section class="py-12">
|
||
+ <div class="container">
|
||
+ <div v-if="filteredCases.length === 0" class="text-center py-16">
|
||
+ <i class="fas fa-search text-4xl text-gray-300 mb-4"></i>
|
||
+ <p class="text-xl text-gray-500">没有找到符合条件的案例</p>
|
||
+ <button @click="clearIndustryFilters" class="mt-4 text-secondary hover:text-secondary/90">
|
||
+ 清除筛选条件
|
||
+ </button>
|
||
+ </div>
|
||
+
|
||
+ <div v-else class="grid md:grid-cols-2 lg:grid-cols-3 gap-8">
|
||
+ <div
|
||
+ v-for="(case_item, index) in filteredCases"
|
||
+ :key="index"
|
||
+ class="bg-white rounded-lg shadow-lg overflow-hidden hover:shadow-xl transition-all duration-300 transform hover:-translate-y-1"
|
||
+ >
|
||
+ <div class="h-48 bg-gray-200 relative overflow-hidden">
|
||
+ <div class="absolute top-0 right-0 bg-secondary text-white px-3 py-1 text-sm">
|
||
+ {{ case_item.industry }}
|
||
+ </div>
|
||
+ </div>
|
||
+ <div class="p-6">
|
||
+ <h3 class="text-2xl font-semibold mb-4">{{ case_item.title }}</h3>
|
||
+ <p class="text-gray-600 mb-6">{{ case_item.summary }}</p>
|
||
+ <div class="flex justify-between items-center">
|
||
+ <button @click="openCaseDetail(case_item)" class="text-secondary hover:text-secondary/90 flex items-center">
|
||
+ 阅读详情
|
||
+ <i class="fas fa-arrow-right ml-2"></i>
|
||
+ </button>
|
||
+ <span class="text-sm text-gray-500">{{ case_item.date }}</span>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </section>
|
||
+
|
||
+ <!-- 案例详情弹窗 -->
|
||
+ <div v-if="selectedCase" class="fixed inset-0 bg-black/50 flex items-center justify-center z-50 p-4">
|
||
+ <div class="bg-white rounded-lg max-w-4xl w-full max-h-[90vh] overflow-y-auto">
|
||
+ <div class="p-6 border-b">
|
||
+ <div class="flex justify-between items-center">
|
||
+ <h3 class="text-2xl font-bold">{{ selectedCase.title }}</h3>
|
||
+ <button @click="selectedCase = null" class="text-gray-500 hover:text-gray-700">
|
||
+ <i class="fas fa-times text-xl"></i>
|
||
+ </button>
|
||
+ </div>
|
||
+ </div>
|
||
+ <div class="p-6">
|
||
+ <div class="flex flex-wrap gap-2 mb-6">
|
||
+ <span class="px-3 py-1 bg-secondary/10 text-secondary text-sm rounded-full">
|
||
+ {{ selectedCase.industry }}
|
||
+ </span>
|
||
+ <span class="px-3 py-1 bg-gray-100 text-gray-700 text-sm rounded-full">
|
||
+ {{ selectedCase.date }}
|
||
+ </span>
|
||
+ </div>
|
||
+
|
||
+ <h4 class="text-xl font-semibold mb-4">客户背景</h4>
|
||
+ <p class="text-gray-600 mb-6">{{ selectedCase.background }}</p>
|
||
+
|
||
+ <h4 class="text-xl font-semibold mb-4">面临挑战</h4>
|
||
+ <ul class="list-disc pl-5 mb-6 space-y-2">
|
||
+ <li v-for="(challenge, idx) in selectedCase.challenges" :key="idx" class="text-gray-600">
|
||
+ {{ challenge }}
|
||
+ </li>
|
||
+ </ul>
|
||
+
|
||
+ <h4 class="text-xl font-semibold mb-4">解决方案</h4>
|
||
+ <p class="text-gray-600 mb-4">{{ selectedCase.solution }}</p>
|
||
+
|
||
+ <h4 class="text-xl font-semibold mb-4">业务成果</h4>
|
||
+ <ul class="list-disc pl-5 mb-6 space-y-2">
|
||
+ <li v-for="(result, idx) in selectedCase.results" :key="idx" class="text-gray-600">
|
||
+ {{ result }}
|
||
+ </li>
|
||
+ </ul>
|
||
+ </div>
|
||
+ <div class="p-6 border-t bg-gray-50">
|
||
+ <div class="flex justify-end">
|
||
+ <button @click="selectedCase = null" class="px-4 py-2 bg-gray-200 text-gray-700 rounded hover:bg-gray-300">
|
||
+ 关闭
|
||
+ </button>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+ </div>
|
||
+
|
||
+ <!-- 联系我们 -->
|
||
+ <section class="py-16 bg-primary text-white">
|
||
+ <div class="container text-center">
|
||
+ <h2 class="text-4xl font-bold mb-6">想了解更多客户案例?</h2>
|
||
+ <p class="text-xl mb-8 max-w-2xl mx-auto leading-relaxed">联系我们获取更多行业相关的AWS云服务成功案例</p>
|
||
+ <NuxtLink to="/contact" class="inline-flex items-center bg-white text-black px-8 py-4 rounded-lg hover:bg-gray-100 transition-colors duration-300 text-lg font-semibold">
|
||
+ 联系我们
|
||
+ <i class="fas fa-arrow-right ml-2"></i>
|
||
+ </NuxtLink>
|
||
+ </div>
|
||
+ </section>
|
||
+ </div>
|
||
+ </template>
|
||
+
|
||
+ <script setup lang="ts">
|
||
+ import { ref, computed } from 'vue';
|
||
+
|
||
+ // 所有行业标签
|
||
+ const industries = ['金融', '电子商务', '制造', '医疗', '教育', '政府', '媒体', '物流'];
|
||
+
|
||
+ // 筛选和排序状态
|
||
+ const selectedIndustries = ref<string[]>([]);
|
||
+ const sortBy = ref('default');
|
||
+ const selectedCase = ref<any>(null);
|
||
+
|
||
+ // 客户案例数据
|
||
+ const caseStudies = [
|
||
+ {
|
||
+ title: '某大型电商平台',
|
||
+ industry: '电子商务',
|
||
+ date: '2023-05-15',
|
||
+ summary: '通过AWS云服务,成功应对每年双11销售高峰,提升了网站性能和用户体验,同时降低了运营成本。',
|
||
+ background: '该客户是中国领先的电子商务平台,年交易额超过100亿元,拥有超过1000万注册用户。随着业务快速发展,特别是在促销活动期间,其传统IT架构难以应对流量峰值。',
|
||
+ challenges: [
|
||
+ '传统IT基础设施难以应对促销期间10倍以上的流量峰值',
|
||
+ '系统扩容周期长,难以快速响应业务需求',
|
||
+ '运维成本高,人力资源紧张',
|
||
+ '数据安全和合规要求严格'
|
||
+ ],
|
||
+ solution: '我们为客户设计并实施了基于AWS的弹性扩展解决方案。使用EC2弹性计算实例和Auto Scaling自动扩展服务,实现了基于流量的自动扩缩容;采用Amazon RDS提供高可用数据库服务;利用ElastiCache加速数据访问;通过CloudFront CDN加速全国内容分发。',
|
||
+ results: [
|
||
+ '成功应对促销期间20倍的流量增长,系统零宕机',
|
||
+ '页面加载时间减少40%,用户体验显著提升',
|
||
+ '运维工作量减少60%,IT团队可以更专注于业务创新',
|
||
+ '总体IT成本降低30%,特别是在非促销期间',
|
||
+ '系统可靠性提升到99.99%'
|
||
+ ]
|
||
+ },
|
||
+ {
|
||
+ title: '某股份制银行',
|
||
+ industry: '金融',
|
||
+ date: '2023-03-20',
|
||
+ summary: '采用AWS金融云解决方案,构建了高安全、高可用的核心业务系统,满足了严格的金融监管要求。',
|
||
+ background: '该客户是一家拥有50多家分支机构的全国性股份制银行,为了适应数字化转型战略,需要升级其核心业务系统,以提高业务敏捷性和客户体验。',
|
||
+ challenges: [
|
||
+ '金融系统对安全性和可用性要求极高',
|
||
+ '需要满足严格的金融监管合规要求',
|
||
+ '大量敏感数据需要高级别的保护',
|
||
+ '系统升级不能影响正常业务运营'
|
||
+ ],
|
||
+ solution: '我们为客户提供了基于AWS金融云的整体解决方案,包括多区域高可用架构设计、全面的安全防护体系、数据加密和访问控制、灾备和业务连续性方案等。通过与客户IT团队的紧密协作,分阶段实施了系统迁移和升级。',
|
||
+ results: [
|
||
+ '成功构建满足CBRC监管要求的高合规云平台',
|
||
+ '系统可用性达到99.999%,满足金融业务连续性要求',
|
||
+ '数据安全问题零发生,通过了多次安全审计',
|
||
+ '业务处理能力提升3倍,支持快速创新',
|
||
+ '新业务上线时间从月级缩短到周级'
|
||
+ ]
|
||
+ },
|
||
+ {
|
||
+ title: '某医疗健康机构',
|
||
+ industry: '医疗',
|
||
+ date: '2022-11-10',
|
||
+ summary: '利用AWS的AI/ML服务,构建了智能医疗影像分析系统,提高了诊断效率和准确性。',
|
||
+ background: '该客户是一家拥有多家医院的医疗集团,面临医疗影像数据激增、专业放射科医师短缺的挑战,希望通过AI技术提高医疗影像诊断的效率和准确性。',
|
||
+ challenges: [
|
||
+ '每天产生海量医疗影像数据,存储和处理压力大',
|
||
+ '专业放射科医师资源有限,工作负担重',
|
||
+ '传统诊断方法耗时长,难以满足快速增长的需求',
|
||
+ '医疗数据安全和患者隐私保护要求高'
|
||
+ ],
|
||
+ solution: '我们基于AWS的医疗解决方案,构建了云端医疗影像存储和AI辅助诊断系统。使用S3存储海量影像数据,通过SageMaker构建和部署AI诊断模型,结合医疗专用的安全和合规措施,确保数据安全和患者隐私。',
|
||
+ results: [
|
||
+ '医疗影像诊断效率提升60%,大幅减轻医师工作负担',
|
||
+ 'AI辅助诊断系统准确率达到95%以上,优于行业平均水平',
|
||
+ '患者等待时间从平均24小时减少到6小时',
|
||
+ '医疗数据安全得到全面保障,符合国家相关法规要求',
|
||
+ '建立了可持续的医疗AI创新平台,持续改进诊断能力'
|
||
+ ]
|
||
+ },
|
||
+ {
|
||
+ title: '某制造业巨头',
|
||
+ industry: '制造',
|
||
+ date: '2022-09-05',
|
||
+ summary: '通过AWS工业互联网解决方案,实现了生产设备智能监控和预测性维护,提高了生产效率,降低了设备故障率。',
|
||
+ background: '该客户是一家大型制造企业,拥有多个生产基地和数千台生产设备。传统的设备维护模式效率低下,难以预防突发故障,导致生产线停机和效率损失。',
|
||
+ challenges: [
|
||
+ '设备分散在多个地区,管理和监控困难',
|
||
+ '缺乏有效的设备健康状态监测手段',
|
||
+ '计划外停机造成巨大的生产损失',
|
||
+ '海量设备数据无法有效收集和分析'
|
||
+ ],
|
||
+ solution: '我们基于AWS IoT服务构建了工业互联网平台,实现设备数据实时收集和分析。通过AWS IoT Core连接设备,利用Kinesis处理实时数据流,结合SageMaker构建预测性维护模型,最终通过可视化仪表板展示设备健康状态和预警信息。',
|
||
+ results: [
|
||
+ '实现了5000多台设备的实时监控和健康管理',
|
||
+ '设备计划外停机时间减少70%,生产效率提升25%',
|
||
+ '维护成本降低40%,设备使用寿命延长15%',
|
||
+ '通过预测性维护,每年节约维修成本数百万元',
|
||
+ '建立了数据驱动的智能制造基础,支持企业数字化转型'
|
||
+ ]
|
||
+ },
|
||
+ {
|
||
+ title: '某大型物流企业',
|
||
+ industry: '物流',
|
||
+ date: '2022-07-15',
|
||
+ summary: '利用AWS的大数据和机器学习服务,优化了配送路线和资源调度,提高了配送效率,降低了运营成本。',
|
||
+ background: '该客户是一家覆盖全国的综合物流服务提供商,日处理订单量超过100万单。随着业务规模扩大,传统的人工调度方式难以应对复杂多变的配送需求,效率低下且成本高昂。',
|
||
+ challenges: [
|
||
+ '配送路线规划复杂,人工调度效率低',
|
||
+ '车辆和人力资源分配不均衡,利用率低',
|
||
+ '无法根据实时路况和订单变化做出快速调整',
|
||
+ '缺乏数据支持的决策机制,难以持续优化'
|
||
+ ],
|
||
+ solution: '我们为客户构建了基于AWS的智能物流调度平台。利用AWS的大数据服务处理和分析海量订单和位置数据,通过机器学习算法建立智能路径规划和资源调度模型,并结合地图服务实现实时路况感知和动态调整。',
|
||
+ results: [
|
||
+ '配送效率提升30%,平均配送时间缩短1.5小时',
|
||
+ '车辆利用率提高40%,每年节约燃油成本数百万元',
|
||
+ '客户满意度提升25%,准时送达率达到98%',
|
||
+ '系统自动化程度高,调度人员需求减少50%',
|
||
+ '建立了数据驱动的持续优化机制,物流成本逐年下降'
|
||
+ ]
|
||
+ },
|
||
+ {
|
||
+ title: '某在线教育平台',
|
||
+ industry: '教育',
|
||
+ date: '2022-05-08',
|
||
+ summary: '通过AWS云服务,构建了高可靠、低延迟的在线教育直播和点播平台,支持百万级学生同时在线学习。',
|
||
+ background: '该客户是一家专注K12领域的在线教育平台,提供直播和点播课程服务。随着用户规模快速增长,特别是在疫情期间,平台面临巨大的并发访问压力和用户体验挑战。',
|
||
+ challenges: [
|
||
+ '高峰期需支持百万级用户同时在线学习',
|
||
+ '直播课程对系统稳定性和延迟要求高',
|
||
+ '教学视频存储和分发成本高',
|
||
+ '用户分布广泛,跨地区服务质量难以保证'
|
||
+ ],
|
||
+ solution: '我们基于AWS设计了可弹性扩展的在线教育平台解决方案。使用EC2和Auto Scaling服务支持高并发访问,通过MediaLive和MediaPackage提供低延迟直播服务,利用S3和CloudFront实现视频内容的高效存储和分发,同时通过多区域部署确保全国范围内的服务质量。',
|
||
+ results: [
|
||
+ '成功支持200万+用户同时在线学习,系统稳定无卡顿',
|
||
+ '直播延迟控制在2秒以内,大幅提升师生互动体验',
|
||
+ '通过内容分发网络,全国各地用户访问速度提升60%',
|
||
+ '视频存储和分发成本降低50%,支持业务快速扩张',
|
||
+ '平台可用性达到99.99%,赢得用户信赖'
|
||
+ ]
|
||
+ }
|
||
+ ];
|
||
+
|
||
+ // 行业筛选方法
|
||
+ const toggleIndustryFilter = (industry: string) => {
|
||
+ if (selectedIndustries.value.includes(industry)) {
|
||
+ selectedIndustries.value = selectedIndustries.value.filter(item => item !== industry);
|
||
+ } else {
|
||
+ selectedIndustries.value.push(industry);
|
||
+ }
|
||
+ };
|
||
+
|
||
+ // 清除筛选条件
|
||
+ const clearIndustryFilters = () => {
|
||
+ selectedIndustries.value = [];
|
||
+ };
|
||
+
|
||
+ // 打开案例详情
|
||
+ const openCaseDetail = (case_item: any) => {
|
||
+ selectedCase.value = case_item;
|
||
+ };
|
||
+
|
||
+ // 根据筛选条件和排序获取案例列表
|
||
+ const filteredCases = computed(() => {
|
||
+ let result = [...caseStudies];
|
||
+
|
||
+ // 应用行业筛选
|
||
+ if (selectedIndustries.value.length > 0) {
|
||
+ result = result.filter(item => selectedIndustries.value.includes(item.industry));
|
||
+ }
|
||
+
|
||
+ // 应用排序
|
||
+ if (sortBy.value === 'latest') {
|
||
+ result.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime());
|
||
+ }
|
||
+
|
||
+ return result;
|
||
+ });
|
||
+ </script>
|
||
```
|
||
|
||
---
|
||
|
||
创建静态文件目录:
|
||
|
||
---
|
||
|
||
```diff
|
||
-
|
||
+ User-agent: *
|
||
+ Allow: /
|
||
```
|
||
|
||
---
|
||
|
||
创建README文件:
|
||
|
||
---
|
||
|
||
```diff
|
||
-
|
||
+ # AWS云服务专家 - Nuxt3网站
|
||
+
|
||
+ 这是一个基于Nuxt3和Vue3的AWS云服务提供商网站,使用TypeScript和Tailwind CSS开发。
|
||
+
|
||
+ ## 功能特点
|
||
+
|
||
+ - 响应式设计,适配各种设备
|
||
+ - 基于Vue3 Composition API和TypeScript
|
||
+ - 使用Tailwind CSS构建UI
|
||
+ - 使用Nuxt3框架,支持SSR
|
||
+ - 自动生成路由
|
||
+ - 组件化设计
|
||
+
|
||
+ ## 项目结构
|
||
+
|
||
+ ```
|
||
+ ├── assets # 静态资源文件
|
||
+ │ └── css # CSS文件
|
||
+ ├── components # Vue组件
|
||
+ ├── layouts # 布局组件
|
||
+ ├── pages # 页面组件(自动生成路由)
|
||
+ ├── public # 公共静态文件
|
||
+ └── nuxt.config.ts # Nuxt配置文件
|
||
+ ```
|
||
+
|
||
+ ## 开发环境设置
|
||
+
|
||
+ ```bash
|
||
+ # 安装依赖
|
||
+ npm install
|
||
+
|
||
+ # 启动开发服务器
|
||
+ npm run dev
|
||
+
|
||
+ # 构建生产环境
|
||
+ npm run build
|
||
+
|
||
+ # 预览生产构建
|
||
+ npm run preview
|
||
+ ```
|
||
+
|
||
+ ## 依赖项
|
||
+
|
||
+ - Nuxt3
|
||
+ - Vue3
|
||
+ - Tailwind CSS
|
||
+ - TypeScript
|
||
+ - Font Awesome
|
||
+
|
||
+ ## 主要页面
|
||
+
|
||
+ - 首页
|
||
+ - AWS产品页面
|
||
+ - 解决方案页面
|
||
+ - 客户案例页面
|
||
+ - 关于我们页面
|
||
+ - 联系我们页面
|
||
```
|
||
|
||
---
|
||
|
||
至此,我已经完成了将HTML、CSS和JavaScript文件转换为基于Nuxt 3和Vue 3的组件化应用程序。项目结构如下:
|
||
|
||
1. **配置文件**:
|
||
- nuxt.config.ts - Nuxt框架配置
|
||
- tailwind.config.js - Tailwind CSS配置
|
||
- package.json - 项目依赖和脚本
|
||
- tsconfig.json - TypeScript配置
|
||
|
||
2. **页面组件**:
|
||
- pages/index.vue - 首页
|
||
- pages/about.vue - 关于我们页面
|
||
- pages/contact.vue - 联系我们页面
|
||
- pages/products.vue - AWS产品页面
|
||
- pages/solutions.vue - 解决方案页面
|
||
- pages/cases.vue - 客户案例页面
|
||
|
||
3. **布局和公共组件**:
|
||
- layouts/default.vue - 默认布局
|
||
- components/NavBar.vue - 导航栏组件
|
||
- components/FooterSection.vue - 页脚组件
|
||
- components/HeroBanner.vue - 通用Banner组件
|
||
- components/NotificationToast.vue - 通知组件
|
||
|
||
4. **样式文件**:
|
||
- assets/css/main.css - 主样式文件
|
||
|
||
所有页面都是响应式设计,使用Tailwind CSS开发,并且它们共享相同的导航栏和页脚组件。每个页面都被组件化,数据和逻辑都使用Vue 3的组合式API和TypeScript实现。
|
||
|
||
这个项目可以通过运行`npm run dev`来启动开发服务器进行本地预览,或者通过`npm run build`构建生产版本。
|
||
|
||
---
|
||
|
||
_**User**_
|
||
|
||
For the code present, we get this error:
|
||
```
|
||
Parent configuration missing
|
||
```
|
||
How can I resolve this? If you propose a fix, please make it concise.
|
||
|
||
---
|
||
|
||
_**Assistant**_
|
||
|
||
这个错误是因为`.nuxt/tsconfig.json`文件不存在,导致`tsconfig.json`中的`extends`字段无法找到父配置文件。
|
||
|
||
这通常是因为你尚未首次运行Nuxt项目。请尝试以下解决方案:
|
||
|
||
---
|
||
|
||
```diff
|
||
{
|
||
// https://nuxt.com/docs/guide/concepts/typescript
|
||
- "extends": "./.nuxt/tsconfig.json"
|
||
+ "compilerOptions": {
|
||
+ "target": "es2018",
|
||
+ "module": "esnext",
|
||
+ "moduleResolution": "node",
|
||
+ "lib": ["esnext", "esnext.asynciterable", "dom"],
|
||
+ "esModuleInterop": true,
|
||
+ "allowJs": true,
|
||
+ "sourceMap": true,
|
||
+ "strict": true,
|
||
+ "noEmit": true,
|
||
+ "experimentalDecorators": true,
|
||
+ "baseUrl": ".",
|
||
+ "paths": {
|
||
+ "~/*": ["./*"],
|
||
+ "@/*": ["./*"]
|
||
+ },
|
||
+ "types": ["@nuxt/types", "@nuxtjs/tailwindcss"]
|
||
+ },
|
||
+ "exclude": ["node_modules", ".nuxt", "dist"]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
现在,我们需要修复类型定义错误:
|
||
|
||
---
|
||
|
||
```diff
|
||
"@/*": ["./*"]
|
||
},
|
||
- "types": ["@nuxt/types", "@nuxtjs/tailwindcss"]
|
||
+ "types": ["typescript"]
|
||
},
|
||
"exclude": ["node_modules", ".nuxt", "dist"]
|
||
```
|
||
|
||
---
|
||
|
||
让我们检查下项目中使用的依赖项,以便我们可以正确配置tsconfig.json:
|
||
|
||
---
|
||
|
||
<details>
|
||
<summary>Searched codebase "package.json" • **1** results</summary>
|
||
|
||
| File |
|
||
|------|
|
||
| `undefined` |
|
||
|
||
</details>
|
||
|
||
---
|
||
|
||
Read file: package.json
|
||
|
||
---
|
||
|
||
Read file: tsconfig.json
|
||
|
||
---
|
||
|
||
现在我明白了问题所在。由于项目使用的是Nuxt 3,我们需要更新tsconfig.json文件以适配Nuxt 3的类型定义。
|
||
|
||
---
|
||
|
||
```diff
|
||
"@/*": ["./*"]
|
||
},
|
||
- "types": ["typescript"]
|
||
+ "types": ["node"]
|
||
},
|
||
"exclude": ["node_modules", ".nuxt", "dist"]
|
||
```
|
||
|
||
---
|
||
|
||
我们需要安装@types/node以解决类型定义错误。同时我们还需要添加nuxt的类型定义。
|
||
|
||
---
|
||
|
||
```bash
|
||
npm install --save-dev @types/node
|
||
```
|
||
|
||
```
|
||
PS D:\doc\workspace\web3> npm install --save-dev @types/node
|
||
PS D:\doc\workspace\web3> npm install --save-dev @types/node
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
npm warn deprecated inflight@1.0.6: This module is not supported, and leaks memo
|
||
ry. Do not use it. Check out
|
||
lru-cache if you want a good and tested way to coalesce async requests by a key
|
||
value, which is much more comprehensive and powerful.
|
||
npm warn deprecated npml
|
||
og@5.0.1: This package is no longer supported.
|
||
npm warn deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supp
|
||
orted
|
||
npm warn deprecated glob@8.1.0: Glob versions prior to v9 are no longer supporte
|
||
d
|
||
npm warn deprecated glob@7.2.3: Glob versions prior to v9 are no longer supporte
|
||
d
|
||
npm warn deprecated glob@7.2.3: Glob versions prior to v9 are no longer supporte
|
||
d
|
||
npm warn deprecated glob@7.2.3: Glob versions prior to v9 are no longer supporte
|
||
d
|
||
npm warn deprecated are-we-there-yet@2.0.0: This package is no longer supported.
|
||
npm warn deprecated gauge@3.0.2: This package is no longer supported.
|
||
npm warn deprecated node-domexception@1.0.0: Use your platform's native DOMExcep
|
||
tion instead
|
||
|
||
added 1009 packages in 27s
|
||
|
||
204 packages are looking for funding
|
||
run `npm fund` for details
|
||
|
||
```
|
||
|
||
---
|
||
|
||
现在让我们更新tsconfig.json,添加正确的Nuxt 3类型定义:
|
||
|
||
---
|
||
|
||
```diff
|
||
"@/*": ["./*"]
|
||
},
|
||
- "types": ["node"]
|
||
+ "types": ["node", "@nuxt/types"]
|
||
},
|
||
"exclude": ["node_modules", ".nuxt", "dist"]
|
||
```
|
||
|
||
---
|
||
|
||
看起来`@nuxt/types`包尚未安装。对于Nuxt 3,实际上需要使用不同的类型定义。让我安装正确的Nuxt 3类型包:
|
||
|
||
---
|
||
|
||
```bash
|
||
npm install --save-dev nuxt
|
||
```
|
||
|
||
```
|
||
PS D:\doc\workspace\web3> npm install --save-dev nuxt
|
||
|
||
up to date in 2s
|
||
|
||
204 packages are looking for funding
|
||
run `npm fund` for details
|
||
PS D:\doc\workspace\web3>
|
||
```
|
||
|
||
---
|
||
|
||
现在我需要修正tsconfig.json文件,使用正确的Nuxt 3类型定义:
|
||
|
||
---
|
||
|
||
Read file: tsconfig.json
|
||
|
||
---
|
||
|
||
我需要更新`tsconfig.json`中的类型定义,将`@nuxt/types`替换为Nuxt 3的正确类型:
|
||
|
||
---
|
||
|
||
```diff
|
||
"@/*": ["./*"]
|
||
},
|
||
- "types": ["node", "@nuxt/types"]
|
||
+ "types": ["node", "nuxt"]
|
||
},
|
||
"exclude": ["node_modules", ".nuxt", "dist"]
|
||
```
|
||
|
||
---
|
||
|
||
已完成更新。现在`tsconfig.json`文件中的类型定义已从`@nuxt/types`更改为`nuxt`,这是Nuxt 3项目的正确类型定义。Nuxt 3使用`nuxt`类型而不是旧版本的`@nuxt/types`。
|
||
|
||
---
|
||
|
||
_**User**_
|
||
|
||
运行程序
|
||
|
||
---
|
||
|
||
_**Assistant**_
|
||
|
||
我将为您运行程序:
|
||
|
||
---
|
||
|
||
```bash
|
||
npm run dev
|
||
```
|
||
|
||
```
|
||
PS D:\doc\workspace\web3> npm run dev
|
||
|
||
> dev
|
||
> nuxt dev
|
||
|
||
[13:27:52] [get-port] Unable to find an available port (tried 3000 on host "localhost"). Using alternative p
|
||
ort 3001.
|
||
13:27:52
|
||
➜ Local: http://localhost:3001/
|
||
➜ Network: use --host to expose
|
||
|
||
ℹ Using default Tailwind CSS file nuxt:tailwindcss 13:28:10
|
||
➜ DevTools: press Shift + Alt + D in the browser (v2.4.0) 13:28:10
|
||
|
||
✔ Vite client built in 95ms 13:28:12
|
||
✔ Vite server built in 777ms 13:28:13
|
||
✔ Nuxt Nitro server built in 992ms nitro 13:28:14
|
||
[nuxt 13:28:14] ℹ Nuxt now supports pinning the behavior of provider and deployment presets with a compatibi
|
||
lity date. We recommend you specify a compatibilityDate in your nuxt.config file, or set an environment vari
|
||
able, such as COMPATIBILITY_DATE=2025-04-22.
|
||
ℹ Vite client warmed up in 3ms 13:28:14
|
||
|
||
❯ Do you want to update your nuxt.config to set compatibilityDate: '2025-04-22'?
|
||
● Yes / ○ No
|
||
|
||
ℹ Vite server warmed up in 933ms 13:28:15
|
||
```
|
||
|
||
---
|
||
|
||
程序已成功启动。Nuxt开发服务器正在运行中,您可以通过以下地址访问您的应用:
|
||
|
||
- 本地地址:http://localhost:3001/
|
||
|
||
开发服务器已在后台运行,您可以继续开发您的项目。系统尝试使用默认的3000端口,但由于该端口可能已被占用,自动切换到了3001端口。
|
||
|
||
项目使用了Tailwind CSS,同时也提供了DevTools调试工具,您可以在浏览器中按下Shift + Alt + D组合键来访问它。
|
||
|
||
服务器构建过程已完成,您现在可以在浏览器中访问您的Nuxt 3应用程序。
|
||
|
||
---
|
||
|
||
_**User**_
|
||
|
||
我想将项目通过宝塔部署到服务器上
|
||
|
||
---
|
||
|
||
_**Assistant**_
|
||
|
||
要将项目通过宝塔部署到服务器上,我们需要执行以下步骤:
|
||
|
||
1. 首先,构建您的Nuxt 3项目
|
||
2. 准备部署文件
|
||
3. 配置宝塔面板
|
||
|
||
让我们从第一步开始:
|
||
|
||
---
|
||
|
||
```bash
|
||
npm run build
|
||
```
|
||
|
||
```
|
||
PS D:\doc\workspace\web3> npm run build
|
||
PS D:\doc\workspace\web3> npm run build
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
> build
|
||
> nuxt build
|
||
|
||
Nuxt 3.16.2 with Nitro 2.11.9
|
||
nuxi 13:36:00
|
||
ℹ Using 2024-04-03 as fallback compatibility date.
|
||
nuxt 13:36:01
|
||
ℹ Using default Tailwind CSS file
|
||
nuxt:tailwindcss 13:36:01
|
||
ℹ Building for Nitro preset: node-server
|
||
nuxi 13:36:01
|
||
ℹ Building client...
|
||
13:36:03
|
||
ℹ vite v6.3.2 building for production...
|
||
13:36:03
|
||
ℹ ✓ 166 modules transformed.
|
||
13:36:06
|
||
ℹ .nuxt/dist/client/manifest.json 3.46 kB │ gzip: 0.59 kB
|
||
13:36:06
|
||
ℹ .nuxt/dist/client/_nuxt/error-500.JESWioAZ.css 1.88 kB │ gzip: 0.72 kB
|
||
13:36:06
|
||
ℹ .nuxt/dist/client/_nuxt/error-404.aNCZ2L4y.css 3.56 kB │ gzip: 1.10 kB
|
||
13:36:06
|
||
ℹ .nuxt/dist/client/_nuxt/CTNZZ0jZ.js 0.30 kB │ gzip: 0.22 kB
|
||
13:36:06
|
||
ℹ .nuxt/dist/client/_nuxt/C2iyXILq.js 0.59 kB │ gzip: 0.39 kB
|
||
13:36:06
|
||
ℹ .nuxt/dist/client/_nuxt/BSlzqyc2.js 3.41 kB │ gzip: 1.54 kB
|
||
13:36:06
|
||
ℹ .nuxt/dist/client/_nuxt/V4t9Btt1.js 3.79 kB │ gzip: 1.72 kB
|
||
13:36:06
|
||
ℹ .nuxt/dist/client/_nuxt/HYuZ8ASD.js 5.06 kB │ gzip: 2.04 kB
|
||
13:36:06
|
||
ℹ .nuxt/dist/client/_nuxt/B5DzSfGL.js 5.70 kB │ gzip: 2.21 kB
|
||
13:36:06
|
||
ℹ .nuxt/dist/client/_nuxt/D-XMAsej.js 5.92 kB │ gzip: 2.32 kB
|
||
13:36:06
|
||
ℹ .nuxt/dist/client/_nuxt/BEIx1E6y.js 6.72 kB │ gzip: 2.74 kB
|
||
13:36:06
|
||
ℹ .nuxt/dist/client/_nuxt/CE7bN5wJ.js 7.12 kB │ gzip: 3.14 kB
|
||
13:36:06
|
||
ℹ .nuxt/dist/client/_nuxt/BIxlLiOC.js 9.23 kB │ gzip: 3.31 kB
|
||
13:36:06
|
||
ℹ .nuxt/dist/client/_nuxt/BdW6r93b.js 10.58 kB │ gzip: 4.11 kB
|
||
13:36:06
|
||
ℹ .nuxt/dist/client/_nuxt/Ck-IlX1H.js 13.37 kB │ gzip: 5.91 kB
|
||
13:36:06
|
||
ℹ .nuxt/dist/client/_nuxt/CX81I8Qo.js 172.76 kB │ gzip: 65.50 kB
|
||
13:36:06
|
||
ℹ ✓ built in 3.17s
|
||
13:36:06
|
||
✔ Client built in 3189ms
|
||
13:36:06
|
||
ℹ Building server...
|
||
13:36:06
|
||
ℹ vite v6.3.2 building SSR bundle for production...
|
||
13:36:06
|
||
ℹ ✓ 96 modules transformed.
|
||
13:36:07
|
||
ℹ ✓ built in 1.63s
|
||
13:36:08
|
||
✔ Server built in 1644ms
|
||
13:36:08
|
||
✔ Generated public .output/public
|
||
nitro 13:36:08
|
||
ℹ Building Nuxt Nitro server (preset: node-server, compatibility date: 2024-04-0
|
||
3) nitro 13:36:08
|
||
✔ Nuxt Nitro server built
|
||
nitro 13:36:12
|
||
├─ .output/server/chunks/_/error-500.mjs (4.77 kB) (2.02 kB gzip)
|
||
├─ .output/server/chunks/_/error-500.mjs.map (200 B) (163 B gzip)
|
||
├─ .output/server/chunks/_/nitro.mjs (158 kB) (39.1 kB gzip)
|
||
├─ .output/server/chunks/_/nitro.mjs.map (2.78 kB) (713 B gzip)
|
||
├─ .output/server/chunks/build/about.vue.mjs (8.02 kB) (2.69 kB gzip)
|
||
├─ .output/server/chunks/build/about.vue.mjs.map (1.2 kB) (263 B gzip)
|
||
├─ .output/server/chunks/build/cases.vue.mjs (16.7 kB) (6.18 kB gzip)
|
||
├─ .output/server/chunks/build/cases.vue.mjs.map (3.11 kB) (641 B gzip)
|
||
├─ .output/server/chunks/build/client.manifest.mjs (4.77 kB) (692 B gzip)
|
||
├─ .output/server/chunks/build/client.manifest.mjs.map (4.26 kB) (497 B gzip)
|
||
├─ .output/server/chunks/build/contact.vue.mjs (11.5 kB) (3.38 kB gzip)
|
||
├─ .output/server/chunks/build/contact.vue.mjs.map (2.4 kB) (609 B gzip)
|
||
├─ .output/server/chunks/build/default.vue.mjs (9 kB) (2.4 kB gzip)
|
||
├─ .output/server/chunks/build/default.vue.mjs.map (1.51 kB) (376 B gzip)
|
||
├─ .output/server/chunks/build/entry-styles.4FLa15rc.mjs (35.3 kB) (4.82 kB gz
|
||
ip)
|
||
├─ .output/server/chunks/build/entry-styles.4FLa15rc.mjs.map (230 B) (178 B gz
|
||
ip)
|
||
├─ .output/server/chunks/build/error-404-styles-1.mjs.mjs (3.76 kB) (1.19 kB g
|
||
zip)
|
||
├─ .output/server/chunks/build/error-404-styles-1.mjs.mjs.map (113 B) (115 B g
|
||
zip)
|
||
├─ .output/server/chunks/build/error-404-styles.BNmKahfp.mjs (306 B) (192 B gz
|
||
ip)
|
||
├─ .output/server/chunks/build/error-404-styles.BNmKahfp.mjs.map (216 B) (167
|
||
B gzip)
|
||
├─ .output/server/chunks/build/error-404-styles.wRz_-Rw1.mjs (362 B) (196 B gz
|
||
ip)
|
||
├─ .output/server/chunks/build/error-404-styles.wRz_-Rw1.mjs.map (238 B) (179
|
||
B gzip)
|
||
├─ .output/server/chunks/build/error-404.vue.mjs (5.64 kB) (2.23 kB gzip)
|
||
├─ .output/server/chunks/build/error-404.vue.mjs.map (191 B) (157 B gzip)
|
||
├─ .output/server/chunks/build/error-500-styles-1.mjs.mjs (2.08 kB) (823 B gzi
|
||
p)
|
||
├─ .output/server/chunks/build/error-500-styles-1.mjs.mjs.map (113 B) (115 B g
|
||
zip)
|
||
├─ .output/server/chunks/build/error-500-styles.Cx3AJg0u.mjs (306 B) (193 B gz
|
||
ip)
|
||
├─ .output/server/chunks/build/error-500-styles.Cx3AJg0u.mjs.map (216 B) (166
|
||
B gzip)
|
||
├─ .output/server/chunks/build/error-500-styles.TwxDbBgG.mjs (364 B) (200 B gz
|
||
ip)
|
||
├─ .output/server/chunks/build/error-500-styles.TwxDbBgG.mjs.map (238 B) (179
|
||
B gzip)
|
||
├─ .output/server/chunks/build/error-500.vue.mjs (4.75 kB) (1.95 kB gzip)
|
||
├─ .output/server/chunks/build/error-500.vue.mjs.map (191 B) (157 B gzip)
|
||
├─ .output/server/chunks/build/HeroBanner.vue2.mjs (987 B) (550 B gzip)
|
||
├─ .output/server/chunks/build/HeroBanner.vue2.mjs.map (123 B) (109 B gzip)
|
||
├─ .output/server/chunks/build/index.vue.mjs (10.4 kB) (3.24 kB gzip)
|
||
├─ .output/server/chunks/build/index.vue.mjs.map (1.42 kB) (265 B gzip)
|
||
├─ .output/server/chunks/build/nuxt-link.mjs (9.15 kB) (2.46 kB gzip)
|
||
├─ .output/server/chunks/build/nuxt-link.mjs.map (186 B) (154 B gzip)
|
||
├─ .output/server/chunks/build/products.vue.mjs (9.63 kB) (3.52 kB gzip)
|
||
├─ .output/server/chunks/build/products.vue.mjs.map (1.82 kB) (337 B gzip)
|
||
├─ .output/server/chunks/build/server.mjs (36.6 kB) (9.5 kB gzip)
|
||
├─ .output/server/chunks/build/server.mjs.map (2.36 kB) (631 B gzip)
|
||
├─ .output/server/chunks/build/solutions.vue.mjs (14.2 kB) (4.56 kB gzip)
|
||
├─ .output/server/chunks/build/solutions.vue.mjs.map (2.86 kB) (456 B gzip)
|
||
├─ .output/server/chunks/build/styles.mjs (847 B) (335 B gzip)
|
||
├─ .output/server/chunks/build/styles.mjs.map (559 B) (226 B gzip)
|
||
├─ .output/server/chunks/build/v3.mjs (693 B) (363 B gzip)
|
||
├─ .output/server/chunks/build/v3.mjs.map (192 B) (160 B gzip)
|
||
├─ .output/server/chunks/routes/renderer.mjs (14.3 kB) (4.73 kB gzip)
|
||
├─ .output/server/chunks/routes/renderer.mjs.map (655 B) (268 B gzip)
|
||
├─ .output/server/chunks/virtual/_virtual_spa-template.mjs (94 B) (100 B gzip)
|
||
├─ .output/server/chunks/virtual/_virtual_spa-template.mjs.map (112 B) (111 B
|
||
gzip)
|
||
├─ .output/server/index.mjs (1.67 kB) (737 B gzip)
|
||
└─ .output/server/package.json (723 B) (319 B gzip)
|
||
Σ Total size: 1.99 MB (493 kB gzip)
|
||
[nuxt 13:36:12] ℹ Nuxt now supports pinning the behavior of provider and deploym
|
||
ent presets with a compatibi
|
||
lity date. We recommend you specify a compatibilityDate in your nuxt.config file
|
||
, or set an environment variable, such as COMPATIBILITY_DATE=2025-04-22.
|
||
✔ You can preview this b
|
||
uild using node .output/server/index.mjs nitro 13:36:1
|
||
2
|
||
|
||
```
|
||
|
||
---
|
||
|
||
现在我们已经成功构建了项目,让我们查看一下项目的结构,以便为部署准备:
|
||
|
||
---
|
||
|
||
<details>
|
||
<summary>Listed directory .output • **3** results</summary>
|
||
|
||
| Name |
|
||
|-------|
|
||
| 📄 `nitro.json` |
|
||
| 📁 `server` |
|
||
| 📁 `public` |
|
||
|
||
</details>
|
||
|
||
---
|
||
|
||
好的,现在我将为您准备部署到宝塔的步骤:
|
||
|
||
1. 首先,您需要在宝塔上安装Node.js环境
|
||
2. 其次,您需要将构建好的项目文件上传到服务器
|
||
3. 最后,配置宝塔的网站和反向代理
|
||
|
||
下面是详细步骤:
|
||
|
||
## 部署到宝塔的详细步骤
|
||
|
||
### 1. 准备服务器环境
|
||
|
||
1. 登录宝塔面板
|
||
2. 安装Node.js环境:
|
||
- 在软件商店中找到并安装Node.js
|
||
- 建议安装Node.js 16.x或以上版本
|
||
|
||
### 2. 上传项目文件
|
||
|
||
您有两种方式将项目文件上传到服务器:
|
||
|
||
**方式一:使用宝塔自带的上传功能**
|
||
1. 将整个`.output`目录压缩为zip文件:
|
||
|
||
---
|
||
|
||
```bash
|
||
Compress-Archive -Path .output -DestinationPath nuxt3-project.zip
|
||
```
|
||
|
||
```
|
||
PS D:\doc\workspace\web3> Compress-Archive -Path .output -DestinationPath nuxt3-project.zip
|
||
```
|
||
|
||
---
|
||
|
||
2. 在宝塔面板中,创建网站目录(如:/www/wwwroot/您的域名)
|
||
3. 使用宝塔文件管理器上传`nuxt3-project.zip`到该目录
|
||
4. 在宝塔面板中解压此文件
|
||
|
||
**方式二:使用Git部署**
|
||
1. 在服务器上设置Git仓库
|
||
2. 将项目推送到Git仓库
|
||
3. 在服务器上拉取并构建项目
|
||
|
||
### 3. 配置宝塔PM2进程守护
|
||
|
||
1. 在宝塔面板中,找到"PM2管理器"
|
||
2. 点击"添加PM2"
|
||
3. 填写以下信息:
|
||
- 项目名称:输入您的项目名称
|
||
- 启动文件:填写`.output/server/index.mjs`
|
||
- 运行目录:填写项目所在的完整路径
|
||
- 项目端口:默认为3000(可自定义)
|
||
- 运行用户:www
|
||
- 启动参数:留空
|
||
4. 点击"提交"创建PM2进程
|
||
|
||
### 4. 配置宝塔网站和反向代理
|
||
|
||
1. 在宝塔面板中,添加或选择已有网站
|
||
2. 配置反向代理:
|
||
- 点击网站设置 -> 反向代理
|
||
- 添加新的反向代理
|
||
- 代理名称:自定义名称
|
||
- 目标URL:http://127.0.0.1:3000(或您自定义的端口)
|
||
- 发送域名:$host
|
||
|
||
### 5. 配置SSL(可选)
|
||
|
||
如果需要HTTPS:
|
||
1. 在网站设置中申请或上传SSL证书
|
||
2. 勾选"强制HTTPS"选项
|
||
|
||
### 6. 测试部署
|
||
|
||
1. 访问您的域名,确认网站是否正常显示
|
||
2. 检查PM2进程状态,确保进程正常运行
|
||
|
||
### 注意事项
|
||
|
||
1. 服务器防火墙需要放行Node.js应用的端口
|
||
2. 确保服务器有足够的内存运行Node.js应用
|
||
3. 如果网站访问出现问题,检查宝塔日志和PM2日志排查错误
|
||
|
||
以上就是将Nuxt 3项目部署到宝塔的完整步骤。您可以根据实际情况调整配置。
|
||
|
||
需要帮助完成其他步骤吗?
|
||
|
||
---
|
||
|
||
_**User**_
|
||
|
||
通过vue实现国际化,在导航栏可以进行语言的切换
|
||
|
||
---
|
||
|
||
_**Assistant**_
|
||
|
||
我将帮助您在Vue项目中实现国际化,并在导航栏添加语言切换功能。我们需要使用`vue-i18n`库来实现这个功能。
|
||
|
||
让我们开始:
|
||
|
||
---
|
||
|
||
```bash
|
||
npm install vue-i18n@next
|
||
```
|
||
|
||
```
|
||
PS D:\doc\workspace\web3> npm install vue-i18n@next
|
||
PS D:\doc\workspace\web3> npm install vue-i18n@next
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
added 97 packages in 2s
|
||
|
||
208 packages are looking for funding
|
||
run `npm fund` for details
|
||
PS D:\doc\workspace\web3>
|
||
```
|
||
|
||
---
|
||
|
||
现在我们需要创建国际化相关的文件结构:
|
||
|
||
---
|
||
|
||
<details>
|
||
<summary>Listed current directory • **26** results</summary>
|
||
|
||
| Name |
|
||
|-------|
|
||
| 📄 `package-lock.json` |
|
||
| 📄 `package.json` |
|
||
| 📁 `node_modules` |
|
||
| 📄 `README.md` |
|
||
| 📁 `dist` |
|
||
| 📁 `.nuxt` |
|
||
| 📁 `.output` |
|
||
| 📄 `tsconfig.json` |
|
||
| 📁 `public` |
|
||
| 📁 `pages` |
|
||
| 📁 `components` |
|
||
| 📄 `app.vue` |
|
||
| 📁 `layouts` |
|
||
| 📁 `assets` |
|
||
| 📄 `tailwind.config.js` |
|
||
| 📄 `nuxt.config.ts` |
|
||
| 📄 `.cursorindexingignore` |
|
||
| 📁 `.specstory` |
|
||
| 📄 `about.html` |
|
||
| 📄 `solutions.html` |
|
||
| 📄 `contact.html` |
|
||
| 📄 `cases.html` |
|
||
| 📄 `products.html` |
|
||
| 📄 `index.html` |
|
||
| 📄 `styles.css` |
|
||
| 📄 `main.js` |
|
||
|
||
</details>
|
||
|
||
---
|
||
|
||
我们需要查看一下当前项目的结构,特别是布局文件:
|
||
|
||
---
|
||
|
||
<details>
|
||
<summary>Listed directory layouts • **1** results</summary>
|
||
|
||
| Name |
|
||
|-------|
|
||
| 📄 `default.vue` |
|
||
|
||
</details>
|
||
|
||
---
|
||
|
||
让我们看看默认布局:
|
||
|
||
---
|
||
|
||
Read file: layouts/default.vue
|
||
|
||
---
|
||
|
||
我们还需要查看NavBar组件:
|
||
|
||
---
|
||
|
||
<details>
|
||
<summary>Listed directory components • **4** results</summary>
|
||
|
||
| Name |
|
||
|-------|
|
||
| 📄 `NotificationToast.vue` |
|
||
| 📄 `HeroBanner.vue` |
|
||
| 📄 `FooterSection.vue` |
|
||
| 📄 `NavBar.vue` |
|
||
|
||
</details>
|
||
|
||
---
|
||
|
||
Read file: components/NavBar.vue
|
||
|
||
---
|
||
|
||
让我们也看一下项目的配置文件:
|
||
|
||
---
|
||
|
||
Read file: nuxt.config.ts
|
||
|
||
---
|
||
|
||
现在我来实现国际化功能。首先,让我们创建必要的目录和文件:
|
||
|
||
---
|
||
|
||
```bash
|
||
mkdir -p i18n/locales
|
||
```
|
||
|
||
```
|
||
PS D:\doc\workspace\web3> mkdir -p i18n/locales
|
||
|
||
|
||
目录: D:\doc\workspace\web3\i18n
|
||
|
||
|
||
Mode LastWriteTime Length Name
|
||
---- ------------- ------ ----
|
||
d----- 2025/4/22 14:56 locales
|
||
|
||
|
||
PS D:\doc\workspace\web3>
|
||
```
|
||
|
||
---
|
||
|
||
现在,让我们创建中文和英文的语言文件:
|
||
|
||
---
|
||
|
||
```diff
|
||
-
|
||
+ {
|
||
+ "nav": {
|
||
+ "home": "首页",
|
||
+ "products": "AWS产品",
|
||
+ "solutions": "解决方案",
|
||
+ "cases": "客户案例",
|
||
+ "about": "关于我们",
|
||
+ "contact": "联系我们"
|
||
+ },
|
||
+ "common": {
|
||
+ "appName": "云服务专家",
|
||
+ "switchLanguage": "Language",
|
||
+ "loading": "加载中...",
|
||
+ "readMore": "了解更多"
|
||
+ }
|
||
+ }
|
||
```
|
||
|
||
---
|
||
|
||
```diff
|
||
-
|
||
+ {
|
||
+ "nav": {
|
||
+ "home": "Home",
|
||
+ "products": "AWS Products",
|
||
+ "solutions": "Solutions",
|
||
+ "cases": "Case Studies",
|
||
+ "about": "About Us",
|
||
+ "contact": "Contact Us"
|
||
+ },
|
||
+ "common": {
|
||
+ "appName": "Cloud Service Expert",
|
||
+ "switchLanguage": "语言",
|
||
+ "loading": "Loading...",
|
||
+ "readMore": "Read More"
|
||
+ }
|
||
+ }
|
||
```
|
||
|
||
---
|
||
|
||
现在,让我们创建i18n的配置文件:
|
||
|
||
---
|
||
|
||
```diff
|
||
-
|
||
+ import { createI18n } from 'vue-i18n'
|
||
+ import zh from './locales/zh.json'
|
||
+ import en from './locales/en.json'
|
||
+
|
||
+ export default defineNuxtPlugin(({ vueApp }) => {
|
||
+ const i18n = createI18n({
|
||
+ legacy: false,
|
||
+ globalInjection: true,
|
||
+ locale: 'zh',
|
||
+ messages: {
|
||
+ zh,
|
||
+ en
|
||
+ }
|
||
+ })
|
||
+
|
||
+ vueApp.use(i18n)
|
||
+ })
|
||
```
|
||
|
||
---
|
||
|
||
让我们更新tsconfig.json文件以允许导入JSON文件:
|
||
|
||
---
|
||
|
||
```diff
|
||
"@/*": ["./*"]
|
||
},
|
||
- "types": ["node", "nuxt"]
|
||
+ "types": ["node", "nuxt"],
|
||
+ "resolveJsonModule": true
|
||
},
|
||
"exclude": ["node_modules", ".nuxt", "dist"]
|
||
```
|
||
|
||
---
|
||
|
||
现在,让我们创建一个语言切换组件:
|
||
|
||
---
|
||
|
||
```diff
|
||
-
|
||
+ <template>
|
||
+ <div class="relative">
|
||
+ <button
|
||
+ @click="toggleDropdown"
|
||
+ class="flex items-center text-white/85 hover:text-secondary transition-colors duration-300"
|
||
+ >
|
||
+ <span class="mr-1">{{ currentLocale === 'zh' ? 'EN' : '中' }}</span>
|
||
+ <i class="fas fa-chevron-down text-xs"></i>
|
||
+ </button>
|
||
+
|
||
+ <div
|
||
+ v-if="dropdownOpen"
|
||
+ class="absolute right-0 mt-2 bg-white rounded-md shadow-lg py-1 min-w-[100px] z-50"
|
||
+ >
|
||
+ <button
|
||
+ @click="changeLocale('zh')"
|
||
+ class="block w-full text-left px-4 py-2 text-gray-800 hover:bg-gray-100"
|
||
+ :class="{ 'bg-gray-100': currentLocale === 'zh' }"
|
||
+ >
|
||
+ 中文
|
||
+ </button>
|
||
+ <button
|
||
+ @click="changeLocale('en')"
|
||
+ class="block w-full text-left px-4 py-2 text-gray-800 hover:bg-gray-100"
|
||
+ :class="{ 'bg-gray-100': currentLocale === 'en' }"
|
||
+ >
|
||
+ English
|
||
+ </button>
|
||
+ </div>
|
||
+ </div>
|
||
+ </template>
|
||
+
|
||
+ <script setup lang="ts">
|
||
+ import { ref, computed, onMounted, onUnmounted } from 'vue';
|
||
+ import { useI18n } from 'vue-i18n';
|
||
+
|
||
+ const i18n = useI18n();
|
||
+ const dropdownOpen = ref(false);
|
||
+
|
||
+ const currentLocale = computed(() => i18n.locale.value);
|
||
+
|
||
+ const toggleDropdown = () => {
|
||
+ dropdownOpen.value = !dropdownOpen.value;
|
||
+ };
|
||
+
|
||
+ const changeLocale = (locale: string) => {
|
||
+ i18n.locale.value = locale;
|
||
+ dropdownOpen.value = false;
|
||
+ // 保存用户语言偏好到本地存储
|
||
+ localStorage.setItem('user-locale', locale);
|
||
+ };
|
||
+
|
||
+ // 点击其他地方关闭下拉菜单
|
||
+ const handleClickOutside = (event: MouseEvent) => {
|
||
+ const target = event.target as HTMLElement;
|
||
+ if (!target.closest('.relative')) {
|
||
+ dropdownOpen.value = false;
|
||
+ }
|
||
+ };
|
||
+
|
||
+ // 从本地存储加载用户语言偏好
|
||
+ onMounted(() => {
|
||
+ const savedLocale = localStorage.getItem('user-locale');
|
||
+ if (savedLocale) {
|
||
+ i18n.locale.value = savedLocale;
|
||
+ }
|
||
+
|
||
+ document.addEventListener('click', handleClickOutside);
|
||
+ });
|
||
+
|
||
+ onUnmounted(() => {
|
||
+ document.removeEventListener('click', handleClickOutside);
|
||
+ });
|
||
+ </script>
|
||
```
|
||
|
||
---
|
||
|
||
现在,让我们修改NavBar.vue组件,使其支持国际化并添加语言切换按钮:
|
||
|
||
---
|
||
|
||
```diff
|
||
<NuxtLink to="/" class="flex items-center text-white">
|
||
<i class="fas fa-cloud text-2xl mr-2"></i>
|
||
- <span class="text-xl font-bold">云服务专家</span>
|
||
+ <span class="text-xl font-bold">{{ $t('common.appName') }}</span>
|
||
</NuxtLink>
|
||
|
||
:class="{ 'text-white': $route.path === item.path }"
|
||
>
|
||
- {{ item.name }}
|
||
+ {{ $t(item.i18nKey) }}
|
||
</NuxtLink>
|
||
+
|
||
+ <!-- 语言切换器 -->
|
||
+ <LanguageSwitcher />
|
||
</div>
|
||
|
||
@click="mobileMenuOpen = false"
|
||
>
|
||
- {{ item.name }}
|
||
+ {{ $t(item.i18nKey) }}
|
||
</NuxtLink>
|
||
+
|
||
+ <!-- 移动端语言切换器 -->
|
||
+ <div class="py-2">
|
||
+ <LanguageSwitcher />
|
||
+ </div>
|
||
</div>
|
||
</div>
|
||
import { ref, onMounted, onUnmounted } from 'vue';
|
||
import { useRoute } from 'vue-router';
|
||
+ import { useI18n } from 'vue-i18n';
|
||
+ import LanguageSwitcher from './LanguageSwitcher.vue';
|
||
|
||
const route = useRoute();
|
||
+ const { t } = useI18n();
|
||
const mobileMenuOpen = ref(false);
|
||
const scrolled = ref(false);
|
||
|
||
const navItems = [
|
||
- { name: '首页', path: '/' },
|
||
- { name: 'AWS产品', path: '/products' },
|
||
- { name: '解决方案', path: '/solutions' },
|
||
- { name: '客户案例', path: '/cases' },
|
||
- { name: '关于我们', path: '/about' },
|
||
- { name: '联系我们', path: '/contact' }
|
||
+ { i18nKey: 'nav.home', path: '/' },
|
||
+ { i18nKey: 'nav.products', path: '/products' },
|
||
+ { i18nKey: 'nav.solutions', path: '/solutions' },
|
||
+ { i18nKey: 'nav.cases', path: '/cases' },
|
||
+ { i18nKey: 'nav.about', path: '/about' },
|
||
+ { i18nKey: 'nav.contact', path: '/contact' }
|
||
];
|
||
|
||
```
|
||
|
||
---
|
||
|
||
最后,我们需要在plugins目录中配置i18n插件:
|
||
|
||
---
|
||
|
||
Could not resolve URI: Error: Unable to resolve nonexistent file 'd:\doc\workspace\web3\plugins'
|
||
|
||
---
|
||
|
||
我们需要创建plugins目录并移动我们的i18n配置:
|
||
|
||
---
|
||
|
||
```bash
|
||
mkdir plugins
|
||
```
|
||
|
||
```
|
||
PS D:\doc\workspace\web3> mkdir plugins
|
||
|
||
|
||
Mode LastWriteTime Length Name
|
||
---- ------------- ------ ----
|
||
PS D:\doc\workspace\web3>
|
||
```
|
||
|
||
---
|
||
|
||
```diff
|
||
-
|
||
+ import { createI18n } from 'vue-i18n'
|
||
+ import zh from '../i18n/locales/zh.json'
|
||
+ import en from '../i18n/locales/en.json'
|
||
+
|
||
+ export default defineNuxtPlugin(({ vueApp }) => {
|
||
+ const i18n = createI18n({
|
||
+ legacy: false,
|
||
+ globalInjection: true,
|
||
+ locale: 'zh',
|
||
+ messages: {
|
||
+ zh,
|
||
+ en
|
||
+ }
|
||
+ })
|
||
+
|
||
+ vueApp.use(i18n)
|
||
+ })
|
||
```
|
||
|
||
---
|
||
|
||
不需要担心这些TypeScript警告,在Nuxt 3中`defineNuxtPlugin`是全局可用的,现在我们可以删除之前创建的i18n/index.ts文件,因为已经将其移动到了plugins目录:
|
||
|
||
---
|
||
|
||
删除冗余文件,因为我们已经将其移动到plugins目录
|
||
|
||
---
|
||
|
||
最后,我们启动项目来测试我们的国际化功能:
|
||
|
||
---
|
||
|
||
```bash
|
||
npm run dev
|
||
```
|
||
|
||
```
|
||
PS D:\doc\workspace\web3> npm run dev
|
||
|
||
> dev
|
||
> nuxt dev
|
||
|
||
Nuxt 3.16.2 with Nitro 2.11.9 nuxi 15:02:06
|
||
15:02:06
|
||
➜ Local: http://localhost:3000/
|
||
➜ Network: use --host to expose
|
||
|
||
ℹ Using default Tailwind CSS file nuxt:tailwindcss 15:02:08
|
||
➜ DevTools: press Shift + Alt + D in the browser (v2.4.0) 15:02:08
|
||
|
||
ℹ Re-optimizing dependencies because lockfile has changed 15:02:10
|
||
✔ Vite client built in 116ms 15:02:10
|
||
✔ Vite server built in 765ms 15:02:11
|
||
ℹ page reload dist/404.html 15:02:11
|
||
ℹ page reload dist/200.html 15:02:11
|
||
ℹ page reload dist/index.html 15:02:11
|
||
ℹ page reload dist/contact/index.html 15:02:11
|
||
ℹ page reload dist/about/index.html 15:02:11
|
||
ℹ page reload dist/products/index.html 15:02:11
|
||
ℹ page reload dist/cases/index.html 15:02:11
|
||
ℹ page reload dist/solutions/index.html 15:02:11
|
||
✔ Nuxt Nitro server built in 1492ms nitro 15:02:13
|
||
[nuxt 15:02:13] ℹ Nuxt now supports pinning the behavior of provider and deployment presets with a compatibi
|
||
lity date. We recommend you specify a compatibilityDate in your nuxt.config file, or set an environment vari
|
||
able, such as COMPATIBILITY_DATE=2025-04-22.
|
||
ℹ Vite client warmed up in 5ms 15:02:13
|
||
|
||
❯ Do you want to update your nuxt.config to set compatibilityDate: '2025-04-22'?
|
||
● Yes / ○ No
|
||
|
||
ℹ Vite server warmed up in 1466ms 15:02:14
|
||
```
|
||
|
||
---
|
||
|
||
恭喜!您已经成功地为您的Vue项目添加了国际化功能,并在导航栏添加了语言切换按钮。以下是我们完成的工作:
|
||
|
||
1. 安装了vue-i18n@next库
|
||
2. 创建了中文和英文的语言文件
|
||
3. 添加了i18n插件配置
|
||
4. 创建了一个语言切换组件
|
||
5. 修改了导航栏以支持国际化和语言切换
|
||
|
||
您现在可以通过点击导航栏中的语言切换按钮在中文和英文之间切换。应用会记住用户的语言选择,并在下次访问时自动应用该语言。
|
||
|
||
### 国际化的工作原理
|
||
|
||
1. **用户界面**:在导航栏有一个语言切换按钮,显示"EN"或"中",点击可展开语言选项。
|
||
2. **语言存储**:用户的语言偏好会保存在浏览器的localStorage中。
|
||
3. **翻译机制**:使用`$t('key')`函数来翻译文本,如`$t('nav.home')`。
|
||
|
||
### 如何添加更多语言
|
||
|
||
如果您想添加更多语言,只需:
|
||
|
||
1. 在`i18n/locales`目录下创建新的语言文件(如`ja.json`)
|
||
2. 在`plugins/i18n.ts`中导入并添加到messages对象
|
||
3. 在`LanguageSwitcher.vue`组件中添加新的语言选项
|
||
|
||
### 如何添加更多翻译
|
||
|
||
随着项目的发展,您可以向语言文件中添加更多翻译项目。只需在相应的JSON文件中添加新的键值对,然后在组件中使用`$t('key')`来引用它们。
|
||
|
||
### 注意事项
|
||
|
||
- 当您添加新页面或组件时,请记得使用`$t()`函数来支持国际化
|
||
- 对于动态内容,可以使用参数,如:`$t('greeting', { name: userName })`
|
||
|
||
您的网站现在支持多语言,用户可以根据自己的偏好选择语言了!
|
||
|
||
---
|
||
|
||
_**User**_
|
||
|
||
请实现 index.vue页面全部内容的国际化
|
||
|
||
---
|
||
|
||
_**Assistant**_
|
||
|
||
我将帮您实现首页(index.vue)的国际化。首先需要扩展语言文件,然后修改index.vue页面。
|
||
|
||
---
|
||
|
||
```diff
|
||
"loading": "加载中...",
|
||
"readMore": "了解更多"
|
||
+ },
|
||
+ "home": {
|
||
+ "hero": {
|
||
+ "title": "AWS云服务器专业代理商",
|
||
+ "subtitle": "为您的企业提供专业的AWS云服务解决方案,助力数字化转型",
|
||
+ "learnButton": "了解AWS优势",
|
||
+ "contactButton": "联系顾问"
|
||
+ },
|
||
+ "features": {
|
||
+ "title": "AWS产品与服务",
|
||
+ "subtitle": "全面的云计算产品线,满足您的各种业务需求",
|
||
+ "description": "作为AWS授权代理商,我们提供全系列AWS产品和服务,并为您提供专业的咨询和支持,帮助您选择最适合的产品组合。",
|
||
+ "security": {
|
||
+ "title": "安全可靠",
|
||
+ "description": "AWS提供业界领先的安全服务,包括加密、防火墙和身份验证,保障您的数据安全"
|
||
+ },
|
||
+ "performance": {
|
||
+ "title": "高性能",
|
||
+ "description": "全球数据中心网络,低延迟高带宽,确保您的应用程序高效运行"
|
||
+ },
|
||
+ "cost": {
|
||
+ "title": "成本优化",
|
||
+ "description": "按需付费模式,无需前期投资,降低IT运营成本"
|
||
+ }
|
||
+ },
|
||
+ "services": {
|
||
+ "title": "我们的服务优势",
|
||
+ "subtitle": "作为AWS授权合作伙伴,我们提供全方位的专业服务",
|
||
+ "official": {
|
||
+ "title": "官方授权",
|
||
+ "description": "我们是AWS官方授权的合作伙伴,可提供正规授权和发票"
|
||
+ },
|
||
+ "price": {
|
||
+ "title": "价格优势",
|
||
+ "description": "相比直接采购,我们能提供更具竞争力的价格和灵活的付款方式"
|
||
+ },
|
||
+ "support": {
|
||
+ "title": "技术支持",
|
||
+ "description": "专业的技术团队提供咨询、部署和运维服务,解决您的技术难题"
|
||
+ },
|
||
+ "training": {
|
||
+ "title": "培训服务",
|
||
+ "description": "为您的团队提供专业的AWS技术培训,提升技术能力"
|
||
+ }
|
||
+ },
|
||
+ "products": {
|
||
+ "title": "AWS核心产品服务",
|
||
+ "subtitle": "全面的云服务产品线,满足各种业务需求",
|
||
+ "viewAll": "查看全部AWS产品",
|
||
+ "detail": "了解详情",
|
||
+ "ec2": {
|
||
+ "title": "EC2 云服务器",
|
||
+ "description": "可扩展的计算能力,适用于各种工作负载,从小型网站到企业级应用"
|
||
+ },
|
||
+ "s3": {
|
||
+ "title": "S3 对象存储",
|
||
+ "description": "安全、可靠的对象存储服务,适用于备份、归档和数据湖等场景"
|
||
+ },
|
||
+ "rds": {
|
||
+ "title": "RDS 关系型数据库",
|
||
+ "description": "易于部署和管理的关系型数据库服务,支持多种主流数据库引擎"
|
||
+ }
|
||
+ },
|
||
+ "cases": {
|
||
+ "title": "成功客户案例",
|
||
+ "subtitle": "看看其他企业如何利用AWS云服务提升业务价值",
|
||
+ "readMore": "阅读详情",
|
||
+ "fintech": {
|
||
+ "title": "某金融科技公司",
|
||
+ "description": "通过迁移到AWS云服务,该公司将应用响应时间缩短了40%,并节省了30%的IT运营成本"
|
||
+ },
|
||
+ "ecommerce": {
|
||
+ "title": "某电商平台",
|
||
+ "description": "利用AWS弹性伸缩服务,轻松应对销售高峰期流量,提高了用户体验和订单转化率"
|
||
+ }
|
||
+ }
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
|
||
|
||
---
|
||
|
||
|
||
|
||
---
|
||
|