From 195e61d8105640a6ec427e9789747a067b225f7a Mon Sep 17 00:00:00 2001 From: 7015725 Date: Fri, 22 May 2026 05:15:54 +0800 Subject: [PATCH] fix button editor validation feedback --- code/th_14_panels.js | 23 ++++++++++++++++------- manifest.json | 6 +++--- manifest.sig | 2 +- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/code/th_14_panels.js b/code/th_14_panels.js index 9e14c03..fdce2a4 100644 --- a/code/th_14_panels.js +++ b/code/th_14_panels.js @@ -4356,14 +4356,20 @@ shortcutWrap.addView(scBody); delete newBtn.launchUserId; 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") { 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 if (newBtn.type === "app") { var p = inputPkg.getValue(); - if (!p) { inputPkg.setError("请输入包名"); isValid=false; } + if (!p) { markInvalid(inputPkg, "请输入包名"); } else { inputPkg.setError(null); newBtn.pkg = p; }// # 保存:启动用户ID(可选) try { var au = inputAppLaunchUser.getValue(); @@ -4376,20 +4382,20 @@ try { } else if (newBtn.type === "broadcast") { var a = inputAction.getValue(); - if (!a) { inputAction.setError("请输入 Action"); isValid=false; } + if (!a) { markInvalid(inputAction, "请输入 Action"); } else { inputAction.setError(null); newBtn.action = a; } var ex = inputExtras.getValue(); if (ex) { 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") { var sp = inputScPkg.getValue(); var sid = inputScId.getValue(); - if (!sp) { inputScPkg.setError("请输入包名"); isValid=false; } + if (!sp) { markInvalid(inputScPkg, "请先选择快捷方式"); } 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; } // # 保存:同时保存 intentUri/userId,供 JavaScript(startActivityAsUser) 脚本使用(锁定主/分身) 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/兜底) newBtn.shortcutRunMode = "js"; } - if (!isValid) return; + if (!isValid) { + try { self.toast(validationMessage || "请补全必填项"); } catch(eToastInvalid) {} + return; + } diff --git a/manifest.json b/manifest.json index 4cdc27a..87acacc 100644 --- a/manifest.json +++ b/manifest.json @@ -54,8 +54,8 @@ "size": 22308 }, "th_14_panels.js": { - "sha256": "ad0db8e379445b83fd3c86d335b12f084498e1dd876550039a25a9c9d7e12803", - "size": 294962 + "sha256": "312d8b017a7f378abb091919062e26f7076ddf22930bcf1c50a7f5bcbfead76c", + "size": 295444 }, "th_15_extra.js": { "sha256": "11294f672edc0cf85cc662211d73a234301c252f2fa062e8c4b52a2cd3fd8c74", @@ -68,5 +68,5 @@ }, "keyId": "toolhub-targets-2026-rsa3072", "schema": 2, - "version": 20260521210640 + "version": 20260521211541 } diff --git a/manifest.sig b/manifest.sig index f6d9144..9f27136 100644 --- a/manifest.sig +++ b/manifest.sig @@ -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