function pad(n) {
|
return String(n).padStart(2, '0');
|
}
|
|
function formatNow() {
|
const d = new Date();
|
return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;
|
}
|
|
function buildDefaultGpsPayload() {
|
return {
|
msgType: 'com.hikvision.open.transparent',
|
msgSeq: String(Date.now()),
|
createDate: Date.now(),
|
sn: 'F12345678',
|
data: {
|
gpsTime: formatNow(),
|
longitude: 120.153245,
|
latitude: 30.267421,
|
speed: 60.5,
|
direction: 180,
|
elevation: 15.2,
|
status: 'A',
|
},
|
};
|
}
|
|
function initTabs() {
|
const tabs = document.querySelectorAll('.tab');
|
const panels = document.querySelectorAll('.tab-panel');
|
|
tabs.forEach((tab) => {
|
tab.addEventListener('click', () => {
|
const name = tab.dataset.tab;
|
|
tabs.forEach((t) => {
|
const active = t === tab;
|
t.classList.toggle('active', active);
|
t.setAttribute('aria-selected', active ? 'true' : 'false');
|
});
|
|
panels.forEach((panel) => {
|
const active = panel.id === `panel-${name}`;
|
panel.classList.toggle('active', active);
|
panel.hidden = !active;
|
});
|
});
|
});
|
}
|
|
async function loadDefaults() {
|
const res = await fetch('/api/defaults');
|
const data = await res.json();
|
document.getElementById('targetUrl').value = data.targetUrl;
|
document.getElementById('clientId').value = data.clientId;
|
document.getElementById('secret').value = data.secret;
|
document.getElementById('uploadTime').value = formatNow();
|
|
if (data.gpsTargetUrl) {
|
document.getElementById('gpsTargetUrl').value = data.gpsTargetUrl;
|
}
|
}
|
|
function initWeightTab() {
|
document.getElementById('nowBtn').addEventListener('click', () => {
|
document.getElementById('uploadTime').value = formatNow();
|
});
|
|
document.getElementById('reportForm').addEventListener('submit', async (e) => {
|
e.preventDefault();
|
const submitBtn = document.getElementById('submitBtn');
|
const result = document.getElementById('result');
|
submitBtn.disabled = true;
|
result.textContent = '上报中...';
|
|
const payload = {
|
targetUrl: document.getElementById('targetUrl').value.trim(),
|
clientId: document.getElementById('clientId').value.trim(),
|
secret: document.getElementById('secret').value.trim(),
|
deviceNo: document.getElementById('deviceNo').value.trim(),
|
uploadTime: document.getElementById('uploadTime').value.trim(),
|
garbageType: document.getElementById('garbageType').value,
|
garbageWeight: document.getElementById('garbageWeight').value.trim(),
|
others: document.getElementById('others').value.trim(),
|
};
|
|
try {
|
const res = await fetch('/api/send', {
|
method: 'POST',
|
headers: { 'Content-Type': 'application/json' },
|
body: JSON.stringify(payload),
|
});
|
const data = await res.json();
|
result.textContent = JSON.stringify(data, null, 2);
|
} catch (err) {
|
result.textContent = JSON.stringify({ ok: false, msg: err.message }, null, 2);
|
} finally {
|
submitBtn.disabled = false;
|
}
|
});
|
}
|
|
function initGpsTab() {
|
const gpsPayload = document.getElementById('gpsPayload');
|
gpsPayload.value = JSON.stringify(buildDefaultGpsPayload(), null, 2);
|
|
document.getElementById('gpsSendBtn').addEventListener('click', async () => {
|
const sendBtn = document.getElementById('gpsSendBtn');
|
const result = document.getElementById('gpsResult');
|
const targetUrl = document.getElementById('gpsTargetUrl').value.trim();
|
const raw = gpsPayload.value.trim();
|
|
if (!targetUrl) {
|
result.textContent = JSON.stringify({ ok: false, msg: '请填写目标地址' }, null, 2);
|
return;
|
}
|
|
let body;
|
try {
|
body = JSON.parse(raw);
|
} catch (err) {
|
result.textContent = JSON.stringify({ ok: false, msg: `JSON 格式错误: ${err.message}` }, null, 2);
|
return;
|
}
|
|
sendBtn.disabled = true;
|
result.textContent = '发送中...';
|
|
try {
|
const res = await fetch('/api/send-gps', {
|
method: 'POST',
|
headers: { 'Content-Type': 'application/json' },
|
body: JSON.stringify({ targetUrl, payload: body }),
|
});
|
const data = await res.json();
|
|
result.textContent = JSON.stringify(data, null, 2);
|
} catch (err) {
|
result.textContent = JSON.stringify({ ok: false, msg: err.message }, null, 2);
|
} finally {
|
sendBtn.disabled = false;
|
}
|
});
|
}
|
|
initTabs();
|
initWeightTab();
|
initGpsTab();
|
|
loadDefaults().catch((err) => {
|
document.getElementById('result').textContent = `加载默认配置失败: ${err.message}`;
|
});
|