feat: Sistema de gestión de impresoras persistente
- Crear modelo Printer con campos: id, name, host, deviceId, timeout, isDefault - Almacenamiento persistente en data/printers.json - APIs CRUD: GET/POST /api/printers, GET/PUT/DELETE /api/printers/:id - API para seleccionar impresora activa: POST /api/printers/select - Endpoint de impresión ahora usa la impresora seleccionada o la especificada por printerId - Composable usePrinters() para el cliente - UI: Selector de impresora en sidebar, tab Impresoras en mobile - Componentes: PrintersList, PrintersCard, PrintersForm, PrintersSelector
This commit is contained in:
@@ -1,18 +1,20 @@
|
||||
// Endpoint genérico de impresión que acepta una lista de operaciones
|
||||
import { buildFromOperations, type Operation } from '../../utils/eposBuilder'
|
||||
import { buildSoapEnvelope, sendToPrinter, parsePrinterResponse } from '../../utils/printer'
|
||||
import { getSelectedPrinter, getPrinterById } from '../../utils/printers'
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
try {
|
||||
const config = useRuntimeConfig()
|
||||
const body = await readBody(event)
|
||||
|
||||
const {
|
||||
operations = [],
|
||||
dryRun = false
|
||||
dryRun = false,
|
||||
printerId
|
||||
} = body as {
|
||||
operations?: Operation[]
|
||||
dryRun?: boolean
|
||||
printerId?: string
|
||||
}
|
||||
|
||||
// Construir el XML interior con las operaciones
|
||||
@@ -28,12 +30,24 @@ export default defineEventHandler(async (event) => {
|
||||
}
|
||||
}
|
||||
|
||||
// Obtener la impresora a usar
|
||||
let printer = printerId
|
||||
? await getPrinterById(printerId)
|
||||
: await getSelectedPrinter()
|
||||
|
||||
if (!printer) {
|
||||
return {
|
||||
ok: false,
|
||||
error: 'No hay impresora configurada. Por favor, agrega una impresora primero.'
|
||||
}
|
||||
}
|
||||
|
||||
// Enviar a la impresora
|
||||
const result = await sendToPrinter(
|
||||
soap,
|
||||
config.printerHost,
|
||||
config.printerDeviceId,
|
||||
parseInt(config.printerTimeoutMs)
|
||||
printer.host,
|
||||
printer.deviceId,
|
||||
printer.timeout
|
||||
)
|
||||
|
||||
// Parsear la respuesta
|
||||
@@ -43,7 +57,11 @@ export default defineEventHandler(async (event) => {
|
||||
ok: success,
|
||||
httpStatus: result.status,
|
||||
code,
|
||||
raw: result.data
|
||||
raw: result.data,
|
||||
printerUsed: {
|
||||
id: printer.id,
|
||||
name: printer.name
|
||||
}
|
||||
}
|
||||
} catch (err: any) {
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user