| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451 |
- let appInsLogLevel = "";
- function setAppInstallLogLevel() {
- const level = logLevel.value;
- fetch("/api/app-install/loglevel", {
- method: "POST",
- headers: {"Content-Type": "application/json"},
- body: JSON.stringify({level})
- })
- .then(async r => {
- if (!r.ok) throw new Error(await r.text());
- appInsLogLevel = level;
- })
- .catch(e => {
- logLevel.value = appInsLogLevel;
- });
- }
- function getAppInstallLevel() {
- fetch("/api/app-install/loglevel")
- .then(async r => {
- if (!r.ok) throw new Error(await r.text());
- return r.json();
- })
- .then(d => {
- appInsLogLevel = d.log_level;
- logLevel.value = d.log_level;
- })
- .catch(e => {
- appInsLogLevel = "";
- logLevel.value = "";
- });
- }
- function downloadAppInstallLogFile(event) {
- const btn = event.currentTarget;
- btn.disabled = true;
- fetch("/api/app-install/logfile")
- .then(async r => {
- if (!r.ok) {
- throw new Error("HTTP " + r.status);
- }
- const disposition = r.headers.get("Content-Disposition");
- let filename = "app-install.log.tar.gz";
- if (disposition) {
- const match = disposition.match(/filename="?([^";]+)"?/);
- if (match) {
- filename = match[1];
- }
- }
- return {
- blob: await r.blob(),
- filename
- };
- })
- .then(({ blob, filename }) => {
- const url = URL.createObjectURL(blob);
- const a = document.createElement("a");
- a.href = url;
- a.download = filename;
- document.body.appendChild(a);
- a.click();
- a.remove();
- setTimeout(() => {
- URL.revokeObjectURL(url);
- }, 1000);
- alert("下载成功");
- })
- .catch(e => {
- console.error("download failed:", e);
- alert("下载失败: " + e.message);
- })
- .finally(() => {
- btn.disabled = false;
- btn.textContent = "下载";
- });
- }
- function restartAppInstallService(event) {
- if (!confirm("确定重启应该管理服务吗?")) {
- return;
- }
- const btn = event.currentTarget;
- btn.disabled = true;
- fetch("/api/app-install/restart", {
- method: "POST"
- })
- .then(async r => {
- if (!r.ok) {
- throw new Error(await r.text());
- }
- logLevel.value = "info";
- appInsLogLevel = logLevel.value;
- disconnectLog();
- connectLog("yfkj-app-install.service", "text1");
- alert("重启成功");
- })
- .catch(e => {
- console.error("restart failed:", e);
- alert("重启失败: " + e.message);
- })
- .finally(() => {
- btn.disabled = false;
- });
- }
- let appInsStatusTimer = null;
- let userAppOperating = false;
- function getAppInstallStatus() {
- if (userAppOperating || userAppUploading) {
- return;
- }
- fetch("/api/app-install/status")
- .then(async r => {
- if (!r.ok) {
- throw new Error("HTTP " + r.status);
- }
- return r.json();
- })
- .then(data => {
- [
- "avar1", "avar2", "avar3", "avar4",
- "bvar1", "bvar2", "bvar3", "bvar4", "bvar5",
- "cvar1", "cvar2", "cvar3", "cvar4", "cvar5"
- ].forEach(id => {
- setText(id, data[id], "page6");
- });
- updateAppInstallButtons(Number(data.state));
- })
- .catch(e => {
- console.error("getAppInstallStatus() failed:", e);
- [
- "avar1", "avar2", "avar3", "avar4",
- "bvar1", "bvar2", "bvar3", "bvar4", "bvar5",
- "cvar1", "cvar2", "cvar3", "cvar4", "cvar5"
- ].forEach(id => {
- setText(id, null, "page6");
- });
- updateAppInstallButtons(-1);
- });
- getAppInstallLevel();
- }
- function startAppInstallStatusRefresh() {
- if (appInsStatusTimer) {
- return;
- }
- getAppInstallStatus();
- appInsStatusTimer = setInterval(() => {
- getAppInstallStatus();
- }, 5000);
- }
- function stopAppInstallStatusRefresh() {
- if (appInsStatusTimer) {
- clearInterval(appInsStatusTimer);
- appInsStatusTimer = null;
- }
- }
- function updateAppInstallButtons(state) {
- switch (state) {
- case 0: // 无安装包, 等待上传
- setBtnStatus("btn1", true, "page6")
- 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", 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", 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;
- }
- }
- let userAppUploading = false;
- function onBtn1Click() {
- if (userAppUploading) {
- return;
- }
- document.getElementById("userAppPkg").click();
- }
- function uploadUserAppPkg(input) {
- let file = input.files[0];
- if (!file) {
- return;
- }
- if (!file.name.toLowerCase().endsWith(".tar.gz")) {
- alert("只允许上传 tar.gz 类型的文件");
- input.value = "";
- return;
- }
- userAppUploading = true;
- setBtnStatus("btn1", false, "page6");
- let formData = new FormData();
- formData.append("file", file);
- let xhr = new XMLHttpRequest();
- xhr.open("POST", "/api/app-install/uploadUserAppPkg", true);
- xhr.timeout = 600000; // 10分钟
- xhr.upload.onprogress = function(e) {
- if (!e.lengthComputable) {
- return;
- }
- let percent = Math.floor(e.loaded * 100 / e.total);
- if (percent >= 100) {
- setText("bvar5", "上传完成,正在处理安装包,请稍候...", "page6");
- } else {
- setText("bvar5", "正在上传 " + file.name + " (" + percent + "%)", "page6");
- }
- };
- xhr.onload = async function() {
- if (xhr.status !== 200) {
- userAppUploading = false;
- input.value = "";
- setText("bvar5", "上传失败: " + xhr.responseText, "page6");
- setBtnStatus("btn1", true, "page6");
- return;
- }
- try {
- await importUserAppPkg("/tmp/" + file.name);
- } finally {
- userAppUploading = false;
- input.value = "";
- setBtnStatus("btn1", true, "page6");
- }
- };
- xhr.onerror = function() {
- userAppUploading = false;
- input.value = "";
- setText("bvar5", "上传失败,请检查网络连接", "page6");
- setBtnStatus("btn1", true, "page6");
- };
- xhr.ontimeout = function() {
- userAppUploading = false;
- input.value = "";
- setText("bvar5", "上传超时,请稍后重新尝试", "page6");
- setBtnStatus("btn1", true, "page6");
- };
- xhr.send(formData);
- }
- async function importUserAppPkg(file) {
- userAppOperating = true; stopAppInstallStatusRefresh(); 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("返回结果异常");
- }
- return true;
- } catch (err) {
- setText("bvar5", "导入过程中发生错误: " + err.message, "page6");
- return false;
- } finally {
- userAppOperating = false; startAppInstallStatusRefresh();
- }
- }
- function onBtn2Click() {
- window.location.href = "/api/app-install/downloadUserAppPkg";
- }
- async function onBtn3Click() {
- if (!confirm("确定删除当前已上传的用户应用安装包吗?")) {
- return;
- }
- userAppOperating = true; stopAppInstallStatusRefresh(); 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");
- } finally {
- userAppOperating = false; startAppInstallStatusRefresh();
- }
- }
- async function onBtn4Click() {
- userAppOperating = true; stopAppInstallStatusRefresh(); 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");
- } finally {
- userAppOperating = false; startAppInstallStatusRefresh();
- }
- }
- async function onBtn5Click() {
- if (!confirm("确定卸载当前已经安装的用户应用吗?")) {
- return;
- }
- userAppOperating = true; stopAppInstallStatusRefresh(); 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");
- } finally {
- userAppOperating = false; startAppInstallStatusRefresh();
- }
- }
- 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");
- }
- function exitPage6() {
- stopAppInstallStatusRefresh()
- disconnectLog();
- }
|