diff --git a/src/lib/common/services/pdf.service.js b/src/lib/common/services/pdf.service.js
index 4cad5ca..0cc37ea 100644
--- a/src/lib/common/services/pdf.service.js
+++ b/src/lib/common/services/pdf.service.js
@@ -1,10 +1,9 @@
import * as pdfjsLib from 'pdfjs-dist';
-// Явно указываем путь к worker'у, чтобы избежать проблем с ?worker в PWA/Chromium
-pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
- 'pdfjs-dist/build/pdf.worker.min.mjs',
- import.meta.url
-).toString();
+// Используем ?url-импорт Vite — он корректно резолвится и в dev, и в prod
+import workerUrl from 'pdfjs-dist/build/pdf.worker.min.mjs?url';
+
+pdfjsLib.GlobalWorkerOptions.workerSrc = workerUrl;
/**
* Загрузка PDF документа
@@ -39,7 +38,10 @@ export async function renderPageToImage(pdfDoc, pageNum, scale = 1.0) {
canvas.style.width = `${Math.floor(viewport.width)}px`;
canvas.style.height = `${Math.floor(viewport.height)}px`;
- const transform = outputScale !== 1 ? [outputScale, 0, 0, outputScale, 0, 0] : undefined;
+ const transform = outputScale !== 1
+ ? [outputScale, 0, 0, outputScale, 0, 0]
+ : undefined;
+
await page.render({ canvasContext: context, viewport, transform }).promise;
return canvas.toDataURL('image/jpeg', 0.85);
}
diff --git a/src/lib/pages/print/PrintProgress.svelte b/src/lib/pages/print/PrintProgress.svelte
index e143cd8..955989d 100644
--- a/src/lib/pages/print/PrintProgress.svelte
+++ b/src/lib/pages/print/PrintProgress.svelte
@@ -1,234 +1,305 @@
-
-
- {#if store.job}
- {#each store.job.files as f, i (i + '-' + f.name)}
- {@const b = badge(f.name)}
- {@const isLastDone = f.status === 'done' && !store.job.files.slice(i + 1).some(f => f.status === 'printing' || f.status === 'queued')}
- {@const hasNextQueued = store.job.files.slice(i + 1).some(f => f.status === 'queued')}
-
-
- {#if b}{b}{/if}
- {f.name}
- {STATUS_LABEL[f.status] ?? f.status}
-
-
- {#if f.status === 'awaiting_clear_output'}
-
- - Уберите распечатанные листы из выходного лотка
- - Нажмите кнопку ниже для запуска двусторонней печати
-
- {:else if f.status === 'awaiting_flip'}
-
- - Не переворачивая, положите остальные листы в слот ручной подачи
-
- {:else if isLastDone && hasNextQueued && !store.autoContinue}
-
- - Возьмите готовый документ
- - Нажмите далее
-
- {/if}
-
- {#if f.error}
- {f.error}
- {/if}
-
- {/each}
- {/if}
-
-
+
+
+ {#if b}{b}{/if}
+ {f.name}
+
+ {STATUS_LABEL[f.status] ?? f.status}
+
+
+
+ {#if f.status === 'awaiting_pickup'}
+
+ - Дождитесь завершения печати
+ - Нажмите кнопку ниже для подтверждения
+
+ {:else if f.status === 'awaiting_clear_output'}
+
+ - Уберите распечатанные листы из выходного лотка
+ - Нажмите кнопку ниже для продолжения
+
+ {:else if f.status === 'awaiting_flip'}
+
+ - Не переворачивая, положите листы в слот ручной подачи
+ - Нажмите кнопку ниже для печати обратной стороны
+
+ {/if}
+
+ {#if f.error}
+ {f.error}
+ {/if}
+
+ {/each}
+ {/if}
+
+
+
diff --git a/src/lib/pages/print/store.svelte.js b/src/lib/pages/print/store.svelte.js
index 13c3d56..19a1a62 100644
--- a/src/lib/pages/print/store.svelte.js
+++ b/src/lib/pages/print/store.svelte.js
@@ -250,21 +250,20 @@ export function createPrintStore() {
}
}
- async function refreshJob() {
- if (!job) return;
- try {
- const res = await fetch(`/api/print/${job.job_id}`);
- if (!res.ok) return;
- job = await res.json();
-
- // Автопродолжение срабатывает ТОЛЬКО для awaiting_pickup
- if (job.phase === 'awaiting_pickup' && autoContinue) {
- advanceJob();
- }
- } catch (e) {
- console.error('refresh error:', e);
- }
- }
+ async function refreshJob() {
+ if (!job) return;
+ try {
+ const res = await fetch(`/api/print/${job.job_id}`);
+ if (!res.ok) return;
+ job = await res.json();
+
+ if (job.phase === 'awaiting_pickup' && autoContinue) {
+ advanceJob();
+ }
+ } catch (e) {
+ console.error('refresh error:', e);
+ }
+ }
async function cancelJob() {
if (!job) return;
diff --git a/vite.config.js b/vite.config.js
index 3a844bd..56ea7f4 100644
--- a/vite.config.js
+++ b/vite.config.js
@@ -23,7 +23,6 @@ export default defineConfig({
injectRegister: 'auto',
workbox: {
clientsClaim: true,
- // Добавили mjs, чтобы pdf.worker.min.mjs попадал в precache Нужно для PDFJS
globPatterns: ['**/*.{js,mjs,css,html,ico,png,svg,wasm}'],
navigateFallbackDenylist: [/^\/api\/version/],
runtimeCaching: [
@@ -41,7 +40,6 @@ export default defineConfig({
}
}
},
- // Fallback кэширование для worker-файлов, если они не попали в precache
{
urlPattern: /\/assets\/.*\.(mjs|js)$/,
handler: 'CacheFirst',
@@ -87,5 +85,17 @@ export default defineConfig({
rewrite: (path) => path.replace(/^\/api/, '')
}
}
- }
+ },
+
+ build: {
+ target: 'esnext',
+ rollupOptions: {
+ output: {
+ format: 'es',
+ },
+ },
+ },
+ worker: {
+ format: 'es',
+ },
})