From ed4866ad28d7fd31f46451ab5250c7136231bdfc Mon Sep 17 00:00:00 2001 From: alvarsanmartin Date: Thu, 12 Mar 2026 16:05:49 +0100 Subject: [PATCH] Ya genera el codigo e imprime --- package.json | 2 +- src/main/index.ts | 51 ++++++- src/preload/index.d.ts | 31 +++++ src/preload/index.ts | 6 +- src/renderer/src/assets/main.css | 24 ++++ src/renderer/src/components/ConfigView.vue | 25 +--- src/renderer/src/components/MainView.vue | 152 ++++++++++++--------- 7 files changed, 194 insertions(+), 97 deletions(-) diff --git a/package.json b/package.json index 963070b..7f8a443 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "typecheck:web": "vue-tsc --noEmit -p tsconfig.web.json --composite false", "typecheck": "npm run typecheck:node && npm run typecheck:web", "start": "electron-vite preview", - "dev": "electron-vite dev", + "dev": "electron-vite dev --watch", "build": "npm run typecheck && electron-vite build", "postinstall": "electron-builder install-app-deps", "build:unpack": "npm run build && electron-builder --dir", diff --git a/src/main/index.ts b/src/main/index.ts index d10a8e4..e748dda 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -3,7 +3,7 @@ import { join } from "path"; import { electronApp, optimizer, is } from "@electron-toolkit/utils"; import icon from "../../resources/icon.png?asset"; import { NfcService } from "../services/NfcService"; - +import net, { createConnection } from "net"; function createWindow(): void { // Create the browser window. const mainWindow = new BrowserWindow({ @@ -60,21 +60,26 @@ app.whenReady().then(() => { ipcMain.on("ping", () => console.log("pong")); // HANDLE es bidireccionar ON es unidireccional - ipcMain.handle("nfc:labelReq", async (_event, data: unknown) => { + ipcMain.handle("nfc:labelReq", async (_event, data) => { console.log("nfc:labelReq", data); try { - const response = await fetch("http://localhost:3000/nfc/generate", { + const endpoint = "/nfc/generate"; + const url = data.serverURL + endpoint; + console.log("fullUrl = ", url); + const response = await fetch(data.serverURL + endpoint, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ - card_id: "019cdd39-fc08-7417-b16d-a78794a24c01", - override: false, + card_id: data.card_id, + override: data.override, }), }); - console.log("Codigos:", response); - return 200; + console.log("Response", response.status); + const body = await response.json(); + console.log("Codigos:", body); + return body; } catch (error) { console.error(error); return false; @@ -82,6 +87,38 @@ app.whenReady().then(() => { return data; }); + ipcMain.handle("nfc:printReq", async (_event, data) => { + console.log("nfc:printReq", data); + const client = new net.Socket(); + const port = 9100; + const host = data.printerURL + port; + + const socket = createConnection(port, data.printerURL); + socket.setTimeout(10 * 1000); + socket.on("connect", (e) => { + console.log("Conectado!", e); + socket.write(data.label); + socket.end(); + }); + /* + client.connect(data.printerURL + port, () => { + console.log("Connected to ZSim Printer"); + const res = client.write(data.label, (res) => { + console.log("resultado de la impresion", res); + }); + + console.log("Resultado", res); + }); +*/ + socket.on("close", () => + console.log("Print job sent and connection closed."), + ); + socket.on("error", (err) => + console.error("Printer Error:", err.message), + ); + return data; + }); + ipcMain.handle("ping:url", async (_event, url: string) => { try { const response = await fetch(url, { diff --git a/src/preload/index.d.ts b/src/preload/index.d.ts index 2bc397e..10b064b 100644 --- a/src/preload/index.d.ts +++ b/src/preload/index.d.ts @@ -1,11 +1,42 @@ import { ElectronAPI } from "@electron-toolkit/preload"; +export type CodeResponse = { + error?: string; + data: { + label: string; + code: string; + overriden: boolean; + reused: boolean; + }; +}; + +export type CodeRequest = { + card_id: string; // UUIDv7 + override?: boolean; +}; + +export type PrinterRequest = { + printerURL: string; + label: string; +}; + +export type PrinterResponse = unknown; + export interface NfcAPI { onTag: (callback: (event: { uid: string }) => void) => void; onRemoved: (callback: (event: { uid: string }) => void) => void; onError: (callback: (event: { message: string }) => void) => void; ping: (url: string) => Promise; removeAllListeners: () => void; + labelReq: (args: { + serverURL: string; + card_id: string; + override?: boolean; + }) => Promise; + printReq: (args: { + printerURL: string; + label: string; + }) => Promise; } declare global { diff --git a/src/preload/index.ts b/src/preload/index.ts index 35a0fb9..256ff96 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -1,5 +1,6 @@ import { contextBridge, ipcRenderer } from "electron"; import { electronAPI } from "@electron-toolkit/preload"; +import { CodeRequest, PrinterRequest } from "./index.d.js"; // Custom APIs for renderer const api = { @@ -13,9 +14,12 @@ const api = { onError: (callback: (event: { message: string }) => void): void => { ipcRenderer.on("nfc:error", (_event, value) => callback(value)); }, - labelReq: (data: unknown): Promise => { + labelReq: (data: CodeRequest): Promise => { return ipcRenderer.invoke("nfc:labelReq", data); }, + printReq: (data: PrinterRequest): Promise => { + return ipcRenderer.invoke("nfc:printReq", data); + }, ping: (url: string): Promise => { return ipcRenderer.invoke("ping:url", url); }, diff --git a/src/renderer/src/assets/main.css b/src/renderer/src/assets/main.css index 20ef722..5a178dc 100644 --- a/src/renderer/src/assets/main.css +++ b/src/renderer/src/assets/main.css @@ -6,3 +6,27 @@ body { overflow: auto; user-select: none; } + +.flex-row { + display: flex; + flex-direction: row; + gap: 1em; +} + +.flex-col { + display: flex; + flex-direction: column; + gap: 1em; +} + +.grow { + flex-grow: 1; +} + +.bg-dots { + background-image: radial-gradient( + var(--te-gray-light) 1px, + transparent 1px + ); + background-size: 20px 20px; +} diff --git a/src/renderer/src/components/ConfigView.vue b/src/renderer/src/components/ConfigView.vue index 563d22f..98dc0ee 100644 --- a/src/renderer/src/components/ConfigView.vue +++ b/src/renderer/src/components/ConfigView.vue @@ -1,7 +1,7 @@