DmitrMakeev commited on
Commit
d65f53d
·
verified ·
1 Parent(s): 8517d99

Update nutri_call.html

Browse files
Files changed (1) hide show
  1. nutri_call.html +59 -58
nutri_call.html CHANGED
@@ -878,24 +878,26 @@ legend {
878
  <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/toastify-js"></script>
879
  <script>
880
  let call_data;
 
881
  const ecConstants = {
882
  'P': 0.0012, 'K': 0.0018, 'Mg': 0.0015,
883
  'Ca': 0.0016, 'S': 0.0014,
884
  'N (NO3-)': 0.0017, 'N (NH4+)': 0.0019
885
  };
886
- document.getElementById('calculate-btn').addEventListener('click', function() {
 
887
  console.log("=== НАЧАЛО ОБРАБОТКИ ===");
888
-
889
  // 1. Получаем значение точности округления с подробным логированием
890
  const roundingInput = document.getElementById('rounding-precision');
891
  console.log("Значение поля rounding-precision (raw):", roundingInput.value);
892
-
893
  const initialRounding = parseInt(roundingInput.value);
894
  console.log("Парсинг значения rounding (после parseInt):", initialRounding);
895
-
896
  const roundingPrecision = Math.min(Math.max(initialRounding || 3, 0), 6);
897
  console.log("Финальное значение точности (0-6):", roundingPrecision);
898
-
899
  // 2. Улучшенная функция для безопасного получения числового значения с логированием
900
  const getValue = (id) => {
901
  const element = document.getElementById(id);
@@ -904,16 +906,17 @@ document.getElementById('calculate-btn').addEventListener('click', function() {
904
  return 0;
905
  }
906
  console.log(`Значение поля ${id}:`, element.value);
907
-
908
- const value = parseFloat(element.value);
909
  const result = isNaN(value) ? 0 : value;
910
-
911
  console.log(`Парсинг значения ${id}:`, result);
912
  return result;
913
  };
 
914
  // 3. Формируем данные для сервера с пошаговым логированием
915
  console.log("=== ФОРМИРОВАНИЕ ДАННЫХ ДЛЯ СЕРВЕРА ===");
916
-
917
  const fertilizerConstants = {
918
  "Кальциевая селитра": {
919
  "N (NO3-)": getValue('fert_ca_no3') / 100,
@@ -938,9 +941,13 @@ document.getElementById('calculate-btn').addEventListener('click', function() {
938
  "Калий сернокислый": {
939
  "K": getValue('fert_k2so4_k') / 100,
940
  "S": getValue('fert_k2so4_s') / 100
 
 
 
 
941
  }
942
  };
943
-
944
  const profileSettings = {
945
  'P': getValue('profile_p'),
946
  'K': getValue('profile_k'),
@@ -952,20 +959,22 @@ document.getElementById('calculate-btn').addEventListener('click', function() {
952
  'liters': parseInt(document.getElementById('liters-input').value) || 1,
953
  'rounding_precision': roundingPrecision
954
  };
955
-
956
  const requestData = {
957
  fertilizerConstants: fertilizerConstants,
958
  profileSettings: profileSettings
959
  };
960
-
961
  console.log("=== ПОЛНЫЙ ОБЪЕКТ ДЛЯ ОТПРАВКИ ===", JSON.stringify(requestData, null, 2));
962
-
963
  // 4. Проверка данных с подробным выводом
964
  console.log("=== ПРОВЕРКА ДАННЫХ ===");
965
-
966
- const requiredFertilizers = ["Кальциевая селитра", "Калий азотнокислый", "Аммоний азотнокислый",
967
- "Сульфат магния", "Монофосфат калия", "Калий сернокислый"];
968
-
 
 
969
  let hasErrors = false;
970
  for (const fert of requiredFertilizers) {
971
  if (!requestData.fertilizerConstants[fert]) {
@@ -975,7 +984,7 @@ document.getElementById('calculate-btn').addEventListener('click', function() {
975
  console.log(`Удобрение ${fert} присутствует`);
976
  }
977
  }
978
-
979
  const requiredProfileFields = ['P', 'K', 'Mg', 'Ca', 'S', 'NO3_RAT', 'TOTAL_NITROG'];
980
  for (const field of requiredProfileFields) {
981
  if (isNaN(requestData.profileSettings[field])) {
@@ -985,18 +994,19 @@ document.getElementById('calculate-btn').addEventListener('click', function() {
985
  console.log(`Параметр ${field} в порядке:`, requestData.profileSettings[field]);
986
  }
987
  }
988
-
989
  console.log("Параметр rounding_precision:", requestData.profileSettings.rounding_precision);
990
-
991
  if (hasErrors) {
992
  const errorMsg = "Пожалуйста, проверьте введенные данные. Обнаружены ошибки в форме. Смотрите консоль для деталей.";
993
  console.error(errorMsg);
994
  alert(errorMsg);
995
  return;
996
  }
 
997
  // 5. Отправка данных на сервер с полным логированием
998
  console.log("=== ОТПРАВКА ДАННЫХ НА СЕРВЕР ===");
999
-
1000
  fetch('/calculation', {
1001
  method: 'POST',
1002
  headers: {
@@ -1006,7 +1016,6 @@ document.getElementById('calculate-btn').addEventListener('click', function() {
1006
  })
1007
  .then(response => {
1008
  console.log("Получен ответ от сервера. Статус:", response.status);
1009
-
1010
  if (!response.ok) {
1011
  console.error("ОШИБКА СЕРВЕРА. Полный ответ:", response);
1012
  throw new Error(`HTTP error! status: ${response.status}`);
@@ -1023,15 +1032,13 @@ document.getElementById('calculate-btn').addEventListener('click', function() {
1023
  // Показываем статус расчёта
1024
  showCalculationStatus(call_data);
1025
 
1026
- // Вызываем функцию для расчета катионов и анионов
1027
- calculateCationsAndAnions(data);
1028
 
1029
- // Обновляем поля NH4 и NO3
1030
- updateNitrogenFields(call_data);
1031
 
1032
-
1033
  // Обновляем значения NPK
1034
-
1035
  calculateAndUpdate(call_data);
1036
 
1037
  // Получаем температуру из формы
@@ -1056,42 +1063,36 @@ document.getElementById('calculate-btn').addEventListener('click', function() {
1056
  });
1057
  });
1058
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1059
 
1060
-
1061
-
1062
- function data_out(response) {
1063
- console.log("Обработка ответа сервера:", response);
1064
-
1065
- // Соответствие названий удобрений и ID полей
1066
- const fertilizerMap = {
1067
- "Кальциевая селитра": "calcium_nitrate",
1068
- "Калий азотнокислый": "potassium_nitrate",
1069
- "Аммоний азотнокислый": "ammonium_nitrate",
1070
- "Сульфат магния": "magnesium_sulfate",
1071
- "Монофосфат калия": "monopotassium_phosphate",
1072
- "Калий сернокислый": "potassium_sulfate"
1073
- };
1074
-
1075
- // Заполняем граммы для каждого удобрения
1076
- for (const [fertName, fieldId] of Object.entries(fertilizerMap)) {
1077
- const value = response.fertilizers[fertName];
1078
- if (value !== undefined) {
1079
- const input = document.getElementById(fieldId);
1080
- if (input) {
1081
- input.value = typeof value === 'number'
1082
- ? value.toFixed(3)
1083
- : value.граммы?.toFixed(3) || '0.000';
1084
- console.log(`Установлено ${fertName}: ${input.value}`);
1085
- } else {
1086
- console.error(`Не найден элемент: ${fieldId}`);
1087
- }
1088
  }
1089
  }
 
1090
 
1091
 
1092
 
1093
- console.log("Данные успешно обновлены");
1094
- }
1095
 
1096
 
1097
 
 
878
  <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/toastify-js"></script>
879
  <script>
880
  let call_data;
881
+
882
  const ecConstants = {
883
  'P': 0.0012, 'K': 0.0018, 'Mg': 0.0015,
884
  'Ca': 0.0016, 'S': 0.0014,
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);
 
906
  return 0;
907
  }
908
  console.log(`Значение поля ${id}:`, element.value);
909
+
910
+ const value = parseFloat(element.value.replace(',', '.')); // Замена запятой на точку
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,
 
941
  "Калий сернокислый": {
942
  "K": getValue('fert_k2so4_k') / 100,
943
  "S": getValue('fert_k2so4_s') / 100
944
+ },
945
+ "Кальций хлористый": { // Добавляем хлористый кальций
946
+ "Ca": getValue('fert_ca_no3') / 100,
947
+ "Cl": getValue('fert_ca_cl') / 100
948
  }
949
  };
950
+
951
  const profileSettings = {
952
  'P': getValue('profile_p'),
953
  'K': getValue('profile_k'),
 
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]) {
 
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])) {
 
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: {
 
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}`);
 
1032
  // Показываем статус расчёта
1033
  showCalculationStatus(call_data);
1034
 
1035
+ // Вызываем функцию для расчета катионов и анионов
1036
+ calculateCationsAndAnions(data);
1037
 
1038
+ // Обновляем поля NH4 и NO3
1039
+ updateNitrogenFields(call_data);
1040
 
 
1041
  // Обновляем значения NPK
 
1042
  calculateAndUpdate(call_data);
1043
 
1044
  // Получаем температуру из формы
 
1063
  });
1064
  });
1065
 
1066
+ // Функция для вывода данных в форму
1067
+ function data_out(data) {
1068
+ console.log("=== ЗАПИСЬ ДАННЫХ В ФОРМУ ===");
1069
+
1070
+ // Записываем массы удобрений
1071
+ for (const [fertilizer, grams] of Object.entries(data.fertilizers)) {
1072
+ const inputId = fertilizer.toLowerCase().replace(/[^a-z0-9]/g, '_');
1073
+ const inputElement = document.getElementById(inputId);
1074
+ if (inputElement) {
1075
+ inputElement.value = grams.toFixed(3);
1076
+ console.log(`Записано значение для ${fertilizer}: ${grams.toFixed(3)} г`);
1077
+ } else {
1078
+ console.warn(`Поле для удобрения ${fertilizer} не найдено`);
1079
+ }
1080
+ }
1081
 
1082
+ // Записываем баланс элементов
1083
+ for (const [element, ppm] of Object.entries(data.actual_profile)) {
1084
+ const inputElement = document.getElementById(`profile_${element.toLowerCase()}`);
1085
+ if (inputElement) {
1086
+ inputElement.value = ppm.toFixed(3);
1087
+ console.log(`Записано значение для ${element}: ${ppm.toFixed(3)} ppm`);
1088
+ } else {
1089
+ console.warn(`Поле для элемента ${element} не найдено`);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1090
  }
1091
  }
1092
+ }
1093
 
1094
 
1095
 
 
 
1096
 
1097
 
1098