数据大屏
<!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> body { margin: 0; padding: 0; background-color: #0a1a35; color: #fff; font-family: "Microsoft YaHei", sans-serif; } .dashboard { display: grid; grid-template-columns: repeat(3, 1fr); grid-gap: 20px; padding: 20px; position: relative; overflow: hidden; } .chart { width: 100%; height: 350px; } .chart-container { background: rgba(16, 42, 87, 0.7); border-radius: 10px; padding: 15px; box-shadow: 0 0 20px rgba(0, 150, 255, 0.3); } .chart { width: 100%; height: 400px; } h2 { color: #4fc3f7; text-align: center; margin-top: 0; } #nameList { grid-column: span 2; height: 100px; overflow: hidden; text-align: center; font-size: 24px; line-height: 100px; color: #4fc3f7; } </style> </head> <body> <div class="dashboard"> <div class="chart-container"> <h2>年龄分布柱状图</h2> <div id="ageBarChart" class="chart"></div> </div> <div class="chart-container"> <h2>婚姻状态</h2> <div id="maritalPieChart" class="chart"></div> </div> <div class="chart-container"> <h2>工作情况</h2> <div id="jobBarChart" class="chart"></div> </div> <div class="chart-container"> <h2>子女数量</h2> <div id="childrenLineChart" class="chart"></div> </div> <div class="chart-container"> <h2>学历分布</h2> <div id="educationPieChart" class="chart"></div> </div> <div class="chart-container"> <h2>年龄段比例</h2> <div id="agePieChart" class="chart"></div> </div> </div> <script> // 生成500条人员数据 const people = []; const familyNames = ['王','李','张','刘','陈','杨','赵','黄','周','吴']; const givenNames = ['伟','芳','娜','秀英','敏','静','丽','强','磊','军']; const educations = ['初中','高中','专科','本科','研究生','博士研究生']; const maritalStatuses = ['未婚','已婚','离异','丧偶']; const jobs = ['事业编','公务员','国有企业','民营企业']; for (let i = 1; i <= 500; i++) { const age = Math.floor(Math.random() * 60) + 18; const maritalStatus = maritalStatuses[Math.floor(Math.random() * maritalStatuses.length)]; people.push({ id: i, name: familyNames[Math.floor(Math.random() * familyNames.length)] + givenNames[Math.floor(Math.random() * givenNames.length)], age: age, education: educations[Math.floor(Math.random() * educations.length)], maritalStatus: maritalStatus, childrenCount: maritalStatus === '已婚' ? Math.floor(Math.random() * 4) : 0, job: jobs[Math.floor(Math.random() * jobs.length)] }); } // 初始化图表 const ageBarChart = echarts.init(document.getElementById('ageBarChart')); const maritalPieChart = echarts.init(document.getElementById('maritalPieChart')); const jobBarChart = echarts.init(document.getElementById('jobBarChart')); const childrenLineChart = echarts.init(document.getElementById('childrenLineChart')); const educationPieChart = echarts.init(document.getElementById('educationPieChart')); const agePieChart = echarts.init(document.getElementById('agePieChart')); // 年龄柱状图配置 const ageRanges = ['20-30', '31-40', '41-50', '51-60', '61-70', '71-80']; const ageCounts = ageRanges.map(range => { const [min, max] = range.split('-').map(Number); return people.filter(p => p.age >= min && p.age <= max).length; }); const ageBarOption = { tooltip: { trigger: 'axis' }, xAxis: { type: 'category', data: ageRanges, axisLabel: { color: '#fff' } }, yAxis: { type: 'value', axisLabel: { color: '#fff' } }, series: [{ data: ageCounts, type: 'bar', itemStyle: { color: '#4fc3f7' } }] }; // 婚姻状态饼图配置 const maritalPieOption = { tooltip: { trigger: 'item' }, series: [{ type: 'pie', radius: '50%', data: [ { value: people.filter(p => p.maritalStatus === '已婚').length, name: '已婚' }, { value: people.filter(p => p.maritalStatus === '未婚').length, name: '未婚' }, { value: people.filter(p => p.maritalStatus === '离异').length, name: '离异' }, { value: people.filter(p => p.maritalStatus === '丧偶').length, name: '丧偶' } ], itemStyle: { borderRadius: 5, borderColor: '#0a1a35', borderWidth: 2 } }] }; // 工作情况柱状图配置 const jobBarOption = { tooltip: { trigger: 'axis' }, xAxis: { type: 'category', data: ['事业编', '公务员', '国有企业', '民营企业'], axisLabel: { color: '#fff' } }, yAxis: { type: 'value', axisLabel: { color: '#fff' } }, series: [{ data: [ people.filter(p => p.job === '事业编').length, people.filter(p => p.job === '公务员').length, people.filter(p => p.job === '国有企业').length, people.filter(p => p.job === '民营企业').length ], type: 'bar', itemStyle: { color: '#4fc3f7' } }] }; // 子女数量折线图配置 const childrenLineOption = { tooltip: { trigger: 'axis' }, xAxis: { type: 'category', data: ['1个', '2个', '3个'], axisLabel: { color: '#fff' } }, yAxis: { type: 'value', axisLabel: { color: '#fff' } }, series: [{ data: [ people.filter(p => p.childrenCount === 1).length, people.filter(p => p.childrenCount === 2).length, people.filter(p => p.childrenCount === 3).length ], type: 'line', smooth: true, itemStyle: { color: '#4fc3f7' } }] }; // 学历分布饼图配置 const educationPieOption = { tooltip: { trigger: 'item' }, series: [{ type: 'pie', radius: '50%', data: [ { value: people.filter(p => p.education === '初中').length, name: '初中' }, { value: people.filter(p => p.education === '高中').length, name: '高中' }, { value: people.filter(p => p.education === '专科').length, name: '专科' }, { value: people.filter(p => p.education === '本科').length, name: '本科' }, { value: people.filter(p => p.education === '研究生').length, name: '研究生' }, { value: people.filter(p => p.education === '博士研究生').length, name: '博士研究生' } ], itemStyle: { borderRadius: 5, borderColor: '#0a1a35', borderWidth: 2 } }] }; // 年龄段饼图配置 const agePieOption = { tooltip: { trigger: 'item' }, series: [{ type: 'pie', radius: '50%', data: ageRanges.map((range, i) => ({ value: ageCounts[i], name: range })), itemStyle: { borderRadius: 5, borderColor: '#0a1a35', borderWidth: 2 } }] }; // 渲染所有图表 ageBarChart.setOption(ageBarOption); maritalPieChart.setOption(maritalPieOption); jobBarChart.setOption(jobBarOption); childrenLineChart.setOption(childrenLineOption); educationPieChart.setOption(educationPieOption); agePieChart.setOption(agePieOption); // 窗口大小变化时重置图表大小 window.addEventListener('resize', function() { ageBarChart.resize(); maritalPieChart.resize(); jobBarChart.resize(); childrenLineChart.resize(); educationPieChart.resize(); agePieChart.resize(); }); </script> </body> </html>