Skip to content

在 Dashboard panel 的 detailUrl 或 custom.links 中使用 ${__field.labels.xxx} 格式的变量时,变量无法被正确替换。 #2079

@xiaojuhua-code

Description

@xiaojuhua-code

问题描述
在 Dashboard panel 的 detailUrl 或 custom.links 中使用 ${__field.labels.xxx} 格式的变量时,变量无法被正确替换。

例如配置:

/dashboard/58?area=${__field.labels.area}&ident=${__field.labels.ident}
点击链接后变量保持原样 ${__field.labels.area} 未被替换,或被错误替换为 ${__field}ield.labels.area。

根本原因
src/pages/dashboard/Variables/utils/formatString.ts 第 22 行的正则:

processedStr = processedStr.replace(/$([a-zA-Z0-9_]+)/g, (match, varName) => {
这个正则会在点号处停止匹配。当输入 area=${__field.labels.area} 时:

第一步正则把 $__field 单独匹配出来(停在点号处)
因为 __field 不存在于 data,尝试匹配更短的变量名也失败
结果 ${__field.labels.area} 被破坏成 ${__field}ield.labels.area
后续的 ${...} 处理无法正确匹配
复现步骤
创建包含 table 或 hexbin panel 的 dashboard
在 panel 的 custom.links 中配置 URL:/detail?area=${__field.labels.area}
点击链接
变量未被正确替换
期望行为
${__field.labels.xxx} 应该能正确替换为对应的 label 值。

修复建议
把 ${...} 处理移到 $variableName 处理之前,避免正则破坏 ${...} 结构:

try {
// 0. 先处理 ${variableName} 格式(支持点号键名)
processedStr = processedStr.replace(/${([^}]+)}/g, (match, varName) => {
if (Object.prototype.hasOwnProperty.call(data, varName)) {
return String(data[varName] ?? '');
}
return match;
});

// 1. 处理 $variableName 格式
processedStr = processedStr.replace(/\$([a-zA-Z0-9_]+)/g, ...);
// ...

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions