let cameraLogLevel = ""; function setCameraLogLevel() { const level = logLevel.value; fetch("/api/camera/loglevel", { method: "POST", headers: {"Content-Type": "application/json"}, body: JSON.stringify({level}) }) .then(async r => { if (!r.ok) throw new Error(await r.text()); cameraLogLevel = level; }) .catch(e => { logLevel.value = cameraLogLevel; }); } function getCameraLogLevel() { fetch("/api/camera/loglevel") .then(async r => { if (!r.ok) throw new Error(await r.text()); return r.json(); }) .then(d => { cameraLogLevel = d.log_level; logLevel.value = d.log_level; }) .catch(e => { cameraLogLevel = ""; logLevel.value = ""; }); } function downloadCameraLogFile() { const btn = event.currentTarget; btn.disabled = true; fetch("/api/camera/logfile") .then(async r => { if (!r.ok) { throw new Error("HTTP " + r.status); } const disposition = r.headers.get("Content-Disposition"); let filename = "camera.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 restartCameraService() { if (!confirm("确定重启相机服务吗?")) { return; } const btn = event.currentTarget; btn.disabled = true; fetch("/api/camera/restart", { method: "POST" }) .then(async r => { if (!r.ok) { throw new Error(await r.text()); } logLevel.value = "info"; cameraLogLevel = logLevel.value; disconnectLog(); connectLog("yfkj-camera-capture.service", "text1"); alert("重启成功"); }) .catch(e => { console.error("restart failed:", e); alert("重启失败: " + e.message); }) .finally(() => { btn.disabled = false; }); } function getCameraStatus() { setBtnStatus("btn1", false); setBtnStatus("btn2", false); setBtnStatus("btn3", false); setBtnStatus("btn4", false); fetch("/api/camera/status") .then(async r => { if (!r.ok) { throw new Error("HTTP " + r.status); } return r.json(); }) .then(data => { ["avar1","avar2","avar3","avar4","avar5", "avar6"] .forEach(id => setText(id, data[id])); }) .catch(e => { console.error("getCameraStatus() failed:", e); ["avar1","avar2","avar3","avar4","avar5", "avar6"] .forEach(id => setText(id, null)); }) .finally(() => { setBtnStatus("btn1", true); setBtnStatus("btn2", true); setBtnStatus("btn3", true); setBtnStatus("btn4", true); }); getCameraLogLevel(); } function cameraPower(enable) { fetch("/api/camera/gpio22power", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ enable: enable }) }) .then(async r => { if (!r.ok) { throw new Error(await r.text()); } return r.json(); }) .then(data => { if (data.ok) { setText("avar5", enable === "true" ? "🟢打开" : null); alert(enable === "true" ? "上电成功" : "断电成功"); } else { // 目前后端不会这么返回,避免以后修改代码 alert("操作失败"); } }) .catch(e => { alert("操作失败: " + e.message); }); } function cameraPing() { fetch("/api/camera/pingGigeCamera", {method:"POST"}) .then(r => r.json()) .then(data => { setText("avar6", data.avar6); alert(data.avar6 === "🟢正常" ? "网口相机Ping测试成功" : "网口相机Ping测试失败"); }) .catch(() => { setText("avar6", null); alert("网口相机Ping测试失败"); }); } function initPage5() { getCameraStatus(); connectLog("yfkj-camera-capture.service", "text1"); } function exitPage5() { disconnectLog(); }