fix button editor validation feedback

This commit is contained in:
7015725
2026-05-22 05:15:54 +08:00
parent 544494df8c
commit 195e61d810
3 changed files with 20 additions and 11 deletions

View File

@@ -4356,14 +4356,20 @@ shortcutWrap.addView(scBody);
delete newBtn.launchUserId; delete newBtn.launchUserId;
var isValid = true; var isValid = true;
var validationMessage = "";
function markInvalid(inputObj, msg) {
isValid = false;
if (!validationMessage) validationMessage = String(msg || "请补全必填项");
try { if (inputObj && inputObj.setError) inputObj.setError(String(msg || "必填")); } catch(eMark) { safeLog(null, 'e', "catch " + String(eMark)); }
}
if (newBtn.type === "shell") { if (newBtn.type === "shell") {
var c = inputShell.getValue(); var c = inputShell.getValue();
if (!c) { inputShell.setError("请输入命令"); isValid=false; } if (!c) { markInvalid(inputShell, "请输入命令"); }
else { inputShell.setError(null); newBtn.cmd = c; newBtn.cmd_b64 = encodeBase64Utf8(c); newBtn.root = true; } else { inputShell.setError(null); newBtn.cmd = c; newBtn.cmd_b64 = encodeBase64Utf8(c); newBtn.root = true; }
} else if (newBtn.type === "app") { } else if (newBtn.type === "app") {
var p = inputPkg.getValue(); var p = inputPkg.getValue();
if (!p) { inputPkg.setError("请输入包名"); isValid=false; } if (!p) { markInvalid(inputPkg, "请输入包名"); }
else { inputPkg.setError(null); newBtn.pkg = p; }// # 保存启动用户ID可选 else { inputPkg.setError(null); newBtn.pkg = p; }// # 保存启动用户ID可选
try { try {
var au = inputAppLaunchUser.getValue(); var au = inputAppLaunchUser.getValue();
@@ -4376,20 +4382,20 @@ try {
} else if (newBtn.type === "broadcast") { } else if (newBtn.type === "broadcast") {
var a = inputAction.getValue(); var a = inputAction.getValue();
if (!a) { inputAction.setError("请输入 Action"); isValid=false; } if (!a) { markInvalid(inputAction, "请输入 Action"); }
else { inputAction.setError(null); newBtn.action = a; } else { inputAction.setError(null); newBtn.action = a; }
var ex = inputExtras.getValue(); var ex = inputExtras.getValue();
if (ex) { if (ex) {
try { newBtn.extras = JSON.parse(ex); inputExtras.setError(null); } try { newBtn.extras = JSON.parse(ex); inputExtras.setError(null); }
catch(e) { inputExtras.setError("JSON 格式错误"); isValid=false; } catch(e) { markInvalid(inputExtras, "JSON 格式错误"); }
} }
} else if (newBtn.type === "shortcut") { } else if (newBtn.type === "shortcut") {
var sp = inputScPkg.getValue(); var sp = inputScPkg.getValue();
var sid = inputScId.getValue(); var sid = inputScId.getValue();
if (!sp) { inputScPkg.setError("请输入包名"); isValid=false; } if (!sp) { markInvalid(inputScPkg, "请先选择快捷方式"); }
else { inputScPkg.setError(null); newBtn.pkg = sp; } else { inputScPkg.setError(null); newBtn.pkg = sp; }
if (!sid) { inputScId.setError("请输入 shortcutId"); isValid=false; } if (!sid) { markInvalid(inputScId, "请先选择快捷方式"); }
else { inputScId.setError(null); newBtn.shortcutId = sid; } else { inputScId.setError(null); newBtn.shortcutId = sid; }
// # 保存:同时保存 intentUri/userId供 JavaScript(startActivityAsUser) 脚本使用(锁定主/分身) // # 保存:同时保存 intentUri/userId供 JavaScript(startActivityAsUser) 脚本使用(锁定主/分身)
try { if (scSelectedIntentUri && scSelectedIntentUri.length > 0) newBtn.intentUri = String(scSelectedIntentUri); } catch(eSIU2) { safeLog(null, 'e', "catch " + String(eSIU2)); } try { if (scSelectedIntentUri && scSelectedIntentUri.length > 0) newBtn.intentUri = String(scSelectedIntentUri); } catch(eSIU2) { safeLog(null, 'e', "catch " + String(eSIU2)); }
@@ -4399,7 +4405,10 @@ try {
// # 保存:快捷方式仅使用 JavaScript 执行(取消 Shell/兜底) // # 保存:快捷方式仅使用 JavaScript 执行(取消 Shell/兜底)
newBtn.shortcutRunMode = "js"; newBtn.shortcutRunMode = "js";
} }
if (!isValid) return; if (!isValid) {
try { self.toast(validationMessage || "请补全必填项"); } catch(eToastInvalid) {}
return;
}

View File

@@ -54,8 +54,8 @@
"size": 22308 "size": 22308
}, },
"th_14_panels.js": { "th_14_panels.js": {
"sha256": "ad0db8e379445b83fd3c86d335b12f084498e1dd876550039a25a9c9d7e12803", "sha256": "312d8b017a7f378abb091919062e26f7076ddf22930bcf1c50a7f5bcbfead76c",
"size": 294962 "size": 295444
}, },
"th_15_extra.js": { "th_15_extra.js": {
"sha256": "11294f672edc0cf85cc662211d73a234301c252f2fa062e8c4b52a2cd3fd8c74", "sha256": "11294f672edc0cf85cc662211d73a234301c252f2fa062e8c4b52a2cd3fd8c74",
@@ -68,5 +68,5 @@
}, },
"keyId": "toolhub-targets-2026-rsa3072", "keyId": "toolhub-targets-2026-rsa3072",
"schema": 2, "schema": 2,
"version": 20260521210640 "version": 20260521211541
} }

View File

@@ -1 +1 @@
X1m1Kq0cC137nSen7CwXEodW4fD29TnwczflnH6hXlmwSfOw8+GaNx/kOqfUWxOwxJF7AlzBBOh8bxpc8iVq2SuPfm4qIz4SwW38YSGzTu0gFBNjO9DH1woN33rt3RhIEN2uYQCIef8W8JbtZkcgjS9sOnC42thixgdzmxZkaZPVnw3siIL9bdKyzKNTiro++A4ZRjf3rSuv4cGJ38kBqOu0w0D/dR7S+/iiSqGL710cEJtWXnfgzFcLzewOACUc7XfWT9k3dJraqc/OuvgIQUIuToIaPzIccxBoSppW7OlYXpc4EdR2vspMjlIjyMsaOMn2B3LxCK+BLqp6l0iCQ8HNkHIKlTzk9Fgzz86USf0DwrW7/SNNYNUkyepHnk13O6Dx9CE3j96Qb4V8nKK4HGvMUAg2MRx5yEvbqmgN2P6ogi55OfAlR2kXdhCeMkrpB0wPKg5AtJ0l/d7uJzKgys1vAaXACN6NzSJVSOyVq16qBgk5yH2sD6M/AQ8ykZdn R14Kh/NL3HE8ntJrip1pAXBuU9e/y+EHQlFOonPb06+VGFNcQVJlph0Cb8wQf6zUMjhmFGsWrW8Bml8PNQUD8ngqOJb8cdpobnfvPYJ/slXIdIV/+5S1i5syJM4Ht06nnSfx3Ck6TWueny8sfPnjH2VEORSX9JGuifOcf9ZTmBEvSoLWA3Dl6S2FS+289vod8Dtpxd9+at4cWcragSxta8GKMqlqp4BQYN8Zt89iELAjkKLELoe2tMtutyLci4uA4dZZemoUDhuM7qBa+M9xGoYwIxXUoogHug8ZpKM6RC3+TDYP0fPeEdnfomqjeIXA3zEsR6mipWcftOhplB2gQ+RazuGhMQsf7yb/gNnoh1y/YXdRuvyPoIqcZwv5w7QNSpzMidg1BB/F7OAK+Np2qLJIJfkYxtw7bsEJtzC/pkts49g8IREVNaGZKkl6Uea6LzLVO0RUxBLQwnBLshgcNrHmGULCrYU4u+Un31Fo+h+zzzAGl8Yqo3bkZTW8IxCJ