|
|
@@ -114,7 +114,12 @@ function restartAppInstallService(event) {
|
|
|
}
|
|
|
|
|
|
let appInsStatusTimer = null;
|
|
|
+let userAppOperating = false;
|
|
|
function getAppInstallStatus() {
|
|
|
+ if (userAppOperating) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
fetch("/api/app-install/status")
|
|
|
.then(async r => {
|
|
|
if (!r.ok) {
|
|
|
@@ -177,24 +182,40 @@ function updateAppInstallButtons(state) {
|
|
|
setBtnStatus("btn2", false, "page6")
|
|
|
setBtnStatus("btn3", false, "page6")
|
|
|
setBtnStatus("btn4", false, "page6")
|
|
|
+ setBtnStatus("btn5", false, "page6")
|
|
|
+ setBtnStatus("btn6", false, "page6")
|
|
|
break;
|
|
|
case 1: // 有安装包, 未安装时
|
|
|
setBtnStatus("btn1", false, "page6")
|
|
|
setBtnStatus("btn2", true, "page6")
|
|
|
setBtnStatus("btn3", true, "page6")
|
|
|
- setBtnStatus("btn4", false, "page6")
|
|
|
+ setBtnStatus("btn4", true, "page6")
|
|
|
+ setBtnStatus("btn5", false, "page6")
|
|
|
+ setBtnStatus("btn6", false, "page6")
|
|
|
break;
|
|
|
case 2: // 有安装包, 已安装时
|
|
|
setBtnStatus("btn1", false, "page6")
|
|
|
+ setBtnStatus("btn2", true, "page6")
|
|
|
+ setBtnStatus("btn3", false, "page6")
|
|
|
+ setBtnStatus("btn4", false, "page6")
|
|
|
+ setBtnStatus("btn5", true, "page6")
|
|
|
+ setBtnStatus("btn6", true, "page6")
|
|
|
+ break;
|
|
|
+ case 4: // 禁用所有, 特殊操作
|
|
|
+ setBtnStatus("btn1", false, "page6")
|
|
|
setBtnStatus("btn2", false, "page6")
|
|
|
setBtnStatus("btn3", false, "page6")
|
|
|
- setBtnStatus("btn4", true, "page6")
|
|
|
+ setBtnStatus("btn4", false, "page6")
|
|
|
+ setBtnStatus("btn5", false, "page6")
|
|
|
+ setBtnStatus("btn6", false, "page6")
|
|
|
break;
|
|
|
default:
|
|
|
setBtnStatus("btn1", true, "page6")
|
|
|
setBtnStatus("btn2", true, "page6")
|
|
|
setBtnStatus("btn3", true, "page6")
|
|
|
setBtnStatus("btn4", true, "page6")
|
|
|
+ setBtnStatus("btn5", true, "page6")
|
|
|
+ setBtnStatus("btn6", true, "page6")
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
@@ -205,10 +226,10 @@ function onBtn1Click() {
|
|
|
if (userAppUploading) {
|
|
|
return;
|
|
|
}
|
|
|
- document.getElementById("userAppFile").click();
|
|
|
+ document.getElementById("userAppPkg").click();
|
|
|
}
|
|
|
|
|
|
-function uploadUserAppFile(input) {
|
|
|
+function uploadUserAppPkg(input) {
|
|
|
let file = input.files[0];
|
|
|
|
|
|
if (!file) {
|
|
|
@@ -227,7 +248,7 @@ function uploadUserAppFile(input) {
|
|
|
formData.append("file", file);
|
|
|
|
|
|
let xhr = new XMLHttpRequest();
|
|
|
- xhr.open("POST", "/api/app-install/uploadUserAPP", true);
|
|
|
+ xhr.open("POST", "/api/app-install/uploadUserAppPkg", true);
|
|
|
xhr.timeout = 600000; // 10分钟
|
|
|
|
|
|
xhr.upload.onprogress = function(e) {
|
|
|
@@ -239,16 +260,17 @@ function uploadUserAppFile(input) {
|
|
|
setText("bvar5", "正在上传 " + file.name + " (" + percent + "%)", "page6");
|
|
|
};
|
|
|
|
|
|
- xhr.onload = function() {
|
|
|
- userAppUploading = false;
|
|
|
- input.value = "";
|
|
|
-
|
|
|
+ xhr.onload = async function() {
|
|
|
if (xhr.status !== 200) {
|
|
|
+ userAppUploading = false;
|
|
|
+ input.value = "";
|
|
|
setText("bvar5", "上传失败: " + xhr.responseText, "page6");
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- setText("bvar5", "上传完成,等待下一步处理", "page6");
|
|
|
+ await importUserAppPkg("/tmp/" + file.name);
|
|
|
+ userAppUploading = false;
|
|
|
+ input.value = "";
|
|
|
};
|
|
|
|
|
|
xhr.onerror = function() {
|
|
|
@@ -268,6 +290,144 @@ function uploadUserAppFile(input) {
|
|
|
xhr.send(formData);
|
|
|
}
|
|
|
|
|
|
+async function importUserAppPkg(file) {
|
|
|
+ userAppOperating = true; updateAppInstallButtons(4);
|
|
|
+ setText("bvar5", "正在导入当前上传的用户应用安装包,请稍候...", "page6");
|
|
|
+
|
|
|
+ try {
|
|
|
+ let res = await fetch("/api/app-install/importUserAppPkg", {
|
|
|
+ method:"POST",
|
|
|
+ headers:{"Content-Type":"application/json"},
|
|
|
+ body:JSON.stringify({file:file})
|
|
|
+ });
|
|
|
+
|
|
|
+ if (!res.ok) {
|
|
|
+ throw new Error(await res.text());
|
|
|
+ }
|
|
|
+
|
|
|
+ let data = await res.json();
|
|
|
+ if (data.result !== "success") {
|
|
|
+ throw new Error("返回结果异常");
|
|
|
+ }
|
|
|
+
|
|
|
+ userAppOperating = false;
|
|
|
+ return true;
|
|
|
+ } catch (err) {
|
|
|
+ setText("bvar5", "导入过程中发生错误: " + err.message, "page6");
|
|
|
+ userAppOperating = false;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function onBtn2Click() {
|
|
|
+ window.location.href = "/api/app-install/downloadUserAppPkg";
|
|
|
+}
|
|
|
+
|
|
|
+async function onBtn3Click() {
|
|
|
+ if (!confirm("确定删除当前已上传的用户应用安装包吗?")) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ userAppOperating = true; updateAppInstallButtons(4);
|
|
|
+ setText("bvar5", "正在删除当前已上传的用户应用安装包,请稍候...", "page6");
|
|
|
+
|
|
|
+ try {
|
|
|
+ let res = await fetch("/api/app-install/removeUserAppPkg", {
|
|
|
+ method:"POST"
|
|
|
+ });
|
|
|
+
|
|
|
+ if (!res.ok) {
|
|
|
+ throw new Error(await res.text());
|
|
|
+ }
|
|
|
+
|
|
|
+ let data = await res.json();
|
|
|
+ if (data.result !== "success") {
|
|
|
+ throw new Error("返回结果异常");
|
|
|
+ }
|
|
|
+ } catch (err) {
|
|
|
+ setText("bvar5", "删除过程中发生错误: " + err.message, "page6");
|
|
|
+ }
|
|
|
+
|
|
|
+ userAppOperating = false;
|
|
|
+}
|
|
|
+
|
|
|
+async function onBtn4Click() {
|
|
|
+ userAppOperating = true; updateAppInstallButtons(4);
|
|
|
+ setText("bvar5", "正在使用当前安装包安装用户应用,请稍候...", "page6");
|
|
|
+
|
|
|
+ try {
|
|
|
+ let res = await fetch("/api/app-install/installUserApp", {
|
|
|
+ method:"POST"
|
|
|
+ });
|
|
|
+
|
|
|
+ if (!res.ok) {
|
|
|
+ throw new Error(await res.text());
|
|
|
+ }
|
|
|
+
|
|
|
+ let data = await res.json();
|
|
|
+ if (data.result !== "success") {
|
|
|
+ throw new Error("返回结果异常");
|
|
|
+ }
|
|
|
+ } catch (err) {
|
|
|
+ setText("bvar5", "安装过程中发生错误: " + err.message, "page6");
|
|
|
+ }
|
|
|
+
|
|
|
+ userAppOperating = false;
|
|
|
+}
|
|
|
+
|
|
|
+async function onBtn5Click() {
|
|
|
+ if (!confirm("确定卸载当前已经安装的用户应用吗?")) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ userAppOperating = true; updateAppInstallButtons(4);
|
|
|
+ setText("bvar5", "正在卸载当前已经安装的用户应用,请稍候...", "page6");
|
|
|
+
|
|
|
+ try {
|
|
|
+ let res = await fetch("/api/app-install/uninstallUserApp", {
|
|
|
+ method:"POST"
|
|
|
+ });
|
|
|
+
|
|
|
+ if (!res.ok) {
|
|
|
+ throw new Error(await res.text());
|
|
|
+ }
|
|
|
+
|
|
|
+ let data = await res.json();
|
|
|
+ if (data.result !== "success") {
|
|
|
+ throw new Error("返回结果异常");
|
|
|
+ }
|
|
|
+ } catch (err) {
|
|
|
+ setText("bvar5", "卸载过程中发生错误: " + err.message, "page6");
|
|
|
+ }
|
|
|
+
|
|
|
+ userAppOperating = false;
|
|
|
+}
|
|
|
+
|
|
|
+function onBtn6Click() {
|
|
|
+ if (!confirm("确定重启当前已经安装的用户应用吗?")) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ setBtnStatus("btn6", false, "page6")
|
|
|
+
|
|
|
+ fetch("/api/user-app/restart", {
|
|
|
+ method: "POST"
|
|
|
+ })
|
|
|
+ .then(async r => {
|
|
|
+ if (!r.ok) {
|
|
|
+ throw new Error(await r.text());
|
|
|
+ }
|
|
|
+ alert("重启成功");
|
|
|
+ })
|
|
|
+ .catch(e => {
|
|
|
+ console.error("restart failed:", e);
|
|
|
+ alert("重启失败: " + e.message);
|
|
|
+ })
|
|
|
+ .finally(() => {
|
|
|
+ setBtnStatus("btn6", true, "page6")
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
function initPage6() {
|
|
|
startAppInstallStatusRefresh()
|
|
|
connectLog("yfkj-app-install.service", "text1");
|