| | | 1 | | <!DOCTYPE html> |
| | | 2 | | <html lang="ru"> |
| | | 3 | | <head> |
| | | 4 | | <meta charset="utf-8"/> |
| | | 5 | | <partial name="_ConsoleGuard" /> |
| | | 6 | | <meta name="studio2-instance" content="@OzonOrdersWeb.Observability.AppInstanceInfo.InstanceId"/> |
| | | 7 | | @* Наблюдатель доступности сервера. Грузится ДО телеметрии: так он захватывает нативный fetch |
| | | 8 | | для health-проб, а телеметрия ложится поверх и продолжает видеть обычные запросы. *@ |
| | | 9 | | <script src="~/js/layout/server-availability.js" asp-append-version="true"></script> |
| | | 10 | | <script src="~/js/observability/client-telemetry.js" asp-append-version="true"></script> |
| | | 11 | | <meta name="viewport" content="width=device-width, initial-scale=1.0"/> |
| | 0 | 12 | | <title>@ViewData["Title"] — 1С Fresh</title> |
| | | 13 | | <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css"/> |
| | | 14 | | <link rel="stylesheet" href="~/css/site.css" asp-append-version="true"/> |
| | | 15 | | <link rel="stylesheet" href="~/css/system-notification-modal.css" asp-append-version="true"/> |
| | | 16 | | <link rel="stylesheet" href="~/css/server-availability.css" asp-append-version="true"/> |
| | | 17 | | <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.0/font/bootstrap-icons.css"/> |
| | | 18 | | <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/nprogress@0.2.0/nprogress.css"/> |
| | | 19 | | <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> |
| | | 20 | | <style> |
| | | 21 | | ::-webkit-scrollbar { width: 7px; height: 7px; } |
| | | 22 | | ::-webkit-scrollbar-track { background: transparent; } |
| | | 23 | | ::-webkit-scrollbar-thumb { background: rgba(0,0,0,0.3); } |
| | | 24 | | |
| | | 25 | | .onec-navbar { background: #1a3a5c !important; } |
| | | 26 | | .onec-navbar .navbar-brand { color: #fff !important; font-weight: 700; letter-spacing: 1px; } |
| | | 27 | | .onec-navbar .nav-link { color: rgba(255,255,255,.85) !important; } |
| | | 28 | | .onec-navbar .nav-link:hover { color: #fff !important; } |
| | | 29 | | .onec-navbar .dropdown-menu { background: #122840; border: none; } |
| | | 30 | | .onec-navbar .dropdown-item { color: rgba(255,255,255,.8); } |
| | | 31 | | .onec-navbar .dropdown-item:hover { background: #1a3a5c; color: #fff; } |
| | | 32 | | .onec-navbar .dropdown-divider { border-color: rgba(255,255,255,.15); } |
| | | 33 | | |
| | | 34 | | .badge-posted { background: #198754; } |
| | | 35 | | .badge-draft { background: #ffc107; color: #212529; } |
| | | 36 | | .badge-deleted { background: #dc3545; } |
| | | 37 | | |
| | | 38 | | .doc-number { font-family: monospace; font-weight: 600; } |
| | | 39 | | .onec-table th { white-space: nowrap; font-size: .82rem; } |
| | | 40 | | .onec-table td { font-size: .82rem; vertical-align: middle; } |
| | | 41 | | .onec-section-card { border-left: 4px solid #1a3a5c; } |
| | | 42 | | |
| | | 43 | | #nprogress .bar { background: #1a3a5c !important; } |
| | | 44 | | #nprogress .peg { box-shadow: 0 0 10px #1a3a5c, 0 0 5px #1a3a5c !important; } |
| | | 45 | | #nprogress .spinner-icon { border-top-color: #1a3a5c !important; border-left-color: #1a3a5c !important; } |
| | | 46 | | |
| | | 47 | | .doc-row-clickable { cursor: pointer; } |
| | | 48 | | .doc-row-clickable:hover { background-color: #f0f4f8 !important; } |
| | | 49 | | </style> |
| | | 50 | | </head> |
| | | 51 | | <body> |
| | | 52 | | <header> |
| | | 53 | | <nav class="navbar navbar-expand-sm navbar-dark onec-navbar box-shadow mb-3"> |
| | | 54 | | <div class="container-fluid"> |
| | | 55 | | <a class="navbar-brand" asp-area="OneCFresh" asp-controller="Home" asp-action="Index"> |
| | | 56 | | <i class="bi bi-database-fill me-1"></i>1С Fresh |
| | | 57 | | </a> |
| | | 58 | | <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse"> |
| | | 59 | | <span class="navbar-toggler-icon"></span> |
| | | 60 | | </button> |
| | | 61 | | |
| | | 62 | | <div class="navbar-collapse collapse"> |
| | | 63 | | <ul class="navbar-nav me-auto"> |
| | | 64 | | |
| | | 65 | | <!-- Справочники --> |
| | | 66 | | <li class="nav-item dropdown"> |
| | | 67 | | <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown"> |
| | | 68 | | <i class="bi bi-journals me-1"></i>Справочники |
| | | 69 | | </a> |
| | | 70 | | <ul class="dropdown-menu"> |
| | | 71 | | <li><a class="dropdown-item" asp-area="OneCFresh" asp-controller="Catalog" asp-action="Count |
| | | 72 | | <i class="bi bi-people me-2"></i>Контрагенты |
| | | 73 | | </a></li> |
| | | 74 | | <li><a class="dropdown-item" asp-area="OneCFresh" asp-controller="Catalog" asp-action="Nomen |
| | | 75 | | <i class="bi bi-box-seam me-2"></i>Номенклатура |
| | | 76 | | </a></li> |
| | | 77 | | <li><a class="dropdown-item" asp-area="OneCFresh" asp-controller="Catalog" asp-action="Wareh |
| | | 78 | | <i class="bi bi-building me-2"></i>Склады |
| | | 79 | | </a></li> |
| | | 80 | | <li><a class="dropdown-item" asp-area="OneCFresh" asp-controller="Catalog" asp-action="Organ |
| | | 81 | | <i class="bi bi-bank me-2"></i>Организации |
| | | 82 | | </a></li> |
| | | 83 | | <li><hr class="dropdown-divider"></li> |
| | | 84 | | <li><a class="dropdown-item" asp-area="OneCFresh" asp-controller="Catalog" asp-action="Contr |
| | | 85 | | <i class="bi bi-file-text me-2"></i>Договоры контрагентов |
| | | 86 | | </a></li> |
| | | 87 | | <li><a class="dropdown-item" asp-area="OneCFresh" asp-controller="Catalog" asp-action="VatRa |
| | | 88 | | <i class="bi bi-percent me-2"></i>Ставки НДС |
| | | 89 | | </a></li> |
| | | 90 | | </ul> |
| | | 91 | | </li> |
| | | 92 | | |
| | | 93 | | <!-- Документы --> |
| | | 94 | | <li class="nav-item dropdown"> |
| | | 95 | | <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown"> |
| | | 96 | | <i class="bi bi-file-earmark-text me-1"></i>Документы |
| | | 97 | | </a> |
| | | 98 | | <ul class="dropdown-menu"> |
| | | 99 | | <li><a class="dropdown-item" asp-area="OneCFresh" asp-controller="Document" asp-action="Rece |
| | | 100 | | <i class="bi bi-box-arrow-in-down me-2"></i>Приходные накладные |
| | | 101 | | </a></li> |
| | | 102 | | <li><a class="dropdown-item" asp-area="OneCFresh" asp-controller="Document" asp-action="Tran |
| | | 103 | | <i class="bi bi-arrows-move me-2"></i>Перемещения запасов |
| | | 104 | | </a></li> |
| | | 105 | | <li><a class="dropdown-item" asp-area="OneCFresh" asp-controller="Document" asp-action="Paym |
| | | 106 | | <i class="bi bi-credit-card me-2"></i>Платёжные поручения |
| | | 107 | | </a></li> |
| | | 108 | | </ul> |
| | | 109 | | </li> |
| | | 110 | | |
| | | 111 | | <!-- Регистры --> |
| | | 112 | | <li class="nav-item dropdown"> |
| | | 113 | | <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown"> |
| | | 114 | | <i class="bi bi-clipboard-data me-1"></i>Регистры |
| | | 115 | | </a> |
| | | 116 | | <ul class="dropdown-menu"> |
| | | 117 | | <li><a class="dropdown-item" asp-area="OneCFresh" asp-controller="Register" asp-action="Stoc |
| | | 118 | | <i class="bi bi-bar-chart me-2"></i>Запасы на складах |
| | | 119 | | </a></li> |
| | | 120 | | </ul> |
| | | 121 | | </li> |
| | | 122 | | </ul> |
| | | 123 | | |
| | | 124 | | <!-- Правая часть — ссылка назад в Studio2 --> |
| | | 125 | | <ul class="navbar-nav ms-auto"> |
| | | 126 | | <li class="nav-item"> |
| | | 127 | | <a class="nav-link" asp-area="Studio2" asp-controller="Orders" asp-action="Index" title="Вернуть |
| | | 128 | | <i class="bi bi-arrow-left-circle me-1"></i>Studio2 |
| | | 129 | | </a> |
| | | 130 | | </li> |
| | 0 | 131 | | @if (User.IsInRole("Admin")) |
| | | 132 | | { |
| | | 133 | | <li class="nav-item"> |
| | | 134 | | <a class="nav-link" href="/Hangfire" target="_blank" title="Задачи Hangfire"> |
| | | 135 | | <i class="bi bi-gear me-1"></i>Задачи |
| | | 136 | | </a> |
| | | 137 | | </li> |
| | | 138 | | } |
| | | 139 | | </ul> |
| | | 140 | | </div> |
| | | 141 | | </div> |
| | | 142 | | </nav> |
| | | 143 | | </header> |
| | | 144 | | |
| | | 145 | | <div class="container-fluid px-4"> |
| | 0 | 146 | | @RenderBody() |
| | | 147 | | </div> |
| | | 148 | | |
| | | 149 | | <!-- Detail modal container --> |
| | | 150 | | <div class="modal fade" id="docDetailModal" tabindex="-1"> |
| | | 151 | | <div class="modal-dialog modal-xl modal-dialog-scrollable"> |
| | | 152 | | <div class="modal-content" id="docDetailModalContent"> |
| | | 153 | | <div class="modal-body text-center py-5"> |
| | | 154 | | <div class="spinner-border text-secondary" role="status"></div> |
| | | 155 | | </div> |
| | | 156 | | </div> |
| | | 157 | | </div> |
| | | 158 | | </div> |
| | | 159 | | |
| | | 160 | | <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script> |
| | | 161 | | <script src="https://cdn.jsdelivr.net/npm/nprogress@0.2.0/nprogress.min.js"></script> |
| | | 162 | | <script> |
| | | 163 | | NProgress.configure({ showSpinner: false }); |
| | | 164 | | |
| | | 165 | | $(function () { |
| | | 166 | | $(document).on('click', 'a[href]', function () { |
| | | 167 | | var href = $(this).attr('href'); |
| | | 168 | | if (!href || href === '#' || href.startsWith('#') || href.startsWith('javascript')) return; |
| | | 169 | | if ($(this).attr('target') === '_blank') return; |
| | | 170 | | if ($(this).closest('.modal').length) return; |
| | | 171 | | NProgress.start(); |
| | | 172 | | }); |
| | | 173 | | |
| | | 174 | | $(document).on('submit', 'form', function () { |
| | | 175 | | NProgress.start(); |
| | | 176 | | }); |
| | | 177 | | |
| | | 178 | | $(window).on('load', function () { |
| | | 179 | | NProgress.done(); |
| | | 180 | | }); |
| | | 181 | | |
| | | 182 | | $(document).on('click', '[data-detail-url]', function (e) { |
| | | 183 | | if ($(e.target).closest('a, button, form').length && !$(e.target).closest('[data-detail-url]').is($(this))) |
| | | 184 | | if ($(e.target).is('a, button') || $(e.target).closest('a, button, form').length) { |
| | | 185 | | var $el = $(e.target).closest('a, button, form'); |
| | | 186 | | if ($el.length && !$el.is('[data-detail-url]')) return; |
| | | 187 | | } |
| | | 188 | | var url = $(this).data('detail-url'); |
| | | 189 | | var $modal = $('#docDetailModal'); |
| | | 190 | | var $content = $('#docDetailModalContent'); |
| | | 191 | | $content.html('<div class="modal-body text-center py-5"><div class="spinner-border text-secondary" role="sta |
| | | 192 | | $modal.modal('show'); |
| | | 193 | | $.get(url, function (html) { |
| | | 194 | | $content.html(html); |
| | | 195 | | }).fail(function () { |
| | | 196 | | $content.html('<div class="modal-body"><div class="alert alert-danger">Ошибка загрузки данных.</div><div |
| | | 197 | | }); |
| | | 198 | | }); |
| | | 199 | | }); |
| | | 200 | | </script> |
| | 0 | 201 | | @await RenderSectionAsync("Scripts", required: false) |
| | | 202 | | </body> |
| | | 203 | | </html> |