Spaces:
Sleeping
Sleeping
Update nutri_call.html
Browse files- nutri_call.html +105 -42
nutri_call.html
CHANGED
@@ -12,7 +12,11 @@
|
|
12 |
<!-- Основные стили PNotify -->
|
13 |
<link href="https://cdn.jsdelivr.net/npm/notyf@3/notyf.min.css" rel="stylesheet">
|
14 |
<script src="https://cdn.jsdelivr.net/npm/notyf@3/notyf.min.js"></script>
|
|
|
|
|
15 |
|
|
|
|
|
16 |
|
17 |
<meta charset="UTF-8">
|
18 |
<title>Калькулятор удобрений</title>
|
@@ -1513,36 +1517,37 @@ function showCalculationStatus(response) {
|
|
1513 |
|
1514 |
<script>
|
1515 |
// Предустановленные профили (JSON)
|
|
|
1516 |
const predefinedProfiles = {
|
1517 |
-
|
1518 |
{
|
1519 |
-
|
1520 |
-
|
1521 |
-
|
1522 |
-
|
1523 |
-
|
1524 |
-
|
1525 |
-
|
1526 |
-
|
1527 |
-
|
1528 |
-
|
1529 |
-
|
1530 |
-
|
1531 |
}
|
1532 |
},
|
1533 |
{
|
1534 |
-
|
1535 |
-
|
1536 |
-
|
1537 |
-
|
1538 |
-
|
1539 |
-
|
1540 |
-
|
1541 |
-
|
1542 |
-
|
1543 |
-
|
1544 |
-
|
1545 |
-
|
1546 |
}
|
1547 |
}
|
1548 |
]
|
@@ -1608,6 +1613,7 @@ function updateProfileFields(selectedProfile) {
|
|
1608 |
document.getElementById("fert_fe_complex_mass").value = selectedProfile.values.fert_fe_complex_mass || 0;
|
1609 |
}
|
1610 |
|
|
|
1611 |
document.getElementById("profile-selector").addEventListener("change", function () {
|
1612 |
const selectedProfileName = this.value;
|
1613 |
const allProfiles = loadAllProfiles();
|
@@ -1619,10 +1625,25 @@ document.getElementById("profile-selector").addEventListener("change", function
|
|
1619 |
});
|
1620 |
|
1621 |
// Сохранение нового профиля
|
1622 |
-
document.getElementById("save-profile").addEventListener("click", function () {
|
1623 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1624 |
if (!profileName) return;
|
1625 |
|
|
|
1626 |
const newProfile = {
|
1627 |
name: profileName,
|
1628 |
values: {
|
@@ -1639,6 +1660,7 @@ document.getElementById("save-profile").addEventListener("click", function () {
|
|
1639 |
}
|
1640 |
};
|
1641 |
|
|
|
1642 |
let userProfiles = JSON.parse(localStorage.getItem("userProfiles")) || [];
|
1643 |
userProfiles.push(newProfile);
|
1644 |
localStorage.setItem("userProfiles", JSON.stringify(userProfiles));
|
@@ -1648,10 +1670,14 @@ document.getElementById("save-profile").addEventListener("click", function () {
|
|
1648 |
});
|
1649 |
|
1650 |
// Удаление выбранного профиля
|
1651 |
-
document.getElementById("delete-profile").addEventListener("click", function () {
|
1652 |
const selectedProfileName = document.getElementById("profile-selector").value;
|
1653 |
if (!selectedProfileName) {
|
1654 |
-
|
|
|
|
|
|
|
|
|
1655 |
return;
|
1656 |
}
|
1657 |
|
@@ -1660,24 +1686,61 @@ document.getElementById("delete-profile").addEventListener("click", function ()
|
|
1660 |
const profileIndex = userProfiles.findIndex(profile => profile.name === selectedProfileName);
|
1661 |
|
1662 |
if (profileIndex === -1) {
|
1663 |
-
|
|
|
|
|
|
|
|
|
1664 |
return;
|
1665 |
}
|
1666 |
|
1667 |
-
//
|
1668 |
-
|
1669 |
-
|
|
|
|
|
|
|
|
|
|
|
1670 |
|
1671 |
-
|
1672 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1673 |
|
1674 |
-
|
1675 |
-
|
1676 |
-
|
1677 |
-
|
1678 |
-
|
1679 |
-
|
1680 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1681 |
}
|
1682 |
});
|
1683 |
|
|
|
12 |
<!-- Основные стили PNotify -->
|
13 |
<link href="https://cdn.jsdelivr.net/npm/notyf@3/notyf.min.css" rel="stylesheet">
|
14 |
<script src="https://cdn.jsdelivr.net/npm/notyf@3/notyf.min.js"></script>
|
15 |
+
<!-- SweetAlert2 CSS -->
|
16 |
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/sweetalert2 @11/dist/sweetalert2.min.css">
|
17 |
|
18 |
+
<!-- SweetAlert2 JS -->
|
19 |
+
<script src="https://cdn.jsdelivr.net/npm/sweetalert2 @11"></script>
|
20 |
|
21 |
<meta charset="UTF-8">
|
22 |
<title>Калькулятор удобрений</title>
|
|
|
1517 |
|
1518 |
<script>
|
1519 |
// Предустановленные профили (JSON)
|
1520 |
+
// Предустановленные профили (JSON)
|
1521 |
const predefinedProfiles = {
|
1522 |
+
profiles: [
|
1523 |
{
|
1524 |
+
name: "Профиль 1",
|
1525 |
+
values: {
|
1526 |
+
profile_p: 31,
|
1527 |
+
profile_k: 210,
|
1528 |
+
profile_mg: 24,
|
1529 |
+
profile_ca: 82,
|
1530 |
+
profile_s: 57.5,
|
1531 |
+
profile_no3: 8.25,
|
1532 |
+
profile_n: 125,
|
1533 |
+
liters: 100,
|
1534 |
+
fert_fe_chelate_mass: 2.0,
|
1535 |
+
fert_fe_complex_mass: 1.0
|
1536 |
}
|
1537 |
},
|
1538 |
{
|
1539 |
+
name: "Профиль 2",
|
1540 |
+
values: {
|
1541 |
+
profile_p: 40,
|
1542 |
+
profile_k: 250,
|
1543 |
+
profile_mg: 30,
|
1544 |
+
profile_ca: 90,
|
1545 |
+
profile_s: 60,
|
1546 |
+
profile_no3: 10,
|
1547 |
+
profile_n: 150,
|
1548 |
+
liters: 150,
|
1549 |
+
fert_fe_chelate_mass: 3.0,
|
1550 |
+
fert_fe_complex_mass: 2.0
|
1551 |
}
|
1552 |
}
|
1553 |
]
|
|
|
1613 |
document.getElementById("fert_fe_complex_mass").value = selectedProfile.values.fert_fe_complex_mass || 0;
|
1614 |
}
|
1615 |
|
1616 |
+
// Слушатель события изменения выбранного профиля
|
1617 |
document.getElementById("profile-selector").addEventListener("change", function () {
|
1618 |
const selectedProfileName = this.value;
|
1619 |
const allProfiles = loadAllProfiles();
|
|
|
1625 |
});
|
1626 |
|
1627 |
// Сохранение нового профиля
|
1628 |
+
document.getElementById("save-profile").addEventListener("click", async function () {
|
1629 |
+
// Используем SweetAlert2 для ввода имени профиля
|
1630 |
+
const { value: profileName } = await Swal.fire({
|
1631 |
+
title: "Введите название профиля",
|
1632 |
+
input: "text",
|
1633 |
+
inputPlaceholder: "Название профиля",
|
1634 |
+
showCancelButton: true,
|
1635 |
+
confirmButtonText: "Сохранить",
|
1636 |
+
cancelButtonText: "Отмена",
|
1637 |
+
inputValidator: (value) => {
|
1638 |
+
if (!value) {
|
1639 |
+
return "Название профиля не может быть пустым!";
|
1640 |
+
}
|
1641 |
+
}
|
1642 |
+
});
|
1643 |
+
|
1644 |
if (!profileName) return;
|
1645 |
|
1646 |
+
// Создаём новый профиль
|
1647 |
const newProfile = {
|
1648 |
name: profileName,
|
1649 |
values: {
|
|
|
1660 |
}
|
1661 |
};
|
1662 |
|
1663 |
+
// Добавляем профиль в localStorage
|
1664 |
let userProfiles = JSON.parse(localStorage.getItem("userProfiles")) || [];
|
1665 |
userProfiles.push(newProfile);
|
1666 |
localStorage.setItem("userProfiles", JSON.stringify(userProfiles));
|
|
|
1670 |
});
|
1671 |
|
1672 |
// Удаление выбранного профиля
|
1673 |
+
document.getElementById("delete-profile").addEventListener("click", async function () {
|
1674 |
const selectedProfileName = document.getElementById("profile-selector").value;
|
1675 |
if (!selectedProfileName) {
|
1676 |
+
Swal.fire({
|
1677 |
+
icon: "error",
|
1678 |
+
title: "Ошибка",
|
1679 |
+
text: "Выберите профиль для удаления!"
|
1680 |
+
});
|
1681 |
return;
|
1682 |
}
|
1683 |
|
|
|
1686 |
const profileIndex = userProfiles.findIndex(profile => profile.name === selectedProfileName);
|
1687 |
|
1688 |
if (profileIndex === -1) {
|
1689 |
+
Swal.fire({
|
1690 |
+
icon: "error",
|
1691 |
+
title: "Ошибка",
|
1692 |
+
text: "Невозможно удалить предустановленный профиль!"
|
1693 |
+
});
|
1694 |
return;
|
1695 |
}
|
1696 |
|
1697 |
+
// Показываем SweetAlert2 для подтверждения удаления
|
1698 |
+
const swalWithBootstrapButtons = Swal.mixin({
|
1699 |
+
customClass: {
|
1700 |
+
confirmButton: "btn btn-success",
|
1701 |
+
cancelButton: "btn btn-danger"
|
1702 |
+
},
|
1703 |
+
buttonsStyling: false
|
1704 |
+
});
|
1705 |
|
1706 |
+
const result = await swalWithBootstrapButtons.fire({
|
1707 |
+
title: "Вы уверены?",
|
1708 |
+
text: "Это действие нельзя отменить!",
|
1709 |
+
icon: "warning",
|
1710 |
+
showCancelButton: true,
|
1711 |
+
confirmButtonText: "Да, удалить!",
|
1712 |
+
cancelButtonText: "Нет, отмена!",
|
1713 |
+
reverseButtons: true
|
1714 |
+
});
|
1715 |
|
1716 |
+
if (result.isConfirmed) {
|
1717 |
+
// Удаляем профиль
|
1718 |
+
userProfiles.splice(profileIndex, 1);
|
1719 |
+
localStorage.setItem("userProfiles", JSON.stringify(userProfiles));
|
1720 |
+
|
1721 |
+
// Обновляем выпадающий список
|
1722 |
+
populateProfileSelector();
|
1723 |
+
|
1724 |
+
// Выбираем первый профиль по умолчанию
|
1725 |
+
const allProfiles = loadAllProfiles();
|
1726 |
+
if (allProfiles.length > 0) {
|
1727 |
+
document.getElementById("profile-selector").value = allProfiles[0].name;
|
1728 |
+
updateProfileFields(allProfiles[0]);
|
1729 |
+
}
|
1730 |
+
|
1731 |
+
// Показываем сообщение об успешном удалении
|
1732 |
+
swalWithBootstrapButtons.fire({
|
1733 |
+
title: "Удалено!",
|
1734 |
+
text: "Профиль успешно удалён.",
|
1735 |
+
icon: "success"
|
1736 |
+
});
|
1737 |
+
} else if (result.dismiss === Swal.DismissReason.cancel) {
|
1738 |
+
// Показываем сообщение об отмене
|
1739 |
+
swalWithBootstrapButtons.fire({
|
1740 |
+
title: "Отменено",
|
1741 |
+
text: "Профиль не был удалён.",
|
1742 |
+
icon: "error"
|
1743 |
+
});
|
1744 |
}
|
1745 |
});
|
1746 |
|