feat: Templates persistentes en servidor + Constructor con tabs por tipo de comando
- Templates ahora se guardan en servidor (data/templates.json) disponibles para todos - API CRUD para templates: GET/POST /api/templates, GET/PUT/DELETE /api/templates/[id] - Constructor de comandos rediseñado con tabs: Texto, Feed, Cortar, Pulse, QR, Barcode - Cada tipo de comando tiene su formulario específico con campos relevantes - Eliminado QuickActions (integrado en tabs del constructor) - Mejorada UI de lista de impresoras con renderizado condicional - Agregado data/ a .gitignore (datos de runtime)
This commit is contained in:
@@ -71,62 +71,70 @@ async function handleDelete(printer: typeof printers.printers.value[0]) {
|
||||
|
||||
<template>
|
||||
<div class="space-y-4">
|
||||
<div class="flex items-center justify-between">
|
||||
<h2 class="text-lg font-semibold text-gray-900 dark:text-white">
|
||||
Impresoras
|
||||
</h2>
|
||||
<UButton
|
||||
icon="i-heroicons-plus"
|
||||
@click="openNewPrinter"
|
||||
>
|
||||
Agregar
|
||||
</UButton>
|
||||
</div>
|
||||
|
||||
<div v-if="printers.loading.value" class="flex justify-center py-8">
|
||||
<UIcon name="i-heroicons-arrow-path" class="w-8 h-8 animate-spin text-gray-400" />
|
||||
</div>
|
||||
|
||||
<div v-else-if="printers.printers.value.length === 0" class="text-center py-8">
|
||||
<UIcon name="i-heroicons-printer" class="w-12 h-12 text-gray-400 mx-auto mb-2" />
|
||||
<p class="text-gray-500 dark:text-gray-400">
|
||||
No hay impresoras configuradas
|
||||
</p>
|
||||
<p class="text-sm text-gray-400 dark:text-gray-500 mb-4">
|
||||
Agrega una impresora para comenzar a imprimir
|
||||
</p>
|
||||
<UButton @click="openNewPrinter">
|
||||
Agregar primera impresora
|
||||
</UButton>
|
||||
</div>
|
||||
|
||||
<div v-else class="grid gap-3 sm:grid-cols-2">
|
||||
<PrintersCard
|
||||
v-for="printer in printers.printers.value"
|
||||
:key="printer.id"
|
||||
:printer="printer"
|
||||
:is-selected="printer.id === printers.selectedPrinterId.value"
|
||||
@select="handleSelect(printer)"
|
||||
@edit="openEditPrinter(printer)"
|
||||
@delete="handleDelete(printer)"
|
||||
@set-default="handleSetDefault(printer)"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<UDrawer v-model:open="showDrawer">
|
||||
<template #header>
|
||||
<h3 class="text-lg font-semibold">
|
||||
<!-- Vista del formulario -->
|
||||
<template v-if="showDrawer">
|
||||
<div class="flex items-center gap-2 mb-4">
|
||||
<UButton
|
||||
icon="i-heroicons-arrow-left"
|
||||
variant="ghost"
|
||||
color="neutral"
|
||||
size="sm"
|
||||
@click="showDrawer = false"
|
||||
/>
|
||||
<h3 class="text-lg font-semibold text-gray-900 dark:text-white">
|
||||
{{ editingPrinter ? 'Editar impresora' : 'Nueva impresora' }}
|
||||
</h3>
|
||||
</template>
|
||||
</div>
|
||||
<PrintersForm
|
||||
:printer="editingPrinter"
|
||||
@submit="handleSubmit"
|
||||
@cancel="showDrawer = false"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<div class="p-4">
|
||||
<PrintersForm
|
||||
:printer="editingPrinter"
|
||||
@submit="handleSubmit"
|
||||
@cancel="showDrawer = false"
|
||||
<!-- Vista de la lista -->
|
||||
<template v-else>
|
||||
<div class="flex items-center justify-between">
|
||||
<h2 class="text-lg font-semibold text-gray-900 dark:text-white">
|
||||
Impresoras
|
||||
</h2>
|
||||
<UButton
|
||||
icon="i-heroicons-plus"
|
||||
@click="openNewPrinter"
|
||||
>
|
||||
Agregar
|
||||
</UButton>
|
||||
</div>
|
||||
|
||||
<div v-if="printers.loading.value" class="flex justify-center py-8">
|
||||
<UIcon name="i-heroicons-arrow-path" class="w-8 h-8 animate-spin text-gray-400" />
|
||||
</div>
|
||||
|
||||
<div v-else-if="printers.printers.value.length === 0" class="text-center py-8">
|
||||
<UIcon name="i-heroicons-printer" class="w-12 h-12 text-gray-400 mx-auto mb-2" />
|
||||
<p class="text-gray-500 dark:text-gray-400">
|
||||
No hay impresoras configuradas
|
||||
</p>
|
||||
<p class="text-sm text-gray-400 dark:text-gray-500 mb-4">
|
||||
Agrega una impresora para comenzar a imprimir
|
||||
</p>
|
||||
<UButton @click="openNewPrinter">
|
||||
Agregar primera impresora
|
||||
</UButton>
|
||||
</div>
|
||||
|
||||
<div v-else class="grid gap-3 sm:grid-cols-2">
|
||||
<PrintersCard
|
||||
v-for="printer in printers.printers.value"
|
||||
:key="printer.id"
|
||||
:printer="printer"
|
||||
:is-selected="printer.id === printers.selectedPrinterId.value"
|
||||
@select="handleSelect(printer)"
|
||||
@edit="openEditPrinter(printer)"
|
||||
@delete="handleDelete(printer)"
|
||||
@set-default="handleSetDefault(printer)"
|
||||
/>
|
||||
</div>
|
||||
</UDrawer>
|
||||
</template>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
Reference in New Issue
Block a user