使用 ECharts 实现菜品统计和销量统计

菜品统计实现

菜品统计通常用于展示不同菜品的销售数量或销售额占比,适合使用饼图或环形图。

  1. 饼图实现菜品占比统计
css 复制代码
    <div id="dishChart"></div>

        // 初始化图表
        var dishChart = echarts.init(document.getElementById('dishChart'));
        
        // 模拟数据 - 实际应用中应从后端API获取
        var dishData = [            { name: '红烧肉', value: 156 },            { name: '清蒸鱼', value: 98 },            { name: '宫保鸡丁', value: 120 },            { name: '麻婆豆腐', value: 85 },            { name: '蒜蓉西兰花', value: 65 },            { name: '酸辣汤', value: 72 }        ];
        
        // 配置项
        var option = {
            title: {
                text: '菜品销售占比统计',
                subtext: '近一周数据',
                left: 'center'
            },
            tooltip: {
                trigger: 'item',
                formatter: '{a} <br/>{b}: {c} ({d}%)'
            },
            legend: {
                orient: 'vertical',
                left: 'left',
                data: dishData.map(item => item.name)
            },
            series: [
                {
                    name: '销售数量',
                    type: 'pie',
                    radius: '50%',
                    data: dishData,
                    emphasis: {
                        itemStyle: {
                            shadowBlur: 10,
                            shadowOffsetX: 0,
                            shadowColor: 'rgba(0, 0, 0, 0.5)'
                        }
                    },
                    label: {
                        formatter: '{b}: {c} ({d}%)'
                    }
                }
            ]
        };
        
        // 使用配置项显示图表
        dishChart.setOption(option);
        
        // 响应式调整
        window.addEventListener('resize', function() {
            dishChart.resize();
        });

销量统计实现

销量统计通常需要展示时间趋势,适合使用折线图或柱状图。

  1. 柱状图实现日销量统计
css 复制代码
    <div id="salesChart"></div>

        // 初始化图表
        var salesChart = echarts.init(document.getElementById('salesChart'));
        
        // 模拟数据 - 实际应用中应从后端API获取
        var days = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'];
        var salesData = [125, 132, 101, 134, 190, 230, 210];
        var popularDish = ['红烧肉', '清蒸鱼', '宫保鸡丁', '红烧肉', '麻婆豆腐', '清蒸鱼', '红烧肉'];
        
        // 配置项
        var option = {
            title: {
                text: '近一周每日销量统计',
                subtext: '数据来源:餐厅POS系统',
                left: 'center'
            },
            tooltip: {
                trigger: 'axis',
                axisPointer: {
                    type: 'shadow'
                },
                formatter: function(params) {
                    return `日期: ${params[0].name}<br/>
                            销量: ${params[0].value}份<br/>
                            最受欢迎菜品: ${popularDish[params[0].dataIndex]}`;
                }
            },
            xAxis: {
                type: 'category',
                data: days,
                axisLabel: {
                    interval: 0,
                    rotate: 0
                }
            },
            yAxis: {
                type: 'value',
                name: '销量(份)'
            },
            series: [
                {
                    name: '销量',
                    type: 'bar',
                    data: salesData,
                    itemStyle: {
                        color: function(params) {
                            // 周末用不同颜色显示
                            return params.dataIndex >= 5 ? '#c23531' : '#2f4554';
                        }
                    },
                    label: {
                        show: true,
                        position: 'top'
                    }
                }
            ],
            dataZoom: [
                {
                    type: 'slider',
                    show: true,
                    xAxisIndex: [0],
                    start: 0,
                    end: 100
                }
            ]
        };
        
        // 使用配置项显示图表
        salesChart.setOption(option);
        
        // 响应式调整
        window.addEventListener('resize', function() {
            salesChart.resize();
        });
相关推荐
扯蛋438几秒前
langchain1.x 时代的记忆系统 (二)
javascript·llm·agent
ClouGence1 分钟前
AI Agent 能写测试、跑流程,为什么回归测试还不能完全交给 AI?
前端·测试
码云之上2 分钟前
Context Engineering:让 Agent 在当前步骤看到正确的事实
前端·人工智能·前端工程化
lingran__4 分钟前
Linux 基础常用指令万字详解(上)|文件目录命令,结合底层原理剖析
linux·运维·服务器·后端·centos·linux基础指令
烂蜻蜓13 分钟前
Node.js入门教程(一):初识Node.js——服务端JavaScript的诞生与特点
开发语言·javascript·node.js
嘟嘟071722 分钟前
从手写 HashRouter 到 React Router:逐层拆解 SPA 前端路由的完整实现
前端·javascript
情可轻 秦任之26 分钟前
ASP.NET页面优化,性能提升8倍的方法
后端·asp.net
王中阳Go1 小时前
用TRAE Work批量优化学员简历,原来2天的活现在2小时就干完了
后端·面试·agent
Zane19941 小时前
同一个 list 为什么能被两个 for 循环同时遍历?一文讲透可迭代对象与迭代器的真相
后端·python
我叫蒙奇1 小时前
JS中的隐式类型转换
前端