当前位置: 首页 > news >正文

35【源码】数据可视化:基于 Echarts + Python 动态实时大屏 - 门店销售业绩数据中心

效果图展示

1.动态实时更新数据效果图

说明: 其中 总销售额,折扣率,完成率,售罄率,同比,商品销售排名 做了动态实时更新处理

 

 2.静态切片效果图

 

 

一、确定需求方案

1、确定产品上线部署的屏幕LED分辨率

本案例基于16:9 屏宽比,F11全屏显示。

2、部署方式 

基于免安装可执行程序:支持Windows、Linux、Mac等各种操作系统;将程序复制到服务器上即可,无需其它环境依赖;

观看方式:既可在服务器上直接观看程序界面,也可在远程用浏览器打开播放,例如Chrome浏览器、360浏览器等。

二、整体架构设计

  1. 前端基于Echarts开源库设计,使用WebStorm编辑器;
  2. 后端基于Python Flask实现,使用 Vscode 或 Pycharm编辑器;
  3. 数据传输格式:JSON;
  4. 数据源类型:目前采用JSON文件方式,可自行添加支持PostgreSQL、MySQL、Oracle、Microsoft SQL Server、SQLite,自行添加pandas支持Excel表格等,还可以定制HTTP API接口方式。
  5. 数据更新方式:采用http get 轮询方式 。在实际应用中,也可以视情况选择j监测后端数据实时更新,实时推送到前端的方式;

三、编码实现 (关键代码)

1、前端html代码 - 页面布局主要基于div


<body>
    <!-- 头部模块 -->
    <div class="header">
        <div class="title">
            <span>奶茶门店销售业绩数据中心</span>
        </div>
        <div class="time">
            <span></span>
        </div>
        <div class="company">
            <span>深圳市</span>
            <span>一杯奶茶</span>
        </div>
    </div>

    <!-- 主题模块 -->
    <div class="main">
        <div class="animate">
            <!-- 浮动层 -->
            <div class="float">
                <div class="floating1">
                    <div id="roate1">
                        <div class="roate-item">
                            <p>1111</p>
                            <span>销售额</span>
                        </div>
                        <div class="roate-item">
                            <p>0.7%</p>
                            <span>同比</span>
                        </div>
                        <div class="roate-item">
                            <p>77%</p>
                            <span>完成率</span>
                        </div>
                    </div>
                    <p class="pm">孙一付</p>
                </div>
                <div class="floating2">
                    <div id="roate2">
                        <div class="roate-item2">
                            <p>2222</p>
                            <span>销售额</span>
                        </div>
                        <div class="roate-item2">
                            <p>0.6%</p>
                            <span>同比</span>
                        </div>
                        <div class="roate-item2">
                            <p>66%</p>
                            <span>完成率</span>
                        </div>
                    </div>
                    <p class="pm2">赵二开</p>
                </div>
                <div class="floating3">
                    <div id="roate3">
                        <div class="roate-item3">
                            <p>12356</p>
                            <span>销售额</span>
                        </div>
                        <div class="roate-item3">
                            <p>0.5%</p>
                            <span>同比</span>
                        </div>
                        <div class="roate-item3">
                            <p>555%</p>
                            <span>完成率</span>
                        </div>
                    </div>
                    <p class="pm3">王工</p>
                </div>
                <div class="floating4">
                    <div id="roate4">
                        <div class="roate-item4">
                            <p>12356</p>
                            <span>销售额</span>
                        </div>
                        <div class="roate-item4">
                            <p>0.4%</p>
                            <span>同比</span>
                        </div>
                        <div class="roate-item4">
                            <p>44%</p>
                            <span>完成率</span>
                        </div>
                    </div>
                    <p class="pm4">李工</p>
                </div>
                <div class="floating5">
                    <div id="roate5">
                        <div class="roate-item5">
                            <p>12356</p>
                            <span>销售额</span>
                        </div>
                        <div class="roate-item5">
                            <p>0.3%</p>
                            <span>同比</span>
                        </div>
                        <div class="roate-item5">
                            <p>33%</p>
                            <span>完成率</span>
                        </div>
                    </div>
                    <p class="pm5">张工</p>
                </div>
            </div>
            <div class="sum">
                <div class="data">
                    <p>总销售额</p>
                    <span id="sell_total">2621526</span>
                </div>
                <div class="cicle1"></div>
                <canvas id="canvas1"></canvas>
                <canvas id="canvas2"></canvas>
                <div class="data1">
                    <div class="qiu">
                        <p id="qiu1">1%</p>
                    </div>
                    <span>折扣率</span>
                </div>
                <div class="data2">
                    <div class="qiu">
                        <p id="qiu2">2%</p>
                    </div>
                    <span>售罄率</span>
                </div>
                <div class="data3">
                    <div class="qiu">
                        <p id="qiu3">3%</p>
                    </div>
                    <span>完成率</span>
                </div>
                <div class="data4">
                    <div class="qiu">
                        <p id="qiu4">4%</p>
                    </div>
                    <span>同比</span>
                </div>
            </div>
        </div>
        <div class="charts">
            <div class="charts1">
                <div class="charts-title">
                    <span>产品销售情况分析</span>
                </div>
                <div id="container_sale" class="charts-content1 content"></div>
            </div>
            <div class="charts2">
                <div class="charts-title">
                    <span>商品销售排名</span>
                </div>
                <div class="charts-content2 content">
                    <table>
                        <thead>
                            <tr>
                                <td>排名</td>
                                <td>门店</td>
                                <td>销售额</td>
                                <td>完成情况</td>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td>01</td>
                                <td>东门门店</td>
                                <td id="sell1">25947元</td>
                                <td id="percent1" style="color: #dbbd73">85%<span class="chart1"></span></td>
                            </tr>
                            <tr>
                                <td>02</td>
                                <td>老街门店</td>
                                <td id="sell2">25947元</td>
                                <td id="percent2" style="color: #4bd8ba">85%<span class="chart2"></span></td>
                            </tr>
                            <tr>
                                <td>03</td>
                                <td>华强门店</td>
                                <td id="sell3">25947元</td>
                                <td id="percent3" style="color: #4bd8ba">85%<span class="chart3"></span></td>
                            </tr>
                            <tr>
                                <td>04</td>
                                <td>上步门店</td>
                                <td id="sell4">25947元</td>
                                <td id="percent4" style="color: #4bd8ba">85%<span class="chart4"></span></td>
                            </tr>
                            <tr>
                                <td>05</td>
                                <td>下沙门店</td>
                                <td id="sell5">25947元</td>
                                <td id="percent5" style="color: #dbbd73">85%<span class="chart5"></span></td>
                            </tr>
                            <tr>
                                <td>06</td>
                                <td>南山门店</td>
                                <td id="sell6">25947元</td>
                                <td id="percent6" style="color: #4bd8ba">85%<span class="chart6"></span></td>
                            </tr>
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </div>
</body>

2. 前端JS - echarts图表

 

function init_echart_bar_ROA(container) {
    var chartDom = document.getElementById(container);
    var myChart = echarts.init(chartDom, window.gTheme);
    var option;

    option = {
        title: {
            // text: "资产负债率",
            //top: "5%",
            //left: "2%",
            textStyle: {
                // color: "#00ffff",
                fontSize: "16",
            },
        },
        grid: {
            left: "3%",
            right: "15%",
            bottom: "10%",
            top: "20%",
            containLabel: true,
        },
        tooltip: {
            trigger: "item",
            formatter: "{b}日: {c} 亿元",
            position: function (p) {
                //其中p为当前鼠标的位置
                return [p[0] + 10, p[1] - 10];
            },
        },
        xAxis: {
            name: "日期",
            type: "category",
            nameTextStyle: {
                color: "rgba(255,255,255,.8)",
                fontSize: 12,
            },
            data: [],
            axisLabel: {
                textStyle: {
                    color: "rgba(255,255,255,.8)",
                    fontSize: 14,
                },
            },
            axisLine: {
                lineStyle: {
                    color: "rgba(255,255,255,.2)",
                },
            },
            splitLine: {
                lineStyle: {
                    color: "rgba(255,255,255,.1)",
                },
            },
        },
        yAxis: {
            name: "%",
            type: "value",
            min: 0,
            max: 100,
            nameTextStyle: {
                color: "rgba(255,255,255,.8)",
                fontSize: 12,
            },
            axisLabel: {
                textStyle: {
                    color: "rgba(255,255,255,.8)",
                    fontSize: 14,
                },
            },
            axisLine: {
                lineStyle: {
                    color: "rgba(255,255,255,.2)",
                },
            },
            splitLine: {
                lineStyle: {
                    color: "rgba(255,255,255,.1)",
                },
            },
        },
        series: [
            {
                data: [],
                type: "bar",
                showBackground: true,
                backgroundStyle: {
                    color: "rgba(180, 180, 180, 0.2)",
                },
            },
        ],
    };

    option && myChart.setOption(option);
    window.addEventListener("resize", function () {
        myChart.resize();
    });
}

3. 前端JS - 数据定时更新控制

支持在每个echarts图表中独立控制定时更新的间隔。

  var container = "container_sale";
    init_echart_bar_ROA(container);
    // 定时1s执行数据更新函数
    setInterval(function () {
        async_echart_bar_ROA(container, path_bar_ROA + "bar_ROA.json");
    }, 1000);

4. 后端 Python Flask 代码


app = Flask(__name__, static_folder="static", template_folder="template")


@app.route('/')
def index():
    return redirect('/static/index.html')


# 主程序在这里
if __name__ == "__main__":
    a = threading.Thread(target=loop)
    a.start()

    # 开启 flask 服务
    app.run(host='127.0.0.1', port=80, debug=True)

四、运行效果

 

五、更多案例 


YYDatav的数据可视化大屏《精彩案例汇总》(Python&Echarts源码)_YYDataV的博客-CSDN博客

【工厂扫码打印&扫码装箱&错误追溯系统】完整案例详解(Python&PyQt 源码&Mysql数据库)_YYDataV数据可视化的博客-CSDN博客_pyqt案例

感谢开源分享的前端代码。

相关文章:

  • 如何给《羊了个羊》配置一套智能客服系统?
  • CSS的背景——颜色,图片,背景图片位置,
  • 内网渗透之CFS三层靶机搭建
  • Mediacodec 如何硬件解码到纹理的
  • PDF格式分析(七十五)——线型注释(Line)
  • 医学视VQA——综述
  • Lambda表达式实现方式、标准格式、练习、省略模式、注意事项及和匿名内部类的区别
  • java毕业生设计医患辅助系统计算机源码+系统+mysql+调试部署+lw
  • CAD如何绘制六连环图案?CAD使用圆,椭圆,直线综合练习
  • 二叉树及其应用(增删改查)
  • 分库分表二:ShardingJDBC进阶实战案例上
  • ClickHouse(06)ClickHouse的数据表创建语句详细解析
  • 银纳米团簇-荧光Ag25团簇以及衍生团簇(直径1-2nm)
  • Jmeter-Windows环境配置
  • BZOJ4756 Promotion Counting(线段树合并)
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • golang中接口赋值与方法集
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • jdbc就是这么简单
  • jQuery(一)
  • Js基础——数据类型之Null和Undefined
  • Laravel 实践之路: 数据库迁移与数据填充
  • nodejs调试方法
  • python_bomb----数据类型总结
  • 将回调地狱按在地上摩擦的Promise
  • 两列自适应布局方案整理
  • 数据结构java版之冒泡排序及优化
  • 数组的操作
  • 微信小程序填坑清单
  • 小程序01:wepy框架整合iview webapp UI
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • $L^p$ 调和函数恒为零
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (day 12)JavaScript学习笔记(数组3)
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (三)uboot源码分析
  • (一)Thymeleaf用法——Thymeleaf简介
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)Linq学习笔记
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • . NET自动找可写目录
  • .NET BackgroundWorker
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET6 开发一个检查某些状态持续多长时间的类