Просмотр исходного кода

Home page front-end redesign

- Removed unnecessary files
- Some JS scripts rewritten and comments added
- Reworked some .css files
- Fixed template layout
TonyKurts 11 месяцев назад
Родитель
Сommit
d8d2371090

+ 93 - 0
SharixAdmin/static/SharixAdmin/css/style.css

@@ -0,0 +1,93 @@
+@import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;700&display=swap');
+
+* {
+    font-family: 'Open Sans', sans-serif;
+    margin: 0;
+    padding: 0;
+    box-sizing: border-box;
+}
+
+.content {
+    max-width: 1920px;
+    min-width: 800px;
+    min-height: 100vh;
+}
+
+.border {
+    border-color: #D8D8D8 !important;
+}
+
+.rounded {
+    border-radius: 0.5rem !important;
+}
+
+.box-shadow {
+    box-shadow: 4px 5px 40px 0px #E5E5E5;
+}
+
+#menu-bar {
+    position: fixed;
+    z-index: 32;
+    user-select: none;
+    transition-duration: 0.4s;
+}
+
+.menu-bar-label {
+    position: absolute;
+    margin-left: 2rem;
+    transition-duration: 0.4s;
+    width: max-content;
+}
+
+#menu-bar-img-arrow {
+    width: 24px;
+    height: 24px;
+    color: #0081ff;
+    transition-duration: 0.4s;
+}
+
+#user-workspace {
+    transition-duration: 0.4s;
+}
+
+#loader-wrapper {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background-color: rgba(255, 255, 255, 1); /* Полупрозрачный белый цвет */
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    z-index: 9999; /* Помещаем поверх всех остальных элементов */
+}
+  
+#loader {
+    border: 8px solid #f3f3f3; /* Светло-серый */
+    border-top: 8px solid #3498db; /* Синий */
+    border-radius: 50%;
+    width: 50px;
+    height: 50px;
+    animation: spin 1.5s linear infinite; /* Анимация вращения */
+}
+
+@keyframes spin {
+    0% { transform: rotate(0deg); }
+    100% { transform: rotate(360deg); }
+}
+
+.nav-link {
+    height: 48px;
+    display: flex;
+    align-items: center;
+}
+
+.nav-img {
+    width: 22px;
+    height: 22px;
+}
+
+.active .menu-bar-label {
+    color: white;
+}

+ 0 - 0
SharixAdmin/static/SharixAdmin/img/menu/tikets.svg → SharixAdmin/static/SharixAdmin/img/menu/tickets.svg


+ 0 - 0
SharixAdmin/static/SharixAdmin/img/menu/tikets_w.svg → SharixAdmin/static/SharixAdmin/img/menu/tickets_w.svg


+ 48 - 0
SharixAdmin/static/SharixAdmin/js/menu-bar.js

@@ -0,0 +1,48 @@
+// Получаем элементы из DOM
+const menuBarEl = document.getElementById('menu-bar'); // Элемент меню
+const menuBarImgArrowEl = document.getElementById('menu-bar-img-arrow'); // Элемент стрелки в меню
+const menuBarLabelEls = document.querySelectorAll('.menu-bar-label'); // Коллекция элементов меток в меню
+const userWorkspaceEl = document.getElementById('user-workspace'); // Элемент рабочей области пользователя
+
+// Проверяем, открыто ли меню, и устанавливаем значение по умолчанию, если в localStorage нет информации
+if (localStorage.getItem('menuBarOpened') === null) localStorage.setItem('menuBarOpened', true);
+
+// Функция для управления видимостью меню
+function menuBarControll() {
+    // Получаем значение открытия меню из localStorage
+    let menuBarOpened = localStorage.getItem('menuBarOpened');
+    let menuBarWidth;
+
+    // Устанавливаем ширину меню в зависимости от его состояния (открыто/закрыто)
+    if (menuBarOpened === 'true') {
+        // Ширина меню при закрытом состоянии
+        menuBarWidth = 74; 
+        // Устанавливаем нулевую прозрачность для каждой метки в меню
+        menuBarLabelEls.forEach(function(el) { el.style.opacity = 0; });
+        // Поворачиваем стрелку на 0 градусов
+        menuBarImgArrowEl.style.transform = 'rotate(0deg)';
+    } else {
+        // Ширина меню при октрытом состоянии
+        menuBarWidth = 280;
+        // Устанавливаем полную прозрачность для каждой метки в меню
+        menuBarLabelEls.forEach(function(el) { el.style.opacity = 1; });
+        // Поворачиваем стрелку на 180 градусов
+        menuBarImgArrowEl.style.transform = 'rotate(180deg)';
+    }
+
+    // Устанавливаем необходимую ширину меню и отступ рабочей области пользователя
+    menuBarEl.style.minWidth = menuBarWidth + 'px';
+    userWorkspaceEl.style.marginLeft = menuBarWidth + 16 + 'px';
+}
+
+// Функция для переключения состояния открытия меню
+function menuBarSwitch() {
+    // Получаем текущее значение открытия меню из localStorage
+    let menuBarOpened = localStorage.getItem('menuBarOpened');
+    // Инвертируем значение (true -> false, false -> true)
+    menuBarOpened = menuBarOpened === 'true' ? false : true;
+    // Сохраняем новое значение в localStorage
+    localStorage.setItem('menuBarOpened', menuBarOpened);
+    // Вызываем функцию управления меню для обновления его внешнего вида
+    menuBarControll();
+}

+ 0 - 61
SharixAdmin/static/drf-yasg/navbar-style.css

@@ -1,61 +0,0 @@
-@import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;700&display=swap');
-
-* {
-    font-family: 'Open Sans', sans-serif;
-    margin: 0;
-    padding: 0;
-    box-sizing: border-box;
-}
-body {
-    height: 130vh;
-}
-
-.nav-item {
-    margin-bottom: 6px;
-    font-size: 16px;
-    line-height: 24px;
-}
-.footer-item {
-    margin-top: 4px;
-    font-size: 14px;
-    color: #3F3F3F;
-    font-weight: 400;
-}
-.footer-color{
-    color: #479FF8;
-}
-.footer-link a{
-    text-decoration: none;
-}
-.arrow {
-    margin: auto;
-    color: #479FF8;
-}
-.rectangle-arrow {
-    position: fixed;
-    display: flex;
-    top: 0;
-    left: 0;
-    width: 78px;
-    height: 40px;
-    align-items: center;
-    vertical-align: middle;
-    border-radius: 6px;
-    border: 1px solid #D8D8D8;
-    background: #FFF;
-    box-shadow: 4px 5px 40px 0px #E5E5E5;
-    margin-top: 24px;
-    margin-left: 10px;
-    justify-content: center;
-}
-.nav-item span {
-    margin-left: 4px;
-}
-.nav-pills .nav-link {
-    height: 48px;
-    display: flex;
-
-}
-.link {
-    margin-top: 4px;
-}

+ 0 - 21
SharixAdmin/static/drf-yasg/style.css

@@ -1,24 +1,3 @@
-html {
-    box-sizing: border-box;
-    overflow: -moz-scrollbars-vertical;
-    overflow-y: scroll;
-}
-
-*,
-*:before,
-*:after {
-    box-sizing: inherit;
-}
-
-body {
-    margin: 0;
-    padding: 0;
-}
-
-body.swagger-body {
-    background: #fafafa;
-}
-
 .hidden {
     display: none;
 }

+ 12 - 7
SharixAdmin/templates/SharixAdmin/base.html

@@ -1,20 +1,25 @@
 {% load static %}
+
 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <link rel="shortcut icon" href="{% static 'SharixAdmin/img/logo.png' %}"/>
-    <link rel="stylesheet" href="{% static 'drf-yasg/navbar-style.css' %}" >
-    <link rel="stylesheet" href="{% static 'drf-yasg/service_type.css' %}" >
+    <link rel="shortcut icon" href="{% static 'SharixAdmin/img/logo.png' %}">
+    <link rel="stylesheet" href="{% static 'drf-yasg/navbar-style.css' %}">
+    <link rel="stylesheet" href="{% static 'drf-yasg/service_type.css' %}">
     <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
-    <link type="text/css" href="{% static 'drf-yasg/colors2.css' %}" rel="stylesheet" />
+    <link href="{% static 'drf-yasg/colors2.css' %}" rel="stylesheet">
+    
+    <link rel="stylesheet" href="{% static 'SharixAdmin/css/style.css' %}">
+
     <title>{{ title }}</title>
 </head>
-<body style="min-width: 1050px;">
-    {% block content %}
-    {% endblock %}
+
+<body>
+    {% block content %}{% endblock %}
+    
     <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
 </body>
 </html>

+ 174 - 161
SharixAdmin/templates/SharixAdmin/index.html

@@ -3,177 +3,190 @@
 {% load static %}
 
 {% block content %}
+<div id="loader-wrapper">
+  <div id="loader"></div>
+</div>
 
+<div class="content p-4 mx-auto d-flex flex-column justify-content-between">
+  <nav id="menu-bar">
+    <button class="bg-white border box-shadow rounded mb-2 px-4 py-1" onclick="menuBarSwitch()">
+        <img id="menu-bar-img-arrow" src="{% static 'SharixAdmin/img/menu/arrow-right.svg' %}">
+    </button>
 
-<input type="checkbox" name="" style="display: none;" checked id="hideMenuCheckBox">
-<div class="container-fluid">
-    <div class="row">
-        <div class="col-3" id="leftmainpage">
-            <div class="d-flex flex-column p-2" style="width: 100%; min-width: 72px; max-width: 280px; height: 464px; position: sticky; top: 76px;
-            border-radius: 10px; border: 1px solid #D8D8D8; box-shadow: 4px 5px 40px 0px #E5E5E5;">
+    <ul class="d-flex flex-column nav nav-pills rounded box-shadow border p-2 bg-white">
+      <li class="nav-item">
+        <a href="{% url "home" %}" class="nav-link {% if current_page == "index" %}active rounded{% endif %}">
+          <div class="link d-flex align-items-center">
+            <img
+              class="nav-img"
+              src="
+                {% if current_page == "index" %}
+                  {% static 'SharixAdmin/img/menu/house_w.svg' %}
+                {% else %}
+                  {% static 'SharixAdmin/img/menu/house.svg' %}
+                {% endif %}">
+            <span class="menu-bar-label">Главная</span>
+          </div>
+        </a>
+      </li>
+      <li class="nav-item">
+        <a href="{% url 'tickets:ticket_list_list' %}" class="nav-link {% if current_page == "tickets" %}active rounded{% endif %}">
+          <div class="link d-flex align-items-center">
+            <img
+              class="nav-img"
+              src="
+                {% if current_page == "tickets" %}
+                  {% static 'SharixAdmin/img/menu/tickets_w.svg' %}
+                {% else %}
+                  {% static 'SharixAdmin/img/menu/tickets.svg' %}
+                {% endif %}"> 
+            <span class="menu-bar-label">Заявки</span>
+          </div>
+        </a>
+      </li>
+      <li class="nav-item">
+        <a href="http://study.reversea.net/" class="nav-link {% if current_page == "education" %}active rounded{% endif %}">
+          <div class="link d-flex align-items-center">
+            <img
+              class="nav-img"
+              src="
+                {% if current_page == "education" %}
+                  {% static 'SharixAdmin/img/menu/education_w.svg' %}
+                {% else %}
+                  {% static 'SharixAdmin/img/menu/education.svg' %}
+                {% endif %}">
+            <span class="menu-bar-label">Курсы</span>
+          </div>
+        </a>
+      </li>
+      <li class="nav-item">
+        <a href="{% url 'partners' %}" class="nav-link {% if current_page == "partners" %}active rounded{% endif %}">
+          <div class="link d-flex align-items-center">
+            <img
+              class="nav-img"
+              src="
+                {% if current_page == "partners" %}
+                  {% static 'SharixAdmin/img/menu/people_w.svg' %}
+                {% else %}
+                  {% static 'SharixAdmin/img/menu/people.svg' %}
+                {% endif %}">
+            <span class="menu-bar-label">Партнеры</span>
+          </div>
+        </a>
+      </li>
+      <li class="nav-item">
+        <a href="{% url 'user_information' %}" class="nav-link {% if current_page == "none" %}active rounded{% endif %}">
+          <div class="link d-flex align-items-center">
+            <img
+              class="nav-img"
+              src="
+                {% if current_page == "none" %}
+                  {% static 'SharixAdmin/img/menu/hdd-network_w.svg' %}
+                {% else %}
+                  {% static 'SharixAdmin/img/menu/hdd-network.svg' %}
+                {% endif %}">
+            <span class="menu-bar-label">Управление правами</span>
+          </div>
+        </a>
+      </li>
+      <li class="nav-item">
+        <a href="{% url 'service_type' %}" class="nav-link {% if current_page == "service_type" %}active rounded{% endif %}">
+          <div class="link d-flex align-items-center">
+            <img
+              class="nav-img"
+              src="
+                {% if current_page == "service_type" %}
+                  {% static 'SharixAdmin/img/menu/briefcase_w.svg' %}
+                {% else %}
+                  {% static 'SharixAdmin/img/menu/briefcase.svg' %}
+                {% endif %}">
+            <span class="menu-bar-label">Услуги сервиса</span>
+          </div>
+        </a>
+      </li>
+      <li class="nav-item">
+        <a href="{% url 'trans' %}" class="nav-link {% if current_page == "transactions" %}active rounded{% endif %}">
+          <div class="link d-flex align-items-center">
+            <img
+              class="nav-img"
+              src="
+                {% if current_page == "transactions" %}
+                  {% static 'SharixAdmin/img/menu/clock-history_w.svg' %}
+                {% else %}
+                  {% static 'SharixAdmin/img/menu/clock-history.svg' %}
+                {% endif %}">
+            <span class="menu-bar-label">История заказов</span>
+          </div>
+        </a>
+      </li>
+      <li class="nav-item">
+        <a href="{% url 'service_information-add' %}" class="nav-link {% if current_page == "service_info" %}active rounded{% endif %}">
+          <div class="link d-flex align-items-center">
+            <img
+              class="nav-img"
+              src="
+                {% if current_page == "service_info" %}
+                  {% static 'SharixAdmin/img/menu/person_w.svg' %}
+                {% else %}
+                  {% static 'SharixAdmin/img/menu/person.svg' %}
+                {% endif %}">
+            <span class="menu-bar-label">Информация о сервисе</span>
+          </div>
+        </a>
+      </li>
+      <li class="nav-item">
+        <a href="{% url 'payment' %}" class="nav-link {% if current_page == "payment" %}active rounded{% endif %}">
+          <div class="link d-flex align-items-center">
+            <img
+              class="nav-img"
+              src="
+                {% if current_page == "payment" %}
+                  {% static 'SharixAdmin/img/menu/credit-card_w.svg' %}
+                {% else %}
+                  {% static 'SharixAdmin/img/menu/credit-card.svg' %}
+                {% endif %}">
+            <span class="menu-bar-label">Оплата</span>
+          </div>
+        </a>
+      </li>
+    </ul>
+  </nav>
 
+  <div id="user-workspace" class="p-5 border rounded box-shadow">
+      {% block contenthome %}{% endblock contenthome%}
+  </div>
 
-              <ul class="nav nav-pills flex-column mb-auto" style="margin-top: 12px;">
-                {% for item in menu %}
-                {% if item.link == url_path %}
-                <li class="nav-item">
-                  <a class="nav-link active" style="color: #FFF; border-radius: 10px;" >
-                    {% with 'SharixAdmin/img/menu/'|add:item.sel|add:'_w.svg' as image_static %}
-                    <div class="link">
-                      <img  src="{% static image_static %}" alt="" style="width: 22px; height: 22px;"> 
-                      {% endwith %}
-                      
-                      <span class="hidemenu" style="color: #FFF;">{{ item.title }}</span>
-                    </div>
-                  </a>
-                </li>
-                {% elif item.link == 'tickets' %}
-                <li class="nav-item">
-                  <a href="{% url 'tickets:ticket_list_list' %}" class="nav-link" >
-                    {% with 'SharixAdmin/img/menu/'|add:item.sel|add:'.svg' as image_static %}
-                    <div class="link">
-                      <img  src="{% static image_static %}" alt="" style="width: 22px; height: 22px;"> 
-                      {% endwith %}
-                      <span class="hidemenu">{{ item.title }}</span>
-                    </div>
-                  </a>
-                </li>
-                {% elif item.link == 'course' %}
-                <li class="nav-item">
-                  <a href="http://study.reversea.net/" class="nav-link" >
-                    {% with 'SharixAdmin/img/menu/'|add:item.sel|add:'.svg' as image_static %}
-                    <div class="link">
-                      <img  src="{% static image_static %}" alt="" style="width: 22px; height: 22px;"> 
-                      {% endwith %}
-                      <span class="hidemenu">{{ item.title }}</span>
-                    </div>
-                  </a>
-                </li>
-                {% else %}
-                <li class="nav-item">
-                  <a href="{% url item.link %}" class="nav-link" >
-                    {% with 'SharixAdmin/img/menu/'|add:item.sel|add:'.svg' as image_static %}
-                    <div class="link">
-                      <img  src="{% static image_static %}" alt="" style="width: 22px; height: 22px; "> 
-                      {% endwith %}
-                      <span class="hidemenu">{{ item.title }}</span>
-                    </div>
-                  </a>
-                </li>
-                {% endif%}
-                {% endfor %}
-              </ul>
-                <hr>
-                <div class="dropdown">
-                  <a href="#" aria-expanded="false">
-                    <img alt="" width="1" height="1" class="rounded-circle me-2">
-                    <strong id="user-name-exit"></strong>
-                  </a>
-                </div>
-              </div>      
-        </div>
-        <div class="col-9" id="rightmainpage">
-            <div class="d-flex flex-column p-4" 
-            style="
-            width: 100%; 
-            height: 857px; 
-            border: 1px solid #D8D8D8;
-            border-radius: 10px;
-            box-shadow: 4px 5px 40px 0px #E5E5E5;
-            margin-top: 76px;">
-            {% block contenthome %}
-            {% endblock contenthome%}
-        </div>
-            
-      </div>
+  <footer class="d-flex justify-content-between mt-3 p-2 align-items-center border rounded box-shadow">
+    <div>
+        <img class="rounded-circle" style="height: 48px" src="{% static 'SharixAdmin/img/user_avatar_1.png' %}"/>
+        <span class="mx-2">{{ phone }}</span>
     </div>
-
-    <div class="d-flex justify-content-between mt-2 p-2 align-items-center" id="footer"
-          style="border: 1px solid #D8D8D8; box-shadow: 4px 5px 40px 0px #E5E5E5; border-radius: 10px;">
-      <div>
-          <img class="rounded-circle" style="height: 48px" src="{% static 'SharixAdmin/img/user_avatar_1.png' %}"/>
-          <span class="mx-2">{{ phone }}</span>
-      </div>
-      <div>
-          <a class="ms-4" href="{% url 'contact' %}">{% trans 'Contacts' %}</a>
-          <a class="ms-4" href="https://wiki.sharix-app.org/doku.php/sharix/legal/soglashenie_s_servisom_na_ispolzovanie_platformy_sharix">{% trans 'Terms of use' %}</a>
-          <a class="ms-4 me-1" href="https://wiki.sharix-app.org/doku.php/sharix/legal/politika_konfidencialnosti_platformy_sharix">{% trans 'Privacy policy' %}</a>
-          <svg width="24" viewBox="0 0 24 24" fill="none" stroke="#479FF8" xmlns="http://www.w3.org/2000/svg">
-            <text x="9" y="16">
-                <a href="https://wiki.sharix-app.org/doku.php">?</a>
-            </text>
-            <circle cx="12" cy="12" r="11.5"/>
-          </svg>
-      </div>
+    <div>
+        <a class="ms-4" href="{% url 'contact' %}">{% trans 'Contacts' %}</a>
+        <a class="ms-4" href="https://wiki.sharix-app.org/doku.php/sharix/legal/soglashenie_s_servisom_na_ispolzovanie_platformy_sharix">{% trans 'Terms of use' %}</a>
+        <a class="ms-4 me-1" href="https://wiki.sharix-app.org/doku.php/sharix/legal/politika_konfidencialnosti_platformy_sharix">{% trans 'Privacy policy' %}</a>
+        <svg width="24" viewBox="0 0 24 24" fill="none" stroke="#479FF8" xmlns="http://www.w3.org/2000/svg">
+          <text x="9" y="16">
+              <a href="https://wiki.sharix-app.org/doku.php">?</a>
+          </text>
+          <circle cx="12" cy="12" r="11.5"/>
+        </svg>
     </div>
+  </footer>
 </div>
 
-<a class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-decoration-none" 
-onclick="barMenuHide()" 
-style="cursor: pointer; position: fixed; align-items: center;">
-  <div class="rectangle-arrow">
-    <img src="{% static 'SharixAdmin/img/menu/arrow-right.svg' %}" 
-    style="width: 24px; height: 24px; rotate: 180deg; color: #0081ff; transition-duration: 0.4s;" 
-    class="mx-3 my-2" id="row-bar-menu" alt="">
-    <span class="fs-4" id="sharix-menu-row"></span>
-  </div>
-</a>
+<script src="{% static 'SharixAdmin/js/menu-bar.js' %}"></script>
 
 <script>
-  hidemenu = document.getElementsByClassName('hidemenu')
-  shMenuRow = document.getElementById('sharix-menu-row')
-  usNameExit = document.getElementById('user-name-exit')
-  rightmainpage = document.getElementById('rightmainpage')
-  leftmainpage = document.getElementById('leftmainpage')
-  hideCheck = document.getElementById('hideMenuCheckBox')
-  rowBarMenu = document.getElementById('row-bar-menu')
-
-  function showmenu(){
-    rowBarMenu.style.transform = 'rotate(0deg)';
-    shMenuRow.style.display = "inline"
-      usNameExit.style.display = "inline"
-      leftmainpage.style.maxWidth = "310px"
-      leftmainpage.classList.remove("col-1")
-      leftmainpage.classList.add("col-3")
-      rightmainpage.classList.remove("col-11")
-      rightmainpage.classList.add("col-9")
-      for(var i = 0; i < hidemenu.length; i++){
-       hidemenu[i].style.display = "inline"; // depending on what you're doing
-      }
-  }
-  function hide(){
-    rowBarMenu.style.transform = 'rotate(180deg)';
-    shMenuRow.style.display = "none"
-    usNameExit.style.display = "none"
-    leftmainpage.style.maxWidth = "100px"
-    leftmainpage.classList.remove("col-3")
-    leftmainpage.classList.add("col-1")
-    rightmainpage.classList.remove("col-9")
-    rightmainpage.classList.add("col-11")
-    for(var i = 0; i < hidemenu.length; i++){
-      hidemenu[i].style.display = "none"; // depending on what you're doing
-    }
-  }
-  function barMenuHide(){
-    if(hideCheck.checked == true){
-      hideCheck.checked = false
-      hide()
-    } else {
-      hideCheck.checked = true
-      showmenu()
-    }
-  }
-  if(hideCheck.checked == true){
-      showmenu()
-    } else {
-      hide()
-    }
-  
-  
-</script>
-
-
-
+  // Запуск некоторых функций после загрузки страницы
+  document.addEventListener('DOMContentLoaded', function() {
+    menuBarControll();
+  });
 
+  // Функция для скрытия экрана загрузки
+  function hideLoader() { document.getElementById("loader-wrapper").style.display = "none"; }
 
+  // Скрыть экран загрузки через 4 секунды
+  setTimeout(hideLoader, 400);
+</script>
 {% endblock %}

+ 32 - 34
SharixAdmin/templates/SharixAdmin/main.html

@@ -2,40 +2,38 @@
 {% load i18n %}
 
 {% block contenthome %}
-<div class="container">
-    <h1 class="mainHeader">{{ title }}</h1>
-    <p class="description_service">Это система управления государством, источником власти в которой является сам народ. Именно народ решает, какие законы и нормы необходимы для гармоничного существования и развития государства. Таким образом, каждый человек в демократическом обществе 
-        Получает определенный набор свобод и обязательств сформированных с учетом интересов всего сообщества. Исходя из вышесказанного, можно заключить, что демократия – это возможность для каждого человека свободно участвовать в непосредственном управлении своим государством, обществом и личной судьбой в конечном счете.</p>    
-    <div class="container" style="padding: 2px;">
-        <div class="row fs-6">
+<h1 class="mainHeader">{{ title }}</h1>
+<p class="description_service">Это система управления государством, источником власти в которой является сам народ. Именно народ решает, какие законы и нормы необходимы для гармоничного существования и развития государства. Таким образом, каждый человек в демократическом обществе 
+    Получает определенный набор свобод и обязательств сформированных с учетом интересов всего сообщества. Исходя из вышесказанного, можно заключить, что демократия – это возможность для каждого человека свободно участвовать в непосредственном управлении своим государством, обществом и личной судьбой в конечном счете.</p>    
+<div class="container" style="padding: 2px;">
+    <div class="row fs-6">
+        
+        <div class="col-6 ">
+            <ul class="list-group">
+                <li class="list-group-item light"><strong>{% trans 'Documentation' %}</strong> </li>
+                <li class="list-group-item"><a  href="https://wiki.sharix-app.org/doku.php/sharix/legal/politika_konfidencialnosti_platformy_sharix">{% trans 'Privacy policy' %}</a></li>
+                <li class="list-group-item"><a  href="https://wiki.sharix-app.org/doku.php/sharix/legal/pravila_okazanija_uslug">{% trans 'Rules for the provision of services' %}</a></li>
+                <li class="list-group-item"><a  href="https://wiki.sharix-app.org/doku.php/sharix/legal/porjadok_okazanija_uslug">{% trans 'Procedure for the provision of services' %}</a></li>
+                <li class="list-group-item"><a  href="https://wiki.sharix-app.org/doku.php/sharix/legal/perechen_uslug_platformy">{% trans 'List of services' %}</a></li>
+                <li class="list-group-item"><a  href="{% url 'schemav1' %}">{% trans 'Scheme 1' %}</a> / <a  href="{% url 'schemav2' %}">{% trans 'Scheme 2' %}</a> / <a  href="{% url 'schema' %}">{% trans 'Scheme 3' %}</a> / <a  href="{% url 'schema-redoc' %}">{% trans 'API Docs' %}</a></li>
             
-            <div class="col-6 ">
-                <ul class="list-group">
-                    <li class="list-group-item light"><strong>{% trans 'Documentation' %}</strong> </li>
-                    <li class="list-group-item"><a  href="https://wiki.sharix-app.org/doku.php/sharix/legal/politika_konfidencialnosti_platformy_sharix">{% trans 'Privacy policy' %}</a></li>
-                    <li class="list-group-item"><a  href="https://wiki.sharix-app.org/doku.php/sharix/legal/pravila_okazanija_uslug">{% trans 'Rules for the provision of services' %}</a></li>
-                    <li class="list-group-item"><a  href="https://wiki.sharix-app.org/doku.php/sharix/legal/porjadok_okazanija_uslug">{% trans 'Procedure for the provision of services' %}</a></li>
-                    <li class="list-group-item"><a  href="https://wiki.sharix-app.org/doku.php/sharix/legal/perechen_uslug_platformy">{% trans 'List of services' %}</a></li>
-                    <li class="list-group-item"><a  href="{% url 'schemav1' %}">{% trans 'Scheme 1' %}</a> / <a  href="{% url 'schemav2' %}">{% trans 'Scheme 2' %}</a> / <a  href="{% url 'schema' %}">{% trans 'Scheme 3' %}</a> / <a  href="{% url 'schema-redoc' %}">{% trans 'API Docs' %}</a></li>
-                
-                  </ul>
-            </div>
-            <div class="col-6 text-end">
-              {% blocktrans trimmed with request.user.username as user %}
-              <p>User: <b>{{ user }}</b></p>
-              {% endblocktrans %}
-              {% blocktrans trimmed %}
-              <p>Phone number: <b>{{ phone }}</b></p>
-              {% endblocktrans %}
-              {% blocktrans trimmed with request.user.date_joined as date %}
-              <p>Date of registration: <b>{{ date }}</b></p>
-              {% endblocktrans %}
-              {% blocktrans trimmed with wallet.balance as balance %}
-              <p>Balance: <b>{{ balance }} points</b></p>
-              {% endblocktrans %}
-                <a href="{% url 'balance' %}" class="btn btn-success">{% trans 'Buy points' %}</a>
-            </div>
+                </ul>
+        </div>
+        <div class="col-6 text-end">
+            {% blocktrans trimmed with request.user.username as user %}
+            <p>User: <b>{{ user }}</b></p>
+            {% endblocktrans %}
+            {% blocktrans trimmed %}
+            <p>Phone number: <b>{{ phone }}</b></p>
+            {% endblocktrans %}
+            {% blocktrans trimmed with request.user.date_joined as date %}
+            <p>Date of registration: <b>{{ date }}</b></p>
+            {% endblocktrans %}
+            {% blocktrans trimmed with wallet.balance as balance %}
+            <p>Balance: <b>{{ balance }} points</b></p>
+            {% endblocktrans %}
+            <a href="{% url 'balance' %}" class="btn btn-success">{% trans 'Buy points' %}</a>
         </div>
     </div>
-</div>    
-{% endblock contenthome %}
+</div>  
+{% endblock %}

+ 3 - 15
SharixAdmin/templates/SharixAdmin/service_type.html

@@ -4,8 +4,6 @@
 {% load static %}
 
 {% block contenthome %}
-
-
 <style>
   a {
     color: black;
@@ -16,26 +14,16 @@
   }
 </style>
 
-
-    
-    <div class="container">
-      <h1 class="mainHeader">{{ title }}</h1>
-      <p class="description_service">Это система управления государством, источником власти в которой является сам народ. Именно народ решает, какие законы и нормы необходимы для гармоничного существования и развития государства. Таким образом, каждый человек в демократическом обществе 
+<h1 class="mainHeader">{{ title }}</h1>
+<p class="description_service">Это система управления государством, источником власти в которой является сам народ. Именно народ решает, какие законы и нормы необходимы для гармоничного существования и развития государства. Таким образом, каждый человек в демократическом обществе 
         Получает определенный набор свобод и обязательств сформированных с учетом интересов всего сообщества. Исходя из вышесказанного, можно заключить, что демократия – это возможность для каждого человека свободно участвовать в непосредственном управлении своим государством, обществом и личной судьбой в конечном счете.</p>
       <div class="row justify-content-start">
           <div class="maintable" id="maintable">
             {% render_table table %}
           </div>     
-
-
-
-  </div>
+      </div>
 
   <div class="container text-end mt-2">
     <a class="btn btn-primary" id="bord" href="/service_type/add">{% trans 'Add' %}</a>
   </div>
-  
-
-
-
 {% endblock contenthome %}

+ 0 - 3
SharixAdmin/tests.py

@@ -1,3 +0,0 @@
-from django.test import TestCase
-
-# Create your tests here.

+ 2 - 2
SharixAdmin/urls.py

@@ -19,7 +19,7 @@ urlpatterns = [
     path('transactions/<int:trans_id>/', trans_id, name='transid'),
     path('logout/', logout_view, name='logoutweb'),
     path('balance/', balance, name='balance'),
-    path('test/', testPage, name='test-page'),
+    path('payment/', login_required(paymentView), name='payment'),
    
     path('partners/', login_required(PartnersListView.as_view()), name='partners'),
     path('partners/change_status/', change_partners_status, name='partners/change_status'),
@@ -39,7 +39,7 @@ urlpatterns = [
     path('service_type/add/', login_required(ServiceTypeCreate.as_view()), name='service_type/add/'),
     path('service_type/delete/<int:pk>', login_required(ServiceTypeDelete.as_view()), name='service_type/delete/'),
 
-    path('service_information/add/', login_required(ServiceInformationCreate.as_view()), name='service_information/add/'),
+    path('service_information/add/', login_required(ServiceInformationCreate.as_view()), name='service_information-add'),
     path('service_information/edit/<int:pk>', login_required(ServiceInformationUpdateView.as_view()), name='service_information/edit/'),
     
     path('service/', ServiceListView.as_view(), name='service'),

+ 1 - 1
SharixAdmin/views/__init__.py

@@ -10,7 +10,7 @@ from .partners import *
 from .partner_info import *
 from .provider import *
 from .login import *
-from .test import testPage
+from .payment import paymentView
 from .balance import balance
 from .trans_id import trans_id
 from .schema import schema_v3

+ 0 - 1
SharixAdmin/views/balance.py

@@ -1,6 +1,5 @@
 from django.shortcuts import render
 from django.contrib.auth.decorators import login_required
-from SharixAdmin.views.context import get_context
 from django.utils.translation import gettext as _
 
 @login_required

+ 0 - 35
SharixAdmin/views/context.py

@@ -1,35 +0,0 @@
-from django.urls import resolve
-from django.utils.translation import gettext_lazy as _
-
-menu = [
-    {'title':_('Главная'),          'link':'home', 'sel':'house'},
-    {'title':_('Заявки'),              'link':'tickets', 'sel':'tikets'},
-    {'title':_('Партнеры'),                'link':'partners', 'sel':'people',
-     'roles':['METASERVICE-ADMIN']},
-    {'title':_('Управление правами'),'link':'user_information', 'sel':'hdd-network'},
-    {'title':_('Услуги сервиса'),          'link':'service_type', 'sel':'briefcase',
-     'roles':['METASERVICE-ADMIN']},
-    {'title':_('История заказов'),        'link':'trans','sel':'clock-history'},
-    {'title':_('Информация о сервисе'),    'link':'service_information/add/', 'sel':'person',
-     'roles':['METASERVICE-ADMIN']},
-    {'title':_('Оплата'),    'link':'test-page', 'sel':'credit-card'},
-
-]
-
-def get_context(request, page_context) -> dict:
-    # Получаем роли текущего пользователя
-    user_roles = set(group.name for group in request.user.groups.all())
-    is_superuser = request.user.is_superuser
-    menu_items = []
-    # Добавляем только те страницы к которым должен быть доступ
-    for item in menu:
-        if not item.get('roles') or is_superuser or set(item['roles']) & set(user_roles):  
-            menu_items.append(item)
-
-    base_context = {
-        "title":page_context['title'],
-        'url_path':resolve(request.path_info).url_name,
-        'menu':menu_items
-    }
-    context = dict(list(base_context.items()) + list(page_context.items()))
-    return context

+ 5 - 6
SharixAdmin/views/index.py

@@ -1,18 +1,17 @@
 from django.contrib.auth.decorators import login_required
-from SharixAdmin.views.context import get_context
 from django.shortcuts import render
 from django.utils.translation import gettext as _
 
 
 @login_required
 def index(request):
-
     ph_num = str(request.user.phone_number)
     convert_ph_num = f"+{ph_num[:1]} ({ph_num[1:4]}) {ph_num[4:7]}-{ph_num[7:9]}-{ph_num[9:11]}"
-    #print(convert_ph_num)
-    context = get_context(request, {
+
+    context = {
         'title':_('Home/Balance'),
-        'phone':convert_ph_num
-    })
+        'phone':convert_ph_num,
+        'current_page': 'index'
+    }
     
     return render(request, 'SharixAdmin/main.html', context)

+ 2 - 3
SharixAdmin/views/partner_info.py

@@ -4,7 +4,6 @@ from SharixAdmin.groups import group_required
 from dbsynce.models import Company
 from django.contrib.auth.mixins import UserPassesTestMixin
 from django.views.generic.edit import UpdateView, CreateView
-from SharixAdmin.views.context import get_context
 from django.urls import reverse
 from django.utils.translation import gettext as _
 
@@ -44,10 +43,10 @@ class PartnerInformationCreate(UserPassesTestMixin, CreateView):
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
-        context.update(get_context(self.request, {
+        context.update({
             'title': _('Partner Information'),
             'object': self.object,
-        }))
+        })
         return context
     
     def get_success_url(self):

+ 4 - 3
SharixAdmin/views/partners.py

@@ -4,7 +4,6 @@ from SharixAdmin.groups import group_required
 from SharixAdmin.tables import PartnersTable
 from django.contrib.auth.decorators import login_required
 from dbsynce.models import Company
-from SharixAdmin.views.context import get_context
 from django.http import JsonResponse
 from django.utils.translation import gettext as _
 
@@ -16,10 +15,11 @@ class PartnersListView(UserPassesTestMixin, SingleTableView):
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
-        context.update(get_context(self.request, {
+        context.update({
             'title': _('Partners'),
             'object_list': context['object_list'],
-        }))
+            'current_page': "partners"
+        })
         return context
     
     def test_func(self) -> bool or None:
@@ -28,6 +28,7 @@ class PartnersListView(UserPassesTestMixin, SingleTableView):
             return True
         return False
 
+
 @login_required
 @group_required('METASERVICE-ADMIN')
 def change_partners_status(request):

+ 9 - 0
SharixAdmin/views/payment.py

@@ -0,0 +1,9 @@
+from django.shortcuts import render
+from django.utils.translation import gettext as _
+
+def paymentView(request):
+    context = {
+        'title':_('Оплата'),
+        'current_page': 'payment'
+    }
+    return render(request, "SharixAdmin/test.html", context)

+ 2 - 3
SharixAdmin/views/provider.py

@@ -3,7 +3,6 @@ from SharixAdmin.groups import group_required
 from SharixAdmin.tables import ProviderTable
 from dbsynce.models import Provider
 from django.contrib.auth.decorators import login_required
-from SharixAdmin.views.context import get_context
 from django.http import JsonResponse
 from django.contrib.auth.mixins import UserPassesTestMixin
 from django.utils.translation import gettext as _
@@ -15,10 +14,10 @@ class ProviderListView(UserPassesTestMixin, SingleTableView):
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
-        context.update(get_context(self.request, {
+        context.update({
             'title': _('Performers'),
             'object_list': context['object_list'],
-        }))
+        })
         return context
     
     def test_func(self) -> bool or None:

+ 2 - 3
SharixAdmin/views/resource.py

@@ -4,7 +4,6 @@ from SharixAdmin.groups import group_required
 from SharixAdmin.tables import ResourceTable
 from django.contrib.auth.decorators import login_required
 from dbsynce.models import Resource
-from SharixAdmin.views.context import get_context
 from django.http import JsonResponse
 from django.utils.translation import gettext as _
 
@@ -15,10 +14,10 @@ class ResourceListView(UserPassesTestMixin, SingleTableView):
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
-        context.update(get_context(self.request, {
+        context.update({
             'title': _('Resources'),
             'object_list': context['object_list'],
-        }))
+        })
         return context
     
     def test_func(self) -> bool or None:

+ 3 - 4
SharixAdmin/views/service.py

@@ -3,7 +3,6 @@ from SharixAdmin.groups import group_required
 from SharixAdmin.tables import ServiceTable
 from dbsynce.models import Service
 from django.contrib.auth.decorators import login_required
-from SharixAdmin.views.context import get_context
 from django.contrib.auth.mixins import UserPassesTestMixin
 from django.utils.translation import gettext as _
 
@@ -14,10 +13,10 @@ class ServiceListView(UserPassesTestMixin, SingleTableView):
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
-        context.update(get_context(self.request, {
+        context.update({
             'title': _('Rates'),
-            'object_list': context['object_list'],
-        }))
+            'object_list': context['object_list']
+        })
         return context
     
     def test_func(self) -> bool or None:

+ 9 - 7
SharixAdmin/views/service_info.py

@@ -2,7 +2,6 @@ from SharixAdmin.forms import ServiceInformationCreateForm, ServiceInformationUp
 from django.contrib.auth.mixins import UserPassesTestMixin
 from django.views.generic.edit import CreateView, UpdateView
 from dbsynce.models import Service
-from SharixAdmin.views.context import get_context
 from django.urls import reverse
 from django.utils.translation import gettext as _
 
@@ -16,6 +15,7 @@ from datetime import timezone
 import xmpp
 from xmpp import cli
 
+
 class ServiceInformationCreate(UserPassesTestMixin, CreateView):
     model = Service
     form_class = ServiceInformationCreateForm
@@ -41,11 +41,11 @@ class ServiceInformationCreate(UserPassesTestMixin, CreateView):
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
-        context.update(get_context(self.request, {
+        context.update({
             'title': _('Information about the service'),
             'object': self.object,
-            
-        }))
+            'current_page': 'service_info'
+        })
         return context
     
     def get_success_url(self):
@@ -57,7 +57,8 @@ class ServiceInformationCreate(UserPassesTestMixin, CreateView):
         if bool(self.request.user.groups.filter(name=group_names)) or self.request.user.is_superuser:
             return True
         return False
-    
+
+
 class ServiceInformationUpdateView(UserPassesTestMixin, UpdateView):
     model = Service
     form_class = ServiceInformationUpdateForm
@@ -65,10 +66,11 @@ class ServiceInformationUpdateView(UserPassesTestMixin, UpdateView):
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
-        context.update(get_context(self.request, {
+        context.update({
             'title': 'Information about the service',
             'object': self.object,
-        }))
+            'current_page': 'service_info'
+        })
         return context
     
     def get_success_url(self):

+ 2 - 3
SharixAdmin/views/service_tariff.py

@@ -5,7 +5,6 @@ from SharixAdmin.tables import ServiceTariffTable
 from SharixAdmin.forms import ServiceTariffCreateForm, ServiceTariffUpdateForm
 from dbsynce.models import Service
 from django.urls import reverse
-from SharixAdmin.views.context import get_context
 from django.utils.translation import gettext as _
 
 class ServiceTariffCreate(UserPassesTestMixin, CreateView):
@@ -15,10 +14,10 @@ class ServiceTariffCreate(UserPassesTestMixin, CreateView):
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
-        context.update(get_context(self.request, {
+        context.update({
             'title': _('Service rates'),
             'object': self.object,
-        }))
+        })
         return context
     
     def get_success_url(self):

+ 12 - 9
SharixAdmin/views/service_type.py

@@ -5,7 +5,6 @@ from django.contrib.auth.mixins import UserPassesTestMixin
 from SharixAdmin.forms import ServiceTypeCreateForm, ServiceTypeUpdateForm
 from dbsynce.models import ServiceType
 from django.urls import reverse
-from SharixAdmin.views.context import get_context
 from django.utils.translation import gettext as _
 
     
@@ -17,10 +16,11 @@ class ServiceTypeCreate(UserPassesTestMixin, CreateView):
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
-        context.update(get_context(self.request, {
+        context.update({
             'title': _('Услуги сервиса'),
             'object': self.object,
-        }))
+            "current_page": "service_type"
+        })
         return context
     
     def get_success_url(self):
@@ -44,10 +44,11 @@ class ServiceTypeListView(UserPassesTestMixin, SingleTableView):
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
-        context.update(get_context(self.request, {
+        context.update({
             'title': 'Услуги сервиса',
             'object_list': context['object_list'],
-        }))
+            "current_page": "service_type"
+        })
         return context
     
     def testing(self, queryset, is_descending):
@@ -67,10 +68,11 @@ class ServiceTypeUpdateView(UserPassesTestMixin, UpdateView):
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
-        context.update(get_context(self.request, {
+        context.update({
             'title': _('Услуги сервиса'),
             'object': self.object,
-        }))
+            "current_page": "service_type"
+        })
         return context
     
     
@@ -90,10 +92,11 @@ class ServiceTypeDelete(UserPassesTestMixin, DeleteView):
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
-        context.update(get_context(self.request, {
+        context.update({
             'title': 'Услуги сервиса',
             'object': self.object,
-        }))
+            "current_page": "service_type"
+        })
         return context
     
     def get_success_url(self):

+ 0 - 9
SharixAdmin/views/test.py

@@ -1,9 +0,0 @@
-from SharixAdmin.views.context import get_context
-from django.shortcuts import render
-from django.utils.translation import gettext as _
-
-def testPage(request):
-    context = get_context(request, {
-        'title':_('Оплата')
-        })
-    return render(request, "SharixAdmin/test.html", context)

+ 3 - 3
SharixAdmin/views/trans_id.py

@@ -1,11 +1,11 @@
 from django.shortcuts import render
-from SharixAdmin.views.context import get_context
 from django.contrib.auth.decorators import login_required
 from django.utils.translation import gettext as _
 
+
 @login_required
 def trans_id(request, trans_id):
-    context = get_context(request, {
+    context = {
         'title':_('Service')
-        })
+    }
     return render(request, 'SharixAdmin/trans_carried.html', context)

+ 3 - 3
SharixAdmin/views/transactions.py

@@ -1,13 +1,13 @@
 from django.contrib.auth.decorators import login_required
-from SharixAdmin.views.context import get_context
 from django.shortcuts import render
 from django.utils.translation import gettext as _
 
 @login_required
 def transactions(request):
     
-    context = get_context(request, {
+    context = {
         'title':_('Payment history'),
-        })
+        'current_page': 'transactions'
+    }
         
     return render(request, 'SharixAdmin/transactions.html', context)

+ 3 - 3
SharixAdmin/views/user_info.py

@@ -2,11 +2,11 @@ from django.contrib.auth import get_user_model
 
 from django_tables2 import SingleTableView
 from SharixAdmin.tables import UserInfoTable
-from SharixAdmin.views.context import get_context
 from django.contrib.auth.mixins import UserPassesTestMixin
 from django.contrib.auth.models import Group
 from django.utils.translation import gettext as _
 
+
 class UserListView(UserPassesTestMixin, SingleTableView):
     table_class = UserInfoTable
     queryset = get_user_model().objects.all()
@@ -14,11 +14,11 @@ class UserListView(UserPassesTestMixin, SingleTableView):
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
-        context.update(get_context(self.request, {
+        context.update({
             'title': _('User Management'),
             'object_list': context['object_list'],
             'groups': Group.objects.all()
-        }))
+        })
         return context
     
     def test_func(self) -> bool or None: