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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions