优化小票打印新增餐位费和打包费
This commit is contained in:
109
electron/main.js
109
electron/main.js
@@ -6,8 +6,33 @@ import os from "os";
|
||||
import fs from "fs";
|
||||
import { exec } from "child_process";
|
||||
|
||||
// ===== 核心配置:单文件缓存 =====
|
||||
// 固定的缓存文件路径(永远只存这1个文件)
|
||||
const CACHE_LOGO_PATH = path.join(app.getPath("temp"), "yinshouke_print", "cache_logo.png");
|
||||
// 记录上次的Logo URL(用于对比)
|
||||
let lastLogoUrl = "";
|
||||
|
||||
// 1. 初始化缓存目录(应用启动时执行)
|
||||
const initLogoCacheDir = () => {
|
||||
const cacheDir = path.dirname(CACHE_LOGO_PATH);
|
||||
if (!fs.existsSync(cacheDir)) {
|
||||
fs.mkdirSync(cacheDir, { recursive: true });
|
||||
}
|
||||
// 清理目录下除了cache_logo.png之外的所有文件(应用启动时)
|
||||
if (fs.existsSync(cacheDir)) {
|
||||
fs.readdirSync(cacheDir).forEach(file => {
|
||||
const filePath = path.join(cacheDir, file);
|
||||
if (filePath !== CACHE_LOGO_PATH) {
|
||||
fs.unlinkSync(filePath);
|
||||
console.log("启动清理:删除历史残留Logo文件", filePath);
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
let win;
|
||||
app.whenReady().then(() => {
|
||||
initLogoCacheDir();
|
||||
win = new BrowserWindow({
|
||||
title: "银收客",
|
||||
width: 1024,
|
||||
@@ -220,6 +245,51 @@ app.whenReady().then(() => {
|
||||
// });
|
||||
// });
|
||||
|
||||
// 2. 下载/复用Logo(核心函数)
|
||||
const getCachedLogoPath = async (logoUrl) => {
|
||||
// 情况1:Logo URL为空 → 用默认Logo
|
||||
if (!logoUrl || !logoUrl.startsWith('http')) {
|
||||
return "./logo.png";
|
||||
}
|
||||
|
||||
// 情况2:Logo URL和上次一致 → 直接用缓存文件
|
||||
if (logoUrl === lastLogoUrl && fs.existsSync(CACHE_LOGO_PATH)) {
|
||||
console.log("Logo未变化,复用本地缓存");
|
||||
return CACHE_LOGO_PATH;
|
||||
}
|
||||
|
||||
// 情况3:Logo URL变化 → 删除旧缓存,下载新的
|
||||
try {
|
||||
// 删除旧缓存(如果存在)
|
||||
if (fs.existsSync(CACHE_LOGO_PATH)) {
|
||||
fs.unlinkSync(CACHE_LOGO_PATH);
|
||||
console.log("Logo已更新,删除旧缓存文件");
|
||||
}
|
||||
|
||||
// 下载新Logo到固定缓存路径
|
||||
const response = await axios({
|
||||
url: logoUrl,
|
||||
method: "GET",
|
||||
responseType: "stream",
|
||||
});
|
||||
|
||||
await new Promise((resolve, reject) => {
|
||||
const writer = fs.createWriteStream(CACHE_LOGO_PATH);
|
||||
response.data.pipe(writer);
|
||||
writer.on("finish", resolve);
|
||||
writer.on("error", reject);
|
||||
});
|
||||
|
||||
// 更新上次的Logo URL记录
|
||||
lastLogoUrl = logoUrl;
|
||||
console.log("新Logo下载完成,缓存路径:", CACHE_LOGO_PATH);
|
||||
return CACHE_LOGO_PATH;
|
||||
} catch (error) {
|
||||
console.error("下载新Logo失败,使用默认Logo:", error);
|
||||
return "./logo.png";
|
||||
}
|
||||
};
|
||||
|
||||
// 标签小票的窗口
|
||||
const tagPrintWin = new BrowserWindow({
|
||||
show: false,
|
||||
@@ -228,7 +298,11 @@ app.whenReady().then(() => {
|
||||
webPreferences: {
|
||||
nodeIntegration: true,
|
||||
contextIsolation: false,
|
||||
// 允许访问本地文件(关键)
|
||||
webSecurity: false,
|
||||
},
|
||||
// 新增2:禁止后台节流,隐藏窗口也能加载资源
|
||||
backgroundThrottling: false,
|
||||
});
|
||||
|
||||
if (process.env.VITE_DEV_SERVER_URL) {
|
||||
@@ -239,37 +313,32 @@ app.whenReady().then(() => {
|
||||
}
|
||||
|
||||
// 接收渲染进程发送的数据
|
||||
ipcMain.on("printerTagSync", (event, arg) => {
|
||||
console.log(arg);
|
||||
tagPrintWin.webContents.send("getParams", arg);
|
||||
ipcMain.on("printerTagSync", async (event, arg) => {
|
||||
console.log("接收打印参数:", arg);
|
||||
const data = JSON.parse(arg);
|
||||
|
||||
// ===== 核心:获取缓存的Logo路径 =====
|
||||
const logoPath = await getCachedLogoPath(data.ticketLogo);
|
||||
data.ticketLogo = logoPath; // 替换为本地缓存路径
|
||||
|
||||
// 传给打印窗口
|
||||
tagPrintWin.webContents.send("getParams", JSON.stringify(data));
|
||||
});
|
||||
|
||||
// 执行标签小票的打印操作
|
||||
ipcMain.on("printTagStart", (event, arg) => {
|
||||
// console.log(arg);
|
||||
const _parmas = JSON.parse(arg);
|
||||
// console.log(_parmas)
|
||||
let name = _parmas.deviceName;
|
||||
tagPrintWin.webContents.print({
|
||||
silent: true,
|
||||
deviceName: name,
|
||||
pageSize: {
|
||||
width: 45000,
|
||||
height: 30000,
|
||||
},
|
||||
pageSize: { width: 45000, height: 30000 },
|
||||
scaleFactor: 80,
|
||||
landscape: false,
|
||||
margins: {
|
||||
marginType: "none",
|
||||
top: 0,
|
||||
bottom: 0,
|
||||
left: 0,
|
||||
right: 0,
|
||||
},
|
||||
dpi: {
|
||||
horizontal: 203,
|
||||
vertical: 203,
|
||||
},
|
||||
margins: { marginType: "none", top: 0, bottom: 0, left: 0, right: 0 },
|
||||
dpi: { horizontal: 203, vertical: 203 },
|
||||
// 新增:必须开启,否则图片打印不出来
|
||||
printBackground: true
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user