From 32d6eb86c8825f86638c7aae15abcfa9b5890206 Mon Sep 17 00:00:00 2001 From: pavlov346346-source Date: Mon, 21 Sep 2026 17:36:00 +0300 Subject: [PATCH] feat: replace the large training banner with a one-line notice MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The big "Учебный каталог включён" card with its buttons sat on top of the order screen. While training mode is on, the order screen now shows only "Включён учебный режим · отключить в настройках"; the link opens Settings at the training switch. The guide (trial order, stock, purchasing, TTK) moves into the "Обучение и знакомство" settings card, so nothing is lost. The invitation card for companies with an empty catalog is unchanged. Specs updated for the new placement, plus a check that the notice link lands on (and focuses) the switch. Co-Authored-By: Claude Sonnet 5 --- public/core/training-catalog.js | 2 ++ public/core/trial-demo.js | 36 +++++++++++++++++++++++++++------ public/index.html | 4 ++-- tests/training-catalog.spec.mjs | 6 +++++- tests/trial-demo.spec.mjs | 7 ++++++- 5 files changed, 45 insertions(+), 10 deletions(-) diff --git a/public/core/training-catalog.js b/public/core/training-catalog.js index 527df8e..9cdeb73 100644 --- a/public/core/training-catalog.js +++ b/public/core/training-catalog.js @@ -128,6 +128,8 @@ card.innerHTML='

Обучение и знакомство

Фотографии, составы, технологические карты, учебные цены и поставщики. Можно собрать пробный заказ, посмотреть предложение клиенту, заготовки и закупки — без ручного заполнения каталога.

Снимите галочку, чтобы скрыть учебные позиции. Свои блюда, изменения учебных карточек и созданные заказы не удаляются. Переключатель действует для вашего профиля в этой компании. Складские операции выполняются только по вашей команде.

'; host.prepend(card); card.querySelector('input').addEventListener('change',e=>{setEnabled(e.target.checked).catch(()=>{});}); + // The trial guide (order, stock, TTK) is mounted inside this card while training is on. + queueMicrotask(()=>window.CateriumTrialDemo?.render?.()); } const check=$('ctTrainingEnabled');check.checked=busy?desired:enabled();check.disabled=busy||!canManage()||!repo()?.catalog; card.setAttribute('aria-busy',String(busy)); diff --git a/public/core/trial-demo.js b/public/core/trial-demo.js index fecc4e2..97fba3c 100644 --- a/public/core/trial-demo.js +++ b/public/core/trial-demo.js @@ -18,16 +18,40 @@ function message(text){const el=$('ctDemoMessage');if(el)el.textContent=text;} async function refreshStatus(){status=null;statusWorkspace='';render();} + function openTrainingSettings(){ + const nav=[...document.querySelectorAll('header nav button')].find(b=>String(b.dataset.navLabel||b.textContent||'').trim()==='Настройки'); + if(nav)nav.click();else window.show?.('enterprise-settings'); + setTimeout(()=>{ + const card=$('ctTrainingSettings');if(!card)return; + const tab=card.dataset.settingsTab;if(tab)document.querySelector(`[data-settings-tab-target="${tab}"]`)?.click(); + setTimeout(()=>{card.scrollIntoView({block:'start',behavior:'smooth'});card.querySelector('input')?.focus({preventScroll:true});},120); + },150); + } + function ensureNotice(host){ + let notice=$('ctTrainingNotice'); + if(!notice){ + notice=document.createElement('div');notice.id='ctTrainingNotice';notice.className='ct-training-notice';notice.setAttribute('role','status'); + notice.innerHTML='Включён учебный режим ·'; + notice.querySelector('button').addEventListener('click',openTrainingSettings); + } + if(host.firstElementChild!==notice)host.prepend(notice); + } function render(){ const host=$('new');if(!host)return; - if(window.CateriumTrainingCatalog&&!window.CateriumTrainingCatalog.enabled()){$('ctTrialDemo')?.remove();return;} + const clear=()=>{$('ctTrialDemo')?.remove();$('ctTrainingNotice')?.remove();}; + if(window.CateriumTrainingCatalog&&!window.CateriumTrainingCatalog.enabled()){clear();return;} const demoItems=catalog().filter(b=>b.demo),items=demoItems.filter(b=>b.ttk),active=installed()&&demoItems.length>0; - if(!signedIn()||cloud()?.isSupportMode?.()||(!active&&!status?.canInstall)){$('ctTrialDemo')?.remove();return;} - let card=$('ctTrialDemo');if(!card){card=document.createElement('section');card.id='ctTrialDemo';card.className='card';host.prepend(card);} + if(!signedIn()||cloud()?.isSupportMode?.()||(!active&&!status?.canInstall)){clear();return;} + // While training is on, the order screen only carries a one-line notice; the guide lives in Settings. + if(active)ensureNotice(host);else $('ctTrainingNotice')?.remove(); + const target=active?$('ctTrainingSettings'):host; + let card=$('ctTrialDemo');if(card&&card.parentElement!==target){card.remove();card=null;} + if(!target)return; + if(!card){card=document.createElement('section');card.id='ctTrialDemo';card.className=active?'ct-demo-guide':'card';if(active)target.append(card);else target.prepend(card);} const signature=JSON.stringify({active,items:demoItems.map(x=>[x.id,x.name]),upgrade:status?.canUpgrade,can:writable()}); if(card.dataset.signature===signature)return;card.dataset.signature=signature; const previousGuide={open:card.querySelector('details')?.open,selected:$('ctDemoBox')?.value,message:$('ctDemoMessage')?.textContent}; - card.innerHTML=active?`
Учебный каталог включён

${demoItems.length} тестовых позиций · готовые составы, учебные цены и поставщики

Учебные примеры
+ card.innerHTML=active?`
Пробный заказ, склад и закупки

${demoItems.length} тестовых позиций · готовые составы, учебные цены и поставщики

Создайте пробный заказ, посмотрите нехватку в закупках, оформите приход на складе и спишите продукты по заказу. Все данные можно редактировать.

${status?.canUpgrade?'':''} @@ -76,9 +100,9 @@ dialog.querySelector('[data-ttk-edit]').onclick=()=>{dialog.close();window.editBox?.(box.id)}; dialog.addEventListener('close',()=>dialog.remove(),{once:true});dialog.showModal(); } - function reset(){epoch++;pending=null;status=null;statusWorkspace='';$('ctTrialDemo')?.remove();$('ctDemoTtk')?.remove();} + function reset(){epoch++;pending=null;status=null;statusWorkspace='';$('ctTrialDemo')?.remove();$('ctTrainingNotice')?.remove();$('ctDemoTtk')?.remove();} function boot(){ - const style=document.createElement('style');style.textContent=`#ctTrialDemo{margin:0 0 18px;padding:18px 22px}#ctTrialDemo p{font-size:13px;line-height:1.5;margin:6px 0 12px;max-width:900px}.ct-demo-heading{display:flex;justify-content:space-between;gap:14px;align-items:flex-start}.ct-demo-heading strong{font-size:18px}.ct-demo-heading h2{font-size:22px;margin:8px 0}.ct-demo-badge{border:1px solid #c3d4bd;border-radius:18px;padding:5px 10px;font-size:12px;white-space:nowrap}.ct-demo-actions{display:flex;gap:10px;align-items:end;flex-wrap:wrap;margin:12px 0}.ct-demo-actions label{min-width:0;max-width:100%;flex:1}.ct-demo-actions select{width:100%;font:inherit;padding:9px}.ct-demo-actions button{max-width:100%}#ctTrialDemo details{font-size:13px;margin-top:14px}#ctTrialDemo summary{cursor:pointer}#ctDemoMessage:empty{display:none}#ctDemoTtk{width:min(860px,calc(100vw - 24px));max-height:90dvh;box-sizing:border-box;overflow:auto;border:1px solid #d4c8b0;border-radius:18px;padding:24px;background:var(--card,#fff);color:var(--text,#27241e)}#ctDemoTtk::backdrop{background:#0008}.ct-demo-table{overflow-x:auto}.ct-demo-table table{border-collapse:collapse;min-width:580px;width:100%;font-size:13px}.ct-demo-table td,.ct-demo-table th{text-align:right;padding:9px 7px;border-bottom:1px solid #ddd}.ct-demo-table th:first-child,.ct-demo-table td:first-child{text-align:left}#ctDemoTtk li{margin:8px 0;line-height:1.5}.ct-demo-notice{background:#fff3d6;color:#604918;padding:12px;border-radius:8px}@media(max-width:600px){#ctTrialDemo{padding:14px}.ct-demo-heading{flex-wrap:wrap}.ct-demo-actions>button{flex:1 1 auto}.ct-demo-actions label{flex-basis:100%}#ctDemoTtk{padding:16px}}@media print{#ctTrialDemo{display:none!important}}`; + const style=document.createElement('style');style.textContent=`#ctTrialDemo{margin:0 0 18px;padding:18px 22px}#ctTrialDemo p{font-size:13px;line-height:1.5;margin:6px 0 12px;max-width:900px}.ct-demo-heading{display:flex;justify-content:space-between;gap:14px;align-items:flex-start}.ct-demo-heading strong{font-size:18px}.ct-demo-heading h2{font-size:22px;margin:8px 0}.ct-demo-badge{border:1px solid #c3d4bd;border-radius:18px;padding:5px 10px;font-size:12px;white-space:nowrap}.ct-demo-actions{display:flex;gap:10px;align-items:end;flex-wrap:wrap;margin:12px 0}.ct-demo-actions label{min-width:0;max-width:100%;flex:1}.ct-demo-actions select{width:100%;font:inherit;padding:9px}.ct-demo-actions button{max-width:100%}#ctTrialDemo details{font-size:13px;margin-top:14px}#ctTrialDemo summary{cursor:pointer}#ctDemoMessage:empty{display:none}#ctDemoTtk{width:min(860px,calc(100vw - 24px));max-height:90dvh;box-sizing:border-box;overflow:auto;border:1px solid #d4c8b0;border-radius:18px;padding:24px;background:var(--card,#fff);color:var(--text,#27241e)}#ctDemoTtk::backdrop{background:#0008}.ct-demo-table{overflow-x:auto}.ct-demo-table table{border-collapse:collapse;min-width:580px;width:100%;font-size:13px}.ct-demo-table td,.ct-demo-table th{text-align:right;padding:9px 7px;border-bottom:1px solid #ddd}.ct-demo-table th:first-child,.ct-demo-table td:first-child{text-align:left}#ctDemoTtk li{margin:8px 0;line-height:1.5}.ct-demo-notice{background:#fff3d6;color:#604918;padding:12px;border-radius:8px}@media(max-width:600px){#ctTrialDemo{padding:14px}.ct-demo-heading{flex-wrap:wrap}.ct-demo-actions>button{flex:1 1 auto}.ct-demo-actions label{flex-basis:100%}#ctDemoTtk{padding:16px}}#ctTrainingNotice{display:flex;align-items:center;flex-wrap:wrap;gap:4px 6px;margin:0 0 12px;padding:7px 12px;border:1px solid #e6dcc0;border-radius:10px;background:#faf6e9;color:#5f4f25;font-size:12px;line-height:1.4}#ctTrainingNotice button{all:unset;box-sizing:border-box;cursor:pointer;color:#7a5c12;text-decoration:underline;font:inherit}#ctTrainingNotice button:focus-visible{outline:2px solid #b88c2e;outline-offset:2px;border-radius:3px}#ctTrainingSettings #ctTrialDemo{margin:16px 0 0;padding:16px 0 0;border:0;border-top:1px solid var(--sun-ui-border,#deded6);border-radius:0;box-shadow:none;background:none}#ctTrainingSettings #ctTrialDemo .ct-demo-heading strong{font-size:15px}@media print{#ctTrialDemo,#ctTrainingNotice{display:none!important}}`; document.head.append(style); window.addEventListener('sun:cloud-tenant-changing',reset); window.addEventListener('sun:cloud-permissions-changed',()=>{render();refreshStatus()}); diff --git a/public/index.html b/public/index.html index 40abf6a..6b555da 100644 --- a/public/index.html +++ b/public/index.html @@ -1,4 +1,4 @@ -