fix: 插件API路由统一加面板前缀(/SenSu),解决反代后插件页面空白
This commit is contained in:
@@ -527,7 +527,7 @@ function bar(v) { return v < 60 ? 'bar-green' : (v < 85 ? 'bar-yellow' : 'bar-re
|
||||
function esc(s) { return String(s).replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"'); }
|
||||
|
||||
function pollNodes() {
|
||||
fetch("/sentinel/api/nodes").then(function(r){return r.json()}).then(function(d){
|
||||
fetch((window.SENSU_BASE||"")+"/sentinel/api/nodes").then(function(r){return r.json()}).then(function(d){
|
||||
renderNodes(d.nodes || []);
|
||||
}).catch(function(e){
|
||||
var grid = document.getElementById("sentinel-grid");
|
||||
@@ -579,7 +579,7 @@ function bar(v) { return v < 60 ? 'bar-green' : (v < 85 ? 'bar-yellow' : 'bar-re
|
||||
notes: document.getElementById("edit-notes").value.trim()
|
||||
};
|
||||
if(!data.name||!data.url){ alert("名称和 URL 不能为空"); return; }
|
||||
var resp = await fetch("/sentinel/api/nodes",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(data)});
|
||||
var resp = await fetch((window.SENSU_BASE||"")+"/sentinel/api/nodes",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(data)});
|
||||
var r = await resp.json();
|
||||
if(r.ok){ hideEdit(); loadNodes(); }
|
||||
else alert("保存失败: "+(r.error||""));
|
||||
@@ -587,7 +587,7 @@ function bar(v) { return v < 60 ? 'bar-green' : (v < 85 ? 'bar-yellow' : 'bar-re
|
||||
|
||||
async function deleteNode(id,name){
|
||||
if(!confirm("确认删除节点 '"+name+"'?")) return;
|
||||
await fetch("/sentinel/api/nodes/delete",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:id})});
|
||||
await fetch((window.SENSU_BASE||"")+"/sentinel/api/nodes/delete",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:id})});
|
||||
loadNodes();
|
||||
}
|
||||
|
||||
@@ -597,7 +597,7 @@ function bar(v) { return v < 60 ? 'bar-green' : (v < 85 ? 'bar-yellow' : 'bar-re
|
||||
var el = document.getElementById("test-result");
|
||||
el.innerHTML = '<span style="color:var(--text-dim)">⏳ 测试中...</span>';
|
||||
try {
|
||||
var resp = await fetch("/sentinel/api/nodes/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:url,api_key:key})});
|
||||
var resp = await fetch((window.SENSU_BASE||"")+"/sentinel/api/nodes/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:url,api_key:key})});
|
||||
var r = await resp.json();
|
||||
if(r.ok) el.innerHTML = '<span style="color:var(--success)">✅ 连接成功 — CPU:'+(r.system.cpu.percent||0)+'% MEM:'+(r.system.memory.percent||0)+'%</span>';
|
||||
else el.innerHTML = '<span style="color:var(--error)">❌ '+esc(r.error||'失败')+'</span>';
|
||||
@@ -605,7 +605,7 @@ function bar(v) { return v < 60 ? 'bar-green' : (v < 85 ? 'bar-yellow' : 'bar-re
|
||||
}
|
||||
|
||||
async function loadNodes(){
|
||||
var resp = await fetch("/sentinel/api/nodes");
|
||||
var resp = await fetch((window.SENSU_BASE||"")+"/sentinel/api/nodes");
|
||||
var data = await resp.json();
|
||||
var nodes = data.nodes||[];
|
||||
var list = document.getElementById("node-list");
|
||||
|
||||
Reference in New Issue
Block a user