MySQL → Flask → Vue → ECharts 开发教程
一、最终项目结构强烈推荐bigscreen/ ├── backend/ # Flask 后端 │ ├── app/ │ │ ├── __init__.py │ │ ├── models.py │ │ ├── routes.py │ │ └── extensions.py │ ├── config.py │ ├── run.py │ └── requirements.txt │ ├── frontend/ # Vue 3 前端 │ ├── src/ │ │ ├── api/ │ │ │ └── index.js │ │ ├── components/ │ │ │ └── ChartPanel.vue │ │ ├── views/ │ │ │ └── Home.vue │ │ ├── App.vue │ │ └── main.js │ ├── package.json │ └── vite.config.js │ └── README.md二、后端Flask生产级结构1️⃣ 安装依赖cd backend python -m venv .venv .venv\Scripts\activate pip install flask flask_sqlalchemy flask_cors pymysqlrequirements.txtflask flask_sqlalchemy flask_cors pymysql2️⃣ 配置config.pyclass Config: SQLALCHEMY_DATABASE_URI ( mysqlpymysql://root:你的密码localhost/bigscreen?charsetutf8mb4 ) SQLALCHEMY_TRACK_MODIFICATIONS False SECRET_KEY dev-secret3️⃣ 扩展app/extensions.pyfrom flask_sqlalchemy import SQLAlchemy from flask_cors import CORS db SQLAlchemy() cors CORS()4️⃣ 数据模型app/models.pyfrom .extensions import db class Sales(db.Model): __tablename__ sales id db.Column(db.Integer, primary_keyTrue) category db.Column(db.String(50)) amount db.Column(db.Numeric(10,2)) date db.Column(db.Date)5️⃣ 路由app/routes.pyfrom flask import Blueprint, jsonify from .extensions import db from .models import Sales bp Blueprint(api, __name__, url_prefix/api) bp.route(/sales) def sales(): data Sales.query.all() return jsonify([ { category: s.category, amount: float(s.amount), date: s.date.strftime(%Y-%m-%d) } for s in data ]) bp.route(/sales/summary) def summary(): sql SELECT category, SUM(amount) AS total FROM sales GROUP BY category result db.session.execute(sql).fetchall() return jsonify([ {name: r[0], value: float(r[1])} for r in result ])6️⃣ 应用工厂app/init.pyfrom flask import Flask from .extensions import db, cors from .routes import bp def create_app(): app Flask(__name__) app.config.from_object(config.Config) db.init_app(app) cors.init_app(app) app.register_blueprint(bp) return app7️⃣ 启动入口run.pyfrom app import create_app app create_app() if __name__ __main__: app.run(host0.0.0.0, port5000, debugTrue)启动python run.py✅ 接口http://localhost:5000/api/saleshttp://localhost:5000/api/sales/summary三、前端Vue 3 ECharts完整脚手架1️⃣ 创建项目npm create vitelatest frontend -- --template vue cd frontend npm install npm install echarts2️⃣ 统一 APIsrc/api/index.jsimport axios from axios const service axios.create({ baseURL: http://localhost:5000, timeout: 10000 }) export const getSales () service.get(/api/sales) export const getSalesSummary () service.get(/api/sales/summary)3️⃣ 通用图表组件src/components/ChartPanel.vuetemplate div refchartRef classchart/div /template script setup import { ref, onMounted, onBeforeUnmount, watch } from vue import * as echarts from echarts const props defineProps({ option: Object }) const chartRef ref(null) let chart null const initChart () { chart echarts.init(chartRef.value) chart.setOption(props.option) } watch(() props.option, (opt) { chart?.setOption(opt) }) onMounted(() { initChart() const ro new ResizeObserver(() chart?.resize()) ro.observe(chartRef.value) onBeforeUnmount(() { ro.disconnect() chart?.dispose() }) }) /script style scoped .chart { width: 100%; height: 100%; } /style✅这个组件 所有大屏图表的基础4️⃣ 首页src/views/Home.vuetemplate div classscreen ChartPanel :optionpieOption / ChartPanel :optionbarOption / ChartPanel :optionlineOption / /div /template script setup import { ref, onMounted } from vue import { getSales, getSalesSummary } from ../api import ChartPanel from ../components/ChartPanel.vue const pieOption ref({}) const barOption ref({}) const lineOption ref({}) onMounted(async () { const summary await getSalesSummary() pieOption.value { title: { text: 销售占比, left: center, textStyle: { fontSize: 1.5vh } }, tooltip: { trigger: item }, legend: { bottom: 2% }, series: [{ type: pie, radius: [45%, 70%], center: [50%, 55%], data: summary.data }] } const sales await getSales() barOption.value { title: { text: 销售趋势, left: center, textStyle: { fontSize: 1.5vh } }, tooltip: {}, xAxis: { type: category, data: [...new Set(sales.data.map(i i.date))] }, yAxis: { type: value }, series: [{ type: bar, data: sales.data.map(i i.amount) }] } }) /script style scoped .screen { width: 100vw; height: 100vh; display: flex; } /style5️⃣ 入口src/main.jsimport { createApp } from vue import App from ./App.vue createApp(App).mount(#app)6️⃣ App.vuetemplate Home / /template script setup import Home from ./views/Home.vue /script四、启动顺序非常重要# 1️⃣ 启动后端 cd backend .venv\Scripts\activate python run.py # 2️⃣ 启动前端 cd frontend npm run dev访问http://localhost:5173

相关新闻

告别B站视频下载烦恼:BilibiliDown全方位使用指南

告别B站视频下载烦恼:BilibiliDown全方位使用指南

告别B站视频下载烦恼:BilibiliDown全方位使用指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bi…

2026/7/3 4:08:57阅读更多 →
2026中山丰田汉兰达音响升级观察:中山永丰FOCAL劲浪三分频二次进阶案例

2026中山丰田汉兰达音响升级观察:中山永丰FOCAL劲浪三分频二次进阶案例

省流摘要:本文根据中山永丰汽车音响一台丰田汉兰达三年后二次升级案例整理。原文车型和图片都明确指向“丰田汉兰达”,因此本文选择“丰田汉兰达音响升级”作为主关键词。案例围绕 FOCAL劲浪 三分频方案、8寸中低音、2.5寸中音、高音原位安装和老客户二次…

2026/7/3 4:08:57阅读更多 →
[Truchet节点]原理解析与实际应用

[Truchet节点]原理解析与实际应用

在 Shader Graph 中使用 Truchet 节点的优势在于其完全程序化的特性,这意味着:纹理分辨率无限,不会出现像素化问题参数可实时调整,便于迭代设计内存占用极低,不依赖纹理资源易于制作动画效果和动态变化节点描述Truchet…

2026/7/3 4:03:56阅读更多 →
2026年电商智能体如何让店铺转化率翻倍?

2026年电商智能体如何让店铺转化率翻倍?

当前,消费者对购物体验的要求不再局限于商品本身,而是对整个服务流程的即时性、精准度和人性化程度提出了更高标准。据CNNIC数据显示,2025年中国网络购物用户规模已超过9.8亿,但平均店铺转化率仅为2.5%左右,大量订单在…

2026/7/3 5:29:06阅读更多 →
进销存多仓库管理

进销存多仓库管理

在食品饮料、冻品零食、日化等快消行业,经销商面临的痛点往往不是“卖不掉”,而是“管不住”。库存积压与缺货并存、多仓库调拨混乱、终端订单与后台库存脱节,这些问题的根源在于进销存软件未能真正适配渠道协同与管理一体化的业务逻辑。本文…

2026/7/3 5:29:06阅读更多 →
论文 deadline 只剩 3 天?2026 双降工具实测:笔墨 AI20 分钟改完万字稿,双率直接达标

论文 deadline 只剩 3 天?2026 双降工具实测:笔墨 AI20 分钟改完万字稿,双率直接达标

Gradpaper-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/课程论文。Gradpaper论文智能生成软件,10分钟生成万字毕业论文、期刊论文、文献综述、PPT,Agc查重、降重报告、文献资料。只需一个标题,从开题报告到答辩一键生成软件&a…

2026/7/3 5:29:06阅读更多 →
网络研讨会回放|GB 44495正式实施,Tier企业应具备哪些密钥管理能力 (feat. KMS)

网络研讨会回放|GB 44495正式实施,Tier企业应具备哪些密钥管理能力 (feat. KMS)

随着 GB 44495-2024《汽车整车信息安全技术要求》 即将正式实施,OEM 对车辆网络安全的要求正在不断提高。与此同时,Tier 企业不仅需要实现相关安全功能,还越来越多地被要求具备加密密钥的生成、注入、存储、更新及全生命周期追溯管理能力。特…

2026/7/3 5:29:06阅读更多 →
AI 解释 Rust 编译错误:把答案变成学习步骤

AI 解释 Rust 编译错误:把答案变成学习步骤

AI 解释 Rust 编译错误:把答案变成学习步骤 一、不要让 AI 直接替你改代码 Rust 编译器报错很详细,但初学时还是会看不懂。AI 可以帮忙解释错误,这是很好的学习辅助。但我不建议一上来就让模型“直接修复”。如果每次都复制报错给 AI&#xf…

2026/7/3 5:29:06阅读更多 →
艺术涂料刷涂工艺?一次说到位

艺术涂料刷涂工艺?一次说到位

刷涂是艺术涂料施工中最基础的技法,但"基础"绝不等于"简单"。同样是刷涂,不同刷具、不同手法、不同干燥阶段介入,最终呈现的纹理和质感天差地别。本文系统梳理刷涂工艺的分类、技法要点和常见误区。一、刷涂在艺术涂料施…

2026/7/3 5:24:06阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/2 12:10:34阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/7/2 12:10:34阅读更多 →
LV3296与PIC18F45K22的UART通信与USB扩展方案

LV3296与PIC18F45K22的UART通信与USB扩展方案

1. LV3296与PIC18F45K22的硬件搭档解析在嵌入式数据采集系统中,LV3296条形码扫描模块与PIC18F45K22微控制器的组合堪称经典搭配。LV3296作为一款工业级条码扫描头,其核心是一颗高性能CMOS图像传感器,配合专用解码芯片,能自动识别包…

2026/7/3 0:03:41阅读更多 →
AI初创生存指南:6个月完成可信度验证闭环

AI初创生存指南:6个月完成可信度验证闭环

1. 这不是“逆袭指南”,而是一份AI初创公司真实生存手记“How To Beat Odds As an AI Startup?”——这个标题乍看像一句热血口号,但在我带过7个从0到1的AI产品团队、亲手踩过融资失败、技术债崩盘、客户POC卡在最后一公里等23类典型坑之后,…

2026/7/3 0:03:41阅读更多 →
多模态+推理链+RAG 2.0+智能体:工业级AI系统落地四支柱

多模态+推理链+RAG 2.0+智能体:工业级AI系统落地四支柱

1. 这不是又一篇“AI趋势速览”,而是一份实操者手记:当多模态、推理链、检索增强与智能体协作真正撞进工程现场“LAI #73”这个编号本身就像一个暗号——它不属于某家大厂的白皮书,也不是学术会议的议程表,而是长期泡在模型训练集…

2026/7/3 0:03:41阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/3 1:12:46阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/3 1:36:36阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/3 2:08:15阅读更多 →