| | | 1 | | @using OzonOrdersWeb.Areas.Studio2.ViewModels.TransactionsGrid |
| | | 2 | | @model TransactionsGridIndexViewModel |
| | | 3 | | |
| | | 4 | | @{ |
| | 0 | 5 | | ViewData["Title"] = Model.Definition.Title; |
| | 0 | 6 | | Layout = "~/Views/Shared/_Layout.cshtml"; |
| | 0 | 7 | | var d = Model.Definition; |
| | 0 | 8 | | var viewPrefsJson = Model.UserSettings.TryGetValue("viewPrefs", out var viewPrefsRaw) && !string.IsNullOrWhiteSpace( |
| | | 9 | | } |
| | | 10 | | |
| | | 11 | | <link rel="stylesheet" href="~/css/Studio2/Orders/orders-index-redesign.css" asp-append-version="true"/> |
| | | 12 | | <link rel="stylesheet" href="~/css/Studio2/OrdersGrid/orders-grid.css" asp-append-version="true"/> |
| | | 13 | | <link rel="stylesheet" href="~/css/Studio2/OrdersGrid/feed-explain.css" asp-append-version="true"/> |
| | | 14 | | <link rel="stylesheet" href="~/css/Studio2/TransactionsGrid/tx-grid.css" asp-append-version="true"/> |
| | | 15 | | <script> |
| | | 16 | | (function () { |
| | | 17 | | var mode = 'light'; |
| | 0 | 18 | | try { mode = (@Html.Raw(viewPrefsJson) || {}).theme || 'light'; } catch (e) { /* ignore */ } |
| | | 19 | | if (mode === 'auto') mode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'da |
| | | 20 | | if (mode !== 'dark') mode = 'light'; |
| | | 21 | | document.documentElement.setAttribute('data-og-theme', mode); |
| | | 22 | | document.documentElement.setAttribute('data-ag-theme-mode', mode); |
| | | 23 | | document.documentElement.setAttribute('data-app-toast-compact', 'true'); |
| | | 24 | | })(); |
| | | 25 | | </script> |
| | | 26 | | |
| | 0 | 27 | | <form id="txAf" method="post" hidden>@Html.AntiForgeryToken()</form> |
| | | 28 | | |
| | 0 | 29 | | <div class="og-page tx-page" data-tx-slug="@d.Slug"> |
| | | 30 | | <div class="tx-shell"> |
| | | 31 | | <div id="ogWorkspace" class="og-workspace tx-workspace"> |
| | | 32 | | <div class="tx-bar"> |
| | | 33 | | <a class="tx-bar-back" id="txBack" href="@(Model.ReturnUrl ?? Url.Action("Index", "OrdersGrid", new { ar |
| | | 34 | | <span class="ag-icon ag-icon-left" aria-hidden="true"></span> |
| | | 35 | | </a> |
| | | 36 | | <span class="tx-bar-icon" style="background:@d.Color"><i class="@d.Icon"></i></span> |
| | | 37 | | <div class="tx-bar-title"> |
| | 0 | 38 | | <strong>@d.Title</strong> |
| | | 39 | | <span class="tx-bar-sub" id="txBarSub"> |
| | 0 | 40 | | @if (!string.IsNullOrEmpty(d.TargetStatusName)) { <span>→ @d.TargetStatusName</span> } |
| | | 41 | | <span id="txBarCount"></span> |
| | | 42 | | </span> |
| | | 43 | | </div> |
| | | 44 | | <div id="txCheckSummary" class="tx-check-summary" aria-label="Проверка перед проведением" aria-live="pol |
| | | 45 | | <button type="button" class="tx-commit tx-commit--bar" id="txCommitTop" title="Провести (Ctrl+Enter)"><s |
| | | 46 | | <div id="ogChips" class="og-chips tx-chips"><div id="ogChipsContent" class="og-chips-content"></div></di |
| | | 47 | | <div class="tx-bar-tools"> |
| | | 48 | | <button type="button" class="tx-tool" id="txDockToggle" title="Панель проведения" aria-expanded="tru |
| | | 49 | | <button type="button" class="tx-tool" id="txHelp" title="Что делает эта транзакция"><span class="ag- |
| | | 50 | | </div> |
| | | 51 | | </div> |
| | | 52 | | <div id="txWarnings" class="tx-warnings" hidden></div> |
| | | 53 | | <div class="og-grid-stage"> |
| | | 54 | | <div id="ordersGrid" class="og-grid tx-grid"></div> |
| | | 55 | | <div id="ogQuickSearch" class="og-quick-search" hidden> |
| | | 56 | | <span class="ag-icon ag-icon-search" aria-hidden="true"></span> |
| | | 57 | | <input type="search" id="ogQuickSearchInput" placeholder="Номер заказа, артикул, наименование… (Ctrl |
| | | 58 | | <button type="button" id="ogQuickSearchClose" class="og-quick-search-close" aria-label="Закрыть"><sp |
| | | 59 | | </div> |
| | | 60 | | <button type="button" id="ogGridSettings" class="og-grid-settings" aria-haspopup="menu" title="Настройки |
| | | 61 | | <span class="ag-icon ag-icon-settings" aria-hidden="true"></span> |
| | | 62 | | </button> |
| | | 63 | | <div id="ogGridSkeleton" class="og-grid-skeleton" aria-hidden="true"> |
| | | 64 | | <div class="og-skeleton-row"><span></span><span></span><span></span><span></span></div> |
| | | 65 | | <div class="og-skeleton-row"><span></span><span></span><span></span><span></span></div> |
| | | 66 | | <div class="og-skeleton-row"><span></span><span></span><span></span><span></span></div> |
| | | 67 | | </div> |
| | | 68 | | <div id="txEmpty" class="tx-empty" hidden> |
| | | 69 | | <span class="ag-icon ag-icon-cancel" aria-hidden="true"></span> |
| | | 70 | | <strong>Нет заказов</strong> |
| | | 71 | | <span>Выберите заказы галочками на странице заказов и запустите транзакцию оттуда.</span> |
| | | 72 | | <a href="@(Model.ReturnUrl ?? Url.Action("Index", "OrdersGrid", new { area = "Studio2" }))">К заказа |
| | | 73 | | </div> |
| | | 74 | | </div> |
| | | 75 | | |
| | | 76 | | <aside id="ogControlPanel" class="og-control-panel" aria-label="Настройки таблицы"> |
| | | 77 | | <div class="og-control-panel-head"> |
| | | 78 | | <div><span class="og-control-panel-kicker">Таблица проведения</span><strong>Настройки</strong></div> |
| | | 79 | | <button type="button" id="ogControlPanelClose" class="og-panel-close" aria-label="Закрыть панель"><s |
| | | 80 | | </div> |
| | | 81 | | <div class="og-control-panel-body"> |
| | | 82 | | <details class="og-panel-section" open> |
| | | 83 | | <summary class="og-panel-section-title"><span class="ag-icon ag-icon-settings" aria-hidden="true |
| | | 84 | | <div class="og-panel-section-body"> |
| | | 85 | | <div class="og-panel-row"><span class="og-panel-row-label">Тема</span> |
| | | 86 | | <div class="og-segment og-theme-segment"> |
| | | 87 | | <button type="button" data-og-pref="theme" data-og-value="light">Светлая</button> |
| | | 88 | | <button type="button" data-og-pref="theme" data-og-value="dark">Тёмная</button> |
| | | 89 | | <button type="button" data-og-pref="theme" data-og-value="auto">Как в системе</butto |
| | | 90 | | </div> |
| | | 91 | | </div> |
| | | 92 | | <div class="og-panel-row"><span class="og-panel-row-label">Строки</span> |
| | | 93 | | <div class="og-segment"> |
| | | 94 | | <button type="button" data-og-pref="rows" data-og-value="one" title="Одно значение в |
| | | 95 | | <button type="button" data-og-pref="rows" data-og-value="two" title="Две строки в яч |
| | | 96 | | </div> |
| | | 97 | | </div> |
| | | 98 | | <div class="og-panel-row"><span class="og-panel-row-label">Плотность</span> |
| | | 99 | | <div class="og-segment"> |
| | | 100 | | <button type="button" data-og-pref="density" data-og-value="compact">Компактно</butt |
| | | 101 | | <button type="button" data-og-pref="density" data-og-value="normal">Обычно</button> |
| | | 102 | | <button type="button" data-og-pref="density" data-og-value="comfortable">Просторно</ |
| | | 103 | | </div> |
| | | 104 | | </div> |
| | | 105 | | <div class="og-panel-row"><span class="og-panel-row-label">Шрифт</span> |
| | | 106 | | <div class="og-segment"> |
| | | 107 | | <button type="button" data-og-pref="font" data-og-value="small">A−</button> |
| | | 108 | | <button type="button" data-og-pref="font" data-og-value="normal">A</button> |
| | | 109 | | <button type="button" data-og-pref="font" data-og-value="large">A+</button> |
| | | 110 | | </div> |
| | | 111 | | </div> |
| | | 112 | | <label class="og-panel-switch"><input type="checkbox" id="ogFitColumns"><span class="og-pane |
| | | 113 | | <div class="og-panel-actions"> |
| | | 114 | | <button type="button" id="ogAutosizeColumns"><span class="ag-icon ag-icon-arrows" aria-h |
| | | 115 | | <button type="button" id="ogResetColumns"><span class="ag-icon ag-icon-loading" aria-hid |
| | | 116 | | </div> |
| | | 117 | | <div class="og-panel-actions"> |
| | | 118 | | <button type="button" id="ogResetFilters"><span class="ag-icon ag-icon-cancel" aria-hidd |
| | | 119 | | <button type="button" id="txDraftReset"><span class="ag-icon ag-icon-cross" aria-hidden= |
| | | 120 | | </div> |
| | | 121 | | <div class="og-panel-hint">Тема, строки, плотность, шрифт и группы общие с таблицей заказов; |
| | | 122 | | </div> |
| | | 123 | | </details> |
| | | 124 | | |
| | | 125 | | <details class="og-panel-section" open> |
| | | 126 | | <summary class="og-panel-section-title"><span class="ag-icon ag-icon-aggregation" aria-hidden="t |
| | | 127 | | <div class="og-panel-section-body"> |
| | | 128 | | <div class="og-panel-hint">Вычисляемые столбцы по формуле — те же, что в таблице заказов; сч |
| | | 129 | | <div id="ogComputedList" class="og-panel-list"></div> |
| | | 130 | | <div class="og-panel-actions"> |
| | | 131 | | <button type="button" id="ogComputedAdd"><span class="ag-icon ag-icon-plus" aria-hidden= |
| | | 132 | | </div> |
| | | 133 | | </div> |
| | | 134 | | </details> |
| | | 135 | | |
| | | 136 | | <details class="og-panel-section og-panel-section--columns" open> |
| | | 137 | | <summary class="og-panel-section-title"><span class="ag-icon ag-icon-columns" aria-hidden="true" |
| | | 138 | | <div class="og-panel-section-body"> |
| | | 139 | | <label class="og-panel-search"><span class="ag-icon ag-icon-search" aria-hidden="true"></spa |
| | | 140 | | <div id="ogColumnList" class="og-column-list"></div> |
| | | 141 | | <div class="og-panel-actions"> |
| | | 142 | | <button type="button" id="ogGroupAdd"><span class="ag-icon ag-icon-plus" aria-hidden="tr |
| | | 143 | | <button type="button" id="ogLayoutReset"><span class="ag-icon ag-icon-loading" aria-hidd |
| | | 144 | | </div> |
| | | 145 | | </div> |
| | | 146 | | </details> |
| | | 147 | | |
| | | 148 | | <div class="og-panel-filter-note"><span class="ag-icon ag-icon-filter" aria-hidden="true"></span> По |
| | | 149 | | </div> |
| | | 150 | | </aside> |
| | | 151 | | <button type="button" id="ogControlPanelBackdrop" class="og-control-panel-backdrop" tabindex="-1" aria-label |
| | | 152 | | </div> |
| | | 153 | | |
| | | 154 | | <aside id="txDock" class="tx-dock" aria-label="Панель проведения"> |
| | | 155 | | <div class="tx-dock-head"> |
| | 0 | 156 | | <div><span class="og-control-panel-kicker">Проведение</span><strong id="txDockTitle">@d.Title</strong></ |
| | | 157 | | <button type="button" class="og-panel-close" id="txDockClose" aria-label="Свернуть"><span class="ag-icon |
| | | 158 | | </div> |
| | | 159 | | <div class="tx-dock-body" id="txDockBody"> |
| | | 160 | | <div class="tx-dock-loading"><span class="ag-icon ag-icon-loading" aria-hidden="true"></span> Загрузка…< |
| | | 161 | | </div> |
| | | 162 | | <div class="tx-dock-foot"> |
| | | 163 | | <div class="tx-dock-summary" id="txDockSummary"></div> |
| | | 164 | | <button type="button" class="tx-commit" id="txCommit"><span class="ag-icon ag-icon-save" aria-hidden="tr |
| | | 165 | | </div> |
| | | 166 | | </aside> |
| | | 167 | | </div> |
| | | 168 | | </div> |
| | | 169 | | |
| | | 170 | | <div class="tx-progress" id="txProgress" hidden> |
| | | 171 | | <div class="tx-progress-card"> |
| | | 172 | | <div class="tx-progress-head"><span class="ag-icon ag-icon-loading tx-spin" aria-hidden="true"></span><strong>Пр |
| | | 173 | | <ol class="tx-progress-steps" id="txProgressSteps"></ol> |
| | | 174 | | <div class="tx-progress-note">Не закрывайте страницу до завершения.</div> |
| | | 175 | | </div> |
| | | 176 | | </div> |
| | | 177 | | |
| | | 178 | | <div class="modal fade" id="txResultModal" tabindex="-1" aria-hidden="true"> |
| | | 179 | | <div class="modal-dialog modal-dialog-centered modal-xl tx-result-dialog"> |
| | | 180 | | <div class="modal-content orders-modal orders-modal--success"> |
| | | 181 | | <div class="modal-header"> |
| | | 182 | | <h5 class="modal-title">Результат проведения</h5> |
| | | 183 | | <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Закрыть"></button> |
| | | 184 | | </div> |
| | | 185 | | <div class="modal-body" id="txResultBody"></div> |
| | | 186 | | <div class="modal-footer"> |
| | | 187 | | <button type="button" class="btn btn-secondary" id="txResultStay" data-bs-dismiss="modal">Остаться</butt |
| | | 188 | | <a class="btn btn-primary" id="txResultBack" href="#">К заказам</a> |
| | | 189 | | </div> |
| | | 190 | | </div> |
| | | 191 | | </div> |
| | | 192 | | </div> |
| | | 193 | | |
| | | 194 | | <partial name="~/Areas/Studio2/Views/Partials/Orders/Modals/_LabelPrintConfirm.cshtml"/> |
| | | 195 | | <partial name="~/Areas/Studio2/Views/Partials/Orders/Modals/_MultipleItemsConfirm.cshtml"/> |
| | | 196 | | <partial name="~/Areas/Studio2/Views/Partials/Orders/_IndexPrintProgressOverlay.cshtml"/> |
| | | 197 | | |
| | | 198 | | <script> |
| | | 199 | | // Шим для модулей OrdersGrid: настройки раскладки едины на всех страницах транзакций. |
| | | 200 | | window.ordersGridConfig = { |
| | 0 | 201 | | saveSettingUrl: '@Url.Action("SaveSetting", "TransactionsGrid", new { area = "Studio2", slug = d.Slug })', |
| | 0 | 202 | | checkFormulaUrl: '@Url.Action("CheckFormula", "OrdersGrid", new { area = "Studio2" })', |
| | | 203 | | settingsStoragePrefix: 'txGrid.setting.', |
| | 0 | 204 | | userSettings: @Html.Raw(Json.Serialize(Model.UserSettings)), |
| | 0 | 205 | | allowedColumns: @Html.Raw(Json.Serialize(Model.AllowedColumns)), |
| | 0 | 206 | | formulaFields: @Html.Raw(Json.Serialize(Model.FormulaFields)), |
| | 0 | 207 | | statusColors: @Html.Raw(Json.Serialize(Model.StatusColors)), |
| | 0 | 208 | | clientStatusColors: @Html.Raw(Json.Serialize(Model.ClientStatusColors)), |
| | 0 | 209 | | isAdmin: @Json.Serialize(Model.IsAdmin), |
| | | 210 | | isAppSuperAdmin: false, |
| | | 211 | | blockSize: 100 |
| | | 212 | | }; |
| | | 213 | | window.txGridConfig = { |
| | 0 | 214 | | definition: @Html.Raw(Json.Serialize(d)), |
| | 0 | 215 | | orderIds: @Html.Raw(Json.Serialize(Model.OrderIds)), |
| | 0 | 216 | | returnUrl: @Html.Raw(Json.Serialize(Model.ReturnUrl)), |
| | 0 | 217 | | loadUrl: '@Url.Action("Load", "TransactionsGrid", new { area = "Studio2", slug = d.Slug })', |
| | 0 | 218 | | commitUrl: '@Url.Action("Commit", "TransactionsGrid", new { area = "Studio2", slug = d.Slug })', |
| | 0 | 219 | | lookupsUrl: '@Url.Action("Lookups", "TransactionsGrid", new { area = "Studio2", slug = d.Slug })', |
| | 0 | 220 | | previewUrl: '@Url.Action("Preview1C", "TransactionsGrid", new { area = "Studio2", slug = d.Slug })', |
| | 0 | 221 | | warehouseMappingCreateUrl: '@Url.Action("Create", "WarehouseMapping", new { area = "Studio2" })', |
| | 0 | 222 | | splitUrl: '@Url.Action("SplitOrders", "Orders", new { area = "Studio2" })', |
| | 0 | 223 | | excelStartUrl: '@Url.Action("StartTransactionExcelTask", "Transaction", new { area = "Studio2" })', |
| | 0 | 224 | | pdfUrl: '@Url.Action("PrintTransactionTableToPdf", "Transaction", new { area = "Studio2" })', |
| | | 225 | | stockLookupUrl: '/Studio2/WarehouseStock/lookup', |
| | 0 | 226 | | quotationSources: @Html.Raw(Json.Serialize(Model.QuotationSources)), |
| | 0 | 227 | | isAdmin: @Json.Serialize(Model.IsAdmin) |
| | | 228 | | }; |
| | 0 | 229 | | window.isAdmin = @Json.Serialize(Model.IsAdmin); |
| | | 230 | | window.isAppSuperAdmin = false; |
| | | 231 | | window.statusColors = window.ordersGridConfig.statusColors; |
| | | 232 | | window.clientStatusColors = window.ordersGridConfig.clientStatusColors; |
| | | 233 | | </script> |
| | | 234 | | |
| | | 235 | | @section Scripts { |
| | | 236 | | @* ag-grid-community.min.js подключён в _Layout. *@ |
| | | 237 | | <script src="~/js/copyArticle.js" asp-append-version="true"></script> |
| | | 238 | | <script src="~/js/Studio2/Labels/ozonLabelPrintCore.js" asp-append-version="true"></script> |
| | | 239 | | <script src="~/js/Studio2/OrdersGrid/orders-grid-locale.js" asp-append-version="true"></script> |
| | | 240 | | <script src="~/js/Studio2/OrdersGrid/orders-grid-theme.js" asp-append-version="true"></script> |
| | | 241 | | <script src="~/js/Studio2/OrdersGrid/orders-grid-permissions.js" asp-append-version="true"></script> |
| | | 242 | | <script src="~/js/Studio2/OrdersGrid/orders-grid-filters.js" asp-append-version="true"></script> |
| | | 243 | | <script src="~/js/Studio2/OrdersGrid/orders-grid-menu.js" asp-append-version="true"></script> |
| | | 244 | | <script src="~/js/Studio2/OrdersGrid/orders-grid-header.js" asp-append-version="true"></script> |
| | | 245 | | <script src="~/js/Studio2/OrdersGrid/orders-grid-renderers.js" asp-append-version="true"></script> |
| | | 246 | | <script src="~/js/Studio2/OrdersGrid/orders-grid-feed-explain.js" asp-append-version="true"></script> |
| | | 247 | | <script src="~/js/Studio2/OrdersGrid/orders-grid-feed.js" asp-append-version="true"></script> |
| | | 248 | | <script src="~/js/Studio2/OrdersGrid/orders-grid-product-card.js" asp-append-version="true"></script> |
| | | 249 | | <script src="~/js/Studio2/OrdersGrid/orders-grid-columns.js" asp-append-version="true"></script> |
| | | 250 | | <script src="~/js/Studio2/OrdersGrid/orders-grid-rows.js" asp-append-version="true"></script> |
| | | 251 | | <script src="~/js/Studio2/OrdersGrid/orders-grid-views.js" asp-append-version="true"></script> |
| | | 252 | | <script src="~/js/Studio2/OrdersGrid/orders-grid-formula.js" asp-append-version="true"></script> |
| | | 253 | | <script src="~/js/Studio2/OrdersGrid/orders-grid-computed.js" asp-append-version="true"></script> |
| | | 254 | | <script src="~/js/Studio2/OrdersGrid/orders-grid-layout.js" asp-append-version="true"></script> |
| | | 255 | | <script src="~/js/Studio2/TransactionsGrid/tx-grid-config.js" asp-append-version="true"></script> |
| | | 256 | | <script src="~/js/Studio2/TransactionsGrid/tx-grid-calc.js" asp-append-version="true"></script> |
| | | 257 | | <script src="~/js/Studio2/TransactionsGrid/tx-grid-picker.js" asp-append-version="true"></script> |
| | | 258 | | <script src="~/js/Studio2/TransactionsGrid/tx-grid-columns.js" asp-append-version="true"></script> |
| | | 259 | | <script src="~/js/Studio2/TransactionsGrid/tx-grid-draft.js" asp-append-version="true"></script> |
| | | 260 | | <script src="~/js/Studio2/TransactionsGrid/tx-grid-validate.js" asp-append-version="true"></script> |
| | | 261 | | <script src="~/js/Studio2/TransactionsGrid/tx-grid-panel.js" asp-append-version="true"></script> |
| | | 262 | | <script src="~/js/Studio2/TransactionsGrid/tx-grid-bulk.js" asp-append-version="true"></script> |
| | | 263 | | <script src="~/js/Studio2/TransactionsGrid/tx-grid-result.js" asp-append-version="true"></script> |
| | | 264 | | <script src="~/js/Studio2/supplier-order-conflict.js" asp-append-version="true"></script> |
| | | 265 | | <script src="~/js/Studio2/TransactionsGrid/tx-grid-commit.js" asp-append-version="true"></script> |
| | | 266 | | <script src="~/js/Studio2/TransactionsGrid/tx-grid-offers.js" asp-append-version="true"></script> |
| | | 267 | | <script src="~/js/Studio2/Grid/offers-table-parts.js" asp-append-version="true"></script> |
| | | 268 | | <script src="~/js/Studio2/TransactionsGrid/tx-grid-offers-table.js" asp-append-version="true"></script> |
| | | 269 | | <script src="~/js/Studio2/TransactionsGrid/tx-grid-cart.js" asp-append-version="true"></script> |
| | | 270 | | <script src="~/js/Studio2/TransactionsGrid/tx-grid-print.js" asp-append-version="true"></script> |
| | | 271 | | <script src="~/js/Studio2/TransactionsGrid/tx-grid-ozon.js" asp-append-version="true"></script> |
| | | 272 | | <script src="~/js/Studio2/TransactionsGrid/tx-grid-stock.js" asp-append-version="true"></script> |
| | | 273 | | <script src="~/js/Studio2/OrdersGrid/orders-grid-feed-columns.js" asp-append-version="true"></script> |
| | | 274 | | <script src="~/js/Studio2/TransactionsGrid/tx-grid-feed.js" asp-append-version="true"></script> |
| | | 275 | | <script src="~/js/Studio2/TransactionsGrid/tx-grid-ship.js" asp-append-version="true"></script> |
| | | 276 | | <script src="~/js/Studio2/TransactionsGrid/tx-grid.js" asp-append-version="true"></script> |
| | | 277 | | } |