Spaces:
Sleeping
Sleeping
Update nutri_call.html
Browse files- nutri_call.html +130 -13
nutri_call.html
CHANGED
@@ -1069,6 +1069,123 @@ document.getElementById('calculate-btn').addEventListener('click', function () {
|
|
1069 |
|
1070 |
|
1071 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1072 |
function data_out(data) {
|
1073 |
console.log("=== ЗАПИСЬ ДАННЫХ В ФОРМУ ===");
|
1074 |
|
@@ -1080,15 +1197,15 @@ function data_out(data) {
|
|
1080 |
"Сульфат магния": "magnesium_sulfate",
|
1081 |
"Монофосфат калия": "monopotassium_phosphate",
|
1082 |
"Калий сернокислый": "potassium_sulfate",
|
1083 |
-
"Кальций хлорид": "ca_cl_nitrate"
|
1084 |
};
|
1085 |
|
1086 |
// Записываем массы удобрений
|
1087 |
for (const [fertilizer, grams] of Object.entries(data.fertilizers)) {
|
1088 |
-
const inputId = fertilizerIdMap[fertilizer];
|
1089 |
const inputElement = document.getElementById(inputId);
|
1090 |
if (inputElement) {
|
1091 |
-
inputElement.value = grams.toFixed(3);
|
1092 |
console.log(`Записано значение для ${fertilizer}: ${grams.toFixed(3)} г`);
|
1093 |
} else {
|
1094 |
console.warn(`Поле для удобрения ${fertilizer} не найдено`);
|
@@ -1097,25 +1214,25 @@ function data_out(data) {
|
|
1097 |
|
1098 |
// Записываем баланс элементов (ТОЛЬКО В ПОЛЯ ВЫВОДА)
|
1099 |
const elementIdMap = {
|
1100 |
-
"Ca": "calculated_ca",
|
1101 |
-
"K": "calculated_k",
|
1102 |
-
"Mg": "calculated_mg",
|
1103 |
-
"P": "calculated_p",
|
1104 |
-
"S": "calculated_s",
|
1105 |
-
"N (NH4+)": "calculated_nh4",
|
1106 |
-
"N (NO3-)": "calculated_no3"
|
1107 |
};
|
1108 |
|
1109 |
for (const [element, ppm] of Object.entries(data.actual_profile)) {
|
1110 |
-
const inputId = elementIdMap[element];
|
1111 |
if (!inputId) {
|
1112 |
console.warn(`ID для элемента ${element} не определен в карте elementIdMap`);
|
1113 |
-
continue;
|
1114 |
}
|
1115 |
|
1116 |
const inputElement = document.getElementById(inputId);
|
1117 |
if (inputElement) {
|
1118 |
-
inputElement.value = ppm.toFixed(3);
|
1119 |
console.log(`Записано значение для ${element}: ${ppm.toFixed(3)} ppm`);
|
1120 |
} else {
|
1121 |
console.warn(`Поле для элемента ${element} не найдено`);
|
|
|
1069 |
|
1070 |
|
1071 |
|
1072 |
+
document.getElementById('calculate-btn').addEventListener('click', function () {
|
1073 |
+
console.log("=== НАЧАЛО ОБРАБОТКИ ===");
|
1074 |
+
|
1075 |
+
// 1. Получаем значение точности округления
|
1076 |
+
const roundingInput = document.getElementById('rounding-precision');
|
1077 |
+
const initialRounding = parseInt(roundingInput.value);
|
1078 |
+
const roundingPrecision = Math.min(Math.max(initialRounding || 3, 0), 6);
|
1079 |
+
|
1080 |
+
// 2. Функция для безопасного получения числового значения
|
1081 |
+
const getValue = (id) => {
|
1082 |
+
const element = document.getElementById(id);
|
1083 |
+
if (!element) {
|
1084 |
+
console.error(`Элемент с ID ${id} не найден!`);
|
1085 |
+
return 0;
|
1086 |
+
}
|
1087 |
+
const value = parseFloat(element.value);
|
1088 |
+
return isNaN(value) ? 0 : value;
|
1089 |
+
};
|
1090 |
+
|
1091 |
+
// 3. Формируем данные для сервера
|
1092 |
+
const fertilizerConstants = {
|
1093 |
+
"Кальциевая селитра": {
|
1094 |
+
"N (NO3-)": getValue('fert_ca_no3') / 100,
|
1095 |
+
"Ca": getValue('fert_ca_ca') / 100
|
1096 |
+
},
|
1097 |
+
"Калий азотнокислый": {
|
1098 |
+
"N (NO3-)": getValue('fert_kno3_no3') / 100,
|
1099 |
+
"K": getValue('fert_kno3_k') / 100
|
1100 |
+
},
|
1101 |
+
"Аммоний азотнокислый": {
|
1102 |
+
"N (NO3-)": getValue('fert_nh4no3_no3') / 100,
|
1103 |
+
"N (NH4+)": getValue('fert_nh4no3_nh4') / 100
|
1104 |
+
},
|
1105 |
+
"Сульфат магния": {
|
1106 |
+
"Mg": getValue('fert_mgso4_mg') / 100,
|
1107 |
+
"S": getValue('fert_mgso4_s') / 100
|
1108 |
+
},
|
1109 |
+
"Монофосфат калия": {
|
1110 |
+
"P": getValue('fert_kh2po4_p') / 100,
|
1111 |
+
"K": getValue('fert_kh2po4_k') / 100
|
1112 |
+
},
|
1113 |
+
"Калий сернокислый": {
|
1114 |
+
"K": getValue('fert_k2so4_k') / 100,
|
1115 |
+
"S": getValue('fert_k2so4_s') / 100
|
1116 |
+
},
|
1117 |
+
"Кальций хлорид": {
|
1118 |
+
"Ca": getValue('fert_caca') / 100,
|
1119 |
+
"Cl": getValue('fert_clcl') / 100
|
1120 |
+
}
|
1121 |
+
};
|
1122 |
+
|
1123 |
+
const profileSettings = {
|
1124 |
+
'P': getValue('profile_p'),
|
1125 |
+
'K': getValue('profile_k'),
|
1126 |
+
'Mg': getValue('profile_mg'),
|
1127 |
+
'Ca': getValue('profile_ca'),
|
1128 |
+
'S': getValue('profile_s'),
|
1129 |
+
'NO3_RAT': getValue('profile_no3'),
|
1130 |
+
'TOTAL_NITROG': getValue('profile_n'),
|
1131 |
+
'liters': parseInt(document.getElementById('liters-input').value) || 1,
|
1132 |
+
'rounding_precision': roundingPrecision
|
1133 |
+
};
|
1134 |
+
|
1135 |
+
const requestData = {
|
1136 |
+
fertilizerConstants: fertilizerConstants,
|
1137 |
+
profileSettings: profileSettings
|
1138 |
+
};
|
1139 |
+
|
1140 |
+
console.log("=== ПОЛНЫЙ ОБЪЕКТ ДЛЯ ОТПРАВКИ ===", JSON.stringify(requestData, null, 2));
|
1141 |
+
|
1142 |
+
// 4. Отправка данных на сервер
|
1143 |
+
fetch('/calculation', {
|
1144 |
+
method: 'POST',
|
1145 |
+
headers: {
|
1146 |
+
'Content-Type': 'application/json',
|
1147 |
+
},
|
1148 |
+
body: JSON.stringify(requestData),
|
1149 |
+
})
|
1150 |
+
.then(response => {
|
1151 |
+
console.log("Получен ответ от сервера. Статус:", response.status);
|
1152 |
+
if (!response.ok) {
|
1153 |
+
throw new Error(`HTTP error! status: ${response.status}`);
|
1154 |
+
}
|
1155 |
+
return response.json();
|
1156 |
+
})
|
1157 |
+
.then(data => {
|
1158 |
+
call_data = data;
|
1159 |
+
console.log("=== УСПЕШНЫЙ ОТВЕТ ОТ СЕРВЕРА ===", call_data);
|
1160 |
+
|
1161 |
+
// Обновляем только поля вывода
|
1162 |
+
data_out(call_data);
|
1163 |
+
|
1164 |
+
// Показываем статус расчёта
|
1165 |
+
showCalculationStatus(call_data);
|
1166 |
+
|
1167 |
+
// Вызываем функцию для расчета катионов и анионов
|
1168 |
+
calculateCationsAndAnions(data);
|
1169 |
+
|
1170 |
+
// Обновляем поля NH4 и NO3
|
1171 |
+
updateNitrogenFields(call_data);
|
1172 |
+
|
1173 |
+
// Рассчитываем EC
|
1174 |
+
const temperature = parseFloat(document.getElementById('profile_temp').value) || 25;
|
1175 |
+
const ecValue = calculateEC(call_data, temperature);
|
1176 |
+
const ecInput = document.getElementById('profile_ec');
|
1177 |
+
if (ecInput) {
|
1178 |
+
ecInput.value = ecValue.toFixed(2);
|
1179 |
+
console.log(`Установлено значение EC: ${ecValue.toFixed(2)}`);
|
1180 |
+
}
|
1181 |
+
})
|
1182 |
+
.catch(error => {
|
1183 |
+
console.error("=== ОШИБКА ПРИ ОБРАБОТКЕ ===", error);
|
1184 |
+
alert("Ошибка при расчете: " + error.message);
|
1185 |
+
});
|
1186 |
+
});
|
1187 |
+
|
1188 |
+
// Функция для вывода данных в форму
|
1189 |
function data_out(data) {
|
1190 |
console.log("=== ЗАПИСЬ ДАННЫХ В ФОРМУ ===");
|
1191 |
|
|
|
1197 |
"Сульфат магния": "magnesium_sulfate",
|
1198 |
"Монофосфат калия": "monopotassium_phosphate",
|
1199 |
"Калий сернокислый": "potassium_sulfate",
|
1200 |
+
"Кальций хлорид": "ca_cl_nitrate"
|
1201 |
};
|
1202 |
|
1203 |
// Записываем массы удобрений
|
1204 |
for (const [fertilizer, grams] of Object.entries(data.fertilizers)) {
|
1205 |
+
const inputId = fertilizerIdMap[fertilizer];
|
1206 |
const inputElement = document.getElementById(inputId);
|
1207 |
if (inputElement) {
|
1208 |
+
inputElement.value = grams.toFixed(3);
|
1209 |
console.log(`Записано значение для ${fertilizer}: ${grams.toFixed(3)} г`);
|
1210 |
} else {
|
1211 |
console.warn(`Поле для удобрения ${fertilizer} не найдено`);
|
|
|
1214 |
|
1215 |
// Записываем баланс элементов (ТОЛЬКО В ПОЛЯ ВЫВОДА)
|
1216 |
const elementIdMap = {
|
1217 |
+
"Ca": "calculated_ca",
|
1218 |
+
"K": "calculated_k",
|
1219 |
+
"Mg": "calculated_mg",
|
1220 |
+
"P": "calculated_p",
|
1221 |
+
"S": "calculated_s",
|
1222 |
+
"N (NH4+)": "calculated_nh4",
|
1223 |
+
"N (NO3-)": "calculated_no3"
|
1224 |
};
|
1225 |
|
1226 |
for (const [element, ppm] of Object.entries(data.actual_profile)) {
|
1227 |
+
const inputId = elementIdMap[element];
|
1228 |
if (!inputId) {
|
1229 |
console.warn(`ID для элемента ${element} не определен в карте elementIdMap`);
|
1230 |
+
continue;
|
1231 |
}
|
1232 |
|
1233 |
const inputElement = document.getElementById(inputId);
|
1234 |
if (inputElement) {
|
1235 |
+
inputElement.value = ppm.toFixed(3);
|
1236 |
console.log(`Записано значение для ${element}: ${ppm.toFixed(3)} ppm`);
|
1237 |
} else {
|
1238 |
console.warn(`Поле для элемента ${element} не найдено`);
|