Spaces:
Running
Running
Update nutri_call.html
Browse files- nutri_call.html +0 -175
nutri_call.html
CHANGED
@@ -885,181 +885,6 @@ const ecConstants = {
|
|
885 |
'N (NO3-)': 0.0017, 'N (NH4+)': 0.0019
|
886 |
};
|
887 |
|
888 |
-
document.getElementById('calculate-btn').addEventListener('click', function () {
|
889 |
-
console.log("=== НАЧАЛО ОБРАБОТКИ ===");
|
890 |
-
|
891 |
-
// 1. Получаем значение точности округления с подробным логированием
|
892 |
-
const roundingInput = document.getElementById('rounding-precision');
|
893 |
-
console.log("Значение поля rounding-precision (raw):", roundingInput.value);
|
894 |
-
|
895 |
-
const initialRounding = parseInt(roundingInput.value);
|
896 |
-
console.log("Парсинг значения rounding (после parseInt):", initialRounding);
|
897 |
-
|
898 |
-
const roundingPrecision = Math.min(Math.max(initialRounding || 3, 0), 6);
|
899 |
-
console.log("Финальное значение точности (0-6):", roundingPrecision);
|
900 |
-
|
901 |
-
// 2. Улучшенная функция для безопасного получения числового значения с логированием
|
902 |
-
const getValue = (id) => {
|
903 |
-
const element = document.getElementById(id);
|
904 |
-
if (!element) {
|
905 |
-
console.error(`Элемент с ID ${id} не найден!`);
|
906 |
-
return 0;
|
907 |
-
}
|
908 |
-
console.log(`Значение поля ${id}:`, element.value);
|
909 |
-
|
910 |
-
const value = parseFloat(element.value); // Парсим число напрямую
|
911 |
-
const result = isNaN(value) ? 0 : value;
|
912 |
-
|
913 |
-
console.log(`Парсинг значения ${id}:`, result);
|
914 |
-
return result;
|
915 |
-
};
|
916 |
-
|
917 |
-
// 3. Формируем данные для сервера с пошаговым логированием
|
918 |
-
console.log("=== ФОРМИРОВАНИЕ ДАННЫХ ДЛЯ СЕРВЕРА ===");
|
919 |
-
|
920 |
-
const fertilizerConstants = {
|
921 |
-
"Кальциевая селитра": {
|
922 |
-
"N (NO3-)": getValue('fert_ca_no3') / 100,
|
923 |
-
"Ca": getValue('fert_ca_ca') / 100
|
924 |
-
},
|
925 |
-
"Калий азотнокислый": {
|
926 |
-
"N (NO3-)": getValue('fert_kno3_no3') / 100,
|
927 |
-
"K": getValue('fert_kno3_k') / 100
|
928 |
-
},
|
929 |
-
"Аммоний азотнокислый": {
|
930 |
-
"N (NO3-)": getValue('fert_nh4no3_no3') / 100,
|
931 |
-
"N (NH4+)": getValue('fert_nh4no3_nh4') / 100
|
932 |
-
},
|
933 |
-
"Сульфат магния": {
|
934 |
-
"Mg": getValue('fert_mgso4_mg') / 100,
|
935 |
-
"S": getValue('fert_mgso4_s') / 100
|
936 |
-
},
|
937 |
-
"Монофосфат калия": {
|
938 |
-
"P": getValue('fert_kh2po4_p') / 100,
|
939 |
-
"K": getValue('fert_kh2po4_k') / 100
|
940 |
-
},
|
941 |
-
"Калий сернокислый": {
|
942 |
-
"K": getValue('fert_k2so4_k') / 100,
|
943 |
-
"S": getValue('fert_k2so4_s') / 100
|
944 |
-
},
|
945 |
-
"Кальций хлорид": { // Обновленные идентификаторы для CaCl
|
946 |
-
"Ca": getValue('fert_caca') / 100, // Новый идентификатор
|
947 |
-
"Cl": getValue('fert_clcl') / 100 // Новый идентификатор
|
948 |
-
}
|
949 |
-
};
|
950 |
-
|
951 |
-
const profileSettings = {
|
952 |
-
'P': getValue('profile_p'),
|
953 |
-
'K': getValue('profile_k'),
|
954 |
-
'Mg': getValue('profile_mg'),
|
955 |
-
'Ca': getValue('profile_ca'),
|
956 |
-
'S': getValue('profile_s'),
|
957 |
-
'NO3_RAT': getValue('profile_no3'),
|
958 |
-
'TOTAL_NITROG': getValue('profile_n'),
|
959 |
-
'liters': parseInt(document.getElementById('liters-input').value) || 1,
|
960 |
-
'rounding_precision': roundingPrecision
|
961 |
-
};
|
962 |
-
|
963 |
-
const requestData = {
|
964 |
-
fertilizerConstants: fertilizerConstants,
|
965 |
-
profileSettings: profileSettings
|
966 |
-
};
|
967 |
-
|
968 |
-
console.log("=== ПОЛНЫЙ ОБЪЕКТ ДЛЯ ОТПРАВКИ ===", JSON.stringify(requestData, null, 2));
|
969 |
-
|
970 |
-
// 4. Проверка данных с подробным выводом
|
971 |
-
console.log("=== ПРОВЕРКА ДАННЫХ ===");
|
972 |
-
|
973 |
-
const requiredFertilizers = [
|
974 |
-
"Кальциевая селитра", "Калий азотнокислый", "Аммоний азотнокислый",
|
975 |
-
"Сульфат магния", "Монофосфат калия", "Калий сернокислый", "Кальций хлорид"
|
976 |
-
];
|
977 |
-
|
978 |
-
let hasErrors = false;
|
979 |
-
for (const fert of requiredFertilizers) {
|
980 |
-
if (!requestData.fertilizerConstants[fert]) {
|
981 |
-
console.error(`ОШИБКА: Отсутствует удобрение: ${fert}`);
|
982 |
-
hasErrors = true;
|
983 |
-
} else {
|
984 |
-
console.log(`Удобрение ${fert} присутствует`);
|
985 |
-
}
|
986 |
-
}
|
987 |
-
|
988 |
-
const requiredProfileFields = ['P', 'K', 'Mg', 'Ca', 'S', 'NO3_RAT', 'TOTAL_NITROG'];
|
989 |
-
for (const field of requiredProfileFields) {
|
990 |
-
if (isNaN(requestData.profileSettings[field])) {
|
991 |
-
console.error(`ОШИБКА: Некорректное значение для параметра ${field}`);
|
992 |
-
hasErrors = true;
|
993 |
-
} else {
|
994 |
-
console.log(`Параметр ${field} в порядке:`, requestData.profileSettings[field]);
|
995 |
-
}
|
996 |
-
}
|
997 |
-
|
998 |
-
console.log("Параметр rounding_precision:", requestData.profileSettings.rounding_precision);
|
999 |
-
|
1000 |
-
if (hasErrors) {
|
1001 |
-
const errorMsg = "Пожалуйста, проверьте введенные данные. Обнаружены ошибки в форме. Смотрите консоль для деталей.";
|
1002 |
-
console.error(errorMsg);
|
1003 |
-
alert(errorMsg);
|
1004 |
-
return;
|
1005 |
-
}
|
1006 |
-
|
1007 |
-
// 5. Отправка данных на сервер с полным логированием
|
1008 |
-
console.log("=== ОТПРАВКА ДАННЫХ НА СЕРВЕР ===");
|
1009 |
-
|
1010 |
-
fetch('/calculation', {
|
1011 |
-
method: 'POST',
|
1012 |
-
headers: {
|
1013 |
-
'Content-Type': 'application/json',
|
1014 |
-
},
|
1015 |
-
body: JSON.stringify(requestData),
|
1016 |
-
})
|
1017 |
-
.then(response => {
|
1018 |
-
console.log("Получен ответ от сервера. Статус:", response.status);
|
1019 |
-
if (!response.ok) {
|
1020 |
-
console.error("ОШИБКА СЕРВЕРА. Полный ответ:", response);
|
1021 |
-
throw new Error(`HTTP error! status: ${response.status}`);
|
1022 |
-
}
|
1023 |
-
return response.json();
|
1024 |
-
})
|
1025 |
-
.then(data => {
|
1026 |
-
call_data = data;
|
1027 |
-
console.log("=== УСПЕШНЫЙ ОТВЕТ ОТ СЕРВЕРА ===", call_data);
|
1028 |
-
|
1029 |
-
// Выводим данные в форму
|
1030 |
-
data_out(call_data);
|
1031 |
-
|
1032 |
-
// Показываем статус расчёта
|
1033 |
-
showCalculationStatus(call_data);
|
1034 |
-
|
1035 |
-
// Вызываем функцию для расчета катионов и анионов
|
1036 |
-
calculateCationsAndAnions(data);
|
1037 |
-
|
1038 |
-
// Обновляем поля NH4 и NO3
|
1039 |
-
updateNitrogenFields(call_data);
|
1040 |
-
|
1041 |
-
// Рассчитываем EC
|
1042 |
-
const temperature = parseFloat(document.getElementById('profile_temp').value) || 25;
|
1043 |
-
const ecValue = calculateEC(call_data, temperature);
|
1044 |
-
|
1045 |
-
// Обновляем поле EC
|
1046 |
-
const ecInput = document.getElementById('profile_ec');
|
1047 |
-
if (ecInput) {
|
1048 |
-
ecInput.value = ecValue.toFixed(2);
|
1049 |
-
console.log(`Установлено значение EC: ${ecValue.toFixed(2)}`);
|
1050 |
-
}
|
1051 |
-
})
|
1052 |
-
.catch(error => {
|
1053 |
-
console.error("=== ОШИБКА ПРИ ОБРАБОТКЕ ===", error);
|
1054 |
-
alert("Ошибка при расчете: " + error.message);
|
1055 |
-
})
|
1056 |
-
.finally(() => {
|
1057 |
-
console.log("=== ЗАВЕРШЕНИЕ ОБРАБОТКИ ===");
|
1058 |
-
});
|
1059 |
-
});
|
1060 |
-
|
1061 |
-
|
1062 |
-
|
1063 |
|
1064 |
|
1065 |
|
|
|
885 |
'N (NO3-)': 0.0017, 'N (NH4+)': 0.0019
|
886 |
};
|
887 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
888 |
|
889 |
|
890 |
|