CommunityAPP_UI/Backstage/notification.html
2025-05-19 17:06:28 +08:00

149 lines
5.3 KiB
HTML

<!DOCTYPE html>
<html lang="zh-Hant">
<head>
<meta charset="UTF-8">
<title>緊急通報</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-4">
<h2 class="mb-4">警即通報</h2>
<form id="alertForm">
<div class="mb-3">
<label for="alert_type" class="form-label">通報類型</label>
<select id="alert_type" name="alert_type" class="form-select" required>
<option value="">-- 請選擇類型 --</option>
<option value="火災">🔥 火災</option>
<option value="地震">🌏 地震</option>
<option value="水災">💧 水災</option>
<option value="可疑人物">🕵️‍♂️ 可疑人物</option>
<option value="公共設施故障">⚠️ 公共設施故障</option>
<option value="其他">❓ 其他</option>
</select>
</div>
<div class="mb-3">
<label for="description" class="form-label">通報說明</label>
<textarea id="description" name="description" class="form-control" rows="4" placeholder="請簡要描述狀況..." required></textarea>
</div>
<button type="submit" class="btn btn-danger">送出通報</button>
</form>
<!-- 通報紀錄表格 -->
<h3 class="mt-5 mb-3">通報紀錄</h3>
<table class="table table-bordered table-hover">
<thead class="table-light">
<tr>
<th>#</th>
<th>通報類型</th>
<th>說明</th>
<th>時間</th>
</tr>
</thead>
<tbody id="alertTableBody"></tbody>
</table>
<!-- 分頁控制 -->
<div class="d-flex justify-content-between align-items-center">
<div><span id="currentPage">1</span> 頁,共 <span id="totalPages">1</span></div>
<div>
<button class="btn btn-sm btn-outline-secondary me-1" id="prevPage">上一頁</button>
<button class="btn btn-sm btn-outline-secondary" id="nextPage">下一頁</button>
</div>
</div>
</div>
<script>
const dataList = [];
const rowsPerPage = 5;
let currentPage = 1;
function seedData() {
const types = ["火災", "地震", "暴力事件", "系統異常", "其他"];
const descriptions = [
"地下室起火冒煙,請盡速避難", "感受到劇烈搖晃,請盡速避難", "住戶報警有打鬥聲,請盡速避難", "監控系統異常重啟,請盡速避難",
"不明人士闖入大門,請盡速避難", "火警偵測器誤報,請盡速避難", "有怪味從機房飄出,請盡速避難", "外部施工導致震動,請盡速避難",
"停車場燈光全滅,請盡速避難", "水塔洩漏造成樓梯積水,請盡速避難"
];
for (let i = 0; i < 10; i++) {
const type = types[i % types.length];
const desc = descriptions[i % descriptions.length];
const time = `2025-05-16 0${i % 10}:0${i + 1}`;
dataList.push({ type, desc, time });
}
}
seedData();
const alertForm = document.getElementById("alertForm");
const tbody = document.getElementById("alertTableBody");
alertForm.addEventListener("submit", function(event) {
event.preventDefault();
const type = document.getElementById("alert_type").value;
const desc = document.getElementById("description").value;
if (!type || !desc) return;
const confirmSend = confirm("確認要送出通報嗎?");
if (confirmSend) {
alert("已送出");
const now = new Date();
const timestamp = now.getFullYear() + "-" +
String(now.getMonth() + 1).padStart(2, '0') + "-" +
String(now.getDate()).padStart(2, '0') + " " +
String(now.getHours()).padStart(2, '0') + ":" +
String(now.getMinutes()).padStart(2, '0');
dataList.push({ type, desc, time: timestamp });
alertForm.reset();
renderTable();
}
});
function renderTable() {
tbody.innerHTML = "";
const start = (currentPage - 1) * rowsPerPage;
const end = start + rowsPerPage;
const pageData = dataList.slice(start, end);
pageData.forEach((data, index) => {
const row = tbody.insertRow();
row.innerHTML = `
<td>${start + index + 1}</td>
<td>${data.type}</td>
<td>${data.desc}</td>
<td>${data.time}</td>
`;
});
const totalPages = Math.ceil(dataList.length / rowsPerPage);
document.getElementById("currentPage").textContent = currentPage;
document.getElementById("totalPages").textContent = totalPages;
document.getElementById("prevPage").disabled = currentPage === 1;
document.getElementById("nextPage").disabled = currentPage >= totalPages;
}
document.getElementById("prevPage").addEventListener("click", () => {
if (currentPage > 1) {
currentPage--;
renderTable();
}
});
document.getElementById("nextPage").addEventListener("click", () => {
const totalPages = Math.ceil(dataList.length / rowsPerPage);
if (currentPage < totalPages) {
currentPage++;
renderTable();
}
});
renderTable();
</script>
</body>
</html>