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
f197473e
Commit
f197473e
authored
Apr 26, 2025
by
linjinhong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
更改兄弟打印机编辑模式和预览模式 并取消第二窗口 将生产单信息添加至左边栏
parent
11276510
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
127 additions
and
85 deletions
+127
-85
.gitignore
+2
-1
src/background.js
+30
-19
src/store/index.js
+12
-0
src/utils/axios.js
+9
-8
src/views/design/data.js
+7
-6
src/views/design/head/index.vue
+3
-2
src/views/design/head/printDialog.vue
+7
-10
src/views/design/main/imgSetting.vue
+57
-39
src/views/design/main/index.vue
+0
-0
No files found.
.gitignore
View file @
f197473e
...
...
@@ -25,7 +25,7 @@ yarn-error.log*
/dist_electron
# 排除 print/Input 目录下的 .bat 文件
!/print/Input/*.bat
/print/Input/*.png
print/Profile/*
/logs
\ No newline at end of file
src/background.js
View file @
f197473e
...
...
@@ -36,22 +36,22 @@ async function createWindow() {
nodeIntegration
:
true
,
},
});
let
newWindow
=
new
BrowserWindow
({
fullscreen
:
false
,
width
:
1000
,
height
:
1000
,
webPreferences
:
{
nodeIntegration
:
true
,
//配置预加载脚本文件(preload),此处起名为preloadOther
//p.s.路径为绝对路径
// preload: path.join(__dirname, "./preloadOther.js")
},
});
//
let newWindow = new BrowserWindow({
//
fullscreen: false,
//
width: 1000,
//
height: 1000,
//
webPreferences: {
//
nodeIntegration: true,
//
//配置预加载脚本文件(preload),此处起名为preloadOther
//
//p.s.路径为绝对路径
//
// preload: path.join(__dirname, "./preloadOther.js")
//
},
//
});
console
.
log
(
winURL
+
"#"
+
`/design-detail`
);
//指定副屏幕打开的网页
await
newWindow
.
loadURL
(
winURL
+
"#"
+
`/design-detail`
);
newWindow
.
reload
();
//
//
指定副屏幕打开的网页
//
await newWindow.loadURL(winURL + "#" + `/design-detail`);
//
newWindow.reload();
// win.on("closed", () => {
// //这一段放外面的话,如果你电脑没双屏会报错。
// win = null;
...
...
@@ -90,11 +90,11 @@ async function createWindow() {
win
.
removeAllListeners
();
win
=
null
;
}
// 确保 newWindow 还未销毁,才执行关闭操作
if
(
newWindow
&&
!
newWindow
.
isDestroyed
())
{
newWindow
.
close
();
newWindow
=
null
;
}
//
//
确保 newWindow 还未销毁,才执行关闭操作
//
if (newWindow && !newWindow.isDestroyed()) {
//
newWindow.close();
//
newWindow = null;
//
}
});
// 自动更新逻辑开始
...
...
@@ -166,6 +166,15 @@ async function createWindow() {
});
});
});
win
.
on
(
"resize"
,
()
=>
{
const
{
width
,
height
}
=
win
.
getBounds
();
win
.
webContents
.
send
(
"window-size"
,
{
width
,
height
});
});
// 监听窗口的 reload 事件
win
.
webContents
.
on
(
"did-finish-load"
,
()
=>
{
const
{
width
,
height
}
=
win
.
getBounds
();
win
.
webContents
.
send
(
"window-size"
,
{
width
,
height
});
});
}
app
.
on
(
"activate"
,
async
()
=>
{
...
...
@@ -176,6 +185,8 @@ app.on("activate", async () => {
app
.
on
(
"ready"
,
async
()
=>
{
await
createWindow
();
// 获取当前窗口的尺寸
globalShortcut
.
register
(
"F5"
,
()
=>
{
return
false
;
});
...
...
src/store/index.js
View file @
f197473e
...
...
@@ -13,7 +13,10 @@ export default new Vuex.Store({
state
:
{
actionList
:
[],
imgList
:
[],
productDetail
:
{},
desktopDevice
:
1
,
//1是兄弟,2是其他
WHproportion
:
1
,
//宽高比例
isPreView
:
false
,
//宽高比例
actionIndex
:
-
1
,
systemSetting
:
{
gridShow
:
1
,
...
...
@@ -43,6 +46,15 @@ export default new Vuex.Store({
changeDesktopDevice
(
state
,
value
)
{
state
.
desktopDevice
=
value
;
},
setProductDetail
(
state
,
value
)
{
state
.
productDetail
=
value
;
},
setWHproportion
(
state
,
value
)
{
state
.
WHproportion
=
value
;
},
setIsPreView
(
state
,
value
)
{
state
.
isPreView
=
value
;
},
},
getters
:
{
systemSetting
(
state
)
{
...
...
src/utils/axios.js
View file @
f197473e
...
...
@@ -6,7 +6,7 @@ import { Loading } from "element-ui";
const
service
=
axios
.
create
({
baseURL
:
"http://localhost:3000"
,
// url = base url + request url
// withCredentials: true, // send cookies when cross-domain requests
timeout
:
50000000
// request timeout
timeout
:
50000000
,
// request timeout
});
let
loading
;
...
...
@@ -15,7 +15,7 @@ function startLoading() {
lock
:
true
,
text
:
"拼命加载中..."
,
spinner
:
"el-icon-loading"
,
background
:
"rgba(0,0,0,.7)"
background
:
"rgba(0,0,0,.7)"
,
});
}
...
...
@@ -25,7 +25,7 @@ function endLoading() {
// Add a request interceptor
service
.
interceptors
.
request
.
use
(
config
=>
{
(
config
)
=>
{
console
.
log
(
Vue
.
prototype
.
$dataStore
);
const
user
=
Vue
.
prototype
.
$dataStore
.
get
(
"user"
);
if
(
user
)
{
...
...
@@ -34,7 +34,7 @@ service.interceptors.request.use(
startLoading
();
return
config
;
},
error
=>
{
(
error
)
=>
{
endLoading
();
// do something with request error
return
Promise
.
reject
(
error
);
...
...
@@ -53,7 +53,7 @@ service.interceptors.response.use(
* Here is just an example
* You can also judge the status by HTTP Status Code
*/
async
response
=>
{
async
(
response
)
=>
{
// do something with response data
const
res
=
response
.
data
;
endLoading
();
...
...
@@ -66,7 +66,7 @@ service.interceptors.response.use(
Vue
.
prototype
.
$dataStore
.
delete
(
"user"
);
Vue
.
prototype
.
$message
.
error
({
showClose
:
true
,
message
:
res
.
msg
||
res
.
message
||
"Error"
message
:
res
.
msg
||
res
.
message
||
"Error"
,
});
setTimeout
(()
=>
{
location
.
reload
();
...
...
@@ -81,7 +81,7 @@ service.interceptors.response.use(
}
Vue
.
prototype
.
$message
.
error
({
showClose
:
true
,
message
:
res
.
msg
||
res
.
message
||
"Error"
message
:
res
.
msg
||
res
.
message
||
"Error"
,
});
// reject
return
Promise
.
reject
(
new
Error
(
res
.
msg
||
res
.
message
||
"Error"
));
...
...
@@ -91,7 +91,7 @@ service.interceptors.response.use(
}
return
Promise
.
resolve
(
res
);
},
error
=>
{
(
error
)
=>
{
endLoading
();
// do something with response error
return
Promise
.
reject
(
error
);
...
...
@@ -99,3 +99,4 @@ service.interceptors.response.use(
);
export
default
service
;
export
{
startLoading
,
endLoading
};
src/views/design/data.js
View file @
f197473e
...
...
@@ -22,13 +22,15 @@ export const grid = [
value
:
1
,
row
:
16
,
col
:
18
,
h
:
542
,
w
:
482
}
// h: 540,
// w: 480,
h
:
0
,
w
:
0
,
},
// {
// label: '16×21',
// label: '16×21',
#77797a
// value: 0,
// col: 16,
// row: 21
// }
];
\ No newline at end of file
];
src/views/design/head/index.vue
View file @
f197473e
...
...
@@ -216,6 +216,9 @@ export default {
}
);
this
.
detail
=
findByPodProductionNo
.
data
;
console
.
log
(
219
,
this
.
detail
);
this
.
$store
.
commit
(
"setProductDetail"
,
findByPodProductionNo
.
data
);
ipcRenderer
.
send
(
"win-subScreen"
,
findByPodProductionNo
.
data
);
// 根据生产单号查找 素材图片 下载到本地 然后返回本地地址去显示
...
...
@@ -223,7 +226,6 @@ export default {
this
.
detail
.
id
,
this
.
$store
.
state
.
desktopDevice
,
]);
console
.
log
(
"res111"
,
res
);
this
.
imgList
=
[];
res
.
data
.
forEach
((
el
)
=>
{
this
.
imgList
=
this
.
imgList
.
concat
(
el
.
list
||
[]);
...
...
@@ -240,7 +242,6 @@ export default {
});
}
});
console
.
log
(
arr
,
"arr"
);
res
.
data
=
arr
.
filter
((
el
)
=>
el
.
type
!==
1
);
// 延迟后强制激活窗口
...
...
src/views/design/head/printDialog.vue
View file @
f197473e
...
...
@@ -6,6 +6,7 @@ import html2canvas from "html2canvas";
import
moment
from
"moment"
;
import
pkg
from
"../../../../package.json"
;
import
{
pxToUnit
}
from
"../../../utils/index"
;
import
{
mapState
}
from
"vuex"
;
export
default
{
data
()
{
...
...
@@ -123,6 +124,7 @@ export default {
return
"1.5"
;
}
},
...
mapState
([
"WHproportion"
]),
},
watch
:
{
printSetting
:
{
...
...
@@ -300,11 +302,11 @@ export default {
const
relativeY
=
imageRect
.
top
-
lineRect
.
top
;
console
.
log
(
dom_id
);
// 获取图片的宽高
let
w
=
image
.
clientWidth
;
// 图片宽
let
h
=
image
.
clientHeight
;
// 图片高
let
w
=
image
.
clientWidth
/
this
.
WHproportion
;
// 图片宽
let
h
=
image
.
clientHeight
/
this
.
WHproportion
;
// 图片高
console
.
log
(
w
,
h
,
"w,h"
);
const
x
=
relativeX
;
const
y
=
relativeY
;
const
x
=
relativeX
/
this
.
WHproportion
;
const
y
=
relativeY
/
this
.
WHproportion
;
const
r
=
this
.
imgList
[
0
].
r
;
console
.
log
(
w
,
h
);
const
x_mm
=
this
.
pxToUnit
(
x
,
"mm"
);
...
...
@@ -372,16 +374,11 @@ export default {
h
=
this
.
numberToStr4
(
h
);
console
.
log
(
"print"
,
w
,
h
);
if
(
w
>
4
100
||
h
>
45
00
)
{
if
(
w
>
4
200
||
h
>
47
00
)
{
return
this
.
$message
.
warning
(
"打印图片素材宽度不能超过410mm,长度不能超过450mm"
);
}
// console.log(x, "x");
// console.log(y, "y");
// console.log(w, "w");
// console.log(h, "h");
r
=
Number
(
r
).
toFixed
(
0
);
const
imgFileName
=
this
.
imgList
[
0
].
fileName
;
let
position
=
""
;
// 位置
...
...
src/views/design/main/imgSetting.vue
View file @
f197473e
<
script
>
import
{
pxToUnit
,
unitToPx
}
from
"@/utils"
;
import
{
mapState
}
from
"vuex"
;
export
default
{
data
()
{
...
...
@@ -20,7 +21,9 @@ export default {
},
};
},
computed
:
{
...
mapState
([
"isPreView"
]),
},
props
:
{
visible
:
{
type
:
Boolean
,
...
...
@@ -130,21 +133,21 @@ export default {
</
script
>
<
template
>
<div
class=
"drawer"
:style=
"
{ animation: `ltr-drawer-in .3s 1ms` }">
<div
class=
"title"
>
图片编辑(单位:
{{
$dataStore
.
get
(
"setting"
).
unit
}}
)
</div>
<div
class=
"drawer"
>
<div
class=
"img-form"
>
<div
class=
"title"
>
图片编辑(单位:
{{
$dataStore
.
get
(
"setting"
).
unit
}}
)
</div>
<el-form
size=
"small"
:disabled=
"!
item
"
:disabled=
"!
(item && !isPreView)
"
style=
""
:model=
"form"
label-position=
"left"
label-width=
"30px"
>
<el-row
:gutter=
"
2
0"
>
<el-col
:span=
"
12
"
>
<el-row
:gutter=
"
1
0"
>
<el-col
:span=
"
8
"
>
<el-form-item
label=
"x:"
prop=
"x"
>
<div
class=
"form-content"
>
<el-input
@
blur=
"formChange"
v-model=
"form.x"
></el-input>
...
...
@@ -155,7 +158,7 @@ export default {
</div>
</el-form-item>
</el-col>
<el-col
:span=
"
12
"
>
<el-col
:span=
"
8
"
>
<el-form-item
label=
"y:"
>
<div
class=
"form-content"
>
<el-input
@
blur=
"formChange"
v-model=
"form.y"
></el-input>
...
...
@@ -166,7 +169,19 @@ export default {
</div>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-col
:span=
"8"
>
<el-form-item
label=
"r:"
>
<div
class=
"form-content"
>
<el-input
maxlength=
"3"
@
blur=
"formChange"
v-model=
"form.r"
>
</el-input>
<div
class=
"set-value"
>
<i
@
click=
"addValue('r')"
class=
"el-icon-arrow-up"
></i>
<i
@
click=
"reduceValue('r')"
class=
"el-icon-arrow-down"
></i>
</div>
</div>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"w:"
>
<div
class=
"form-content"
>
<el-input
@
blur=
"formChange('w')"
v-model=
"form.w"
></el-input>
...
...
@@ -177,7 +192,7 @@ export default {
</div>
</el-form-item>
</el-col>
<el-col
:span=
"
12
"
>
<el-col
:span=
"
8
"
>
<el-form-item
label=
"h:"
>
<div
class=
"form-content"
>
<el-input
@
blur=
"formChange('h')"
v-model=
"form.h"
></el-input>
...
...
@@ -188,19 +203,8 @@ export default {
</div>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"r:"
>
<div
class=
"form-content"
>
<el-input
maxlength=
"3"
@
blur=
"formChange"
v-model=
"form.r"
>
</el-input>
<div
class=
"set-value"
>
<i
@
click=
"addValue('r')"
class=
"el-icon-arrow-up"
></i>
<i
@
click=
"reduceValue('r')"
class=
"el-icon-arrow-down"
></i>
</div>
</div>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-col
:span=
"8"
>
<el-form-item
label=
"z:"
>
<div
class=
"form-content"
>
<el-input
@
blur=
"formChange"
v-model=
"form.zIndex"
>
</el-input>
...
...
@@ -214,9 +218,12 @@ export default {
</div>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-col
:span=
"24"
style=
"display: flex;justify-content: space-between;padding:0 30px;"
>
<el-tooltip
content=
"居中"
>
<el-button
@
click=
"$emit('ev', 'center')"
size=
"mini
"
>
<el-button
@
click=
"$emit('ev', 'center')"
class=
"btn
"
>
<img
style=
"width: 13px;height: 13px"
src=
"@/static/icon/juzhong-01.png"
...
...
@@ -225,7 +232,7 @@ export default {
</el-button>
</el-tooltip>
<el-tooltip
content=
"垂直居中"
>
<el-button
@
click=
"$emit('ev', 'y_center')"
size=
"mini
"
>
<el-button
@
click=
"$emit('ev', 'y_center')"
class=
"btn
"
>
<img
style=
"width: 13px;height: 13px"
src=
"@/static/icon/vertical.png"
...
...
@@ -234,7 +241,7 @@ export default {
</el-button>
</el-tooltip>
<el-tooltip
content=
"水平居中"
>
<el-button
@
click=
"$emit('ev', 'x_center')"
size=
"mini
"
>
<el-button
@
click=
"$emit('ev', 'x_center')"
class=
"btn
"
>
<img
style=
"width: 13px;height: 13px"
src=
"@/static/icon/shuipingjuzhong.png"
...
...
@@ -243,7 +250,7 @@ export default {
</el-button>
</el-tooltip>
<el-tooltip
content=
"上移一层"
>
<el-button
@
click=
"$emit('ev', 'add_index')"
size=
"mini
"
>
<el-button
@
click=
"$emit('ev', 'add_index')"
class=
"btn
"
>
<img
style=
"width: 13px;height: 13px"
src=
"@/static/icon/shangyi.png"
...
...
@@ -252,7 +259,7 @@ export default {
</el-button>
</el-tooltip>
<el-tooltip
content=
"下移一层"
>
<el-button
@
click=
"$emit('ev', 'reduce_index')"
size=
"mini
"
>
<el-button
@
click=
"$emit('ev', 'reduce_index')"
class=
"btn
"
>
<img
style=
"width: 13px;height: 13px"
src=
"@/static/icon/xiayi.png"
...
...
@@ -264,13 +271,14 @@ export default {
</el-row>
</el-form>
</div>
<slot></slot>
<slot
name=
"content"
></slot>
</div>
</
template
>
<
style
lang=
"less"
scoped
>
.img-form
{
padding
:
10px
;
border
:
1px
solid
#ececec
;
}
::v-deep
{
...
...
@@ -288,7 +296,7 @@ export default {
.set-value
{
height
:
100%
;
margin-left
:
6px
;
//
margin-left
:
6px
;
i
{
width
:
20px
;
...
...
@@ -306,26 +314,36 @@ export default {
}
.drawer
{
width
:
3
00px
;
bottom
:
0
;
top
:
50px
;
width
:
4
00px
;
//
bottom
:
0
;
//
top
:
50px
;
padding
:
10px
;
z-index
:
99
;
//
z-index
:
99
;
background
:
white
;
box-shadow
:
0
8px
10px
-5px
rgba
(
0
,
0
,
0
,
0.2
),
0
16px
24px
2px
rgba
(
0
,
0
,
0
,
0.14
),
0
6px
30px
5px
rgba
(
0
,
0
,
0
,
0.12
);
left
:
0
;
position
:
fixed
;
//
left
:
0
;
//
position
:
fixed
;
border-right
:
1px
solid
#ececec
;
height
:
calc
(
100vh
-
50px
);
display
:
flex
;
flex-direction
:
column
;
//
animation
:
ltr-drawer-in
.3s
1ms
;
position
:
relative
;
z-index
:
1
;
.title
{
padding-bottom
:
10px
;
border-bottom
:
1px
solid
#ececec
;
//
font-weight
:
600
;
font-size
:
18px
;
margin-bottom
:
8px
;
//
border-bottom
:
1px
solid
#ececec
;
}
}
.btn
{
height
:
40px
;
width
:
60px
;
border-color
:
#c0c4cc
;
}
@keyframes
ltr-drawer-in
{
0
%
{
...
...
src/views/design/main/index.vue
View file @
f197473e
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