Введение. В Эфиопии концепция «экуб» долгое время была традиционным способом экономии денег и укрепления чувства общности. Практика предполагает, что группа лиц периодически вносит определенную сумму денег и по очереди получает объединенные средства. Чтобы перенести эту традиционную практику в эпоху цифровых технологий, мы разработали веб-приложение Ekub с использованием HTML, CSS и JavaScript. В этой статье мы познакомим вас с кодом и объясним функциональность каждого компонента.

Структура HTML. Структура HTML начинается с необходимых метатегов и включения внешних библиотек CSS и JavaScript. Заголовок страницы установлен на «Eqube», а в качестве значка добавлен собственный логотип. Основной макет состоит из панели навигации, за которой следуют два столбца. Левый столбец содержит форму для ввода информации пользователями, а правый столбец отображает список участников и возможность определить победителя. Также есть дополнительные разделы для отображения имени победителя и общей суммы собранных денег.

 <nav class="navbar navbar-expand-sm bg-dark navbar-dark">
    <div class="container-fluid">
      <span class="navbar-text">Ekub(እቁብ)</span>
    </div>
  </nav>
  <div class="container">
    <div class="row">
      <div class="col-md-6 mt-3">
        <div class="card border-0 shadow-lg pb-3 rounded-3" id="card1">
          <div class="card-title">
            <h4 class="text-center mt-3">Ekub Form (የእቁብ ፎርም)</h4>
          </div>
          <div class="card-body">
            <p class="fw-bold">Enter Your Information Carefully!</p>
            <form>
              <label for="fname" id="fnamelabel" class="text-danger" style="visibility: hidden">* Please enter your name</label>
              <input type="text" class="form-control" placeholder="Name" name="" id="fname" />
              <label for="pnumber" id="pnumberlabel" class="text-danger" style="visibility: hidden">* Please enter your phone number</label>
              <input type="tel" class="form-control" placeholder="Phone Number" name="" id="pnumber" />
              <label for="moneyOption" id="moneyOptionlabel" class="text-danger" style="visibility: hidden">* Please select an option</label>
              <select class="form-select" id="moneyOption">
                <option selected value="0">Select Option</option>
                <option value="100">100</option>
                <option value="500">500</option>
                <option value="1000">1000</option>
              </select>
              <button type="button" class="btn btn-dark mt-4" onclick="validation()">Pay</button>
            </form>
          </div>
        </div>
      </div>

      <div class="col-md-6 mt-3">
        <div class="card border-0 shadow-lg m-0 p-0 rounded-3">
          <div class="card-title">
            <h4 class="text-center mt-3">Ekubtegna(እቁብተኛ)</h4>
          </div>
          <div class="card-body mb-0">
            <div class="table-responsive">
              <table class="table table-bordered">
                <thead>
                  <tr>
                    <th scope="col">Name</th>
                    <th scope="col">Phone Number</th>
                    <th scope="col">Amount</th>
                  </tr>
                </thead>
                <tbody id="printForm"></tbody>
              </table>
            </div>
          </div>
          <div class="card-footer">
            <div class="d-grid gap-2">
              <button class="btn btn-success" id="generate">Generate Winner</button>
            </div>
          </div>
        </div>
      </div>
    </div>
    <div class="row mt-4">
      <div class="col-md-12">
        <div class="card border-0 shadow-lg pb-3 rounded-3">
          <div class="card-title">
            <h4 class="text-center mt-3">Ekub Winner(እቁብ አሸናፊ)</h4>
          </div>
          <div class="card-body">
            <div id="printWin" class="text-center"></div>
          </div>
        </div>
      </div>
    </div>
    <div class="row mt-4">
      <div class="col-md-12">
        <div class="card border-0 shadow-lg pb-3 rounded-3">
          <div class="card-body">
            <h4 class="text-center mt-3">Total Amount:</h4>
            <h1 class="text-center mt-3" id="totalMoney">0</h1>
          </div>
        </div>
      </div>
    </div>
  </div>

Стили с помощью CSS. Чтобы улучшить визуальную привлекательность веб-приложения, мы применили несколько пользовательских стилей CSS. Цвет фона тела установлен в темный оттенок, создавая визуально привлекательный контраст с содержимым. Разделу «card1», содержащему форму, присваивается характерный зелено-желтый цвет фона, что делает его визуально отличным от других разделов.

  <style>
    body {
      background-color: #03000f;
    }

    #card1 {
      background-color: greenyellow;
    }
  </style>

Проверка формы и сбор данных. Код JavaScript обрабатывает проверку формы и сбор пользовательских данных. Когда пользователь отправляет форму, срабатывает функция проверки. Он проверяет, правильно ли заполнены все обязательные поля, такие как имя, номер телефона и выбранная опция. Если какое-либо поле отсутствует или неверно, рядом с соответствующим полем ввода отображается метка ошибки. После проверки формы информация о пользователе сохраняется в массивах вместе с соответствующей внесенной суммой. Общая сумма также обновляется с каждым представлением.

Сгенерировать победителя. При нажатии кнопки «Создать победителя» из собранных данных выбирается случайный участник. Имя победителя отображается в специально отведенном разделе вместе с поздравительным сообщением. Эта функция добавляет элемент волнения и предвкушения к опыту Ekub, даже в онлайн-сфере.

Отображение информации об участнике. Когда участники отправляют свою информацию, она динамически отображается в таблице в правом столбце веб-приложения. Каждая строка таблицы представляет участника с указанием его имени, номера телефона и внесенной суммы. Это отображение информации об участниках в режиме реального времени способствует прозрачности и информирует всех о текущем Ekub.

<script>
    var globalFname = [];
    var globalPhone = [];
    var globalAmount = [];
    var index = 0;
    var total = 0;

    function validation() {
      var fname = document.getElementById("fname");
      var phonoNumber = document.getElementById("pnumber");
      var amount = document.getElementById("moneyOption");
      var fnameLabel = document.getElementById("fnamelabel");
      var phonoNumberLabel = document.getElementById("pnumberlabel");
      var amountLabel = document.getElementById("moneyOptionlabel");

      // Reset error labels
      fnameLabel.style.visibility = "hidden";
      phonoNumberLabel.style.visibility = "hidden";
      amountLabel.style.visibility = "hidden";

      if (fname.value.trim() === "" && phonoNumber.value.trim() === "" && amount.value === "0") {
        fnameLabel.style.visibility = "visible";
        phonoNumberLabel.style.visibility = "visible";
        amountLabel.style.visibility = "visible";
      } else if (fname.value.trim() === "") {
        fnameLabel.style.visibility = "visible";
      } else if (phonoNumber.value.trim() === "") {
        phonoNumberLabel.style.visibility = "visible";
      } else if (amount.value === "0") {
        amountLabel.style.visibility = "visible";
      } else {
        globalFname[index] = fname.value;
        globalPhone[index] = phonoNumber.value;
        globalAmount[index] = parseInt(amount.value);
        total += globalAmount[index];

        var formRow = document.createElement("tr");
        formRow.innerHTML =
          "<td class='border'>" +
          globalFname[index] +
          "</td>" +
          "<td class='border'>" +
          globalPhone[index] +
          "</td>" +
          "<td class='border'>" +
          globalAmount[index] +
          "</td>";

        document.getElementById("printForm").appendChild(formRow);

        fname.value = "";
        phonoNumber.value = "";
        amount.value = "0";
        index++;
      }
    }

    document.getElementById("generate").addEventListener("click", function () {
      var randomIndex = Math.floor(Math.random() * index);
      var winner = globalFname[randomIndex];
      document.getElementById("printWin").innerHTML =
        "<h4>Congratulations to the winner:</h4><h3>" + winner + "</h3>";

      var totalMoney = document.getElementById("totalMoney");
      totalMoney.innerHTML = total;
    });
  </script>

Вывод. Разработанное нами веб-приложение Ekub предоставляет цифровую платформу, позволяющую отдельным лицам участвовать в онлайн-сберегательной группе. Используя HTML, CSS и JavaScript, мы создали удобный интерфейс, облегчающий отправку форм, проверку, создание победителей и отображение информации об участниках. Это веб-приложение сохраняет суть традиционной практики Ekub, сочетая удобство и эффективность цифрового мира.

Смело смотрите мой код: https://bereket0.github.io/ekub/