dm-design/商家端web/品牌管理/数据分析/连锁单位业绩排行榜.html

551 lines
19 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

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

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>连锁单位业绩排行榜 - 品牌数据中心</title>
<script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js"></script>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB',
'Microsoft YaHei', 'Helvetica Neue', Helvetica, Arial, sans-serif;
background: #f5f5f5;
color: #333;
padding: 20px;
min-height: 100vh;
}
.container {
max-width: 1600px;
margin: 0 auto;
padding: 20px;
}
.page-header {
background: white;
padding: 16px 24px;
margin-bottom: 16px;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
text-align: center;
}
.page-title {
font-size: 24px;
font-weight: 600;
color: #262626;
margin-bottom: 8px;
}
.page-subtitle {
font-size: 14px;
color: #666;
}
.stats-section {
background: white;
padding: 24px;
margin-bottom: 16px;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.stats-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
}
.stat-item {
text-align: center;
padding: 20px;
border: 1px solid #f0f0f0;
border-radius: 8px;
background: #fafafa;
}
.stat-item:hover {
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
transform: translateY(-2px);
transition: all 0.3s;
}
.stat-item h3 {
font-size: 14px;
color: #666;
margin-bottom: 12px;
font-weight: 500;
}
.stat-item .value {
font-size: 24px;
font-weight: 600;
color: #1890ff;
margin-bottom: 8px;
}
.stat-item .label {
font-size: 12px;
color: #999;
}
.chart-section {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 16px;
margin-bottom: 16px;
}
@media (max-width: 1024px) {
.chart-section {
grid-template-columns: 1fr;
}
}
.chart-card {
background: white;
border-radius: 8px;
padding: 24px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.chart-card h2 {
font-size: 20px;
color: #262626;
margin-bottom: 16px;
padding-bottom: 12px;
border-bottom: 1px solid #f0f0f0;
font-weight: 600;
}
.chart-container {
height: 400px;
width: 100%;
}
.ranking-list {
list-style: none;
}
.ranking-item {
display: flex;
align-items: center;
padding: 16px;
margin-bottom: 12px;
background: #f8f9fa;
border-radius: 6px;
transition: all 0.3s ease;
border: 1px solid #f0f0f0;
}
.ranking-item:hover {
background: #f8f9fa;
transform: translateX(2px);
border-color: #1890ff;
}
.ranking-number {
width: 40px;
height: 40px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-weight: bold;
font-size: 18px;
margin-right: 16px;
}
.ranking-number.top1 {
background: linear-gradient(135deg, #FFD700, #FFA500);
color: white;
}
.ranking-number.top2 {
background: linear-gradient(135deg, #C0C0C0, #808080);
color: white;
}
.ranking-number.top3 {
background: linear-gradient(135deg, #CD7F32, #8B4513);
color: white;
}
.ranking-number.other {
background: #dee2e6;
color: #495057;
}
.ranking-info {
flex: 1;
}
.ranking-name {
font-size: 16px;
font-weight: 600;
color: #333;
margin-bottom: 4px;
}
.ranking-location {
font-size: 12px;
color: #999;
}
.ranking-value {
font-size: 20px;
font-weight: bold;
color: #1890ff;
}
.ranking-unit {
font-size: 12px;
color: #999;
margin-left: 4px;
}
.trend-badge {
display: inline-block;
padding: 4px 12px;
border-radius: 20px;
font-size: 12px;
font-weight: 600;
margin-left: 8px;
}
.trend-up {
background: #d4edda;
color: #155724;
}
.trend-down {
background: #f8d7da;
color: #721c24;
}
</style>
</head>
<body>
<div class="container">
<div class="page-header">
<h1 class="page-title">📊 连锁单位业绩排行榜</h1>
<p class="page-subtitle">多维度对比连锁市场/店铺经营表现 · 数据更新时间2024-01-15 10:30</p>
</div>
<div class="stats-section">
<div class="stats-grid">
<div class="stat-item">
<h3>连锁单位总数</h3>
<div class="value">28</div>
<div class="label">家连锁市场/店铺</div>
</div>
<div class="stat-item">
<h3>本月总销售额</h3>
<div class="value">¥856万</div>
<div class="label">环比上月 +23.5%</div>
</div>
<div class="stat-item">
<h3>本月总订单量</h3>
<div class="value">12,847</div>
<div class="label">环比上月 +18.2%</div>
</div>
<div class="stat-item">
<h3>本月总客户数</h3>
<div class="value">8,563</div>
<div class="label">环比上月 +15.8%</div>
</div>
</div>
</div>
<div class="chart-section">
<div class="chart-card">
<h2>🏆 销售额TOP10排行榜</h2>
<ul class="ranking-list">
<li class="ranking-item">
<div class="ranking-number top1">1</div>
<div class="ranking-info">
<div class="ranking-name">朝阳菜市场(望京店)</div>
<div class="ranking-location">📍 北京市朝阳区</div>
</div>
<div>
<span class="ranking-value">¥128.5万</span>
<span class="trend-badge trend-up">↑ 32%</span>
</div>
</li>
<li class="ranking-item">
<div class="ranking-number top2">2</div>
<div class="ranking-info">
<div class="ranking-name">海淀菜市场(中关村店)</div>
<div class="ranking-location">📍 北京市海淀区</div>
</div>
<div>
<span class="ranking-value">¥115.2万</span>
<span class="trend-badge trend-up">↑ 28%</span>
</div>
</li>
<li class="ranking-item">
<div class="ranking-number top3">3</div>
<div class="ranking-info">
<div class="ranking-name">西城菜市场(金融街店)</div>
<div class="ranking-location">📍 北京市西城区</div>
</div>
<div>
<span class="ranking-value">¥98.7万</span>
<span class="trend-badge trend-up">↑ 15%</span>
</div>
</li>
<li class="ranking-item">
<div class="ranking-number other">4</div>
<div class="ranking-info">
<div class="ranking-name">东城菜市场(国贸店)</div>
<div class="ranking-location">📍 北京市东城区</div>
</div>
<div>
<span class="ranking-value">¥87.3万</span>
<span class="trend-badge trend-up">↑ 22%</span>
</div>
</li>
<li class="ranking-item">
<div class="ranking-number other">5</div>
<div class="ranking-info">
<div class="ranking-name">丰台菜市场(科技园店)</div>
<div class="ranking-location">📍 北京市丰台区</div>
</div>
<div>
<span class="ranking-value">¥76.8万</span>
<span class="trend-badge trend-up">↑ 18%</span>
</div>
</li>
<li class="ranking-item">
<div class="ranking-number other">6</div>
<div class="ranking-info">
<div class="ranking-name">石景山菜市场(万达店)</div>
<div class="ranking-location">📍 北京市石景山区</div>
</div>
<div>
<span class="ranking-value">¥65.4万</span>
<span class="trend-badge trend-up">↑ 12%</span>
</div>
</li>
<li class="ranking-item">
<div class="ranking-number other">7</div>
<div class="ranking-info">
<div class="ranking-name">通州菜市场(副中心店)</div>
<div class="ranking-location">📍 北京市通州区</div>
</div>
<div>
<span class="ranking-value">¥58.9万</span>
<span class="trend-badge trend-up">↑ 25%</span>
</div>
</li>
<li class="ranking-item">
<div class="ranking-number other">8</div>
<div class="ranking-info">
<div class="ranking-name">昌平菜市场(回龙观店)</div>
<div class="ranking-location">📍 北京市昌平区</div>
</div>
<div>
<span class="ranking-value">¥52.3万</span>
<span class="trend-badge trend-down">↓ 5%</span>
</div>
</li>
<li class="ranking-item">
<div class="ranking-number other">9</div>
<div class="ranking-info">
<div class="ranking-name">大兴菜市场(亦庄店)</div>
<div class="ranking-location">📍 北京市大兴区</div>
</div>
<div>
<span class="ranking-value">¥48.6万</span>
<span class="trend-badge trend-up">↑ 8%</span>
</div>
</li>
<li class="ranking-item">
<div class="ranking-number other">10</div>
<div class="ranking-info">
<div class="ranking-name">顺义菜市场(空港店)</div>
<div class="ranking-location">📍 北京市顺义区</div>
</div>
<div>
<span class="ranking-value">¥42.1万</span>
<span class="trend-badge trend-up">↑ 10%</span>
</div>
</li>
</ul>
</div>
<div class="chart-card">
<h2>📦 订单量TOP10排行榜</h2>
<div class="chart-container" id="orderChart"></div>
</div>
</div>
<div class="chart-section">
<div class="chart-card">
<h2>👥 客户量TOP10排行榜</h2>
<div class="chart-container" id="customerChart"></div>
</div>
<div class="chart-card">
<h2>📈 增长率TOP10排行榜</h2>
<div class="chart-container" id="growthChart"></div>
</div>
</div>
</div>
<script>
// 订单量排行榜
const orderChart = echarts.init(document.getElementById('orderChart'));
const orderOption = {
tooltip: {
trigger: 'axis',
axisPointer: { type: 'shadow' }
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: {
type: 'value',
name: '订单量'
},
yAxis: {
type: 'category',
data: ['顺义(空港)', '大兴(亦庄)', '昌平(回龙观)', '通州(副中心)', '石景山(万达)',
'丰台(科技园)', '东城(国贸)', '西城(金融街)', '海淀(中关村)', '朝阳(望京)'],
axisLabel: {
fontSize: 12
}
},
series: [{
name: '订单量',
type: 'bar',
data: [582, 635, 698, 758, 823, 945, 1067, 1235, 1456, 1689],
itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [
{ offset: 0, color: '#667eea' },
{ offset: 1, color: '#764ba2' }
])
},
label: {
show: true,
position: 'right',
formatter: '{c}单'
}
}]
};
orderChart.setOption(orderOption);
// 客户量排行榜
const customerChart = echarts.init(document.getElementById('customerChart'));
const customerOption = {
tooltip: {
trigger: 'axis',
axisPointer: { type: 'shadow' }
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: {
type: 'value',
name: '客户数'
},
yAxis: {
type: 'category',
data: ['顺义(空港)', '大兴(亦庄)', '昌平(回龙观)', '通州(副中心)', '石景山(万达)',
'丰台(科技园)', '东城(国贸)', '西城(金融街)', '海淀(中关村)', '朝阳(望京)'],
axisLabel: {
fontSize: 12
}
},
series: [{
name: '客户数',
type: 'bar',
data: [456, 512, 578, 623, 689, 756, 834, 923, 1089, 1267],
itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [
{ offset: 0, color: '#f093fb' },
{ offset: 1, color: '#f5576c' }
])
},
label: {
show: true,
position: 'right',
formatter: '{c}人'
}
}]
};
customerChart.setOption(customerOption);
// 增长率排行榜
const growthChart = echarts.init(document.getElementById('growthChart'));
const growthOption = {
tooltip: {
trigger: 'axis',
axisPointer: { type: 'shadow' }
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: {
type: 'value',
name: '环比增长率',
axisLabel: {
formatter: '{value}%'
}
},
yAxis: {
type: 'category',
data: ['石景山(万达)', '西城(金融街)', '大兴(亦庄)', '顺义(空港)', '丰台(科技园)',
'东城(国贸)', '通州(副中心)', '海淀(中关村)', '朝阳(望京)', '昌平(天通苑)'],
axisLabel: {
fontSize: 12
}
},
series: [{
name: '增长率',
type: 'bar',
data: [12, 15, 18, 22, 25, 28, 32, 35, 38, 45],
itemStyle: {
color: function(params) {
const colors = [
new echarts.graphic.LinearGradient(0, 0, 1, 0, [
{ offset: 0, color: '#4facfe' },
{ offset: 1, color: '#00f2fe' }
])
];
return colors[0];
}
},
label: {
show: true,
position: 'right',
formatter: '{c}%'
}
}]
};
growthChart.setOption(growthOption);
// 响应式
window.addEventListener('resize', function() {
orderChart.resize();
customerChart.resize();
growthChart.resize();
});
</script>
</body>
</html>