diff --git a/miniapp/assets/measurements.js b/miniapp/assets/measurements.js index 61ba516..af7ea17 100644 --- a/miniapp/assets/measurements.js +++ b/miniapp/assets/measurements.js @@ -369,26 +369,94 @@ const Measurements = (function () { /* ===================== Пикер клиента ===================== */ function renderClientPicker() { + // Разбивает строку адреса на поля (локальная копия splitAddress из clients.js) + function _splitAddr(s) { + if (!s) return { city: "Санкт-Петербург", street: "", house: "", apt: "", entrance: "", floor: "" }; + s = s.trim(); + const grab = (re) => { const m = s.match(re); if (m) { s = s.replace(m[0], ""); return m[1]; } return ""; }; + const floor = grab(/,\s*этаж\s+([^\s,]+)/i); + const entrance = grab(/,\s*подъезд\s+([^\s,]+)/i); + const apt = grab(/,\s*кв\.?\s*([^\s,]+)/i); + const house = grab(/,\s*д\.?\s*([^\s,]+)/i); + s = s.replace(/,$/, "").trim(); + const parts = s.split(",").map(p => p.trim()).filter(Boolean); + let city = "", street = ""; + if (parts.length >= 2) { city = parts[0]; street = parts.slice(1).join(", "); } + else if (parts.length === 1) { city = parts[0]; } + if (!city) city = "Санкт-Петербург"; + return { city, street, house, apt, entrance, floor }; + } + + const initParts = _splitAddr(state.address || ""); + const wrap = el(`
- + Адрес объекта +
+ + + + + + +
+
`); const choiceRow = wrap.querySelector("#pcChoiceRow"); - const addrInput = wrap.querySelector("#pcAddr"); - addrInput.addEventListener("input", e => { - state.address = e.target.value; + function readAndSaveAddr() { + const city = (wrap.querySelector("#pcCity").value || "").trim(); + const street = (wrap.querySelector("#pcStreet").value || "").trim(); + const house = (wrap.querySelector("#pcHouse").value || "").trim(); + const apt = (wrap.querySelector("#pcApt").value || "").trim(); + const entrance = (wrap.querySelector("#pcEntrance").value || "").trim(); + const floor = (wrap.querySelector("#pcFloor").value || "").trim(); + state.address = [ + city, street, + house ? "д. " + house : "", + apt ? "кв. " + apt : "", + entrance ? "подъезд " + entrance : "", + floor ? "этаж " + floor : "", + ].filter(Boolean).join(", "); saveState(); + } + + function fillAddrFields(address) { + const p = _splitAddr(address || ""); + wrap.querySelector("#pcCity").value = p.city; + wrap.querySelector("#pcStreet").value = p.street; + wrap.querySelector("#pcHouse").value = p.house; + wrap.querySelector("#pcApt").value = p.apt; + wrap.querySelector("#pcEntrance").value = p.entrance; + wrap.querySelector("#pcFloor").value = p.floor; + readAndSaveAddr(); + } + + ["#pcCity","#pcStreet","#pcHouse","#pcApt","#pcEntrance","#pcFloor"].forEach(sel => { + wrap.querySelector(sel).addEventListener("input", readAndSaveAddr); }); function refresh() { @@ -407,10 +475,8 @@ const Measurements = (function () { `); card.querySelector(".picker-change-btn").addEventListener("click", openOverlay); choiceRow.appendChild(card); - if (!addrInput.value && pickedClient.address) { - addrInput.value = pickedClient.address; - state.address = pickedClient.address; - saveState(); + if (!state.address && pickedClient.address) { + fillAddrFields(pickedClient.address); } } else { const empty = el(` diff --git a/miniapp/index.html b/miniapp/index.html index 9950fd7..83dac2b 100644 --- a/miniapp/index.html +++ b/miniapp/index.html @@ -12,14 +12,14 @@ - - + +
- +
- - - - - - - - - - + + + + + + + + + +