Commit b0182596 by linjinhong

feat:添加本地储存功能

parent e0f5d9e8
...@@ -33,14 +33,19 @@ async function createWindow() { ...@@ -33,14 +33,19 @@ async function createWindow() {
width: 1500, width: 1500,
height: 1000, height: 1000,
icon: "./src/assets/logo.jpg", icon: "./src/assets/logo.jpg",
webPreferences: { webPreferences: {
webSecurity: false, webSecurity: false,
nodeIntegration: true, nodeIntegration: true,
contextIsolation: false, // ^1.4.0 版本必须关闭 contextIsolation: false, // ^1.4.0 版本必须关闭
}, },
show: false,
});
win.once("ready-to-show", () => {
win.maximize();
win.show();
}); });
win.maximize();
const template = [ const template = [
{ {
label: "文件", label: "文件",
...@@ -430,13 +435,6 @@ async function createWindow() { ...@@ -430,13 +435,6 @@ async function createWindow() {
if (result.length) { if (result.length) {
event.reply("select-folder-result", result[0]); event.reply("select-folder-result", result[0]);
} }
// if (!result.canceled && result.filePaths.length > 0) {
// // event.reply:向发送消息的渲染进程返回结果
// event.reply("select-folder-result", result.filePaths[0]);
// } else {
// // 用户取消选择,返回 null
// event.reply("select-folder-result", null);
// }
}, },
); );
}); });
......
...@@ -21,12 +21,22 @@ const { app } = require("electron"); ...@@ -21,12 +21,22 @@ const { app } = require("electron");
let fileEnv, env, visionUrl; let fileEnv, env, visionUrl;
axios.defaults.timeout = 12600000; axios.defaults.timeout = 12600000;
const multiparty = require("multiparty"); const multiparty = require("multiparty");
const { getVersion, setApi, getHostApi } = require("@/server/utils/store"); const {
getVersion,
setApi,
getHostApi,
getDesktopDevice,
} = require("@/server/utils/store");
//获取当前驱动版本
function getCurrentVersion() { function getCurrentVersion() {
const version = getVersion(); const version = getVersion();
return version; return version;
} }
//获取当前设备类型
function getCurrentDesktopDevice() {
const version = getDesktopDevice();
return version;
}
async function readEnv() { async function readEnv() {
let exePath, configPath; let exePath, configPath;
...@@ -57,6 +67,10 @@ async function readEnv() { ...@@ -57,6 +67,10 @@ async function readEnv() {
readEnv(); readEnv();
export default { export default {
saveImgByUrl: async (req, res) => { saveImgByUrl: async (req, res) => {
const desktopDevice = getCurrentDesktopDevice();
const version = desktopDevice == 3 ? "huiLiCaiImg" : getCurrentVersion();
console.log("version", version);
try { try {
const response = await axios({ const response = await axios({
url: req.body.url, url: req.body.url,
...@@ -66,7 +80,7 @@ export default { ...@@ -66,7 +80,7 @@ export default {
let fileName = uuid.v4() + ".png"; let fileName = uuid.v4() + ".png";
const filePath = path.join( const filePath = path.join(
process.cwd(), process.cwd(),
`./${getCurrentVersion()}/Input/` + fileName, `./${version}/Input/` + fileName,
); );
const writer = fs.createWriteStream(filePath); const writer = fs.createWriteStream(filePath);
...@@ -147,7 +161,7 @@ export default { ...@@ -147,7 +161,7 @@ export default {
files = files.map((el) => ({ url: `${fileEnv}${el}` })); files = files.map((el) => ({ url: `${fileEnv}${el}` }));
const downloadFunc = const downloadFunc =
params.device === 1 ? downloadImage : downloadOtherImage; params.device === 2 ? downloadOtherImage : downloadImage;
const result = await downloadFunc(files); const result = await downloadFunc(files);
res.setHeader("Request-URL", url); res.setHeader("Request-URL", url);
...@@ -257,13 +271,17 @@ export default { ...@@ -257,13 +271,17 @@ export default {
downloadByDesignId: async (req, res) => { downloadByDesignId: async (req, res) => {
let q = req.body; let q = req.body;
try { try {
const desktopDevice = getCurrentDesktopDevice();
const version = desktopDevice == 3 ? "huiLiCaiImg" : getCurrentVersion();
console.log("version", version);
let dir = path.join(os.homedir(), "/Desktop/" + q.productionNo + ".zip"); let dir = path.join(os.homedir(), "/Desktop/" + q.productionNo + ".zip");
const zipStream = new compressing.zip.Stream(); const zipStream = new compressing.zip.Stream();
for (let k in q.imgList) { for (let k in q.imgList) {
const p = path.join( const p = path.join(
process.cwd(), process.cwd(),
`./${getCurrentVersion()}/Input/` + q.imgList[k].fileName, `./${version}/Input/` + q.imgList[k].fileName,
); );
zipStream.addEntry(p); zipStream.addEntry(p);
} }
...@@ -288,7 +306,11 @@ export default { ...@@ -288,7 +306,11 @@ export default {
}, },
uploadImage: async (req, res) => { uploadImage: async (req, res) => {
try { try {
const p = path.join(process.cwd(), `./${getCurrentVersion()}/Input/`); const desktopDevice = getCurrentDesktopDevice();
const version = desktopDevice == 3 ? "huiLiCaiImg" : getCurrentVersion();
console.log("version", version);
const p = path.join(process.cwd(), `./${version}/Input/`);
let fileName = uuid.v4() + ".png"; let fileName = uuid.v4() + ".png";
// console.log(fileName); // console.log(fileName);
...@@ -303,10 +325,7 @@ export default { ...@@ -303,10 +325,7 @@ export default {
code: 200, code: 200,
data: { data: {
fileName, fileName,
url: path.join( url: path.join(process.cwd(), `./${version}/Input/` + fileName),
process.cwd(),
`./${getCurrentVersion()}/Input/` + fileName,
),
}, },
}); });
} }
...@@ -318,9 +337,13 @@ export default { ...@@ -318,9 +337,13 @@ export default {
}, },
getPngImg: async (req, res) => { getPngImg: async (req, res) => {
try { try {
const desktopDevice = getCurrentDesktopDevice();
const version = desktopDevice == 3 ? "huiLiCaiImg" : getCurrentVersion();
console.log("version", version);
const filePath = path.join( const filePath = path.join(
process.cwd(), process.cwd(),
`./${getCurrentVersion()}/Input/${req.body.fileName}`, `./${version}/Input/${req.body.fileName}`,
); );
console.log(filePath); console.log(filePath);
// 给客户端返回一个文件流 type类型 // 给客户端返回一个文件流 type类型
...@@ -449,7 +472,11 @@ export default { ...@@ -449,7 +472,11 @@ export default {
}, },
//删除图片 //删除图片
cleanDirectorySync: async (req, res) => { cleanDirectorySync: async (req, res) => {
let dirPath = path.join(process.cwd(), `./${getCurrentVersion()}/Input`); const desktopDevice = getCurrentDesktopDevice();
const version = desktopDevice == 3 ? "huiLiCaiImg" : getCurrentVersion();
console.log("version", version);
let dirPath = path.join(process.cwd(), `./${version}/Input`);
if (!fs.existsSync(dirPath)) { if (!fs.existsSync(dirPath)) {
console.log(`目录不存在: ${dirPath}`); console.log(`目录不存在: ${dirPath}`);
res.json({ code: 500, msg: `目录不存在: ${dirPath}` }); res.json({ code: 500, msg: `目录不存在: ${dirPath}` });
...@@ -481,7 +508,11 @@ export default { ...@@ -481,7 +508,11 @@ export default {
}, },
saveToPng: async (req, res) => { saveToPng: async (req, res) => {
try { try {
const p = path.join(process.cwd(), `./${getCurrentVersion()}/Input/`); const desktopDevice = getCurrentDesktopDevice();
const version = desktopDevice == 3 ? "huiLiCaiImg" : getCurrentVersion();
console.log("version", version);
const p = path.join(process.cwd(), `./${version}/Input/`);
const form = new multiparty.Form({ uploadDir: p }); const form = new multiparty.Form({ uploadDir: p });
form.parse(req, function(err, fields, files) { form.parse(req, function(err, fields, files) {
// console.log(367, fields, files, err); // console.log(367, fields, files, err);
...@@ -494,10 +525,7 @@ export default { ...@@ -494,10 +525,7 @@ export default {
fs.renameSync(file.path, path.join(p, fileName)); fs.renameSync(file.path, path.join(p, fileName));
list.push({ list.push({
fileName, fileName,
url: path.join( url: path.join(process.cwd(), `./${version}/Input/` + fileName),
process.cwd(),
`./${getCurrentVersion()}/Input/` + fileName,
),
}); });
}); });
res.json({ res.json({
......
...@@ -2,6 +2,30 @@ const Store = require("electron-store"); ...@@ -2,6 +2,30 @@ const Store = require("electron-store");
const store = new Store({ watch: true }); const store = new Store({ watch: true });
// 导出 store 实例(新增:方便外部获取实例进行监听) // 导出 store 实例(新增:方便外部获取实例进行监听)
// ===== 新增:私有缓存 Map + 缓存刷新方法 =====
let orderCacheMap = new Map(); // 模块内私有缓存,避免重复转换
const DEFAULT_UNIQUE_KEY = "newId";
// 刷新缓存:从 electron-store 读取数组,转为 Map 存入缓存
function refreshOrderCache(uniqueKey = DEFAULT_UNIQUE_KEY) {
const currentArray = store.get("orderInfo") || [];
const newMap = new Map();
currentArray.forEach((item) => {
if (item && item[uniqueKey]) {
newMap.set(item[uniqueKey], item);
}
});
orderCacheMap = newMap; // 更新缓存 Map
}
// 初始化缓存(模块加载时执行一次)
refreshOrderCache();
// 辅助工具函数:将 Map 转回对象数组
function mapToArray(dataMap) {
return Array.from(dataMap.values());
}
module.exports = { module.exports = {
//存储当前打印驱动版本 //存储当前打印驱动版本
setVersion: (version) => { setVersion: (version) => {
...@@ -38,13 +62,109 @@ module.exports = { ...@@ -38,13 +62,109 @@ module.exports = {
}, },
getBoard: () => store.get("desktoBoard") || 3, getBoard: () => store.get("desktoBoard") || 3,
//下载位置 //下载位置
setLocation: (version) => { setLocation: (version, locationKey) => {
store.set("downloadLocation", version); store.set(locationKey, version);
}, },
getLocation: () => store.get("downloadLocation") || "", getLocation: (locationKey) => store.get(locationKey) || "",
//设备 //设备
setDesktopDevice: (version) => { setDesktopDevice: (version) => {
store.set("desktopDevice", version); store.set("desktopDevice", version);
}, },
getDesktopDevice: () => store.get("desktopDevice") || "1", getDesktopDevice: () => store.get("desktopDevice") || "1",
// ===== 基于缓存 Map 优化的 orderInfo 方法 =====
getOrderInfo: () => store.get("orderInfo") || [],
setOrderInfo: (newData, uniqueKey = DEFAULT_UNIQUE_KEY) => {
let newObjArray = [];
if (newData instanceof Map) {
newObjArray = mapToArray(newData);
} else if (Array.isArray(newData)) {
const isValidObjArray = newData.every(
(item) => typeof item === "object" && item !== null,
);
if (!isValidObjArray) {
console.warn("setOrderInfo 要求数组内所有元素都是对象类型");
return;
}
newObjArray = newData;
} else {
console.warn("setOrderInfo 要求传入数组或 Map 类型,当前传入值无效");
return;
}
store.set("orderInfo", newObjArray);
// 新增:更新缓存 Map(无需重新从 store 读取,直接转换新数组)
const newMap = new Map();
newObjArray.forEach((item) => {
if (item && item[uniqueKey]) {
newMap.set(item[uniqueKey], item);
}
});
orderCacheMap = newMap;
},
addToOrderInfo: (newOrderObj, uniqueKey = DEFAULT_UNIQUE_KEY) => {
if (
typeof newOrderObj !== "object" ||
newOrderObj === null ||
!newOrderObj[uniqueKey]
) {
console.warn("添加失败:请传入包含唯一标识(默认id)的有效对象");
return;
}
const uniqueValue = newOrderObj[uniqueKey];
// 直接操作缓存 Map(O(1),无需重新转换)
if (orderCacheMap.has(uniqueValue)) {
console.log(`该对象(${uniqueKey}=${uniqueValue})已存在,不重复添加`);
return;
}
orderCacheMap.set(uniqueValue, newOrderObj);
// 写入 store 时,仅转换缓存 Map(一次 O(n),而非每次操作都 O(n))
const newArray = mapToArray(orderCacheMap);
store.set("orderInfo", newArray);
},
removeFromOrderInfo: (uniqueValue, uniqueKey = DEFAULT_UNIQUE_KEY) => {
// 直接操作缓存 Map(O(1))
if (!orderCacheMap.has(uniqueValue)) {
console.log(`未找到 ${uniqueKey}=${uniqueValue} 的对象,删除失败`);
return;
}
orderCacheMap.delete(uniqueValue);
const newArray = mapToArray(orderCacheMap);
store.set("orderInfo", newArray);
},
// 其他方法(updateOrderInfoItem、getOrderInfoItem)同理,均直接操作 orderCacheMap
updateOrderInfoItem: (
uniqueValue,
newOrderObj,
uniqueKey = DEFAULT_UNIQUE_KEY,
) => {
if (typeof newOrderObj !== "object" || newOrderObj === null) {
console.warn("修改失败:请传入有效对象");
return;
}
// 直接操作缓存 Map(O(1) 查找)
const targetObj = orderCacheMap.get(uniqueValue);
if (!targetObj) {
console.log(`未找到 ${uniqueKey}=${uniqueValue} 的对象,修改失败`);
return;
}
const updatedObj = { ...targetObj, ...newOrderObj };
orderCacheMap.set(uniqueValue, updatedObj);
const newArray = mapToArray(orderCacheMap);
store.set("orderInfo", newArray);
},
getOrderInfoItem: (uniqueValue) => {
// 直接操作缓存 Map(O(1) 查找,无需任何转换)
const targetObj = orderCacheMap.get(uniqueValue);
return targetObj || null;
},
}; };
...@@ -34,6 +34,10 @@ export default { ...@@ -34,6 +34,10 @@ export default {
type: Object, type: Object,
default: () => {}, default: () => {},
}, },
newDesktopDevice: {
type: [String, Number],
default: "1",
},
}, },
watch: { watch: {
visible: { visible: {
...@@ -48,6 +52,20 @@ export default { ...@@ -48,6 +52,20 @@ export default {
if (this.item) { if (this.item) {
this.getCurrentItem(this.item); this.getCurrentItem(this.item);
} else {
this.form = {
x: 0,
rate: 0,
sx: 0,
zIndex: 0,
sh: 0,
sw: 0,
sy: 0,
y: 0,
w: 0,
h: 0,
r: 0,
};
} }
}, },
immediate: true, immediate: true,
...@@ -58,7 +76,7 @@ export default { ...@@ -58,7 +76,7 @@ export default {
pxToUnit, pxToUnit,
unitToPx, unitToPx,
getCurrentItem(item) { getCurrentItem(item) {
let setting = this.$dataStore.get("setting"); // let setting = this.$dataStore.get("setting");
this.item.y = item.y - item.h / 2; this.item.y = item.y - item.h / 2;
this.item.x = item.x - item.w / 2; this.item.x = item.x - item.w / 2;
this.$dataStore.set( this.$dataStore.set(
...@@ -152,7 +170,7 @@ export default { ...@@ -152,7 +170,7 @@ export default {
<template> <template>
<div class="drawer"> <div class="drawer">
<div class="img-form"> <div class="img-form" v-show="newDesktopDevice != 3">
<div class="title"> <div class="title">
图片编辑(单位:{{ $dataStore.get("setting").unit }} 图片编辑(单位:{{ $dataStore.get("setting").unit }}
</div> </div>
...@@ -161,6 +179,7 @@ export default { ...@@ -161,6 +179,7 @@ export default {
:disabled="!(item && !isPreView)" :disabled="!(item && !isPreView)"
style="" style=""
:model="form" :model="form"
ref="formRef"
label-position="left" label-position="left"
label-width="30px" label-width="30px"
> >
...@@ -306,6 +325,7 @@ export default { ...@@ -306,6 +325,7 @@ export default {
.img-form { .img-form {
padding: 5px 10px; padding: 5px 10px;
border: 1px solid #ececec; border: 1px solid #ececec;
border-bottom: none;
} }
::v-deep { ::v-deep {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment