Spaces:
Running
Running
Update script.js
Browse files
script.js
CHANGED
|
@@ -5,13 +5,10 @@ document.addEventListener('DOMContentLoaded', function () {
|
|
| 5 |
const cartTable = document.getElementById('cartTable').getElementsByTagName('tbody')[0];
|
| 6 |
const totalSoldElement = document.getElementById('totalSold');
|
| 7 |
const totalRevenueElement = document.getElementById('totalRevenue');
|
| 8 |
-
const modal = document.getElementById('modal');
|
| 9 |
-
const closeModal = document.querySelector('.close');
|
| 10 |
|
| 11 |
let totalSold = 0; // Общее количество проданных товаров
|
| 12 |
let totalRevenue = 0; // Общая выручка
|
| 13 |
let cart = []; // Корзина
|
| 14 |
-
let selectedProductId = null; // ID выбранного товара
|
| 15 |
|
| 16 |
// Загрузка данных из localStorage при загрузке страницы
|
| 17 |
loadProducts();
|
|
@@ -48,27 +45,6 @@ document.addEventListener('DOMContentLoaded', function () {
|
|
| 48 |
}
|
| 49 |
});
|
| 50 |
|
| 51 |
-
// Открытие модального окна при клике на товар
|
| 52 |
-
productTable.addEventListener('click', function (e) {
|
| 53 |
-
const row = e.target.closest('tr');
|
| 54 |
-
if (row) {
|
| 55 |
-
selectedProductId = parseInt(row.getAttribute('data-id'));
|
| 56 |
-
modal.style.display = 'flex';
|
| 57 |
-
}
|
| 58 |
-
});
|
| 59 |
-
|
| 60 |
-
// Закрытие модального окна
|
| 61 |
-
closeModal.addEventListener('click', function () {
|
| 62 |
-
modal.style.display = 'none';
|
| 63 |
-
});
|
| 64 |
-
|
| 65 |
-
// Закрытие модального окна при клике вне его
|
| 66 |
-
window.addEventListener('click', function (e) {
|
| 67 |
-
if (e.target === modal) {
|
| 68 |
-
modal.style.display = 'none';
|
| 69 |
-
}
|
| 70 |
-
});
|
| 71 |
-
|
| 72 |
// Функция добавления товара
|
| 73 |
function addProduct(name, purchasePrice, salePrice, quantity) {
|
| 74 |
const product = {
|
|
@@ -98,6 +74,12 @@ document.addEventListener('DOMContentLoaded', function () {
|
|
| 98 |
<td>${product.purchasePrice}</td>
|
| 99 |
<td>${product.salePrice}</td>
|
| 100 |
<td>${product.quantity}</td>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 101 |
`;
|
| 102 |
}
|
| 103 |
|
|
@@ -143,24 +125,26 @@ document.addEventListener('DOMContentLoaded', function () {
|
|
| 143 |
});
|
| 144 |
}
|
| 145 |
|
| 146 |
-
//
|
| 147 |
-
window.
|
| 148 |
-
const
|
| 149 |
-
|
|
|
|
|
|
|
| 150 |
const products = JSON.parse(localStorage.getItem('products')) || [];
|
| 151 |
-
const product = products.find(p => p.id ===
|
| 152 |
|
| 153 |
if (product && product.quantity >= quantity) {
|
| 154 |
-
const cartItem = cart.find(item => item.id ===
|
| 155 |
|
| 156 |
if (cartItem) {
|
| 157 |
-
cartItem.quantity +=
|
| 158 |
} else {
|
| 159 |
cart.push({
|
| 160 |
-
id:
|
| 161 |
name: product.name,
|
| 162 |
salePrice: product.salePrice,
|
| 163 |
-
quantity:
|
| 164 |
});
|
| 165 |
}
|
| 166 |
|
|
@@ -172,12 +156,77 @@ document.addEventListener('DOMContentLoaded', function () {
|
|
| 172 |
} else {
|
| 173 |
alert('Пожалуйста, введите корректное количество.');
|
| 174 |
}
|
| 175 |
-
modal.style.display = 'none';
|
| 176 |
};
|
| 177 |
|
| 178 |
-
//
|
| 179 |
-
window.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 180 |
const quantityToAdd = prompt('Введите количество для прихода:');
|
| 181 |
if (quantityToAdd && !isNaN(quantityToAdd) && quantityToAdd > 0) {
|
| 182 |
let products = JSON.parse(localStorage.getItem('products')) || [];
|
| 183 |
-
const productIndex = products.findIndex(p =>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5 |
const cartTable = document.getElementById('cartTable').getElementsByTagName('tbody')[0];
|
| 6 |
const totalSoldElement = document.getElementById('totalSold');
|
| 7 |
const totalRevenueElement = document.getElementById('totalRevenue');
|
|
|
|
|
|
|
| 8 |
|
| 9 |
let totalSold = 0; // Общее количество проданных товаров
|
| 10 |
let totalRevenue = 0; // Общая выручка
|
| 11 |
let cart = []; // Корзина
|
|
|
|
| 12 |
|
| 13 |
// Загрузка данных из localStorage при загрузке страницы
|
| 14 |
loadProducts();
|
|
|
|
| 45 |
}
|
| 46 |
});
|
| 47 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 48 |
// Функция добавления товара
|
| 49 |
function addProduct(name, purchasePrice, salePrice, quantity) {
|
| 50 |
const product = {
|
|
|
|
| 74 |
<td>${product.purchasePrice}</td>
|
| 75 |
<td>${product.salePrice}</td>
|
| 76 |
<td>${product.quantity}</td>
|
| 77 |
+
<td class="actions">
|
| 78 |
+
<input type="number" min="1" max="${product.quantity}" class="quantity-input" placeholder="Количество">
|
| 79 |
+
<button class="add-to-cart-btn" onclick="addToCart(${product.id})">Добавить в корзину</button>
|
| 80 |
+
<button class="add-stock-btn" onclick="addStock(${product.id})">Приход</button>
|
| 81 |
+
<button class="delete-btn" onclick="deleteProduct(${product.id})">Удалить</button>
|
| 82 |
+
</td>
|
| 83 |
`;
|
| 84 |
}
|
| 85 |
|
|
|
|
| 125 |
});
|
| 126 |
}
|
| 127 |
|
| 128 |
+
// Функция добавления товара в корзину
|
| 129 |
+
window.addToCart = function (productId) {
|
| 130 |
+
const quantityInput = document.querySelector(`tr[data-id="${productId}"] .quantity-input`);
|
| 131 |
+
const quantity = parseInt(quantityInput.value);
|
| 132 |
+
|
| 133 |
+
if (quantity && quantity > 0) {
|
| 134 |
const products = JSON.parse(localStorage.getItem('products')) || [];
|
| 135 |
+
const product = products.find(p => p.id === productId);
|
| 136 |
|
| 137 |
if (product && product.quantity >= quantity) {
|
| 138 |
+
const cartItem = cart.find(item => item.id === productId);
|
| 139 |
|
| 140 |
if (cartItem) {
|
| 141 |
+
cartItem.quantity += quantity;
|
| 142 |
} else {
|
| 143 |
cart.push({
|
| 144 |
+
id: productId,
|
| 145 |
name: product.name,
|
| 146 |
salePrice: product.salePrice,
|
| 147 |
+
quantity: quantity
|
| 148 |
});
|
| 149 |
}
|
| 150 |
|
|
|
|
| 156 |
} else {
|
| 157 |
alert('Пожалуйста, введите корректное количество.');
|
| 158 |
}
|
|
|
|
| 159 |
};
|
| 160 |
|
| 161 |
+
// Функция удаления товара из корзины
|
| 162 |
+
window.removeFromCart = function (productId) {
|
| 163 |
+
cart = cart.filter(item => item.id !== productId);
|
| 164 |
+
localStorage.setItem('cart', JSON.stringify(cart));
|
| 165 |
+
updateCartDisplay();
|
| 166 |
+
};
|
| 167 |
+
|
| 168 |
+
// Функция продажи товаров из корзины
|
| 169 |
+
window.sellCart = function () {
|
| 170 |
+
if (cart.length === 0) {
|
| 171 |
+
alert('Корзина пуста.');
|
| 172 |
+
return;
|
| 173 |
+
}
|
| 174 |
+
|
| 175 |
+
const products = JSON.parse(localStorage.getItem('products')) || [];
|
| 176 |
+
|
| 177 |
+
cart.forEach(cartItem => {
|
| 178 |
+
const product = products.find(p => p.id === cartItem.id);
|
| 179 |
+
|
| 180 |
+
if (product && product.quantity >= cartItem.quantity) {
|
| 181 |
+
product.quantity -= cartItem.quantity;
|
| 182 |
+
totalSold += cartItem.quantity;
|
| 183 |
+
totalRevenue += cartItem.quantity * cartItem.salePrice;
|
| 184 |
+
} else {
|
| 185 |
+
alert(`Недостаточно товара "${cartItem.name}" на складе.`);
|
| 186 |
+
}
|
| 187 |
+
});
|
| 188 |
+
|
| 189 |
+
localStorage.setItem('products', JSON.stringify(products));
|
| 190 |
+
localStorage.setItem('stats', JSON.stringify({ totalSold, totalRevenue }));
|
| 191 |
+
localStorage.removeItem('cart');
|
| 192 |
+
|
| 193 |
+
cart = [];
|
| 194 |
+
updateCartDisplay();
|
| 195 |
+
productTable.innerHTML = '';
|
| 196 |
+
loadProducts();
|
| 197 |
+
updateStatsDisplay();
|
| 198 |
+
};
|
| 199 |
+
|
| 200 |
+
// Функция добавления остатков
|
| 201 |
+
window.addStock = function (productId) {
|
| 202 |
const quantityToAdd = prompt('Введите количество для прихода:');
|
| 203 |
if (quantityToAdd && !isNaN(quantityToAdd) && quantityToAdd > 0) {
|
| 204 |
let products = JSON.parse(localStorage.getItem('products')) || [];
|
| 205 |
+
const productIndex = products.findIndex(p => p.id === productId);
|
| 206 |
+
|
| 207 |
+
if (productIndex !== -1) {
|
| 208 |
+
products[productIndex].quantity += parseInt(quantityToAdd);
|
| 209 |
+
localStorage.setItem('products', JSON.stringify(products));
|
| 210 |
+
|
| 211 |
+
// Обновляем таблицу
|
| 212 |
+
productTable.innerHTML = '';
|
| 213 |
+
loadProducts();
|
| 214 |
+
}
|
| 215 |
+
} else {
|
| 216 |
+
alert('Пожалуйста, введите корректное количество.');
|
| 217 |
+
}
|
| 218 |
+
};
|
| 219 |
+
|
| 220 |
+
// Функция удаления товара
|
| 221 |
+
window.deleteProduct = function (productId) {
|
| 222 |
+
if (confirm('Вы уверены, что хотите удалить этот товар?')) {
|
| 223 |
+
let products = JSON.parse(localStorage.getItem('products')) || [];
|
| 224 |
+
products = products.filter(p => p.id !== productId);
|
| 225 |
+
localStorage.setItem('products', JSON.stringify(products));
|
| 226 |
+
|
| 227 |
+
// Обновляем таблицу
|
| 228 |
+
productTable.innerHTML = '';
|
| 229 |
+
loadProducts();
|
| 230 |
+
}
|
| 231 |
+
};
|
| 232 |
+
});
|