DmitrMakeev commited on
Commit
a151a19
·
verified ·
1 Parent(s): 8255bf9

Update nutri_call.html

Browse files
Files changed (1) hide show
  1. nutri_call.html +110 -66
nutri_call.html CHANGED
@@ -337,6 +337,18 @@ legend {
337
  </div>
338
 
339
  <!-- Строки с удобрениями -->
 
 
 
 
 
 
 
 
 
 
 
 
340
  <div class="fert-row">
341
  <span class="fert-name">KNO3</span>
342
  <span class="fert-cell">-</span>
@@ -385,19 +397,42 @@ legend {
385
  <input class="fert-input" type="number" step="0.001" id="monopotassium_phosphate"/>
386
  </div>
387
 
388
- <!-- Новое удобрение: CaSO4 -->
389
  <div class="fert-row">
390
- <span class="fert-name">CaSO4</span>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
391
  <span class="fert-cell">-</span>
392
  <span class="fert-cell">-</span>
393
  <span class="fert-cell">-</span>
394
  <span class="fert-cell">-</span>
395
- <input class="fert-input" type="number" value="23.0" step="0.001" id="fert_caso4_ca"/>
396
  <span class="fert-cell">-</span>
397
- <input class="fert-input" type="number" value="18.6" step="0.001" id="fert_caso4_s"/>
398
- <input class="fert-input" type="number" step="0.001" id="calcium_sulfate"/>
399
  </div>
400
 
 
 
 
 
 
 
 
 
 
 
 
401
  </div>
402
  </fieldset>
403
  <fieldset class="calculation-box">
@@ -437,27 +472,27 @@ legend {
437
  </div>
438
  </div>
439
  </fieldset>
440
-
441
 
442
 
443
 
444
 
445
  <script>
446
  let call_data;
447
-
448
- document.getElementById('calculate-btn').addEventListener('click', function () {
449
  console.log("=== НАЧАЛО ОБРАБОТКИ ===");
450
-
451
  // 1. Получаем значение точности округления с подробным логированием
452
  const roundingInput = document.getElementById('rounding-precision');
453
  console.log("Значение поля rounding-precision (raw):", roundingInput.value);
454
-
455
  const initialRounding = parseInt(roundingInput.value);
456
  console.log("Парсинг значения rounding (после parseInt):", initialRounding);
457
-
458
  const roundingPrecision = Math.min(Math.max(initialRounding || 3, 0), 6);
459
  console.log("Финальное значение точности (0-6):", roundingPrecision);
460
-
461
  // 2. Улучшенная функция для безопасного получения числового значения с логированием
462
  const getValue = (id) => {
463
  const element = document.getElementById(id);
@@ -466,18 +501,21 @@ document.getElementById('calculate-btn').addEventListener('click', function () {
466
  return 0;
467
  }
468
  console.log(`Значение поля ${id}:`, element.value);
469
-
470
  const value = parseFloat(element.value);
471
  const result = isNaN(value) ? 0 : value;
472
-
473
  console.log(`Парсинг значения ${id}:`, result);
474
  return result;
475
  };
476
-
477
  // 3. Формируем данные для сервера с пошаговым логированием
478
  console.log("=== ФОРМИРОВАНИЕ ДАННЫХ ДЛЯ СЕРВЕРА ===");
479
-
480
  const fertilizerConstants = {
 
 
 
 
481
  "Калий азотнокислый": {
482
  "N (NO3-)": getValue('fert_kno3_no3') / 100,
483
  "K": getValue('fert_kno3_k') / 100
@@ -494,12 +532,12 @@ document.getElementById('calculate-btn').addEventListener('click', function () {
494
  "P": getValue('fert_kh2po4_p') / 100,
495
  "K": getValue('fert_kh2po4_k') / 100
496
  },
497
- "Сульфат кальция": { // Новое удобрение
498
- "Ca": getValue('fert_caso4_ca') / 100,
499
- "S": getValue('fert_caso4_s') / 100
500
  }
501
  };
502
-
503
  const profileSettings = {
504
  'P': getValue('profile_p'),
505
  'K': getValue('profile_k'),
@@ -511,25 +549,20 @@ document.getElementById('calculate-btn').addEventListener('click', function () {
511
  'liters': parseInt(document.getElementById('liters-input').value) || 1,
512
  'rounding_precision': roundingPrecision
513
  };
514
-
515
  const requestData = {
516
  fertilizerConstants: fertilizerConstants,
517
  profileSettings: profileSettings
518
  };
519
-
520
  console.log("=== ПОЛНЫЙ ОБЪЕКТ ДЛЯ ОТПРАВКИ ===", JSON.stringify(requestData, null, 2));
521
-
522
  // 4. Проверка данных с подробным выводом
523
  console.log("=== ПРОВЕРКА ДАННЫХ ===");
524
-
525
- const requiredFertilizers = [
526
- "Калий азотнокислый",
527
- "Аммоний азотнокислый",
528
- "Сульфат магния",
529
- "Монофосфат калия",
530
- "Сульфат кальция" // Новое удобрение
531
- ];
532
-
533
  let hasErrors = false;
534
  for (const fert of requiredFertilizers) {
535
  if (!requestData.fertilizerConstants[fert]) {
@@ -539,7 +572,7 @@ document.getElementById('calculate-btn').addEventListener('click', function () {
539
  console.log(`Удобрение ${fert} присутствует`);
540
  }
541
  }
542
-
543
  const requiredProfileFields = ['P', 'K', 'Mg', 'Ca', 'S', 'NO3_RAT', 'TOTAL_NITROG'];
544
  for (const field of requiredProfileFields) {
545
  if (isNaN(requestData.profileSettings[field])) {
@@ -549,19 +582,18 @@ document.getElementById('calculate-btn').addEventListener('click', function () {
549
  console.log(`Параметр ${field} в порядке:`, requestData.profileSettings[field]);
550
  }
551
  }
552
-
553
  console.log("Параметр rounding_precision:", requestData.profileSettings.rounding_precision);
554
-
555
  if (hasErrors) {
556
  const errorMsg = "Пожалуйста, проверьте введенные данные. Обнаружены ошибки в форме. Смотрите консоль для деталей.";
557
  console.error(errorMsg);
558
  alert(errorMsg);
559
  return;
560
  }
561
-
562
  // 5. Отправка данных на сервер с полным логированием
563
  console.log("=== ОТПРАВКА ДАННЫХ НА СЕРВЕР ===");
564
-
565
  fetch('/calculation', {
566
  method: 'POST',
567
  headers: {
@@ -569,45 +601,53 @@ document.getElementById('calculate-btn').addEventListener('click', function () {
569
  },
570
  body: JSON.stringify(requestData)
571
  })
572
- .then(response => {
573
- console.log("Получен ответ от сервера. Статус:", response.status);
574
-
575
- if (!response.ok) {
576
- console.error("ОШИБКА СЕРВЕРА. Полный ответ:", response);
577
- throw new Error(`HTTP error! status: ${response.status}`);
578
- }
579
- return response.json();
580
- })
581
- .then(data => {
582
- call_data = data;
583
- console.log("=== УСПЕШНЫЙ ОТВЕТ ОТ СЕРВЕРА ===", call_data);
584
  // Выводим данные в форму
585
- data_out(call_data);
586
- // Проверяем, применилась ли точность округления
587
- console.log("Проверка округления в ответе:");
588
- if (data.fertilizers) {
589
- Object.entries(data.fertilizers).forEach(([name, values]) => {
590
- console.log(`Удобрение ${name}:`, values);
591
- });
592
- }
593
- })
594
- .catch(error => {
595
- console.error("=== ОШИБКА ПРИ ОБРАБОТКЕ ===", error);
596
- alert("Ошибка при расчете: " + error.message);
597
- })
598
- .finally(() => {
599
- console.log("=== ЗАВЕРШЕНИЕ ОБРАБОТКИ ===");
600
- });
 
 
601
  });
602
 
 
 
 
603
  function data_out(response) {
 
 
604
  // Заполняем граммы для каждого удобрения
605
  const fertilizerGrams = {
 
606
  "Калий азотнокислый": "potassium_nitrate",
607
  "Аммоний азотнокислый": "ammonium_nitrate",
608
  "Сульфат магния": "magnesium_sulfate",
609
  "Монофосфат калия": "monopotassium_phosphate",
610
- "Сульфат кальция": "calcium_sulfate" // Новое удобрение
611
  };
612
 
613
  for (const [fertName, gramsFieldId] of Object.entries(fertilizerGrams)) {
@@ -630,9 +670,13 @@ function data_out(response) {
630
 
631
  console.log("Данные успешно выведены в форму");
632
  }
 
 
 
633
  </script>
634
 
635
 
 
636
 
637
  </body>
638
  </html>
 
337
  </div>
338
 
339
  <!-- Строки с удобрениями -->
340
+ <div class="fert-row">
341
+ <span class="fert-name">CaN2O6</span>
342
+ <span class="fert-cell">-</span>
343
+ <input class="fert-input" type="number" value="11.863" step="0.001" id="fert_ca_no3"/>
344
+ <span class="fert-cell">-</span>
345
+ <span class="fert-cell">-</span>
346
+ <input class="fert-input" type="number" value="16.972" step="0.001" id="fert_ca_ca"/>
347
+ <span class="fert-cell">-</span>
348
+ <span class="fert-cell">-</span>
349
+ <input class="fert-input" type="number" step="0.001" id="calcium_nitrate"/>
350
+ </div>
351
+
352
  <div class="fert-row">
353
  <span class="fert-name">KNO3</span>
354
  <span class="fert-cell">-</span>
 
397
  <input class="fert-input" type="number" step="0.001" id="monopotassium_phosphate"/>
398
  </div>
399
 
 
400
  <div class="fert-row">
401
+ <span class="fert-name">K2SO4</span>
402
+ <span class="fert-cell">-</span>
403
+ <span class="fert-cell">-</span>
404
+ <span class="fert-cell">-</span>
405
+ <input class="fert-input" type="number" value="44.874" step="0.001" id="fert_k2so4_k"/>
406
+ <span class="fert-cell">-</span>
407
+ <span class="fert-cell">-</span>
408
+ <input class="fert-input" type="number" value="18.401" step="0.001" id="fert_k2so4_s"/>
409
+ <input class="fert-input" type="number" step="0.001" id="potassium_sulfate"/>
410
+ </div>
411
+
412
+ <!-- Добавленные строки для Fe и Micro -->
413
+ <div class="fert-row">
414
+ <span class="fert-name">Fe</span>
415
+ <span class="fert-cell">-</span>
416
+ <span class="fert-cell">-</span>
417
  <span class="fert-cell">-</span>
418
  <span class="fert-cell">-</span>
419
  <span class="fert-cell">-</span>
420
  <span class="fert-cell">-</span>
 
421
  <span class="fert-cell">-</span>
422
+ <input class="fert-input" type="number" step="0.001" id="iron_amount">
 
423
  </div>
424
 
425
+ <div class="fert-row">
426
+ <span class="fert-name">Micro</span>
427
+ <span class="fert-cell">-</span>
428
+ <span class="fert-cell">-</span>
429
+ <span class="fert-cell">-</span>
430
+ <span class="fert-cell">-</span>
431
+ <span class="fert-cell">-</span>
432
+ <span class="fert-cell">-</span>
433
+ <span class="fert-cell">-</span>
434
+ <input class="fert-input" type="number" step="0.001" id="micro_amount">
435
+ </div>
436
  </div>
437
  </fieldset>
438
  <fieldset class="calculation-box">
 
472
  </div>
473
  </div>
474
  </fieldset>
475
+ </body>
476
 
477
 
478
 
479
 
480
  <script>
481
  let call_data;
482
+
483
+ document.getElementById('calculate-btn').addEventListener('click', function() {
484
  console.log("=== НАЧАЛО ОБРАБОТКИ ===");
485
+
486
  // 1. Получаем значение точности округления с подробным логированием
487
  const roundingInput = document.getElementById('rounding-precision');
488
  console.log("Значение поля rounding-precision (raw):", roundingInput.value);
489
+
490
  const initialRounding = parseInt(roundingInput.value);
491
  console.log("Парсинг значения rounding (после parseInt):", initialRounding);
492
+
493
  const roundingPrecision = Math.min(Math.max(initialRounding || 3, 0), 6);
494
  console.log("Финальное значение точности (0-6):", roundingPrecision);
495
+
496
  // 2. Улучшенная функция для безопасного получения числового значения с логированием
497
  const getValue = (id) => {
498
  const element = document.getElementById(id);
 
501
  return 0;
502
  }
503
  console.log(`Значение поля ${id}:`, element.value);
504
+
505
  const value = parseFloat(element.value);
506
  const result = isNaN(value) ? 0 : value;
507
+
508
  console.log(`Парсинг значения ${id}:`, result);
509
  return result;
510
  };
 
511
  // 3. Формируем данные для сервера с пошаговым логированием
512
  console.log("=== ФОРМИРОВАНИЕ ДАННЫХ ДЛЯ СЕРВЕРА ===");
513
+
514
  const fertilizerConstants = {
515
+ "Кальциевая селитра": {
516
+ "N (NO3-)": getValue('fert_ca_no3') / 100,
517
+ "Ca": getValue('fert_ca_ca') / 100
518
+ },
519
  "Калий азотнокислый": {
520
  "N (NO3-)": getValue('fert_kno3_no3') / 100,
521
  "K": getValue('fert_kno3_k') / 100
 
532
  "P": getValue('fert_kh2po4_p') / 100,
533
  "K": getValue('fert_kh2po4_k') / 100
534
  },
535
+ "Калий сернокислый": {
536
+ "K": getValue('fert_k2so4_k') / 100,
537
+ "S": getValue('fert_k2so4_s') / 100
538
  }
539
  };
540
+
541
  const profileSettings = {
542
  'P': getValue('profile_p'),
543
  'K': getValue('profile_k'),
 
549
  'liters': parseInt(document.getElementById('liters-input').value) || 1,
550
  'rounding_precision': roundingPrecision
551
  };
552
+
553
  const requestData = {
554
  fertilizerConstants: fertilizerConstants,
555
  profileSettings: profileSettings
556
  };
557
+
558
  console.log("=== ПОЛНЫЙ ОБЪЕКТ ДЛЯ ОТПРАВКИ ===", JSON.stringify(requestData, null, 2));
559
+
560
  // 4. Проверка данных с подробным выводом
561
  console.log("=== ПРОВЕРКА ДАННЫХ ===");
562
+
563
+ const requiredFertilizers = ["Кальциевая селитра", "Калий азотнокислый", "Аммоний азотнокислый",
564
+ "Сульфат магния", "Монофосфат калия", "Калий сернокислый"];
565
+
 
 
 
 
 
566
  let hasErrors = false;
567
  for (const fert of requiredFertilizers) {
568
  if (!requestData.fertilizerConstants[fert]) {
 
572
  console.log(`Удобрение ${fert} присутствует`);
573
  }
574
  }
575
+
576
  const requiredProfileFields = ['P', 'K', 'Mg', 'Ca', 'S', 'NO3_RAT', 'TOTAL_NITROG'];
577
  for (const field of requiredProfileFields) {
578
  if (isNaN(requestData.profileSettings[field])) {
 
582
  console.log(`Параметр ${field} в порядке:`, requestData.profileSettings[field]);
583
  }
584
  }
585
+
586
  console.log("Параметр rounding_precision:", requestData.profileSettings.rounding_precision);
587
+
588
  if (hasErrors) {
589
  const errorMsg = "Пожалуйста, проверьте введенные данные. Обнаружены ошибки в форме. Смотрите консоль для деталей.";
590
  console.error(errorMsg);
591
  alert(errorMsg);
592
  return;
593
  }
 
594
  // 5. Отправка данных на сервер с полным логированием
595
  console.log("=== ОТПРАВКА ДАННЫХ НА СЕРВЕР ===");
596
+
597
  fetch('/calculation', {
598
  method: 'POST',
599
  headers: {
 
601
  },
602
  body: JSON.stringify(requestData)
603
  })
604
+ .then(response => {
605
+ console.log("Получен ответ от сервера. Статус:", response.status);
606
+
607
+ if (!response.ok) {
608
+ console.error("ОШИБКА СЕРВЕРА. Полный ответ:", response);
609
+ throw new Error(`HTTP error! status: ${response.status}`);
610
+ }
611
+ return response.json();
612
+ })
613
+ .then(data => {
614
+ call_data = data;
615
+ console.log("=== УСПЕШНЫЙ ОТВЕТ ОТ СЕРВЕРА ===", call_data);
616
  // Выводим данные в форму
617
+ data_out(call_data);
618
+ // Проверяем, применилась ли точность округления
619
+ console.log("Проверка округления в ответе:");
620
+ if (data.fertilizers) {
621
+ Object.entries(data.fertilizers).forEach(([name, values]) => {
622
+ console.log(`Удобрение ${name}:`, values);
623
+ });
624
+ }
625
+
626
+ // Здесь можно добавить обработку ответа
627
+ })
628
+ .catch(error => {
629
+ console.error("=== ОШИБКА ПРИ ОБРАБОТКЕ ===", error);
630
+ alert("Ошибка при расчете: " + error.message);
631
+ })
632
+ .finally(() => {
633
+ console.log("=== ЗАВЕРШЕНИЕ ОБРАБОТКИ ===");
634
+ });
635
  });
636
 
637
+
638
+
639
+
640
  function data_out(response) {
641
+
642
+
643
  // Заполняем граммы для каждого удобрения
644
  const fertilizerGrams = {
645
+ "Кальциевая селитра": "calcium_nitrate",
646
  "Калий азотнокислый": "potassium_nitrate",
647
  "Аммоний азотнокислый": "ammonium_nitrate",
648
  "Сульфат магния": "magnesium_sulfate",
649
  "Монофосфат калия": "monopotassium_phosphate",
650
+ "Калий сернокислый": "potassium_sulfate"
651
  };
652
 
653
  for (const [fertName, gramsFieldId] of Object.entries(fertilizerGrams)) {
 
670
 
671
  console.log("Данные успешно выведены в форму");
672
  }
673
+
674
+
675
+
676
  </script>
677
 
678
 
679
+
680
 
681
  </body>
682
  </html>