Peter0225 commited on
Commit
fc05821
·
verified ·
1 Parent(s): 7272a53

你是一个汽车行业数据分析看板的制作专家,并在前端开发领域有丰富的代码编写经验。核心任务是依据系统提供的汽车行业分析结果,进行详细分析,并将其转化为美观漂亮的中文可视化网页:

Browse files

## 内容要求

- 所有页面内容必须为简体中文

- 保留所有信息,输出8-10页,以更易读、可视化的方式呈现

- 在页面底部添加作者信息区域,包含:

- 作者姓名: 固定为[**Lane-AI**]

- 社交媒体链接: 至少包含GitHub、Twitter/X、LinkedIn等主流平台

- 版权信息和年份: 团队固定为[杭州维途科技有限公司]

- 数据更新日期

## 设计风格

- 整体风格参考Linear App的简约现代设计

- 使用清晰的视觉层次结构,突出重要内容

- 配色方案应专业、和谐,适合长时间阅读

## 技术规范

- 使用HTML5、TailwindCSS 3.0+(通过CDN引入)和必要的JavaScript

- 代码结构清晰,包含适当注释,便于理解和维护

## 响应式设计

- 页面必须在所有设备上(手机、平板、桌面)完美展示

- 针对不同屏幕尺寸优化布局和字体大小

- 确保移动端有良好的触控体验

## 图标与视觉元素

- 使用专业图标库如Font Awesome或Material Icons(通过CDN引入)

- 根据内容主题选择合适的插图或图表展示数据

- 图表库从这个地址引入:https://cdn.jsdelivr.net/npm/chart.js

- 避免使用emoji作为主要图标

## 设计规范

### 颜色方案

- #405DF9

- #6C63F0

- #7342CC

- #B750BE

- #ED589D

- #FB466C

- #FFC159

## 交互体验

- 添加适当的微交互效果提升用户体验:

- 按钮悬停时有轻微放大和颜色变化

- 卡片元素悬停时有精致的阴影和边框效果

- 页面滚动时有平滑过渡效果

- 内容区块加载时有优雅的淡入动画

## 性能优化

- 确保页面加载速度快,避免不必要的大型资源

- 图片使用现代格式(WebP)并进行适当压缩

- 实现懒加载技术用于长页面内容

## 输出要求

- 提供完整可运行的单一HTML文件,包含所有必要的CSS和JavaScript

- 确保代码符合W3C标准,无错误警告

- 页面在不同浏览器中保持一致的外观和功能

请根据内容类型(文档、数据、图片等),创建最适合展示该内容的可视化网页。

Files changed (8) hide show
  1. brands.html +277 -0
  2. components/footer.js +150 -0
  3. components/navbar.js +180 -0
  4. index.html +233 -18
  5. market.html +312 -0
  6. sales.html +293 -0
  7. script.js +79 -0
  8. style.css +276 -18
brands.html ADDED
@@ -0,0 +1,277 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ```html
2
+ <!DOCTYPE html>
3
+ <html lang="zh-CN">
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>品牌竞争分析 - 汽车数据分析看板</title>
8
+ <link rel="icon" type="image/x-icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🚗</text></svg>">
9
+ <link rel="stylesheet" href="style.css">
10
+ <script src="https://cdn.tailwindcss.com"></script>
11
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
12
+ <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
13
+ </head>
14
+ <body>
15
+ <custom-navbar></custom-navbar>
16
+
17
+ <main class="main-content">
18
+ <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
19
+ <!-- 页面标题 -->
20
+ <section class="mb-8">
21
+ <h1 class="text-3xl font-bold mb-2">品牌竞争分析</h1>
22
+ <p class="text-gray-600">分析各汽车品牌的竞争力和市场表现</p>
23
+ </section>
24
+
25
+ <!-- 品牌竞争力雷达图 -->
26
+ <div class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-8">
27
+ <div class="card">
28
+ <div class="card-title">
29
+ <i class="fas fa-crosshairs"></i>
30
+ 主要品牌竞争力对比
31
+ </div>
32
+ <div class="h-96">
33
+ <canvas id="brandRadarChart"></canvas>
34
+ </div>
35
+ </div>
36
+
37
+ <div class="card">
38
+ <div class="card-title">
39
+ <i class="fas fa-chart-bar"></i>
40
+ 品牌综合得分
41
+ </div>
42
+ <div class="h-96">
43
+ <canvas id="brandScoreChart"></canvas>
44
+ </div>
45
+ </div>
46
+ </div>
47
+
48
+ <!-- 品牌详细对比 -->
49
+ <div class="card mb-8">
50
+ <div class="card-title">
51
+ <i class="fas fa-balance-scale"></i>
52
+ 品牌详细对比
53
+ </div>
54
+ <div class="overflow-x-auto">
55
+ <table class="data-table">
56
+ <thead>
57
+ <tr>
58
+ <th>品牌</th>
59
+ <th>产品力</th>
60
+ <th>品牌力</th>
61
+ <th>服务力</th>
62
+ <th>创新力</th>
63
+ <th>性价比</th>
64
+ <th>综合得分</th>
65
+ </tr>
66
+ </thead>
67
+ <tbody>
68
+ <tr>
69
+ <td><strong>比亚迪</strong></td>
70
+ <td>92</td>
71
+ <td>85</td>
72
+ <td>78</td>
73
+ <td>95</td>
74
+ <td>90</td>
75
+ <td><span class="badge badge-success">88.0</span></td>
76
+ </tr>
77
+ <tr>
78
+ <td><strong>一汽大众</strong></td>
79
+ <td>88</td>
80
+ <td>90</td>
81
+ <td>85</td>
82
+ <td>72</td>
83
+ <td>75</td>
84
+ <td><span class="badge badge-info">82.0</span></td>
85
+ </tr>
86
+ <tr>
87
+ <td><strong>吉利汽车</strong></td>
88
+ <td>85</td>
89
+ <td>80</td>
90
+ <td>82</td>
91
+ <td>80</td>
92
+ <td>88</td>
93
+ <td><span class="badge badge-info">83.0</span></td>
94
+ </tr>
95
+ <tr>
96
+ <td><strong>特斯拉中国</strong></td>
97
+ <td>90</td>
98
+ <td>88</td>
99
+ <td>70</td>
100
+ <td>98</td>
101
+ <td>72</td>
102
+ <td><span class="badge badge-info">83.6</span></td>
103
+ </tr>
104
+ <tr>
105
+ <td><strong>广汽丰田</strong></td>
106
+ <td>86</td>
107
+ <td>88</td>
108
+ <td>90</td>
109
+ <td>65</td>
110
+ <td>80</td>
111
+ <td><span class="badge">81.8</span></td>
112
+ </tr>
113
+ <tr>
114
+ <td><strong>蔚来汽车</strong></td>
115
+ <td>88</td>
116
+ <td>82</td>
117
+ <td>92</td>
118
+ <td>90</td>
119
+ <td>70</td>
120
+ <td><span class="badge">84.4</span></td>
121
+ </tr>
122
+ </tbody>
123
+ </table>
124
+ </div>
125
+ </div>
126
+
127
+ <!-- 品牌优势分析 -->
128
+ <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
129
+ <div class="card">
130
+ <div class="flex items-center gap-3 mb-4">
131
+ <div class="w-10 h-10 rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 flex items-center justify-center text-white">
132
+ <i class="fas fa-lightbulb"></i>
133
+ </div>
134
+ <h3 class="font-semibold text-lg">创新优势品牌</h3>
135
+ </div>
136
+ <div class="space-y-3">
137
+ <div class="flex justify-between items-center">
138
+ <span>特斯拉</span>
139
+ <span class="badge badge-success">98分</span>
140
+ </div>
141
+ <div class="flex justify-between items-center">
142
+ <span>比亚迪</span>
143
+ <span class="badge badge-success">95分</span>
144
+ </div>
145
+ <div class="flex justify-between items-center">
146
+ <span>蔚来</span>
147
+ <span class="badge badge-info">90分</span>
148
+ </div>
149
+ </div>
150
+ </div>
151
+
152
+ <div class="card">
153
+ <div class="flex items-center gap-3 mb-4">
154
+ <div class="w-10 h-10 rounded-lg bg-gradient-to-br from-purple-500 to-purple-600 flex items-center justify-center text-white">
155
+ <i class="fas fa-star"></i>
156
+ </div>
157
+ <h3 class="font-semibold text-lg">品牌力领先品牌</h3>
158
+ </div>
159
+ <div class="space-y-3">
160
+ <div class="flex justify-between items-center">
161
+ <span>一汽大众</span>
162
+ <span class="badge badge-success">90分</span>
163
+ </div>
164
+ <div class="flex justify-between items-center">
165
+ <span>广汽丰田</span>
166
+ <span class="badge badge-success">88分</span>
167
+ </div>
168
+ <div class="flex justify-between items-center">
169
+ <span>特斯拉</span>
170
+ <span class="badge badge-info">88分</span>
171
+ </div>
172
+ </div>
173
+ </div>
174
+
175
+ <div class="card">
176
+ <div class="flex items-center gap-3 mb-4">
177
+ <div class="w-10 h-10 rounded-lg bg-gradient-to-br from-green-500 to-green-600 flex items-center justify-center text-white">
178
+ <i class="fas fa-tags"></i>
179
+ </div>
180
+ <h3 class="font-semibold text-lg">性价比优势品牌</h3>
181
+ </div>
182
+ <div class="space-y-3">
183
+ <div class="flex justify-between items-center">
184
+ <span>比亚迪</span>
185
+ <span class="badge badge-success">90分</span>
186
+ </div>
187
+ <div class="flex justify-between items-center">
188
+ <span>吉利</span>
189
+ <span class="badge badge-success">88分</span>
190
+ </div>
191
+ <div class="flex justify-between items-center">
192
+ <span>长安</span>
193
+ <span class="badge badge-info">86分</span>
194
+ </div>
195
+ </div>
196
+ </div>
197
+ </div>
198
+ </div>
199
+ </main>
200
+
201
+ <custom-footer></custom-footer>
202
+
203
+ <script src="components/navbar.js"></script>
204
+ <script src="components/footer.js"></script>
205
+ <script src="script.js"></script>
206
+
207
+ <script>
208
+ // 品牌竞争力雷达图
209
+ const radarCtx = document.getElementById('brandRadarChart').getContext('2d');
210
+ new Chart(radarCtx, {
211
+ type: 'radar',
212
+ data: {
213
+ labels: ['产品力', '品牌力', '服务力', '创新力', '性价比'],
214
+ datasets: [{
215
+ label: '比亚迪',
216
+ data: [92, 85, 78, 95, 90],
217
+ borderColor: '#405DF9',
218
+ backgroundColor: 'rgba(64, 93, 249, 0.2)',
219
+ borderWidth: 2
220
+ }, {
221
+ label: '一汽大众',
222
+ data: [88, 90, 85, 72, 75],
223
+ borderColor: '#6C63F0',
224
+ backgroundColor: 'rgba(108, 99, 240, 0.2)',
225
+ borderWidth: 2
226
+ }, {
227
+ label: '特斯拉',
228
+ data: [90, 88, 70, 98, 72],
229
+ borderColor: '#ED589D',
230
+ backgroundColor: 'rgba(237, 88, 157, 0.2)',
231
+ borderWidth: 2
232
+ }]
233
+ },
234
+ options: {
235
+ responsive: true,
236
+ maintainAspectRatio: false,
237
+ plugins: {
238
+ legend: {
239
+ position: 'bottom',
240
+ labels: { padding: 15 }
241
+ }
242
+ },
243
+ scales: {
244
+ r: {
245
+ beginAtZero: true,
246
+ max: 100,
247
+ ticks: { stepSize: 20 }
248
+ }
249
+ }
250
+ }
251
+ });
252
+
253
+ // 品牌综合得分图表
254
+ const scoreCtx = document.getElementById('brandScoreChart').getContext('2d');
255
+ new Chart(scoreCtx, {
256
+ type: 'bar',
257
+ data: {
258
+ labels: ['比亚迪', '一汽大众', '吉利', '特斯拉', '广汽丰田', '蔚来'],
259
+ datasets: [{
260
+ label: '综合得分',
261
+ data: [88.0, 82.0, 83.0, 83.6, 81.8, 84.4],
262
+ backgroundColor: ['#405DF9', '#6C63F0', '#7342CC', '#B750BE', '#ED589D', '#FFC159'],
263
+ borderRadius: 8
264
+ }]
265
+ },
266
+ options: {
267
+ indexAxis: 'y',
268
+ responsive: true,
269
+ maintainAspectRatio: false,
270
+ plugins: {
271
+ legend: { display: false }
272
+ },
273
+ scales: {
274
+
275
+ ___METADATA_START___
276
+ {"repoId":"Peter0225/deepsite","isNew":false,"userName":"Peter0225"}
277
+ ___METADATA_END___
components/footer.js ADDED
@@ -0,0 +1,150 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class CustomFooter extends HTMLElement {
2
+ connectedCallback() {
3
+ this.attachShadow({ mode: 'open' });
4
+ this.shadowRoot.innerHTML = `
5
+ <style>
6
+ :host {
7
+ display: block;
8
+ margin-top: auto;
9
+ background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
10
+ color: #e2e8f0;
11
+ padding: 48px 24px 24px;
12
+ }
13
+
14
+ .footer-container {
15
+ max-width: 1400px;
16
+ margin: 0 auto;
17
+ }
18
+
19
+ .footer-content {
20
+ display: grid;
21
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
22
+ gap: 40px;
23
+ margin-bottom: 32px;
24
+ }
25
+
26
+ .footer-section h3 {
27
+ font-size: 16px;
28
+ font-weight: 600;
29
+ margin-bottom: 20px;
30
+ color: #fff;
31
+ }
32
+
33
+ .footer-section p {
34
+ color: #94a3b8;
35
+ font-size: 14px;
36
+ line-height: 1.6;
37
+ margin-bottom: 16px;
38
+ }
39
+
40
+ .social-links {
41
+ display: flex;
42
+ gap: 12px;
43
+ flex-wrap: wrap;
44
+ }
45
+
46
+ .social-link {
47
+ display: flex;
48
+ align-items: center;
49
+ gap: 6px;
50
+ padding: 8px 16px;
51
+ background: rgba(255, 255, 255, 0.08);
52
+ border-radius: 8px;
53
+ color: #e2e8f0;
54
+ text-decoration: none;
55
+ font-size: 14px;
56
+ transition: all 0.2s ease;
57
+ }
58
+
59
+ .social-link:hover {
60
+ background: linear-gradient(135deg, #405DF9, #6C63F0);
61
+ transform: translateY(-2px);
62
+ }
63
+
64
+ .social-link svg {
65
+ width: 18px;
66
+ height: 18px;
67
+ }
68
+
69
+ .footer-bottom {
70
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
71
+ padding-top: 24px;
72
+ display: flex;
73
+ flex-wrap: wrap;
74
+ justify-content: space-between;
75
+ align-items: center;
76
+ gap: 16px;
77
+ }
78
+
79
+ .copyright {
80
+ color: #94a3b8;
81
+ font-size: 13px;
82
+ }
83
+
84
+ .update-date {
85
+ color: #94a3b8;
86
+ font-size: 13px;
87
+ }
88
+
89
+ @media (max-width: 768px) {
90
+ .footer-bottom {
91
+ flex-direction: column;
92
+ text-align: center;
93
+ }
94
+ }
95
+ </style>
96
+
97
+ <footer>
98
+ <div class="footer-container">
99
+ <div class="footer-content">
100
+ <div class="footer-section">
101
+ <h3>作者信息</h3>
102
+ <p>Lane-AI 是一位专业的汽车行业数据分析师,专注于通过数据驱动的方法为汽车行业提供深度洞察和战略建议。</p>
103
+ <div class="social-links">
104
+ <a href="https://github.com/lane-ai" target="_blank" class="social-link">
105
+ <svg viewBox="0 0 24 24" fill="currentColor">
106
+ <path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
107
+ </svg>
108
+ GitHub
109
+ </a>
110
+ <a href="https://twitter.com/lane_ai" target="_blank" class="social-link">
111
+ <svg viewBox="0 0 24 24" fill="currentColor">
112
+ <path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/>
113
+ </svg>
114
+ Twitter/X
115
+ </a>
116
+ <a href="https://linkedin.com/in/lane-ai" target="_blank" class="social-link">
117
+ <svg viewBox="0 0 24 24" fill="currentColor">
118
+ <path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/>
119
+ </svg>
120
+ LinkedIn
121
+ </a>
122
+ </div>
123
+ </div>
124
+
125
+ <div class="footer-section">
126
+ <h3>关于本平台</h3>
127
+ <p>本平台致力于为汽车行业从业者提供专业的数据分析服务,帮助企业在激烈的市场竞争中做出更明智的决策。</p>
128
+ </div>
129
+
130
+ <div class="footer-section">
131
+ <h3>联系方式</h3>
132
+ <p>如有任何问题或建议,欢迎通过以下方式联系我们:</p>
133
+ <p>邮箱: contact@lane-ai.com</p>
134
+ </div>
135
+ </div>
136
+
137
+ <div class="footer-bottom">
138
+ <p class="copyright">© 2024 杭州维途科技有限公司. 保留所有权利.</p>
139
+ <p class="update-date">数据更新日期: <span id="updateDate"></span></p>
140
+ </div>
141
+ </div>
142
+ </footer>
143
+ `;
144
+
145
+ const updateDateEl = this.shadowRoot.getElementById('updateDate');
146
+ const now = new Date();
147
+ updateDateEl.textContent = now.toLocaleDateString('zh-CN', { year: 'numeric', month: 'long', day: 'numeric' });
148
+ }
149
+ }
150
+ customElements.define('custom-footer', CustomFooter);
components/navbar.js ADDED
@@ -0,0 +1,180 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class CustomNavbar extends HTMLElement {
2
+ connectedCallback() {
3
+ this.attachShadow({ mode: 'open' });
4
+ this.shadowRoot.innerHTML = `
5
+ <style>
6
+ :host {
7
+ display: block;
8
+ position: fixed;
9
+ top: 0;
10
+ left: 0;
11
+ right: 0;
12
+ z-index: 1000;
13
+ background: rgba(255, 255, 255, 0.9);
14
+ backdrop-filter: blur(20px);
15
+ border-bottom: 1px solid rgba(0, 0, 0, 0.06);
16
+ }
17
+
18
+ .navbar-container {
19
+ max-width: 1400px;
20
+ margin: 0 auto;
21
+ padding: 0 24px;
22
+ height: 64px;
23
+ display: flex;
24
+ align-items: center;
25
+ justify-content: space-between;
26
+ }
27
+
28
+ .logo {
29
+ font-size: 20px;
30
+ font-weight: 600;
31
+ color: #405DF9;
32
+ text-decoration: none;
33
+ display: flex;
34
+ align-items: center;
35
+ gap: 8px;
36
+ }
37
+
38
+ .logo svg {
39
+ width: 28px;
40
+ height: 28px;
41
+ }
42
+
43
+ .nav-links {
44
+ display: flex;
45
+ gap: 8px;
46
+ align-items: center;
47
+ }
48
+
49
+ .nav-link {
50
+ padding: 8px 16px;
51
+ border-radius: 8px;
52
+ color: #4a5568;
53
+ text-decoration: none;
54
+ font-size: 14px;
55
+ font-weight: 500;
56
+ transition: all 0.2s ease;
57
+ }
58
+
59
+ .nav-link:hover {
60
+ background: rgba(64, 93, 249, 0.08);
61
+ color: #405DF9;
62
+ }
63
+
64
+ .nav-link.active {
65
+ background: linear-gradient(135deg, #405DF9, #6C63F0);
66
+ color: white;
67
+ }
68
+
69
+ .mobile-menu-btn {
70
+ display: none;
71
+ background: none;
72
+ border: none;
73
+ cursor: pointer;
74
+ padding: 8px;
75
+ }
76
+
77
+ @media (max-width: 1024px) {
78
+ .nav-links {
79
+ display: none;
80
+ }
81
+
82
+ .mobile-menu-btn {
83
+ display: block;
84
+ }
85
+ }
86
+
87
+ .mobile-menu {
88
+ display: none;
89
+ position: absolute;
90
+ top: 64px;
91
+ left: 0;
92
+ right: 0;
93
+ background: white;
94
+ padding: 16px;
95
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
96
+ }
97
+
98
+ .mobile-menu.open {
99
+ display: block;
100
+ }
101
+
102
+ .mobile-menu a {
103
+ display: block;
104
+ padding: 12px 16px;
105
+ color: #4a5568;
106
+ text-decoration: none;
107
+ border-radius: 8px;
108
+ margin-bottom: 4px;
109
+ }
110
+
111
+ .mobile-menu a:hover {
112
+ background: rgba(64, 93, 249, 0.08);
113
+ }
114
+ </style>
115
+
116
+ <nav>
117
+ <div class="navbar-container">
118
+ <a href="index.html" class="logo">
119
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
120
+ <path d="M19 17h2c.6 0 1-.4 1-1v-3c0-.9-.7-1.7-1.5-1.9C18.7 10.6 16 10 16 10s-1.3-1.4-2.2-2.3c-.5-.4-1.1-.7-1.8-.7H5c-.6 0-1.1.4-1.4.9l-1.4 2.9A3.7 3.7 0 0 0 2 12v4c0 .6.4 1 1 1h2"/>
121
+ <circle cx="7" cy="17" r="2"/>
122
+ <circle cx="17" cy="17" r="2"/>
123
+ </svg>
124
+ 汽车数据分析
125
+ </a>
126
+
127
+ <div class="nav-links">
128
+ <a href="index.html" class="nav-link active">首页</a>
129
+ <a href="sales.html" class="nav-link">销售分析</a>
130
+ <a href="market.html" class="nav-link">市场份额</a>
131
+ <a href="brands.html" class="nav-link">品牌竞争</a>
132
+ <a href="users.html" class="nav-link">用户画像</a>
133
+ <a href="trends.html" class="nav-link">趋势预测</a>
134
+ <a href="regions.html" class="nav-link">区域分析</a>
135
+ <a href="ev.html" class="nav-link">新能源汽车</a>
136
+ <a href="reports.html" class="nav-link">详细报告</a>
137
+ </div>
138
+
139
+ <button class="mobile-menu-btn">
140
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
141
+ <line x1="3" y1="12" x2="21" y2="12"/>
142
+ <line x1="3" y1="6" x2="21" y2="6"/>
143
+ <line x1="3" y1="18" x2="21" y2="18"/>
144
+ </svg>
145
+ </button>
146
+ </div>
147
+
148
+ <div class="mobile-menu">
149
+ <a href="index.html">首页</a>
150
+ <a href="sales.html">销售分析</a>
151
+ <a href="market.html">市场份额</a>
152
+ <a href="brands.html">品牌竞争</a>
153
+ <a href="users.html">用户画像</a>
154
+ <a href="trends.html">趋势预测</a>
155
+ <a href="regions.html">区域分析</a>
156
+ <a href="ev.html">新能源汽车</a>
157
+ <a href="reports.html">详细报告</a>
158
+ </div>
159
+ </nav>
160
+ `;
161
+
162
+ const mobileBtn = this.shadowRoot.querySelector('.mobile-menu-btn');
163
+ const mobileMenu = this.shadowRoot.querySelector('.mobile-menu');
164
+
165
+ mobileBtn.addEventListener('click', () => {
166
+ mobileMenu.classList.toggle('open');
167
+ });
168
+
169
+ // Set active link
170
+ const currentPath = window.location.pathname;
171
+ const links = this.shadowRoot.querySelectorAll('.nav-link, .mobile-menu a');
172
+ links.forEach(link => {
173
+ const href = link.getAttribute('href');
174
+ if (currentPath.includes(href) || (currentPath === '/' && href === 'index.html')) {
175
+ link.classList.add('active');
176
+ }
177
+ });
178
+ }
179
+ }
180
+ customElements.define('custom-navbar', CustomNavbar);
index.html CHANGED
@@ -1,20 +1,235 @@
1
  <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>My app</title>
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <meta charset="utf-8">
 
 
7
  <script src="https://cdn.tailwindcss.com"></script>
8
- </head>
9
- <body class="flex justify-center items-center h-screen overflow-hidden bg-white font-sans text-center px-6">
10
- <div class="w-full">
11
- <span class="text-xs rounded-full mb-2 inline-block px-2 py-1 border border-amber-500/15 bg-amber-500/15 text-amber-500">🔥 New version dropped!</span>
12
- <h1 class="text-4xl lg:text-6xl font-bold font-sans">
13
- <span class="text-2xl lg:text-4xl text-gray-400 block font-medium">I'm ready to work,</span>
14
- Ask me anything.
15
- </h1>
16
- </div>
17
- <img src="https://enzostvs-deepsite.hf.space/arrow.svg" class="absolute bottom-8 left-0 w-[100px] transform rotate-[30deg]" />
18
- <script></script>
19
- <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=Peter0225/deepsite" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
20
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <!DOCTYPE html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>汽车数据分析看板 - 首页</title>
7
+ <link rel="icon" type="image/x-icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🚗</text></svg>">
8
+ <link rel="stylesheet" href="style.css">
9
  <script src="https://cdn.tailwindcss.com"></script>
10
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
11
+ <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
12
+ </head>
13
+ <body>
14
+ <custom-navbar></custom-navbar>
15
+
16
+ <main class="main-content">
17
+ <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
18
+ <!-- 欢迎区域 -->
19
+ <section class="mb-12 fade-in">
20
+ <h1 class="text-4xl lg:text-5xl font-bold mb-4">
21
+ <span class="gradient-text">汽车行业数据分析看板</span>
22
+ </h1>
23
+ <p class="text-lg text-gray-600 mb-8 max-w-3xl">
24
+ 通过专业的数据分析,为您提供汽车行业的深度洞察。涵盖销售数据、市场份额、品牌竞争、用户画像等多个维度的全面分析。
25
+ </p>
26
+ <div class="flex flex-wrap gap-4">
27
+ <a href="sales.html" class="btn btn-primary">
28
+ <i class="fas fa-chart-line"></i>
29
+ 查看销售分析
30
+ </a>
31
+ <a href="reports.html" class="btn btn-secondary">
32
+ <i class="fas fa-file-alt"></i>
33
+ 详细报告
34
+ </a>
35
+ </div>
36
+ </section>
37
+
38
+ <!-- 关键指标 -->
39
+ <section class="mb-12">
40
+ <h2 class="text-2xl font-bold mb-6 text-gray-800">关键指标概览</h2>
41
+ <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6">
42
+ <div class="stat-card fade-in delay-1">
43
+ <div class="stat-label">年度总销量</div>
44
+ <div class="stat-value">2,458万辆</div>
45
+ <div class="stat-change positive">↑ 12.3%</div>
46
+ </div>
47
+ <div class="stat-card fade-in delay-2">
48
+ <div class="stat-label">市场规模</div>
49
+ <div class="stat-value">8.6万亿元</div>
50
+ <div class="stat-change positive">↑ 8.7%</div>
51
+ </div>
52
+ <div class="stat-card fade-in delay-3">
53
+ <div class="stat-label">新能源占比</div>
54
+ <div class="stat-value">32.5%</div>
55
+ <div class="stat-change positive">↑ 18.2%</div>
56
+ </div>
57
+ <div class="stat-card fade-in delay-4">
58
+ <div class="stat-label">活跃品牌数</div>
59
+ <div class="stat-value">156个</div>
60
+ <div class="stat-change positive">↑ 8</div>
61
+ </div>
62
+ </div>
63
+ </section>
64
+
65
+ <!-- 图表区域 -->
66
+ <div class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-12">
67
+ <div class="card fade-in delay-1">
68
+ <div class="card-title">
69
+ <i class="fas fa-chart-line"></i>
70
+ 销量趋势
71
+ </div>
72
+ <div class="h-80">
73
+ <canvas id="salesTrendChart"></canvas>
74
+ </div>
75
+ </div>
76
+
77
+ <div class="card fade-in delay-2">
78
+ <div class="card-title">
79
+ <i class="fas fa-chart-pie"></i>
80
+ 市场份额分布
81
+ </div>
82
+ <div class="h-80">
83
+ <canvas id="marketShareChart"></canvas>
84
+ </div>
85
+ </div>
86
+ </div>
87
+
88
+ <!-- 快速导航 -->
89
+ <section class="mb-12">
90
+ <h2 class="text-2xl font-bold mb-6 text-gray-800">快速导航</h2>
91
+ <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
92
+ <a href="sales.html" class="card hover:shadow-lg transition-all">
93
+ <div class="flex items-center gap-4">
94
+ <div class="w-12 h-12 rounded-xl bg-gradient-to-br from-blue-500 to-blue-600 flex items-center justify-center text-white">
95
+ <i class="fas fa-chart-bar text-xl"></i>
96
+ </div>
97
+ <div>
98
+ <h3 class="font-semibold text-gray-800">销售数据分析</h3>
99
+ <p class="text-sm text-gray-500">月度/季度/年度销售趋势</p>
100
+ </div>
101
+ </div>
102
+ </a>
103
+
104
+ <a href="market.html" class="card hover:shadow-lg transition-all">
105
+ <div class="flex items-center gap-4">
106
+ <div class="w-12 h-12 rounded-xl bg-gradient-to-br from-purple-500 to-purple-600 flex items-center justify-center text-white">
107
+ <i class="fas fa-chart-pie text-xl"></i>
108
+ </div>
109
+ <div>
110
+ <h3 class="font-semibold text-gray-800">市场份额分析</h3>
111
+ <p class="text-sm text-gray-500">各品牌市场占有率</p>
112
+ </div>
113
+ </div>
114
+ </a>
115
+
116
+ <a href="brands.html" class="card hover:shadow-lg transition-all">
117
+ <div class="flex items-center gap-4">
118
+ <div class="w-12 h-12 rounded-xl bg-gradient-to-br from-pink-500 to-pink-600 flex items-center justify-center text-white">
119
+ <i class="fas fa-car text-xl"></i>
120
+ </div>
121
+ <div>
122
+ <h3 class="font-semibold text-gray-800">品牌竞争分析</h3>
123
+ <p class="text-sm text-gray-500">品牌竞争力对比</p>
124
+ </div>
125
+ </div>
126
+ </a>
127
+
128
+ <a href="users.html" class="card hover:shadow-lg transition-all">
129
+ <div class="flex items-center gap-4">
130
+ <div class="w-12 h-12 rounded-xl bg-gradient-to-br from-cyan-500 to-cyan-600 flex items-center justify-center text-white">
131
+ <i class="fas fa-users text-xl"></i>
132
+ </div>
133
+ <div>
134
+ <h3 class="font-semibold text-gray-800">用户画像分析</h3>
135
+ <p class="text-sm text-gray-500">消费者特征与偏好</p>
136
+ </div>
137
+ </div>
138
+ </a>
139
+
140
+ <a href="trends.html" class="card hover:shadow-lg transition-all">
141
+ <div class="flex items-center gap-4">
142
+ <div class="w-12 h-12 rounded-xl bg-gradient-to-br from-orange-500 to-orange-600 flex items-center justify-center text-white">
143
+ <i class="fas fa-trending-up text-xl"></i>
144
+ </div>
145
+ <div>
146
+ <h3 class="font-semibold text-gray-800">趋势预测</h3>
147
+ <p class="text-sm text-gray-500">未来市场发展趋势</p>
148
+ </div>
149
+ </div>
150
+ </a>
151
+
152
+ <a href="ev.html" class="card hover:shadow-lg transition-all">
153
+ <div class="flex items-center gap-4">
154
+ <div class="w-12 h-12 rounded-xl bg-gradient-to-br from-green-500 to-green-600 flex items-center justify-center text-white">
155
+ <i class="fas fa-bolt text-xl"></i>
156
+ </div>
157
+ <div>
158
+ <h3 class="font-semibold text-gray-800">新能源汽车</h3>
159
+ <p class="text-sm text-gray-500">电动车市场专题</p>
160
+ </div>
161
+ </div>
162
+ </a>
163
+ </div>
164
+ </section>
165
+ </div>
166
+ </main>
167
+
168
+ <custom-footer></custom-footer>
169
+
170
+ <script src="components/navbar.js"></script>
171
+ <script src="components/footer.js"></script>
172
+ <script src="script.js"></script>
173
+
174
+ <script>
175
+ // 销量趋势图表
176
+ const salesCtx = document.getElementById('salesTrendChart').getContext('2d');
177
+ new Chart(salesCtx, {
178
+ type: 'line',
179
+ data: {
180
+ labels: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
181
+ datasets: [{
182
+ label: '销量(万辆)',
183
+ data: [180, 165, 195, 210, 225, 240, 235, 220, 245, 260, 275, 280],
184
+ borderColor: '#405DF9',
185
+ backgroundColor: 'rgba(64, 93, 249, 0.1)',
186
+ fill: true,
187
+ tension: 0.4,
188
+ borderWidth: 2
189
+ }]
190
+ },
191
+ options: {
192
+ responsive: true,
193
+ maintainAspectRatio: false,
194
+ plugins: {
195
+ legend: { display: false }
196
+ },
197
+ scales: {
198
+ y: {
199
+ beginAtZero: false,
200
+ grid: { color: 'rgba(0,0,0,0.05)' }
201
+ },
202
+ x: {
203
+ grid: { display: false }
204
+ }
205
+ }
206
+ }
207
+ });
208
+
209
+ // 市场份额图表
210
+ const marketCtx = document.getElementById('marketShareChart').getContext('2d');
211
+ new Chart(marketCtx, {
212
+ type: 'doughnut',
213
+ data: {
214
+ labels: ['自主品牌', '合资品牌', '进口品牌', '新能源品牌'],
215
+ datasets: [{
216
+ data: [45, 35, 12, 8],
217
+ backgroundColor: ['#405DF9', '#6C63F0', '#B750BE', '#ED589D'],
218
+ borderWidth: 0
219
+ }]
220
+ },
221
+ options: {
222
+ responsive: true,
223
+ maintainAspectRatio: false,
224
+ plugins: {
225
+ legend: {
226
+ position: 'bottom',
227
+ labels: { padding: 20 }
228
+ }
229
+ },
230
+ cutout: '65%'
231
+ }
232
+ });
233
+ </script>
234
+ </body>
235
+ </html>
market.html ADDED
@@ -0,0 +1,312 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>市场份额分析 - 汽车数据分析看板</title>
7
+ <link rel="icon" type="image/x-icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🚗</text></svg>">
8
+ <link rel="stylesheet" href="style.css">
9
+ <script src="https://cdn.tailwindcss.com"></script>
10
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
11
+ <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
12
+ </head>
13
+ <body>
14
+ <custom-navbar></custom-navbar>
15
+
16
+ <main class="main-content">
17
+ <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
18
+ <!-- 页面标题 -->
19
+ <section class="mb-8">
20
+ <h1 class="text-3xl font-bold mb-2">市场份额分析</h1>
21
+ <p class="text-gray-600">深入了解各品牌和细分市场的市场占有率</p>
22
+ </section>
23
+
24
+ <!-- 整体市场份额 -->
25
+ <div class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-8">
26
+ <div class="card">
27
+ <div class="card-title">
28
+ <i class="fas fa-chart-pie"></i>
29
+ 整体市场份额分布
30
+ </div>
31
+ <div class="h-80">
32
+ <canvas id="overallShareChart"></canvas>
33
+ </div>
34
+ </div>
35
+
36
+ <div class="card">
37
+ <div class="card-title">
38
+ <i class="fas fa-exchange-alt"></i>
39
+ 市场份额变化趋势
40
+ </div>
41
+ <div class="h-80">
42
+ <canvas id="shareTrendChart"></canvas>
43
+ </div>
44
+ </div>
45
+ </div>
46
+
47
+ <!-- 品牌份额排行 -->
48
+ <div class="card mb-8">
49
+ <div class="card-title">
50
+ <i class="fas fa-trophy"></i>
51
+ 品牌市场份额排行 TOP 15
52
+ </div>
53
+ <div class="overflow-x-auto">
54
+ <table class="data-table">
55
+ <thead>
56
+ <tr>
57
+ <th>排名</th>
58
+ <th>品牌</th>
59
+ <th>市场份额</th>
60
+ <th>同比变化</th>
61
+ <th>销量(万辆)</th>
62
+ </tr>
63
+ </thead>
64
+ <tbody>
65
+ <tr>
66
+ <td><span class="badge badge-success">1</span></td>
67
+ <td>比亚迪</td>
68
+ <td>12.3%</td>
69
+ <td class="positive">↑ 3.2%</td>
70
+ <td>302.4</td>
71
+ </tr>
72
+ <tr>
73
+ <td><span class="badge badge-info">2</span></td>
74
+ <td>一汽大众</td>
75
+ <td>7.6%</td>
76
+ <td class="negative">↓ 0.8%</td>
77
+ <td>185.6</td>
78
+ </tr>
79
+ <tr>
80
+ <td><span class="badge badge-info">3</span></td>
81
+ <td>吉利汽车</td>
82
+ <td>6.8%</td>
83
+ <td class="positive">↑ 0.5%</td>
84
+ <td>168.3</td>
85
+ </tr>
86
+ <tr>
87
+ <td><span class="badge badge-info">4</span></td>
88
+ <td>长安汽车</td>
89
+ <td>6.3%</td>
90
+ <td class="positive">↑ 0.7%</td>
91
+ <td>155.8</td>
92
+ </tr>
93
+ <tr>
94
+ <td><span class="badge badge-warning">5</span></td>
95
+ <td>上汽大众</td>
96
+ <td>5.8%</td>
97
+ <td class="negative">↓ 0.5%</td>
98
+ <td>142.5</td>
99
+ </tr>
100
+ <tr>
101
+ <td><span class="badge">6</span></td>
102
+ <td>广汽丰田</td>
103
+ <td>4.9%</td>
104
+ <td class="negative">↓ 0.3%</td>
105
+ <td>120.3</td>
106
+ </tr>
107
+ <tr>
108
+ <td><span class="badge">7</span></td>
109
+ <td>东风日产</td>
110
+ <td>4.5%</td>
111
+ <td class="negative">↓ 0.6%</td>
112
+ <td>110.5</td>
113
+ </tr>
114
+ <tr>
115
+ <td><span class="badge">8</span></td>
116
+ <td>特斯拉中国</td>
117
+ <td>3.8%</td>
118
+ <td class="positive">↑ 1.2%</td>
119
+ <td>93.2</td>
120
+ </tr>
121
+ <tr>
122
+ <td><span class="badge">9</span></td>
123
+ <td>奇瑞汽车</td>
124
+ <td>3.5%</td>
125
+ <td class="positive">↑ 0.4%</td>
126
+ <td>85.8</td>
127
+ </tr>
128
+ <tr>
129
+ <td><span class="badge">10</span></td>
130
+ <td>长城汽车</td>
131
+ <td>3.2%</td>
132
+ <td class="negative">↓ 0.2%</td>
133
+ <td>78.5</td>
134
+ </tr>
135
+ </tbody>
136
+ </table>
137
+ </div>
138
+ </div>
139
+
140
+ <!-- 细分市场分析 -->
141
+ <div class="grid grid-cols-1 lg:grid-cols-3 gap-6">
142
+ <div class="card">
143
+ <div class="card-title">
144
+ <i class="fas fa-car-side"></i>
145
+ 轿车市场
146
+ </div>
147
+ <div class="h-64">
148
+ <canvas id="sedanMarketChart"></canvas>
149
+ </div>
150
+ </div>
151
+
152
+ <div class="card">
153
+ <div class="card-title">
154
+ <i class="fas fa-truck-pickup"></i>
155
+ SUV市场
156
+ </div>
157
+ <div class="h-64">
158
+ <canvas id="suvMarketChart"></canvas>
159
+ </div>
160
+ </div>
161
+
162
+ <div class="card">
163
+ <div class="card-title">
164
+ <i class="fas fa-bolt"></i>
165
+ 新能源市场
166
+ </div>
167
+ <div class="h-64">
168
+ <canvas id="evMarketChart"></canvas>
169
+ </div>
170
+ </div>
171
+ </div>
172
+ </div>
173
+ </main>
174
+
175
+ <custom-footer></custom-footer>
176
+
177
+ <script src="components/navbar.js"></script>
178
+ <script src="components/footer.js"></script>
179
+ <script src="script.js"></script>
180
+
181
+ <script>
182
+ // 整体市场份额图表
183
+ const overallShareCtx = document.getElementById('overallShareChart').getContext('2d');
184
+ new Chart(overallShareCtx, {
185
+ type: 'doughnut',
186
+ data: {
187
+ labels: ['比亚迪', '一汽大众', '吉利汽车', '长安汽车', '上汽大众', '其他'],
188
+ datasets: [{
189
+ data: [12.3, 7.6, 6.8, 6.3, 5.8, 61.2],
190
+ backgroundColor: ['#405DF9', '#6C63F0', '#7342CC', '#B750BE', '#ED589D', '#e5e7eb'],
191
+ borderWidth: 0
192
+ }]
193
+ },
194
+ options: {
195
+ responsive: true,
196
+ maintainAspectRatio: false,
197
+ plugins: {
198
+ legend: {
199
+ position: 'right',
200
+ labels: { padding: 15 }
201
+ }
202
+ },
203
+ cutout: '60%'
204
+ }
205
+ });
206
+
207
+ // 市场份额变化趋势图表
208
+ const shareTrendCtx = document.getElementById('shareTrendChart').getContext('2d');
209
+ new Chart(shareTrendCtx, {
210
+ type: 'line',
211
+ data: {
212
+ labels: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
213
+ datasets: [{
214
+ label: '比亚迪',
215
+ data: [10.5, 10.8, 11.2, 11.5, 11.8, 12.0, 12.1, 12.2, 12.3, 12.3, 12.3, 12.3],
216
+ borderColor: '#405DF9',
217
+ tension: 0.4,
218
+ borderWidth: 2
219
+ }, {
220
+ label: '一汽大众',
221
+ data: [8.5, 8.3, 8.1, 7.9, 7.8, 7.7, 7.6, 7.6, 7.6, 7.6, 7.6, 7.6],
222
+ borderColor: '#6C63F0',
223
+ tension: 0.4,
224
+ borderWidth: 2
225
+ }, {
226
+ label: '吉利汽车',
227
+ data: [6.2, 6.3, 6.4, 6.5, 6.6, 6.7, 6.7, 6.8, 6.8, 6.8, 6.8, 6.8],
228
+ borderColor: '#7342CC',
229
+ tension: 0.4,
230
+ borderWidth: 2
231
+ }]
232
+ },
233
+ options: {
234
+ responsive: true,
235
+ maintainAspectRatio: false,
236
+ plugins: {
237
+ legend: {
238
+ position: 'bottom',
239
+ labels: { padding: 10 }
240
+ }
241
+ },
242
+ scales: {
243
+ y: {
244
+ beginAtZero: false,
245
+ grid: { color: 'rgba(0,0,0,0.05)' },
246
+ ticks: {
247
+ callback: function(value) { return value + '%'; }
248
+ }
249
+ },
250
+ x: {
251
+ grid: { display: false }
252
+ }
253
+ }
254
+ }
255
+ });
256
+
257
+ // 轿车市场图表
258
+ const sedanCtx = document.getElementById('sedanMarketChart').getContext('2d');
259
+ new Chart(sedanCtx, {
260
+ type: 'pie',
261
+ data: {
262
+ labels: ['合资', '自主', '进口'],
263
+ datasets: [{
264
+ data: [55, 38, 7],
265
+ backgroundColor: ['#405DF9', '#6C63F0', '#B750BE']
266
+ }]
267
+ },
268
+ options: {
269
+ responsive: true,
270
+ maintainAspectRatio: false,
271
+ plugins: { legend: { position: 'bottom' } }
272
+ }
273
+ });
274
+
275
+ // SUV市场图表
276
+ const suvCtx = document.getElementById('suvMarketChart').getContext('2d');
277
+ new Chart(suvCtx, {
278
+ type: 'pie',
279
+ data: {
280
+ labels: ['合资', '自主', '进口'],
281
+ datasets: [{
282
+ data: [42, 50, 8],
283
+ backgroundColor: ['#405DF9', '#6C63F0', '#B750BE']
284
+ }]
285
+ },
286
+ options: {
287
+ responsive: true,
288
+ maintainAspectRatio: false,
289
+ plugins: { legend: { position: 'bottom' } }
290
+ }
291
+ });
292
+
293
+ // 新能源市场图表
294
+ const evCtx = document.getElementById('evMarketChart').getContext('2d');
295
+ new Chart(evCtx, {
296
+ type: 'pie',
297
+ data: {
298
+ labels: ['纯电', '插混', '增程'],
299
+ datasets: [{
300
+ data: [65, 25, 10],
301
+ backgroundColor: ['#405DF9', '#6C63F0', '#FFC159']
302
+ }]
303
+ },
304
+ options: {
305
+ responsive: true,
306
+ maintainAspectRatio: false,
307
+ plugins: { legend: { position: 'bottom' } }
308
+ }
309
+ });
310
+ </script>
311
+ </body>
312
+ </html>
sales.html ADDED
@@ -0,0 +1,293 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>销售数据分析 - 汽车数据分析看板</title>
7
+ <link rel="icon" type="image/x-icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🚗</text></svg>">
8
+ <link rel="stylesheet" href="style.css">
9
+ <script src="https://cdn.tailwindcss.com"></script>
10
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
11
+ <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
12
+ </head>
13
+ <body>
14
+ <custom-navbar></custom-navbar>
15
+
16
+ <main class="main-content">
17
+ <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
18
+ <!-- 页面标题 -->
19
+ <section class="mb-8">
20
+ <h1 class="text-3xl font-bold mb-2">销售数据分析</h1>
21
+ <p class="text-gray-600">全面分析汽车市场的销售数据,掌握市场动态</p>
22
+ </section>
23
+
24
+ <!-- 时间筛选 -->
25
+ <div class="flex flex-wrap gap-4 mb-8">
26
+ <button class="btn btn-primary">年度</button>
27
+ <button class="btn btn-secondary">季度</button>
28
+ <button class="btn btn-secondary">月度</button>
29
+ </div>
30
+
31
+ <!-- 关键指标 -->
32
+ <section class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
33
+ <div class="stat-card">
34
+ <div class="stat-label">本月销量</div>
35
+ <div class="stat-value">275万辆</div>
36
+ <div class="stat-change positive">↑ 15.2%</div>
37
+ </div>
38
+ <div class="stat-card">
39
+ <div class="stat-label">环比增长</div>
40
+ <div class="stat-value">8.7%</div>
41
+ <div class="stat-change positive">↑ 2.1%</div>
42
+ </div>
43
+ <div class="stat-card">
44
+ <div class="stat-label">同比增长</div>
45
+ <div class="stat-value">12.3%</div>
46
+ <div class="stat-change positive">↑ 3.5%</div>
47
+ </div>
48
+ <div class="stat-card">
49
+ <div class="stat-label">销售总额</div>
50
+ <div class="stat-value">¥8,650亿</div>
51
+ <div class="stat-change positive">↑ 9.8%</div>
52
+ </div>
53
+ </section>
54
+
55
+ <!-- 销售趋势图表 -->
56
+ <div class="card mb-8">
57
+ <div class="card-title">
58
+ <i class="fas fa-chart-line"></i>
59
+ 年度销售趋势
60
+ </div>
61
+ <div class="h-96">
62
+ <canvas id="annualSalesChart"></canvas>
63
+ </div>
64
+ </div>
65
+
66
+ <!-- 车型销量对比 -->
67
+ <div class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-8">
68
+ <div class="card">
69
+ <div class="card-title">
70
+ <i class="fas fa-car"></i>
71
+ 车型销量对比
72
+ </div>
73
+ <div class="h-80">
74
+ <canvas id="vehicleTypeChart"></canvas>
75
+ </div>
76
+ </div>
77
+
78
+ <div class="card">
79
+ <div class="card-title">
80
+ <i class="fas fa-building"></i>
81
+ 销量排行榜 TOP 10
82
+ </div>
83
+ <div class="overflow-x-auto">
84
+ <table class="data-table">
85
+ <thead>
86
+ <tr>
87
+ <th>排名</th>
88
+ <th>品牌</th>
89
+ <th>销量(万辆)</th>
90
+ <th>增长</th>
91
+ </tr>
92
+ </thead>
93
+ <tbody>
94
+ <tr>
95
+ <td>1</td>
96
+ <td>比亚迪</td>
97
+ <td>302.4</td>
98
+ <td class="positive">↑ 52.3%</td>
99
+ </tr>
100
+ <tr>
101
+ <td>2</td>
102
+ <td>一汽大众</td>
103
+ <td>185.6</td>
104
+ <td class="negative">↓ 3.2%</td>
105
+ </tr>
106
+ <tr>
107
+ <td>3</td>
108
+ <td>吉利汽车</td>
109
+ <td>168.3</td>
110
+ <td class="positive">↑ 8.7%</td>
111
+ </tr>
112
+ <tr>
113
+ <td>4</td>
114
+ <td>长安汽车</td>
115
+ <td>155.8</td>
116
+ <td class="positive">↑ 12.5%</td>
117
+ </tr>
118
+ <tr>
119
+ <td>5</td>
120
+ <td>上汽大众</td>
121
+ <td>142.5</td>
122
+ <td class="negative">↓ 5.8%</td>
123
+ </tr>
124
+ </tbody>
125
+ </table>
126
+ </div>
127
+ </div>
128
+ </div>
129
+
130
+ <!-- 区域销售分布 -->
131
+ <div class="card">
132
+ <div class="card-title">
133
+ <i class="fas fa-map-marker-alt"></i>
134
+ 区域销售分布
135
+ </div>
136
+ <div class="grid grid-cols-1 md:grid-cols-3 gap-6">
137
+ <div class="h-64">
138
+ <canvas id="regionChart"></canvas>
139
+ </div>
140
+ <div class="md:col-span-2">
141
+ <div class="space-y-4">
142
+ <div>
143
+ <div class="flex justify-between mb-2">
144
+ <span>华东地区</span>
145
+ <span class="font-semibold">35%</span>
146
+ </div>
147
+ <div class="progress-bar">
148
+ <div class="progress-fill" style="width: 35%; background: #405DF9;"></div>
149
+ </div>
150
+ </div>
151
+ <div>
152
+ <div class="flex justify-between mb-2">
153
+ <span>华南地区</span>
154
+ <span class="font-semibold">25%</span>
155
+ </div>
156
+ <div class="progress-bar">
157
+ <div class="progress-fill" style="width: 25%; background: #6C63F0;"></div>
158
+ </div>
159
+ </div>
160
+ <div>
161
+ <div class="flex justify-between mb-2">
162
+ <span>华北地区</span>
163
+ <span class="font-semibold">20%</span>
164
+ </div>
165
+ <div class="progress-bar">
166
+ <div class="progress-fill" style="width: 20%; background: #7342CC;"></div>
167
+ </div>
168
+ </div>
169
+ <div>
170
+ <div class="flex justify-between mb-2">
171
+ <span>西南地区</span>
172
+ <span class="font-semibold">12%</span>
173
+ </div>
174
+ <div class="progress-bar">
175
+ <div class="progress-fill" style="width: 12%; background: #B750BE;"></div>
176
+ </div>
177
+ </div>
178
+ <div>
179
+ <div class="flex justify-between mb-2">
180
+ <span>其他地区</span>
181
+ <span class="font-semibold">8%</span>
182
+ </div>
183
+ <div class="progress-bar">
184
+ <div class="progress-fill" style="width: 8%; background: #ED589K;"></div>
185
+ </div>
186
+ </div>
187
+ </div>
188
+ </div>
189
+ </div>
190
+ </div>
191
+ </div>
192
+ </main>
193
+
194
+ <custom-footer></custom-footer>
195
+
196
+ <script src="components/navbar.js"></script>
197
+ <script src="components/footer.js"></script>
198
+ <script src="script.js"></script>
199
+
200
+ <script>
201
+ // 年度销售趋势图表
202
+ const annualSalesCtx = document.getElementById('annualSalesChart').getContext('2d');
203
+ new Chart(annualSalesCtx, {
204
+ type: 'line',
205
+ data: {
206
+ labels: ['2019', '2020', '2021', '2022', '2023', '2024'],
207
+ datasets: [{
208
+ label: '销量(万辆)',
209
+ data: [2100, 1950, 2200, 2180, 2458, 2750],
210
+ borderColor: '#405DF9',
211
+ backgroundColor: 'rgba(64, 93, 249, 0.1)',
212
+ fill: true,
213
+ tension: 0.4,
214
+ borderWidth: 3
215
+ }]
216
+ },
217
+ options: {
218
+ responsive: true,
219
+ maintainAspectRatio: false,
220
+ plugins: {
221
+ legend: { display: false }
222
+ },
223
+ scales: {
224
+ y: {
225
+ beginAtZero: false,
226
+ grid: { color: 'rgba(0,0,0,0.05)' }
227
+ },
228
+ x: {
229
+ grid: { display: false }
230
+ }
231
+ }
232
+ }
233
+ });
234
+
235
+ // 车型销量对比图表
236
+ const vehicleTypeCtx = document.getElementById('vehicleTypeChart').getContext('2d');
237
+ new Chart(vehicleTypeCtx, {
238
+ type: 'bar',
239
+ data: {
240
+ labels: ['轿车', 'SUV', 'MPV', '皮卡', '新能源'],
241
+ datasets: [{
242
+ label: '销量(万辆)',
243
+ data: [820, 980, 180, 120, 358],
244
+ backgroundColor: ['#405DF9', '#6C63F0', '#7342CC', '#B750BE', '#ED589D'],
245
+ borderRadius: 8
246
+ }]
247
+ },
248
+ options: {
249
+ responsive: true,
250
+ maintainAspectRatio: false,
251
+ plugins: {
252
+ legend: { display: false }
253
+ },
254
+ scales: {
255
+ y: {
256
+ beginAtZero: true,
257
+ grid: { color: 'rgba(0,0,0,0.05)' }
258
+ },
259
+ x: {
260
+ grid: { display: false }
261
+ }
262
+ }
263
+ }
264
+ });
265
+
266
+ // 区域销售图表
267
+ const regionCtx = document.getElementById('regionChart').getContext('2d');
268
+ new Chart(regionCtx, {
269
+ type: 'polarArea',
270
+ data: {
271
+ labels: ['华东', '华南', '华北', '西南', '其他'],
272
+ datasets: [{
273
+ data: [35, 25, 20, 12, 8],
274
+ backgroundColor: [
275
+ 'rgba(64, 93, 249, 0.8)',
276
+ 'rgba(108, 99, 240, 0.8)',
277
+ 'rgba(115, 66, 204, 0.8)',
278
+ 'rgba(183, 80, 190, 0.8)',
279
+ 'rgba(237, 88, 157, 0.8)'
280
+ ]
281
+ }]
282
+ },
283
+ options: {
284
+ responsive: true,
285
+ maintainAspectRatio: false,
286
+ plugins: {
287
+ legend: { display: false }
288
+ }
289
+ }
290
+ });
291
+ </script>
292
+ </body>
293
+ </html>
script.js ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // 页面加载完成
2
+ document.addEventListener('DOMContentLoaded', function() {
3
+ // 懒加载图片
4
+ const lazyImages = document.querySelectorAll('img[data-src]');
5
+
6
+ const imageObserver = new IntersectionObserver((entries, observer) => {
7
+ entries.forEach(entry => {
8
+ if (entry.isIntersecting) {
9
+ const img = entry.target;
10
+ img.src = img.dataset.src;
11
+ img.classList.add('loaded');
12
+ observer.unobserve(img);
13
+ }
14
+ });
15
+ });
16
+
17
+ lazyImages.forEach(img => imageObserver.observe(img));
18
+
19
+ // 懒加载内容
20
+ const lazyElements = document.querySelectorAll('.lazy-load');
21
+
22
+ const elementObserver = new IntersectionObserver((entries, observer) => {
23
+ entries.forEach(entry => {
24
+ if (entry.isIntersecting) {
25
+ entry.target.classList.add('loaded');
26
+ observer.unobserve(entry.target);
27
+ }
28
+ });
29
+ }, { threshold: 0.1 });
30
+
31
+ lazyElements.forEach(el => elementObserver.observe(el));
32
+ });
33
+
34
+ // 初始化图表
35
+ function initChart(ctx, config) {
36
+ return new Chart(ctx, config);
37
+ }
38
+
39
+ // 格式化数字
40
+ function formatNumber(num, decimals = 0) {
41
+ if (num >= 100000000) {
42
+ return (num / 100000000).toFixed(decimals) + '亿';
43
+ } else if (num >= 10000) {
44
+ return (num / 10000).toFixed(decimals) + '万';
45
+ }
46
+ return num.toLocaleString('zh-CN', { maximumFractionDigits: decimals });
47
+ }
48
+
49
+ // 格式化百分比
50
+ function formatPercent(value, decimals = 1) {
51
+ return (value * 100).toFixed(decimals) + '%';
52
+ }
53
+
54
+ // 创建趋势指示器
55
+ function createTrendIndicator(value) {
56
+ const isPositive = value >= 0;
57
+ const icon = isPositive ? '↑' : '↓';
58
+ const className = isPositive ? 'stat-change positive' : 'stat-change negative';
59
+ return `<span class="${className}">${icon} ${Math.abs(value).toFixed(1)}%</span>`;
60
+ }
61
+
62
+ // 响应式图表配置
63
+ function getResponsiveConfig(baseConfig) {
64
+ return {
65
+ ...baseConfig,
66
+ options: {
67
+ ...baseConfig.options,
68
+ responsive: true,
69
+ maintainAspectRatio: false,
70
+ plugins: {
71
+ ...baseConfig.options?.plugins,
72
+ legend: {
73
+ ...baseConfig.options?.plugins?.legend,
74
+ display: window.innerWidth > 768
75
+ }
76
+ }
77
+ }
78
+ };
79
+ }
style.css CHANGED
@@ -1,28 +1,286 @@
1
- body {
2
- padding: 2rem;
3
- font-family: -apple-system, BlinkMacSystemFont, "Arial", sans-serif;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  }
5
 
6
- h1 {
7
- font-size: 16px;
8
- margin-top: 0;
 
 
 
 
 
9
  }
10
 
11
- p {
12
- color: rgb(107, 114, 128);
13
- font-size: 15px;
14
- margin-bottom: 10px;
15
- margin-top: 5px;
16
  }
17
 
 
18
  .card {
19
- max-width: 620px;
20
- margin: 0 auto;
21
- padding: 16px;
22
- border: 1px solid lightgray;
23
- border-radius: 16px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  }
25
 
26
- .card p:last-child {
27
- margin-bottom: 0;
28
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ * {
2
+ margin: 0;
3
+ padding: 0;
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ :root {
8
+ --color-primary: #405DF9;
9
+ --color-secondary: #6C63F0;
10
+ --color-accent-1: #7342CC;
11
+ --color-accent-2: #B750BE;
12
+ --color-accent-3: #ED589D;
13
+ --color-accent-4: #FB466C;
14
+ --color-accent-5: #FFC159;
15
+ }
16
+
17
+ html {
18
+ scroll-behavior: smooth;
19
  }
20
 
21
+ body {
22
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;
23
+ background: linear-gradient(135deg, #f8fafc 0%, #e8f4f8 100%);
24
+ color: #1e293b;
25
+ line-height: 1.6;
26
+ min-height: 100vh;
27
+ display: flex;
28
+ flex-direction: column;
29
  }
30
 
31
+ .main-content {
32
+ padding-top: 80px;
33
+ min-height: calc(100vh - 300px);
 
 
34
  }
35
 
36
+ /* 卡片样式 */
37
  .card {
38
+ background: white;
39
+ border-radius: 16px;
40
+ padding: 24px;
41
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04);
42
+ border: 1px solid rgba(0, 0, 0, 0.04);
43
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
44
+ }
45
+
46
+ .card:hover {
47
+ box-shadow: 0 8px 30px rgba(64, 93, 249, 0.12);
48
+ transform: translateY(-2px);
49
+ border-color: rgba(64, 93, 249, 0.2);
50
+ }
51
+
52
+ .card-title {
53
+ font-size: 18px;
54
+ font-weight: 600;
55
+ margin-bottom: 16px;
56
+ color: #1e293b;
57
+ display: flex;
58
+ align-items: center;
59
+ gap: 8px;
60
+ }
61
+
62
+ .card-title svg {
63
+ width: 20px;
64
+ height: 20px;
65
+ color: var(--color-primary);
66
+ }
67
+
68
+ /* 按钮样式 */
69
+ .btn {
70
+ display: inline-flex;
71
+ align-items: center;
72
+ gap: 8px;
73
+ padding: 10px 20px;
74
+ border-radius: 8px;
75
+ font-size: 14px;
76
+ font-weight: 500;
77
+ border: none;
78
+ cursor: pointer;
79
+ text-decoration: none;
80
+ transition: all 0.2s ease;
81
+ }
82
+
83
+ .btn-primary {
84
+ background: linear-gradient(135deg, var(--color-primary), var(--color-secondary));
85
+ color: white;
86
+ }
87
+
88
+ .btn-primary:hover {
89
+ transform: scale(1.02);
90
+ box-shadow: 0 4px 12px rgba(64, 93, 249, 0.4);
91
+ }
92
+
93
+ .btn-secondary {
94
+ background: rgba(64, 93, 249, 0.08);
95
+ color: var(--color-primary);
96
+ }
97
+
98
+ .btn-secondary:hover {
99
+ background: rgba(64, 93, 249, 0.16);
100
+ }
101
+
102
+ /* 动画 */
103
+ @keyframes fadeInUp {
104
+ from {
105
+ opacity: 0;
106
+ transform: translateY(20px);
107
+ }
108
+ to {
109
+ opacity: 1;
110
+ transform: translateY(0);
111
+ }
112
+ }
113
+
114
+ .fade-in {
115
+ animation: fadeInUp 0.6s ease forwards;
116
+ }
117
+
118
+ .delay-1 { animation-delay: 0.1s; }
119
+ .delay-2 { animation-delay: 0.2s; }
120
+ .delay-3 { animation-delay: 0.3s; }
121
+ .delay-4 { animation-delay: 0.4s; }
122
+
123
+ /* 统计卡片 */
124
+ .stat-card {
125
+ background: white;
126
+ border-radius: 12px;
127
+ padding: 20px;
128
+ position: relative;
129
+ overflow: hidden;
130
+ }
131
+
132
+ .stat-card::before {
133
+ content: '';
134
+ position: absolute;
135
+ top: 0;
136
+ left: 0;
137
+ right: 0;
138
+ height: 4px;
139
+ background: linear-gradient(90deg, var(--color-primary), var(--color-secondary));
140
+ }
141
+
142
+ .stat-value {
143
+ font-size: 32px;
144
+ font-weight: 700;
145
+ color: #1e293b;
146
+ margin: 8px 0;
147
+ }
148
+
149
+ .stat-label {
150
+ font-size: 14px;
151
+ color: #64748b;
152
+ }
153
+
154
+ .stat-change {
155
+ font-size: 13px;
156
+ font-weight: 500;
157
+ }
158
+
159
+ .stat-change.positive {
160
+ color: #10b981;
161
  }
162
 
163
+ .stat-change.negative {
164
+ color: #ef4444;
165
  }
166
+
167
+ /* 渐变背景 */
168
+ .gradient-text {
169
+ background: linear-gradient(135deg, var(--color-primary), var(--color-secondary));
170
+ -webkit-background-clip: text;
171
+ -webkit-text-fill-color: transparent;
172
+ background-clip: text;
173
+ }
174
+
175
+ /* 表格样式 */
176
+ .data-table {
177
+ width: 100%;
178
+ border-collapse: collapse;
179
+ }
180
+
181
+ .data-table th,
182
+ .data-table td {
183
+ padding: 12px 16px;
184
+ text-align: left;
185
+ border-bottom: 1px solid rgba(0, 0, 0, 0.06);
186
+ }
187
+
188
+ .data-table th {
189
+ font-size: 13px;
190
+ font-weight: 600;
191
+ color: #64748b;
192
+ text-transform: uppercase;
193
+ letter-spacing: 0.5px;
194
+ }
195
+
196
+ .data-table td {
197
+ font-size: 14px;
198
+ color: #1e293b;
199
+ }
200
+
201
+ .data-table tr:hover {
202
+ background: rgba(64, 93, 249, 0.02);
203
+ }
204
+
205
+ /* 进度条 */
206
+ .progress-bar {
207
+ height: 8px;
208
+ background: #e5e7eb;
209
+ border-radius: 4px;
210
+ overflow: hidden;
211
+ }
212
+
213
+ .progress-fill {
214
+ height: 100%;
215
+ border-radius: 4px;
216
+ transition: width 0.8s ease;
217
+ }
218
+
219
+ /* 标签 */
220
+ .badge {
221
+ display: inline-block;
222
+ padding: 4px 12px;
223
+ border-radius: 20px;
224
+ font-size: 12px;
225
+ font-weight: 500;
226
+ }
227
+
228
+ .badge-success {
229
+ background: #d1fae5;
230
+ color: #059669;
231
+ }
232
+
233
+ .badge-warning {
234
+ background: #fef3c7;
235
+ color: #d97706;
236
+ }
237
+
238
+ .badge-danger {
239
+ background: #fee2e2;
240
+ color: #dc2626;
241
+ }
242
+
243
+ .badge-info {
244
+ background: #dbeafe;
245
+ color: #2563eb;
246
+ }
247
+
248
+ /* 响应式 */
249
+ @media (max-width: 768px) {
250
+ .stat-value {
251
+ font-size: 24px;
252
+ }
253
+
254
+ .card {
255
+ padding: 16px;
256
+ }
257
+ }
258
+
259
+ /* 懒加载 */
260
+ .lazy-load {
261
+ opacity: 0;
262
+ transition: opacity 0.3s ease;
263
+ }
264
+
265
+ .lazy-load.loaded {
266
+ opacity: 1;
267
+ }
268
+
269
+ /* 滚动条样式 */
270
+ ::-webkit-scrollbar {
271
+ width: 8px;
272
+ height: 8px;
273
+ }
274
+
275
+ ::-webkit-scrollbar-track {
276
+ background: #f1f5f9;
277
+ }
278
+
279
+ ::-webkit-scrollbar-thumb {
280
+ background: #cbd5e1;
281
+ border-radius: 4px;
282
+ }
283
+
284
+ ::-webkit-scrollbar-thumb:hover {
285
+ background: #94a3b8;
286
+ }