DmitrMakeev commited on
Commit
eaeba37
·
verified ·
1 Parent(s): 04c89d1

Update nutri_call.html

Browse files
Files changed (1) hide show
  1. 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" // Новый ID для хлористого кальция
1084
  };
1085
 
1086
  // Записываем массы удобрений
1087
  for (const [fertilizer, grams] of Object.entries(data.fertilizers)) {
1088
- const inputId = fertilizerIdMap[fertilizer]; // Получаем ID из карты
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", // Специальный ID для NH4
1106
- "N (NO3-)": "calculated_no3" // Специальный ID для NO3
1107
  };
1108
 
1109
  for (const [element, ppm] of Object.entries(data.actual_profile)) {
1110
- const inputId = elementIdMap[element]; // Получаем ID из карты
1111
  if (!inputId) {
1112
  console.warn(`ID для элемента ${element} не определен в карте elementIdMap`);
1113
- continue; // Пропускаем элемент, если ID не найден
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} не найдено`);