From 27721ca0960f8368ff038fd98401491fbba6c0d2 Mon Sep 17 00:00:00 2001 From: gyq <875626088@qq.com> Date: Mon, 4 Mar 2024 15:48:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E6=8E=A5=E5=AE=8C=E6=AF=95=E4=B8=8B?= =?UTF-8?q?=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist-electron/main.js | 58 +++- electron/main.js | 13 +- electron/printUtils.js | 63 ++++ index.html | 4 +- public/print.html | 34 ++ src/App.vue | 4 +- src/api/pay.js | 79 +++++ src/api/product.js | 13 + src/assets/icon_scan.png | Bin 0 -> 2418 bytes src/components/payCard.vue | 199 ----------- src/components/payCard/payCard.vue | 311 ++++++++++++++++++ src/components/payCard/scanModal.vue | 272 +++++++++++++++ src/components/remarkModal.vue | 9 +- src/router/index.js | 1 + src/utils/index.js | 26 ++ src/utils/request.js | 2 +- src/views/home/components/goods.vue | 18 +- .../home/components/pendingCartModal.vue | 3 + src/views/home/components/settleAccount.vue | 50 ++- src/views/home/index.vue | 51 ++- src/views/home/test.vue | 37 +++ 21 files changed, 1010 insertions(+), 237 deletions(-) create mode 100644 electron/printUtils.js create mode 100644 public/print.html create mode 100644 src/api/pay.js create mode 100644 src/assets/icon_scan.png delete mode 100644 src/components/payCard.vue create mode 100644 src/components/payCard/payCard.vue create mode 100644 src/components/payCard/scanModal.vue create mode 100644 src/views/home/test.vue diff --git a/dist-electron/main.js b/dist-electron/main.js index 04c71b9..bc9ec83 100644 --- a/dist-electron/main.js +++ b/dist-electron/main.js @@ -1,5 +1,53 @@ "use strict"; const electron = require("electron"); +const path = require("path"); +function printUtils(data) { + return new Promise(async (resolvePrint, rejectPrint) => { + let subMainWindow = new electron.BrowserWindow({ + show: false, + webPreferences: { + nodeIntegration: true, + // For electron >= 4.0.0 + contextIsolation: false, + webSecurity: false, + enableRemoteModule: true + } + }); + function renderPrintDocument(window, data2) { + return new Promise(async (resolve, reject) => { + electron.ipcMain.on("load-ok", (event, res) => { + setTimeout(() => { + resolve({ message: "page-rendered", ...res }); + }, 500); + }); + }); + } + subMainWindow.on("closed", () => { + subMainWindow = null; + }); + subMainWindow.loadFile(path.resolve(__dirname, "./public/print.html")); + subMainWindow.webContents.on("did-finish-load", async (res) => { + return renderPrintDocument().then(async (result) => { + let height = Math.ceil((result.height + 60) * 264.5833); + console.info("height", result, height); + subMainWindow.webContents.print({ + silent: true, + margins: { + marginType: "none" + }, + printBackground: false, + deviceName: options.printerName, + copies: 1 + }, (success) => { + if (success) { + resolvePrint({ type: "success" }); + } + subMainWindow.close(); + }); + }).catch((err) => console.warn(33, err)); + }); + }); +} electron.app.whenReady().then(() => { const win = new electron.BrowserWindow({ title: "Main window", @@ -22,13 +70,19 @@ electron.app.whenReady().then(() => { } win.webContents.openDevTools(); electron.app.on("activate", () => { - if (electron.BrowserWindow.getAllWindows().length === 0) + if (electron.BrowserWindow.getAllWindows().length === 0) { createWindow(); + } }); electron.ipcMain.on("quitHandler", (_, msg) => { - console.log(msg); electron.app.quit(); }); + electron.ipcMain.on("printerInfoSync", async (event, params) => { + console.log("接收到打印消息", params); + const res = await printUtils(); + event.returnValue = res; + console.log("已打印", res); + }); }); electron.app.on("window-all-closed", () => { if (process.platform !== "darwin") diff --git a/electron/main.js b/electron/main.js index daeebae..6f6ddce 100644 --- a/electron/main.js +++ b/electron/main.js @@ -1,4 +1,5 @@ import { app, BrowserWindow, ipcMain } from "electron"; +import { printUtils } from './printUtils' app.whenReady().then(() => { const win = new BrowserWindow({ @@ -27,13 +28,21 @@ app.whenReady().then(() => { app.on("activate", () => { // 在 macOS 系统内, 如果没有已开启的应用窗口 // 点击托盘图标时通常会重新创建一个新窗口 - if (BrowserWindow.getAllWindows().length === 0) createWindow(); + if (BrowserWindow.getAllWindows().length === 0) { + createWindow() + }; }); ipcMain.on("quitHandler", (_, msg) => { - console.log(msg); app.quit(); }); + + ipcMain.on('printerInfoSync', async (event, params) => { + console.log('接收到打印消息', params) + const res = await printUtils(params) + event.returnValue = res + console.log('已打印', res) + }) }); app.on("window-all-closed", () => { diff --git a/electron/printUtils.js b/electron/printUtils.js new file mode 100644 index 0000000..7b0f638 --- /dev/null +++ b/electron/printUtils.js @@ -0,0 +1,63 @@ +import { BrowserWindow, ipcMain } from 'electron'; +import path from "path"; + + +export function printUtils(data) { + return new Promise(async (resolvePrint, rejectPrint) => { + + let subMainWindow = new BrowserWindow({ + show: false, + webPreferences: { + nodeIntegration: true, // For electron >= 4.0.0 + contextIsolation: false, + webSecurity: false, + enableRemoteModule: true + } + }); + + function renderPrintDocument(window, data) { + return new Promise(async (resolve, reject) => { + ipcMain.on('load-ok', (event, res) => { + //在这里可以添加打印的判断条件等...... + setTimeout(() => { + resolve({ message: 'page-rendered', ...res }); + }, 500) + }) + }) + } + + + // If the subMainWindow is closed, reset the `subMainWindow` var to null + subMainWindow.on('closed', () => { + subMainWindow = null; + }); + // 加载打印的html文件 + subMainWindow.loadFile(path.resolve(__dirname, "./public/print.html")); + + subMainWindow.webContents.on('did-finish-load', async (res) => { + let data = [] + return renderPrintDocument(subMainWindow, data) + .then(async (result) => { + // let width = Math.ceil((result.width) * 264.5833); + let height = Math.ceil((result.height + 60) * 264.5833); + console.info('height', result, height); + subMainWindow.webContents.print({ + silent: true, + margins: { + marginType: 'none' + }, + printBackground: false, + deviceName: options.printerName, + copies: 1, + }, (success) => { + + if (success) { + resolvePrint({ type: 'success' }) + } + subMainWindow.close(); + }) + }) + .catch(err => console.warn(33, err)) + }) + }) +} \ No newline at end of file diff --git a/index.html b/index.html index 433866d..2859b32 100644 --- a/index.html +++ b/index.html @@ -1,10 +1,10 @@ - + - + Vite + Vue diff --git a/public/print.html b/public/print.html new file mode 100644 index 0000000..183d557 --- /dev/null +++ b/public/print.html @@ -0,0 +1,34 @@ + + + + + + Print preview + + + + +
测试打印
+ + + diff --git a/src/App.vue b/src/App.vue index c302cce..23deec2 100644 --- a/src/App.vue +++ b/src/App.vue @@ -77,6 +77,7 @@ router.beforeEach((to, from) => { --el-font-size-base: 20px !important; --el-message-close-size: 20px !important; --el-component-size-large: 50px !important; + --el-mask-color: rgba(255, 255, 255, 0.6) !important; } @@ -264,4 +265,5 @@ html { transform: translateX(100%); } } -} +} + diff --git a/src/api/pay.js b/src/api/pay.js new file mode 100644 index 0000000..f209c16 --- /dev/null +++ b/src/api/pay.js @@ -0,0 +1,79 @@ +import request from "@/utils/request.js" + +/** + * 查询分类信息 + * @param {*} params + * @returns + */ +export function queryPayType(params) { + return request({ + method: "get", + url: "pay/queryPayType", + params + }); +} + +/** + * 付款 + * @param {*} params + * @returns + */ +export function payOrder(api, params) { + return request({ + method: "get", + url: api, + params + }); +} + +/** + * 扫码支付 + * @param {*} params + * @returns + */ +export function scanpay(params) { + return request({ + method: "get", + url: 'pay/scanpay', + params + }); +} + +/** + * 储值卡付款 + * @param {*} params + * @returns + */ +export function accountPay(params) { + return request({ + method: "get", + url: 'pay/accountPay', + params + }); +} + +/** + * 现金付款 + * @param {*} params + * @returns + */ +export function cashPay(params) { + return request({ + method: "get", + url: 'pay/cashPay', + params + }); +} + +/** + * 查询订单支付状态 + * @param {*} params + * @returns + */ +export function queryOrder(params) { + return request({ + method: "get", + url: "pay/queryOrder", + params + }); +} \ No newline at end of file diff --git a/src/api/product.js b/src/api/product.js index 4d06036..63f479e 100644 --- a/src/api/product.js +++ b/src/api/product.js @@ -143,4 +143,17 @@ export function clearCart(data) { }); } +/** + * 创建订单 + * @param {*} data + * @returns + */ +export function createOrder(data) { + return request({ + method: "post", + url: "/order/createOrder", + data + }); +} + diff --git a/src/assets/icon_scan.png b/src/assets/icon_scan.png new file mode 100644 index 0000000000000000000000000000000000000000..c98bf5f118bd61d17b2dc89193d6477323532ed8 GIT binary patch literal 2418 zcmV-&361uNP)SOqsz!{X|cRAzT-@u?uW7FPMb4a0* zRG;vCxXf@%U5 z`k0rN?s;=MJFm(%C4^KTNZb;(;T1IME>(sNCp{dXDFpCbUCcV@)oxFO)O_198PXXd z;yzU5Ntahg2D?6zf}!UOw%j1dpA>i*}hZrr}Sg_=I8w;_;b+fJAGJZ=Df~%&r*e{iJdRerN5FwBL!Aqm36I&T$4~Qx@a+eU`z_*uVtfd>~Fj`9YTLvVg=9~5j zjI$=xQZbM+^Z&vKU{^Vm4#WJ-v#gW-;nXi7*`Cpw+>b&t4A|ZgAX1X$(K%bMXB~yK z^-D-?Jn;cmTOJmpR5Li<;Rk607 zp!6Z6HlD<;#Gf|E`GEj?tv(iAU62qu5-G~qbPiMEhdDuS15b@R?6T;j#tKG9``OZ~ zhv2GeEB^LK(1G&Pe_RT`g**A`K7`cl@4OjU`g^>G5%$xdptps+Bx8poGa6@?{Lrh1 zVDF$AKalq`hQLL!w?1agy+}y+$|`vle<)UE+{9=IrjL>DY^e;u=cl?hhhGc~=(!ecY5|NgH1Mq2OtVm`ctbtgnjh%pz9P+`d!gN$!-aM*gZyNATv|5bUz$txjmAL)d{=RG+mjSKbahp#UN zvfWMbObCY)_%zGaYvdCG=vDCW(W}g$xo3HN65OvDfqjy_sD35Eayu~%aBD)9eR z;wRbyZ5cuYK=M;0@PyETWXnHd&vB_DhR&ttT~(AlEX*%~CZq+QSlo*x5;h$9&!35XY%zn1vEhR6vjmC0Pl1w)8tfMwMiLSzxsEN=+W46v+vLx?P5 zn&k~4ngNzoZwQe^OtZWpL^Hs$>J1^Xh-sELglGm>R=pua7BS88BZ3e*tg9LyfpeX< zV^oHb@Z@3z2GgtMMaz?mM8^6Vmx9kYg~}N2gb*1^r*yxXsWMoO7DDpDcDlzg z+zII!JxJv}97Bk}{Npr-7(xVq(EM!wAHbinM2&6nGGC( zg#3(z+~`h)b1e}32R9-k zgbCTmbmR#UnM1@(9J*3khAhl0LWIo4#4Vqxblni*4o%D{ayMIckQYTVi8CsfzFv++ zXwAR*$OYe@T)cAv1yYW<3jVBSNak%_VQbuw45X|gp~`7#b90z&^uiPnNoeAb6VI=e?O>Z1+{S& znO0v}@*}z5>xDWUL6w7wv8dnqi6(myQoTQQU5MGgnY2fuaC(!Yq+qN#bW{DzvZFao zeO@`Oi6P%3#8dr9Ay?L=BJGJ**3wos8Z zdDBcrtJ{mkIrVBhu>}9|j-X~E<^loE*nJI^(U0=07EBUlGJd*1S-48y44(z(kc&Dw zXSLrXDM7JG-z^NZfFOrmm~M3;VD@JxX_Mey07F$GIEl9;ue4&W6Wo&_E1Q!OGmL+Y z%w40(uz>10mdUWH#yQdB{rNAHXz;18d0A&T@irdOKNL_fJ-Lk!FKjQ#SW7p|VX1)> z2@#T0f_s!_@b4F~l2pBcj2Nl^$4LSgQ?Rza(t1hMM`>VJ97x<_+pq&G_Knga+G-%= zcpD3`#dWi--7@Y<6GF;Ye3!V&?t-!hsN zt_aCBQXB7>3Xp!016vsMVT^_+#AO#m!fP6CE&WZFh=KPZ5*k;;6SFW(49zXs6x0DM zdov+e(>U8Y*$yV+`bpDm$^8hjq+;XP^^!qwCy-lH*psF1WHRk zeRDcHugXrPgyb8ADft%QZ!!E#;0(&~yBz18>^C~({;2|0-uI`611(Wo(e76IM!Q?l k=974#eT7Mc_vkX=e}=3#Ctc`J761SM07*qoM6N<$f>!W*x&QzG literal 0 HcmV?d00001 diff --git a/src/components/payCard.vue b/src/components/payCard.vue deleted file mode 100644 index a7351be..0000000 --- a/src/components/payCard.vue +++ /dev/null @@ -1,199 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/components/payCard/payCard.vue b/src/components/payCard/payCard.vue new file mode 100644 index 0000000..dc095ea --- /dev/null +++ b/src/components/payCard/payCard.vue @@ -0,0 +1,311 @@ + + + + + \ No newline at end of file diff --git a/src/components/payCard/scanModal.vue b/src/components/payCard/scanModal.vue new file mode 100644 index 0000000..aacddaf --- /dev/null +++ b/src/components/payCard/scanModal.vue @@ -0,0 +1,272 @@ + + + + + + + \ No newline at end of file diff --git a/src/components/remarkModal.vue b/src/components/remarkModal.vue index 23b1484..a04d289 100644 --- a/src/components/remarkModal.vue +++ b/src/components/remarkModal.vue @@ -10,7 +10,7 @@ @@ -18,6 +18,8 @@ +