添加 IntelliJ IDEA 项目配置文件

This commit is contained in:
ylweng
2025-09-02 21:59:27 +08:00
parent 59cfe620fe
commit 501c218a83
56 changed files with 11886 additions and 126 deletions

84
website/MAINTENANCE.md Normal file
View File

@@ -0,0 +1,84 @@
# Website 维护指南
## 📁 文件结构
```
website/
├── css/custom.css # 自定义样式
├── js/main.js # 主要脚本
├── images/ # 图片资源
├── index.html # 首页
├── product.html # 产品介绍
├── solutions.html # 解决方案
├── cases.html # 客户案例
├── news.html # 新闻动态
├── about.html # 关于我们
└── contact.html # 联系我们
```
## 🔧 维护任务
### 内容更新
1. **新闻更新**:编辑 `news.html`,添加新内容
2. **产品信息**:更新 `product.html` 产品功能
3. **客户案例**:在 `cases.html` 添加成功案例
4. **联系信息**:修改 `contact.html` 联系方式
### 图片管理
- 使用WebP格式优化加载速度
- 图片大小控制在500KB以内
- 添加适当的alt属性
### SEO优化
- 更新页面title和meta描述
- 检查关键词密度2-3%
- 保持H标签层次结构
- 添加结构化数据标记
## 🚀 部署流程
### 本地测试
```bash
# Python服务器
python -m http.server 8080
# Node.js服务器
npx serve . -p 8080
```
### 生产部署
```bash
# 上传文件到服务器
scp -r website/* user@server:/var/www/html/
# 检查文件权限
chmod -R 644 /var/www/html/*
chmod 755 /var/www/html/
```
## 📊 性能监控
### 关键指标
- 页面加载时间 < 3秒
- 首屏渲染时间 < 1.5秒
- Google PageSpeed 分数 > 90
### 优化建议
- 启用Gzip压缩
- 配置浏览器缓存
- 使用CDN加速
- 图片懒加载
## 🔍 SEO检查清单
- [ ] 页面标题包含目标关键词
- [ ] Meta描述控制在150字符内
- [ ] 图片添加alt属性
- [ ] 内链和外链正常
- [ ] 移动端适配良好
- [ ] 页面加载速度优化
## 📞 技术支持
- **前端开发**frontend@niumall.com
- **SEO优化**seo@niumall.com
- **服务器运维**ops@niumall.com

656
website/api.html Normal file
View File

@@ -0,0 +1,656 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>API接口文档 - 活牛采购智能数字化系统</title>
<meta name="description" content="活牛采购智能数字化系统API接口文档提供完整的接口说明和示例代码。">
<!-- Bootstrap 5 CSS -->
<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet">
<!-- Font Awesome Icons -->
<link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
<!-- Prism.js 代码高亮 -->
<link href="https://cdn.bootcdn.net/ajax/libs/prism/1.29.0/themes/prism-tomorrow.min.css" rel="stylesheet">
<!-- 自定义样式 -->
<link href="css/custom.css" rel="stylesheet">
<link href="css/responsive.css" rel="stylesheet">
<style>
.api-container {
background: #f8f9fa;
min-height: 100vh;
padding-top: 100px;
}
.api-header {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 4rem 0;
margin-top: -100px;
padding-top: 150px;
}
.api-sidebar {
background: white;
border-radius: 15px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
padding: 2rem;
position: sticky;
top: 120px;
max-height: calc(100vh - 140px);
overflow-y: auto;
}
.api-content {
background: white;
border-radius: 15px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
padding: 2rem;
}
.api-nav-item {
padding: 0.5rem 0.75rem;
margin: 0.25rem 0;
border-radius: 8px;
cursor: pointer;
transition: all 0.3s ease;
border: none;
background: none;
width: 100%;
text-align: left;
font-size: 0.9rem;
text-decoration: none;
color: #333;
}
.api-nav-item:hover {
background: rgba(76, 175, 80, 0.1);
color: var(--primary-color);
transform: translateX(5px);
}
.api-nav-item.active {
background: var(--primary-color);
color: white;
}
.endpoint-card {
border: 1px solid #e9ecef;
border-radius: 12px;
margin-bottom: 2rem;
overflow: hidden;
}
.endpoint-header {
background: #f8f9fa;
padding: 1.5rem;
border-bottom: 1px solid #e9ecef;
}
.method-badge {
padding: 0.25rem 0.75rem;
border-radius: 4px;
font-size: 0.75rem;
font-weight: 600;
text-transform: uppercase;
}
.method-get { background: #28a745; color: white; }
.method-post { background: #007bff; color: white; }
.method-put { background: #ffc107; color: black; }
.method-delete { background: #dc3545; color: white; }
.endpoint-content {
padding: 1.5rem;
}
.param-table {
font-size: 0.9rem;
}
.param-table th {
background: #f8f9fa;
border: none;
font-weight: 600;
}
.param-table td {
border: 1px solid #e9ecef;
vertical-align: top;
}
.code-block {
background: #1e1e1e;
border-radius: 8px;
padding: 1rem;
margin: 1rem 0;
overflow-x: auto;
}
.response-example {
background: #f8f9fa;
border-left: 4px solid var(--primary-color);
padding: 1rem;
border-radius: 0 8px 8px 0;
}
.api-section {
display: none;
}
.api-section.active {
display: block;
}
.copy-btn {
position: absolute;
top: 0.5rem;
right: 0.5rem;
padding: 0.25rem 0.5rem;
background: rgba(255, 255, 255, 0.1);
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 4px;
color: white;
font-size: 0.75rem;
cursor: pointer;
}
.copy-btn:hover {
background: rgba(255, 255, 255, 0.2);
}
</style>
</head>
<body>
<!-- 导航栏 -->
<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top">
<div class="container">
<a class="navbar-brand d-flex align-items-center" href="index.html">
<div class="logo-container me-2">
<i class="fas fa-cow text-primary fs-2"></i>
</div>
<div class="brand-text">
<div class="brand-name fw-bold">NiuMall</div>
<div class="brand-subtitle">活牛采购智能系统</div>
</div>
</a>
<div class="navbar-nav ms-auto">
<a href="index.html" class="nav-link">
<i class="fas fa-home me-1"></i>返回首页
</a>
</div>
</div>
</nav>
<!-- API文档页面 -->
<div class="api-container">
<!-- 页面标题 -->
<section class="api-header">
<div class="container">
<div class="row align-items-center">
<div class="col-lg-8">
<h1 class="display-4 fw-bold mb-3">API接口文档</h1>
<p class="lead">完整的REST API接口文档支持开发者快速集成活牛采购系统</p>
<div class="d-flex gap-3 mt-4">
<div class="badge bg-primary fs-6 px-3 py-2">
<i class="fas fa-code me-2"></i>RESTful API
</div>
<div class="badge bg-success fs-6 px-3 py-2">
<i class="fas fa-shield-alt me-2"></i>JWT认证
</div>
<div class="badge bg-info fs-6 px-3 py-2">
<i class="fas fa-database me-2"></i>JSON格式
</div>
</div>
</div>
<div class="col-lg-4 text-center">
<div class="api-info">
<h5 class="mb-3">API信息</h5>
<p><strong>基础URL:</strong><br>https://api.niumall.com/v1</p>
<p><strong>版本:</strong> v1.0</p>
<p><strong>认证:</strong> Bearer Token</p>
</div>
</div>
</div>
</div>
</section>
<!-- API文档内容 -->
<section class="py-5">
<div class="container">
<div class="row">
<!-- 侧边导航 -->
<div class="col-lg-3">
<div class="api-sidebar">
<h5 class="mb-3">接口分类</h5>
<div class="api-nav">
<a href="#overview" class="api-nav-item active" onclick="showSection('overview')">
<i class="fas fa-info-circle me-2"></i>概述
</a>
<a href="#auth" class="api-nav-item" onclick="showSection('auth')">
<i class="fas fa-key me-2"></i>认证授权
</a>
<a href="#users" class="api-nav-item" onclick="showSection('users')">
<i class="fas fa-users me-2"></i>用户管理
</a>
<a href="#orders" class="api-nav-item" onclick="showSection('orders')">
<i class="fas fa-shopping-cart me-2"></i>订单管理
</a>
<a href="#suppliers" class="api-nav-item" onclick="showSection('suppliers')">
<i class="fas fa-store me-2"></i>供应商管理
</a>
<a href="#transport" class="api-nav-item" onclick="showSection('transport')">
<i class="fas fa-truck me-2"></i>运输管理
</a>
<a href="#finance" class="api-nav-item" onclick="showSection('finance')">
<i class="fas fa-chart-line me-2"></i>财务管理
</a>
<a href="#errors" class="api-nav-item" onclick="showSection('errors')">
<i class="fas fa-exclamation-triangle me-2"></i>错误处理
</a>
</div>
</div>
</div>
<!-- API文档内容区域 -->
<div class="col-lg-9">
<div class="api-content">
<!-- 概述 -->
<div id="overview" class="api-section active">
<h3 class="mb-4">API概述</h3>
<p class="text-muted mb-4">活牛采购智能数字化系统提供完整的REST API接口支持开发者快速集成和自定义开发。</p>
<h5>快速开始</h5>
<p>所有API请求都需要使用HTTPS协议并在请求头中包含有效的JWT Token。</p>
<div class="code-block position-relative">
<button class="copy-btn" onclick="copyCode(this)">复制</button>
<pre><code class="language-bash">curl -X GET "https://api.niumall.com/v1/orders" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json"</code></pre>
</div>
<h5 class="mt-4">响应格式</h5>
<p>所有API响应都使用JSON格式并遵循统一的响应结构</p>
<div class="response-example">
<pre><code class="language-json">{
"success": true,
"data": {},
"message": "操作成功",
"timestamp": "2024-01-20T12:00:00Z"
}</code></pre>
</div>
</div>
<!-- 认证授权 -->
<div id="auth" class="api-section">
<h3 class="mb-4">认证授权</h3>
<div class="endpoint-card">
<div class="endpoint-header">
<div class="d-flex align-items-center">
<span class="method-badge method-post">POST</span>
<span class="ms-3 fw-bold">/auth/login</span>
<span class="ms-auto text-muted">用户登录</span>
</div>
</div>
<div class="endpoint-content">
<h6>请求参数</h6>
<table class="table param-table">
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>必填</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>username</td>
<td>string</td>
<td></td>
<td>用户名或手机号</td>
</tr>
<tr>
<td>password</td>
<td>string</td>
<td></td>
<td>密码</td>
</tr>
</tbody>
</table>
<h6 class="mt-3">请求示例</h6>
<div class="code-block position-relative">
<button class="copy-btn" onclick="copyCode(this)">复制</button>
<pre><code class="language-json">{
"username": "admin@example.com",
"password": "password123"
}</code></pre>
</div>
<h6 class="mt-3">响应示例</h6>
<div class="response-example">
<pre><code class="language-json">{
"success": true,
"data": {
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 3600,
"user": {
"id": 1,
"username": "admin",
"email": "admin@example.com",
"role": "admin"
}
},
"message": "登录成功"
}</code></pre>
</div>
</div>
</div>
</div>
<!-- 订单管理 -->
<div id="orders" class="api-section">
<h3 class="mb-4">订单管理</h3>
<div class="endpoint-card">
<div class="endpoint-header">
<div class="d-flex align-items-center">
<span class="method-badge method-get">GET</span>
<span class="ms-3 fw-bold">/orders</span>
<span class="ms-auto text-muted">获取订单列表</span>
</div>
</div>
<div class="endpoint-content">
<h6>查询参数</h6>
<table class="table param-table">
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>必填</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>page</td>
<td>integer</td>
<td></td>
<td>页码默认1</td>
</tr>
<tr>
<td>limit</td>
<td>integer</td>
<td></td>
<td>每页数量默认20</td>
</tr>
<tr>
<td>status</td>
<td>string</td>
<td></td>
<td>订单状态筛选</td>
</tr>
</tbody>
</table>
<h6 class="mt-3">响应示例</h6>
<div class="response-example">
<pre><code class="language-json">{
"success": true,
"data": {
"orders": [
{
"id": 1,
"order_no": "ORD20240120001",
"supplier_id": 101,
"supplier_name": "山东畜牧合作社",
"cattle_count": 50,
"total_weight": 25000,
"unit_price": 28.5,
"total_amount": 712500,
"status": "shipping",
"created_at": "2024-01-20T10:00:00Z"
}
],
"pagination": {
"current_page": 1,
"total_pages": 5,
"total_count": 100
}
},
"message": "获取成功"
}</code></pre>
</div>
</div>
</div>
<div class="endpoint-card">
<div class="endpoint-header">
<div class="d-flex align-items-center">
<span class="method-badge method-post">POST</span>
<span class="ms-3 fw-bold">/orders</span>
<span class="ms-auto text-muted">创建新订单</span>
</div>
</div>
<div class="endpoint-content">
<h6>请求参数</h6>
<table class="table param-table">
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>必填</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>supplier_id</td>
<td>integer</td>
<td></td>
<td>供应商ID</td>
</tr>
<tr>
<td>cattle_breed</td>
<td>string</td>
<td></td>
<td>牛种类型</td>
</tr>
<tr>
<td>cattle_count</td>
<td>integer</td>
<td></td>
<td>牛只数量</td>
</tr>
<tr>
<td>expected_weight</td>
<td>decimal</td>
<td></td>
<td>预期重量(kg)</td>
</tr>
<tr>
<td>unit_price</td>
<td>decimal</td>
<td></td>
<td>单价(元/kg)</td>
</tr>
</tbody>
</table>
<h6 class="mt-3">请求示例</h6>
<div class="code-block position-relative">
<button class="copy-btn" onclick="copyCode(this)">复制</button>
<pre><code class="language-json">{
"supplier_id": 101,
"cattle_breed": "西门塔尔",
"cattle_count": 30,
"expected_weight": 15000,
"unit_price": 28.5,
"delivery_address": "北京市朝阳区xx养殖场",
"expected_delivery_date": "2024-01-25"
}</code></pre>
</div>
</div>
</div>
</div>
<!-- 错误处理 -->
<div id="errors" class="api-section">
<h3 class="mb-4">错误处理</h3>
<p class="text-muted mb-4">API使用标准HTTP状态码来表示请求的成功或失败状态。</p>
<h5>HTTP状态码</h5>
<table class="table">
<thead>
<tr>
<th>状态码</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="badge bg-success">200</span></td>
<td>请求成功</td>
</tr>
<tr>
<td><span class="badge bg-primary">201</span></td>
<td>创建成功</td>
</tr>
<tr>
<td><span class="badge bg-warning">400</span></td>
<td>请求参数错误</td>
</tr>
<tr>
<td><span class="badge bg-danger">401</span></td>
<td>未授权,需要登录</td>
</tr>
<tr>
<td><span class="badge bg-danger">403</span></td>
<td>禁止访问,权限不足</td>
</tr>
<tr>
<td><span class="badge bg-danger">404</span></td>
<td>资源不存在</td>
</tr>
<tr>
<td><span class="badge bg-danger">500</span></td>
<td>服务器内部错误</td>
</tr>
</tbody>
</table>
<h5 class="mt-4">错误响应格式</h5>
<div class="response-example">
<pre><code class="language-json">{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "请求参数验证失败",
"details": [
{
"field": "cattle_count",
"message": "牛只数量必须大于0"
}
]
},
"timestamp": "2024-01-20T12:00:00Z"
}</code></pre>
</div>
</div>
<!-- 其他部分省略实际项目中会包含所有API接口 -->
</div>
</div>
</div>
</div>
</section>
</div>
<!-- Bootstrap JS -->
<script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0/js/bootstrap.bundle.min.js"></script>
<!-- Prism.js 代码高亮 -->
<script src="https://cdn.bootcdn.net/ajax/libs/prism/1.29.0/components/prism-core.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js"></script>
<!-- 自定义脚本 -->
<script src="js/main.js"></script>
<script>
// 显示指定的API部分
function showSection(sectionId) {
// 隐藏所有部分
document.querySelectorAll('.api-section').forEach(section => {
section.classList.remove('active');
});
// 移除所有导航项的active类
document.querySelectorAll('.api-nav-item').forEach(item => {
item.classList.remove('active');
});
// 显示选中的部分
document.getElementById(sectionId).classList.add('active');
// 激活对应的导航项
event.target.classList.add('active');
// 更新URL hash
window.location.hash = sectionId;
}
// 复制代码功能
function copyCode(button) {
const codeBlock = button.nextElementSibling;
const code = codeBlock.textContent;
navigator.clipboard.writeText(code).then(() => {
const originalText = button.textContent;
button.textContent = '已复制';
button.style.background = 'rgba(40, 167, 69, 0.8)';
setTimeout(() => {
button.textContent = originalText;
button.style.background = 'rgba(255, 255, 255, 0.1)';
}, 2000);
}).catch(err => {
console.error('复制失败:', err);
});
}
// 页面加载时根据hash显示对应部分
document.addEventListener('DOMContentLoaded', function() {
const hash = window.location.hash.substring(1);
if (hash && document.getElementById(hash)) {
showSection(hash);
}
// 初始化代码高亮
if (typeof Prism !== 'undefined') {
Prism.highlightAll();
}
});
// 平滑滚动到锚点
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function(e) {
e.preventDefault();
const target = document.querySelector(this.getAttribute('href'));
if (target) {
target.scrollIntoView({
behavior: 'smooth',
block: 'start'
});
}
});
});
</script>
</body>
</html>

View File

@@ -32,11 +32,630 @@
body {
font-family: var(--font-family-base);
line-height: 1.6;
color: var(--text-light);
background-color: var(--dark-color);
color: var(--text-dark);
background-color: #ffffff;
overflow-x: hidden;
}
/* 顶部联系栏 */
.top-bar {
font-size: 0.875rem;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.top-bar a:hover {
text-decoration: underline !important;
}
/* 导航栏样式增强 */
.navbar {
padding: 0.5rem 0;
transition: var(--transition);
backdrop-filter: blur(10px);
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
}
.navbar.scrolled {
background: rgba(255, 255, 255, 0.95) !important;
box-shadow: 0 2px 20px rgba(0, 0, 0, 0.1);
}
/* 品牌logo样式 */
.logo-container {
width: 50px;
height: 50px;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(135deg, var(--primary-color), var(--primary-dark));
border-radius: 12px;
box-shadow: 0 4px 15px rgba(76, 175, 80, 0.3);
}
.brand-text .brand-name {
font-size: 1.25rem;
color: var(--text-light);
margin-bottom: -2px;
}
.brand-text .brand-subtitle {
font-size: 0.75rem;
color: rgba(248, 249, 250, 0.8);
font-weight: 400;
}
/* 导航链接增强 */
.navbar-nav .nav-link {
font-weight: 500;
color: var(--text-light) !important;
transition: var(--transition);
padding: 0.75rem 1rem;
border-radius: 8px;
position: relative;
margin: 0 0.25rem;
}
.navbar-nav .nav-link:hover {
color: var(--primary-color) !important;
background: rgba(76, 175, 80, 0.1);
transform: translateY(-2px);
}
.navbar-nav .nav-link.active {
color: var(--primary-color) !important;
background: rgba(76, 175, 80, 0.15);
box-shadow: 0 2px 10px rgba(76, 175, 80, 0.3);
}
/* 下拉菜单 */
.dropdown-menu {
border: none;
border-radius: 12px;
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.15);
padding: 0.5rem 0;
margin-top: 0.5rem;
}
.dropdown-item {
padding: 0.75rem 1.5rem;
transition: var(--transition);
border-radius: 8px;
margin: 0 0.5rem;
}
.dropdown-item:hover {
background: rgba(76, 175, 80, 0.1);
color: var(--primary-color);
transform: translateX(5px);
}
/* 英雄区域现代化设计 */
.hero-section {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
position: relative;
overflow: hidden;
}
.hero-section::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
radial-gradient(circle at 20% 80%, rgba(120, 119, 198, 0.3) 0%, transparent 50%),
radial-gradient(circle at 80% 20%, rgba(255, 119, 198, 0.3) 0%, transparent 50%),
radial-gradient(circle at 40% 40%, rgba(120, 219, 255, 0.3) 0%, transparent 50%);
z-index: 1;
}
.hero-section .container {
position: relative;
z-index: 2;
}
/* 英雄区域动画元素 */
.hero-bg-animation {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1;
}
.floating-element {
position: absolute;
font-size: 2rem;
animation: float 6s ease-in-out infinite;
animation-delay: var(--delay);
left: var(--x);
top: var(--y);
}
@keyframes float {
0%, 100% { transform: translateY(0px) rotate(0deg); }
50% { transform: translateY(-20px) rotate(5deg); }
}
/* 英雄内容样式 */
.hero-content {
color: white;
}
.hero-badge .badge {
border-radius: 25px;
font-weight: 500;
letter-spacing: 0.5px;
}
.hero-title {
font-weight: 800;
line-height: 1.2;
margin-bottom: 1.5rem;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
}
.hero-subtitle {
font-size: 1.25rem;
line-height: 1.6;
color: rgba(255, 255, 255, 0.9);
max-width: 600px;
}
/* 英雄区域功能特性 */
.hero-features .feature-item {
padding: 1rem;
background: rgba(255, 255, 255, 0.1);
border-radius: 12px;
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.2);
transition: var(--transition);
}
.hero-features .feature-item:hover {
transform: translateY(-5px);
background: rgba(255, 255, 255, 0.2);
}
/* 按钮增强样式 */
.btn {
border-radius: 12px;
font-weight: 600;
padding: 0.875rem 2rem;
transition: var(--transition);
border: none;
position: relative;
overflow: hidden;
text-decoration: none;
}
.btn-primary {
background: linear-gradient(135deg, var(--primary-color), var(--primary-dark));
box-shadow: 0 4px 15px rgba(76, 175, 80, 0.4);
}
.btn-primary:hover {
background: linear-gradient(135deg, var(--primary-light), var(--primary-color));
transform: translateY(-3px);
box-shadow: 0 8px 25px rgba(76, 175, 80, 0.6);
}
.btn-outline-secondary {
border: 2px solid rgba(255, 255, 255, 0.3);
color: white;
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(10px);
}
.btn-outline-secondary:hover {
background: rgba(255, 255, 255, 0.2);
border-color: rgba(255, 255, 255, 0.5);
transform: translateY(-3px);
color: white;
}
/* 英雄视觉区域 */
.hero-visual {
perspective: 1000px;
}
.hero-image-container {
transform-style: preserve-3d;
}
.dashboard-mockup {
transform: rotateY(-5deg) rotateX(5deg);
transition: var(--transition);
border: 1px solid rgba(255, 255, 255, 0.2);
}
.dashboard-mockup:hover {
transform: rotateY(0deg) rotateX(0deg) scale(1.02);
}
.floating-card {
animation: floatCard 4s ease-in-out infinite;
}
.floating-card:nth-child(2) {
animation-delay: 2s;
}
@keyframes floatCard {
0%, 100% { transform: translateY(0px); }
50% { transform: translateY(-10px); }
}
/* 滚动指示器 */
.scroll-indicator {
animation: bounce 2s infinite;
}
@keyframes bounce {
0%, 20%, 50%, 80%, 100% { transform: translateY(0); }
40% { transform: translateY(-10px); }
60% { transform: translateY(-5px); }
}
.animate-bounce {
animation: bounce 2s infinite;
}
/* 统计数据样式 */
.stat-item {
text-align: center;
}
.stat-number {
font-size: 2rem;
font-weight: 700;
margin-bottom: 0.5rem;
background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
/* 响应式设计优化 */
@media (max-width: 768px) {
.top-bar {
display: none;
}
.hero-title {
font-size: 2.5rem;
}
.hero-subtitle {
font-size: 1.1rem;
}
.hero-actions .btn {
width: 100%;
margin-bottom: 0.75rem;
}
.dashboard-mockup {
transform: none;
}
.floating-card {
display: none;
}
}
@media (max-width: 576px) {
.hero-features .col-6 {
margin-bottom: 1rem;
}
.hero-stats .col-4 {
margin-bottom: 1rem;
}
.brand-text .brand-name {
font-size: 1rem;
}
.brand-text .brand-subtitle {
font-size: 0.7rem;
}
}
/* 工具类 */
.text-shadow {
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
}
.backdrop-blur {
backdrop-filter: blur(10px);
}
/* 加载动画 */
.loading-spinner {
display: inline-block;
width: 1rem;
height: 1rem;
vertical-align: text-bottom;
border: 0.2em solid currentColor;
border-right-color: transparent;
border-radius: 50%;
animation: spinner-border 0.75s linear infinite;
}
@keyframes spinner-border {
to { transform: rotate(360deg); }
}
/* 动画效果增强 */
.fade-in-up {
animation: fadeInUp 0.8s ease-out forwards;
}
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* 图片优化 */
img {
max-width: 100%;
height: auto;
}
/* 滚动条样式 */
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track {
background: #f1f1f1;
}
::-webkit-scrollbar-thumb {
background: var(--primary-color);
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--primary-dark);
}
/* 返回顶部按钮 */
.back-to-top {
position: fixed;
bottom: 30px;
right: 30px;
width: 50px;
height: 50px;
border-radius: 50%;
display: none;
z-index: 1000;
transition: var(--transition);
box-shadow: 0 4px 15px rgba(76, 175, 80, 0.4);
}
.back-to-top:hover {
transform: translateY(-3px);
box-shadow: 0 6px 20px rgba(76, 175, 80, 0.6);
}
/* 导航栏动画 */
@keyframes slideDown {
from {
opacity: 0;
transform: translateY(-20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes slideUp {
from {
opacity: 1;
transform: translateY(0);
}
to {
opacity: 0;
transform: translateY(-20px);
}
}
/* 按钮点击效果 */
.btn:active {
transform: scale(0.95);
}
/* 卡片悬停增强 */
.card {
transition: var(--transition);
border: none;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.card:hover {
transform: translateY(-8px);
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);
}
/* 进度条样式 */
.progress {
height: 8px;
border-radius: 10px;
background: rgba(76, 175, 80, 0.1);
}
.progress-bar {
border-radius: 10px;
background: linear-gradient(90deg, var(--primary-color), var(--primary-light));
}
/* 数字统计增强 */
.count-up {
font-weight: 700;
color: var(--primary-color);
text-shadow: 0 2px 4px rgba(76, 175, 80, 0.2);
}
/* 模态框动画 */
.modal-dialog {
transition: all 0.3s ease;
}
/* 懒加载图片 */
img.lazy {
opacity: 0;
transition: opacity 0.3s;
}
img.lazy.loaded {
opacity: 1;
}
/* 表单增强样式 */
.form-control:focus {
border-color: var(--primary-color);
box-shadow: 0 0 0 0.2rem rgba(76, 175, 80, 0.25);
}
.form-control.is-valid {
border-color: var(--success-color);
}
.form-control.is-invalid {
border-color: var(--danger-color);
}
/* 提示框样式 */
.alert {
border: none;
border-radius: 12px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
}
/* 打字机效果 */
.typewriter {
font-family: 'Courier New', monospace;
}
/* 粒子效果容器 */
.particles-container {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 1;
}
/* 移动端优化 */
@media (max-width: 768px) {
.back-to-top {
bottom: 20px;
right: 20px;
width: 45px;
height: 45px;
}
.floating-element {
display: none;
}
}
/* 页面切换动画 */
.page-transition {
opacity: 0;
transform: translateY(20px);
transition: all 0.5s ease;
}
.page-transition.loaded {
opacity: 1;
transform: translateY(0);
}
/* 高级动画效果 */
@keyframes pulseGlow {
0%, 100% {
box-shadow: 0 0 5px rgba(76, 175, 80, 0.5);
}
50% {
box-shadow: 0 0 20px rgba(76, 175, 80, 0.8);
}
}
.pulse-glow {
animation: pulseGlow 2s infinite;
}
/* 文字渐变效果 */
.gradient-text {
background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
/* 毛玻璃效果 */
.glass-effect {
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.2);
}
/* 3D变换效果 */
.transform-3d {
transform-style: preserve-3d;
perspective: 1000px;
}
.transform-3d:hover {
transform: rotateY(5deg) rotateX(5deg);
}
/* 无障碍优化 */
@media (prefers-reduced-motion: reduce) {
* {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}
/* 焦点可见性 */
.btn:focus-visible,
.nav-link:focus-visible,
.form-control:focus-visible {
outline: 2px solid var(--primary-color);
outline-offset: 2px;
}
/* 打印样式 */
@media print {
.navbar,
.back-to-top,
.floating-element {
display: none !important;
}
.hero-section {
background: white !important;
color: black !important;
}
}
/* 导航栏样式 */
.navbar {
padding: 1rem 0;

438
website/css/responsive.css Normal file
View File

@@ -0,0 +1,438 @@
/* 移动端响应式优化样式 */
/* 移动设备优先设计 */
@media (max-width: 767.98px) {
/* 导航栏优化 */
.navbar {
padding: 0.5rem 0;
}
.navbar-brand .brand-text .brand-name {
font-size: 1rem;
}
.navbar-brand .brand-text .brand-subtitle {
font-size: 0.65rem;
}
.logo-container {
width: 40px;
height: 40px;
}
.navbar-nav .nav-link {
padding: 0.75rem 1rem;
margin: 0.25rem 0;
border-radius: 8px;
}
/* 英雄区域移动端优化 */
.hero-section {
min-height: 90vh;
padding: 100px 0 50px;
}
.hero-title {
font-size: 2rem;
line-height: 1.2;
}
.hero-subtitle {
font-size: 1rem;
margin-bottom: 2rem;
}
.hero-features .col-6 {
margin-bottom: 1rem;
}
.hero-features .feature-item {
padding: 0.75rem;
}
.hero-actions .btn {
width: 100%;
margin-bottom: 0.75rem;
}
/* 隐藏复杂动画元素 */
.floating-element,
.floating-card,
.particles-container {
display: none !important;
}
.dashboard-mockup {
transform: none !important;
}
/* 统计数据移动端优化 */
.hero-stats .col-4 {
margin-bottom: 1rem;
}
.stat-number {
font-size: 1.5rem;
}
/* 卡片组件优化 */
.card {
margin-bottom: 1.5rem;
}
.card-body {
padding: 1.25rem;
}
/* 按钮优化 */
.btn {
padding: 0.75rem 1.5rem;
}
.btn-lg {
padding: 1rem 2rem;
}
/* 表单优化 */
.form-control {
padding: 0.75rem;
font-size: 1rem;
}
/* 模态框优化 */
.modal-dialog {
margin: 1rem;
}
/* 演示页面移动端优化 */
.demo-sidebar {
margin-bottom: 2rem;
position: static;
}
.demo-nav-item {
padding: 1rem;
font-size: 0.9rem;
}
.demo-content {
padding: 1.5rem;
}
.dashboard-card {
padding: 1rem;
margin-bottom: 1rem;
}
.metric-number {
font-size: 2rem;
}
.chart-container {
height: 250px;
}
}
/* 平板设备优化 */
@media (min-width: 768px) and (max-width: 991.98px) {
.hero-title {
font-size: 2.5rem;
}
.hero-subtitle {
font-size: 1.1rem;
}
.hero-actions .btn {
margin-bottom: 0.5rem;
}
.floating-card {
transform: scale(0.8);
}
.demo-sidebar {
margin-bottom: 2rem;
}
}
/* 大屏幕优化 */
@media (min-width: 1200px) {
.container {
max-width: 1200px;
}
.hero-title {
font-size: 4rem;
}
.hero-subtitle {
font-size: 1.4rem;
}
.dashboard-card {
padding: 2rem;
}
.metric-number {
font-size: 3rem;
}
}
/* 触摸设备优化 */
@media (hover: none) and (pointer: coarse) {
/* 移除悬停效果 */
.card:hover,
.btn:hover,
.nav-link:hover,
.dashboard-card:hover {
transform: none !important;
box-shadow: inherit !important;
}
/* 增大点击区域 */
.btn {
min-height: 44px;
}
.nav-link {
min-height: 44px;
display: flex;
align-items: center;
}
/* 优化表单控件 */
.form-control,
.form-select {
min-height: 44px;
}
}
/* 高对比度模式 */
@media (prefers-contrast: high) {
.hero-section {
background: #000;
color: #fff;
}
.btn-primary {
background: #000;
border-color: #fff;
color: #fff;
}
.card {
border: 2px solid #000;
}
}
/* 暗色模式支持 */
@media (prefers-color-scheme: dark) {
:root {
--bg-color: #121212;
--text-color: #ffffff;
--card-bg: #1e1e1e;
--border-color: #333;
}
body {
background-color: var(--bg-color);
color: var(--text-color);
}
.card {
background-color: var(--card-bg);
border-color: var(--border-color);
}
.navbar {
background-color: rgba(0, 0, 0, 0.9) !important;
}
.demo-sidebar,
.demo-content,
.dashboard-card {
background-color: var(--card-bg);
border-color: var(--border-color);
}
}
/* 减少动画效果 */
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
.floating-element,
.floating-card {
animation: none !important;
}
}
/* 横屏模式优化 */
@media (orientation: landscape) and (max-height: 500px) {
.hero-section {
min-height: 100vh;
padding: 80px 0 20px;
}
.hero-title {
font-size: 2.5rem;
margin-bottom: 1rem;
}
.hero-subtitle {
margin-bottom: 1.5rem;
}
.hero-features {
margin-bottom: 1.5rem;
}
}
/* 超小屏幕设备 */
@media (max-width: 575.98px) {
.container {
padding-left: 1rem;
padding-right: 1rem;
}
.hero-section {
padding: 80px 0 30px;
}
.hero-title {
font-size: 1.75rem;
}
.hero-features .col-6 {
flex: 0 0 50%;
max-width: 50%;
}
.hero-stats .col-4 {
flex: 0 0 50%;
max-width: 50%;
}
.hero-stats .col-4:nth-child(3) {
flex: 0 0 100%;
max-width: 100%;
margin-top: 0.5rem;
}
.btn {
font-size: 0.9rem;
padding: 0.6rem 1.2rem;
}
.modal-dialog {
margin: 0.5rem;
}
.demo-header {
padding: 2rem 0;
padding-top: 120px;
}
.demo-header h1 {
font-size: 2rem;
}
.demo-nav-item {
font-size: 0.85rem;
padding: 0.75rem;
}
.metric-number {
font-size: 1.75rem;
}
.chart-container {
height: 200px;
}
}
/* 打印样式优化 */
@media print {
.navbar,
.back-to-top,
.floating-element,
.demo-sidebar,
.hero-bg-animation {
display: none !important;
}
.hero-section {
background: white !important;
color: black !important;
page-break-inside: avoid;
}
.demo-content,
.dashboard-card {
background: white !important;
box-shadow: none !important;
border: 1px solid #ddd !important;
}
body {
font-size: 12pt;
line-height: 1.4;
}
h1, h2, h3, h4, h5, h6 {
page-break-after: avoid;
}
.card {
page-break-inside: avoid;
border: 1px solid #ddd !important;
box-shadow: none !important;
}
}
/* 可访问性增强 */
@media (prefers-reduced-motion: no-preference) {
.smooth-scroll {
scroll-behavior: smooth;
}
}
/* 高分辨率屏幕优化 */
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
.logo-container i {
transform: scale(1.1);
}
.metric-number {
text-rendering: optimizeLegibility;
}
}
/* 键盘导航优化 */
.btn:focus-visible,
.nav-link:focus-visible,
.form-control:focus-visible,
.demo-nav-item:focus-visible {
outline: 2px solid var(--primary-color);
outline-offset: 2px;
box-shadow: 0 0 0 4px rgba(76, 175, 80, 0.25);
}
/* 错误状态优化 */
.is-invalid:focus {
border-color: var(--danger-color);
box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);
}
/* 成功状态优化 */
.is-valid:focus {
border-color: var(--success-color);
box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);
}

473
website/demo.html Normal file
View File

@@ -0,0 +1,473 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>在线演示 - 活牛采购智能数字化系统</title>
<meta name="description" content="体验活牛采购智能数字化系统的强大功能,包括供应商管理、运输跟踪、质量控制等核心模块。">
<!-- Bootstrap 5 CSS -->
<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet">
<!-- Font Awesome Icons -->
<link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
<!-- Chart.js -->
<script src="https://cdn.bootcdn.net/ajax/libs/Chart.js/3.9.1/chart.min.js"></script>
<!-- 自定义样式 -->
<link href="css/custom.css" rel="stylesheet">
<style>
.demo-container {
background: #f8f9fa;
min-height: 100vh;
padding-top: 100px;
}
.demo-header {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 4rem 0;
margin-top: -100px;
padding-top: 150px;
}
.demo-sidebar {
background: white;
border-radius: 15px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
padding: 2rem;
position: sticky;
top: 120px;
}
.demo-content {
background: white;
border-radius: 15px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
padding: 2rem;
min-height: 600px;
}
.demo-nav-item {
padding: 0.75rem 1rem;
margin: 0.25rem 0;
border-radius: 10px;
cursor: pointer;
transition: all 0.3s ease;
border: none;
background: none;
width: 100%;
text-align: left;
}
.demo-nav-item:hover {
background: rgba(76, 175, 80, 0.1);
transform: translateX(5px);
}
.demo-nav-item.active {
background: var(--primary-color);
color: white;
}
.dashboard-card {
background: white;
border-radius: 12px;
padding: 1.5rem;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
transition: all 0.3s ease;
margin-bottom: 1.5rem;
}
.dashboard-card:hover {
transform: translateY(-5px);
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);
}
.metric-card {
text-align: center;
padding: 2rem 1rem;
}
.metric-number {
font-size: 2.5rem;
font-weight: 700;
color: var(--primary-color);
margin-bottom: 0.5rem;
}
.metric-label {
color: #6c757d;
font-size: 0.9rem;
}
.process-step {
padding: 1rem;
border-radius: 10px;
background: #f8f9fa;
margin-bottom: 1rem;
border-left: 4px solid var(--primary-color);
}
.process-step.completed {
background: rgba(76, 175, 80, 0.1);
border-left-color: var(--success-color);
}
.process-step.active {
background: rgba(255, 193, 7, 0.1);
border-left-color: var(--warning-color);
}
.chart-container {
position: relative;
height: 300px;
margin: 1rem 0;
}
</style>
</head>
<body>
<!-- 导航栏 -->
<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top">
<div class="container">
<a class="navbar-brand d-flex align-items-center" href="index.html">
<div class="logo-container me-2">
<i class="fas fa-cow text-primary fs-2"></i>
</div>
<div class="brand-text">
<div class="brand-name fw-bold">NiuMall</div>
<div class="brand-subtitle">活牛采购智能系统</div>
</div>
</a>
<div class="navbar-nav ms-auto">
<a href="index.html" class="nav-link">
<i class="fas fa-home me-1"></i>返回首页
</a>
</div>
</div>
</nav>
<!-- 演示页面 -->
<div class="demo-container">
<!-- 页面标题 -->
<section class="demo-header">
<div class="container">
<div class="row align-items-center">
<div class="col-lg-8">
<h1 class="display-4 fw-bold mb-3">系统在线演示</h1>
<p class="lead">体验活牛采购智能数字化系统的完整功能,了解如何提升您的采购效率</p>
</div>
<div class="col-lg-4 text-center">
<div class="demo-stats">
<div class="row g-3">
<div class="col-6">
<div class="stat-item text-center">
<div class="stat-number count-up" data-target="1000">0</div>
<small>活跃用户</small>
</div>
</div>
<div class="col-6">
<div class="stat-item text-center">
<div class="stat-number count-up" data-target="50000">0</div>
<small>完成订单</small>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- 演示内容 -->
<section class="py-5">
<div class="container">
<div class="row">
<!-- 侧边导航 -->
<div class="col-lg-3">
<div class="demo-sidebar">
<h5 class="mb-3">功能模块</h5>
<div class="demo-nav">
<button class="demo-nav-item active" onclick="showDemo('dashboard')">
<i class="fas fa-tachometer-alt me-2"></i>
数据驾驶舱
</button>
<button class="demo-nav-item" onclick="showDemo('orders')">
<i class="fas fa-shopping-cart me-2"></i>
订单管理
</button>
<button class="demo-nav-item" onclick="showDemo('suppliers')">
<i class="fas fa-users me-2"></i>
供应商管理
</button>
<button class="demo-nav-item" onclick="showDemo('transport')">
<i class="fas fa-truck me-2"></i>
运输跟踪
</button>
<button class="demo-nav-item" onclick="showDemo('quality')">
<i class="fas fa-shield-alt me-2"></i>
质量管理
</button>
<button class="demo-nav-item" onclick="showDemo('finance')">
<i class="fas fa-chart-line me-2"></i>
财务结算
</button>
</div>
</div>
</div>
<!-- 演示内容区域 -->
<div class="col-lg-9">
<div class="demo-content">
<!-- 数据驾驶舱 -->
<div id="dashboard-demo" class="demo-section">
<h3 class="mb-4">
<i class="fas fa-tachometer-alt text-primary me-2"></i>
数据驾驶舱
</h3>
<!-- 关键指标 -->
<div class="row mb-4">
<div class="col-md-3">
<div class="dashboard-card metric-card">
<div class="metric-number count-up" data-target="156">0</div>
<div class="metric-label">本月订单</div>
</div>
</div>
<div class="col-md-3">
<div class="dashboard-card metric-card">
<div class="metric-number count-up" data-target="89" data-suffix="%">0%</div>
<div class="metric-label">完成率</div>
</div>
</div>
<div class="col-md-3">
<div class="dashboard-card metric-card">
<div class="metric-number count-up" data-target="2356">0</div>
<div class="metric-label">运输中</div>
</div>
</div>
<div class="col-md-3">
<div class="dashboard-card metric-card">
<div class="metric-number count-up" data-target="98" data-suffix="%">0%</div>
<div class="metric-label">质量合格率</div>
</div>
</div>
</div>
<!-- 图表区域 -->
<div class="row">
<div class="col-md-8">
<div class="dashboard-card">
<h5 class="mb-3">订单趋势分析</h5>
<div class="chart-container">
<canvas id="ordersChart"></canvas>
</div>
</div>
</div>
<div class="col-md-4">
<div class="dashboard-card">
<h5 class="mb-3">供应商分布</h5>
<div class="chart-container">
<canvas id="suppliersChart"></canvas>
</div>
</div>
</div>
</div>
</div>
<!-- 其他演示模块 -->
<div id="orders-demo" class="demo-section" style="display: none;">
<h3 class="mb-4">
<i class="fas fa-shopping-cart text-primary me-2"></i>
订单管理系统
</h3>
<p class="text-muted mb-4">完整的订单生命周期管理,从创建到完成的全流程跟踪</p>
<div class="dashboard-card">
<h5 class="mb-3">订单处理流程</h5>
<div class="process-step completed">
<strong>1. 订单创建</strong> - 采购人员创建采购需求
<small class="text-success d-block">✓ 已完成</small>
</div>
<div class="process-step completed">
<strong>2. 供应商确认</strong> - 供应商接受订单并确认交期
<small class="text-success d-block">✓ 已完成</small>
</div>
<div class="process-step active">
<strong>3. 质量检验</strong> - 牛只质量检验和证件审核
<small class="text-warning d-block">⏳ 进行中</small>
</div>
<div class="process-step">
<strong>4. 运输配送</strong> - 专业运输队伍配送
<small class="text-muted d-block">○ 待执行</small>
</div>
<div class="process-step">
<strong>5. 到货验收</strong> - 买方验收确认
<small class="text-muted d-block">○ 待执行</small>
</div>
</div>
</div>
<!-- 更多演示模块将在这里添加 -->
<div id="suppliers-demo" class="demo-section" style="display: none;">
<h3 class="mb-4">
<i class="fas fa-users text-primary me-2"></i>
供应商管理
</h3>
<p class="text-muted mb-4">全面的供应商资质管理和评估体系</p>
<div class="row">
<div class="col-md-4">
<div class="dashboard-card text-center">
<i class="fas fa-certificate text-primary fs-1 mb-3"></i>
<h5>资质认证</h5>
<p class="text-muted">营业执照、检疫证明等资质文件管理</p>
</div>
</div>
<div class="col-md-4">
<div class="dashboard-card text-center">
<i class="fas fa-star text-warning fs-1 mb-3"></i>
<h5>评级管理</h5>
<p class="text-muted">基于历史交易的供应商信用评级</p>
</div>
</div>
<div class="col-md-4">
<div class="dashboard-card text-center">
<i class="fas fa-chart-bar text-success fs-1 mb-3"></i>
<h5>绩效分析</h5>
<p class="text-muted">交付准时率、质量合格率统计</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- 试用申请区域 -->
<section class="py-5 bg-primary text-white">
<div class="container text-center">
<h2 class="mb-3">准备开始使用了吗?</h2>
<p class="lead mb-4">立即申请免费试用,体验完整功能</p>
<div class="row justify-content-center">
<div class="col-md-6">
<form class="trial-form">
<div class="input-group input-group-lg">
<input type="email" class="form-control" placeholder="请输入您的邮箱地址" required>
<button class="btn btn-light btn-lg" type="submit">
<i class="fas fa-rocket me-2"></i>立即试用
</button>
</div>
</form>
</div>
</div>
</div>
</section>
</div>
<!-- Bootstrap JS -->
<script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0/js/bootstrap.bundle.min.js"></script>
<!-- 自定义脚本 -->
<script src="js/main.js"></script>
<script>
// 演示模块切换
function showDemo(module) {
// 隐藏所有演示模块
document.querySelectorAll('.demo-section').forEach(section => {
section.style.display = 'none';
});
// 移除所有导航项的active类
document.querySelectorAll('.demo-nav-item').forEach(item => {
item.classList.remove('active');
});
// 显示选中的模块
document.getElementById(module + '-demo').style.display = 'block';
// 激活对应的导航项
event.target.classList.add('active');
// 重新初始化图表(如果是仪表盘)
if (module === 'dashboard') {
setTimeout(initCharts, 100);
}
}
// 初始化图表
function initCharts() {
// 订单趋势图
const ordersCtx = document.getElementById('ordersChart');
if (ordersCtx) {
new Chart(ordersCtx, {
type: 'line',
data: {
labels: ['1月', '2月', '3月', '4月', '5月', '6月'],
datasets: [{
label: '订单数量',
data: [120, 190, 300, 250, 200, 300],
borderColor: '#4CAF50',
backgroundColor: 'rgba(76, 175, 80, 0.1)',
tension: 0.4
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
display: false
}
}
}
});
}
// 供应商分布图
const suppliersCtx = document.getElementById('suppliersChart');
if (suppliersCtx) {
new Chart(suppliersCtx, {
type: 'doughnut',
data: {
labels: ['华北', '华东', '华南', '西部'],
datasets: [{
data: [30, 45, 20, 15],
backgroundColor: [
'#4CAF50',
'#2196F3',
'#FF9800',
'#9C27B0'
]
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
position: 'bottom'
}
}
}
});
}
}
// 页面加载完成后初始化
document.addEventListener('DOMContentLoaded', function() {
setTimeout(initCharts, 500);
// 试用表单提交
document.querySelector('.trial-form').addEventListener('submit', function(e) {
e.preventDefault();
const email = this.querySelector('input[type="email"]').value;
showAlert('success', '申请提交成功!我们会尽快与您联系。');
this.reset();
});
});
</script>
</body>
</html>

356
website/index-enhanced.html Normal file
View File

@@ -0,0 +1,356 @@
<!DOCTYPE html>
<html lang="zh-CN">
<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="活牛采购,畜牧管理,数字化系统,SOP系统,农业数字化,养殖业">
<!-- Favicon -->
<link rel="icon" type="image/png" sizes="32x32" href="images/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="images/favicon-16x16.png">
<!-- Bootstrap 5 CSS -->
<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet">
<!-- Font Awesome Icons -->
<link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
<!-- AOS Animation -->
<link href="https://cdn.bootcdn.net/ajax/libs/aos/2.3.4/aos.css" rel="stylesheet">
<!-- 自定义样式 -->
<link href="css/custom.css" rel="stylesheet">
<!-- 响应式样式 -->
<link href="css/responsive.css" rel="stylesheet">
<!-- 结构化数据 -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "活牛采购智能数字化系统",
"description": "专业的活牛采购数字化管理系统,提供从采购、运输到结算的全流程数字化解决方案",
"applicationCategory": "BusinessApplication",
"operatingSystem": "Web",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "CNY"
},
"provider": {
"@type": "Organization",
"name": "NiuMall",
"url": "https://www.niumall.com"
}
}
</script>
</head>
<body>
<!-- 顶部联系栏 -->
<div class="top-bar bg-primary text-white py-2 d-none d-md-block">
<div class="container">
<div class="row align-items-center">
<div class="col-md-8">
<small>
<i class="fas fa-phone me-2"></i>咨询热线400-xxx-xxxx
<span class="mx-3">|</span>
<i class="fas fa-envelope me-2"></i>邮箱info@niumall.com
</small>
</div>
<div class="col-md-4 text-end">
<small>
<a href="#" class="text-white text-decoration-none me-3">
<i class="fab fa-weixin me-1"></i>微信
</a>
<a href="#" class="text-white text-decoration-none">
<i class="fab fa-qq me-1"></i>QQ
</a>
</small>
</div>
</div>
</div>
</div>
<!-- 导航栏 -->
<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top shadow-sm" id="mainNavbar">
<div class="container">
<a class="navbar-brand d-flex align-items-center" href="index.html">
<div class="logo-container me-2">
<i class="fas fa-cow text-primary fs-2"></i>
</div>
<div class="brand-text">
<div class="brand-name fw-bold">NiuMall</div>
<div class="brand-subtitle">活牛采购智能系统</div>
</div>
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav mx-auto">
<li class="nav-item">
<a class="nav-link active" href="index.html">
<i class="fas fa-home me-1"></i>首页
</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown">
<i class="fas fa-cube me-1"></i>产品中心
</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="product.html">产品介绍</a></li>
<li><a class="dropdown-item" href="solutions.html">解决方案</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="demo.html">在线演示</a></li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link" href="cases.html">
<i class="fas fa-trophy me-1"></i>客户案例
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="news.html">
<i class="fas fa-newspaper me-1"></i>新闻动态
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="about.html">
<i class="fas fa-info-circle me-1"></i>关于我们
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="contact.html">
<i class="fas fa-envelope me-1"></i>联系我们
</a>
</li>
</ul>
<div class="navbar-actions d-flex gap-2">
<a href="contact.html" class="btn btn-outline-primary btn-sm">
<i class="fas fa-phone me-1"></i>咨询
</a>
<a href="contact.html" class="btn btn-primary btn-sm">
<i class="fas fa-rocket me-1"></i>免费试用
</a>
</div>
</div>
</div>
</nav>
<!-- 英雄区域 -->
<section class="hero-section position-relative overflow-hidden" id="hero">
<!-- 背景动画元素 -->
<div class="hero-bg-animation">
<div class="floating-element" style="--delay: 0s; --x: 10%; --y: 20%;">
<i class="fas fa-cow text-primary opacity-25"></i>
</div>
<div class="floating-element" style="--delay: 1s; --x: 80%; --y: 10%;">
<i class="fas fa-truck text-success opacity-25"></i>
</div>
<div class="floating-element" style="--delay: 2s; --x: 20%; --y: 80%;">
<i class="fas fa-chart-line text-info opacity-25"></i>
</div>
<div class="floating-element" style="--delay: 3s; --x: 70%; --y: 70%;">
<i class="fas fa-shield-alt text-warning opacity-25"></i>
</div>
</div>
<div class="container position-relative">
<div class="row align-items-center min-vh-100">
<div class="col-lg-6">
<div class="hero-content" data-aos="fade-right">
<div class="hero-badge mb-3">
<span class="badge bg-primary fs-6 px-3 py-2">
<i class="fas fa-star me-2"></i>行业领先的数字化解决方案
</span>
</div>
<h1 class="hero-title display-3 fw-bold mb-4">
数字化活牛采购
<span class="text-primary">全流程管理</span>
</h1>
<p class="hero-subtitle lead mb-4 text-muted">
专业的SOP采购管理系统从供应商筛选、订单管理、运输跟踪到财务结算
<strong class="text-primary">一站式解决</strong>活牛采购的所有难题
</p>
<div class="hero-features mb-4">
<div class="row g-3">
<div class="col-6 col-md-3">
<div class="feature-item text-center">
<i class="fas fa-users text-primary fs-4 mb-2"></i>
<small class="d-block">供应商管理</small>
</div>
</div>
<div class="col-6 col-md-3">
<div class="feature-item text-center">
<i class="fas fa-truck text-success fs-4 mb-2"></i>
<small class="d-block">运输跟踪</small>
</div>
</div>
<div class="col-6 col-md-3">
<div class="feature-item text-center">
<i class="fas fa-shield-alt text-warning fs-4 mb-2"></i>
<small class="d-block">质量保证</small>
</div>
</div>
<div class="col-6 col-md-3">
<div class="feature-item text-center">
<i class="fas fa-chart-line text-info fs-4 mb-2"></i>
<small class="d-block">数据分析</small>
</div>
</div>
</div>
</div>
<div class="hero-actions d-flex flex-wrap gap-3">
<a href="contact.html" class="btn btn-primary btn-lg px-4 py-3">
<i class="fas fa-rocket me-2"></i>立即试用
<small class="d-block mt-1">免费体验30天</small>
</a>
<a href="product.html" class="btn btn-outline-secondary btn-lg px-4 py-3">
<i class="fas fa-play-circle me-2"></i>观看演示
<small class="d-block mt-1">3分钟了解产品</small>
</a>
</div>
<div class="hero-stats mt-5">
<div class="row g-4">
<div class="col-4">
<div class="stat-item text-center">
<div class="stat-number h4 fw-bold text-primary mb-1" data-target="500">0</div>
<small class="text-muted">服务企业</small>
</div>
</div>
<div class="col-4">
<div class="stat-item text-center">
<div class="stat-number h4 fw-bold text-success mb-1" data-target="99">0</div>
<small class="text-muted">满意度%</small>
</div>
</div>
<div class="col-4">
<div class="stat-item text-center">
<div class="stat-number h4 fw-bold text-warning mb-1" data-target="40">0</div>
<small class="text-muted">效率提升%</small>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="hero-visual" data-aos="fade-left">
<div class="hero-image-container position-relative">
<!-- 主要展示图 -->
<div class="main-visual">
<div class="dashboard-mockup bg-white rounded-3 shadow-lg p-4">
<div class="mockup-header d-flex align-items-center mb-3">
<div class="d-flex gap-2">
<div class="dot bg-danger rounded-circle" style="width: 12px; height: 12px;"></div>
<div class="dot bg-warning rounded-circle" style="width: 12px; height: 12px;"></div>
<div class="dot bg-success rounded-circle" style="width: 12px; height: 12px;"></div>
</div>
<div class="ms-3 text-muted small">活牛采购管理系统</div>
</div>
<div class="mockup-content">
<!-- 模拟仪表盘 -->
<div class="row g-3 mb-4">
<div class="col-6">
<div class="card border-0 bg-primary bg-opacity-10">
<div class="card-body p-3">
<div class="d-flex align-items-center">
<i class="fas fa-shopping-cart text-primary fs-4"></i>
<div class="ms-3">
<div class="h6 mb-0">156</div>
<small class="text-muted">本月订单</small>
</div>
</div>
</div>
</div>
</div>
<div class="col-6">
<div class="card border-0 bg-success bg-opacity-10">
<div class="card-body p-3">
<div class="d-flex align-items-center">
<i class="fas fa-truck text-success fs-4"></i>
<div class="ms-3">
<div class="h6 mb-0">23</div>
<small class="text-muted">运输中</small>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 模拟图表 -->
<div class="chart-area bg-light rounded p-3">
<div class="d-flex justify-content-between align-items-center mb-2">
<small class="text-muted">采购趋势</small>
<div class="progress" style="width: 100px; height: 4px;">
<div class="progress-bar bg-primary" style="width: 75%"></div>
</div>
</div>
<div class="mock-chart d-flex align-items-end gap-1" style="height: 60px;">
<div class="bar bg-primary rounded-top" style="height: 30%; width: 8px;"></div>
<div class="bar bg-primary rounded-top" style="height: 60%; width: 8px;"></div>
<div class="bar bg-primary rounded-top" style="height: 40%; width: 8px;"></div>
<div class="bar bg-primary rounded-top" style="height: 80%; width: 8px;"></div>
<div class="bar bg-primary rounded-top" style="height: 100%; width: 8px;"></div>
<div class="bar bg-primary rounded-top" style="height: 70%; width: 8px;"></div>
<div class="bar bg-primary rounded-top" style="height: 90%; width: 8px;"></div>
</div>
</div>
</div>
</div>
</div>
<!-- 浮动元素 -->
<div class="floating-card position-absolute" style="top: -20px; right: -20px;">
<div class="card border-0 shadow-sm" style="width: 200px;">
<div class="card-body p-3">
<div class="d-flex align-items-center">
<i class="fas fa-bell text-warning fs-5"></i>
<div class="ms-2">
<div class="small fw-bold">新订单通知</div>
<div class="tiny text-muted">2分钟前</div>
</div>
</div>
</div>
</div>
</div>
<div class="floating-card position-absolute" style="bottom: -20px; left: -20px;">
<div class="card border-0 shadow-sm" style="width: 180px;">
<div class="card-body p-3">
<div class="d-flex align-items-center">
<i class="fas fa-check-circle text-success fs-5"></i>
<div class="ms-2">
<div class="small fw-bold">运输完成</div>
<div class="tiny text-muted">订单#12345</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 滚动提示 -->
<div class="scroll-indicator position-absolute bottom-0 start-50 translate-middle-x mb-4">
<div class="text-center">
<small class="text-muted d-block mb-2">了解更多</small>
<i class="fas fa-chevron-down text-primary animate-bounce"></i>
</div>
</div>
</section>
<!-- 其他部分保持不变... -->

View File

@@ -9,6 +9,13 @@ document.addEventListener('DOMContentLoaded', function() {
initBackToTop();
initImageLazyLoading();
initFormValidation();
initParticleEffect();
initTypewriter();
initProgressBars();
initCountUp();
initModalEffects();
initSmoothScrolling();
initPreloader();
console.log('官网初始化完成 - 活牛采购智能数字化系统');
});
@@ -17,23 +24,47 @@ document.addEventListener('DOMContentLoaded', function() {
function initNavigation() {
const navbar = document.querySelector('.navbar');
const navLinks = document.querySelectorAll('.nav-link');
const navbarToggler = document.querySelector('.navbar-toggler');
const navbarCollapse = document.querySelector('.navbar-collapse');
// 滚动时导航栏样式变化
window.addEventListener('scroll', function() {
window.addEventListener('scroll', throttle(function() {
if (window.scrollY > 100) {
navbar.classList.add('navbar-scrolled');
navbar.style.backgroundColor = 'rgba(255, 255, 255, 0.95)';
navbar.style.boxShadow = '0 2px 20px rgba(0, 0, 0, 0.1)';
navbar.classList.add('navbar-scrolled', 'scrolled');
navbar.style.backgroundColor = 'rgba(0, 0, 0, 0.95)';
navbar.style.boxShadow = '0 2px 20px rgba(0, 0, 0, 0.3)';
navbar.style.backdropFilter = 'blur(10px)';
} else {
navbar.classList.remove('navbar-scrolled');
navbar.style.backgroundColor = 'rgba(255, 255, 255, 1)';
navbar.classList.remove('navbar-scrolled', 'scrolled');
navbar.style.backgroundColor = 'rgba(0, 0, 0, 0.8)';
navbar.style.boxShadow = 'none';
}
});
}, 100));
// 移动端导航切换
if (navbarToggler && navbarCollapse) {
navbarToggler.addEventListener('click', function() {
navbarCollapse.classList.toggle('show');
this.classList.toggle('collapsed');
// 动画效果
if (navbarCollapse.classList.contains('show')) {
navbarCollapse.style.animation = 'slideDown 0.3s ease-out';
} else {
navbarCollapse.style.animation = 'slideUp 0.3s ease-out';
}
});
}
// 导航链接点击效果
navLinks.forEach(link => {
link.addEventListener('click', function(e) {
// 添加点击动画
this.style.transform = 'scale(0.95)';
setTimeout(() => {
this.style.transform = 'scale(1)';
}, 150);
// 移除所有active类
navLinks.forEach(l => l.classList.remove('active'));
// 添加当前active类
@@ -45,13 +76,36 @@ function initNavigation() {
e.preventDefault();
const targetElement = document.querySelector(targetId);
if (targetElement) {
targetElement.scrollIntoView({
behavior: 'smooth',
block: 'start'
const offsetTop = targetElement.offsetTop - 80;
window.scrollTo({
top: offsetTop,
behavior: 'smooth'
});
// 关闭移动端菜单
if (navbarCollapse.classList.contains('show')) {
navbarToggler.click();
}
}
}
});
// 悬停效果
link.addEventListener('mouseenter', function() {
this.style.transform = 'translateY(-2px)';
});
link.addEventListener('mouseleave', function() {
this.style.transform = 'translateY(0)';
});
});
// 自动高亮当前页面对应的导航项
const currentPage = window.location.pathname.split('/').pop();
navLinks.forEach(link => {
if (link.getAttribute('href') === currentPage) {
link.classList.add('active');
}
});
}
@@ -307,4 +361,346 @@ function monitorPerformance() {
}
// 初始化性能监控
monitorPerformance();
monitorPerformance();
// 加载动画初始化
function initPreloader() {
const preloader = document.createElement('div');
preloader.className = 'preloader';
preloader.innerHTML = `
<div class="preloader-inner">
<div class="preloader-logo">
<i class="fas fa-cow text-primary fs-1"></i>
<div class="brand-name mt-2">NiuMall</div>
</div>
<div class="loading-bar">
<div class="loading-progress"></div>
</div>
<p class="loading-text">正在加载中...</p>
</div>
`;
// 添加加载动画样式
const style = document.createElement('style');
style.textContent = `
.preloader {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
display: flex;
align-items: center;
justify-content: center;
z-index: 9999;
transition: opacity 0.5s ease, visibility 0.5s ease;
}
.preloader-inner {
text-align: center;
color: white;
}
.brand-name {
font-size: 2rem;
font-weight: bold;
margin-bottom: 2rem;
}
.loading-bar {
width: 200px;
height: 4px;
background: rgba(255, 255, 255, 0.3);
border-radius: 2px;
overflow: hidden;
margin: 0 auto;
}
.loading-progress {
height: 100%;
background: linear-gradient(90deg, #4CAF50, #81C784);
width: 0;
animation: loadingProgress 2s ease-in-out;
}
.loading-text {
margin-top: 1rem;
font-size: 1.1rem;
opacity: 0.9;
}
@keyframes loadingProgress {
0% { width: 0%; }
100% { width: 100%; }
}
.preloader.hide {
opacity: 0;
visibility: hidden;
}
`;
document.head.appendChild(style);
document.body.appendChild(preloader);
// 页面加载完成后隐藏加载动画
window.addEventListener('load', function() {
setTimeout(() => {
preloader.classList.add('hide');
setTimeout(() => {
preloader.remove();
style.remove();
}, 500);
}, 1000);
});
}
// 打字机效果
function initTypewriter() {
const typewriterElements = document.querySelectorAll('.typewriter');
typewriterElements.forEach(element => {
const text = element.textContent;
element.textContent = '';
element.style.borderRight = '2px solid #4CAF50';
element.style.animation = 'typewriter-cursor 1s infinite';
let i = 0;
const timer = setInterval(() => {
if (i < text.length) {
element.textContent += text.charAt(i);
i++;
} else {
clearInterval(timer);
setTimeout(() => {
element.style.borderRight = 'none';
}, 1000);
}
}, 100);
});
// 添加打字机样式
if (!document.querySelector('#typewriter-style')) {
const style = document.createElement('style');
style.id = 'typewriter-style';
style.textContent = `
@keyframes typewriter-cursor {
0%, 50% { border-right-color: transparent; }
51%, 100% { border-right-color: #4CAF50; }
}
`;
document.head.appendChild(style);
}
}
// 进度条动画
function initProgressBars() {
const progressBars = document.querySelectorAll('.progress-bar');
const progressObserver = new IntersectionObserver(function(entries) {
entries.forEach(entry => {
if (entry.isIntersecting) {
const progressBar = entry.target;
const targetWidth = progressBar.getAttribute('data-width') || '100%';
progressBar.style.width = '0%';
progressBar.style.transition = 'width 2s ease-in-out';
setTimeout(() => {
progressBar.style.width = targetWidth;
}, 100);
progressObserver.unobserve(progressBar);
}
});
});
progressBars.forEach(bar => progressObserver.observe(bar));
}
// 数字递增动画优化
function initCountUp() {
const countElements = document.querySelectorAll('.count-up');
const countObserver = new IntersectionObserver(function(entries) {
entries.forEach(entry => {
if (entry.isIntersecting) {
const element = entry.target;
const target = parseInt(element.getAttribute('data-target') || element.textContent);
const duration = parseInt(element.getAttribute('data-duration') || '2000');
const suffix = element.getAttribute('data-suffix') || '';
animateNumber(element, 0, target, duration, suffix);
countObserver.unobserve(element);
}
});
});
countElements.forEach(el => countObserver.observe(el));
}
// 数字动画函数
function animateNumber(element, start, end, duration, suffix) {
const startTime = performance.now();
function update(currentTime) {
const elapsed = currentTime - startTime;
const progress = Math.min(elapsed / duration, 1);
// 使用缓动函数
const easeProgress = 1 - Math.pow(1 - progress, 3);
const current = Math.floor(start + (end - start) * easeProgress);
element.textContent = current.toLocaleString() + suffix;
if (progress < 1) {
requestAnimationFrame(update);
}
}
requestAnimationFrame(update);
}
// 模态框效果
function initModalEffects() {
const modals = document.querySelectorAll('.modal');
modals.forEach(modal => {
modal.addEventListener('show.bs.modal', function() {
this.querySelector('.modal-dialog').style.transform = 'scale(0.8)';
this.querySelector('.modal-dialog').style.opacity = '0';
setTimeout(() => {
this.querySelector('.modal-dialog').style.transition = 'all 0.3s ease';
this.querySelector('.modal-dialog').style.transform = 'scale(1)';
this.querySelector('.modal-dialog').style.opacity = '1';
}, 10);
});
modal.addEventListener('hide.bs.modal', function() {
this.querySelector('.modal-dialog').style.transform = 'scale(0.8)';
this.querySelector('.modal-dialog').style.opacity = '0';
});
});
}
// 平滑滚动优化
function initSmoothScrolling() {
// 禁用默认滚动行为
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function(e) {
e.preventDefault();
const target = document.querySelector(this.getAttribute('href'));
if (target) {
const offsetTop = target.getBoundingClientRect().top + window.pageYOffset - 80;
// 使用自定义平滑滚动
smoothScrollTo(offsetTop, 1000);
}
});
});
}
// 自定义平滑滚动函数
function smoothScrollTo(target, duration) {
const start = window.pageYOffset;
const distance = target - start;
const startTime = performance.now();
function scroll(currentTime) {
const elapsed = currentTime - startTime;
const progress = Math.min(elapsed / duration, 1);
// 使用缓动函数
const easeProgress = 1 - Math.pow(1 - progress, 3);
window.scrollTo(0, start + distance * easeProgress);
if (progress < 1) {
requestAnimationFrame(scroll);
}
}
requestAnimationFrame(scroll);
}
// 粒子效果
function initParticleEffect() {
const heroSection = document.querySelector('.hero-section');
if (!heroSection) return;
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
canvas.style.position = 'absolute';
canvas.style.top = '0';
canvas.style.left = '0';
canvas.style.width = '100%';
canvas.style.height = '100%';
canvas.style.pointerEvents = 'none';
canvas.style.zIndex = '1';
heroSection.appendChild(canvas);
function resizeCanvas() {
canvas.width = heroSection.offsetWidth;
canvas.height = heroSection.offsetHeight;
}
resizeCanvas();
window.addEventListener('resize', resizeCanvas);
const particles = [];
// 创建粒子
function createParticle() {
return {
x: Math.random() * canvas.width,
y: Math.random() * canvas.height,
vx: (Math.random() - 0.5) * 0.5,
vy: (Math.random() - 0.5) * 0.5,
radius: Math.random() * 2 + 1,
opacity: Math.random() * 0.5 + 0.2
};
}
// 初始化粒子
for (let i = 0; i < 50; i++) {
particles.push(createParticle());
}
function animate() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
particles.forEach((particle, index) => {
// 更新位置
particle.x += particle.vx;
particle.y += particle.vy;
// 边界检测
if (particle.x < 0 || particle.x > canvas.width) particle.vx *= -1;
if (particle.y < 0 || particle.y > canvas.height) particle.vy *= -1;
// 绘制粒子
ctx.beginPath();
ctx.arc(particle.x, particle.y, particle.radius, 0, Math.PI * 2);
ctx.fillStyle = `rgba(76, 175, 80, ${particle.opacity})`;
ctx.fill();
// 连接粒子
particles.forEach((otherParticle, otherIndex) => {
if (index !== otherIndex) {
const dx = particle.x - otherParticle.x;
const dy = particle.y - otherParticle.y;
const distance = Math.sqrt(dx * dx + dy * dy);
if (distance < 100) {
ctx.beginPath();
ctx.moveTo(particle.x, particle.y);
ctx.lineTo(otherParticle.x, otherParticle.y);
ctx.strokeStyle = `rgba(76, 175, 80, ${0.1 * (1 - distance / 100)})`;
ctx.stroke();
}
}
});
});
requestAnimationFrame(animate);
}
animate();
}

View File

@@ -0,0 +1,194 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>产品介绍 - 活牛采购智能数字化系统</title>
<meta name="description" content="了解活牛采购智能数字化系统的核心功能,包括供应商管理、订单管理、运输跟踪等全流程功能。">
<!-- Bootstrap 5 CSS -->
<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet">
<!-- Font Awesome Icons -->
<link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
<!-- 自定义样式 -->
<link href="css/custom.css" rel="stylesheet">
<link href="css/responsive.css" rel="stylesheet">
</head>
<body>
<!-- 导航栏 -->
<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top">
<div class="container">
<a class="navbar-brand d-flex align-items-center" href="index.html">
<div class="logo-container me-2">
<i class="fas fa-cow text-primary fs-2"></i>
</div>
<div class="brand-text">
<div class="brand-name fw-bold">NiuMall</div>
<div class="brand-subtitle">活牛采购智能系统</div>
</div>
</a>
<div class="navbar-nav ms-auto">
<a href="index.html" class="nav-link">
<i class="fas fa-home me-1"></i>返回首页
</a>
</div>
</div>
</nav>
<!-- 产品英雄区域 -->
<section class="hero-section">
<div class="container">
<div class="row align-items-center min-vh-100">
<div class="col-lg-6">
<h1 class="display-3 fw-bold mb-4 text-white">
全流程数字化
<span class="text-primary">采购管理</span>
</h1>
<p class="lead mb-4 text-white-50">
从供应商筛选到财务结算NiuMall提供活牛采购的完整数字化解决方案
</p>
<div class="d-flex gap-3">
<a href="demo.html" class="btn btn-primary btn-lg">
<i class="fas fa-play me-2"></i>观看演示
</a>
<a href="contact.html" class="btn btn-outline-light btn-lg">
<i class="fas fa-download me-2"></i>下载手册
</a>
</div>
</div>
<div class="col-lg-6">
<div class="bg-white rounded-3 shadow-lg p-4">
<h5 class="mb-3">实时数据驾驶舱</h5>
<div class="row g-3">
<div class="col-4">
<div class="text-center p-2 bg-primary bg-opacity-10 rounded">
<div class="h4 text-primary mb-0 count-up" data-target="156">0</div>
<small>本月订单</small>
</div>
</div>
<div class="col-4">
<div class="text-center p-2 bg-success bg-opacity-10 rounded">
<div class="h4 text-success mb-0 count-up" data-target="98" data-suffix="%">0%</div>
<small>成功率</small>
</div>
</div>
<div class="col-4">
<div class="text-center p-2 bg-warning bg-opacity-10 rounded">
<div class="h4 text-warning mb-0 count-up" data-target="24">0</div>
<small>运输中</small>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- 核心功能模块 -->
<section class="py-5">
<div class="container">
<div class="text-center mb-5">
<h2 class="display-5 fw-bold mb-3">核心功能模块</h2>
<p class="lead text-muted">全面覆盖活牛采购业务的每一个环节</p>
</div>
<div class="row g-4">
<div class="col-lg-4 col-md-6">
<div class="card h-100 border-0 shadow">
<div class="card-body p-4 text-center">
<div class="feature-icon bg-primary bg-opacity-10 p-3 rounded-circle mx-auto mb-3" style="width: 80px; height: 80px;">
<i class="fas fa-users text-primary fs-2"></i>
</div>
<h4 class="fw-bold mb-3">供应商管理</h4>
<p class="text-muted">完整的供应商档案管理、资质审核、绩效评估体系</p>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6">
<div class="card h-100 border-0 shadow">
<div class="card-body p-4 text-center">
<div class="feature-icon bg-success bg-opacity-10 p-3 rounded-circle mx-auto mb-3" style="width: 80px; height: 80px;">
<i class="fas fa-shopping-cart text-success fs-2"></i>
</div>
<h4 class="fw-bold mb-3">订单管理</h4>
<p class="text-muted">标准化的采购流程管理,从需求计划到订单执行</p>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6">
<div class="card h-100 border-0 shadow">
<div class="card-body p-4 text-center">
<div class="feature-icon bg-warning bg-opacity-10 p-3 rounded-circle mx-auto mb-3" style="width: 80px; height: 80px;">
<i class="fas fa-truck text-warning fs-2"></i>
</div>
<h4 class="fw-bold mb-3">运输跟踪</h4>
<p class="text-muted">全程可视化的运输监控,确保运输过程安全透明</p>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6">
<div class="card h-100 border-0 shadow">
<div class="card-body p-4 text-center">
<div class="feature-icon bg-info bg-opacity-10 p-3 rounded-circle mx-auto mb-3" style="width: 80px; height: 80px;">
<i class="fas fa-shield-alt text-info fs-2"></i>
</div>
<h4 class="fw-bold mb-3">质量管理</h4>
<p class="text-muted">严格的质量控制体系,确保牛只质量符合标准</p>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6">
<div class="card h-100 border-0 shadow">
<div class="card-body p-4 text-center">
<div class="feature-icon bg-danger bg-opacity-10 p-3 rounded-circle mx-auto mb-3" style="width: 80px; height: 80px;">
<i class="fas fa-chart-line text-danger fs-2"></i>
</div>
<h4 class="fw-bold mb-3">财务结算</h4>
<p class="text-muted">自动化的财务结算系统,提高资金使用效率</p>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6">
<div class="card h-100 border-0 shadow">
<div class="card-body p-4 text-center">
<div class="feature-icon bg-secondary bg-opacity-10 p-3 rounded-circle mx-auto mb-3" style="width: 80px; height: 80px;">
<i class="fas fa-chart-bar text-secondary fs-2"></i>
</div>
<h4 class="fw-bold mb-3">数据分析</h4>
<p class="text-muted">深度数据分析和商业智能,为决策提供科学依据</p>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- 体验申请区域 -->
<section class="py-5 bg-primary text-white">
<div class="container text-center">
<h2 class="mb-3">准备开始体验了吗?</h2>
<p class="lead mb-4">立即申请免费试用,体验完整功能</p>
<div class="d-flex gap-3 justify-content-center">
<a href="demo.html" class="btn btn-light btn-lg">
<i class="fas fa-play me-2"></i>在线演示
</a>
<a href="contact.html" class="btn btn-outline-light btn-lg">
<i class="fas fa-phone me-2"></i>联系咨询
</a>
</div>
</div>
</section>
<!-- Bootstrap JS -->
<script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0/js/bootstrap.bundle.min.js"></script>
<!-- 自定义脚本 -->
<script src="js/main.js"></script>
</body>
</html>