ToolJet Circular Progressbar 组件完整指南:属性、样式与源码实现解析
【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 🚀项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet
Circular Progressbar(环形进度条)是 ToolJet 内置的可视化组件,用于在环形图形中展示任务进度、指标达成率或实时加载状态。本文以 2.50.0-LTS 版本文档为骨架,结合前端源码逐一讲解其属性、样式、动态配置(fx)用法及底层渲染原理,读完即可在自建内部工具或数据看板中正确配置并二次定制该组件。
组件概述
Circular Progressbar 组件以圆环形式显示进度。与线性进度条不同,它把进度百分比直观地"圈"出来,适合用在仪表盘卡片、任务执行进度、配额使用率等场景。在 ToolJet 应用编辑器中,从左侧组件面板拖入即可使用,默认尺寸为宽 7、高 50(见 widgets/circularProgressbar.js 中的defaultSize定义)。
该组件底层基于开源 SVG 库react-circular-progressbar实现,ToolJet 在其上封装了可视化配置面板、响应式显示、主题变量与动态绑定能力。
Properties(数据属性)
:::info 所有带有fx按钮的属性都可以通过 JavaScript 表达式进行程序化配置,实现数据驱动的动态更新。 :::
| 属性 | 描述 | 期望值 |
|---|---|---|
| Text | 设置进度圆环内部显示的文本 | 期望String类型,可使用 JS 随进度变化动态更新文本内容 |
| Progress | 设置组件的进度值 | 期望0 ~ 100之间的整数 |
从源码看这两个属性的实际行为
在组件配置中,progress字段的校验类型为number,默认值为50;text字段校验类型为string(见 widgets/circularProgressbar.js)。
值得注意的细节是:面板上的Label 开关(labelType,可选auto或custom)决定了文本的来源——在渲染组件中:
const label = labelType === 'custom' ? text : `${exposedVariablesTemporaryState.value}%`;即:选择Auto时,圆环中央自动显示"进度值 + %"(如50%),无需手动维护文本;选择Custom时,才使用你填写的text字符串,例如可在Text中写{{ '完成率 ' + (progress * 100) + '%' }}这类 JS 表达式做动态拼接。这一行为由 CirularProgressbar.jsx 实现。
此外,配置面板还提供了文档未展开的两个数据属性:
| 属性 | 说明 | 默认值 |
|---|---|---|
| Allow negative progress | 允许进度值为负数。开启后,负进度会取绝对值绘制,并使用独立的"负向"颜色,旋转方向也会翻转 | {{false}} |
| Loading state | 开启后进入加载态:圆环固定显示 25% 并持续旋转,等待数据就绪 | {{false}} |
Component Specific Actions(CSA)
该组件目前没有实现组件专属动作(CSA),无法在事件处理器中直接调用类似setText的专属方法来控制组件。
不过从源码结构可以推断,ToolJet 为该组件注册了三个可编程控制点(定义于 widgets/circularProgressbar.js,并通过 CirularProgressbar.jsx 暴露给运行时):
setValue(value):动态修改进度值,参数默认{{50}}setVisibility(value):动态切换可见性,参数默认{{true}}setLoading(value):动态切换加载态,参数默认{{false}}
这些方法可在其他组件的事件(如按钮点击)中通过运行 JS 代码调用,实现对环形进度条的运行时控制。
Exposed Variables(暴露变量)
2.50.0-LTS 版本文档标注该组件"目前没有暴露变量",但从源码结构看,组件实际向应用运行时暴露了以下变量(见 widgets/circularProgressbar.js):
| 变量 | 含义 | 默认值 |
|---|---|---|
value | 当前进度值 | 50 |
isVisible | 组件是否可见 | true |
isLoading | 组件是否处于加载态 | false |
这些变量可以在应用的其他位置(如文本组件、查询条件、图表数据源)中引用,例如在表格中显示{{components.circularprogressbar1.value}}来读取当前进度。暴露变量与 Progress 属性通过useBatchedUpdateEffectArray保持同步(见 CirularProgressbar.jsx)。
General(通用设置)
Tooltip(悬停提示)
Tooltip 常用于在鼠标悬停组件时展示补充信息。在General手风琴面板的 Tooltip 字段中填入字符串,悬停时即可显示该提示文本。例如填入当前任务完成进度,预览时将鼠标移到圆环上即可看到提示。
从组件配置看,Tooltip 还支持三种格式切换(tooltipFormat,可选Plain text、Markdown、HTML),默认值为Plain text;格式选项定义于 widgets/circularProgressbar.js。这意味着你可以在 Tooltip 字段中填写 Markdown 或 HTML 内容并切换对应格式以获得富文本提示效果。
Devices(设备显示)
| 属性 | 描述 | 期望值 |
|---|---|---|
| Show on desktop | 控制组件在桌面端视图中是否可见 | 通过开关按钮设置,或点击fx输入逻辑表达式动态配置 |
| Show on mobile | 控制组件在移动端视图中是否可见 | 通过开关按钮设置,或点击fx输入逻辑表达式动态配置 |
默认行为是桌面端显示({{true}})、移动端隐藏({{false}}),见 widgets/circularProgressbar.js 中的definition.others。
Styles(样式)
| 属性 | 描述 | 期望值 |
|---|---|---|
| Color | 定义进度弧线(stroke)的颜色 | HEX 颜色值或通过取色器选择 |
| Text color | 定义圆环内文本的颜色 | HEX 颜色值或通过取色器选择 |
| Text size | 定义文本字号 | 取值范围0 ~ 100 |
| Stroke width | 定义弧线宽度 | 取值范围0 ~ 100 |
| Counter clockwise | 是否逆时针绘制进度 | 接受{{true}}与{{false}},默认false |
| Circle ratio | 定义进度弧线占整个圆直径的比例 | 接受数值,默认1 |
| Visibility | 控制组件可见性 | 可通过fx编程设置;为{{false}}时应用部署后组件不可见,默认{{true}} |
样式参数的默认值与取值范围(源码级)
样式面板中的各项参数在 widgets/circularProgressbar.js 中均有明确的默认值与约束:
- Color(进度弧线颜色):默认
var(--cc-primary-brand),即跟随主题品牌色; - Track(轨道颜色):默认
var(--cc-surface3-surface),用于绘制未填充的底色圆环; - Negative(负进度颜色):默认
var(--cc-error-systemStatus),仅当开启"允许负进度"且值为负时生效; - Completion(完成色):默认
var(--cc-success-systemStatus),当进度值>= 100时自动切换为该颜色,用于强调完成状态; - Text size:默认
16,滑块控制; - Stroke width(面板中显示为 "Progress bar width"):默认
10,滑块控制; - Circle ratio:滑块控制,
min = 0、max = 1、步长0.01,默认1(整圆);调低该值可把圆环"切开"成半圆或任意弧度的仪表盘样式; - Alignment:圆环在画布容器内的水平对齐方式,可选左对齐、居中、右对齐,默认居中;
- Box shadow:容器阴影,默认
0px 0px 0px 0px #00000040; - Padding:容器内边距,可选
default或none。
颜色决策逻辑(源码实现)
圆环弧线的最终颜色并不是固定的,而是由渲染层根据进度值动态计算(见 CirularProgressbar.jsx):
value >= 100 → completionColor(完成色) 开启负进度且 value < 0 → negativeColor(负向色) 其余情况 → color(主色)同时,负进度场景下进度值会取绝对值绘制,并且counterClockwise方向会临时取反,以保证负值弧线从相反方向生长;加载态则固定value = 25、circleRatio = 1并覆盖为品牌色。这些细节决定了"为什么我设置了颜色却不生效"之类的现象,排查样式时可优先核对进度值是否命中了上述分支。
加载态动画
加载态下的持续旋转由组件样式文件 circularProgressbar.scss 中的rotate-forever类驱动,动画为spin 1.2s linear infinite,即每 1.2 秒匀速旋转一圈;组件根节点则通过display: flex/none控制可见性。该 SCSS 同时将圆环宽度设为unset,使其在画布中按容器尺寸自适应。
底层依赖说明
Circular Progressbar 组件基于开源 SVG 库 react-circular-progressbar。在 ToolJet 中实际传给该库的关键参数为:
<CircularProgressbar value={value} text={text} strokeWidth={strokeWidth} counterClockwise={counterClockwise} circleRatio={circleRatio} styles={{ root: { height }, path: { stroke: color }, text: { fill: textColor, fontSize: textSize }, trail: { stroke: trackColor }, }} />其中path(进度弧)、trail(轨道)、text(中心文本)分别对应面板中的 Color、Track、Text color 与 Text size 等样式项。若需要比面板更细粒度的定制(例如自定义圆角端点、弧线动画),可以参考该库文档,并留意其属性最终会被 ToolJet 的上述映射关系覆盖。
典型使用场景
- 任务/批处理进度看板:将
Progress绑定到后端查询返回的百分比字段,如{{queries.taskStatus.data.progress}},圆环自动刷新; - 配额与指标卡:
Circle ratio设为0.75制作 270° 弧形仪表,配合Text显示{{ '已用 ' + used + ' / ' + total }}; - 加载状态反馈:在数据查询运行期间将
Loading state绑定为{{queries.task.isLoading}},数据就绪后自动切回真实进度; - 完成态强调:将进度值推至
100,圆环自动切换为主题成功色(Completion),无需额外写条件。
小结
Circular Progressbar 是 ToolJet 中"配置简单、表现力强"的进度展示组件:面板层提供文本、进度、设备可见性等数据属性,样式层提供弧线、轨道、文本、比例、方向与可见性控制;源码层则封装了负进度、完成态、加载态等高级行为。若需了解组件在其他版本中的差异,可对照 3.0.0-LTS 版本文档 与 最新文档;想深入阅读实现细节,可从 组件渲染实现 与 组件配置定义 入手。
【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 🚀项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考