v5: исправлен доступ к данным — через имена колонок вместо индексов

This commit is contained in:
Dauren777 2026-06-24 07:40:39 +00:00
parent 951defe995
commit 854a459915

View File

@ -183,13 +183,16 @@ function initHierarchy(data) {
const obIx = dataColumns.indexOf('oblast'); const obIx = dataColumns.indexOf('oblast');
const raIx = dataColumns.indexOf('rayon'); const raIx = dataColumns.indexOf('rayon');
const okIx = dataColumns.indexOf('okrug'); const okIx = dataColumns.indexOf('okrug');
const obH = obIx !== -1 ? allData.columns[obIx] : null;
const raH = raIx !== -1 ? allData.columns[raIx] : null;
const okH = okIx !== -1 ? allData.columns[okIx] : null;
hierarchy = { oblasts: {}, rayons: {}, okrugs: {} }; hierarchy = { oblasts: {}, rayons: {}, okrugs: {} };
data.forEach(row => { data.forEach(row => {
const ob = obIx !== -1 && row[obIx] ? String(row[obIx]).trim() : ''; const ob = obH ? String(row[obH] || '').trim() : '';
const ra = raIx !== -1 && row[raIx] ? String(row[raIx]).trim() : ''; const ra = raH ? String(row[raH] || '').trim() : '';
const ok = okIx !== -1 && row[okIx] ? String(row[okIx]).trim() : ''; const ok = okH ? String(row[okH] || '').trim() : '';
if (ob && !hierarchy.oblasts[ob]) hierarchy.oblasts[ob] = new Set(); if (ob && !hierarchy.oblasts[ob]) hierarchy.oblasts[ob] = new Set();
if (ob && ra) { if (ob && ra) {
@ -242,13 +245,16 @@ function applyFilter() {
const obIx = dataColumns.indexOf('oblast'); const obIx = dataColumns.indexOf('oblast');
const raIx = dataColumns.indexOf('rayon'); const raIx = dataColumns.indexOf('rayon');
const okIx = dataColumns.indexOf('okrug'); const okIx = dataColumns.indexOf('okrug');
const obH = obIx !== -1 ? allData.columns[obIx] : null;
const raH = raIx !== -1 ? allData.columns[raIx] : null;
const okH = okIx !== -1 ? allData.columns[okIx] : null;
let data = allData; let data = allData;
if (ob || ra || ok) { if (ob || ra || ok) {
data = allData.filter(row => { data = allData.filter(row => {
const rOb = obIx !== -1 ? String(row[obIx] || '').trim() : ''; const rOb = obH ? String(row[obH] || '').trim() : '';
const rRa = raIx !== -1 ? String(row[raIx] || '').trim() : ''; const rRa = raH ? String(row[raH] || '').trim() : '';
const rOk = okIx !== -1 ? String(row[okIx] || '').trim() : ''; const rOk = okH ? String(row[okH] || '').trim() : '';
if (ob && rOb !== ob) return false; if (ob && rOb !== ob) return false;
if (ra && rRa !== ra) return false; if (ra && rRa !== ra) return false;
if (ok && rOk !== ok) return false; if (ok && rOk !== ok) return false;
@ -287,10 +293,12 @@ function renderTable() {
// Group by district // Group by district
const raIx = dataColumns.indexOf('rayon'); const raIx = dataColumns.indexOf('rayon');
const okIx = dataColumns.indexOf('okrug'); const okIx = dataColumns.indexOf('okrug');
const raH = raIx !== -1 ? allData.columns[raIx] : null;
const okH = okIx !== -1 ? allData.columns[okIx] : null;
const groups = {}; const groups = {};
filteredData.forEach(row => { filteredData.forEach(row => {
const ra = raIx !== -1 ? String(row[raIx] || '').trim() : ''; const ra = raH ? String(row[raH] || '').trim() : '';
const ok = okIx !== -1 ? String(row[okIx] || '').trim() : ''; const ok = okH ? String(row[okH] || '').trim() : '';
const key = ra + ' → ' + ok; const key = ra + ' → ' + ok;
if (!groups[key]) groups[key] = []; if (!groups[key]) groups[key] = [];
groups[key].push(row); groups[key].push(row);
@ -345,11 +353,13 @@ function renderTable() {
function toggleGroup(groupName) { function toggleGroup(groupName) {
const raIx = dataColumns.indexOf('rayon'); const raIx = dataColumns.indexOf('rayon');
const okIx = dataColumns.indexOf('okrug'); const okIx = dataColumns.indexOf('okrug');
const raH = raIx !== -1 ? allData.columns[raIx] : null;
const okH = okIx !== -1 ? allData.columns[okIx] : null;
const parts = groupName.split(' → '); const parts = groupName.split(' → ');
const ra = parts[0], ok = parts[1]; const ra = parts[0], ok = parts[1];
const rows = filteredData.filter(r => { const rows = filteredData.filter(r => {
const rRa = raIx !== -1 ? String(r[raIx] || '').trim() : ''; const rRa = raH ? String(r[raH] || '').trim() : '';
const rOk = okIx !== -1 ? String(r[okIx] || '').trim() : ''; const rOk = okH ? String(r[okH] || '').trim() : '';
return rRa === ra && rOk === ok; return rRa === ra && rOk === ok;
}); });
const allMarked = rows.every(r => markedIds.has(r._id)); const allMarked = rows.every(r => markedIds.has(r._id));
@ -403,12 +413,15 @@ function fillOblast() {
if (katoIx === -1) { alert('Не найдена колонка КАТО'); return; } if (katoIx === -1) { alert('Не найдена колонка КАТО'); return; }
if (obIx === -1) { alert('Не найдена колонка области. Добавьте колонку "Область" в файл.'); return; } if (obIx === -1) { alert('Не найдена колонка области. Добавьте колонку "Область" в файл.'); return; }
const katoHeader = allData.columns[katoIx];
const obHeader = allData.columns[obIx];
let filled = 0; let filled = 0;
allData.forEach(row => { allData.forEach(row => {
const kato = String(row[dataColumns[katoIx]] || '').trim(); const kato = String(row[katoHeader] || '').trim();
const code = kato.length >= 2 ? kato.substring(0, 2) : ''; const code = kato.length >= 2 ? kato.substring(0, 2) : '';
if (code && KATO_REGIONS[code] && !String(row[dataColumns[obIx]] || '').trim()) { if (code && KATO_REGIONS[code] && !String(row[obHeader] || '').trim()) {
row[dataColumns[obIx]] = KATO_REGIONS[code]; row[obHeader] = KATO_REGIONS[code];
filled++; filled++;
} }
}); });