diff --git a/src/lib/PrintMenu.svelte b/src/lib/PrintMenu.svelte
index c6e112e..d486821 100644
--- a/src/lib/PrintMenu.svelte
+++ b/src/lib/PrintMenu.svelte
@@ -33,7 +33,6 @@
let isPrinting = $state(false);
let uid = 0;
- const PRICE_PER_PAGE = 9;
const qualities = [
{ id: 'low', label: 'Эконом' },
@@ -46,6 +45,13 @@
{ id: 'color', label: 'Цвет' }
];
+ // ── Тарифная сетка ──
+ function getPricePerPage(pagesCount) {
+ if (pagesCount >= 1000) return 4;
+ if (pagesCount >= 25) return 9;
+ return 10;
+ }
+
// ── Вспомогательная функция для реактивного обновления ──
function updateFile(id, changes) {
files = files.map(f => f.id === id ? { ...f, ...changes } : f);
@@ -300,14 +306,17 @@
function qualityFillFor(file) { return Math.round((file.qualityIndex / (qualities.length - 1)) * 100); }
function updateQuality(file, val) { updateFile(file.id, { qualityIndex: val }); }
- // ── Расчет цены ──
+ // ── Расчет цены (ОБНОВЛЕННАЯ ЛОГИКА) ──
const totalPrice = $derived(() => {
let sum = 0;
for (const f of files) {
const pagesCount = f.selectedPages ? f.selectedPages.size : 0;
- sum += pagesCount * f.copies;
+ if (pagesCount > 0) {
+ const pricePerPage = getPricePerPage(pagesCount);
+ sum += pagesCount * f.copies * pricePerPage;
+ }
}
- return sum * PRICE_PER_PAGE;
+ return sum;
});
const extraCopies = $derived(files.reduce((sum, f) => sum + (f.copies - 1), 0));
@@ -484,6 +493,14 @@
{#if extraCopies > 0}, {extraCopies} {plCopies(extraCopies)}{/if}
{/if}
+
+
+
+ (f.selectedPages?.size || 0) < 25)}>10р/л от 1
+ { const s = f.selectedPages?.size || 0; return s >= 25 && s < 1000; })}>9р/л от 25
+ (f.selectedPages?.size || 0) >= 1000)}>4р/л от 1000
+
+
Итого
{totalPrice()}₽
@@ -607,6 +624,26 @@
.action-btn:disabled { opacity: 0.6; cursor: wait; }
.action-btn.primary { background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%); box-shadow: 0 8px 24px -6px rgba(99, 102, 241, 0.5); }
.action-btn.secondary { background: linear-gradient(135deg, #5b8cff 0%, #38c6ff 100%); box-shadow: 0 8px 24px -6px rgba(72, 150, 255, 0.4); }
+
+ /* ── Стили расценки ── */
+ .pricing-info {
+ display: flex;
+ justify-content: center;
+ gap: 12px;
+ font-size: 10px;
+ line-height: 1.2;
+ color: rgba(255, 255, 255, 0.25);
+ margin-bottom: 4px;
+ user-select: none;
+ flex-wrap: wrap;
+ }
+ .price-tier {
+ transition: color 0.2s ease;
+ }
+ .price-tier.active {
+ color: rgba(255, 255, 255, 0.6);
+ }
+
.price-summary { display: flex; justify-content: space-between; align-items: baseline; width: 100%; }
.summary-itogo { font-size: 30px; font-weight: 700; color: #8b93a1; }
.summary-price { font-size: 38px; font-weight: 800; color: #fff; }
diff --git a/update_nvm.sh b/update_nvm.sh
new file mode 100755
index 0000000..848d957
--- /dev/null
+++ b/update_nvm.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+# Загружаем nvm
+export NVM_DIR="$HOME/.nvm"
+[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
+
+# Устанавливаем LTS версию Node.js
+nvm install --lts
+
+# Обновляем npm до последней версии
+npm install -g npm@latest