refactor(backend): 重构动物相关 API 接口

- 更新了动物数据结构和相关类型定义
- 优化了动物列表、详情、创建、更新和删除接口
- 新增了更新动物状态接口
- 移除了与认领记录相关的接口
-调整了 API 响应结构
This commit is contained in:
ylweng
2025-08-31 00:45:46 +08:00
parent 0cad74b06f
commit 8e5295b572
111 changed files with 15290 additions and 1972 deletions

View File

@@ -3,11 +3,17 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>关于我们 - 结伴客</title>
<meta name="description" content="了解结伴客平台的发展历程、核心价值观和团队信息。我们致力于为用户提供优质的旅行结伴和动物认领服务。">
<meta name="keywords" content="结伴客, 关于我们, 平台介绍, 发展历程, 核心价值观, 团队介绍">
<meta name="keywords" content="结伴客,关于我们,平台介绍,发展历程,核心价值观,团队介绍">
<meta name="author" content="结伴客">
<meta property="og:title" content="关于我们 - 结伴客">
<meta property="og:description" content="了解结伴客平台的发展历程、核心价值观和团队信息。">
<meta property="og:type" content="website">
<meta property="og:url" content="https://jiebanke.com/about.html">
<title>关于我们 - 结伴客</title>
<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/6.7.2/css/all.css" rel="stylesheet">
<link href="https://cdn.bootcdn.net/ajax/libs/aos/2.3.4/aos.css" rel="stylesheet">
<link href="css/style.css" rel="stylesheet">
</head>
<body>
@@ -65,7 +71,7 @@
<div class="row align-items-center">
<div class="col-lg-6 mb-4 mb-lg-0">
<div class="about-image-wrapper">
<img src="https://via.placeholder.com/600x400/2ecc71/ffffff?text=结伴客团队" alt="结伴客团队" class="img-fluid rounded shadow">
<img src="images/team-photo.svg" alt="结伴客团队" class="img-fluid rounded shadow">
</div>
</div>
<div class="col-lg-6">
@@ -182,7 +188,7 @@
<div class="row">
<div class="col-md-3 col-6 mb-4">
<div class="team-member text-center">
<img src="https://via.placeholder.com/150x150/2ecc71/ffffff?text=CEO" class="rounded-circle mb-3 team-photo" alt="CEO">
<img src="images/ceo-avatar.svg" class="rounded-circle mb-3 team-photo" alt="CEO张明">
<h5>张明</h5>
<p class="text-muted mb-0">首席执行官</p>
</div>
@@ -190,7 +196,7 @@
<div class="col-md-3 col-6 mb-4">
<div class="team-member text-center">
<img src="https://via.placeholder.com/150x150/1abc9c/ffffff?text=CTO" class="rounded-circle mb-3 team-photo" alt="CTO">
<img src="images/cto-avatar.svg" class="rounded-circle mb-3 team-photo" alt="CTO李华">
<h5>李华</h5>
<p class="text-muted mb-0">首席技术官</p>
</div>
@@ -198,7 +204,7 @@
<div class="col-md-3 col-6 mb-4">
<div class="team-member text-center">
<img src="https://via.placeholder.com/150x150/3498db/ffffff?text=CMO" class="rounded-circle mb-3 team-photo" alt="CMO">
<img src="images/cmo-avatar.svg" class="rounded-circle mb-3 team-photo" alt="CMO王芳">
<h5>王芳</h5>
<p class="text-muted mb-0">首席市场官</p>
</div>
@@ -206,7 +212,7 @@
<div class="col-md-3 col-6 mb-4">
<div class="team-member text-center">
<img src="https://via.placeholder.com/150x150/9b59b6/ffffff?text=COO" class="rounded-circle mb-3 team-photo" alt="COO">
<img src="images/coo-avatar.svg" class="rounded-circle mb-3 team-photo" alt="COO赵强">
<h5>赵强</h5>
<p class="text-muted mb-0">首席运营官</p>
</div>
@@ -290,6 +296,15 @@
</div>
</footer>
<!-- 页面加载动画 -->
<div class="page-loader">
<div class="loader-spinner">
<i class="fa fa-compass fa-spin"></i>
</div>
</div>
<script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/aos/2.3.4/aos.js"></script>
<script src="js/main.js"></script>
</body>
</html>

View File

@@ -3,11 +3,17 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>成功案例 - 结伴客</title>
<meta name="description" content="查看结伴客平台用户和商家的成功案例,了解旅行结伴、动物认领和送花服务的真实体验故事。">
<meta name="keywords" content="结伴客, 成功案例, 用户案例, 商家案例, 旅行结伴案例, 动物认领案例, 送花服务案例">
<meta name="keywords" content="结伴客,成功案例,用户案例,商家案例,旅行结伴案例,动物认领案例,送花服务案例">
<meta name="author" content="结伴客">
<meta property="og:title" content="成功案例 - 结伴客">
<meta property="og:description" content="查看结伴客平台用户和商家的成功案例,了解旅行结伴、动物认领和送花服务的真实体验故事。">
<meta property="og:type" content="website">
<meta property="og:url" content="https://jiebanke.com/case.html">
<title>成功案例 - 结伴客</title>
<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet">
j <link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/6.7.2/css/all.css" rel="stylesheet">
<link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/6.7.2/css/all.css" rel="stylesheet">
<link href="https://cdn.bootcdn.net/ajax/libs/aos/2.3.4/aos.css" rel="stylesheet">
<link href="css/style.css" rel="stylesheet">
</head>
<body>
@@ -63,7 +69,7 @@ j <link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/6.7.2/css/all.cs
<div class="row">
<div class="col-md-4 mb-4">
<div class="card case-card">
<img src="https://via.placeholder.com/400x200/667eea/ffffff?text=旅行结伴" class="card-img-top case-image" alt="用户案例1">
<img src="images/travel-case.svg" class="card-img-top case-image" alt="旅行结伴案例">
<div class="card-body">
<h5 class="card-title">从陌生人到旅行伙伴</h5>
<div class="testimonial-content">
@@ -77,7 +83,7 @@ j <link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/6.7.2/css/all.cs
<div class="col-md-4 mb-4">
<div class="card case-card">
<img src="https://via.placeholder.com/400x200/f093fb/ffffff?text=农场体验" class="card-img-top case-image" alt="用户案例2">
<img src="images/farm-case.svg" class="card-img-top case-image" alt="农场体验案例">
<div class="card-body">
<h5 class="card-title">难忘的农场体验</h5>
<div class="testimonial-content">
@@ -91,7 +97,7 @@ j <link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/6.7.2/css/all.cs
<div class="col-md-4 mb-4">
<div class="card case-card">
<img src="https://via.placeholder.com/400x200/764ba2/ffffff?text=送花服务" class="card-img-top case-image" alt="用户案例3">
<img src="images/flower-case.svg" class="card-img-top case-image" alt="送花服务案例">
<div class="card-body">
<h5 class="card-title">浪漫的送花惊喜</h5>
<div class="testimonial-content">
@@ -283,6 +289,15 @@ j <link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/6.7.2/css/all.cs
</div>
</footer>
<!-- 页面加载动画 -->
<div class="page-loader">
<div class="loader-spinner">
<i class="fa fa-compass fa-spin"></i>
</div>
</div>
<script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/aos/2.3.4/aos.js"></script>
<script src="js/main.js"></script>
</body>
</html>

View File

@@ -3,12 +3,18 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>联系我们 - 结伴客</title>
<meta name="description" content="联系结伴客平台,获取旅行结伴、动物认领、送花服务等相关咨询和帮助。">
<meta name="keywords" content="结伴客, 联系我们, 旅行结伴, 动物认领, 送花服务, 客服咨询">
<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet" integrity="sha512-..." crossorigin="anonymous">
<meta name="keywords" content="结伴客,联系我们,旅行结伴,动物认领,送花服务,客服咨询">
<meta name="author" content="结伴客">
<meta property="og:title" content="联系我们 - 结伴客">
<meta property="og:description" content="联系结伴客平台,获取旅行结伴、动物认领、送花服务等相关咨询和帮助。">
<meta property="og:type" content="website">
<meta property="og:url" content="https://jiebanke.com/contact.html">
<title>联系我们 - 结伴客</title>
<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/6.7.2/css/all.css" rel="stylesheet">
<link href="css/style.css" rel="stylesheet" integrity="sha512-..." crossorigin="anonymous">
<link href="https://cdn.bootcdn.net/ajax/libs/aos/2.3.4/aos.css" rel="stylesheet">
<link href="css/style.css" rel="stylesheet">
</head>
<body>
<!-- 导航栏 -->
@@ -246,6 +252,15 @@
</div>
</footer>
<!-- 页面加载动画 -->
<div class="page-loader">
<div class="loader-spinner">
<i class="fa fa-compass fa-spin"></i>
</div>
</div>
<script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/aos/2.3.4/aos.js"></script>
<script src="js/main.js"></script>
</body>
</html>

View File

@@ -838,6 +838,106 @@ body {
color: white;
}
/* 页面加载动画 */
.page-loader {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: var(--primary-gradient);
display: flex;
align-items: center;
justify-content: center;
z-index: 9999;
transition: opacity 0.5s ease, visibility 0.5s ease;
}
.page-loader.hidden {
opacity: 0;
visibility: hidden;
}
.loader-spinner {
width: 80px;
height: 80px;
display: flex;
align-items: center;
justify-content: center;
background: rgba(255, 255, 255, 0.2);
border-radius: 50%;
animation: pulse 2s infinite;
}
.loader-spinner i {
font-size: 2.5rem;
color: white;
}
@keyframes pulse {
0% {
transform: scale(1);
opacity: 1;
}
50% {
transform: scale(1.1);
opacity: 0.8;
}
100% {
transform: scale(1);
opacity: 1;
}
}
/* 平滑滚动 */
html {
scroll-behavior: smooth;
}
/* 滚动进度条 */
.scroll-progress {
position: fixed;
top: 0;
left: 0;
width: 0%;
height: 4px;
background: var(--primary-gradient);
z-index: 9998;
transition: width 0.3s ease;
}
/* 返回顶部按钮 */
.back-to-top {
position: fixed;
bottom: 30px;
right: 30px;
width: 50px;
height: 50px;
background: var(--primary-gradient);
color: white;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.2rem;
cursor: pointer;
opacity: 0;
visibility: hidden;
transition: all 0.3s ease;
z-index: 9997;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
}
.back-to-top.visible {
opacity: 1;
visibility: visible;
}
.back-to-top:hover {
transform: translateY(-5px);
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.3);
}
/* 响应式字体调整 */
@media (max-width: 768px) {
.hero-section h1 {

View File

@@ -0,0 +1,11 @@
<svg width="150" height="150" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="gradCEO" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#2ecc71;stop-opacity:1" />
<stop offset="100%" style="stop-color:#27ae60;stop-opacity:1" />
</linearGradient>
</defs>
<circle cx="75" cy="75" r="75" fill="url(#gradCEO)"/>
<text x="75" y="85" fill="#ffffff" text-anchor="middle" font-family="Arial, sans-serif" font-weight="bold" font-size="24"></text>
<text x="75" y="110" fill="rgba(255,255,255,0.8)" text-anchor="middle" font-family="Arial, sans-serif" font-size="14">CEO</text>
</svg>

After

Width:  |  Height:  |  Size: 645 B

View File

@@ -0,0 +1,11 @@
<svg width="150" height="150" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="gradCMO" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#3498db;stop-opacity:1" />
<stop offset="100%" style="stop-color:#2980b9;stop-opacity:1" />
</linearGradient>
</defs>
<circle cx="75" cy="75" r="75" fill="url(#gradCMO)"/>
<text x="75" y="85" fill="#ffffff" text-anchor="middle" font-family="Arial, sans-serif" font-weight="bold" font-size="24"></text>
<text x="75" y="110" fill="rgba(255,255,255,0.8)" text-anchor="middle" font-family="Arial, sans-serif" font-size="14">CMO</text>
</svg>

After

Width:  |  Height:  |  Size: 645 B

View File

@@ -0,0 +1,11 @@
<svg width="150" height="150" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="gradCOO" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#9b59b6;stop-opacity:1" />
<stop offset="100%" style="stop-color:#8e44ad;stop-opacity:1" />
</linearGradient>
</defs>
<circle cx="75" cy="75" r="75" fill="url(#gradCOO)"/>
<text x="75" y="85" fill="#ffffff" text-anchor="middle" font-family="Arial, sans-serif" font-weight="bold" font-size="24"></text>
<text x="75" y="110" fill="rgba(255,255,255,0.8)" text-anchor="middle" font-family="Arial, sans-serif" font-size="14">COO</text>
</svg>

After

Width:  |  Height:  |  Size: 645 B

View File

@@ -0,0 +1,11 @@
<svg width="150" height="150" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="gradCTO" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#1abc9c;stop-opacity:1" />
<stop offset="100%" style="stop-color:#16a085;stop-opacity:1" />
</linearGradient>
</defs>
<circle cx="75" cy="75" r="75" fill="url(#gradCTO)"/>
<text x="75" y="85" fill="#ffffff" text-anchor="middle" font-family="Arial, sans-serif" font-weight="bold" font-size="24"></text>
<text x="75" y="110" fill="rgba(255,255,255,0.8)" text-anchor="middle" font-family="Arial, sans-serif" font-size="14">CTO</text>
</svg>

After

Width:  |  Height:  |  Size: 645 B

View File

@@ -0,0 +1,16 @@
<svg width="400" height="200" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="grad2" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#f093fb;stop-opacity:1" />
<stop offset="100%" style="stop-color:#f5576c;stop-opacity:1" />
</linearGradient>
</defs>
<rect width="100%" height="100%" fill="url(#grad2)"/>
<g fill="#ffffff" text-anchor="middle" font-family="Arial, sans-serif" font-weight="bold">
<text x="200" y="100" font-size="24" dy="0.35em">农场体验</text>
<text x="200" y="130" font-size="14" opacity="0.8">亲近自然,体验农耕</text>
</g>
<path d="M100,150 Q150,120 200,150 Q250,180 300,150" stroke="rgba(255,255,255,0.2)" fill="none" stroke-width="2"/>
<circle cx="120" cy="80" r="15" fill="rgba(255,255,255,0.1)"/>
<circle cx="280" cy="100" r="12" fill="rgba(255,255,255,0.1)"/>
</svg>

After

Width:  |  Height:  |  Size: 888 B

View File

@@ -0,0 +1,16 @@
<svg width="400" height="200" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="grad3" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#764ba2;stop-opacity:1" />
<stop offset="100%" style="stop-color:#667eea;stop-opacity:1" />
</linearGradient>
</defs>
<rect width="100%" height="100%" fill="url(#grad3)"/>
<g fill="#ffffff" text-anchor="middle" font-family="Arial, sans-serif" font-weight="bold">
<text x="200" y="100" font-size="24" dy="0.35em">送花服务</text>
<text x="200" y="130" font-size="14" opacity="0.8">传递心意,送达祝福</text>
</g>
<path d="M150,80 Q180,60 210,80 Q240,100 270,80" stroke="rgba(255,255,255,0.2)" fill="none" stroke-width="2"/>
<circle cx="180" cy="120" r="10" fill="rgba(255,255,255,0.1)"/>
<circle cx="220" cy="140" r="8" fill="rgba(255,255,255,0.1)"/>
</svg>

After

Width:  |  Height:  |  Size: 884 B

View File

@@ -0,0 +1,10 @@
<svg width="50" height="50" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="gradMerchant1" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#f72585;stop-opacity:1" />
<stop offset="100%" style="stop-color:#b5179e;stop-opacity:1" />
</linearGradient>
</defs>
<circle cx="25" cy="25" r="25" fill="url(#gradMerchant1)"/>
<text x="25" y="30" fill="#ffffff" text-anchor="middle" font-family="Arial, sans-serif" font-weight="bold" font-size="18"></text>
</svg>

After

Width:  |  Height:  |  Size: 524 B

View File

@@ -0,0 +1,16 @@
<svg width="600" height="400" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="gradTeam" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#2ecc71;stop-opacity:1" />
<stop offset="100%" style="stop-color:#27ae60;stop-opacity:1" />
</linearGradient>
</defs>
<rect width="100%" height="100%" fill="url(#gradTeam)"/>
<g fill="#ffffff" text-anchor="middle" font-family="Arial, sans-serif" font-weight="bold">
<text x="300" y="180" font-size="32" dy="0.35em">结伴客团队</text>
<text x="300" y="220" font-size="18" opacity="0.9">让旅行不再孤单</text>
</g>
<circle cx="150" cy="120" r="40" fill="rgba(255,255,255,0.1)"/>
<circle cx="450" cy="280" r="30" fill="rgba(255,255,255,0.1)"/>
<path d="M100,250 Q200,200 300,250 Q400,300 500,250" stroke="rgba(255,255,255,0.2)" fill="none" stroke-width="3"/>
</svg>

After

Width:  |  Height:  |  Size: 892 B

View File

@@ -0,0 +1,15 @@
<svg width="400" height="200" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
<stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
</linearGradient>
</defs>
<rect width="100%" height="100%" fill="url(#grad1)"/>
<g fill="#ffffff" text-anchor="middle" font-family="Arial, sans-serif" font-weight="bold">
<text x="200" y="100" font-size="24" dy="0.35em">旅行结伴</text>
<text x="200" y="130" font-size="14" opacity="0.8">探索世界,结识旅伴</text>
</g>
<circle cx="80" cy="100" r="30" fill="rgba(255,255,255,0.1)"/>
<circle cx="320" cy="60" r="20" fill="rgba(255,255,255,0.1)"/>
</svg>

After

Width:  |  Height:  |  Size: 770 B

View File

@@ -0,0 +1,10 @@
<svg width="50" height="50" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="gradAvatar1" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#4361ee;stop-opacity:1" />
<stop offset="100%" style="stop-color:#3a0ca3;stop-opacity:1" />
</linearGradient>
</defs>
<circle cx="25" cy="25" r="25" fill="url(#gradAvatar1)"/>
<text x="25" y="30" fill="#ffffff" text-anchor="middle" font-family="Arial, sans-serif" font-weight="bold" font-size="18"></text>
</svg>

After

Width:  |  Height:  |  Size: 520 B

View File

@@ -0,0 +1,10 @@
<svg width="50" height="50" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="gradAvatar2" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#3a0ca3;stop-opacity:1" />
<stop offset="100%" style="stop-color:#4361ee;stop-opacity:1" />
</linearGradient>
</defs>
<circle cx="25" cy="25" r="25" fill="url(#gradAvatar2)"/>
<text x="25" y="30" fill="#ffffff" text-anchor="middle" font-family="Arial, sans-serif" font-weight="bold" font-size="18"></text>
</svg>

After

Width:  |  Height:  |  Size: 520 B

View File

@@ -3,11 +3,17 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>结伴客 - 旅行结伴与动物认领平台</title>
<meta name="description" content="结伴客是一个专注于旅行结伴和动物认领的社交平台。在这里,您可以找到志同道合的旅行伙伴,体验独特的动物认领服务,享受送花等贴心服务。">
<meta name="keywords" content="结伴客, 旅行结伴, 动物认领, 送花服务, 社交平台, 旅行伙伴">
<meta name="description" content="结伴客 - 专业的旅行结伴平台,提供旅行结伴、动物认领、送花服务等特色功能,让您的旅行更加精彩。">
<meta name="keywords" content="旅行结伴,动物认领,送花服务,结伴旅行,旅行平台">
<meta name="author" content="结伴客">
<meta property="og:title" content="结伴客 - 旅行结伴平台">
<meta property="og:description" content="专业的旅行结伴平台,提供旅行结伴、动物认领、送花服务等特色功能。">
<meta property="og:type" content="website">
<meta property="og:url" content="https://jiebanke.com">
<title>结伴客 - 旅行结伴平台</title>
<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/6.7.2/css/all.css" rel="stylesheet">
<link href="https://cdn.bootcdn.net/ajax/libs/aos/2.3.4/aos.css" rel="stylesheet">
<link href="css/style.css" rel="stylesheet">
</head>
<body>
@@ -112,7 +118,7 @@
<p class="card-text">通过结伴客,我找到了一起去西藏的伙伴,还认领了一只小羊,这是一次非常难忘的经历!</p>
</div>
<div class="d-flex align-items-center mt-4">
<img src="https://via.placeholder.com/50x50/4361ee/ffffff?text=用户1" class="rounded-circle me-3" alt="用户1">
<img src="images/user-avatar1.svg" class="rounded-circle me-3" alt="用户小李">
<div>
<h6 class="mb-0">小李</h6>
<small class="text-muted">旅行爱好者</small>
@@ -130,7 +136,7 @@
<p class="card-text">作为农场主结伴客为我们带来了大量游客动物认领业务增长了300%</p>
</div>
<div class="d-flex align-items-center mt-4">
<img src="https://via.placeholder.com/50x50/f72585/ffffff?text=商家1" class="rounded-circle me-3" alt="商家1">
<img src="images/merchant-avatar1.svg" class="rounded-circle me-3" alt="商家王老板">
<div>
<h6 class="mb-0">王老板</h6>
<small class="text-muted">绿野农场</small>
@@ -148,7 +154,7 @@
<p class="card-text">通过结伴客的送花服务,我给了她一个浪漫的惊喜,我们的关系更进一步了!</p>
</div>
<div class="d-flex align-items-center mt-4">
<img src="https://via.placeholder.com/50x50/3a0ca3/ffffff?text=用户2" class="rounded-circle me-3" alt="用户2">
<img src="images/user-avatar2.svg" class="rounded-circle me-3" alt="用户小张">
<div>
<h6 class="mb-0">小张</h6>
<small class="text-muted">浪漫主义者</small>
@@ -245,7 +251,16 @@
</div>
</footer>
<!-- 页面加载动画 -->
<div class="page-loader">
<div class="loader-spinner">
<i class="fa fa-compass fa-spin"></i>
</div>
</div>
<script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/bootstrap-icons/1.10.0/font/bootstrap-icons.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/aos/2.3.4/aos.js"></script>
<script src="js/main.js"></script>
</body>
</html>

237
website/js/main.js Normal file
View File

@@ -0,0 +1,237 @@
// 页面加载完成后执行
document.addEventListener('DOMContentLoaded', function() {
// 初始化AOS动画库
AOS.init({
duration: 800,
easing: 'ease-in-out',
once: true,
offset: 100
});
// 页面加载动画
setTimeout(function() {
const loader = document.querySelector('.page-loader');
if (loader) {
loader.classList.add('hidden');
// 动画完成后移除元素
setTimeout(function() {
loader.style.display = 'none';
}, 500);
}
}, 1500);
// 创建滚动进度条
createScrollProgress();
// 创建返回顶部按钮
createBackToTopButton();
// 添加滚动事件监听
window.addEventListener('scroll', handleScroll);
// 初始化页面交互
initPageInteractions();
});
// 创建滚动进度条
function createScrollProgress() {
const progressBar = document.createElement('div');
progressBar.className = 'scroll-progress';
document.body.appendChild(progressBar);
}
// 创建返回顶部按钮
function createBackToTopButton() {
const backToTopBtn = document.createElement('div');
backToTopBtn.className = 'back-to-top';
backToTopBtn.innerHTML = '<i class="fas fa-chevron-up"></i>';
backToTopBtn.setAttribute('aria-label', '返回顶部');
backToTopBtn.addEventListener('click', function() {
window.scrollTo({
top: 0,
behavior: 'smooth'
});
});
document.body.appendChild(backToTopBtn);
}
// 处理滚动事件
function handleScroll() {
updateScrollProgress();
toggleBackToTopButton();
}
// 更新滚动进度条
function updateScrollProgress() {
const progressBar = document.querySelector('.scroll-progress');
if (progressBar) {
const windowHeight = window.innerHeight;
const documentHeight = document.documentElement.scrollHeight - windowHeight;
const scrolled = (window.scrollY / documentHeight) * 100;
progressBar.style.width = scrolled + '%';
}
}
// 显示/隐藏返回顶部按钮
function toggleBackToTopButton() {
const backToTopBtn = document.querySelector('.back-to-top');
if (backToTopBtn) {
if (window.scrollY > 300) {
backToTopBtn.classList.add('visible');
} else {
backToTopBtn.classList.remove('visible');
}
}
}
// 初始化页面交互
function initPageInteractions() {
// 导航菜单点击效果
initNavigation();
// 功能卡片悬停效果
initFeatureCards();
// 用户评价卡片交互
initTestimonialCards();
// 行动号召按钮点击效果
initCallToAction();
}
// 导航菜单交互
function initNavigation() {
const navLinks = document.querySelectorAll('.navbar-nav .nav-link');
navLinks.forEach(link => {
link.addEventListener('click', function(e) {
// 移除所有active类
navLinks.forEach(l => l.classList.remove('active'));
// 添加当前active类
this.classList.add('active');
// 如果是锚点链接,平滑滚动
const href = this.getAttribute('href');
if (href && href.startsWith('#')) {
e.preventDefault();
const target = document.querySelector(href);
if (target) {
target.scrollIntoView({
behavior: 'smooth',
block: 'start'
});
}
}
});
});
}
// 功能卡片交互
function initFeatureCards() {
const featureCards = document.querySelectorAll('.feature-box');
featureCards.forEach(card => {
card.addEventListener('mouseenter', function() {
this.style.transform = 'translateY(-10px)';
this.style.boxShadow = '0 15px 30px rgba(0,0,0,0.15)';
});
card.addEventListener('mouseleave', function() {
this.style.transform = 'translateY(0)';
this.style.boxShadow = '0 5px 15px rgba(0,0,0,0.05)';
});
});
}
// 用户评价卡片交互
function initTestimonialCards() {
const testimonialCards = document.querySelectorAll('.testimonial-card');
testimonialCards.forEach(card => {
card.addEventListener('mouseenter', function() {
this.style.transform = 'translateY(-5px)';
this.style.boxShadow = '0 10px 25px rgba(0,0,0,0.1)';
});
card.addEventListener('mouseleave', function() {
this.style.transform = 'translateY(0)';
this.style.boxShadow = '0 5px 15px rgba(0,0,0,0.05)';
});
});
}
// 行动号召按钮交互
function initCallToAction() {
const ctaButtons = document.querySelectorAll('.cta-section .btn, .hero-section .btn');
ctaButtons.forEach(btn => {
btn.addEventListener('mouseenter', function() {
this.style.transform = 'scale(1.05)';
this.style.boxShadow = '0 8px 25px rgba(0,0,0,0.2)';
});
btn.addEventListener('mouseleave', function() {
this.style.transform = 'scale(1)';
this.style.boxShadow = 'none';
});
btn.addEventListener('click', function(e) {
// 添加点击效果
this.style.transform = 'scale(0.95)';
setTimeout(() => {
this.style.transform = 'scale(1)';
}, 150);
// 如果是演示按钮,阻止默认行为
if (this.getAttribute('href') === '#') {
e.preventDefault();
alert('欢迎体验结伴客平台!此功能正在开发中,敬请期待。');
}
});
});
}
// 页面性能优化:图片懒加载
function initLazyLoading() {
if ('IntersectionObserver' in window) {
const lazyImages = document.querySelectorAll('img[data-src]');
const imageObserver = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.getAttribute('data-src');
img.removeAttribute('data-src');
imageObserver.unobserve(img);
}
});
});
lazyImages.forEach(img => {
imageObserver.observe(img);
});
}
}
// 页面可见性变化处理
document.addEventListener('visibilitychange', function() {
if (document.hidden) {
console.log('页面被隐藏');
} else {
console.log('页面恢复显示');
}
});
// 错误处理
window.addEventListener('error', function(e) {
console.error('页面错误:', e.error);
});
// 页面卸载前清理
window.addEventListener('beforeunload', function() {
// 清理操作
});

View File

@@ -6,11 +6,23 @@
<title>商家入驻申请 - 结伴客</title>
<meta name="description" content="申请成为结伴客平台合作商家,填写商家入驻申请表单,加入我们的生态体系,为旅行者提供优质服务。">
<meta name="keywords" content="结伴客, 商家入驻, 商家申请, 农场入驻, 花店入驻, 活动组织入驻">
<meta name="author" content="结伴客团队">
<meta property="og:title" content="商家入驻申请 - 结伴客">
<meta property="og:description" content="申请成为结伴客平台合作商家,填写商家入驻申请表单,加入我们的生态体系,为旅行者提供优质服务。">
<meta property="og:type" content="website">
<meta property="og:url" content="https://jiebanke.com/merchant/apply.html">
<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/6.7.2/css/all.css" rel="stylesheet">
<link href="https://cdn.bootcdn.net/ajax/libs/aos/2.3.4/aos.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
</head>
<body>
<!-- 页面加载动画 -->
<div class="page-loader">
<div class="spinner-border text-primary" role="status">
<span class="visually-hidden">Loading...</span>
</div>
</div>
<!-- 导航栏 -->
<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top">
<div class="container">
@@ -44,6 +56,14 @@
</div>
</nav>
<!-- 页面滚动进度条 -->
<div class="scroll-progress"></div>
<!-- 返回顶部按钮 -->
<button class="back-to-top">
<i class="fas fa-arrow-up"></i>
</button>
<!-- 商家入驻横幅 -->
<section class="hero-section">
<div class="container text-center position-relative">
@@ -53,6 +73,8 @@
</section>
<!-- 申请步骤 -->
<script src="https://cdn.bootcdn.net/ajax/libs/aos/2.3.4/aos.js"></script>
<script src="../js/main.js"></script>
<section class="container mb-5">
<div class="step-indicator">
<div class="step completed">

View File

@@ -6,11 +6,23 @@
<title>商家合作 - 结伴客</title>
<meta name="description" content="加入结伴客商家合作生态,为旅行者提供农场、花店和活动组织服务。了解合作优势、入驻流程和商家数据。">
<meta name="keywords" content="结伴客, 商家合作, 农场合作, 花店合作, 活动组织, 商家入驻, 合作优势">
<meta name="author" content="结伴客团队">
<meta property="og:title" content="商家合作 - 结伴客">
<meta property="og:description" content="加入结伴客商家合作生态,为旅行者提供农场、花店和活动组织服务。了解合作优势、入驻流程和商家数据。">
<meta property="og:type" content="website">
<meta property="og:url" content="https://jiebanke.com/merchant/">
<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/6.7.2/css/all.css" rel="stylesheet">
<link href="https://cdn.bootcdn.net/ajax/libs/aos/2.3.4/aos.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
</head>
<body>
<!-- 页面加载动画 -->
<div class="page-loader">
<div class="spinner-border text-primary" role="status">
<span class="visually-hidden">Loading...</span>
</div>
</div>
<!-- 导航栏 -->
<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top">
<div class="container">
@@ -44,6 +56,14 @@
</div>
</nav>
<!-- 页面滚动进度条 -->
<div class="scroll-progress"></div>
<!-- 返回顶部按钮 -->
<button class="back-to-top">
<i class="fas fa-arrow-up"></i>
</button>
<!-- 商家合作横幅 -->
<section class="hero-section">
<div class="container text-center position-relative">
@@ -53,6 +73,8 @@
</section>
<!-- 合作优势 -->
<script src="https://cdn.bootcdn.net/ajax/libs/aos/2.3.4/aos.js"></script>
<script src="../js/main.js"></script>
<section class="container mb-5">
<div class="row">
<div class="col-12 mb-5">

View File

@@ -6,11 +6,23 @@
<title>合作政策 - 结伴客</title>
<meta name="description" content="了解结伴客平台商家合作政策,包括合作原则、资质要求、服务标准、费用结算、权利义务等内容。">
<meta name="keywords" content="结伴客, 合作政策, 商家合作, 合作原则, 服务标准, 费用结算">
<meta name="author" content="结伴客团队">
<meta property="og:title" content="合作政策 - 结伴客">
<meta property="og:description" content="了解结伴客平台商家合作政策,包括合作原则、资质要求、服务标准、费用结算、权利义务等内容。">
<meta property="og:type" content="website">
<meta property="og:url" content="https://jiebanke.com/merchant/policy.html">
<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/6.7.2/css/all.css" rel="stylesheet">
<link href="https://cdn.bootcdn.net/ajax/libs/aos/2.3.4/aos.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
</head>
<body>
<!-- 页面加载动画 -->
<div class="page-loader">
<div class="spinner-border text-primary" role="status">
<span class="visually-hidden">Loading...</span>
</div>
</div>
<!-- 导航栏 -->
<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top">
<div class="container">
@@ -44,6 +56,14 @@
</div>
</nav>
<!-- 页面滚动进度条 -->
<div class="scroll-progress"></div>
<!-- 返回顶部按钮 -->
<button class="back-to-top">
<i class="fas fa-arrow-up"></i>
</button>
<!-- 合作政策横幅 -->
<section class="hero-section">
<div class="container text-center position-relative">
@@ -155,6 +175,8 @@
</section>
<!-- 页脚 -->
<script src="https://cdn.bootcdn.net/ajax/libs/aos/2.3.4/aos.js"></script>
<script src="../js/main.js"></script>
<footer class="footer">
<div class="container">
<div class="row">