首页 前端知识 零基础入门必看】Vue2智慧大屏项目实战:一个文件搞定数据可视化,新手也能轻松上手! 【前端实战教程】从0到1开发Vue数据大屏:完整源码 详细注释,适合初学者的实战项目 【Vue2项目实战】数据可视

零基础入门必看】Vue2智慧大屏项目实战:一个文件搞定数据可视化,新手也能轻松上手! 【前端实战教程】从0到1开发Vue数据大屏:完整源码 详细注释,适合初学者的实战项目 【Vue2项目实战】数据可视

2025-02-27 11:02:18 前端知识 前端哥 325 160 我要收藏

效果图

在这里插入图片描述


🌟【定制化开发服务,让您的项目领先一步】🌟

如有需求,直接私信留下您的联系方式。谢谢。
我的邮箱:2351598671@qq.com


完整代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>智慧大屏可视化项目</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/5.4.3/echarts.min.js"></script>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        body {
            background: #000f2d;
            color: #fff;
            font-family: Arial, sans-serif;
        }
        .dashboard {
            padding: 20px;
            display: grid;
            grid-template-columns: repeat(3, 1fr);
            grid-gap: 20px;
            height: 100vh;
        }
        .panel {
            background: rgba(6, 30, 93, 0.5);
            border: 1px solid #0e4b91;
            padding: 15px;
            border-radius: 5px;
        }
        .header {
            font-size: 24px;
            text-align: center;
            color: #00f2ff;
            padding: 20px 0;
            grid-column: 1 / -1;
        }
        .chart {
            height: 300px;
        }
        .data-list {
            height: 300px;
            overflow-y: auto;
        }
        .data-item {
            display: flex;
            justify-content: space-between;
            padding: 10px;
            border-bottom: 1px solid #0e4b91;
        }
        .number {
            font-size: 24px;
            color: #00f2ff;
            text-align: center;
            margin: 10px 0;
        }
    </style>
</head>
<body>
    <div id="app">
        <div class="dashboard">
            <div class="header">智慧城市运营监控中心</div>
            
            <!-- 实时数据面板 -->
            <div class="panel">
                <h3>实时监控数据</h3>
                <div class="number">{{ realTimeData.visitors }}</div>
                <p style="text-align: center">当前访问人数</p>
                <div class="data-list">
                    <div class="data-item" v-for="(item, index) in realTimeData.events" :key="index">
                        <span>{{ item.time }}</span>
                        <span>{{ item.event }}</span>
                    </div>
                </div>
            </div>

            <!-- 折线图 -->
            <div class="panel">
                <h3>访问趋势分析</h3>
                <div ref="lineChart" class="chart"></div>
            </div>

            <!-- 饼图 -->
            <div class="panel">
                <h3>用户分布</h3>
                <div ref="pieChart" class="chart"></div>
            </div>

            <!-- 图片展示 -->
            <div class="panel">
                <h3>监控画面</h3>
                <img src="/api/placeholder/400/320" alt="监控画面1" style="width: 100%; height: 200px; object-fit: cover;">
            </div>

            <!-- 柱状图 -->
            <div class="panel">
                <h3>资源使用率</h3>
                <div ref="barChart" class="chart"></div>
            </div>

            <!-- 表格数据 -->
            <div class="panel">
                <h3>告警信息</h3>
                <div class="data-list">
                    <div class="data-item" v-for="(alert, index) in alertData" :key="index">
                        <span>{{ alert.time }}</span>
                        <span :style="{color: alert.level === '高' ? '#ff4444' : '#ffaa00'}">{{ alert.message }}</span>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <script>
        new Vue({
            el: '#app',
            data: {
                realTimeData: {
                    visitors: 1234,
                    events: [
                        { time: '14:30:21', event: '系统正常运行中' },
                        { time: '14:29:45', event: '数据备份完成' },
                        { time: '14:28:30', event: '新用户注册' },
                        { time: '14:27:15', event: '系统更新完成' }
                    ]
                },
                alertData: [
                    { time: '14:30:00', level: '高', message: '服务器负载过高' },
                    { time: '14:25:00', level: '中', message: '数据库连接波动' },
                    { time: '14:20:00', level: '高', message: '网络延迟异常' },
                    { time: '14:15:00', level: '中', message: '存储空间警告' }
                ]
            },
            mounted() {
                this.initLineChart();
                this.initPieChart();
                this.initBarChart();
                this.startDataUpdate();
            },
            methods: {
                initLineChart() {
                    const chart = echarts.init(this.$refs.lineChart);
                    const option = {
                        textStyle: {
                            color: '#fff'
                        },
                        tooltip: {
                            trigger: 'axis'
                        },
                        xAxis: {
                            type: 'category',
                            data: ['00:00', '03:00', '06:00', '09:00', '12:00', '15:00', '18:00', '21:00'],
                            axisLine: {
                                lineStyle: {
                                    color: '#fff'
                                }
                            }
                        },
                        yAxis: {
                            type: 'value',
                            axisLine: {
                                lineStyle: {
                                    color: '#fff'
                                }
                            }
                        },
                        series: [{
                            data: [820, 932, 901, 934, 1290, 1330, 1320, 1000],
                            type: 'line',
                            smooth: true,
                            lineStyle: {
                                color: '#00f2ff'
                            },
                            areaStyle: {
                                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
                                    offset: 0,
                                    color: 'rgba(0,242,255,0.5)'
                                }, {
                                    offset: 1,
                                    color: 'rgba(0,242,255,0.1)'
                                }])
                            }
                        }]
                    };
                    chart.setOption(option);
                },
                initPieChart() {
                    const chart = echarts.init(this.$refs.pieChart);
                    const option = {
                        textStyle: {
                            color: '#fff'
                        },
                        tooltip: {
                            trigger: 'item'
                        },
                        legend: {
                            top: '5%',
                            left: 'center',
                            textStyle: {
                                color: '#fff'
                            }
                        },
                        series: [{
                            type: 'pie',
                            radius: ['40%', '70%'],
                            avoidLabelOverlap: false,
                            itemStyle: {
                                borderRadius: 10,
                                borderColor: '#fff',
                                borderWidth: 2
                            },
                            label: {
                                show: false,
                                position: 'center'
                            },
                            emphasis: {
                                label: {
                                    show: true,
                                    fontSize: '40',
                                    fontWeight: 'bold'
                                }
                            },
                            labelLine: {
                                show: false
                            },
                            data: [
                                { value: 1048, name: '移动端' },
                                { value: 735, name: 'PC端' },
                                { value: 580, name: '平板' },
                                { value: 484, name: '其他' }
                            ]
                        }]
                    };
                    chart.setOption(option);
                },
                initBarChart() {
                    const chart = echarts.init(this.$refs.barChart);
                    const option = {
                        textStyle: {
                            color: '#fff'
                        },
                        tooltip: {
                            trigger: 'axis',
                            axisPointer: {
                                type: 'shadow'
                            }
                        },
                        xAxis: {
                            type: 'category',
                            data: ['CPU', '内存', '磁盘', '带宽'],
                            axisLine: {
                                lineStyle: {
                                    color: '#fff'
                                }
                            }
                        },
                        yAxis: {
                            type: 'value',
                            axisLine: {
                                lineStyle: {
                                    color: '#fff'
                                }
                            }
                        },
                        series: [{
                            data: [70, 85, 65, 90],
                            type: 'bar',
                            itemStyle: {
                                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
                                    offset: 0,
                                    color: '#83bff6'
                                }, {
                                    offset: 0.5,
                                    color: '#188df0'
                                }, {
                                    offset: 1,
                                    color: '#188df0'
                                }])
                            }
                        }]
                    };
                    chart.setOption(option);
                },
                startDataUpdate() {
                    setInterval(() => {
                        this.realTimeData.visitors = Math.floor(1000 + Math.random() * 500);
                        const newEvent = {
                            time: new Date().toLocaleTimeString(),
                            event: '系统状态更新'
                        };
                        this.realTimeData.events.unshift(newEvent);
                        if (this.realTimeData.events.length > 10) {
                            this.realTimeData.events.pop();
                        }
                    }, 3000);
                }
            }
        });
    </script>
</body>
</html>

转载请注明出处或者链接地址:https://www.qianduange.cn//article/21761.html
标签
评论
会员中心 联系我 留言建议 回顶部
复制成功!