Skip to content

Commit f3ddca2

Browse files
committed
Update.
1 parent 5603f75 commit f3ddca2

File tree

2 files changed

+32
-22
lines changed

2 files changed

+32
-22
lines changed

cmd/dashboard/controller/member_api.go

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1618,16 +1618,30 @@ func (ma *memberAPI) addOrEditAlertRule(c *gin.Context) {
16181618
log.Printf(" FailTriggerTasksRaw: %q (len=%d)", arf.FailTriggerTasksRaw, len(arf.FailTriggerTasksRaw))
16191619
log.Printf(" RecoverTriggerTasksRaw: %q (len=%d)", arf.RecoverTriggerTasksRaw, len(arf.RecoverTriggerTasksRaw))
16201620

1621-
// 清理可能的编码问题
1622-
// 如果值看起来像是被双重序列化的,尝试修复
1623-
if strings.HasPrefix(arf.FailTriggerTasksRaw, `"`) && strings.HasSuffix(arf.FailTriggerTasksRaw, `"`) {
1621+
// 修复错误的数据格式
1622+
// 情况1: ["[]"] -> []
1623+
// 情况2: "[]" (被双引号包裹) -> []
1624+
// 情况3: "" (空字符串) -> []
1625+
1626+
// 处理 FailTriggerTasksRaw
1627+
if arf.FailTriggerTasksRaw == `["[]"]` || arf.FailTriggerTasksRaw == `[""]` {
1628+
arf.FailTriggerTasksRaw = "[]"
1629+
log.Printf(" 修复错误格式的 FailTriggerTasksRaw: [] (from %q)", arf.FailTriggerTasksRaw)
1630+
} else if strings.HasPrefix(arf.FailTriggerTasksRaw, `"`) && strings.HasSuffix(arf.FailTriggerTasksRaw, `"`) {
1631+
// 双重序列化的情况:"[]" 或 "[1,2,3]"
16241632
var temp string
16251633
if err := utils.Json.Unmarshal([]byte(arf.FailTriggerTasksRaw), &temp); err == nil {
16261634
arf.FailTriggerTasksRaw = temp
16271635
log.Printf(" 修复双重序列化的 FailTriggerTasksRaw: %q", arf.FailTriggerTasksRaw)
16281636
}
16291637
}
1630-
if strings.HasPrefix(arf.RecoverTriggerTasksRaw, `"`) && strings.HasSuffix(arf.RecoverTriggerTasksRaw, `"`) {
1638+
1639+
// 处理 RecoverTriggerTasksRaw
1640+
if arf.RecoverTriggerTasksRaw == `["[]"]` || arf.RecoverTriggerTasksRaw == `[""]` {
1641+
arf.RecoverTriggerTasksRaw = "[]"
1642+
log.Printf(" 修复错误格式的 RecoverTriggerTasksRaw: [] (from %q)", arf.RecoverTriggerTasksRaw)
1643+
} else if strings.HasPrefix(arf.RecoverTriggerTasksRaw, `"`) && strings.HasSuffix(arf.RecoverTriggerTasksRaw, `"`) {
1644+
// 双重序列化的情况:"[]" 或 "[1,2,3]"
16311645
var temp string
16321646
if err := utils.Json.Unmarshal([]byte(arf.RecoverTriggerTasksRaw), &temp); err == nil {
16331647
arf.RecoverTriggerTasksRaw = temp

resource/static/main.js

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -95,40 +95,36 @@ function showFormModal(modelSelector, formID, URL, getData) {
9595
const name = $hidden.attr('name');
9696
if (!name || !name.endsWith('Raw')) return;
9797

98-
// 检查当前值是否已经是有效的 JSON 字符串
99-
const currentVal = $hidden.val();
100-
let shouldUpdate = false;
101-
10298
// 优先从可见标签读取 data-value
10399
let values = [];
104100
$dropdown.find('a.ui.label').each(function() {
105101
const v = $(this).attr('data-value');
106102
if (v !== undefined && v !== null && v !== '') {
107103
const n = parseInt(v);
108104
values.push(isNaN(n) ? v : n);
109-
shouldUpdate = true; // 有标签说明用户进行了操作
110105
}
111106
});
112107

113108
// 若未读到标签,再回退使用 dropdown API
114-
if (values.length === 0 && !shouldUpdate) {
109+
// 但要注意:dropdown API 可能返回的是已有的 JSON 字符串值(如 "[]"),
110+
// 我们需要过滤掉这些无效值
111+
if (values.length === 0) {
115112
const apiVals = $dropdown.dropdown('get values') || [];
116113
for (let i = 0; i < apiVals.length; i++) {
117-
const n = parseInt(apiVals[i]);
118-
values.push(isNaN(n) ? apiVals[i] : n);
119-
}
120-
// 如果 API 返回了值,也应该更新
121-
if (apiVals.length > 0) {
122-
shouldUpdate = true;
114+
const val = apiVals[i];
115+
// 跳过看起来像 JSON 字符串的值(如 "[]", "{}", 等)
116+
if (val && val.trim() !== '' &&
117+
!val.startsWith('[') && !val.startsWith('{') &&
118+
!val.startsWith('"')) {
119+
const n = parseInt(val);
120+
values.push(isNaN(n) ? val : n);
121+
}
123122
}
124123
}
125124

126-
// 只有在需要更新时才重新序列化
127-
if (shouldUpdate) {
128-
const jsonValue = JSON.stringify(values);
129-
$hidden.val(jsonValue);
130-
}
131-
// 否则保持原值(可能已经是正确的 JSON 字符串了)
125+
// 总是更新值为正确的 JSON 字符串
126+
const jsonValue = JSON.stringify(values);
127+
$hidden.val(jsonValue);
132128
});
133129

134130
// 确保所有 *Raw 字段都有有效的默认值

0 commit comments

Comments
 (0)