From 6cdc51a249174929b5ac5fb342ec9d96255b76f6 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 23 Mar 2026 13:20:03 +0800 Subject: [PATCH] refactor(point): fold binding into edit action --- web/index.html | 2 +- web/js/points.js | 24 +++++++++++++++++++----- web/styles.css | 14 ++++++++++++++ 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/web/index.html b/web/index.html index 911f67a..1ae822c 100644 --- a/web/index.html +++ b/web/index.html @@ -59,7 +59,7 @@ 质量 设备/角色 更新时间 - + diff --git a/web/js/points.js b/web/js/points.js index 989aa5d..3cb1b4a 100644 --- a/web/js/points.js +++ b/web/js/points.js @@ -225,10 +225,11 @@ export async function loadPoints() { selectCell.appendChild(checkbox); const actionCell = tr.lastElementChild; - const bindBtn = document.createElement("button"); - bindBtn.className = "secondary"; - bindBtn.textContent = "Bind"; - bindBtn.addEventListener("click", (event) => { + actionCell.className = "point-actions"; + const editBtn = document.createElement("button"); + editBtn.className = "secondary"; + editBtn.textContent = "Edit"; + editBtn.addEventListener("click", (event) => { event.stopPropagation(); openPointBinding(point); }); @@ -243,7 +244,7 @@ export async function loadPoints() { }); }); - actionCell.append(bindBtn, deleteBtn); + actionCell.append(editBtn, deleteBtn); dom.pointList.appendChild(tr); state.pointEls.set(point.id, { @@ -266,6 +267,18 @@ export async function loadPoints() { export function openPointBinding(point) { dom.bindingPointId.value = point.id; dom.bindingPointName.value = point.name || ""; + dom.bindingPointName.disabled = false; + const modalTitle = dom.pointBindingModal.querySelector("h3"); + if (modalTitle) { + modalTitle.textContent = "Edit Point"; + } + if (dom.clearPointBindingBtn) { + dom.clearPointBindingBtn.textContent = "Clear Equipment"; + } + const saveButton = dom.pointBindingForm?.querySelector('button[type="submit"]'); + if (saveButton) { + saveButton.textContent = "Save"; + } renderBindingEquipmentOptions(point.equipment_id || ""); dom.bindingSignalRole.innerHTML = renderRoleOptions(point.signal_role || ""); dom.pointBindingModal.classList.remove("hidden"); @@ -277,6 +290,7 @@ export async function savePointBinding(event) { await apiFetch(`/api/point/${dom.bindingPointId.value}`, { method: "PUT", body: JSON.stringify({ + name: dom.bindingPointName.value.trim() || null, equipment_id: dom.bindingEquipmentId.value || null, signal_role: dom.bindingSignalRole.value || null, }), diff --git a/web/styles.css b/web/styles.css index a3d0141..d40ccbe 100644 --- a/web/styles.css +++ b/web/styles.css @@ -300,6 +300,20 @@ button.danger:hover { background: var(--danger-hover); } white-space: nowrap; } +.data-table td.point-actions { + overflow: visible; + text-overflow: clip; + white-space: nowrap; +} + +.point-actions { + text-align: right; +} + +.point-actions button + button { + margin-left: 6px; +} + .data-table tbody tr { transition: background 0.1s; }