Oroqen-Vue/src/views/Home.vue
2025-08-07 21:29:04 +08:00

554 lines
14 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="home">
<!-- 英雄区域 -->
<section class="hero">
<div class="hero-background ethnic-pattern">
<div class="container">
<div class="hero-content">
<div class="hero-text">
<h1 class="hero-title">
传承千年文化
<br>
<span class="highlight">鄂伦春族的瑰宝</span>
</h1>
<p class="hero-description">
探索中国东北森林深处的古老民族文化感受狩猎文明的独特魅力
体验桦皮工艺传统刺绣等非物质文化遗产的精湛技艺
</p>
<div class="hero-actions">
<router-link to="/culture" class="btn-primary hero-btn">
探索文化
</router-link>
<router-link to="/products" class="btn-secondary hero-btn">
精品商城
</router-link>
</div>
</div>
<div class="hero-image">
<div class="hero-image-placeholder">
<svg viewBox="0 0 400 300" class="hero-svg">
<!-- 森林背景 -->
<rect width="400" height="300" fill="#2d5016" opacity="0.1"/>
<!-- 传统建筑轮廓 -->
<path d="M50 250 L150 180 L250 250 L350 180 L350 280 L50 280 Z"
fill="var(--secondary-color)" opacity="0.6"/>
<!-- 装饰图案 -->
<circle cx="200" cy="150" r="40" fill="var(--primary-color)" opacity="0.3"/>
<text x="200" y="160" text-anchor="middle" fill="var(--primary-color)"
font-size="24" font-weight="bold"></text>
</svg>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- 特色板块 -->
<section class="features section">
<div class="container">
<h2 class="section-title">文化瑰宝</h2>
<div class="features-grid">
<div class="feature-card card" @click="$router.push('/culture')">
<div class="feature-icon">
<svg viewBox="0 0 64 64" width="48" height="48">
<circle cx="32" cy="32" r="28" fill="var(--primary-color)" opacity="0.2"/>
<path d="M20 32 L32 20 L44 32 L32 44 Z" fill="var(--primary-color)"/>
</svg>
</div>
<h3 class="feature-title">传统文化</h3>
<p class="feature-description">
深入了解鄂伦春族的狩猎文化节庆仪式饮食习俗和居住文化
</p>
</div>
<div class="feature-card card" @click="$router.push('/heritage')">
<div class="feature-icon">
<svg viewBox="0 0 64 64" width="48" height="48">
<circle cx="32" cy="32" r="28" fill="var(--secondary-color)" opacity="0.2"/>
<rect x="24" y="24" width="16" height="16" fill="var(--secondary-color)"/>
</svg>
</div>
<h3 class="feature-title">非遗传承</h3>
<p class="feature-description">
桦皮制作技艺传统刺绣民族歌舞等非物质文化遗产的传承与保护
</p>
</div>
<div class="feature-card card" @click="$router.push('/products')">
<div class="feature-icon">
<svg viewBox="0 0 64 64" width="48" height="48">
<circle cx="32" cy="32" r="28" fill="var(--accent-color)" opacity="0.3"/>
<path d="M16 24 L48 24 L44 48 L20 48 Z" fill="var(--primary-color)"/>
</svg>
</div>
<h3 class="feature-title">特色产品</h3>
<p class="feature-description">
精美手工艺品传统服饰特色食品和现代文创产品
</p>
</div>
</div>
</div>
</section>
<!-- 热门产品 -->
<section class="popular-products section" style="background-color: var(--background-light);">
<div class="container">
<h2 class="section-title">热门产品</h2>
<div class="products-grid">
<div v-for="product in featuredProducts" :key="product.id"
class="product-card card" @click="$router.push(`/product/${product.id}`)">
<div class="product-image">
<div class="product-image-placeholder">
<svg viewBox="0 0 200 150" width="100%" height="150">
<rect width="200" height="150" :fill="product.color" opacity="0.3"/>
<text x="100" y="80" text-anchor="middle" :fill="product.color"
font-size="14" font-weight="bold">{{ product.name }}</text>
</svg>
</div>
</div>
<div class="product-info">
<h3 class="product-name">{{ product.name }}</h3>
<p class="product-description">{{ product.description }}</p>
<div class="product-footer">
<span class="product-price">¥{{ product.price }}</span>
<el-button type="primary" size="small" @click.stop="addToCart(product)">
加入购物车
</el-button>
</div>
</div>
</div>
</div>
<div class="text-center" style="margin-top: 2rem;">
<router-link to="/products" class="btn-primary">查看更多产品</router-link>
</div>
</div>
</section>
<!-- 文化故事 -->
<section class="culture-stories section">
<div class="container">
<h2 class="section-title">文化故事</h2>
<div class="stories-grid">
<div v-for="story in stories" :key="story.id" class="story-card card">
<div class="story-image">
<div class="story-image-placeholder">
<svg viewBox="0 0 300 200" width="100%" height="200">
<rect width="300" height="200" :fill="story.color" opacity="0.2"/>
<circle cx="150" cy="100" r="40" :fill="story.color" opacity="0.5"/>
<text x="150" y="110" text-anchor="middle" :fill="story.color"
font-size="16" font-weight="bold">{{ story.title.charAt(0) }}</text>
</svg>
</div>
</div>
<div class="story-content">
<h3 class="story-title">{{ story.title }}</h3>
<p class="story-excerpt">{{ story.excerpt }}</p>
<div class="story-meta">
<span class="story-date">{{ story.date }}</span>
<a href="#" class="story-link">阅读更多</a>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- 统计数据 -->
<section class="stats section" style="background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));">
<div class="container">
<div class="stats-grid">
<div class="stat-item">
<div class="stat-number">1000+</div>
<div class="stat-label">文化资料</div>
</div>
<div class="stat-item">
<div class="stat-number">50+</div>
<div class="stat-label">非遗项目</div>
</div>
<div class="stat-item">
<div class="stat-number">200+</div>
<div class="stat-label">特色产品</div>
</div>
<div class="stat-item">
<div class="stat-number">10000+</div>
<div class="stat-label">用户关注</div>
</div>
</div>
</div>
</section>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { useMainStore } from '../stores'
import { ElMessage } from 'element-plus'
const store = useMainStore()
// 特色产品数据
const featuredProducts = ref([
{
id: 1,
name: '桦皮工艺盒',
description: '传统桦皮制作工艺精美实用',
price: 168,
color: '#8b4513'
},
{
id: 2,
name: '鄂伦春族刺绣',
description: '手工刺绣图案精美寓意吉祥',
price: 288,
color: '#2d5016'
},
{
id: 3,
name: '传统服饰',
description: '复刻传统服饰展现民族风采',
price: 588,
color: '#8b4513'
},
{
id: 4,
name: '木雕摆件',
description: '手工雕刻展现森林文化',
price: 128,
color: '#2d5016'
}
])
// 文化故事数据
const stories = ref([
{
id: 1,
title: '森林中的狩猎文化',
excerpt: '鄂伦春族世代生活在大兴安岭的森林中形成了独特的狩猎文化和生活方式...',
date: '2024-01-15',
color: '#2d5016'
},
{
id: 2,
title: '桦皮工艺的传承',
excerpt: '桦皮是鄂伦春族生活中不可缺少的材料从日用品到艺术品展现了民族智慧...',
date: '2024-01-10',
color: '#8b4513'
},
{
id: 3,
title: '篝火节的欢歌',
excerpt: '每年的篝火节是鄂伦春族最重要的节日族人们围着篝火载歌载舞...',
date: '2024-01-05',
color: '#2d5016'
}
])
// 添加到购物车
const addToCart = (product: any) => {
store.addToCart(product)
ElMessage.success('已添加到购物车')
}
</script>
<style scoped>
/* 英雄区域 */
.hero {
position: relative;
min-height: 600px;
display: flex;
align-items: center;
overflow: hidden;
}
.hero-background {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(135deg, rgba(45, 80, 22, 0.9), rgba(139, 69, 19, 0.8));
}
.hero-content {
position: relative;
z-index: 2;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 3rem;
align-items: center;
min-height: 500px;
}
.hero-title {
font-size: 3.5rem;
font-weight: bold;
color: white;
margin-bottom: 1.5rem;
line-height: 1.2;
}
.highlight {
color: var(--accent-color);
}
.hero-description {
font-size: 1.2rem;
color: rgba(255, 255, 255, 0.9);
margin-bottom: 2rem;
line-height: 1.6;
}
.hero-actions {
display: flex;
gap: 1rem;
}
.hero-btn {
padding: 15px 30px;
font-size: 1.1rem;
text-decoration: none;
border-radius: 8px;
transition: all 0.3s ease;
}
.btn-secondary {
background: transparent;
color: white;
border: 2px solid white;
}
.btn-secondary:hover {
background: white;
color: var(--primary-color);
}
.hero-image-placeholder {
width: 100%;
height: 400px;
background: rgba(255, 255, 255, 0.1);
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
}
.hero-svg {
width: 100%;
height: 100%;
}
/* 特色板块 */
.features-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
}
.feature-card {
padding: 2rem;
text-align: center;
cursor: pointer;
transition: all 0.3s ease;
}
.feature-card:hover {
transform: translateY(-10px);
}
.feature-icon {
margin-bottom: 1.5rem;
display: flex;
justify-content: center;
}
.feature-title {
font-size: 1.5rem;
font-weight: bold;
color: var(--primary-color);
margin-bottom: 1rem;
}
.feature-description {
color: var(--text-light);
line-height: 1.6;
}
/* 产品网格 */
.products-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 2rem;
}
.product-card {
cursor: pointer;
transition: all 0.3s ease;
}
.product-image-placeholder {
width: 100%;
height: 150px;
background: var(--background-light);
border-radius: 8px 8px 0 0;
display: flex;
align-items: center;
justify-content: center;
}
.product-info {
padding: 1.5rem;
}
.product-name {
font-size: 1.2rem;
font-weight: bold;
color: var(--primary-color);
margin-bottom: 0.5rem;
}
.product-description {
color: var(--text-light);
margin-bottom: 1rem;
font-size: 0.9rem;
}
.product-footer {
display: flex;
justify-content: space-between;
align-items: center;
}
.product-price {
font-size: 1.3rem;
font-weight: bold;
color: var(--secondary-color);
}
/* 文化故事 */
.stories-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
gap: 2rem;
}
.story-card {
overflow: hidden;
}
.story-image-placeholder {
width: 100%;
height: 200px;
background: var(--background-light);
}
.story-content {
padding: 1.5rem;
}
.story-title {
font-size: 1.3rem;
font-weight: bold;
color: var(--primary-color);
margin-bottom: 1rem;
}
.story-excerpt {
color: var(--text-light);
line-height: 1.6;
margin-bottom: 1rem;
}
.story-meta {
display: flex;
justify-content: space-between;
align-items: center;
}
.story-date {
color: var(--text-light);
font-size: 0.9rem;
}
.story-link {
color: var(--primary-color);
text-decoration: none;
font-weight: 500;
}
.story-link:hover {
text-decoration: underline;
}
/* 统计数据 */
.stats {
color: white;
}
.stats-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 2rem;
}
.stat-item {
text-align: center;
}
.stat-number {
font-size: 3rem;
font-weight: bold;
margin-bottom: 0.5rem;
}
.stat-label {
font-size: 1.1rem;
opacity: 0.9;
}
.text-center {
text-align: center;
}
/* 响应式设计 */
@media (max-width: 768px) {
.hero-content {
grid-template-columns: 1fr;
text-align: center;
gap: 2rem;
}
.hero-title {
font-size: 2.5rem;
}
.hero-actions {
justify-content: center;
}
.features-grid,
.products-grid,
.stories-grid {
grid-template-columns: 1fr;
}
.stats-grid {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 480px) {
.hero-title {
font-size: 2rem;
}
.hero-actions {
flex-direction: column;
align-items: center;
}
.stats-grid {
grid-template-columns: 1fr;
}
}
</style>