数据分析

Vue3 ECharts 大屏与图表一体化

试用

Vue3 + TypeScript + ECharts 的一体化技能,两种模式共用同一份图表资产。模式一 scaffold:一键生成可视化大屏项目(Vite + ECharts + Axios + Pinia + Naive UI,scale 等比缩放适配 1920x1080,主题可切换,初始化 JSON 放 public/data 由 Axios 拉取,数字翻牌用 vue3-digital-flop);模式二 chart:往已有 Vue3 项目注入单个图表,产出 builder + hook + vue 三件套。触发词:大屏、可视化大屏、数据看板、dashboard scaffold、ECharts 大屏、数字翻牌、生成图表组件、封装 ECharts、做个折线图/柱状图/饼图/漏斗/热力图/桑基图/旭日图/地图/词云/水球组件。

它能做什么

| 模式 | 用途 | 命令要点 | |------|------|----------| | (默认) | 从零起一个完整可视化大屏项目 | | | | 往已有 Vue3 项目注入单个图表 | |

技能文档

Vue3 + TS ECharts 一体化技能(大屏脚手架 + 单图表注入)

Overview

一个技能、两种用法,共用同一份图表资产 assets/builders/——不存在第二份图表模板:

模式用途命令要点
scaffold(默认)从零起一个完整可视化大屏项目node generate.mjs --theme tech-green
chart往已有 Vue3 项目注入单个图表node generate.mjs <项目根> --mode chart --name sales-trend --type line

两种模式产出的图表都是同一套三件套,结构、命名、生命周期完全一致:

src/hooks/charts/builders/.ts      # 选项构造器:纯函数 buildOption(data, config)
src/hooks/charts/useChart.ts      # 业务 hook:托管 init / setOption / resize / dispose
src/components/charts/Chart.vue   # UI 组件:props 接 data/config/height/theme

自包含、弱耦合:每个图表只依赖自己的 hook + builder,放进任意 Vue3 项目即可用,不注入/不覆盖任何共享 useECharts.ts(可选共享件见 assets/use-echarts.ts)。

决策:用哪个模式

  • 用户要「一个页面 / 一个项目 / 大屏 / 看板」→ scaffold
  • 用户要「加一个图表 / 封装个折线图 / 做个饼图组件」→ chart
  • 判不出来就问,别猜。

模式 A:scaffold(一键起大屏)

node "/scripts/generate.mjs" ./my-screen
node "/scripts/generate.mjs" ./my-screen --theme tech-green --install
node "/scripts/generate.mjs" ./my-screen --charts trend:line,device:pie,region:map --no-kpi
node "/scripts/generate.mjs" ./my-screen --dry-run     # 只看计划不落盘

`` 即本技能目录 C:/Users/李玉明/.workbuddy/skills/vue3-echarts-dashboard

参数说明缺省
--modescaffold / chartscaffold
--themetech-blue / tech-green / tech-purpletech-blue
--chartsname:type[:title],...,自定义要哪些图表内置 15 类
--no-kpi不生成数字翻牌 KPI 格含 KPI
--install生成后自动 npm install不装
--force目标已存在时覆盖
--dry-run只打印计划

产出结构

my-screen/
├── public/
│   ├── data/*.json        # 页面初始化数据(Axios 拉取,16 份)
│   └── geo/china.json     # 中国省级边界(离线渲染,合规)
└── src/
    ├── main.ts            # 注册 pinia / naive-ui / vue3-digital-flop / 应用主题
    ├── App.vue            # scale 等比缩放容器
    ├── theme/index.ts     # 主题(CSS 变量 + echarts.registerTheme('dashboard'))
    ├── api/               # axios 实例 + 接口 + 类型
    ├── stores/dashboard.ts# Pinia 数据中心(并发拉全部 JSON)
    ├── composables/useScreenScale.ts
    ├── components/        # ScreenHeader / PanelBox / DigitalFlop / Ranking
    ├── hooks/charts/      # builders/ + useChart.ts
    └── views/Dashboard.vue

布局与默认图表

4 列网格,行数按图表数推导(ceil((图表数 + KPI) / 4))。默认 4×4 = 16 格:第 1 格 KPI 数字翻牌,其余 15 格图表。

#组件类型#组件类型
1Trendline9FlowSankeysankey
2Categorycategory-bar10SourceTreetree
3Monthlybar11SourceSunburstsunburst
4Devicepie12Regionmap
5Abilityradar13HotWordwordcloud
6Conversionfunnel14Completionliquidfill
7Targetgauge15Rankingranking(非 ECharts)
8ActiveHeatheatmap

数据自洽

统一流量口径 14000,各图互相印证,改数据时别破坏这个关系:

  • 渠道合计(category)= 桑基「访问」节点 = 漏斗「访问」= 树/旭日根值 = 地图省份合计
  • 漏斗 14000 → 10080 → 6020 → 3640 → 2772,与桑基逐段流转及各流失边完全对齐
  • 水球 0.786 = 仪表盘 78.6(年度目标完成率)
  • 词云与排行榜共用同一批热门页面数据

模式 B:chart(往已有项目注入单个图表)

python "/scripts/generate_chart.py" --target <项目根> --name sales-trend --type line
node    "/scripts/generate.mjs"      <项目根> --mode chart --name sales-trend --type line
node    "/scripts/generate.mjs"      <项目根> --mode chart --name my-pie --type pie --force

两条命令产出一致(.mjs 是主脚本,.py 是同逻辑的离线兜底)。名称接受 sales-trend / SalesTrend / sales_trend,脚本统一转 Pascal / kebab。

参数--name(必填)、--type(默认 line)、--dry-run--force

产出 3 个文件后,在用到的地方:

可用类型(18 类)

分组类型
趋势 / 分布line bar category-bar pie scatter
指标 / 占比radar gauge kpi funnel liquidfill
关系 / 结构sunburst sankey tree treemap heatmap
其他map wordcloud ranking custom(TODO 模板)

每个类型的 ChartDatapublic/data/*.json 的结构一一对应(含 title),所以大屏数据可直接复用,无需适配层。


主题系统(两模式通用)

  • CSS 变量applyTheme() 写入 --c-primary / --c-primary2 / --c-text / --c-accent / --c-axis,组件样式用 color-mix(in srgb, var(--c-primary) N%, transparent)
  • ECharts 主题echarts.registerTheme('dashboard', …),大屏模式下 hook 默认 theme: 'dashboard'
  • builder 调色板:hook 里的 BASE_CONFIG 由生成器按主题注入 { colors: [...], primary: '...' }(热力/地图注入 5 色渐变带)。用户传入的 config 优先级更高。
  • 扩展主题:在 src/theme/index.tsthemes 里加一条,并把调色板同步到 scripts/generate.mjsTHEMES

常见定制

  • 加图表node generate.mjs <项目根> --mode chart --name <名> --type <类型>,再在 Dashboard.vue 里放进一个 .cell
  • 换布局:改 views/Dashboard.vue.dashboard__bodygrid-template-columnsgridTemplateRows
  • 接后端src/api/index.ts 里把 /data/*.json 换成真实接口,ChartData 结构保持不变即可。
  • 去掉地图:删 public/geo/RegionChart.vuehooks/charts/useRegionChart.tsbuilders/region.ts 及 store/api 中 map 相关引用,省约 570KB。
  • 体积优化:参考 assets/echarts-tree-shaking.ts 改按需引入。

注意事项

  • 插件型图表必须装依赖,hook 已在顶部自动 importwordcloudnpm i echarts-wordcloudliquidfillnpm i echarts-liquidfill
  • 地图合规map 用 ECharts 内置 map + 本地 geoJSON(DataV 中国省级边界,含台湾省、港澳及南海诸岛),不接在线瓦片服务、不含密钥;hook 内先 registerMapinit。替换 geoJSON 时必须用自然资源部标准地图。
  • vue3-digital-flopstart 只在首次加载生效,本模板用 end 绑定指标值,初始化播放一次动画。
  • build 脚本仅 vite build(不跑 vue-tsc),避免全局注册的组件触发模板类型报错;需要类型检查用 npm run type-check
  • 约定与 plop-vue3-codegen 对齐:kebab 目录、Pascal 组件、camel hook,@src

相关技能

把自然语言描述转为结构化 JSON,并由 mcp-diagram-generator MCP 服务生成 Draw.io、Mermaid 或 Excalidraw 图表文件。

作者 nssa.io1.0k 次安装47 星标

从 AdMapix API 拉取广告创意、应用、榜单和收入预估等数据,原样返回结构化 JSON。

作者 fly0pants

按用户明确指令,在得到大脑(Get笔记)中保存、搜索并管理笔记与知识库。

作者 iswalle763 次安装66 星标

诊断生产力系统反复失效的根因,给出最小干预——容量测算、瓶颈定位、可靠的本地记录。

作者 Iván2 次安装

在本地磁盘以分类纯 Markdown 文件保存需要长期留存的事实,与智能体内置记忆并存。

作者 Iván1 次安装

liyumingben 的更多技能

浏览全部技能

3-7 岁幼儿英语启蒙课程:L1 字母 → L2 自然拼读 → L3 词汇句型 → L4 阅读对话,生成 A4 可打印练习页(含答案),支持诊断定级与错题重练。kindergarten English worksheets, alphabet, phonics, CVC words, sight words.

作者 liyumingben1 次安装

3-7 岁幼儿识数与加减法体系课程。按 L1 识数1-5、L2 识数6-10、L3 比大小与分解组成、L4 10以内加减、L5 20以内进退位五级体系,生成 A4 可打印数学练习页(含答案页),并支持能力诊断、练习批改与进阶建议。Use when 用户提到 幼儿园/幼儿/小班/中班/大班/幼小衔接/学前 的 数学、识数、认数字、数数、点数、比大小、分解组成、凑十法、加减法、口算、应用题、练习纸、练习题、给孩子出题、数学启蒙、数学练习;or asks for kindergarten math worksheets, counting, number recognition, addition/subtraction within 10 or 20. Also use when 需要判断孩子数学起点、规划学习路径、批改幼儿数学练习或给出家长指导话术。

作者 liyumingben1 次安装

面向 3-7 岁幼儿的 L1-L4 思维启蒙体系,生成 A4 可打印训练页与答案。

作者 liyumingben1 次安装

跨平台磁盘空间分析与缓存清理(Windows / macOS / Linux)。当用户说"磁盘满了""C 盘空间不足""清理缓存""清理 npm 缓存""清理临时文件""看看什么占空间""磁盘清理""释放空间"时使用。四层架构:平台探测、缓存发现、安全分级、交互勾选执行。启发式扫描能找出白名单外的未知缓存,删除项由用户逐项勾选确认。

作者 liyumingben

3-7 岁幼儿识字与诗歌课程:L1 看图认字 → L2 描红 → L3 组词 → L4 古诗填空,生成 A4 可打印练习页(含答案页)。Use when 用户提到 识字、描红、笔顺、组词、古诗、儿歌、默写、幼小衔接练字;or asks for Chinese tracing worksheets, hanzi, poem with pinyin.

作者 liyumingben1 次安装

3-6 岁幼儿五大领域活动方案生成器。按 小班/中班/大班/幼小衔接 与 健康/语言/社会/科学/艺术 五域,从内置活动库挑选游戏、小实验、手工、生活任务,生成 A4 可打印活动卡(领域目标、材料清单、分步玩法、家长安全提示、时长),支持一周活动计划组合。Use when 用户提到 幼儿/孩子/幼儿园/亲子/陪玩 的 活动、游戏、亲子活动、手工、画画、小实验、科学实验、运动游戏、户外活动、带娃、周计划、活动方案、活动卡;or asks for kindergarten activities, kids games, crafts, science experiments, family activity plans. Also use when 需要为幼儿园五大领域设计活动或安排一周亲子活动。注意:若用户要的是练习题(数学/思维/英语题),请使用对应的练习型 Skill。

作者 liyumingben1 次安装