sozday-grafik-zakupa-produkt-2/script.js

110 lines
4.3 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

document.addEventListener('DOMContentLoaded', () => {
fetch('data.json')
.then(r => r.json())
.then(data => {
renderMenu(data.menu);
renderShopping(data.shopping);
})
.catch(err => console.error('Ошибка загрузки данных:', err));
});
// ---- Меню -------------------------------------------------
function renderMenu(menu) {
const tbody = document.querySelector('#menu-table tbody');
menu.forEach(item => {
const tr = document.createElement('tr');
const tdDay = document.createElement('td');
tdDay.textContent = item.day;
const tdBreak = document.createElement('td');
tdBreak.textContent = `${item.breakfast} (${item.breakfast_kcal} ккал)`;
const tdLunch = document.createElement('td');
tdLunch.textContent = `${item.lunch} (${item.lunch_kcal} ккал)`;
const tdDinner = document.createElement('td');
tdDinner.textContent = `${item.dinner} (${item.dinner_kcal} ккал)`;
const tdSnack = document.createElement('td');
tdSnack.textContent = `${item.snack || ''} (${item.snack_kcal || 0} ккал)`;
const tdCoffee = document.createElement('td');
tdCoffee.textContent = `${item.coffee || ''} (${item.coffee_kcal || 0} ккал)`;
const tdTea = document.createElement('td');
tdTea.textContent = `${item.tea || ''} (${item.tea_kcal || 0} ккал)`;
const tdTotal = document.createElement('td');
const totalKcal = (item.breakfast_kcal || 0) + (item.lunch_kcal || 0) + (item.dinner_kcal || 0) + (item.snack_kcal || 0) + (item.coffee_kcal || 0) + (item.tea_kcal || 0);
tdTotal.textContent = `${totalKcal} ккал`;
const tdGrams = document.createElement('td');
tdGrams.textContent = `${item.grams || ''} г`;
tr.append(tdDay, tdBreak, tdLunch, tdDinner, tdSnack, tdCoffee, tdTea, tdTotal, tdGrams);
tbody.appendChild(tr);
});
}
// ---- План покупок ------------------------------------------
function renderShopping(weeks) {
// сохраняем данные для экспорта
window._shoppingData = weeks;
const container = document.getElementById('weeks');
weeks.forEach(week => {
const weekDiv = document.createElement('div');
weekDiv.className = 'week';
const header = document.createElement('div');
header.className = 'week-header';
header.textContent = `Неделя ${week.week}`;
const itemsDiv = document.createElement('div');
itemsDiv.className = 'week-items';
itemsDiv.style.display = 'none';
header.addEventListener('click', () => {
itemsDiv.style.display = itemsDiv.style.display === 'none' ? 'block' : 'none';
});
// таблица категорий
const table = document.createElement('table');
const tbody = document.createElement('tbody');
week.items.forEach(cat => {
const trCat = document.createElement('tr');
const tdCat = document.createElement('td');
tdCat.colSpan = 2;
tdCat.style.fontWeight = 'bold';
tdCat.textContent = cat.category;
trCat.appendChild(tdCat);
tbody.appendChild(trCat);
cat.items.forEach(it => {
const tr = document.createElement('tr');
const tdName = document.createElement('td');
const tdQty = document.createElement('td');
tdName.textContent = it.name;
tdQty.textContent = it.qty;
tr.append(tdName, tdQty);
tbody.appendChild(tr);
});
});
table.appendChild(tbody);
itemsDiv.appendChild(table);
weekDiv.appendChild(header);
weekDiv.appendChild(itemsDiv);
container.appendChild(weekDiv);
});
}
// ---- Экспорт в CSV (Excel) --------------------------------
function exportToCsv() {
if (!window._shoppingData) return;
let csv = '\uFEFFWeek,Category,Item,Qty\n';
window._shoppingData.forEach(week => {
week.items.forEach(cat => {
cat.items.forEach(it => {
csv += `${week.week},${cat.category},${it.name},${it.qty}\n`;
});
});
});
const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'shopping_plan.csv';
a.style.display = 'none';
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
}
document.getElementById('exportBtn').addEventListener('click', exportToCsv);