Коммерческое предложение
Перетащите сюда файл модели .b3d или нажмите, чтобы выбрать. КП на листе A4: ваша компания и контакты, клиент, картинка модели, состав по модулям с эскизами, размерами и ценой, материалы, кромка, фурнитура, условия. Цена - по ценам из «Сметы по модели» с вашей наценкой и скидкой.
'; if (lastUrl) URL.revokeObjectURL(lastUrl); lastUrl = URL.createObjectURL(new Blob([lastHtml], { type: 'text/html' })); $('v3Stage').innerHTML = ''; $('kpSave').hidden = $('kpPrint').hidden = false; var info = '

' + (total > 0 ? 'Себестоимость по смете: ' + Math.round(cost) + ', цен в смете: ' + nPr + '.' : 'В «Смете по модели» нет цен для материалов этой модели - КП без цены. Откройте смету, впишите цены и нажмите «Обновить КП».') + '

'; readSide(); side(info); if (S.hub) S.hub.say('kp', total > 0 ? 'итого ' + Math.round(disc ? totalD : total) + ' ' + O.cur : 'без цены (нет цен в смете)', { total: total }); window.KP_LAST = { mods: rows.length, total: total, cost: cost, prices: nPr }; // для проверки } function pick() { if (!hasAccess() && !left()) { paywall(); return; } $('v3File').click(); } function open(file) { if (!/\.b3d$/i.test(file.name)) { alert('Нужен файл модели Базиса (.b3d).'); return; } if (!hasAccess() && !left()) { paywall(); return; } var busy = document.createElement('div'); busy.className = 'v3-busy'; busy.textContent = 'Готовлю КП «' + file.name + '»…'; $('v3Stage').appendChild(busy); file.arrayBuffer().then(function (buf) { return S.readModel(buf, file.name); }).then(function (m) { model = m; title = file.name.replace(/\.b3d$/i, ''); client = title; cphone = ''; if (!hasAccess()) put('kp.used', String(used() + 1)); showLeft(); side(); make(); $('kpTitle').textContent = 'КП: ' + title; $('v3New').textContent = 'Другая модель…'; })['catch'](function (e) { busy.remove(); alert('Не получилось: ' + (e && e.message || e)); }); } $('v3File').onchange = function () { if (this.files[0]) open(this.files[0]); this.value = ''; }; $('v3New').onclick = pick; $('v3Drop').onclick = pick; $('kpSave').onclick = function () { var a = document.createElement('a'); a.href = lastUrl; a.download = 'КП - ' + title + '.html'; document.body.appendChild(a); a.click(); a.remove(); }; $('kpPrint').onclick = function () { var f = $('kpFrame'); try { f.contentWindow.print(); } catch (e) { window.open(lastUrl, '_blank'); } }; document.addEventListener('dragover', function (e) { e.preventDefault(); var d = $('v3Drop'); if (d) d.classList.add('hot'); }); document.addEventListener('dragleave', function (e) { var d = $('v3Drop'); if (d && e.target === d) d.classList.remove('hot'); }); document.addEventListener('drop', function (e) { e.preventDefault(); var f = e.dataTransfer.files[0]; if (f) open(f); }); showLeft(); if (S.hub) S.hub.listen('kp', open); window.KPP = { open: open }; // для проверки })();