页面优化

This commit is contained in:
2025-04-24 19:02:06 +08:00
parent 368e066aa8
commit 6d199e7bf7
6 changed files with 1113 additions and 448 deletions

View File

@@ -48,16 +48,16 @@ onMounted(() => {
:class="`${route.path === item.path? 'router-link-active': 'router-link'} flex items-center p-3 rounded-lg hover:bg-opacity-10 hover:bg-white transition-colors text-white text-lg`"
@click="router.push(item.path)"
>
<component :is="item.icon" class="mr-3" />
<!-- <component :is="item.icon" class="mr-3" />-->
{{ item.title }}
</a>
</nav>
<div class="flex items-center space-x-4">
<AuthModal ref="authModal" />
<a-button
<a-button
v-if="!userStore.isAuthenticated"
type="primary"
type="primary"
class="text-sm"
@click="authModal?.show()"
>
@@ -107,7 +107,7 @@ onMounted(() => {
<!-- 移动端菜单开关 -->
<div class="fixed bottom-6 right-6 z-50 md:hidden">
<a-button
<a-button
shape="circle"
type="primary"
size="large"
@@ -118,7 +118,7 @@ onMounted(() => {
</a-button>
</div>
<a-layout-content class="pt-16 body-box">
<a-layout-content class="body-box">
<router-view />
</a-layout-content>
</a-layout>
@@ -133,7 +133,7 @@ body {
-moz-osx-font-smoothing: grayscale;
}
.body-box {
background-color: #111 !important;
background-color: #131a2a !important;
min-height: 100vh;
}
:deep(.ant-menu-horizontal) {
@@ -158,4 +158,4 @@ header {
background-color: rgba(255, 255, 255, 0.1) !important;
}
}
</style>
</style>

View File

@@ -1,26 +1,17 @@
<template>
<div class="max-w-4xl mx-auto p-6">
<h1 class="text-3xl font-bold mb-6 text-blue-600">关于我们</h1>
<section class="space-y-6">
<div class="bg-white rounded-lg shadow-md p-6">
<h2 class="text-xl font-semibold mb-4">公司简介</h2>
<p class="text-gray-600 leading-relaxed">
我们是一家专注数字化转型的科技企业致力于为客户提供创新的解决方案...
</p>
</div>
<div class="bg-white rounded-lg shadow-md p-6">
<h2 class="text-xl font-semibold mb-4">核心团队</h2>
<div class="grid md:grid-cols-2 gap-6">
<!-- 团队成员卡片 -->
</div>
</div>
</section>
</div>
</template>
<script setup>
import { ref, onMounted } from 'vue'
import { useHead } from '@vueuse/head'
import AOS from 'aos'
import 'aos/dist/aos.css'
onMounted(() => {
AOS.init({
duration: 1200,
offset: 120,
easing: 'ease-out-cubic',
once: false
})
})
useHead({
title: '关于我们 - 企业数字化解决方案专家',
@@ -28,4 +19,212 @@ useHead({
{ name: 'description', content: '了解我们的企业使命、核心团队和技术优势' }
]
})
</script>
const teamMembers = [
{
name: '张三',
role: '创始人 & CEO',
avatar: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280',
description: '拥有15年互联网行业经验曾任职于多家知名科技企业专注于企业数字化转型战略'
},
{
name: '李四',
role: '技术总监',
avatar: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280',
description: '全栈开发专家,精通前后端技术栈,负责公司核心产品架构设计与技术团队管理'
},
{
name: '王五',
role: '产品经理',
avatar: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280',
description: '拥有丰富的产品设计与用户体验经验,致力于打造简洁高效的企业级应用'
},
{
name: '赵六',
role: '市场总监',
avatar: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280',
description: '营销策略专家,擅长品牌建设与市场拓展,负责公司整体市场战略规划'
}
]
const milestones = [
{ year: '2018', title: '公司成立', description: '团队初创,确立企业数字化服务方向' },
{ year: '2019', title: '首轮融资', description: '获得天使轮投资团队扩展到15人' },
{ year: '2020', title: '产品上线', description: '核心产品正式发布,服务首批企业客户' },
{ year: '2021', title: '业务扩展', description: '客户数量突破100家业务覆盖全国主要城市' },
{ year: '2022', title: 'A轮融资', description: '完成A轮融资估值达到1亿元' },
{ year: '2023', title: '国际化', description: '开始拓展海外市场,建立国际合作伙伴网络' }
]
</script>
<template>
<div class="bg-gradient-to-b from-gray-50 to-white dark:from-gray-900 dark:to-gray-800 min-h-screen py-12">
<div class="max-w-5xl mx-auto px-6">
<!-- 页面标题 -->
<div class="text-center mb-16" data-aos="fade-up">
<h1 class="text-4xl md:text-5xl font-bold mb-6 text-gray-900 dark:text-white">
<span class="relative">
关于我们
<span class="absolute -bottom-2 left-0 right-0 mx-auto w-1/3 h-1 bg-gradient-to-r from-rose-400 to-rose-600 rounded-full"></span>
</span>
</h1>
<p class="text-lg text-gray-600 dark:text-gray-300 max-w-3xl mx-auto">
我们致力于为企业提供创新的数字化解决方案帮助客户在数字时代实现业务增长
</p>
</div>
<!-- 公司简介 -->
<section class="mb-20" data-aos="fade-up">
<div class="bg-white dark:bg-gray-800 rounded-3xl shadow-xl hover:shadow-2xl transition-all duration-500 p-8 md:p-10">
<h2 class="text-2xl md:text-3xl font-bold mb-6 text-gray-900 dark:text-white flex items-center">
<span class="w-10 h-10 rounded-full bg-rose-100 dark:bg-rose-900/30 text-rose-600 dark:text-rose-400 flex items-center justify-center mr-3">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4" />
</svg>
</span>
公司简介
</h2>
<div class="space-y-6 text-gray-700 dark:text-gray-300 leading-relaxed">
<p>
我们是一家专注于数字化转型的科技企业成立于2018年总部位于深圳在北京上海广州设有分支机构公司拥有一支由资深技术专家产品经理和行业顾问组成的精英团队致力于为各行业客户提供创新的数字化解决方案
</p>
<p>
我们的使命是通过技术创新赋能企业发展帮助传统企业实现数字化转型提升运营效率创造更大的商业价值我们相信数字化不仅是技术的变革更是思维方式和商业模式的革新
</p>
<p>
凭借深厚的技术积累和行业洞察我们已成功为金融零售制造教育等多个领域的客户提供了定制化的解决方案赢得了广泛的认可和信任
</p>
</div>
</div>
</section>
<!-- 发展历程 -->
<section class="mb-20" data-aos="fade-up">
<h2 class="text-2xl md:text-3xl font-bold mb-10 text-gray-900 dark:text-white text-center">
<span class="relative">
发展历程
<span class="absolute -bottom-2 left-1/4 right-1/4 h-1 bg-gradient-to-r from-rose-400 to-rose-600 rounded-full"></span>
</span>
</h2>
<div class="relative">
<!-- 时间轴线 -->
<div class="absolute left-1/2 transform -translate-x-1/2 h-full w-1 bg-gradient-to-b from-rose-400 to-rose-600 rounded-full"></div>
<div class="space-y-12">
<div
v-for="(milestone, index) in milestones"
:key="index"
class="relative flex items-center justify-center"
:data-aos="index % 2 === 0 ? 'fade-right' : 'fade-left'"
:data-aos-delay="index * 100"
>
<!-- 时间点 -->
<div class="absolute left-1/2 transform -translate-x-1/2 w-6 h-6 rounded-full bg-white dark:bg-gray-800 border-4 border-rose-500 z-10"></div>
<!-- 内容卡片 -->
<div
class="w-5/12 bg-white dark:bg-gray-800 rounded-2xl shadow-lg hover:shadow-xl transition-all duration-500 p-6"
:class="index % 2 === 0 ? 'mr-auto pr-12' : 'ml-auto pl-12'"
>
<div class="flex items-center mb-3">
<span class="text-2xl font-bold text-rose-600 dark:text-rose-400 mr-3">{{ milestone.year }}</span>
<h3 class="text-xl font-bold text-gray-900 dark:text-white">{{ milestone.title }}</h3>
</div>
<p class="text-gray-600 dark:text-gray-300">{{ milestone.description }}</p>
</div>
</div>
</div>
</div>
</section>
<!-- 核心团队 -->
<section class="mb-20" data-aos="fade-up">
<h2 class="text-2xl md:text-3xl font-bold mb-10 text-gray-900 dark:text-white text-center">
<span class="relative">
核心团队
<span class="absolute -bottom-2 left-1/4 right-1/4 h-1 bg-gradient-to-r from-rose-400 to-rose-600 rounded-full"></span>
</span>
</h2>
<div class="grid grid-cols-1 md:grid-cols-2 gap-8">
<div
v-for="(member, index) in teamMembers"
:key="index"
class="bg-white dark:bg-gray-800 rounded-3xl shadow-lg hover:shadow-2xl transition-all duration-500 overflow-hidden transform hover:-translate-y-2"
data-aos="fade-up"
:data-aos-delay="index * 100"
>
<div class="flex flex-col md:flex-row">
<div class="relative md:w-1/3">
<!-- 渐变背景装饰 -->
<div class="absolute inset-0 bg-gradient-to-br from-rose-400 to-rose-600 opacity-20"></div>
<img
:src="member.avatar"
:alt="member.name"
class="w-full h-48 md:h-full object-cover relative z-10"
/>
</div>
<div class="p-6 md:w-2/3">
<h3 class="text-xl font-bold text-gray-900 dark:text-white mb-1">{{ member.name }}</h3>
<p class="text-rose-600 dark:text-rose-400 font-medium mb-4">{{ member.role }}</p>
<p class="text-gray-600 dark:text-gray-300">{{ member.description }}</p>
</div>
</div>
</div>
</div>
</section>
<!-- 联系我们 -->
<section data-aos="fade-up">
<div class="bg-gradient-to-r from-rose-50 to-pink-50 dark:from-rose-900/10 dark:to-pink-900/10 rounded-3xl p-8 md:p-10 text-center">
<h2 class="text-2xl md:text-3xl font-bold mb-6 text-gray-900 dark:text-white">联系我们</h2>
<p class="text-gray-600 dark:text-gray-300 mb-8 max-w-2xl mx-auto">
无论您是想了解更多关于我们的服务还是希望探讨潜在的合作机会我们都期待与您交流
</p>
<div class="flex flex-wrap justify-center gap-6">
<div class="flex items-center bg-white dark:bg-gray-800/80 rounded-full px-6 py-3 shadow-md">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-rose-500 mr-3" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" />
</svg>
<span class="text-gray-700 dark:text-gray-200">contact@example.com</span>
</div>
<div class="flex items-center bg-white dark:bg-gray-800/80 rounded-full px-6 py-3 shadow-md">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-rose-500 mr-3" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z" />
</svg>
<span class="text-gray-700 dark:text-gray-200">400-123-4567</span>
</div>
<div class="flex items-center bg-white dark:bg-gray-800/80 rounded-full px-6 py-3 shadow-md">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-rose-500 mr-3" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z" />
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 11a3 3 0 11-6 0 3 3 0 016 0z" />
</svg>
<span class="text-gray-700 dark:text-gray-200">深圳市南山区科技园</span>
</div>
</div>
</div>
</section>
</div>
</div>
</template>
<style scoped>
/* 添加轻奢风格的渐变背景和阴影效果 */
.bg-gradient-luxury {
background: linear-gradient(135deg, #f6f8fb 0%, #f0f4f8 100%);
}
/* 暗色模式下的轻奢风格 */
@media (prefers-color-scheme: dark) {
.bg-gradient-luxury {
background: linear-gradient(135deg, #1a1d23 0%, #111827 100%);
}
}
</style>

View File

@@ -1,19 +1,22 @@
<script setup>
import { ref, onMounted } from 'vue'
import { Swiper, SwiperSlide } from 'swiper/vue'
import { Autoplay, Pagination, Navigation, EffectCreative } from 'swiper/modules'
import { Autoplay, Pagination, Navigation, EffectFade } from 'swiper/modules'
import AOS from 'aos'
import 'swiper/css'
import 'swiper/css/pagination'
import 'swiper/css/navigation'
import {onMounted} from "vue";
import 'swiper/css/effect-fade'
import 'aos/dist/aos.css'
const modules = [Autoplay, Pagination, Navigation, EffectCreative]
const modules = [Autoplay, Pagination, Navigation, EffectFade]
onMounted(() => {
AOS.init({
duration: 1000,
duration: 1200,
offset: 120,
easing: 'ease-out-quart'
easing: 'ease-out-cubic',
once: false
})
})
@@ -32,10 +35,10 @@ const projects = [
title: 'OA系统',
tags: ['React', 'PHP'],
category: ['Web', 'Uni app', '微信小程序'],
description: '基于React和PHP开发的OA系统提供完整的流程管理、审批、报表等功能。亮点1、100万用户、2、Saas系统1、100万用户、2、Saas系统1、100万用户、2、Saas系统1、100万用户、2、Saas系统1、100万用户、2、Saas系统1、100万用户、2、Saas系统',
description: '基于React和PHP开发的OA系统提供完整的流程管理、审批、报表等功能。亮点1、100万用户、2、Saas系统1、100万用户、2、Saas系统1、100万用户、2、Saas系统1、100万用户、2、Saas系统1、100万用户、2、Saas系统1、100万用户、2、Saas系统',
cover: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280',
route: '2'
}
}
]
const testimonials = [
@@ -66,182 +69,359 @@ const partners = [
{ name: '阿里云', logo: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280' },
{ name: '华为云', logo: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280' },
{ name: 'Microsoft', logo: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280' },
{ name: '腾讯云', logo: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280' },
{ name: '阿里云', logo: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280' },
{ name: '华为云', logo: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280' },
{ name: 'Microsoft', logo: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280' },
]
// 轮播图自动播放配置
const swiperOptions = {
delay: 5000,
disableOnInteraction: false
}
// 合作伙伴轮播配置
const partnerSwiperOptions = {
delay: 3000,
disableOnInteraction: false
}
// 轮播图断点配置
const breakpoints = {
640: {
slidesPerView: 2,
spaceBetween: 20
},
768: {
slidesPerView: 4,
spaceBetween: 30
},
1024: {
slidesPerView: 6,
spaceBetween: 30
}
}
</script>
<template>
<div class="container mx-auto px-4 sm:px-6 lg:px-8">
<!-- 增强型轮播图 -->
<div class="mb-16 lg:mb-24" data-aos="fade-up">
<swiper
class="rounded-3xl lg:rounded-[2rem] overflow-hidden shadow-2xl hover:shadow-3xl transition-shadow duration-500"
:modules="modules"
:autoplay="{ delay: 5000 }"
:pagination="{ clickable: true }"
:navigation="true"
>
<swiper-slide
class="group relative cursor-pointer hover:z-10 transition-transform duration-500"
v-for="(item, index) in 3"
:key="item"
@click="$router.push(`/project/${projects[index % 2].route}`)"
>
<div class="relative h-64 md:h-[480px] xl:h-[560px]">
<img
:src="`https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280?text=Banner${item}`"
class="w-full h-full object-cover transition-transform duration-700 group-hover:scale-105"
/>
<div class="absolute inset-0 bg-gradient-to-t from-gray-900/80 via-transparent to-transparent p-6 flex flex-col justify-end space-y-3">
<h3 class="text-2xl md:text-4xl font-bold text-white mb-2 drop-shadow-2xl">
{{ projects[index % 2].title }}
</h3>
<div class="flex gap-2">
<span
v-for="tag in projects[index % 2].tags"
class="px-3 py-1.5 bg-white/10 backdrop-blur-lg text-sm font-medium text-gray-100 rounded-lg transition-colors hover:bg-white/20"
>
{{ tag }}
</span>
</div>
</div>
</div>
</swiper-slide>
</swiper>
</div>
<!-- 精选项目 - 网格布局 -->
<section class="mb-20 lg:mb-28">
<h2 class="text-3xl md:text-4xl font-bold mb-8 md:mb-12 text-gray-900 dark:text-white" data-aos="fade-up">精选项目</h2>
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 lg:gap-8">
<div
v-for="(project, index) in projects"
class="relative group bg-white dark:bg-gray-800 rounded-2xl shadow-xl hover:shadow-2xl transition-all duration-500 overflow-hidden cursor-pointer"
data-aos="fade-up"
:data-aos-delay="index * 100"
@click="$router.push(`/project/${projects[index % 2].route}`)"
>
<div class="relative h-56 md:h-64 overflow-hidden">
<img
:src="project.cover"
class="w-full h-full object-cover transform transition-transform duration-500 group-hover:scale-110"
/>
<div class="absolute inset-0 bg-gradient-to-t from-gray-900/40 via-transparent" />
</div>
<div class="p-6 md:p-7">
<div class="flex flex-wrap gap-2">
<span
v-for="tag in project.tags"
class="px-3 py-1.5 bg-blue-100 dark:bg-blue-900/40 text-blue-600 dark:text-blue-300 text-sm font-medium rounded-lg"
>
{{ tag }}
</span>
</div>
<div class="flex flex-wrap gap-2 mt-5">
<span
v-for="tag in project.category"
class="px-3 py-1.5 bg-blue-100 dark:bg-blue-900/40 text-blue-600 dark:text-blue-300 text-sm font-medium rounded-lg"
>
{{ tag }}
</span>
</div>
<h3 class="mt-3 text-xl md:text-2xl font-semibold mb-3 text-gray-900 dark:text-white">
{{ project.title }}
</h3>
<p class="text-gray-600 dark:text-gray-400 line-clamp-3">
{{ project.description }}
</p>
</div>
</div>
</div>
</section>
<!-- 客户评价 - 卡片布局 -->
<section class="mb-20 lg:mb-28" data-aos="fade-up">
<h2 class="text-3xl md:text-4xl font-bold mb-8 md:mb-12 text-gray-900 dark:text-white">客户评价</h2>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6 lg:gap-8">
<div
v-for="testimonial in testimonials"
class="bg-white dark:bg-gray-800 p-6 md:p-8 rounded-2xl shadow-xl hover:shadow-2xl transition-all duration-500"
>
<div class="flex items-start gap-5 mb-6">
<img
:src="testimonial.avatar"
class="w-16 h-16 rounded-xl border-2 border-white/30 shadow-md"
/>
<div class="flex-1">
<div class="flex items-center justify-between mb-2">
<div>
<h4 class="text-lg font-bold text-gray-900 dark:text-white">{{ testimonial.author }}</h4>
<p class="text-sm text-blue-600 dark:text-blue-400">{{ testimonial.role }}</p>
</div>
<div class="flex gap-1 text-yellow-400">
<svg v-for="n in 5" :key="n" class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
</svg>
</div>
</div>
<p class="text-gray-600 dark:text-gray-300 leading-relaxed">
{{ testimonial.content }}
</p>
</div>
</div>
</div>
</div>
</section>
<!-- 合作伙伴 - 品牌墙 -->
<section class="mb-20 lg:mb-28" data-aos="fade-up">
<h2 class="text-3xl md:text-4xl font-bold mb-8 md:mb-12 text-gray-900 dark:text-white">合作伙伴</h2>
<div class="relative overflow-hidden py-4">
<div class="bg-gradient-to-b from-gray-50 to-white dark:from-gray-900 dark:to-gray-800">
<div class="container mx-auto px-4 sm:px-6 lg:px-8 py-12">
<!-- 高端轮播图 -->
<div class="mb-20 lg:mb-28" data-aos="fade-up">
<swiper
class="!overflow-visible"
:modules="modules"
:slides-per-view="auto"
:space-between="40"
:breakpoints="{ 640: { slidesPerView: 4 }, 1024: { slidesPerView: 6 } }"
:autoplay="{ delay: 2000 }"
:effect="'fade'"
:autoplay="swiperOptions"
:pagination="{
clickable: true,
dynamicBullets: true,
dynamicMainBullets: 3
}"
:navigation="true"
:loop="true"
class="rounded-[2rem] overflow-hidden shadow-[0_20px_50px_rgba(8,112,184,0.15)] hover:shadow-[0_25px_60px_rgba(8,112,184,0.2)] transition-all duration-700"
>
<swiper-slide v-for="(partner, index) in partners" :key="index">
<div class="flex flex-wrap items-center justify-center h-43 bg-white dark:bg-gray-800 rounded-xl p-4 shadow-lg hover:shadow-xl transition-all duration-500 hover:-translate-y-2"
>
<div class="w-full flex flex-wrap items-center justify-center">
<img
:src="partner.logo"
class="h-24 object-contain opacity-80 hover:opacity-100 transition-opacity grayscale hover:grayscale-0"
alt="测试"/>
</div>
<div class="flex items-center justify-center transition-opacity duration-500 w-full">
<span class="text-white text-lg font-bold">{{ partner.name }}</span>
<swiper-slide
v-for="(project, index) in projects"
:key="project.id"
class="group cursor-pointer"
@click="$router.push(`/project/${project.route}`)"
>
<div class="relative h-[70vh] max-h-[700px] min-h-[500px] w-full overflow-hidden">
<img
:src="project.cover"
class="absolute inset-0 w-full h-full object-cover transition-transform duration-7000 group-hover:scale-105"
alt="Project Cover"
/>
<div class="absolute inset-0 bg-gradient-to-t from-black/80 via-black/40 to-transparent"></div>
<div class="absolute bottom-0 left-0 right-0 p-8 md:p-12 lg:p-16 z-10 transform transition-transform duration-500">
<div class="max-w-3xl">
<div class="flex flex-wrap gap-2 mb-6" data-aos="fade-up" data-aos-delay="200">
<span
v-for="tag in project.tags"
:key="tag"
class="px-4 py-2 bg-white/10 backdrop-blur-md text-white text-sm font-medium rounded-full border border-white/20 shadow-lg hover:bg-white/20 transition-colors duration-300"
>
{{ tag }}
</span>
</div>
<h2
class="text-3xl md:text-5xl lg:text-6xl font-bold text-white mb-6 tracking-tight leading-tight"
data-aos="fade-up"
>
{{ project.title }}
</h2>
<p
class="text-lg md:text-xl text-white/80 max-w-2xl line-clamp-3 mb-8"
data-aos="fade-up"
data-aos-delay="100"
>
{{ project.description }}
</p>
<button
class="px-8 py-3 bg-white/10 backdrop-blur-md text-white rounded-full border border-white/20 hover:bg-white/20 transition-all duration-300 shadow-lg group"
data-aos="fade-up"
data-aos-delay="300"
>
<span class="flex items-center">
查看详情
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 ml-2 transform group-hover:translate-x-1 transition-transform" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3" />
</svg>
</span>
</button>
</div>
</div>
</div>
</swiper-slide>
</swiper>
</div>
</section>
<!-- 精选项目 - 高端卡片布局 -->
<section class="mb-24 lg:mb-32">
<div class="flex items-center justify-between mb-12" data-aos="fade-up">
<h2 class="text-3xl md:text-4xl lg:text-5xl font-bold text-gray-900 dark:text-white">
<span class="relative">
精选项目
<span class="absolute -bottom-2 left-0 w-1/2 h-1 bg-gradient-to-r from-rose-400 to-rose-600 rounded-full"></span>
</span>
</h2>
<a href="/projects" class="text-rose-600 hover:text-rose-700 dark:text-rose-400 dark:hover:text-rose-300 font-medium flex items-center group">
查看全部
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 ml-1 transform group-hover:translate-x-1 transition-transform" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7" />
</svg>
</a>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8 lg:gap-10">
<div
v-for="(project, index) in projects"
:key="project.id"
class="group bg-white dark:bg-gray-800 rounded-3xl shadow-xl hover:shadow-2xl transition-all duration-500 overflow-hidden transform hover:-translate-y-2 hover:scale-[1.02] cursor-pointer"
data-aos="fade-up"
:data-aos-delay="index * 150"
@click="$router.push(`/project/${project.route}`)"
>
<div class="relative h-64 md:h-72 overflow-hidden">
<img
:src="project.cover"
class="w-full h-full object-cover transform transition-transform duration-700 group-hover:scale-110"
alt="Project Cover"
/>
<div class="absolute inset-0 bg-gradient-to-t from-black/60 via-black/20 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500"></div>
<div class="absolute top-4 right-4 flex gap-2">
<span
v-for="(category, idx) in project.category.slice(0, 1)"
:key="idx"
class="px-3 py-1.5 bg-black/50 backdrop-blur-md text-white text-xs font-medium rounded-full"
>
{{ category }}
</span>
<span
v-if="project.category.length > 1"
class="px-3 py-1.5 bg-black/50 backdrop-blur-md text-white text-xs font-medium rounded-full"
>
+{{ project.category.length - 1 }}
</span>
</div>
</div>
<div class="p-7 md:p-8">
<div class="flex flex-wrap gap-2 mb-4">
<span
v-for="tag in project.tags"
:key="tag"
class="px-3 py-1.5 bg-rose-50 dark:bg-rose-900/20 text-rose-600 dark:text-rose-300 text-sm font-medium rounded-lg"
>
{{ tag }}
</span>
</div>
<h3 class="text-xl md:text-2xl font-bold mb-3 text-gray-900 dark:text-white group-hover:text-rose-600 dark:group-hover:text-rose-400 transition-colors">
{{ project.title }}
</h3>
<p class="text-gray-600 dark:text-gray-300 line-clamp-3 mb-6">
{{ project.description }}
</p>
<div class="flex justify-end">
<button class="text-rose-600 dark:text-rose-400 font-medium flex items-center group/btn">
查看详情
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 ml-1 transform group-hover/btn:translate-x-1 transition-transform" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3" />
</svg>
</button>
</div>
</div>
</div>
</div>
</section>
<!-- 客户评价 - 高端卡片布局 -->
<section class="mb-24 lg:mb-32 relative">
<div class="absolute inset-0 bg-rose-50 dark:bg-rose-900/10 rounded-[3rem] -z-10 transform -skew-y-2"></div>
<div class="py-16 md:py-24 px-6 md:px-10">
<div class="text-center mb-16" data-aos="fade-up">
<h2 class="text-3xl md:text-4xl lg:text-5xl font-bold text-gray-900 dark:text-white mb-6">
客户评价
</h2>
<p class="text-lg text-gray-600 dark:text-gray-300 max-w-3xl mx-auto">
我们致力于为客户提供最优质的服务以下是部分客户的真实评价
</p>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 gap-8 lg:gap-12 max-w-6xl mx-auto">
<div
v-for="(testimonial, index) in testimonials"
:key="testimonial.id"
class="bg-white dark:bg-gray-800 p-8 md:p-10 rounded-3xl shadow-xl hover:shadow-2xl transition-all duration-500 transform hover:-translate-y-2"
data-aos="fade-up"
:data-aos-delay="index * 150"
>
<div class="flex items-center gap-6 mb-8">
<div class="relative">
<div class="absolute inset-0 -m-1 rounded-full bg-gradient-to-tr from-rose-400 to-rose-600 blur-sm opacity-70"></div>
<img
:src="testimonial.avatar"
class="w-20 h-20 rounded-full border-4 border-white dark:border-gray-700 object-cover relative z-10"
alt="Client Avatar"
/>
</div>
<div>
<h4 class="text-xl font-bold text-gray-900 dark:text-white">{{ testimonial.author }}</h4>
<p class="text-rose-600 dark:text-rose-400 font-medium">{{ testimonial.role }}</p>
</div>
</div>
<div class="flex gap-1 text-yellow-400 mb-6">
<svg v-for="n in 5" :key="n" class="w-6 h-6" :class="{ 'opacity-40': n > testimonial.rating }" fill="currentColor" viewBox="0 0 20 20">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
</svg>
</div>
<div class="relative">
<svg class="absolute -top-4 -left-4 w-12 h-12 text-rose-200 dark:text-rose-800/30" fill="currentColor" viewBox="0 0 24 24">
<path d="M14.017 21v-7.391c0-5.704 3.731-9.57 8.983-10.609l.995 2.151c-2.432.917-3.995 3.638-3.995 5.849h4v10h-9.983zm-14.017 0v-7.391c0-5.704 3.748-9.57 9-10.609l.996 2.151c-2.433.917-3.996 3.638-3.996 5.849h3.983v10h-9.983z" />
</svg>
<p class="text-gray-700 dark:text-gray-200 text-lg leading-relaxed pl-6">
{{ testimonial.content }}
</p>
</div>
</div>
</div>
</div>
</section>
<!-- 合作伙伴 - 高端品牌墙 -->
<section class="mb-20 lg:mb-28" data-aos="fade-up">
<div class="text-center mb-16">
<h2 class="text-3xl md:text-4xl lg:text-5xl font-bold text-gray-900 dark:text-white mb-6">
<span class="relative">
合作伙伴
<span class="absolute -bottom-2 left-1/4 right-1/4 h-1 bg-gradient-to-r from-rose-400 to-rose-600 rounded-full"></span>
</span>
</h2>
<p class="text-lg text-gray-600 dark:text-gray-300 max-w-3xl mx-auto">
我们与行业领先的技术提供商建立了长期稳定的合作关系
</p>
</div>
<div class="relative overflow-hidden py-8">
<swiper
:modules="[Autoplay]"
:slides-per-view="2"
:space-between="30"
:autoplay="partnerSwiperOptions"
:loop="true"
:breakpoints="breakpoints"
class="partner-swiper"
>
<swiper-slide v-for="(partner, index) in partners" :key="index">
<div
class="flex flex-col items-center justify-center h-48 bg-white dark:bg-gray-800 rounded-2xl p-6 shadow-lg hover:shadow-xl transition-all duration-500 hover:-translate-y-2 border border-gray-100 dark:border-gray-700"
>
<div class="w-full h-24 flex items-center justify-center mb-4">
<img
:src="partner.logo"
class="h-16 object-contain opacity-80 hover:opacity-100 transition-opacity grayscale hover:grayscale-0 transition-all duration-500"
alt="Partner Logo"
/>
</div>
<div class="text-center">
<span class="text-gray-900 dark:text-white text-lg font-bold">{{ partner.name }}</span>
<div class="w-12 h-1 bg-rose-500 mx-auto mt-3 rounded-full"></div>
</div>
</div>
</swiper-slide>
</swiper>
</div>
</section>
</div>
</div>
</template>
<style lang="scss" scoped>
<style scoped>
/* 优化 Swiper 导航样式 */
.swiper-button-next,
.swiper-button-prev {
@apply w-12 h-12 bg-white/80 backdrop-blur-sm rounded-full shadow-lg hover:bg-white transition-colors text-gray-900 hover:text-blue-600;
:deep(.swiper-button-next),
:deep(.swiper-button-prev) {
width: 3.5rem;
height: 3.5rem;
background-color: rgba(255, 255, 255, 0.9);
backdrop-filter: blur(8px);
border-radius: 50%;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
color: #111827;
transition: all 0.3s ease;
}
.swiper-button-next::after,
.swiper-button-prev::after {
@apply text-xl font-bold;
:deep(.swiper-button-next:hover),
:deep(.swiper-button-prev:hover) {
background-color: white;
color: #f43f5e;
transform: scale(1.05);
}
.swiper-pagination-bullet {
@apply w-3 h-3 bg-white/50 hover:bg-white transition-colors;
:deep(.swiper-button-next::after),
:deep(.swiper-button-prev::after) {
font-size: 1.25rem;
font-weight: bold;
}
.swiper-pagination-bullet-active {
@apply bg-blue-600;
:deep(.swiper-pagination-bullet) {
width: 10px;
height: 10px;
background-color: rgba(255, 255, 255, 0.5);
transition: all 0.3s ease;
}
:deep(.swiper-pagination-bullet-active) {
background-color: #f43f5e;
width: 24px;
border-radius: 5px;
}
/* 合作伙伴轮播样式 */
.partner-swiper :deep(.swiper-slide) {
height: auto;
transition: all 0.5s ease;
}
/* 添加轻奢风格的渐变背景和阴影效果 */
.bg-gradient-luxury {
background: linear-gradient(135deg, #f6f8fb 0%, #f0f4f8 100%);
}
/* 暗色模式下的轻奢风格 */
@media (prefers-color-scheme: dark) {
.bg-gradient-luxury {
background: linear-gradient(135deg, #1a1d23 0%, #111827 100%);
}
}
</style>

View File

@@ -1,221 +0,0 @@
<script setup>
import { Swiper, SwiperSlide } from 'swiper/vue'
import { Autoplay, Pagination, Navigation, EffectCreative } from 'swiper/modules'
import AOS from 'aos'
import 'swiper/css'
import 'swiper/css/pagination'
import 'swiper/css/navigation'
import {onMounted} from "vue";
const modules = [Autoplay, Pagination, Navigation, EffectCreative]
onMounted(() => {
AOS.init({
duration: 1000,
offset: 120,
easing: 'ease-out-quart'
})
})
const projects = [
{
id: 1,
title: '电商平台',
tags: ['Vue3', 'Node.js'],
cover: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280',
route: '/project/1'
},
{
id: 2,
title: 'OA系统',
tags: ['React', 'Java'],
cover: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280',
route: '/project/2'
}
]
const testimonials = [
{
id: 1,
author: '某科技公司',
role: '技术总监',
rating: 5,
content: '项目交付非常专业,技术方案极具创新性,团队响应速度超出预期',
avatar: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280'
},
{
id: 2,
author: '某金融机构',
role: '技术负责人',
rating: 4,
content: '系统稳定性表现优异,故障响应机制完善,合作体验良好',
avatar: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280'
}
]
const partners = [
{ name: '腾讯云', logo: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280' },
{ name: '阿里云', logo: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280' },
{ name: '华为云', logo: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280' },
{ name: 'Microsoft', logo: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280' },
{ name: '腾讯云', logo: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280' },
{ name: '阿里云', logo: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280' },
{ name: '华为云', logo: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280' },
{ name: 'Microsoft', logo: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280' },
{ name: '腾讯云', logo: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280' },
{ name: '阿里云', logo: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280' },
{ name: '华为云', logo: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280' },
{ name: 'Microsoft', logo: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280' },
]
</script>
<template>
<div class="container mx-auto px-4">
<!-- 轮播图 -->
<div class="mb-16" data-aos="fade-up">
<swiper
:modules="modules"
:autoplay="{ delay: 5000 }"
:pagination="{ clickable: true }"
:navigation="true"
class="rounded-xl overflow-hidden"
>
<swiper-slide
v-for="(item, index) in 3"
:key="item"
@click="$router.push(projects[index % 2].route)"
class="group relative cursor-pointer"
>
<div class="relative h-64 md:h-96">
<img
:src="`https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280?text=Banner${item}`"
class="w-full h-full object-cover transition-transform duration-500 group-hover:scale-105"
/>
<div class="absolute inset-0 bg-gradient-to-t from-black/60 to-transparent p-6 flex flex-col justify-end">
<h3 class="text-2xl font-bold text-white mb-2 drop-shadow-xl">
{{ projects[index % 2].title }}
</h3>
<div class="flex gap-2">
<span
v-for="tag in projects[index % 2].tags"
class="px-3 py-1 bg-white/20 backdrop-blur-sm text-white rounded-full text-sm"
>
{{ tag }}
</span>
</div>
</div>
</div>
</swiper-slide>
</swiper>
</div>
<!-- 精选项目 -->
<section class="mb-20">
<h2 class="text-3xl font-bold mb-8" data-aos="fade-up">精选项目</h2>
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
<div
v-for="(project, index) in projects"
:key="project.id"
class="bg-card-gradient backdrop-blur-lg border border-white/20 rounded-xl shadow-lg overflow-hidden transition-all duration-300 hover:scale-[1.02] hover:shadow-2xl hover:border-blue-400/30 group text-gray-100"
data-aos="fade-up"
:data-aos-delay="index * 100"
@click="$router.push(project.route)"
>
<img :src="project.cover" class="w-full h-48 object-cover" />
<div class="p-4">
<h3 class="text-xl font-semibold mb-2">{{ project.title }}</h3>
<div class="flex flex-wrap gap-2">
<span
v-for="tag in project.tags"
class="px-3 py-1 bg-blue-500/20 text-blue-300 rounded-full text-sm backdrop-blur-sm"
>
{{ tag }}
</span>
</div>
</div>
</div>
</div>
</section>
<!-- 客户评价 -->
<section class="mb-20" data-aos="fade-up">
<h2 class="text-3xl font-bold mb-8">客户评价</h2>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<!-- 客户评价模块修复 -->
<div
v-for="testimonial in testimonials"
:key="testimonial.id"
class="bg-card-gradient backdrop-blur-lg border border-white/20 p-8 rounded-2xl transition-all duration-300 hover:border-blue-400/50 hover:shadow-2xl text-gray-100"
>
<!-- 内容结构保持不变 -->
<div class="flex items-start gap-5 mb-6">
<img :src="testimonial.avatar" class="w-16 h-16 rounded-2xl border-2 border-white/30">
<div class="flex-1">
<h4 class="text-lg font-bold text-white mb-1">{{ testimonial.author }}</h4>
<p class="text-sm text-blue-200 mb-2">{{ testimonial.role }}</p>
<div class="flex gap-1 text-yellow-400">
<span v-for="n in 5" :key="n"
:class="n <= testimonial.rating ? 'opacity-100' : 'opacity-30'">
</span>
</div>
</div>
</div>
<p class="text-white/90 leading-relaxed text-left indent-8">{{ testimonial.content }}</p>
</div>
</div>
</section>
<!-- 合作伙伴横向滚动 -->
<section class="mb-20" data-aos="fade-up">
<h2 class="text-3xl font-bold mb-8">合作伙伴</h2>
<swiper
:modules="modules"
:slides-per-view="3"
:space-between="30"
:autoplay="{ delay: 2500 }"
class="py-4"
>
<swiper-slide v-for="(partner, index) in partners" :key="index">
<div class="flex items-center justify-center h-32 bg-partner-gradient border border-white/20 rounded-xl p-4 transition-all hover:scale-105 hover:border-blue-400/30">
<img :src="partner.logo" class="h-full w-full object-contain opacity-80 hover:opacity-100 transition-opacity"/>
</div>
</swiper-slide>
</swiper>
</section>
</div>
</template>
<style lang="scss" scoped>
.swiper-button-prev,
.swiper-button-next {
@apply text-white hover:text-blue-400;
}
.swiper-pagination-bullet {
@apply bg-white opacity-80;
}
.swiper-pagination-bullet-active {
@apply bg-blue-500;
}
.bg-glass {
background: rgba(255, 255, 255, 0.08);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
}
.shadow-glass {
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.15);
}
@keyframes gradient-flow {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
</style>

View File

@@ -1,39 +1,325 @@
<script setup>
import { ref, onMounted } from 'vue'
import { useUserStore } from '@/stores/user'
import AOS from 'aos'
import 'aos/dist/aos.css'
// Initialize userStore outside of userData to avoid conditional hook call
const userStore = useUserStore()
onMounted(() => {
AOS.init({
duration: 1200,
offset: 120,
easing: 'ease-out-cubic',
once: false
})
})
// 模拟用户数据
const userData = ref({
username: userStore.user?.username || '张三',
avatar: userStore.user?.avatar || 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280',
createdAt: userStore.user?.createdAt || '2023-01-15',
lastLogin: userStore.user?.lastLogin || '2023-06-20',
email: 'user@example.com',
phone: '138****1234',
role: '企业客户',
projects: 5,
favorites: 12
})
const userStats = [
{ label: '已购项目', value: userData.value.projects, icon: 'shopping-bag' },
{ label: '收藏项目', value: userData.value.favorites, icon: 'heart' },
{ label: '账户类型', value: userData.value.role, icon: 'user' }
]
const recentProjects = [
{ id: 1, title: '电商平台开发', date: '2023-05-15', status: '进行中' },
{ id: 2, title: 'CRM系统定制', date: '2023-04-10', status: '已完成' },
{ id: 3, title: '数据分析平台', date: '2023-03-22', status: '已完成' }
]
const activeTab = ref('profile')
</script>
<template>
<a-card class="personal-card">
<a-row :gutter="24">
<a-col :span="8">
<a-avatar
:size="120"
:src="userStore.user?.avatar || 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280'"
/>
</a-col>
<a-col :span="16">
<h2 class="username">{{ userStore.user?.username || '未命名用户' }}</h2>
<a-descriptions :column="1">
<a-descriptions-item label="注册时间">
{{ userStore.user?.createdAt }}
</a-descriptions-item>
<a-descriptions-item label="最后登录">
{{ userStore.user?.lastLogin }}
</a-descriptions-item>
</a-descriptions>
</a-col>
</a-row>
</a-card>
<div class="bg-gradient-to-b from-gray-50 to-white dark:from-gray-900 dark:to-gray-800 min-h-screen py-12">
<div class="max-w-5xl mx-auto px-6">
<!-- 个人信息卡片 -->
<div
class="bg-white dark:bg-gray-800 rounded-3xl shadow-xl overflow-hidden mb-10"
data-aos="fade-up"
>
<div class="relative h-48 bg-gradient-to-r from-rose-400 to-rose-600">
<!-- 装饰图案 -->
<div class="absolute inset-0 opacity-20">
<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%">
<defs>
<pattern id="pattern" width="40" height="40" patternUnits="userSpaceOnUse">
<circle cx="20" cy="20" r="2" fill="white" />
</pattern>
</defs>
<rect width="100%" height="100%" fill="url(#pattern)" />
</svg>
</div>
<!-- 编辑按钮 -->
<button class="absolute top-4 right-4 bg-white/20 backdrop-blur-md text-white rounded-full p-2 hover:bg-white/30 transition-colors">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z" />
</svg>
</button>
</div>
<div class="relative px-8 pb-8">
<!-- 头像 -->
<div class="absolute -top-16 left-8">
<div class="relative">
<div class="absolute -inset-1 rounded-full bg-white dark:bg-gray-800"></div>
<div class="relative w-32 h-32 rounded-full overflow-hidden border-4 border-white dark:border-gray-800 shadow-lg">
<img
:src="userData.avatar"
:alt="userData.username"
class="w-full h-full object-cover"
/>
</div>
</div>
</div>
<!-- 用户信息 -->
<div class="pt-20">
<div class="flex flex-col md:flex-row md:items-center md:justify-between mb-6">
<div>
<h1 class="text-2xl md:text-3xl font-bold text-gray-900 dark:text-white mb-1">{{ userData.username }}</h1>
<p class="text-rose-600 dark:text-rose-400">{{ userData.role }}</p>
</div>
<div class="mt-4 md:mt-0">
<button class="px-6 py-2 bg-rose-600 hover:bg-rose-700 text-white rounded-full shadow-md hover:shadow-lg transition-all duration-300">
升级会员
</button>
</div>
</div>
<!-- 用户统计 -->
<div class="grid grid-cols-1 md:grid-cols-3 gap-6 mb-6">
<div
v-for="(stat, index) in userStats"
:key="index"
class="bg-gray-50 dark:bg-gray-700/50 rounded-2xl p-4 flex items-center"
>
<div class="w-12 h-12 rounded-xl bg-rose-100 dark:bg-rose-900/30 flex items-center justify-center text-rose-600 dark:text-rose-400 mr-4">
<svg v-if="stat.icon === 'shopping-bag'" xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M16 11V7a4 4 0 00-8 0v4M5 9h14l1 12H4L5 9z" />
</svg>
<svg v-else-if="stat.icon === 'heart'" xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z" />
</svg>
<svg v-else-if="stat.icon === 'user'" xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" />
</svg>
</div>
<div>
<p class="text-sm text-gray-500 dark:text-gray-400">{{ stat.label }}</p>
<p class="text-lg font-bold text-gray-900 dark:text-white">{{ stat.value }}</p>
</div>
</div>
</div>
<!-- 标签页导航 -->
<div class="border-b border-gray-200 dark:border-gray-700">
<nav class="flex space-x-8">
<button
@click="activeTab = 'profile'"
class="py-4 px-1 border-b-2 font-medium text-sm transition-colors duration-200"
:class="activeTab === 'profile' ? 'border-rose-500 text-rose-600 dark:text-rose-400' : 'border-transparent text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300'"
>
个人资料
</button>
<button
@click="activeTab = 'projects'"
class="py-4 px-1 border-b-2 font-medium text-sm transition-colors duration-200"
:class="activeTab === 'projects' ? 'border-rose-500 text-rose-600 dark:text-rose-400' : 'border-transparent text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300'"
>
我的项目
</button>
<button
@click="activeTab = 'settings'"
class="py-4 px-1 border-b-2 font-medium text-sm transition-colors duration-200"
:class="activeTab === 'settings' ? 'border-rose-500 text-rose-600 dark:text-rose-400' : 'border-transparent text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300'"
>
账户设置
</button>
</nav>
</div>
</div>
</div>
</div>
<!-- 标签页内容 -->
<div class="mb-10" data-aos="fade-up">
<!-- 个人资料 -->
<div v-if="activeTab === 'profile'" class="space-y-6">
<div class="bg-white dark:bg-gray-800 rounded-2xl shadow-lg p-6">
<h2 class="text-xl font-bold mb-4 text-gray-900 dark:text-white">基本信息</h2>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<div>
<p class="text-sm text-gray-500 dark:text-gray-400 mb-1">用户名</p>
<p class="text-gray-900 dark:text-white">{{ userData.username }}</p>
</div>
<div>
<p class="text-sm text-gray-500 dark:text-gray-400 mb-1">邮箱</p>
<p class="text-gray-900 dark:text-white">{{ userData.email }}</p>
</div>
<div>
<p class="text-sm text-gray-500 dark:text-gray-400 mb-1">手机号</p>
<p class="text-gray-900 dark:text-white">{{ userData.phone }}</p>
</div>
<div>
<p class="text-sm text-gray-500 dark:text-gray-400 mb-1">注册时间</p>
<p class="text-gray-900 dark:text-white">{{ userData.createdAt }}</p>
</div>
</div>
</div>
<div class="bg-white dark:bg-gray-800 rounded-2xl shadow-lg p-6">
<h2 class="text-xl font-bold mb-4 text-gray-900 dark:text-white">账户安全</h2>
<div class="space-y-4">
<div class="flex items-center justify-between">
<div>
<p class="font-medium text-gray-900 dark:text-white">登录密码</p>
<p class="text-sm text-gray-500 dark:text-gray-400">上次修改时间: 2023-03-15</p>
</div>
<button class="text-rose-600 dark:text-rose-400 hover:text-rose-700 dark:hover:text-rose-300 font-medium">
修改
</button>
</div>
<div class="flex items-center justify-between">
<div>
<p class="font-medium text-gray-900 dark:text-white">手机验证</p>
<p class="text-sm text-gray-500 dark:text-gray-400">已绑定: {{ userData.phone }}</p>
</div>
<button class="text-rose-600 dark:text-rose-400 hover:text-rose-700 dark:hover:text-rose-300 font-medium">
修改
</button>
</div>
</div>
</div>
</div>
<!-- 我的项目 -->
<div v-else-if="activeTab === 'projects'" class="space-y-6">
<div class="bg-white dark:bg-gray-800 rounded-2xl shadow-lg p-6">
<h2 class="text-xl font-bold mb-6 text-gray-900 dark:text-white">最近项目</h2>
<div class="space-y-4">
<div
v-for="project in recentProjects"
:key="project.id"
class="flex items-center justify-between p-4 border border-gray-100 dark:border-gray-700 rounded-xl hover:bg-gray-50 dark:hover:bg-gray-700/50 transition-colors"
>
<div>
<h3 class="font-medium text-gray-900 dark:text-white">{{ project.title }}</h3>
<p class="text-sm text-gray-500 dark:text-gray-400">{{ project.date }}</p>
</div>
<div class="flex items-center">
<span
class="px-3 py-1 rounded-full text-xs font-medium"
:class="project.status === '进行中' ? 'bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-300' : 'bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300'"
>
{{ project.status }}
</span>
<button class="ml-4 text-gray-400 hover:text-gray-500 dark:text-gray-500 dark:hover:text-gray-400">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7" />
</svg>
</button>
</div>
</div>
</div>
<div class="mt-6 text-center">
<button class="text-rose-600 dark:text-rose-400 hover:text-rose-700 dark:hover:text-rose-300 font-medium flex items-center mx-auto">
查看全部项目
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 ml-1" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3" />
</svg>
</button>
</div>
</div>
</div>
<!-- 账户设置 -->
<div v-else-if="activeTab === 'settings'" class="space-y-6">
<div class="bg-white dark:bg-gray-800 rounded-2xl shadow-lg p-6">
<h2 class="text-xl font-bold mb-6 text-gray-900 dark:text-white">通知设置</h2>
<div class="space-y-4">
<div class="flex items-center justify-between">
<div>
<p class="font-medium text-gray-900 dark:text-white">系统通知</p>
<p class="text-sm text-gray-500 dark:text-gray-400">接收系统更新和安全提醒</p>
</div>
<label class="relative inline-flex items-center cursor-pointer">
<input type="checkbox" value="" class="sr-only peer" checked>
<div class="w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-rose-300 dark:peer-focus:ring-rose-800 rounded-full peer dark:bg-gray-700 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-rose-600"></div>
</label>
</div>
<div class="flex items-center justify-between">
<div>
<p class="font-medium text-gray-900 dark:text-white">项目更新</p>
<p class="text-sm text-gray-500 dark:text-gray-400">接收项目进度和更新通知</p>
</div>
<label class="relative inline-flex items-center cursor-pointer">
<input type="checkbox" value="" class="sr-only peer" checked>
<div class="w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-rose-300 dark:peer-focus:ring-rose-800 rounded-full peer dark:bg-gray-700 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-rose-600"></div>
</label>
</div>
<div class="flex items-center justify-between">
<div>
<p class="font-medium text-gray-900 dark:text-white">营销信息</p>
<p class="text-sm text-gray-500 dark:text-gray-400">接收优惠和促销信息</p>
</div>
<label class="relative inline-flex items-center cursor-pointer">
<input type="checkbox" value="" class="sr-only peer">
<div class="w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-rose-300 dark:peer-focus:ring-rose-800 rounded-full peer dark:bg-gray-700 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-rose-600"></div>
</label>
</div>
</div>
</div>
<div class="bg-white dark:bg-gray-800 rounded-2xl shadow-lg p-6">
<h2 class="text-xl font-bold mb-6 text-gray-900 dark:text-white">隐私设置</h2>
<div class="space-y-4">
<div class="flex items-center justify-between">
<div>
<p class="font-medium text-gray-900 dark:text-white">个人资料可见性</p>
<p class="text-sm text-gray-500 dark:text-gray-400">控制谁可以查看您的个人资料</p>
</div>
<select class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-rose-500 focus:border-rose-500 block p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white">
<option value="public">公开</option>
<option value="friends">仅好友</option>
<option value="private">私密</option>
</select>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<style scoped>
.personal-card {
margin: 24px;
/* 添加轻奢风格的渐变背景和阴影效果 */
.bg-gradient-luxury {
background: linear-gradient(135deg, #f6f8fb 0%, #f0f4f8 100%);
}
.username {
font-size: 24px;
margin-bottom: 16px;
/* 暗色模式下的轻奢风格 */
@media (prefers-color-scheme: dark) {
.bg-gradient-luxury {
background: linear-gradient(135deg, #1a1d23 0%, #111827 100%);
}
}
</style>
</style>

View File

@@ -1,12 +1,233 @@
<script setup>
// 服务项目页面内容
import { ref, onMounted } from 'vue'
import AOS from 'aos'
import 'aos/dist/aos.css'
onMounted(() => {
AOS.init({
duration: 1200,
offset: 120,
easing: 'ease-out-cubic',
once: false
})
})
const services = [
{
id: 1,
title: '企业数字化转型',
icon: 'chart-network',
description: '为企业提供全方位的数字化转型咨询与实施服务,包括业务流程优化、系统架构设计、数据治理等',
features: [
'业务流程数字化',
'企业架构规划',
'数字化成熟度评估',
'转型路线图制定',
'变革管理'
],
image: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280'
},
{
id: 2,
title: '定制化软件开发',
icon: 'code',
description: '根据客户需求提供量身定制的软件开发服务,从需求分析、设计、开发到测试、部署和维护的全流程服务',
features: [
'Web应用开发',
'移动应用开发',
'企业管理系统',
'API集成服务',
'遗留系统现代化'
],
image: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280'
},
{
id: 3,
title: '数据分析与可视化',
icon: 'chart-pie',
description: '帮助企业挖掘数据价值,通过高级分析和直观的可视化展示,为决策提供数据支持',
features: [
'数据仓库设计',
'商业智能解决方案',
'预测分析模型',
'实时数据看板',
'数据挖掘服务'
],
image: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280'
},
{
id: 4,
title: '云服务与DevOps',
icon: 'cloud',
description: '提供云迁移、云原生应用开发和DevOps实践导入服务帮助企业提升IT运维效率和系统可靠性',
features: [
'云架构设计',
'云迁移服务',
'CI/CD流水线搭建',
'容器化与编排',
'微服务架构实施'
],
image: 'https://pic.rmb.bdstatic.com/bjh/80852bfe7c321988191838517ba64e309354.jpeg@h_1280'
}
]
const activeService = ref(services[0])
const setActiveService = (service) => {
activeService.value = service
}
</script>
<template>
<main class="p-6 max-w-4xl mx-auto">
<h1 class="text-3xl font-bold mb-6">服务项目</h1>
<section class="prose">
<p>这里是服务项目页面内容...</p>
</section>
</main>
</template>
<div class="bg-gradient-to-b from-gray-50 to-white dark:from-gray-900 dark:to-gray-800 min-h-screen py-12">
<div class="max-w-6xl mx-auto px-6">
<!-- 页面标题 -->
<div class="text-center mb-16" data-aos="fade-up">
<h1 class="text-4xl md:text-5xl font-bold mb-6 text-gray-900 dark:text-white">
<span class="relative">
服务项目
<span class="absolute -bottom-2 left-0 right-0 mx-auto w-1/3 h-1 bg-gradient-to-r from-rose-400 to-rose-600 rounded-full"></span>
</span>
</h1>
<p class="text-lg text-gray-600 dark:text-gray-300 max-w-3xl mx-auto">
我们提供全方位的企业数字化解决方案助力企业在数字时代实现创新与增长
</p>
</div>
<!-- 服务概览 -->
<section class="mb-24" data-aos="fade-up">
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6">
<div
v-for="service in services"
:key="service.id"
class="bg-white dark:bg-gray-800 rounded-3xl shadow-lg hover:shadow-2xl transition-all duration-500 p-6 cursor-pointer transform hover:-translate-y-2"
:class="{ 'ring-2 ring-rose-500 dark:ring-rose-400': activeService.id === service.id }"
@click="setActiveService(service)"
data-aos="fade-up"
>
<div class="flex items-center mb-4">
<div class="w-12 h-12 rounded-2xl bg-rose-100 dark:bg-rose-900/30 flex items-center justify-center text-rose-600 dark:text-rose-400 mr-4">
<svg v-if="service.icon === 'chart-network'" xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z" />
</svg>
<svg v-else-if="service.icon === 'code'" xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4" />
</svg>
<svg v-else-if="service.icon === 'chart-pie'" xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 3.055A9.001 9.001 0 1020.945 13H11V3.055z" />
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20.488 9H15V3.512A9.025 9.025 0 0120.488 9z" />
</svg>
<svg v-else-if="service.icon === 'cloud'" xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 15a4 4 0 004 4h9a5 5 0 10-.1-9.999 5.002 5.002 0 10-9.78 2.096A4.001 4.001 0 003 15z" />
</svg>
</div>
<h3 class="text-lg font-bold text-gray-900 dark:text-white">{{ service.title }}</h3>
</div>
<p class="text-gray-600 dark:text-gray-300 text-sm line-clamp-3">{{ service.description }}</p>
</div>
</div>
</section>
<!-- 服务详情 -->
<section class="mb-24" data-aos="fade-up">
<div class="bg-white dark:bg-gray-800 rounded-3xl shadow-xl overflow-hidden">
<div class="grid grid-cols-1 lg:grid-cols-2">
<div class="p-8 md:p-10">
<h2 class="text-2xl md:text-3xl font-bold mb-6 text-gray-900 dark:text-white">{{ activeService.title }}</h2>
<p class="text-gray-600 dark:text-gray-300 mb-8 leading-relaxed">{{ activeService.description }}</p>
<h4 class="text-lg font-semibold mb-4 text-gray-900 dark:text-white">核心服务内容</h4>
<ul class="space-y-3">
<li
v-for="(feature, index) in activeService.features"
:key="index"
class="flex items-start"
>
<div class="flex-shrink-0 w-6 h-6 rounded-full bg-rose-100 dark:bg-rose-900/30 flex items-center justify-center text-rose-600 dark:text-rose-400 mr-3">
<svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7" />
</svg>
</div>
<span class="text-gray-700 dark:text-gray-300">{{ feature }}</span>
</li>
</ul>
<button class="mt-10 px-8 py-3 bg-rose-600 hover:bg-rose-700 text-white rounded-full shadow-lg hover:shadow-xl transition-all duration-300 flex items-center group">
<span>了解更多</span>
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 ml-2 transform group-hover:translate-x-1 transition-transform" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3" />
</svg>
</button>
</div>
<div class="relative h-64 lg:h-auto">
<div class="absolute inset-0 bg-gradient-to-r from-rose-400 to-rose-600 opacity-20"></div>
<img
:src="activeService.image"
:alt="activeService.title"
class="w-full h-full object-cover relative z-10"
/>
</div>
</div>
</div>
</section>
<!-- 服务流程 -->
<section class="mb-24" data-aos="fade-up">
<h2 class="text-2xl md:text-3xl font-bold mb-10 text-gray-900 dark:text-white text-center">
<span class="relative">
服务流程
<span class="absolute -bottom-2 left-1/4 right-1/4 h-1 bg-gradient-to-r from-rose-400 to-rose-600 rounded-full"></span>
</span>
</h2>
<div class="grid grid-cols-1 md:grid-cols-3 lg:grid-cols-6 gap-6">
<div
v-for="(step, index) in ['需求分析', '方案设计', '开发实施', '测试验收', '部署上线', '持续优化']"
:key="index"
class="bg-white dark:bg-gray-800 rounded-2xl shadow-lg hover:shadow-xl transition-all duration-500 p-6 text-center"
data-aos="fade-up"
:data-aos-delay="index * 100"
>
<div class="w-16 h-16 rounded-full bg-rose-100 dark:bg-rose-900/30 flex items-center justify-center text-rose-600 dark:text-rose-400 mx-auto mb-4">
<span class="text-xl font-bold">{{ index + 1 }}</span>
</div>
<h3 class="text-lg font-bold text-gray-900 dark:text-white mb-2">{{ step }}</h3>
<div class="h-1 w-12 bg-rose-200 dark:bg-rose-800/50 mx-auto"></div>
</div>
</div>
</section>
<!-- 咨询服务 -->
<section data-aos="fade-up">
<div class="bg-gradient-to-r from-rose-50 to-pink-50 dark:from-rose-900/10 dark:to-pink-900/10 rounded-3xl p-8 md:p-10 text-center">
<h2 class="text-2xl md:text-3xl font-bold mb-6 text-gray-900 dark:text-white">免费咨询</h2>
<p class="text-gray-600 dark:text-gray-300 mb-8 max-w-2xl mx-auto">
我们提供免费的初步咨询服务了解您的业务需求为您提供专业的解决方案建议
</p>
<button class="px-8 py-3 bg-rose-600 hover:bg-rose-700 text-white rounded-full shadow-lg hover:shadow-xl transition-all duration-300 flex items-center mx-auto group">
<span>立即预约</span>
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 ml-2 transform group-hover:translate-x-1 transition-transform" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3" />
</svg>
</button>
</div>
</section>
</div>
</div>
</template>
<style scoped>
/* 添加轻奢风格的渐变背景和阴影效果 */
.bg-gradient-luxury {
background: linear-gradient(135deg, #f6f8fb 0%, #f0f4f8 100%);
}
/* 暗色模式下的轻奢风格 */
@media (prefers-color-scheme: dark) {
.bg-gradient-luxury {
background: linear-gradient(135deg, #1a1d23 0%, #111827 100%);
}
}
</style>