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;
}