更新记录

1.0.0(2026-06-07) 下载此版本

初次提交


平台兼容性

uni-app x(5.07)

Chrome Safari Android iOS 鸿蒙 微信小程序
5.0 -

其他

多语言 暗黑模式 宽屏模式
× ×

laoqianjunzi-echart

laoqianjunzi-echart 是一个面向 uni-app x 的原生 Canvas 图表插件,提供统一的数据模型、组件化接入方式和跨端编译能力,适用于 WebAndroidHarmonyiOS 场景。

插件以 option 配置为核心,同时支持一组内置预设配置,适合快速接入常用图表,也适合在业务项目中按统一数据模型继续扩展。

功能特性

  • 原生 Canvas 渲染,不依赖 WebView
  • 统一支持 WebAndroidHarmonyiOS
  • 支持组件方式接入,适配 uni-app x 页面和组件树
  • 支持通用图表配置和预设图表配置两种使用模式
  • 支持柱状、折线、山峰、饼图、环图、雷达、仪表盘、环形进度、水位球、散点、气泡、K 线、漏斗、热力图
  • 支持运行时更新数据、更新动画时长、切换动画开关、导出图片、读取绘制状态
  • 支持点击命中、图例切换、缩放动作、框选、拖拽、十字准星等增强交互能力

平台支持

根据当前插件配置与项目内验证结果:

  • Web:支持
  • Android:支持,minVersion21
  • Harmony:支持
  • iOS:支持

说明:当前仓库内已完成 WebAndroidHarmony 的真实编译验证;iOS 是否能在本机继续运行,仍取决于签名或基座环境。

目录结构

uni_modules/laoqianjunzi-echart/
├─ components/
│  └─ laoqianjunzi-echart/
│     └─ laoqianjunzi-echart.uvue
├─ pages/
│  └─ index.uvue
├─ utssdk/
│  ├─ interface.uts
│  ├─ adapter.uts
│  ├─ engine.uts
│  ├─ index.uts
│  ├─ web/
│  ├─ app-android/
│  ├─ app-harmony/
│  └─ app-ios/
└─ package.json

快速开始

1. 组件方式使用

<template>
  <laoqianjunzi-echart :option="chartOption" height="320px" />
</template>

<script setup lang="ts">
const chartOption = {
  title: '经营走势',
  subtitle: '柱状 + 折线',
  chartType: 'bar',
  categories: ['一月', '二月', '三月', '四月'],
  series: [
    {
      type: 'bar',
      name: '订单量',
      color: '#2563eb',
      showValue: true,
      data: [120, 148, 132, 180]
    },
    {
      type: 'line',
      name: '客单价',
      color: '#f97316',
      data: [52, 60, 58, 68]
    }
  ]
}
</script>

2. 预设方式使用

<template>
  <laoqianjunzi-echart :presetOptions="presetOption" height="320px" />
</template>

<script setup lang="ts">
const presetOption = {
  type: 'radar1',
  title: '渠道覆盖',
  total: 100,
  series: ['零售', '企业', '渠道', '复购', '口碑', '服务'],
  data: [
    { seriesName: '零售', value: 72 },
    { seriesName: '企业', value: 84 },
    { seriesName: '渠道', value: 68 },
    { seriesName: '复购', value: 58 },
    { seriesName: '口碑', value: 79 },
    { seriesName: '服务', value: 88 }
  ]
}
</script>

组件属性

属性名 类型 默认值 说明
option object createDefaultChartOption() 通用图表配置
presetOptions object \| null null 预设图表配置
width string '100%' 组件宽度,建议使用 px%
height string '320px' 组件高度
theme object {} 主题配置
autoResize boolean true 是否自动监听尺寸变化并重绘
animation boolean true 是否启用动画
animationDuration number 360 动画时长
loading boolean false 是否显示加载遮罩
emptyText string '暂无数据' 空数据提示文案

组件事件

事件名 说明
ready 组件首次完成尺寸初始化
init 返回组件实例 API
renderComplete 当前配置完成绘制
click 点击命中图元时触发
dataSelect 数据选中、动作分发或点击命中时触发
legendToggle 切换图例显隐时触发
zoomChange 视窗缩放变化时触发
brushChange 框选交互时触发
panChange 拖拽交互时触发
crosshairMove 十字准星移动或命中预览时触发
tooltipShow 提示层显示时触发
tooltipHide 提示层隐藏时触发
error 配置非法或更新失败时触发

组件实例方法

init 事件中或 ref 引用组件后可访问以下方法:

方法名 说明
setOption(option) 设置通用图表配置并重绘
setPresetOptions(option) 设置预设配置并重绘
getOption() 获取当前通用配置快照
getPresetOptions() 获取当前预设配置快照
resize() 重新读取容器尺寸并重绘
drawing(data) 按当前配置结构更新数据
updatePresetData(data) 仅更新预设配置中的 data
setSpeed(speed) 更新动画时长
setAnimate(animate) 切换动画开关
setScale(scale) 设置缩放倍率
clear() 清空画布
dispose() 销毁内部状态
toDataURL() 导出当前图表为 base64 图片
getimgData() 获取当前画布像素数据
getPainted() 获取当前是否已完成绘制
menuEvent(x, y) 手动触发命中检测
getViewportState() 获取当前视窗状态
toggleLegend(index) 切换图例项显隐
dispatchAction(action) 分发交互动作

通用图表类型

chartTypeseries[].type 当前支持以下类型:

类型 说明
bar 柱状图
overlayBar 叠加柱图
line 折线图
mountain 山峰图 / 面积峰图
pie 饼图
ring 环图
radar 雷达图
gauge 仪表盘
annular 环形进度
ball 水位球
scatter 散点图
bubble 气泡图
candlestick K 线图
funnel 漏斗图
heatmap 热力图

预设图表类型

presetOptions.type 当前支持以下预设类型:

类型 说明
columnar1 单柱状图
columnar2 叠加双柱状图
columnar3 正负柱状图
line1 单折线图
line2 多折线图
pieshaped 饼图预设
radar1 标准雷达图
radar2 扇区雷达图
dashboard 仪表盘预设
annular 环形进度预设
ball 水位球预设
mountain 山峰图预设

通用配置说明

顶层配置

常用顶层字段如下:

字段 说明
title 主标题
subtitle 副标题
chartType 当前主图类型
categories 类目轴数据
palette 调色板
padding 图表内边距
fontSize 默认字号
series 图表数据序列
theme 主题色配置
dataZoom 缩放配置
interaction 交互模式配置
xAxis X 轴配置
yAxis Y 轴配置
legend 图例配置
grid 绘图区配置
radar 雷达图配置
gauge 仪表盘配置
annular 环形进度配置
tooltip 提示层配置
visualMap 热力图颜色映射
animation 是否启用动画
animationDuration 动画时长

序列配置

series 中常用字段:

字段 说明
type 序列类型
name 序列名称
color 主色
data 序列数据
showValue 是否显示数值标签
labelShow 是否显示标签
labelInside 标签是否绘制在内部
axisIndex 绑定到第几个 Y 轴
stack 堆叠分组名
area 是否绘制面积
smooth 是否平滑曲线
barWidth 柱宽
lineWidth 线宽
symbolSize 点尺寸
negativeColor K 线或负值颜色
borderColor 描边颜色
negativeBorderColor 负向描边颜色
markLine 标线配置
markPoint 标记点配置
markArea 标记区域配置

数据格式示例

柱状 / 折线 / 山峰

series: [
  {
    type: 'bar',
    name: '订单量',
    data: [120, 148, 132, 180]
  },
  {
    type: 'line',
    name: '客单价',
    data: [52, 60, 58, 68]
  }
]

饼图 / 环图

series: [
  {
    type: 'pie',
    name: '来源',
    data: [
      { name: '自然流量', value: 42, color: '#2563eb' },
      { name: '私域复购', value: 26, color: '#14b8a6' }
    ]
  }
]

雷达图

radar: {
  indicators: [
    { name: '执行力', max: 100 },
    { name: '稳定性', max: 100 }
  ]
},
series: [
  {
    type: 'radar',
    name: '本月',
    data: [84, 72]
  }
]

散点 / 气泡

series: [
  {
    type: 'scatter',
    name: '用户',
    data: [
      { name: 'A-17', x: 8, y: 126, size: 12 },
      { name: 'B-09', x: 14, y: 188, size: 14 }
    ]
  }
]

K 线

series: [
  {
    type: 'candlestick',
    name: 'BTC/USDT',
    data: [
      { open: 96, close: 104, low: 92, high: 108 },
      { open: 104, close: 101, low: 98, high: 110 }
    ]
  }
]

热力图

xAxis: {
  type: 'category',
  data: ['Mon', 'Tue', 'Wed']
},
yAxis: {
  type: 'category',
  data: ['09:00', '12:00']
},
series: [
  {
    type: 'heatmap',
    data: [
      { value: [0, 0, 18] },
      { value: [1, 0, 26] }
    ]
  }
]

主题配置

theme 常用字段:

字段 说明
backgroundColor 背景色
gridColor 网格色
axisLineColor 坐标轴线颜色
axisTextColor 坐标轴文字颜色
textColor 主文字颜色
mutedColor 弱化文字颜色
radarTextColor 雷达标题颜色
radarNumberColor 雷达数字颜色

示例:

const chartTheme = {
  backgroundColor: '#f4f7ff',
  gridColor: '#d4dcf3',
  axisLineColor: '#7c8aa8',
  axisTextColor: '#62708e',
  textColor: '#11203a',
  mutedColor: '#73819b'
}

动作分发

组件实例支持通过 dispatchAction 触发交互动作,当前支持:

  • showTip
  • hideTip
  • highlight
  • downplay
  • select
  • unselect
  • legendToggle
  • setInteractionMode
  • resetZoom
  • zoomRange

示例:

chartRef.value?.dispatchAction({
  type: 'showTip',
  seriesIndex: 0,
  dataIndex: 2
})
chartRef.value?.dispatchAction({
  type: 'setInteractionMode',
  mode: 'brush'
})

演示页面

插件内置演示页:

  • uni_modules/laoqianjunzi-echart/pages/index

如果当前工程已经在 pages.json 中注册该页面,可直接运行查看效果。

使用建议

  • 图表容器建议明确设置高度,避免容器高度为 0 导致无法绘制
  • 当页面内容较长且需要 App 端滚动时,建议外层使用 <scroll-view>
  • 当仅更新数据时,优先使用 drawing(data)updatePresetData(data),避免重复构造完整配置
  • 当需要跨端稳定布局时,避免依赖 gap,优先使用显式 margin
  • 当需要更复杂的业务组合图时,优先使用 option 模式而不是预设模式

当前版本说明

当前文档描述的是插件现有独立能力与当前组件 API,不包含任何历史插件命名、兼容层或旧接口迁移说明。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议