From 6df40c8423488c51a22c59e53c89ffe34af347f9 Mon Sep 17 00:00:00 2001 From: gyq <875626088@qq.com> Date: Thu, 23 May 2024 14:24:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist-electron/main.js | 87 ++++++++++++++++++++- src/views/home/components/settleAccount.vue | 57 +++++++++++--- 2 files changed, 130 insertions(+), 14 deletions(-) diff --git a/dist-electron/main.js b/dist-electron/main.js index a9d897e..3b14b44 100644 --- a/dist-electron/main.js +++ b/dist-electron/main.js @@ -1 +1,86 @@ -"use strict";const s=require("path"),e=require("electron");let t;e.app.whenReady().then(()=>{t=new e.BrowserWindow({title:"银收客",width:1024,height:768,fullscreenable:!0,fullscreen:!process.env.VITE_DEV_SERVER_URL,simpleFullscreen:!0,frame:!!process.env.VITE_DEV_SERVER_URL,webPreferences:{nodeIntegration:!0,contextIsolation:!1}}),process.env.VITE_DEV_SERVER_URL?t.loadURL(process.env.VITE_DEV_SERVER_URL):t.loadFile(s.resolve(__dirname,"../dist/index.html")),e.app.on("activate",()=>{e.BrowserWindow.getAllWindows().length===0&&createWindow()}),e.ipcMain.on("quitHandler",(r,n)=>{e.app.quit()}),e.ipcMain.on("getPrintList",()=>{t.webContents.getPrintersAsync().then(r=>{t.webContents.send("printList",r)})});const i=new e.BrowserWindow({show:!1,width:464,height:1726,webPreferences:{nodeIntegration:!0,contextIsolation:!1}});process.env.VITE_DEV_SERVER_URL?i.loadFile(s.join(__dirname,"../public/print.html")):i.loadFile(s.resolve(__dirname,"../dist/print.html")),e.ipcMain.on("printerInfoSync",(r,n)=>{i.webContents.send("getParams",n)}),e.ipcMain.on("printStart",(r,n)=>{console.log(n);let o=JSON.parse(n).deviceName;i.webContents.print({silent:!0,deviceName:o,pageSize:{width:58e3,height:216e3},scaleFactor:80,landscape:!1,margins:{marginType:"none",top:0,bottom:0,left:0,right:0},dpi:{horizontal:203,vertical:203}})})});e.app.on("window-all-closed",()=>{process.platform!=="darwin"&&e.app.quit()}); +"use strict"; +const path = require("path"); +const electron = require("electron"); +let win; +electron.app.whenReady().then(() => { + win = new electron.BrowserWindow({ + title: "银收客", + width: 1024, + height: 768, + fullscreenable: true, + fullscreen: process.env.VITE_DEV_SERVER_URL ? false : true, + simpleFullscreen: true, + frame: process.env.VITE_DEV_SERVER_URL ? true : false, + webPreferences: { + // 集成网页和 Node.js,也就是在渲染进程中,可以调用 Node.js 方法 + nodeIntegration: true, + contextIsolation: false + } + }); + if (process.env.VITE_DEV_SERVER_URL) { + win.loadURL(process.env.VITE_DEV_SERVER_URL); + } else { + win.loadFile(path.resolve(__dirname, "../dist/index.html")); + } + electron.app.on("activate", () => { + if (electron.BrowserWindow.getAllWindows().length === 0) { + createWindow(); + } + }); + electron.ipcMain.on("quitHandler", (_, msg) => { + electron.app.quit(); + }); + electron.ipcMain.on("getPrintList", () => { + win.webContents.getPrintersAsync().then((res) => { + win.webContents.send("printList", res); + }); + }); + const printWin = new electron.BrowserWindow({ + show: false, + width: 464, + height: 1726, + webPreferences: { + // 集成网页和 Node.js,也就是在渲染进程中,可以调用 Node.js 方法 + nodeIntegration: true, + contextIsolation: false + } + }); + if (process.env.VITE_DEV_SERVER_URL) { + printWin.loadFile(path.join(__dirname, "../public/print.html")); + } else { + printWin.loadFile(path.resolve(__dirname, "../dist/print.html")); + } + electron.ipcMain.on("printerInfoSync", (event, arg) => { + printWin.webContents.send("getParams", arg); + }); + electron.ipcMain.on("printStart", (event, arg) => { + console.log(arg); + const _parmas = JSON.parse(arg); + let name = _parmas.deviceName; + printWin.webContents.print({ + silent: true, + deviceName: name, + pageSize: { + width: 58e3, + height: 216e3 + }, + scaleFactor: 80, + landscape: false, + margins: { + marginType: "none", + top: 0, + bottom: 0, + left: 0, + right: 0 + }, + dpi: { + horizontal: 203, + vertical: 203 + } + }); + }); +}); +electron.app.on("window-all-closed", () => { + if (process.platform !== "darwin") + electron.app.quit(); +}); diff --git a/src/views/home/components/settleAccount.vue b/src/views/home/components/settleAccount.vue index 4e8bc8c..ebd9786 100644 --- a/src/views/home/components/settleAccount.vue +++ b/src/views/home/components/settleAccount.vue @@ -107,6 +107,7 @@ const props = defineProps({ const isPrint = ref(true); const printList = ref([]); +const localPrintList = ref([]) // 获取打印机状态 async function bySubTypeAjax() { @@ -122,24 +123,53 @@ async function bySubTypeAjax() { } } +// 获取本地打印机列表 +function getPrintList() { + ipcRenderer.send("getPrintList"); + ipcRenderer.on("printList", (event, arg) => { + localPrintList.value = arg; + console.log(localPrintList.value); + }); +} + +// 检查本地打印机是否能正常使用 +function checkLocalPrint(deviceName) { + let print = '' + for (let item of localPrintList.value) { + if (item.name == deviceName) { + print = item + } + } + + if (!print.name || !print.status) { + return false + } else { + return true + } +} + // 打印操作 async function printHandle() { try { if (!isPrint.value) return; if (printList.value.length) { - const data = { - shop_name: store.userInfo.merchantName, - carts: props.cart, - amount: props.amount, - remark: props.remark, - orderInfo: props.orderInfo, - deviceName: printList.value[0].config.deviceName, - createdAt: dayjs(props.orderInfo.createdAt).format( - "YYYY-MM-DD HH:mm:ss" - ), - printTime: dayjs().format("YYYY-MM-DD HH:mm:ss"), - }; - ipcRenderer.send("printerInfoSync", JSON.stringify(data)); + if (!checkLocalPrint(printList.value[0].config.deviceName)) { + ElMessage.error("本地打印机无法使用,请检查打印机是否正确连接"); + } else { + const data = { + shop_name: store.userInfo.merchantName, + carts: props.cart, + amount: props.amount, + remark: props.remark, + orderInfo: props.orderInfo, + deviceName: printList.value[0].config.deviceName, + createdAt: dayjs(props.orderInfo.createdAt).format( + "YYYY-MM-DD HH:mm:ss" + ), + printTime: dayjs().format("YYYY-MM-DD HH:mm:ss"), + }; + ipcRenderer.send("printerInfoSync", JSON.stringify(data)); + } } else { // ElMessage.error("您还没有添加本地打印设备,将使用网络打印"); try { @@ -177,6 +207,7 @@ defineExpose({ }); onMounted(() => { + getPrintList(); bySubTypeAjax(); });