数据大屏

 
<!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>

 

posted on 2025-10-07 10:52  码农at突泉  阅读(4)  评论(0)    收藏  举报