Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
electron-printer
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zhuzhequan
electron-printer
Commits
b0182596
Commit
b0182596
authored
Jan 30, 2026
by
linjinhong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat:添加本地储存功能
parent
e0f5d9e8
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
314 additions
and
80 deletions
+314
-80
src/background.js
+6
-8
src/server/entity/function.js
+45
-17
src/server/utils/index.js
+0
-0
src/server/utils/store.js
+123
-3
src/views/design/head/index.vue
+0
-0
src/views/design/main/imgSetting.vue
+22
-2
src/views/design/main/index.vue
+118
-50
No files found.
src/background.js
View file @
b0182596
...
...
@@ -33,14 +33,19 @@ async function createWindow() {
width
:
1500
,
height
:
1000
,
icon
:
"./src/assets/logo.jpg"
,
webPreferences
:
{
webSecurity
:
false
,
nodeIntegration
:
true
,
contextIsolation
:
false
,
// ^1.4.0 版本必须关闭
},
show
:
false
,
});
win
.
once
(
"ready-to-show"
,
()
=>
{
win
.
maximize
();
win
.
show
();
});
win
.
maximize
();
const
template
=
[
{
label
:
"文件"
,
...
...
@@ -430,13 +435,6 @@ async function createWindow() {
if
(
result
.
length
)
{
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);
// }
},
);
});
...
...
src/server/entity/function.js
View file @
b0182596
...
...
@@ -21,12 +21,22 @@ const { app } = require("electron");
let
fileEnv
,
env
,
visionUrl
;
axios
.
defaults
.
timeout
=
12600000
;
const
multiparty
=
require
(
"multiparty"
);
const
{
getVersion
,
setApi
,
getHostApi
}
=
require
(
"@/server/utils/store"
);
const
{
getVersion
,
setApi
,
getHostApi
,
getDesktopDevice
,
}
=
require
(
"@/server/utils/store"
);
//获取当前驱动版本
function
getCurrentVersion
()
{
const
version
=
getVersion
();
return
version
;
}
//获取当前设备类型
function
getCurrentDesktopDevice
()
{
const
version
=
getDesktopDevice
();
return
version
;
}
async
function
readEnv
()
{
let
exePath
,
configPath
;
...
...
@@ -57,6 +67,10 @@ async function readEnv() {
readEnv
();
export
default
{
saveImgByUrl
:
async
(
req
,
res
)
=>
{
const
desktopDevice
=
getCurrentDesktopDevice
();
const
version
=
desktopDevice
==
3
?
"huiLiCaiImg"
:
getCurrentVersion
();
console
.
log
(
"version"
,
version
);
try
{
const
response
=
await
axios
({
url
:
req
.
body
.
url
,
...
...
@@ -66,7 +80,7 @@ export default {
let
fileName
=
uuid
.
v4
()
+
".png"
;
const
filePath
=
path
.
join
(
process
.
cwd
(),
`./
${
getCurrentVersion
()
}
/Input/`
+
fileName
,
`./
${
version
}
/Input/`
+
fileName
,
);
const
writer
=
fs
.
createWriteStream
(
filePath
);
...
...
@@ -147,7 +161,7 @@ export default {
files
=
files
.
map
((
el
)
=>
({
url
:
`
${
fileEnv
}${
el
}
`
}));
const
downloadFunc
=
params
.
device
===
1
?
downloadImage
:
downloadOther
Image
;
params
.
device
===
2
?
downloadOtherImage
:
download
Image
;
const
result
=
await
downloadFunc
(
files
);
res
.
setHeader
(
"Request-URL"
,
url
);
...
...
@@ -257,13 +271,17 @@ export default {
downloadByDesignId
:
async
(
req
,
res
)
=>
{
let
q
=
req
.
body
;
try
{
const
desktopDevice
=
getCurrentDesktopDevice
();
const
version
=
desktopDevice
==
3
?
"huiLiCaiImg"
:
getCurrentVersion
();
console
.
log
(
"version"
,
version
);
let
dir
=
path
.
join
(
os
.
homedir
(),
"/Desktop/"
+
q
.
productionNo
+
".zip"
);
const
zipStream
=
new
compressing
.
zip
.
Stream
();
for
(
let
k
in
q
.
imgList
)
{
const
p
=
path
.
join
(
process
.
cwd
(),
`./
${
getCurrentVersion
()
}
/Input/`
+
q
.
imgList
[
k
].
fileName
,
`./
${
version
}
/Input/`
+
q
.
imgList
[
k
].
fileName
,
);
zipStream
.
addEntry
(
p
);
}
...
...
@@ -288,7 +306,11 @@ export default {
},
uploadImage
:
async
(
req
,
res
)
=>
{
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"
;
// console.log(fileName);
...
...
@@ -303,10 +325,7 @@ export default {
code
:
200
,
data
:
{
fileName
,
url
:
path
.
join
(
process
.
cwd
(),
`./
${
getCurrentVersion
()}
/Input/`
+
fileName
,
),
url
:
path
.
join
(
process
.
cwd
(),
`./
${
version
}
/Input/`
+
fileName
),
},
});
}
...
...
@@ -318,9 +337,13 @@ export default {
},
getPngImg
:
async
(
req
,
res
)
=>
{
try
{
const
desktopDevice
=
getCurrentDesktopDevice
();
const
version
=
desktopDevice
==
3
?
"huiLiCaiImg"
:
getCurrentVersion
();
console
.
log
(
"version"
,
version
);
const
filePath
=
path
.
join
(
process
.
cwd
(),
`./
${
getCurrentVersion
()
}
/Input/
${
req
.
body
.
fileName
}
`
,
`./
${
version
}
/Input/
${
req
.
body
.
fileName
}
`
,
);
console
.
log
(
filePath
);
// 给客户端返回一个文件流 type类型
...
...
@@ -449,7 +472,11 @@ export default {
},
//删除图片
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
))
{
console
.
log
(
`目录不存在:
${
dirPath
}
`
);
res
.
json
({
code
:
500
,
msg
:
`目录不存在:
${
dirPath
}
`
});
...
...
@@ -481,7 +508,11 @@ export default {
},
saveToPng
:
async
(
req
,
res
)
=>
{
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
});
form
.
parse
(
req
,
function
(
err
,
fields
,
files
)
{
// console.log(367, fields, files, err);
...
...
@@ -494,10 +525,7 @@ export default {
fs
.
renameSync
(
file
.
path
,
path
.
join
(
p
,
fileName
));
list
.
push
({
fileName
,
url
:
path
.
join
(
process
.
cwd
(),
`./
${
getCurrentVersion
()}
/Input/`
+
fileName
,
),
url
:
path
.
join
(
process
.
cwd
(),
`./
${
version
}
/Input/`
+
fileName
),
});
});
res
.
json
({
...
...
src/server/utils/index.js
View file @
b0182596
This diff is collapsed.
Click to expand it.
src/server/utils/store.js
View file @
b0182596
...
...
@@ -2,6 +2,30 @@ const Store = require("electron-store");
const
store
=
new
Store
({
watch
:
true
});
// 导出 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
=
{
//存储当前打印驱动版本
setVersion
:
(
version
)
=>
{
...
...
@@ -38,13 +62,109 @@ module.exports = {
},
getBoard
:
()
=>
store
.
get
(
"desktoBoard"
)
||
3
,
//下载位置
setLocation
:
(
version
)
=>
{
store
.
set
(
"downloadLocation"
,
version
);
setLocation
:
(
version
,
locationKey
)
=>
{
store
.
set
(
locationKey
,
version
);
},
getLocation
:
(
)
=>
store
.
get
(
"downloadLocation"
)
||
""
,
getLocation
:
(
locationKey
)
=>
store
.
get
(
locationKey
)
||
""
,
//设备
setDesktopDevice
:
(
version
)
=>
{
store
.
set
(
"desktopDevice"
,
version
);
},
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
;
},
};
src/views/design/head/index.vue
View file @
b0182596
This diff is collapsed.
Click to expand it.
src/views/design/main/imgSetting.vue
View file @
b0182596
...
...
@@ -34,6 +34,10 @@ export default {
type
:
Object
,
default
:
()
=>
{},
},
newDesktopDevice
:
{
type
:
[
String
,
Number
],
default
:
"1"
,
},
},
watch
:
{
visible
:
{
...
...
@@ -48,6 +52,20 @@ export default {
if
(
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
,
...
...
@@ -58,7 +76,7 @@ export default {
pxToUnit
,
unitToPx
,
getCurrentItem
(
item
)
{
let
setting
=
this
.
$dataStore
.
get
(
"setting"
);
//
let setting = this.$dataStore.get("setting");
this
.
item
.
y
=
item
.
y
-
item
.
h
/
2
;
this
.
item
.
x
=
item
.
x
-
item
.
w
/
2
;
this
.
$dataStore
.
set
(
...
...
@@ -152,7 +170,7 @@ export default {
<
template
>
<div
class=
"drawer"
>
<div
class=
"img-form"
>
<div
class=
"img-form"
v-show=
"newDesktopDevice != 3"
>
<div
class=
"title"
>
图片编辑(单位:
{{
$dataStore
.
get
(
"setting"
).
unit
}}
)
</div>
...
...
@@ -161,6 +179,7 @@ export default {
:disabled=
"!(item && !isPreView)"
style=
""
:model=
"form"
ref=
"formRef"
label-position=
"left"
label-width=
"30px"
>
...
...
@@ -306,6 +325,7 @@ export default {
.img-form
{
padding
:
5px
10px
;
border
:
1px
solid
#ececec
;
border-bottom
:
none
;
}
::v-deep
{
...
...
src/views/design/main/index.vue
View file @
b0182596
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment